[問題] CUDA 程式的測時

看板C_and_CPP (C/C++)作者 (年輕的心)時間14年前 (2012/06/08 18:47), 編輯推噓1(105)
留言6則, 2人參與, 最新討論串1/1
大家好!請問大家,小弟寫了一個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

06/08 18:54, , 1F
用Nsight吧...
06/08 18:54, 1F

06/09 21:55, , 2F
謝謝k大的回覆!想請問NSIGHT該如何測時呢?
06/09 21:55, 2F

06/09 22:00, , 3F
能否請k大略述一下Nsight測時的方法?感謝!m(_ _)m
06/09 22:00, 3F

06/11 10:14, , 4F
先假設你可以用Nsight了,在Nsight裡面有個New Analysis
06/11 10:14, 4F

06/11 10:15, , 5F
之後設定Application跟 Trace Settings執行後看Time Line
06/11 10:15, 5F

06/11 23:37, , 6F
謝謝!來研究看看~
06/11 23:37, 6F
文章代碼(AID): #1FqTWkge (C_and_CPP)
文章代碼(AID): #1FqTWkge (C_and_CPP)