2

複数のGPUに分割されたチャンク(N * N / p)でCUFFTを実行していますが、パフォーマンスの計算について質問があります。まず、私がそれをどのように行っているかについて少し:

  1. N * N/pチャンクを各GPUに送信します
  2. pGPUの各行のバッチ1-DFFT
  3. N * N/pチャンクをホストに戻す-データセット全体で転置を実行する
  4. 同上ステップ1
  5. 同上ステップ2

Gflops = ( 1e-9 * 5 * N * N *lg(N*N) ) / execution time

実行時間は次のように計算されます。

execution time = Sum(memcpyHtoD + kernel + memcpyDtoH times for row and col FFT for each GPU)

これは、複数のGPUでCUFFTのパフォーマンスを評価する正しい方法ですか?FFTのパフォーマンスを表す他の方法はありますか?

ありがとう。

4

1 に答える 1

2

複雑な変換を実行している場合、操作カウントは正しいですが(実数値変換の場合は2.5 N log2(N)である必要があります)、GFLOP式は正しくありません。並列のマルチプロセッサ操作では、スループットの通常の計算は次のようになります。

operation count / wall clock time

あなたの場合、GPUが並列で動作していると仮定して、実行時間の実時間(つまり、操作全体にかかった時間)を測定するか、次のように使用します。

execution time = max(memcpyHtoD + kernel + memcpyDtoH times for row and col FFT for each GPU)

現状では、計算はシリアル実行時間を表しています。multigpuスキームからのオーバーヘッドを考慮に入れると、得られる計算されたパフォーマンスの数値は、単一のGPUで実行される同等の変換よりも低くなると予想されます。

于 2012-02-18T06:18:12.213 に答える