[英]Excessive profiler overhead with NVidia Visual Profiler
當嘗試使用nvvp
(或使用nvprof
)分析代碼時,我得到了大量的分析開銷:
總時間為98毫秒,並且在第一次內核啟動時得到了85毫秒的“儀器”。
如何減少此配置文件的開銷或以其他方式僅放大我感興趣的部分?
我在未選中“開始執行並啟用性能分析”的情況下運行此程序,並且使用cudaProfilerStart
/ cudaProfilerStop
限制了性能分析, cudaProfilerStop
所示:
/* --- generate data etc --- */
// Call the function once to warm up the FFT plan cache
applyConvolution( T, N, stride, plans, yData, phiW, fData, y_dwt );
gpuErrchk( cudaDeviceSynchronize() );
// Call it once for profiling
cudaProfilerStart();
applyConvolution( T, N, stride, plans, yData, phiW, fData, y_dwt );
gpuErrchk( cudaDeviceSynchronize() );
cudaProfilerStop();
其中applyConvolution()
是我要分析的函數。
我在具有GTX 1080的Ubuntu 16.04上使用CUDA Toolkit 8.0。
當我寫這個問題時,我想我會嘗試使用探查器設置來嘗試搶先一些潛在的評論中的資料。
令我驚訝的是,禁用“啟用並發內核分析”完全擺脫了探查器的開銷:
但這也許不應該讓人感到驚訝:
啟用並發內核概要分析-對於使用CUDA流啟動可以並發執行的內核的應用程序,應選擇此選項。 如果應用程序僅使用單個流(因此不能同時執行內核),則取消選擇此選項可能會減少性能分析開銷。
(摘自http://docs.nvidia.com/cuda/profiler-users-guide/ )
“配置限制”部分中還指出了《 CUDA Profiler用戶指南》的早期版本,該版本:
如果在執行大量塊且執行時間短的內核上使用並發內核模式,則可能會增加大量開銷。
那好吧。 無論如何都要發布此問題/答案,以防其他人避免這種煩惱。
我看到類似的東西,但是可能只是模糊的相關。 但是,由於上述答案有所幫助,因此我將添加我的觀察結果。
與Pascal-gen卡(例如1080)相比,對Quadro GV100進行性能分析時,相當簡單的內核在外觀上的性能發生了巨大變化。 我也正在禁用概要分析的情況下運行nvvp,並在我感興趣的部分代碼中將其激活。然后我不小心忽略了將其打開,而我得到的只是我們的手動事件標記(使用nvtxRangePush和nvtxRangePop)。 你知道的,十倍加速。 也就是說; 在Quadro GV100上,存在大量的性能分析開銷,這是早期GPU所沒有的 。
禁用並發分析像你一樣沒有幫助,但禁用API跟蹤一樣 。
雖然與手動nvtx相比仍然存在大量開銷,但是至少它可以讓GV100了解內核性能。 較大的內核似乎受到的影響較小,如果與固定成本的開銷或API跟蹤有關,這是很自然的。 剩下的未知數就是為什么在GV100上API跟蹤的成本如此之高,但是我無能為力,至少現在還沒有。
我為上述測試使用gcc / 5.4和cuda / 9.0編譯了sm特定的二進制文件,並針對一個簡單的測試用例運行了RELION單線程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.