2010-12-02 11 views
4

私はCUDAを使用して、多くの入力行列を持つ複雑な方程式が必要な問題を実行しています。各行列は、その集合(1〜30の間に100,000の行列がある)に依存するIDを持ち、各行列の結果はNが入力行列の数であるfloat [N]配列に格納されます。CUDA:結果の合計

この後、私は望む結果が各IDのこの配列内のすべての浮動小数点の合計であるため、30個のIDには30個の結果浮動小数点があります。

私はこれをどうするべきですか?

は今のところ、私は戻って、デバイスからホストにfloat配列(400キロバイト)を読み、ホスト上でこれを実行します。

// Allocate result_array for 100,000 floats on the device 
// CUDA process input matrices 
// Read from the device back to the host into result_array 
float result[10] = { 0 }; 
for (int i = 0; i < N; i++) 
{ 
    result[input[i].ID] += result_array[i]; 
} 

しかし、もっと良い方法があるのなら、私は思ったんだけど。

+1

CUDA SDKの削減例を減らすように思えます。 –

+0

ありがとう、私はそれのための言葉を知らなかった、私はそれを見てみましょう。 – Dmi

答えて

3

これは、cublasSasum()を使用して行うことができます。これは、SDKの削減量の1つを調整するよりは簡単です(ただし一般的ではありません)。 CUDA SDKのCUBLASの例を確認してください。