在 matlab 中添加许多大矩阵的更快方法
faster way to add many large matrix in matlab
假设我有很多(大约 1000 个)大矩阵(大约 1000 x 1000)并且我想按元素将它们相加。非常天真的方法是使用临时变量并在循环中累积。例如,
summ=0;
for ii=1:20
for jj=1:20
summ=summ+ rand(400);
end
end
在网上查了一段时间,有人说还是借助sum()比较好。例如,
sump=zeros(400,400,400);
count=0;
for ii=1:20
for j=1:20
count=count+1;
sump(:,:,count)=rand(400);
end
end
sum(sump,3);
但是,我测试了两种方式后,结果是
Elapsed time is 0.780819 seconds.
Elapsed time is 1.085279 seconds.
这意味着第二种方法更糟糕。
所以我想知道有没有什么有效的加法方法?假设我在一台内存非常大和 GTX 1080 的计算机上工作(CUDA 可能会有帮助,但我不知道这样做是否值得,因为通信也需要时间。)
感谢您的宝贵时间!任何答复将不胜感激!
最快的方法是在 matlab 中完全不使用任何循环。
在许多情况下,matlab 的内部函数都经过优化以使用 SIMD 或其他加速技术。
使用内置功能创建所需大小的矩阵的示例是 X = rand(sz1,...,szN)
。
在你的明确情况下 sum(rand(400,400,400),3)
应该给你最快的结果。
假设我有很多(大约 1000 个)大矩阵(大约 1000 x 1000)并且我想按元素将它们相加。非常天真的方法是使用临时变量并在循环中累积。例如,
summ=0;
for ii=1:20
for jj=1:20
summ=summ+ rand(400);
end
end
在网上查了一段时间,有人说还是借助sum()比较好。例如,
sump=zeros(400,400,400);
count=0;
for ii=1:20
for j=1:20
count=count+1;
sump(:,:,count)=rand(400);
end
end
sum(sump,3);
但是,我测试了两种方式后,结果是
Elapsed time is 0.780819 seconds.
Elapsed time is 1.085279 seconds.
这意味着第二种方法更糟糕。
所以我想知道有没有什么有效的加法方法?假设我在一台内存非常大和 GTX 1080 的计算机上工作(CUDA 可能会有帮助,但我不知道这样做是否值得,因为通信也需要时间。)
感谢您的宝贵时间!任何答复将不胜感激!
最快的方法是在 matlab 中完全不使用任何循环。
在许多情况下,matlab 的内部函数都经过优化以使用 SIMD 或其他加速技术。
使用内置功能创建所需大小的矩阵的示例是 X = rand(sz1,...,szN)
。
在你的明确情况下 sum(rand(400,400,400),3)
应该给你最快的结果。