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.