簡體   English   中英

NVidia Visual Profiler過多的分析器開銷

[英]Excessive profiler overhead with NVidia Visual Profiler

當嘗試使用nvvp (或使用nvprof )分析代碼時,我得到了大量的分析開銷:

nvvp時間軸,總運行時間為98ms,開銷為85ms 總時間為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM