如何优化gpu的matlab代码

时间:2016-06-20 12:40:19

标签: matlab gpu

我有一个像

这样的功能
function ObjVal=fun(Chrom,a)

  [Nind,Nvar] = size(Chrom);
  [m n]=size(a);

  for i=1:Nind
    c=Chrom(i,:);
    Cmat=repmat(c',1,n);
    ax=abs(sum(Cmat.*a)).^2;
    ObjVal(i)= 10*log10(max(ax)./(mean(ax)));
  end;

Chrom = 16 * 16且a = 16 * 1024阵列。我试图在gpu上找到最快的方法。只有gpuarray比较慢。当我使用arrayfun或bsxfun时,我遇到了一些错误。

function valmult=mult(Cmat,a)

  valmult=abs(sum(Cmat.*a)).^2;

AX = arrayfun(@多重峰,CMAT,一个);我明白了 作为第一个输入参数传递的函数包含不支持或未知的函数' sum'。

我是MATLAB的新手。任何建议哪种方式最好,如何使用gpuarray最大化代码性能?

1 个答案:

答案 0 :(得分:0)

如果你可以消除for循环,那将会更好。可以通过以下代码完成。

ax_mat = (Chrom * a).^2;
ObjVal = 10 * log10(max(ax_mat, [], 2) ./ mean(ax_mat, 2));

另一方面,代码中最重的操作,Chrom * a的矩阵乘法,太小(16x16x1024),无法充分利用GPU。您可能会发现即使使用改进的代码,GPU仍然会更慢。