我有一个非常简单的脚本,它调用内置的遗传算法函数:
function test1(gen)
options = gaoptimset('UseParallel', 'always', 'Vectorized', 'off');
tic;
x = ga(@dejong5fcn, 2, [], [], [], [], [], [], [], options);
toc
end首先,我在没有启动matlabpool的情况下运行test1。正如预期的那样,它运行良好,但与Windows资源监视器观察到的一样,它只使用了一个CPU核心。运行20020次健康评估需要4.2秒。然后,我用"start matlabpool local 4“启动了并行引擎,然后执行了一次相同的test1运行。它运行并使用所有四个CPU核心,但执行20020次健康评估大约需要90.7秒。
我对Matlab R2012a (在Windows764位上)中的并行性有什么不理解的地方?谢谢你的帮助。
发布于 2014-02-04 22:46:56
当您并行化一个算法时,在几个并行操作之间进行通信以及在它们之间来回传递数据时会产生开销。在这种情况下,您有相当多的相当小的操作,并且开销淹没了并行化带来的任何加速。
尝试将较少数量的较大操作并行化,您将看到更好的加速比。
顺便说一句,这就是UseParallel选项在默认情况下没有打开的原因。当您将其设置为true时,您将告诉并行计算工具箱,您知道问题将从并行化中受益(并不是所有问题都会受益),并且您正在授予它并行化算法的权限。
https://stackoverflow.com/questions/21542337
复制相似问题