2011-07-28 15 views
3

標準マトリックス加算アルゴリズムの効率をどのように改善できますか?どのようにcで標準的な行列の追加アルゴリズムの効率を向上させるには?

行列は、2Dアレイによって表され、順次加算されます。

+0

C++に切り替えて、Eigen :) – rubenvb

+0

の可能な複製を使用してください。[Standard Matrix Multiplication Algorithmの効率向上](http://stackoverflow.com/questions/6900711/improving-the-efficiency-of-standard-matrix-乗算アルゴリズム) – QuantumMechanic

答えて

2

私はすべてのコードを読むつもりはありません。私が見る通り、これは加算部分です

for(i=0;i<r1;i++) 
    for(j=0;j<c1;j++) 
     C[i][j]=A[i][j]+B[i][j]; 

これは複雑さを改善することはできません。などの代わりにi++++iをやったり、ループの順序を変更するなどmicrooptimizations他のタイプについて - 私はあなたがこれらのは、あなたのパフォーマンスのボトルネックであることをあなたに示してプロファイラを実行したまであなたがこれらを気にしないべきだと思います。あなたが正しい順序でループのためのあなたの2を得るよう時期尚早の最適化はあまりにも長い間、すべての悪 :)

+2

+1 "根の悪い" – Constantinius

+1

よく、あなたは後でそれを修正する必要はありませんので、ループの順序について考えることができます。数秒かかることはありません。また、OPは*特に*効率的な計算について尋ねました。 –

+1

生成されたASMコードをチェックしましたが、読みにくいですが、SIMD命令が表示されないので、大きな行列では明らかに最善の解決策ではありません。 –

0

ループのナイーブダブルポータブルコードの最適にかなり近いのルートであることを覚えておいてください。最高のパフォーマンスを得るには、順次メモリにアクセスする必要があります。

あなたはループを展開でしたが、これはパフォーマンスに非常に大きな違いをすることはありません。

あなたが最高のパフォーマンスをしたい場合は、それを自分で書いて、代わりに、ご使用のプラットフォーム向けに最適化されたBLASを使用しないでください。

-2

あなたは集中的な操作を実行するためのCPUの代わりにGPUを使用しようとすることができます。このためにAMPを使用することができます。

+0

SSEはGPUではなくCPU上にあります。 GPUはかなり速いかもしれませんが、あなたはSSEでそれを得ることはありません。 –

+0

私の悪い、AMPはGPUを使用しています。 – cprogrammer

+0

AMPはすでに使用できますか? – Bart

関連する問題