MATLAB如何为变量赋值并在parfor循环中打印到文件

时间:2015-05-14 16:19:55

标签: arrays matlab file-io parallel-processing parfor

我有一个parfor循环遍历i = 1:250,根据索引从数组中获取三个值。然后使用这3个值在parfor循环内进行计算。然后,我将结果存储在变量theta1theta2theta3中,并立即将它们打印到文件中。我正在并行化,因为计算花费了太多时间,并且对于每个索引,它们可以独立完成。我想MATLAB不一定会通过让工人计算独立迭代来划分工作,但它可以在工人之间划分给定的迭代。在任何一种情况下,对变量的值赋值或对文件的打印是否会受到操作完成顺序的影响?是否有可能以不同的顺序打印结果,如:

theta1 from i = 1
theta1 from i = 2
theta2 from i = 2
theta3 from i = 2
theta2 from i = 1
...

而不是所需的顺序,即:

theta1 from i = 1 
theta2 from i = 1
theta3 from i = 1
theta1 from i = 2
theta2 from i = 2
...

在单元格数组中收集所有结果然后在最后打印它们会更健康吗?

1 个答案:

答案 0 :(得分:2)

拥有外部parfor循环意味着函数所查看的i的值不能保证为1,2,3等。但theta1theta2theta3变量INSIDE parfor循环将按其内部parfor循环内的顺序计算。因此,唯一能保证的是,对于给定的i值,theta1将首先完成,然后theta2,然后theta3。工作者本身(i循环)是交错的,因此完全有可能得到结果

theta1 from i = 1 
theta1 from i = 2 
theta2 from i = 2
theta3 from i = 2
theta2 from i = 1
...

在任何情况下,打印到parfor循环内的文件都会导致问题,因为可能是两个工作者正在尝试同时写入文件。这意味着你将失去"一些计算的结果。 MATLAB方式(如果存在这样的事情......)可以更好地保存数组或单元阵列中parfor循环的所有结果(常规数组更适合内存原因,因为不需要整个单元阵列在所有parfor循环中共享;但是单元格数组更容易包围原型并在最后将其打印到文件中。