2012-01-03 2 views
2

これらが稼働してCUBLASの私の結果ですが、それぞれのGPU(テスラM2050)のための2つのストリームを使用して4つのGPU上でDGEMMパフォーマンスDGEMM:私は私の結果をテストしていると、彼らは大丈夫ですCUBLASは、クエリ

enter image description here

。私は、デフォルトのストリームを使用するバージョンと比較して、私が得ている高いGflops値が心配です。複数のストリームを使用するバージョンについては

Gflops = {2.0*10^-9*(N^3+N^2)}/elapsed_time_in_s

を、私はどのような方法でこの式を変更する必要があります:私は式を使用してGFLOPSを計算するのですか?

HtoD-ker-DtoHは、ホストからデバイスへのデータ転送、カーネル実行、およびデバイスからホストへのデータ転送を秒単位で行うのにかかる時間です(これは上記の式の分母です)。 クロスポストのNvidiaのフォーラム - http://forums.nvidia.com/index.php?showtopic=219910&st=0#entry1350908

EDIT:@talonmiesのコメントに続いて、私は時間を計算する前cudaStreamSynchronizeを追加し、結果は以下の通りである:

enter image description here

おかげで、

Sayan

+0

「4 GPUで動作している」と言い、DGEMM操作ではどういう意味ですか? DGEMMを4台以上のデバイスに分割していますか? – talonmies

+0

私は、各GPUごとに4つの部分にデータを分割して、各GPUのチャンク上で 'cublasdgemm'を実行しています。 – Sayan

+2

C2050は約550 GFLOP /秒**ピーク**、約2200 GFLOP /秒4倍精度の場合は** **倍精度の場合はDGEMMがピークよりもかなり低いため)、ストリームのケースでタイミングが間違っていると思われます(おそらくデフォルトのストリームの場合は同期していたものが非同期です)。 FLOP/s計算は、どのように計算を行っても変わらないはずです。 – talonmies

答えて

3

単一のC2050は、約550GFLOP/sピーク、または倍精度のための4ピークの約2200GFLOP/sを与え、DGEMMはconおそらくピークよりも低い)、私はストリームのケースでタイミングが間違っていると推測します(おそらくデフォルトのストリームの場合は同期していたものが非同期です)。 FLOP/s計算は、どのように計算を行っても変わらないはずです。

使用するタイミングメカニズムは、すべてのストリームのcudaStreamWaitEventメカニズムまたはストリームごとにcudaStreamSynchronizeメカニズムのいずれかを使用して、起動するすべてのストリームに同期されることを確認します。 GPUがCUBLASの操作を完了する前に、あなたが試行しているコードからタイミングが外れている可能性があります。

+0

未回答の質問リストからこれを取得する回答を追加しました。誰かがこれをupvotedまたは答えを受け入れることができます。 – talonmies

関連する問題