通信开销(PARFOR)和预分配的速度,多维数组(对于)优化多维数组性能 - MATLAB
我在用**的
-
指示的地方,下面的脚本让两个警告
变量被索引但没有切片...(在第二个parfor循环中由**显示的数组A) - 是什么导致了这种情况以及如何避免这种情况?
该变量似乎改变每个循环的大小......(在for循环中由**显示的数组Sol) - 也许我做得不对,但预先分配内存没有奏效。
编辑:我最初的想法是预先分配的阵列(如在第一PARFOR循环中完成),这样它会执行该脚本更快的其余部分(该脚本的完整版本重复类似的各种数组操作到第二个表达式和for循环)。
有什么建议吗? :)
N = 1000;
parfor i=1:N
A(:,:,i) = rand(2);
X(:,:,i) = rand(2,1);
Sol1(1,1,i) = zeros();
Sol2(1,1,i) = zeros();
Sol(2,1,i) = zeros();
end
t0 = tic;
parfor i=1:N
Sol1(1,:,i) = A(1,:,i)*X(:,1,i);
Sol2(1,:,i) = **A**(2,:,i)*X(:,1,i);
end
for i=1:N
**Sol**(:,1,i) = [Sol1(1,:,i);Sol2(1,:,i)];
end
toc(t0);
您是如何预先分配内存的? – bdecaf
@bdecaf我刚刚意识到我在第一个parfor循环中做了什么(我的预分配思路)是完全错误的!什么是预先分配多维数组的最佳方式? – user2550888
基本上,我做'NaN(3,4,5,...)',只需在其中按顺序写入尺寸的大小(你可以用'零'或'ones'来做同样的事情,但我更喜欢看什么时候一个值尚未分配)。 – bdecaf