2017-06-06 45 views
4

我看到,nvprof可以剖析內核中觸發器的數量(使用下面的參數)。當我瀏覽文檔時(這裏是http://docs.nvidia.com/cuda ......它說flop_count_sp是「由非謂詞線程執行的單精度浮點運算的數目(加法,乘法,乘法 - 累加和特殊)。每次乘法累加運算貢獻2計數。」Nvidia的FLOPS的nvprof輸出

然而,當我運行的flop_count_sp結果(這應該是flop_count_sp_add + flop_count_sp_mul + flop_count_sp_special + 2 * flop_count_sp_fma)我發現,它並沒有在求和包括flop_count_sp_special值。

你能告訴我我應該使用什麼嗎?我應該增加這個值的總和flop_count_sp或我應該考慮噸他的公式不包括flop_count_sp_special的值?

你也可以告訴我什麼是這些特殊操作?

我使用以下命令行:

nvprof --metrics flops_sp --metrics flops_sp_add --metrics flops_sp_mul --metrics flops_sp_fma --metrics flops_sp_special myKernel args 

哪裏myKernel是由具有args中給出了一些輸入參數我CUDA內核的名稱。

比如我nvprof輸出的部分如下圖所示:

==20549== Profiling result: 
==20549== Metric result: 
Invocations        Metric Name      Metric Description   Min   Max   Avg 
Device "Tesla K40c (0)" 
    Kernel: mykernel(float*, int, int, float*, int, float*, int*) 
      2        flop_count_sp Floating Point Operations(Single Precisi  70888  70888  70888 
      2       flop_count_sp_add Floating Point Operations(Single Precisi  14465  14465  14465 
      2       flop_count_sp_mul Floating Point Operation(Single Precisio  14465  14465  14465 
      2       flop_count_sp_fma Floating Point Operations(Single Precisi  20979  20979  20979 
      2      flop_count_sp_special Floating Point Operations(Single Precisi  87637  87637  87637 
+1

您可以提供個別事件/指標的值嗎?你的命令行對我來說似乎並不合適,沒有像'flops_sp *'這樣的指標。 – Tom

回答

6

「特殊」的操作在算術吞吐量表中列出的Programming Guide,它們分別是:倒數,RECIP開方,日誌, exp,sin,cos。請注意,這些比默認版本更精確(但速度更快),您必須使用內部或編譯器標誌(-use_fast_math)選擇加入。

儘管文檔說了什麼,但似乎特殊操作並未包含在flop_count_sp總數中。這是當前版本(8.0)中的一個錯誤,我提交了一個錯誤,因此它應該在未來版本中修復(所以本段在某些時候會過時)。

+0

非常感謝您指出特殊操作和報告錯誤。但我想知道,因爲在我的內核中我沒有使用任何這些特殊操作,那麼什麼操作可以爲「flop_count_sp_special」貢獻值「87637」? – Amit

+0

我在這裏分享了我的代碼(https://bitbucket.org/rajgurung777/blogqueryproject)。 您可以在文件simplex.cu中找到內核實現。 – Amit

+0

您能鏈接到錯誤頁面嗎? – einpoklum