Setting maximum number of computational threads for GridEngine

By default MATLAB tries to use all the cores on the node to to run computational threads. MATLAB runs more threads, but you can clearly identify the computational threads by the CPU time consumed, e.g., using top command. You can turn this off with the -singleCompThread option when you start MATLAB (or compile MATLAB). This is the recommended way to run high throughput MATLAB jobs.

In some cases, you may find the job runs better with 4 or 5 comp threads, with diminishing returns using more threads. By restricting the thread count to 4 or 5 you can run 5 or 4 jobs on one node (with at least 20 cores) with little contention for resource. This is done using the maxNumCompThreads function.

The following MATLAB statements, at the beginning of your MATLAB script, will read the number of slots from the NSLOTS environment variable, and used the value to set the maximum number of computational threads.

[compThreads,count]=sscanf(getenv('NSLOTS'),'%d');
if count == 1
  warning('off','MATLAB:maxNumCompThreads:Deprecated');
  autoCompThreads = maxNumCompThreads(compThreads);
end

The NSLOTS is automatically set when you use qsub. This way your MATLAB job will never use more cores than Grid Engine has assigned to you. The NSLOTS is not set for qlogin, so you need to set and export it explicitly when using interactive MATLAB.

You may be able to use the program sge-src to get the NSLOTS resource you used on you qlogin command. This is currently available on Farber, but not Mills. On Farber, you could add the following bash function to your .bashrc file
# added 16 Mar 2016 to setup interactive MATLAB
function matlab-setup {
  vpkg_require matlab/r2015a
  eval "$(/opt/shared/univa/local/sge-rsrc --mode=userenv --only --jobid=$JOB_ID)"
  export NSLOTS="$SGE_RESOURCE_NSLOTS"
}