के साथ Matlab धीमी समांतर प्रसंस्करण matlab में वितरित और कोडित वितरित सरणी का उपयोग करने के लिए मैं नया हूँ। समानांतर कोड मैंने काम किया है, लेकिन धारावाहिक संस्करण से बहुत धीमा है और मुझे नहीं पता कि क्यों। नीचे दिए गए कोड उदाहरण वॉल्यूमेटिक डेटा से हेसियन मैट्रिस के eigenvalues की गणना करें।वितरित सरणी
सीरियल संस्करण:
S = size(D);
Dsmt=imgaussian(D,2,20);
[fx, fy, fz] = gradient(Dsmt);
DHess = zeros([3 3 S(1) S(2) S(3)]);
[DHess(1,1,:,:,:), DHess(1,2,:,:,:), DHess(1,3,:,:,:)] = gradient(fx);
[DHess(2,1,:,:,:), DHess(2,2,:,:,:), DHess(2,3,:,:,:)] = gradient(fy);
[DHess(3,1,:,:,:), DHess(3,2,:,:,:), DHess(3,3,:,:,:)] = gradient(fz);
d = zeros([3 S(1) S(2) S(3)]);
for i = 1 : S(1)
fprintf('Slice %d out of %d\n', i, S(1));
for ii = 1 : S(2)
for iii = 1 : S(3)
d(:,i,ii,iii) = eig(squeeze(DHess(:,:,i,ii,iii)));
end
end
end
समानांतर संस्करण:
S = size(D);
Dsmt=imgaussian(D,2,20);
[fx, fy, fz] = gradient(Dsmt);
DHess = zeros([3 3 S(1) S(2) S(3)]);
[DHess(1,1,:,:,:), DHess(1,2,:,:,:), DHess(1,3,:,:,:)] = gradient(fx);
[DHess(2,1,:,:,:), DHess(2,2,:,:,:), DHess(2,3,:,:,:)] = gradient(fy);
[DHess(3,1,:,:,:), DHess(3,2,:,:,:), DHess(3,3,:,:,:)] = gradient(fz);
CDHess = distributed(DHess);
spmd
d = zeros([3 S(1) S(2) S(3)], codistributor('1d',4));
for i = 1 : S(1)
fprintf('Slice %d out of %d\n', i, S(1));
for ii = 1 : S(2)
for iii = drange(1 : S(3))
d(:,i,ii,iii) = eig(squeeze(CDHess(:,:,i,ii,iii)));
end
end
end
end
किसी मुद्दे पर कुछ प्रकाश डाला सकता है मैं बहुत आभारी होंगे
एक ही पुनरावृत्ति कितनी देर तक लेता है? – Jonas
क्या आप अपना मैटलबूल खोल रहे हैं? – Rasman
@ जोनास धारावाहिक संस्करण पर एक एकल पुनरावृत्ति (चर परिवर्तनीय i) लगभग 1.7 सेकंड लेता है।समांतर संस्करण पर एक ही पुनरावृत्ति 5 मिनट से अधिक नहीं हो पाती है जिस बिंदु पर मैंने निष्पादन को समाप्त कर दिया है। – Hampycalc