Are gpuArray supported within parfor?

2 次查看(过去 30 天)
Hi,
I am running the following code and receive an error
Error using gpuArrayTest (line 16)
The following error occurred converting from gpuArray to double:
Conversion to double from gpuArray is not possible.
Line 16 is
parfor i = 1:numel(x_c)
My Code is as follows
%Window Size
W=20;
num_files=3;
% My Code: Read template image from disk - imread > imcrop
im1 = gpuArray(rand(150));
% Actual Code: S = size(template image | im1)
S=[65,62];
[x_c,y_c]=meshgrid(W+1:S(2)-W, W+1:S(1)-W);
max_xcorr_1=zeros(size(x_c),'gpuArray');
% store xcorr results from all filse
max_xcorr_arr=zeros([size(x_c),num_files]);
Loop over a file list.
for j=1:num_files
% My Code: Read image from disk - imread > imcrop
im2 = gpuArray(rand(150));
tic;
parfor i = 1:numel(x_c)
x=x_c(i);
y=y_c(i);
% Check to see if all pixels in template is not 0 (same).
if (~max(im1(x-W:x+W,y-W:y+W),[],'all')==0)
nxc = normxcorr2(im1(x-W:x+W-1, y-W:y+W-1), im2(x-W:x+W-1, y-W:y+W-1));
% Commenting the line below avoids the gpuArray > double coversion error.
max_xcorr_1(i)=max(nxc,[],'all');
end
end
max_xcorr_arr(:,:,j)=gather(max_xcorr_1);
toc
end
However, I do not receive the error if I do one of the following -
  1. I comment out the line `max_xcorr_1(i)=max(nxc,[],'all');`
  2. Reduce the size of the meshgrid to `S=[40, 40]`. The smallest number that I can use without getting the error varies from time to time.
  3. I replace `parfor` with `for`.
I have 8 local MATLAB Workers running. My GPU is an NVIDIA GeForce GTX860M with 4GB of dedicated RAM. My questions are -
  1. Is gpuArray supported within a `parfor`?
  2. Irrespective of the meshgrid size defined by S, The `normxorr2` operation runs on a 2W x 2W sized matrix. So, why does the size S affect the code?
  3. How can I get around this?

回答(0 个)

类别

Help CenterFile Exchange 中查找有关 GPU Computing 的更多信息

产品


版本

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by