【问题标题】:How to optimize matlab code for gpu如何优化 GPU 的 matlab 代码
【发布时间】:2016-10-21 17:28:07
【问题描述】:

我有一个类似的功能,

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(@mult,Cmat,a);我明白了 作为第一个输入参数传递的函数包含不受支持或未知的函数“sum”。)

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

【问题讨论】:

    标签: matlab gpu


    【解决方案1】:

    如果您可以消除 for 循环,情况会更好。可以通过以下代码完成。

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

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

    【讨论】:

      猜你喜欢
      • 2016-02-11
      • 2011-11-30
      • 1970-01-01
      • 2011-11-03
      • 2013-11-12
      • 1970-01-01
      • 2018-03-14
      • 2017-06-13
      相关资源
      最近更新 更多