2016-06-20 10 views
1

のための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を使用すると、いくつかのエラーが発生します。 = arrayfun

function valmult=mult(Cmat,a) 

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

AX(@ MULT、CMAT、A)。私は得る 最初の入力引数として渡された関数は、サポートされていない関数または未知の関数 'sum'を含んでいます。

私はGPUを搭載したMATLABの新機能です。どのような方法でどのような提案が最善で、gpuarrayを使用してコードパフォーマンスを最大化するにはどうすればよいですか?

答えて

0

forループを削除できる方が良いでしょう。これは次のコードで行うことができます。一方

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

、コードに重い動作Chrom * aの行列乗算は、完全にGPUを利用する(16x16x1024)が小さすぎます。改善されたコードであっても、GPUは依然として遅いことがわかります。

+0

あなたのアドバイスありがとう –

関連する問題