Vectorization or for loop (speedup)
조회 수: 1 (최근 30일)
이전 댓글 표시
I have a function the do operations on 3 dimensional matrix like this: user_defined_function is a function that does the calculations
a=rand(100,100,100);
b=rand(100,100,100);
c=rand(1,1000);
l11=zeros(size(a))
for i=1:1:100
for j=1:1:100
for o=1:1:100
l11=user_defined_fnuction (a(o,j,i),b(o,j,i));
end
end
end
Basically the for-loop is slow so I tried to vectrize it. Using vectorization, I end up having a matrix of size (1e6,1e6) which exceeded maximum array size (requires 7320 GB). So I looked over the internet and I found this:
I tried the tall array but still I got the same problem. How I could solve this problem of maximum array size ( without the need to use spmd or for-drange since I am using parfor in the main program and the for loop is part of a function that does calculations).
Does deploying this code to MATALB server speedup the code
댓글 수: 4
Matt J
2020년 9월 25일
Fine, but it is still not clear how this results in a 1e6 x1e6 matrix. Your loops are still performing only 1e6 calculations.
답변 (1개)
Matt J
2020년 9월 26일
Your vectorized code doesn't resemble at all what your for-looped code is computing. The vectorized implementation of your for-loops would be,
a=a(:);
b=b(:);
c=c(:).';
l1=(a.*b).*exp(-c.*a);
This will be a 1e6 x 1e3 matrix, which will be 4GB in single floats. A large matrix to be sure, but possible on a 32GB RAM machine. Why though do you need so much data in memory at the same time?
댓글 수: 2
Matt J
2020년 9월 29일
I can't say what the solution would be because I don't know how l11 is being used. It's hard to image why a 1e10 x 1e6 matrix would need all of its data in RAM simultaneously.
참고 항목
카테고리
Help Center 및 File Exchange에서 Parallel for-Loops (parfor)에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!