change code to use GPU
조회 수: 1 (최근 30일)
이전 댓글 표시
Hi
I am trying to change a code that has double for loop to use GPU(single gpu right now).
But it seems fall in endless loop,because simple double for loop ends almost 300 sec but parfor and inner for loop does not end when elapsed 1000 sec over.
please find my error in my code below.
Thank you.
original code
ft_mcd = gpuArray(zeros(npulse,nrbin)); %19454x9098 array
parfor k = 1:npulse
R_real = gpuArray(R_ori + R_ori .* (1 - D_fa_rcmc(k,:)) ./ D_fa_rcmc(k,:)); % 1x9098 array
z = gpuArray(fft(temp_ft_rcd(k,:))); %1x9098 array
zp = gpuArray([z(1:half_len) zeros(1, zpadlen) z(half_len + 1:end)]); %1x72784 array
tf_sub = gpuArray(ifft(zp) * m); %1x72784 array
tf_sub2 = gpuArray([tf_sub tf_sub(1, end:-1:1)]); %1x145568 array
idx = gpuArray(round((R_real-R_ori)/ori_sam_dist*m)); %1x9098 array
temp_ft_mcd = gpuArray(zeros(1,nrbin));%1x9098 array
for rn=1:nrbin
temp_index = gpuArray(1 + m*(rn-1) + idx(rn));%number
temp_ft_mcd(1,rn) = tf_sub2(1, temp_index);%1x9098 array
end
ft_mcd(k,:) = temp_ft_mcd(k,:); %19454x9098 array
end
댓글 수: 1
Joss Knight
2022년 6월 23일
I can't really tell what your question is, but your use of gpuArray is wrong. You don't wrap the result of an operation in gpuArray you move the input.
NO: z = gpuArray(fft(temp_ft_rcd(k,:)));
YES: temp_ft_rcd = gpuArray(temp_ft_rcd); z = fft(temp_ft_rcd(k,:));
Now z is a gpuArray so any operations on it will continue to take place on the GPU.
답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 GPU Computing에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!