function [queue] = InitQueue(varargin) % function [queue] = InitQueue(varargin) % % Use this function to initialize a queue to run one or more matlab scripts % in parallel. % This can be used to efficiently run an openEMS parameter sweep in parallel % on multiple remote machines. % % Options: % DependPath: Add multiple paths, your script may depend on % UseOctave: Enable/Disable octave usage % MaxThreads: max. number of parallel executions % % Note: % - Currently only Linux/Unix is supported % - By default Octave is used to spawn parallel functions (saves % licenses), but this can be changed by: % [queue] = InitQueue('UseOctave', 0); % You may need to change this, if your script is not octave compatible % - To efficiently run openEMS in parallel, you need to run it on several % machines using a SSH.host_list setting --> See also RunOpenEMS % % Example: % %serial version: % for n=1:10 % % manipulate parameter etc. % [result1(n) result2(n)] = Parallel_Func_Name(param1, param2); % end % % %parallel version: % queue = InitQueue('DependPath',{'/opt/openEMS/CSXCAD/matlab', ... % '/opt/openEMS/openEMS/matlab'}); % for n=1:10 % % manipulate parameter etc. % queue = Add2Queue(queue, 'Parallel_Func_Name', {param1, param2}); % end % % % wait for all to finish % [queue] = FinishQueue(queue); % % % retrieve result % for n=1:numel(stub_sweep) % [result1(n) result2(n)] = ResultsQueue(queue,n); % end % % See also: Add2Queue, FinishQueue, ResultsQueue, RunOpenEMS, % RunOpenEMS_Parallel, FindFreeSSH % % openEMS matlab interface % ----------------------- % author: Thorsten Liebig if ~isunix error 'your OS is not supported (Unix only)' end queue.use_octave = exist('OCTAVE_VERSION','builtin') ~= 0; queue.verbose = 1; queue.maxThreads = Inf; % add current path queue.DependPath = ['addpath(''' pwd ''');']; for n=1:2:nargin if strcmp(varargin{n},'DependPath'); for m=1:numel(varargin{n+1}) queue.DependPath = [queue.DependPath 'addpath(''' varargin{n+1}{m} ''');']; end end if strcmp(varargin{n},'UseOctave'); queue.use_octave = varargin{n+1}; end if strcmp(varargin{n},'MaxThreads'); queue.maxThreads = varargin{n+1}; end end % set binaries and options if (queue.use_octave) queue.bin = ['export LD_LIBRARY_PATH=""; octave']; queue.bin_options = [' --silent --eval']; else queue.bin = [matlabroot '/bin/matlab']; queue.bin_options = [' -nodesktop -nosplash -r']; end queue.jobs_finished = [];