フィルターのクリア

Out of memory GPU

4 ビュー (過去 30 日間)
Zohra Megnounif
Zohra Megnounif 2022 年 4 月 4 日
コメント済み: Raymond Norris 2022 年 4 月 4 日
Hello every one,
when I run my code I have in the output of my code:
Could you help me please ? What should I do ?
my code is :
parfor f=1:Nb_images
im = imread(fullfile(fileFolder,char(names(f))));
[ligne, colonne]=size(im);
surface_echantillon=ligne*colonne;
[counts, ~] = imhist(im,16);
t = otsuthresh(counts);
binary = imbinarize(im,t);
bw1 = bwareaopen(binary,97);
bw6=bw1;
CC_tris=bwconncomp(bw6);
stats1=regionprops(CC_tris, 'Area', 'MajorAxisLength');
idx_tris=find ([stats1.MajorAxisLength]<300);
bw6= ismember(labelmatrix(CC_tris),idx_tris);
[L4,num]=bwlabel(bw6,8);
stats4=regionprops('table', L4, 'MajorAxisLength', 'MinorAxisLength','Area', 'Circularity');
rap2=stats4.MajorAxisLength./stats4.MajorAxisLength;
idx_4=find (rap2>5 & rap2<19 & [stats4.Area]<=700 ); % & [stats4.Area]<=600%%100 et bw7= ismember(bw6,idx_4);
bw7=bw6;
D=-bwdist(~bw6);
Ld=watershed(D);
bw2=bw6;
bw2(Ld==0)=0;
mask=imextendedmin(D,2);
D2=imimposemin(D,mask);
Ld2=watershed(D2);
bw3=gpuArray(bw6);
bw3(Ld2==0)=0;
bw4=gpuArray(bw3);
figure, imagesc(bw4),title("watershed");
[L3,num]=bwlabel(bw4,8);
stats=regionprops('table', L3, 'Area','Circularity','MajorAxisLength', 'MinorAxisLength');
elong=(stats.MajorAxisLength-stats.MinorAxisLength)./(stats.MajorAxisLength+stats.MinorAxisLength);
crit=stats.MajorAxisLength./stats.MinorAxisLength;
idx3=find([stats.Area]>=7 & [stats.Area]<550 & [stats.Circularity]>=0.75 & [elong]<0.55 & [stats.MajorAxisLength]<45 & crit<3.5);
binary=ismember(L3,idx3);
[L5,num5]=bwlabel(binary,8);
F=num5;
list_F=[list_F,F];
binary=gpuArray(binary*100);
bw=gpuArray(bw*90);
resu= gpuArray(binary+bw);
exportim=['C:\Users\MATLAB\pour vérif','\',int2str(f),'.tif'];
imwrite(resu,jet,exportim);
end
  2 件のコメント
Zohra Megnounif
Zohra Megnounif 2022 年 4 月 4 日
Raymond Norris
Raymond Norris 2022 年 4 月 4 日
As you can see, your GPU device has about 5 GB of total memory. I don't have any specific suggestion, but have a few comments
  • I'm assuming you're running a pool of workers; otherwise, why run the parfor loop. Therefore, multiple workers will be accessing this one (?) GPU. Will that create a bottleneck?
  • How much data are your gpuArray variables (bw3, bw4, binary, bw, resu)?
  • What is the core of what you want to process on the GPU? For instance
Ld=watershed(D);
bw2=bw6;
bw2(Ld==0)=0;
% ...
Ld2=watershed(D2);
bw3=gpuArray(bw6);
bw3(Ld2==0)=0;
Why is bw2 on the CPU but bw3 on the GPU? Next, look how bw4 is assigned
bw4=gpuArray(bw3);
figure, imagesc(bw4),title("watershed");
[L3,num]=bwlabel(bw4,8);
To begin with, since bw3 is an gpuArray, you could assign bw4 as such
bw4 = bw3;
But do you even need to create bw4? Couldn't you use bw3 for imagesc and bwlabel?
  • If I'm reading this right, you have a bug in the following line
binary=gpuArray(binary*100);
bw=gpuArray(bw*90);
resu= gpuArray(binary+bw);
I don't see where bw is first initialized. And again, since binary and bw are gpuArray, adding them together will make resu a gpuArray as well.
binary = gpuArray(binary*100);
bw = gpuArray(bw*90);
resu = binary+bw;
I don't know how big binary is, but is it worth mutiplying out binary * 100 on the GPU? Or bw * 90?

サインインしてコメントする。

回答 (0 件)

カテゴリ

Help Center および File ExchangeGPU Computing についてさらに検索

製品


リリース

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by