将嵌套的for循环转换为GPU替代方案以减少时间

时间:2019-07-30 14:44:14

标签: matlab for-loop gpu parfor

我目前正在努力加快有限元计算的速度。嵌套的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替代方案?

0 个答案:

没有答案