NVIDIA Nsight Systems CUDA 跟蹤
CUDA跟蹤
NVIDIA Nsight Systems能夠捕獲有關在概要過程中執行CUDA的信息。
可以在報告的時間軸上收集和呈現以下信息:
CUDAAPI跟蹤-跟蹤應用程序進行的CUDA運行時和CUDA驅動程序調用。
CUDA運行時調用通常以CUDA前綴開始(例如,cudaLaunch)。
CUDA驅動程序調用通常以cu前綴開始(例如,cuDeviceGetCount)。
跟蹤主機上發生的操作(例如,對內存的跟蹤)和對內存執行的拷貝。在使用CUDAAPI的線程中,時間軸樹中將顯示其他子行。
在時間線行樹的底部附近,GPU節點將出現並包含一個CUDA節點。在CUDA節點中,進程中使用的每個CUDA上下文將與其相應的CUDA流一起顯示。steam將包含內存操作和GPU上的內核啟動。內核啟動用藍色表示,內存傳輸用紅色顯示。
獲取CUDA信息最簡單的方法是從NVIDIA Nsight Systems啟動進程,它將為您設置環境。為此,只需設置正常啟動並選中Collect CUDA trace復選框。
其他配置參數可用:
收集超過X秒的API調用的回溯-打開CUDA API回溯的收集,並設置CUDA API事件在收集其回溯之前必須花費的最短時間。將此值設置得太低可能會導致應用程序開銷過高,並嚴重增加結果文件的大小。
定期刷新數據-指定嘗試刷新CUDA跟蹤數據的時間段。通常,為了收集完整的CUDA跟蹤,應用程序需要完成用於CUDA工作的設備(調用cudaDeviceReset()),然后讓應用程序正常退出(而不是崩潰)。
此選項允許在設備完成之前刷新CUDA跟蹤數據。但是,它可能會給隨機的CUDA驅動程序或CUDA運行時API調用帶來額外的開銷。
跳過一些API調用-避免跟蹤無關緊要的CUDA運行時API調用(即,cudaConfigureCall()、cudaSetupArgument()、cudaHostGetDevicePointers())。不跟蹤這些函數可以顯著減少分析開銷,而不會丟失任何有趣的數據。(見下面的CUDA跟蹤過濾器)
如果需要,可以手動設置目標應用程序以收集CUDA跟蹤。要獲取有關CUDA執行的信息,應滿足以下要求:
如果需要,可以手動設置目標應用程序以收集CUDA跟蹤。要獲取有關CUDA執行的信息,應滿足以下要求:
根據流程的體系結構,應使用指定的環境變量啟動已分析的流程:
對於ARMv7(32位)進程:
CUDA_INJECTION32_PATH,它應該指向注入庫:
/opt/nvidia/nsight_systems/libToolsInjection32.so
對於ARMv8(64位)進程:CUDA_INJECTION64_PATH,它應該指向注入庫:
/opt/nvidia/nsight_systems/libToolsInjection64.
如果應用程序由NVIDIA Nsight Systems啟動,所有必需的環境變量都將自動設置。 請注意,如果在復制所有收集的CUDA跟蹤數據之前應用程序崩潰,則部分或所有數據可能會丟失,並且不會出現在報告中。