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

How does MATLAB assign values to a variable and print to file in a parfor loop

我有一个 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
...

将所有结果收集到一个元胞数组中,然后在最后打印它们是否更健康?

具有外部 parfor 循环意味着 i 函数查看的值不能保证为 1、2、3 等。但是,theta1theta2, theta3 parfor 循环内的变量将按照它们在内部 parfor 循环内的顺序进行计算。所以你唯一可以保证的是,对于给定的值 itheta1 将首先完成,然后是 theta2,然后是 theta3。工人本身(i 循环)是交错的,所以你完全有可能得到结果

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

在任何情况下,在 parfor 循环中打印到一个文件都会导致问题,因为可能是两个工作人员试图同时写入该文件。这意味着您将从某些计算中得到 "lose" 结果。 MATLAB 方法(如果有这样的事情......)可以更好地将 parfor 循环的所有结果保存在数组或元胞数组中(出于内存原因,常规数组更好,因为不需要整个元胞数组在所有 parfor 循环中共享;但元胞数组更容易让您全神贯注进行原型设计)并在最后将其打印到文件中。