Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何优化gpu的matlab代码_Matlab_Gpu - Fatal编程技术网

如何优化gpu的matlab代码

如何优化gpu的matlab代码,matlab,gpu,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; 色度=16*16和a=16*1024阵列。我

我有一个函数,比如

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;
色度=16*16和a=16*1024阵列。我想在gpu上找到最快的方法。只有gpuarray比较慢。使用arrayfun或bsxfun时会出现一些错误

function valmult=mult(Cmat,a)

  valmult=abs(sum(Cmat.*a)).^2;
ax=阵列风(@mult,Cmat,a);我明白了 作为第一个输入参数传递的函数包含不受支持或未知的函数“sum”。


我是新的在MATLAB与GPU。有什么建议哪种方法是最好的,以及如何使用gpuarray最大限度地提高代码性能

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

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

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

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

ax_mat = (Chrom * a).^2;
ObjVal = 10 * log10(max(ax_mat, [], 2) ./ mean(ax_mat, 2));
另一方面,代码中最重的操作,
Chrom*a
的矩阵乘法太小(16x16x1024),无法充分利用GPU。您可能会发现,即使有了改进的代码,GPU仍然较慢