Main Content

本页采用了机器翻译。点击此处可查看英文原文。

广播变量

广播变量是除循环变量或分段变量之外的任何在循环内不会改变的变量。在 parfor 循环开始时,MATLAB® 将任何广播变量的值发送给所有工作进程。在这个例子中,MATLAB 将 AB 的值发送给所有工作进程。

A = 5;
B = 10;
C = 0;
parfor i = 1:10
    if i == A
        C = C + B;
    end
end

性能注意事项

拥有较大的广播变量或许多广播变量可能会导致客户端与其相关工作进程之间的大量通信并增加开销。当广播变量导致的通信开销很大时,请考虑在循环内创建和分配临时变量。相反,如果由于创建和分配临时变量而导致的计算开销很大,请考虑使用广播变量。

有关更多详细信息,请参阅 临时变量决定何时使用 parfor

注意

当多个 parfor 循环需要访问相同的常量数据集时,您可以使用 parallel.pool.Constant 来提高代码的性能,它仅将数据传输给工作进程一次,而不是在每个 parfor 循环开始时都传输一次。

为了提高代码的性能,请寻找机会减少不必要的广播变量的数量。例如,此代码包含一个广播变量 M

M = magic(10);
parfor i = 1:numel(M)
    out(i) = M(i)./numel(M);
end

可以重写此代码以在 parfor 循环之前评估 numel(M)。从 parfor 循环中删除 numel(M) 会阻止 MATLAB 将 M 的所有元素发送给每个工作进程。相反,MATLAB 将 N 的值和分段变量 M 的子集发送给每个工作进程。

M = magic(10);
N = numel(M);
parfor i = 1:N
    out(i) = M(i)./N;
end

另请参阅

相关主题