diff --git a/src/utils/manageWorkersPool.m b/src/utils/manageWorkersPool.m index 38f3dd28..b5a8c08b 100644 --- a/src/utils/manageWorkersPool.m +++ b/src/utils/manageWorkersPool.m @@ -20,7 +20,12 @@ function manageWorkersPool(action, opt) % opt.parallelize.killOnExit = true; % - if ~isOctave() && opt.parallelize.do + if ~opt.parallelize.do + opt.parallelize.nbWorkers = 1; + opt.parallelize.killOnExit = true; + end + + if ~isOctave() matlabVer = version('-release'); @@ -56,7 +61,11 @@ function manageWorkersPool(action, opt) if opt.parallelize.killOnExit if str2double(matlabVer(1:4)) > 2013 - delete(gcp); + + pool = gcp('nocreate'); + if ~isempty(pool) + delete(gcp); + end else matlabpool close; diff --git a/tests/test_manageWorkersPool.m b/tests/test_manageWorkersPool.m new file mode 100644 index 00000000..9754a9ea --- /dev/null +++ b/tests/test_manageWorkersPool.m @@ -0,0 +1,69 @@ +function test_suite = test_manageWorkersPool %#ok<*STOUT> + try % assignment of 'localfunctions' is necessary in Matlab >= 2016 + test_functions = localfunctions(); %#ok<*NASGU> + catch % no problem; early Matlab versions can use initTestSuite fine + end + initTestSuite; +end + +function test_manageWorkersPoolBasic() + + opt.parallelize.do = true; + opt.parallelize.nbWorkers = 3; + opt.parallelize.killOnExit = true; + + matlabVer = version('-release'); + + manageWorkersPool('close', opt); + + manageWorkersPool('open', opt); + + if ~isOctave() + if str2double(matlabVer(1:4)) > 2013 + + pool = gcp('nocreate'); + nbWorkers = pool.NumWorkers; + + else + nbWorkers = matlabpool('size'); %#ok + + end + + manageWorkersPool('close', opt); + + assertEqual(nbWorkers, opt.parallelize.nbWorkers); + + end + +end + +function test_manageWorkersPoolNoParallel() + + opt.parallelize.do = false; + opt.parallelize.nbWorkers = 3; + opt.parallelize.killOnExit = true; + + matlabVer = version('-release'); + + manageWorkersPool('close', opt); + + manageWorkersPool('open', opt); + + if ~isOctave() + if str2double(matlabVer(1:4)) > 2013 + + pool = gcp('nocreate'); + nbWorkers = pool.NumWorkers; + + else + nbWorkers = matlabpool('size'); %#ok + + end + + manageWorkersPool('close', opt); + + assertEqual(nbWorkers, 1); + + end + +end