在使用 Parfor 时,由于每个迭代都是独立的,因此不能使用临时变量。如果需要在迭代中使用临时变量,可以将其转换为局部变量或使用 SPMD 块。

  1. 将临时变量转换为局部变量

可以将临时变量转换为 Parfor 循环内部的局部变量,这样每个迭代都有自己的变量副本,不会相互干扰。例如:

parfor i = 1:N
    temp = a(i) + b(i);
    result(i) = temp;
end

可以改写为:

parfor i = 1:N
    local_a = a(i);
    local_b = b(i);
    result(i) = local_a + local_b;
end
  1. 使用 SPMD 块

SPMD 块可以让多个工作进程在同一时间执行相同的代码,并且可以共享变量。在 SPMD 块中,可以使用临时变量,因为它们是在工作进程之间共享的。例如:

spmd
    temp = a + b;
end

result = temp{1};

在这个例子中,临时变量 temp 被定义在 SPMD 块中,可以在工作进程之间共享。最后,将 temp 的值从工作进程中提取出来并赋给 result。

Parfor 临时变量问题解决方法:局部变量与 SPMD 块

原文地址: https://www.cveoy.top/t/topic/jG5t 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录