2

これらは、各GPU(Tesla M2050)に2つのストリームを使用して4つのGPUでcublasDGEMMを実行した結果です。

ここに画像の説明を入力してください

私は自分の結果をテストしましたが、問題ありません。デフォルトのストリームを使用するバージョンと比較して、取得している高いGflops値が心配です。次の式を使用してGflopsを計算しています。

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

複数のストリームを使用するバージョンの場合、この式を何らかの方法で変更する必要がありますか?

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

編集:@talonmiesのコメントに続いてcudaStreamSynchronize、時間を計算する前にaを追加しました。結果は、次のとおりです。

ここに画像の説明を入力してください

ありがとう、

サヤン

4

1 に答える 1

3

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

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

于 2013-11-10T11:58:20.557 に答える