2012-02-17 38 views
2

我運行CUFFT分塊(N * N/P)分爲多個GPU,我有一個關於計算性能的問題。首先,介紹一下我是如何做的:CUFFT的性能計算

  1. 發送N * N/P塊每個GPU
  2. P中的GPU成批1-d FFT每一行
  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的性能?

謝謝。

+0

這是一個真正的還是複雜的變換? – talonmies 2012-02-18 05:19:06

+0

cufftZ2Z - 我是否正確地在執行時包含fft計劃創建和銷燬時間?如果我不包含它們,我會看到相當大的差異... – Sayan 2012-02-18 10:58:33

+1

對此,沒有「正確的」答案。您應該準確報告您的時間安排。計劃創建可能包括惰性運行時API上下文建立。如果有的話,你可能不需要。我並不真的使用CUFFT,也不太瞭解其內部。 – talonmies 2012-02-18 11:28:04

回答

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上完成的等效轉換更低,更低

+0

謝謝,我明白了我出錯的地方。如果說數據傳輸包含在內,那麼GPU的性能是否與CPU中的n個線程相當? – Sayan 2012-02-18 10:56:20

+0

對不起,我不明白你想問什麼。 – talonmies 2012-02-18 11:11:55

+0

我注意到,如果我在'執行時間'中包含memcpyHtoD/DtoH時間,cpu上多個線程上的gpu和fftw的gflops都接近;因爲我的目標是比較fft與gpu的CPU性能,所以我問。 – Sayan 2012-02-18 21:40:42