我目前正在努力加快有限元计算的速度。嵌套的for循环部分会占用大量时间。我可以使用parfor循环来加快速度,但是要花费大量时间(> 10h +)。
因此,我很好奇我是否可以使用GPU计算来加快处理速度。不幸的是,我没有在MATLAB(或其他任何地方)中进行GPU计算的经验。
我在MATLAB和Arrayfun上学习了GPU计算,但是我不知道如何将其合并到我的代码中。
for i=1:numEl % Loop over number of elements
% Pre-allocate space
globalB=spalloc(numNodes,numEl,4);
globalK=sparse(zeros(numEl,numEl));
globalH=sparse(zeros(numNodes,numEl));
% Extract values form variable
iNode=nodeMap(i,:);
XN=nodeCoordinates(iNode,:).';
origin=XN(:,1);
XNdash=XN-origin;
iIndices=nodeMapLocal(i,:);
% Computation of B matrix
B=funcCalcB(XNdash.'); % Function
globalB(iIndices,i)=B.';
%% Computation of K matrix
for j=1:numEl % Loop over number of elements
% Extract values form variable
jNodes=nodeMap(j,:);
UN=nodeCoordinates(jNodes,:).';
UNdash=UN-origin;
jIndices=nodeMapLocal(j,:);
% Compute K matrix
K=funcCalcK(XNdash.',UNdash.'); % Function
globalK(i,j)=globalK(i,j)+K;
% Compute H matrix
H=funCalcH(XNdash.',UNdash.'); % Function
globalH(iIndices,j)=globalH(iIndices,j)+H.';
end
% Store matrices
globalBEls{i}=globalB;
globalHEls{i}=globalH;
globalKEls{i}=globalK;
end
这样的嵌套循环能否转换为GPU替代方案?