parfor与系统调用非常慢

时间:2018-08-19 04:16:43

标签: matlab parallel-processing system-calls parfor

我有一个看起来像这样的MATLAB循环:

S = zeros(20, 1);
for i = 1:1:20
  system(command)
  S(i) = fetch_results_of_command_from_file()
end

其中command是用于运行python命令的系统调用的字符串,fetch ...获取系统调用的结果,并将其推入返回向量S中。

一些细节:'command'调用python脚本。该脚本从文件中读取一些数据,然后执行优化过程,然后将结果写回到文件中。 python脚本很小-少于1,000行-并且位于共享磁盘上。所有命令都调用此命令,但是使用不同的输入数据-每个工作程序一个输入文件。优化本身是一个单线程。这些内核全部位于本地计算机上,该计算机具有40多个CPU,每个CPU有2个内核。

此循环的每次迭代都在大约2分钟内运行,一切都很好,但是很慢。

我在具有20多个内核的本地计算机上,因此我想这样并行化我的代码:

S = zeros(20, 1);
parfor i = 1:1:20
  system(command)
  S(i) = fetch_results_of_command_from_file()
end

似乎每个系统调用都可以部署到不同的处理器。我希望该循环在parfor循环上运行大约2分钟+一点开销,因为它可以尴尬地并行化。

不幸的是,没有超过10分钟的系统调用完成(甚至没有到达fetch命令)。不知何故,parfor正在减慢每个命令的速度,就好像它是串行调用一样。我确实安装了并行工具箱,所以这不应该是问题。可能会发生什么?

0 个答案:

没有答案