two - loop with GPU

조회 수: 2 (최근 30일)
Anh
Anh 2013년 4월 3일
I just have GPU on my desktop with matlab R2012b I plotted a Gaussian profile using two - loop on CPUas below:
for n=1:1:N
for m=1:1:N
x(n)=n*ds-L/2;
y(m)=m*ds-L/2;
G(n,m)=exp(-((x(n)^2)+(y(m)^2)))/(w^2);
end
end
I read somewhere that GPU does not support index like that, I even tried but it not work either. Is there any way possible to do the same thing on GPU?
Thank so much
  댓글 수: 2
James Lebak
James Lebak 2013년 4월 5일
It seems like it should be possible to do this on the GPU. Can you tell us what variables were on the GPU, and what happened when it failed to work? Did you receive an error message, or did MATLAB compute an incorrect answer?
Anh
Anh 2013년 4월 15일
All variables were on GPU (N, ds, N). I got the message: Undefined function 'colon' for input arguments of type 'gpuArray' Even one "For loop", if N is on GPU, it not work either. I know there is one way we can deal with "For loop" of an array by using gpuArray.colon.(...), but I have loop inside the loop to create a matrix G(n,m), so I don't know how to solve this problem.

댓글을 달려면 로그인하십시오.

답변 (1개)

James Lebak
James Lebak 2013년 4월 23일
Yes, 1:gpuArray(N) for scalar N doesn't work in MATLAB R2013a. Try the following:
x=gpuArray.colon(1,N)*ds-L/2;
y=gpuArray.colon(1,N)*ds-L/2;
G = exp(-((x.*x).'*gpuArray.ones(1,N)+gpuArray.ones(N,1)*(y.*y)))./(w^2);
This vectorizes the calculation of x and y and calculates all the elements in the matrix at once, which should be much more efficient on the GPU than using a loop.

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by