以下循环将导致C_mat
与B_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_mat
和C_mat
的索引不再是广播变量?
1条答案
按热度按时间tcbh2hod1#
问题在于,索引
B_mat
的方式(即不使用n
),parfor
中的每个线程都需要整个B_mat
才能运行。parfor代码中的一大瓶颈是将数据副本传输到每个节点。MATLAB基本上是在告诉你,如果你这样做,你实际上可能会比其他方式更慢。这并不是因为
B_mat
是某种类型的变量,称为“广播”,而是因为你编写代码的方式,parfor中的每个n
都需要一个B_mat
的副本。我假设这不是你真实的的代码,所以我们不能真正帮助你修复它,但希望这能解释它。