如何优化gpu的matlab代码
How to optimize matlab code for 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(@mult,Cmat,a);我得到
作为第一个输入参数传递的函数包含不受支持或未知的函数 'sum'。)
我是使用 GPU 的 MATLAB 新手。有什么建议最好吗?如何使用 gpuarray 最大化代码性能?
如果你能消除 for 循环,事情会更好。可以通过下面的代码来完成。
ax_mat = (Chrom * a).^2;
ObjVal = 10 * log10(max(ax_mat, [], 2) ./ mean(ax_mat, 2));
另一方面,代码中最繁重的运算,Chrom * a
的矩阵乘法运算太小 (16x16x1024),无法充分利用 GPU。您可能会发现,即使使用改进的代码,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(@mult,Cmat,a);我得到 作为第一个输入参数传递的函数包含不受支持或未知的函数 'sum'。)
我是使用 GPU 的 MATLAB 新手。有什么建议最好吗?如何使用 gpuarray 最大化代码性能?
如果你能消除 for 循环,事情会更好。可以通过下面的代码来完成。
ax_mat = (Chrom * a).^2;
ObjVal = 10 * log10(max(ax_mat, [], 2) ./ mean(ax_mat, 2));
另一方面,代码中最繁重的运算,Chrom * a
的矩阵乘法运算太小 (16x16x1024),无法充分利用 GPU。您可能会发现,即使使用改进的代码,GPU 仍然较慢。