MATLAB parfor循环中的广播变量

j8yoct9x  于 2022-12-13  发布在  Matlab
关注(0)|答案(1)|浏览(1823)

以下循环将导致C_matB_mat中出现错误:

%previously defined
N_RIPETIZIONI=2;
K=201;
parfor n=1:N_RIPETIZIONI*K 
    [r,k]=ind2sub([N_RIPETIZIONI,K],n);
    B=B_mat{r};
    C=C_mat{r};
end

警告说:
整个数组或结构B_mat是一个广播变量。这可能会导致不必要的通信开销。
对于C_mat也是如此。我如何修复它,使B_matC_mat的索引不再是广播变量?

tcbh2hod

tcbh2hod1#

问题在于,索引B_mat的方式(即不使用n),parfor中的每个线程都需要整个B_mat才能运行。parfor代码中的一大瓶颈是将数据副本传输到每个节点。
MATLAB基本上是在告诉你,如果你这样做,你实际上可能会比其他方式更慢。这并不是因为B_mat是某种类型的变量,称为“广播”,而是因为你编写代码的方式,parfor中的每个n都需要一个B_mat的副本。
我假设这不是你真实的的代码,所以我们不能真正帮助你修复它,但希望这能解释它。

相关问题