# Matlab

## Description

MATLAB is a programming environment for algorithm development, data analysis, visualization, and numerical computation. Using MATLAB, you can solve technical computing problems faster than with traditional programming languages, such as C, C++, and Fortran.

You can use MATLAB in a wide range of applications, including signal and image processing, communications, control design, test and measurement, financial modeling and analysis, and computational biology. For a million engineers and scientists in industry and academia, MATLAB is the language of technical computing.

## Restrictions

Because we are restricted to using only compiled versions of MATLAB programs, we are restricted to which toolboxes can be incorporated and used on the system. The full list of toolboxes is on the MATLAB website:

## Required Modules

### Serial

- matlab

## System Variables

- HPC_MATLAB_DIR - installation directory

## Additional Information

## Policies

- You may not run MatLab nor compiled MatLab executables interactively on the login servers (gator1 or gator2).
- You must use the development servers (dev1 or dev2) to test and compile your MatLab programs.
- Long running (more than 30 minutes) MatLab jobs must be submitted to the batch system.
- Large numbers of jobs must not be run on the development servers, but must be submitted to the batch system.
- UF Research Computing has no budget for application software and licensing. All MatLab licenses (including the compiler) come from, and are shared with, all of campus. For this reason it is sometimes difficult to obtain a license. If your research depends on MatLab and you do not want to be delayed by licensing issues, you should consider purchasing a MatLab license for your personal or group use.

## Compiling MatLab Programs

MatLab programs must be compiled via the MatLab compiler before they can be run in batch mode on HiPerGator.

In order to compile MatLab programs you should

1. Once on gator1 or gator2, log into one of the development servers (dev1 or dev2) via ssh. Due to user memory constraints on gator1 and gator2, the MatLab compiler cannot be used on those servers.

gator1% ssh dev2

2. Set up your environment so that the libraries needed by the compiler can be found.

dev2% module load matlab

**Note:** The module load command should be included in your batch submission script as well since your compiled matlab executable will also need to find the appropriate dynamically loaded libraries.

3a. For batch jobs, you should also set the MCR_CACHE_ROOT environment variable in your PBS job script.

dev2% export MCR_CACHE_ROOT=${TMPDIR}

3b. For an interactive run (only on the development servers), you should set MCR_CACHE_ROOT to a directory /scratch/local.

dev2% mkdir -p /scratch/local/$USER/mcr_cache dev2% export MCR_CACHE_ROOT=/scratch/local/$USER/mcr_cache

4. Compile your matlab program (.m) files using the MatLab compiler (mcc).

dev2% mcc -R -singleCompThread -m some_prog.m

### Example

Let us say that we have a program such as that below in a source file named houdini.m

function [m,t] = houdini(); % Doc example, chapter 3. % Copyright 1997 The MathWorks, Inc. % $Revision: 1.1.6.1 $ m = magic(2); % Assign 2x2 matrix to m. t = m .^ 3; % Cube each element of m. disp(t); % Display the value of t.

Since we already have the environment setup, we can compile this program. It is recommended that this be done in a separate directory as a number of files are produced.

mkdir tmp cd tmp cp ../houdini.m . module load matlab mcc -R -singleCompThread -m houdini.m ls -l total 124 -rwxr-xr-x 1 root root 12299 Apr 3 10:08 houdini -rw-r--r-- 1 root root 63146 Apr 3 10:08 houdini.ctf -rw-r--r-- 1 root root 239 Apr 3 10:06 houdini.m -rw-r--r-- 1 root root 2900 Apr 3 10:08 houdini_main.c -rw-r--r-- 1 root root 6328 Apr 3 10:08 houdini_mcc_component_data.c -rw-r--r-- 1 root root 5461 Apr 3 10:08 houdini.prj -rw-r--r-- 1 root root 1010 Apr 3 10:08 mccExcludedFiles.log -rw-r--r-- 1 root root 6757 Apr 3 10:08 readme.txt -rwxr--r-- 1 root root 1446 Apr 3 10:08 run_houdini.sh

The MatLab executable **houdini** has been generated.

**Note:** The "`-R -singleCompThread`

" options on the mcc command line will result in a **single-threaded** executable. By default, multi-threading is enabled in executables produced by mcc. The result is that one computational thread will be started for each processor in a machine that runs your executable. That's not usually what you want. Unless you know what you are doing and intend to take advantage of multithreading (including requesting the appropriate resources in your submission script) you should use these options and generate a **single-threaded** executable. Otherwise, your MatLab jobs will oversubscribe the compute nodes and interfere with other users' programs.

MatLab Compiler Documentation can be found on the MatLab Website.

### Available components

See the Matlab add-ons for a full list of licensed Matlab components.

### Compiled DLL

If you have compiled a DLL to use as an executable, it will not run on the cluster. DLL's are Microsoft Windows based dynamically linked libraries that will only work under the Windows operating system.

### Setting a Command Path

To set a command path in your MatLab program, should add the following code.

path(path, '/path/to/matlab/binaries')

This will add the specified directory to the matlab search path. For more information see the Matlab web site.

## Known Issues

### No Licenses Available

You may run into an error when using the MatLab compiler such as

**Licensed number of users already reached.**

If so, the number of licenses available for the MatLab compiler has been exceeded. There are only two shared among the entire university so you should expect to see this problem from time to time if you use the MatLab compiler frequently. If the problem persists for more than a few hours, please file a support request.

### MCR_CACHE_ROOT Directory

**Could not access the MCR component cache**

This error message means that MatLab is not able to access the MCR cache directory which, by default, is created by MatLab in your home directory. If you are running a large number of MatLab jobs, the file locking used by MatLab to manage concurrent access to files in the MCR_CACHE_ROOT directory can generate a significant load on the file system on which these files reside. Thus, we ask that you use a **local scratch** directory for your MCR_CACHE_ROOT directory. To do so, set the value of MCR_CACHE_ROOT to $TMPDIR in your job submission script.

export MCR_CACHE_ROOT=$TMPDIR

## Interactive Use

See GUI_Programs for information on running the matlab GUI interface for short debugging sessions.