Wrapper for embarrassingly parallel function evaluation. Runs "r=feval(funNm,jobs{i}{:})" for each job in a parallel manner. jobs should be a cell array of length nJob and each job should be a cell array of parameters to pass to funNm. funNm must be a function in the path and must return a single value (which may be a dummy value if funNm writes results to disk). Different forms of parallelization are supported depending on the hardware and Matlab toolboxes available. The type of parallelization is determined by the parameter 'type' described below. type='LOCAL': jobs are executed using a simple "for" loop. This implies no parallelization and is the default fallback option. type='PARFOR': jobs are executed using a "parfor" loop. This option is only available if the Matlab *Parallel Computing Toolbox* is installed. Make sure to setup Matlab workers first using "matlabpool open". type='DISTR': jobs are executed on the Caltech cluster. Distributed queuing system must be installed separately. Currently this option is only supported on the Caltech cluster but could easily be installed on any Linux cluster as it requires only SSH and a shared filesystem. Parameter pLaunch is used for controller('launchQueue',pLaunch{:}) and determines cluster machines used (e.g. pLaunch={48,401:408}). type='COMPILED': jobs are executed locally in parallel by first compiling an executable and then running it in background. This option requires the *Matlab Compiler* to be installed (but does NOT require the Parallel Computing Toolbox). Compiling can take 1-10 minutes, so use this option only for large jobs. (On Linux alter startup.m by calling addpath() only if ~isdeployed, otherwise will get error about "CTF" after compiling). Note that relative paths will not work after compiling so all paths used by funNm must be absolute paths. type='WINHPC': jobs are executed on a Windows HPC Server 2008 cluster. Similar to type='COMPILED', except after compiling, the executable is queued to the HPC cluster where all computation occurs. This option likewise requires the *Matlab Compiler*. Paths to data, etc., must be absolute paths and available from HPC cluster. Parameter pLaunch must have two fields 'scheduler' and 'shareDir' that define the HPC Server. Extra parameters in pLaunch add finer control, see fedWinhpc for details. For example, at MSR one possible cluster is defined by scheduler = 'MSR-L25-DEV21' and shareDir = '\\msr-arrays\scratch\msr-pool\L25-dev21'. Note call to 'job submit' from Matlab will hang unless pwd is saved (simply call 'job submit' from cmd prompt and enter pwd). USAGE [out,res] = fevalDistr( funNm, jobs, [varargin] ) INPUTS funNm - name of function that will process jobs jobs - [1xnJob] cell array of parameters for each job varargin - additional params (struct or name/value pairs) .type - ['local'], 'parfor', 'distr', 'compiled', 'winhpc' .pLaunch - [] extra params for type='distr' or type='winhpc' .group - [1] send jobs in batches (only relevant if type='distr') OUTPUTS out - 1 if jobs completed successfully res - [1xnJob] cell array containing results of each job EXAMPLE % Note: in this case parallel versions are slower since conv2 is so fast n=16; jobs=cell(1,n); for i=1:n, jobs{i}={rand(500),ones(25)}; end tic, [out,J1] = fevalDistr('conv2',jobs,'type','local'); toc, tic, [out,J2] = fevalDistr('conv2',jobs,'type','parfor'); toc, tic, [out,J3] = fevalDistr('conv2',jobs,'type','compiled'); toc [isequal(J1,J2), isequal(J1,J3)], figure(1); montage2(cell2array(J1)) See also matlabpool mcc Piotr's Computer Vision Matlab Toolbox Version 3.26 Copyright 2014 Piotr Dollar. [pdollar-at-gmail.com] Licensed under the Simplified BSD License [see external/bsd.txt]