From 84a5b94a269289af6b17d235bdb604c26a8db7dc Mon Sep 17 00:00:00 2001 From: Remi Gau Date: Thu, 7 Jan 2021 12:07:51 +0100 Subject: [PATCH 1/2] make sure that when set to false parallel.do only uses 1 worker --- src/utils/manageWorkersPool.m | 13 ++++++- tests/test_manageWorkersPool.m | 70 ++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 tests/test_manageWorkersPool.m diff --git a/src/utils/manageWorkersPool.m b/src/utils/manageWorkersPool.m index 38f3dd28..7f5553bb 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..9ecb5f2e --- /dev/null +++ b/tests/test_manageWorkersPool.m @@ -0,0 +1,70 @@ +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 From e81402a67ded68fe1a639fcf1c2b15a2dba9fb2a Mon Sep 17 00:00:00 2001 From: Remi Gau Date: Thu, 7 Jan 2021 12:12:23 +0100 Subject: [PATCH 2/2] mh autofix --- src/utils/manageWorkersPool.m | 16 ++--- tests/test_manageWorkersPool.m | 115 ++++++++++++++++----------------- 2 files changed, 65 insertions(+), 66 deletions(-) diff --git a/src/utils/manageWorkersPool.m b/src/utils/manageWorkersPool.m index 7f5553bb..b5a8c08b 100644 --- a/src/utils/manageWorkersPool.m +++ b/src/utils/manageWorkersPool.m @@ -21,10 +21,10 @@ function manageWorkersPool(action, opt) % if ~opt.parallelize.do - opt.parallelize.nbWorkers = 1; - opt.parallelize.killOnExit = true; + opt.parallelize.nbWorkers = 1; + opt.parallelize.killOnExit = true; end - + if ~isOctave() matlabVer = version('-release'); @@ -61,11 +61,11 @@ function manageWorkersPool(action, opt) if opt.parallelize.killOnExit if str2double(matlabVer(1:4)) > 2013 - - pool = gcp('nocreate'); - if ~isempty(pool) - delete(gcp); - end + + pool = gcp('nocreate'); + if ~isempty(pool) + delete(gcp); + end else matlabpool close; diff --git a/tests/test_manageWorkersPool.m b/tests/test_manageWorkersPool.m index 9ecb5f2e..9754a9ea 100644 --- a/tests/test_manageWorkersPool.m +++ b/tests/test_manageWorkersPool.m @@ -1,70 +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; + 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) - - + + 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) - + + 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