Differences between revisions 28 and 44 (spanning 16 versions)
Revision 28 as of 2013-03-14 16:43:40
Size: 6161
Editor: maegger
Comment:
Revision 44 as of 2022-05-09 08:44:48
Size: 9338
Editor: stroth
Comment: Explain different available versions and highlight matching compiler version with runtime
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
#rev 2020-09-02 davidsch
#rev 2018-08-28 davidsch
Line 7: Line 10:
 * Start it on Linux: Applications - Accessories - Terminal. Then type: matlab (Enter)
 * Start it on Windows: Start - Matlab - Matlab
 * Start it on Linux (example for GNOME desktop): Type "terminal" in the search field, then click the Terminal icon. Then, type in the opened terminal window, "matlab" (Enter).
 * Start it on Windows: Start menu - Matlab - Matlab. You may also use the search function, entering "matlab" in the search field.

=== Available versions ===
Matlab is provided through the [[https://www.sepp.ee.ethz.ch/|SEPP package system|]]. There are several versions available which can be listed on the command line with
`sepp |grep -E '^IL matlab'`:
{{{
IL matlab-2021b-fg 2021-12-14 Application for interactive scientific computation
IL matlab-2020b-me 2021-01-19 Application for interactive scientific computation
IL matlab-2019b-fg 2019-12-20 Application for interactive scientific computation
IL matlab-2018b-fg 2018-10-25 Application for interactive scientific computation
...
}}}
Typing `matlab` on the command line and pressing `TAB` for autocompletion shows available versions as well:
{{{
matlab matlab-2017b matlab-2018b-fg matlab-2021b matlab-8.3r2014a-fg
matlab-2015b matlab-2017b-fg matlab-2019b matlab-2021b-fg
matlab-2015b-fg matlab-2018a matlab-2019b-fg matlab-7.14r2012a
matlab-2016b matlab-2018a-sd matlab-2020b matlab-7.14r2012a-bs
matlab-2016b-fg matlab-2018b matlab-2020b-me matlab-8.3r2014a
}}}
The command `matlab` without any suffix points to the current '''default''' version of Matlab. Which version this is can be shown with the following command sequence:
{{{#!highlight bash numbers=disable
matlab -nodisplay -nojvm -r "disp(version('-release')); exit" |grep -E '^[0-9]{4}[ab]{1}$'
}}}
Line 14: Line 40:
 * mcc (both: UNIX and Windows) is the MATLAB Compiler. You can use the mcc command either from the MATLAB command prompt or the command-line
 * The advantage of a compiled matlab program is, that no matlab license is taken from the ETH-licenses.
 * `mcc` (both: UNIX and Windows) points to the default MATLAB Compiler. You can use the `mcc` command either from the MATLAB command prompt or the command-line
 * The advantage of a compiled matlab program is, that no matlab license is taken from the ETH-licenses. This means that you should prefer to compile matlab programs for which you intend to run many instances (e.g. hundreds, in a distributed computing setup for instance). If you do not compile the programs, one license is checked out on the ETH server for each Matlab instance you are running. As the overall amount of licenses on the ETH server is limited, checking out hundreds of licenses for a distributed computing job could lead to a license shortage, meaning that you and other users at ETH cannot start new matlab instances, until some allocated licenses are released.
Line 21: Line 47:
A magic square is an array of integers arranged so that their sum is the same when added vertically, horizontally, or diagonally. Copy the following code in a text-file and save it as magicsquare.m

{{{
A magic square is an array of integers arranged so that their sum is the same when added vertically, horizontally, or diagonally. Copy the following code in a text-file and save it as `magicsquare.m`: {{{
Line 35: Line 58:
}}}
Line 36: Line 60:
 }}} Important: When this program is executed in a Linux terminal, we have to use the function `str2num` (string to number). Arguments are used as strings, that's why they have to be converted into a number in Matlab.
Line 38: Line 62:
Important: When this programm is runned in a Linux-Terminal, we have to use the function str2num (string to number). Arguments are used as strings, thats why they have to be converted in a number in Matlab. Compile the `magicsquare` function (with the command: `mcc`) in a Linux terminal.
 * Open a terminal and change to the directory where you stored `magicsquare.m`, then enter: {{{
mcc -mv magicsquare.m
}}}
Line 40: Line 67:
Compile the magicsqure function (with the command: mcc) in a Linux-Terminal
 * Start a Terminal (Applications - Accessoires - Terminal) and change to the directory where you stored magicsquare.m
 {{{
mcc -mv magicsquare.m
 }}}
 * This will generate two files: `magicsquare` and `run_magicsquare.sh`
  * `magicsquare` is the main file of the application.
  * `run_magicsquare.sh` is the script to start the application. It sets up the MCR (MATLAB Compiler Runtime) environment for the current platform architecture (`$ARCH`) and executes the specified command.
Line 46: Line 71:
 * This generates you 2 files: magicsquare and run_magicsquare.sh
  * magicsquare is the main file of the application.
  * run_magicsquare.sh is the script to start the application. It sets up the MCR (MATLAB Compiler Runtime) environment for the current $ARCH and executes the specified command.

To run the magicsquare programm we give the shell-script 2 arguments. The first is the path to the Matlab Compiler Runtime.

'''Important:''' The version of the compiler Runtime needs to be same that was used by the compiler mcc.

The second argument in this example is for the programm magicsquare itself.

 {{{
 ./run_magicsquare.sh /usr/pack/matlab-7.13r2011b-sd 5
To run the `magicsquare` program we give the shell script two arguments. The first is the path to the Matlab Compiler Runtime. The second argument in this example is an application-specific param for the program `magicsquare` itself.<<BR>>
/!\ '''Important:''' The version of the compiler Runtime needs to be same that was used by the compiler `mcc`. If you used the default of `mcc`, the version of the default runtime can be passed with
{{{#!highlight bash numbers=disable
./run_magicsquare.sh /usr/pack/$(matlab -nodisplay -nojvm -r "disp(version('-release')); exit" |grep -E '^[0-9]{4}[ab]{1}$')
}}}
Or typed directly if you know the version:
{{{
> ./run_magicsquare.sh /usr/pack/matlab-2021b-fg 5
Line 61: Line 82:
LD_LIBRARY_PATH is .:/usr/pack/matlab-7.13r2011b-sd/runtime/glnxa64:/usr/pack/matlab-7.13r2011b-sd/bin/glnxa64:/usr/pack/matlab-7.13r2011b-sd/sys/os/glnxa64:/usr/pack/matlab-7.13r2011b-sd/sys/java/jre/glnxa64/jre/lib/amd64/native_threads:/usr/pack/matlab-7.13r2011b-sd/sys/java/jre/glnxa64/jre/lib/amd64/server:/usr/pack/matlab-7.13r2011b-sd/sys/java/jre/glnxa64/jre/lib/amd64/client:/usr/pack/matlab-7.13r2011b-sd/sys/java/jre/glnxa64/jre/lib/amd64 LD_LIBRARY_PATH is .:/usr/pack/matlab-2021b-fg/runtime/glnxa64:/usr/pack/matlab-2021b-fg/bin/glnxa64:/usr/pack/matlab-2021b-fg/sys/os/glnxa64:/usr/pack/matlab-2021b-fg/sys/opengl/lib/glnxa64
Line 71: Line 92:
 }}} }}}
Line 73: Line 94:
More help on mcc: Enter on commandline: mcc -help
More help on `mcc`: Enter on commandline: `mcc -help`
Line 77: Line 99:
= Matlab on the cluster =
 * Every Matlab-Job on the Cluster uses one license. Therefore its very important, to run only compiled Matlab-Applications on the cluster.
 * Set the variable MCR_CACHE_ROOT to a directory on your local computer. The NFS-Load on the Homeservers gets too big for the homedirectory.
 {{{
= Matlab on the cluster (Condor, Slurm) =
 * Every Matlab-Job on the cluster uses one license. Therefore its very important, to run only compiled Matlab applications on the cluster.
 * Don't expand the Matlab search path with a large number of directories on NFS-mounted resources such as your home directory. Don't use the matlab function `genpath` to expand the Matlab search path.
 * Set the environment variable `MCR_CACHE_ROOT` to a directory on your local computer (with `MCR_ROOT_CACHE` pointing to your (NFS-)home directory, the load on the home servers becomes too high: {{{
Line 83: Line 105:
 }}}
If you get the error message: "Could not access MCRcomponent cache", you have to make it unique (make shure no other user is using the same path) and check the accessibility of this path.
}}} If you get the error message: "Could not access MCRcomponent cache", you need to make sure the path where `MCR_ROOT_CACHE` points to is used solely by your MATLAB instance (and not other instances, e.g. from other users). Also make sure you have the right to access the path you've set with `MCR_ROOT_CACHE`.
Line 86: Line 107:
 * Use the following Options of mcc when compiling:    {{{  * Use the following options for `mcc` when compiling: {{{
Line 89: Line 109:
 }}} }}}
Line 91: Line 111:
 * -R -singleCompThread: Limits MATLAB to a single computational thread. By default, MATLAB makes use of the multithreading capabilities of the computer on which it is running.
 * -R -nodisplay: Do not display any X-Windows or X-commands
 * -R nojvm: Start MATLAB without the JVM software. Any tools that require Java software, such as the desktop tools, cannot be used. Handle Graphics and related functionality are not supported; MATLAB produces a warning when you use them. If you need to use Java software, you can run mcc without this option.
 * `-R -singleCompThread`: Limits MATLAB to a single computational thread. By default, MATLAB makes use of the multithreading capabilities of the computer on which it runs.
 * `-R -nodisplay`: Do not display any X windows or X commands.
 * `-R nojvm`: Start MATLAB without the JVM software. Any tools that require Java software, such as the desktop/ GUI tools, cannot be used. Handle graphics and related functionality are not supported; MATLAB produces a warning when you use them. If you need to use Java software, you can run `mcc` without this option.
Line 95: Line 115:
= Limited amount of licenses =
The number of MATLAB licences is limited. To ensure a fair and efficient usage of the licences throughout the ETH the following measures have been put in place:
 * licences will be returned if not used for 4 hours
 * excessive usage of licences will be monitored and users will be asked to return licences if needed
= Limited amount of MATLAB licenses =
Line 100: Line 117:
== What can you do? ==
 1. Compile your MATLAB program. The best approach to avoid excessive usage of MATLAB licences is to compile your MATLAB program. The resulting executable does not need ANY MATLAB licence! This frees you from all MATLAB licence restrictions and also allows you to provide your executable to users without a MATLAB installation.
 1. Exit MATLAB when finished. Only then will all used licences be given back.
 1. Register the need for many MATLAB licences due to a MATLAB course by registering your need in advance, there can be taken countermeasures and ensure that these licences are available. Use the ides contact forumular therefore: https://idts.ethz.ch/hdweb/ (Nethz-login required)
 1. Buy your own MATLAB licences if you must have a guaranteed 24/7 service or if you need to use an excessive amount of licences.
The number of MATLAB licenses is limited. To ensure a fair and efficient usage of the (site-)licenses throughout the ETH, the following measures have been put in place:
 * Matlab instances being idle for more than four hours will return their allocated license to the license pool
 * Excessive usage of licenses will be monitored and users will be asked to return licenses if needed
Line 106: Line 121:
== How do I know which MATLAB licences I use? ==
 * The MATLAB command "license('inuse')" lists the licences checked out for the current MATLAB session.
== How to avoid allocating too many MATLAB licenses? ==

 1. '''Compile''' your MATLAB program. The best approach to avoid excessive usage of MATLAB licenses is to compile your MATLAB program. The resulting executable does not need ANY MATLAB licenses! This frees you from all MATLAB license restrictions and also allows you to provide your executable to users without a MATLAB installation.
 1. '''Exit''' MATLAB after finishing your work. Only exiting matlab will really release all allocated licenses.
 1. '''Announce''' the need for many MATLAB licenses, e.g. due to a MATLAB course, by registering your need in advance. Countermeasures can be taken in this case by the IT department which ensure that the requested amount of licenses will available. Use the IDES contact form therefore: https://idts.ethz.ch/hdweb/ (Nethz-login required)
 1. '''Buy your own''' MATLAB licenses if you must have a guaranteed 24/7 license availability or if you need constantly an excessive amount of licenses.

== How do I know which MATLAB licenses I use? ==
 * The MATLAB command `license('inuse')` lists the licenses allocated for the current MATLAB session.
Line 109: Line 131:
== How do I know how many MATLAB licences are used by whom? ==
 * You can list all checked-out MATLAB licences with the following command on Linux:
 {{{
== How do I know how many MATLAB licenses are used by whom? ==
 * You can list all checked out MATLAB base licenses using the following command on Linux: {{{
 lmutil lmstat -c 1965@lic-matlab.ethz.ch -f MATLAB | less
}}}
 * MATLAB base licenses and all Toolbox licenses are listed using the following command: {{{
Line 113: Line 137:
 }}} }}}

----
[[CategoryBTCH]]

Matlab

Matlab is a high-level language and interactive environment for numerical computation, visualization, and programming.

Start Matlab

  • Start it on Linux (example for GNOME desktop): Type "terminal" in the search field, then click the Terminal icon. Then, type in the opened terminal window, "matlab" (Enter).
  • Start it on Windows: Start menu - Matlab - Matlab. You may also use the search function, entering "matlab" in the search field.

Available versions

Matlab is provided through the SEPP package system. There are several versions available which can be listed on the command line with sepp |grep -E '^IL matlab':

IL matlab-2021b-fg    2021-12-14  Application for interactive scientific computation
IL matlab-2020b-me    2021-01-19  Application for interactive scientific computation
IL matlab-2019b-fg    2019-12-20  Application for interactive scientific computation
IL matlab-2018b-fg    2018-10-25  Application for interactive scientific computation
...

Typing matlab on the command line and pressing TAB for autocompletion shows available versions as well:

matlab                matlab-2017b          matlab-2018b-fg       matlab-2021b          matlab-8.3r2014a-fg
matlab-2015b          matlab-2017b-fg       matlab-2019b          matlab-2021b-fg
matlab-2015b-fg       matlab-2018a          matlab-2019b-fg       matlab-7.14r2012a
matlab-2016b          matlab-2018a-sd       matlab-2020b          matlab-7.14r2012a-bs
matlab-2016b-fg       matlab-2018b          matlab-2020b-me       matlab-8.3r2014a

The command matlab without any suffix points to the current default version of Matlab. Which version this is can be shown with the following command sequence:

matlab -nodisplay -nojvm -r "disp(version('-release')); exit" |grep -E '^[0-9]{4}[ab]{1}$'

First Steps

Matlab has a lot of tutorials by its own. You can find them in Matlab: Help - Product Help - User Guides

Matlab Compiler

  • mcc (both: UNIX and Windows) points to the default MATLAB Compiler. You can use the mcc command either from the MATLAB command prompt or the command-line

  • The advantage of a compiled matlab program is, that no matlab license is taken from the ETH-licenses. This means that you should prefer to compile matlab programs for which you intend to run many instances (e.g. hundreds, in a distributed computing setup for instance). If you do not compile the programs, one license is checked out on the ETH server for each Matlab instance you are running. As the overall amount of licenses on the ETH server is limited, checking out hundreds of licenses for a distributed computing job could lead to a license shortage, meaning that you and other users at ETH cannot start new matlab instances, until some allocated licenses are released.

How to use Matlab Compiler on Linux

This section shows an example on how to use MATLAB Compiler to code and build standalone applications.

Magic Square Example

A magic square is an array of integers arranged so that their sum is the same when added vertically, horizontally, or diagonally. Copy the following code in a text-file and save it as magicsquare.m:

function m = magicsquare(n)
%MAGICSQUARE generates a magic square matrix of the size
% specified by the input parameter n.
% Copyright 2003-2011 The MathWorks, Inc.

if ischar(n)
    n=str2num(n);
end
m = magic(n);
m

Important: When this program is executed in a Linux terminal, we have to use the function str2num (string to number). Arguments are used as strings, that's why they have to be converted into a number in Matlab.

Compile the magicsquare function (with the command: mcc) in a Linux terminal.

  • Open a terminal and change to the directory where you stored magicsquare.m, then enter:

    mcc -mv magicsquare.m
  • This will generate two files: magicsquare and run_magicsquare.sh

    • magicsquare is the main file of the application.

    • run_magicsquare.sh is the script to start the application. It sets up the MCR (MATLAB Compiler Runtime) environment for the current platform architecture ($ARCH) and executes the specified command.

To run the magicsquare program we give the shell script two arguments. The first is the path to the Matlab Compiler Runtime. The second argument in this example is an application-specific param for the program magicsquare itself.
/!\ Important: The version of the compiler Runtime needs to be same that was used by the compiler mcc. If you used the default of mcc, the version of the default runtime can be passed with

./run_magicsquare.sh /usr/pack/$(matlab -nodisplay -nojvm -r "disp(version('-release')); exit" |grep -E '^[0-9]{4}[ab]{1}$')

Or typed directly if you know the version:

> ./run_magicsquare.sh /usr/pack/matlab-2021b-fg 5
------------------------------------------
Setting up environment variables
---
LD_LIBRARY_PATH is .:/usr/pack/matlab-2021b-fg/runtime/glnxa64:/usr/pack/matlab-2021b-fg/bin/glnxa64:/usr/pack/matlab-2021b-fg/sys/os/glnxa64:/usr/pack/matlab-2021b-fg/sys/opengl/lib/glnxa64

m =

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

More help on mcc: Enter on commandline: mcc -help

Or see the Matlab-Documentation in Matlab: Help - Product Help - Matlab Compiler

Matlab on the cluster (Condor, Slurm)

  • Every Matlab-Job on the cluster uses one license. Therefore its very important, to run only compiled Matlab applications on the cluster.
  • Don't expand the Matlab search path with a large number of directories on NFS-mounted resources such as your home directory. Don't use the matlab function genpath to expand the Matlab search path.

  • Set the environment variable MCR_CACHE_ROOT to a directory on your local computer (with MCR_ROOT_CACHE pointing to your (NFS-)home directory, the load on the home servers becomes too high:

     mkdir -p /tmp/$USER
     export MCR_CACHE_ROOT=/tmp/$USER

    If you get the error message: "Could not access MCRcomponent cache", you need to make sure the path where MCR_ROOT_CACHE points to is used solely by your MATLAB instance (and not other instances, e.g. from other users). Also make sure you have the right to access the path you've set with MCR_ROOT_CACHE.

  • Use the following options for mcc when compiling:

     mcc -m -R -singleCompThread -R -nodisplay -R -nojvm foo.m
  • -R -singleCompThread: Limits MATLAB to a single computational thread. By default, MATLAB makes use of the multithreading capabilities of the computer on which it runs.

  • -R -nodisplay: Do not display any X windows or X commands.

  • -R nojvm: Start MATLAB without the JVM software. Any tools that require Java software, such as the desktop/ GUI tools, cannot be used. Handle graphics and related functionality are not supported; MATLAB produces a warning when you use them. If you need to use Java software, you can run mcc without this option.

Limited amount of MATLAB licenses

The number of MATLAB licenses is limited. To ensure a fair and efficient usage of the (site-)licenses throughout the ETH, the following measures have been put in place:

  • Matlab instances being idle for more than four hours will return their allocated license to the license pool
  • Excessive usage of licenses will be monitored and users will be asked to return licenses if needed

How to avoid allocating too many MATLAB licenses?

  1. Compile your MATLAB program. The best approach to avoid excessive usage of MATLAB licenses is to compile your MATLAB program. The resulting executable does not need ANY MATLAB licenses! This frees you from all MATLAB license restrictions and also allows you to provide your executable to users without a MATLAB installation.

  2. Exit MATLAB after finishing your work. Only exiting matlab will really release all allocated licenses.

  3. Announce the need for many MATLAB licenses, e.g. due to a MATLAB course, by registering your need in advance. Countermeasures can be taken in this case by the IT department which ensure that the requested amount of licenses will available. Use the IDES contact form therefore: https://idts.ethz.ch/hdweb/ (Nethz-login required)

  4. Buy your own MATLAB licenses if you must have a guaranteed 24/7 license availability or if you need constantly an excessive amount of licenses.

How do I know which MATLAB licenses I use?

  • The MATLAB command license('inuse') lists the licenses allocated for the current MATLAB session.

How do I know how many MATLAB licenses are used by whom?

  • You can list all checked out MATLAB base licenses using the following command on Linux:

     lmutil lmstat -c 1965@lic-matlab.ethz.ch -f MATLAB | less
  • MATLAB base licenses and all Toolbox licenses are listed using the following command:

     lmutil lmstat -c 1965@lic-matlab.ethz.ch -a | less


CategoryBTCH

Programming/Matlab (last edited 2022-05-09 08:44:48 by stroth)