看板 C_and_CPP 關於我們 聯絡資訊
大家好!請問大家,小弟寫了一個CUDA程式,包含有3個Kernel,程式的執行順序如下 所示: CPU處理 ↓ Kernel1 處理 ↓ CPU處理 ↓ Kernel2 處理 ↓ CPU處理 ↓ Kernel3 處理 ↓ CPU處理 因為小弟的程式是CPU和CPU交替運算,也就是CPU處理好的資料給GPU運算,而GPU運算好 的資料再傳給CPU 運算,前一個步驟沒運算完成,下一個步驟無法進行,請問這種情形該 如何測時才會準呢?根據小弟的研究,目前只想到一種方式: *****************方法A(針對GPU測時)********************** float time; cudaEvent_t start, stop; cudaEventCreate (&start); cudaEventCreate (&stop); cudaEventRecord(start, 0); Kernel1 …… cudaThreadSynchronize(); cudaEventRecord(stop, 0); cudaEventSynchronize(stop); cudaEventElapsedTime(&time, start, stop); cout << time << " ms\n"; ********************************************************* 先用以上的方法測到 Kernel1 的時間,然後再用以下的方式測CPU處理的時間: *******************方法B(針對CPU測時)**************************** LARGE_INTEGER frequency; LARGE_INTEGER t1, t2; float time; QueryPerformanceFrequency(&frequency); QueryPerformanceCounter(&t1); CPU程式處理…… QueryPerformanceCounter(&t2); time = (t2.QuadPart - t1.QuadPart) * 1000.0 / frequency.QuadPart; cout << time << " ms\n"; ********************************************************************* 輪流交替使用方法A及方法B,依序為每個步驟測時,最後再「手動」相加。 想請問的是,小弟這樣做測出來的時間可靠嗎?以及還有沒有更好的辦法呢? 方法A及方法B測時的方法,就小弟的理解及查到的資料,精度是相匹配的,不知對嗎? 請知道的大大們不吝指教,萬分感謝!!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.240.229.167
kazuto:用Nsight吧... 06/08 18:54
lopohsiung:謝謝k大的回覆!想請問NSIGHT該如何測時呢? 06/09 21:55
lopohsiung:能否請k大略述一下Nsight測時的方法?感謝!m(_ _)m 06/09 22:00
kazuto:先假設你可以用Nsight了,在Nsight裡面有個New Analysis 06/11 10:14
kazuto:之後設定Application跟 Trace Settings執行後看Time Line 06/11 10:15
lopohsiung:謝謝!來研究看看~ 06/11 23:37