PARALLEL PROCESSING ON MULTIPLE CORES

The latest Matlab releases (starting with R2007a) include support for multiple cores. However, Matlab will only take advantage of multiple cores in evaluating certain computations like an FFT or a FIR filtering operation. Matlab will never be able to determine if, for example, consecutive function calls in a for-loop are independent of each other. With this package, I provide some MATLAB-functions realizing parallel processing on multiple cores on a single machine or on multiple machines that have access to a common directory.

If you have multiple function calls that are independent of each other, and you can reformulate your code as

resultCell = cell(size(parameterCell));
for k=1:numel(parameterCell)
  resultCell{k} = myfun(parameterCell{k});
end

then, replacing the loop by

resultCell = startmulticoremaster(@myfun, parameterCell);

allows you to evaluate your loop in parallel in several processes. All you need to do in the other Matlab processes is to run

startmulticoreslave;

Please refer to the help comments in file startmulticoremaster.m for possible input arguments and more details about the parallelization works.

No special toolboxes are used, no compilation of mex-files is necessary, everything is programmed in plain and platform-independent Matlab. If one of your slave processes dies - don't care, the master process will go on working on the given task.

Please consider that the communication between the processes, which is done by using the file system, causes some overhead. Thus, you will only notice an improvement in speed if your function calls need considerable time, let say some seconds. However, if you have a huge number of function evaluations to be executed, where every function evaluation only needs a fraction of a second, you can still use this package. You will just have to write a small adapter function that gathers a number of function evaluations and let the multicore package parallelize the execution of that adapter function.

Note: The Matlab multithreading capability (R2007a and higher) might terminate all the advantage gained by using the multicore package. So make sure that you UNcheck "Enable multihreaded computation" under File/Preferences/General/Multithreading in all involved Matlab sessions.

Keywords: Parallel processing, distributed computing, multiple cores.

Functions contained in this package

startmulticoremaster.m
Takes the function handle (or a cell array of function handles) and the parameters and computes the output. Files containing information about which function to execute with which parameters are saved in a directory and read by the slave processes. The results saved by the slave processes are later read.

startmulticoreslave.m
Loads the files generated by function startmulticoremaster.m and evaluates the given function. Results are saved in files in the same directory.

multicoredemo.m and testfun.m
To get into the code, have a look at the demo. You can start it without input arguments for a demo on a multi-core machine, or with a common directory to use for a multi-machine demo.

setfilesemaphore.m, removefilesemaphore.m and deletewithsemaphores.m
A crucial thing is to avoid that several Matlab processes try to open/delete/write to a file at the same time. Using a simple semaphore technique, exclusive file access is guaranteed. Also here, no platform-dependent or C-programmed stuff is used.

existfile.m, existfile.c
Check if a file exists. To use the faster mex-file, type "mex -setup", select the builtin Lcc compiler and type "mex existfile.c" to compile the file. However, the package also works without using the mex-file.

findfiles.m
Returns a list of file names matching a given specification in a cell array.

getusername.m
Return the user name.

tempdir2.m
Return the name of a temporary directory.

Known Issues

If processing is cancelled by the user (Ctrl-C) and Matlab is caught just in saving/deleting a file, you might have to restart Matlab before the file can be deleted. Matlab seems not to release the file correctly (at least under Windows).

If you find any bugs or errors, please give me the chance to correct them and drop me an E-mail.

Contact

Dipl.-Ing. Markus Buehren
Stuttgart, Germany

mb_matlab@gmx.de
http://www.markusbuehren.de

Version

Last modified 13.11.2007
Latest version on Matlab Central.