我有一个非常简单的脚本,它调用内置的遗传算法函数:
function test1(gen)
options = gaoptimset('UseParallel', 'always', 'Vectorized', 'off');
tic;
x = ga(@dejong5fcn, 2, [], [], [], [], [], [], [], options);
toc
end
首先,我在没有启动matlabpool的情况下运行了test1。正如预期的那样,它运行正常,但只使用一个CPU核心,如Windows资源监视器所示。运行20020次健身评估需要4.2秒。然后,我启动并行引擎:“启动matlabpool local 4”,然后执行另外相同的test1运行。它运行并使用所有四个CPU核心,但执行20020次健身评估需要大约90.7秒。
我不了解Matlab R2012a(在Windows 7 64位上)的并行性?谢谢你的帮助。
答案 0 :(得分:1)
并行化算法时,在几个并行操作之间进行通信以及在它们之间来回传递数据时会产生开销。在这种情况下,您有相当多的相当小的操作,并且开销正在淹没并行化的任何加速。
尝试并行化较少数量的大型操作,您应该会看到更好的加速。
顺便说一句,这就是默认情况下UseParallel
选项未启用的原因。当您将其设置为true时,您告诉并行计算工具箱您知道问题将从并行化中受益(并非所有问题都可以),并且您授予其并行化算法的权限。