pytorch正確測試代碼在cuda運行時間---torch.cuda.synchronize()

正確測試代碼在cuda運行時間,需要加上torch.cuda.synchronize(),使用該操作來等待GPU全部執行結束,CPU纔可以讀取時間信息。

 

兩種測試時間的方式

 

第一種:

start = time.time()
result = model(input)
end = time.time()

第二種:

torch.cuda.synchronize()   #增加同步操作
start = time.time()

result = model(input)

torch.cuda.synchronize() #增加同步操作
end = time.time()

一共上述兩種測試時間的方式,正確的方式是第二種,爲什麼是這樣呢?在pytorch裏面,程序的執行都是異步的。如果採用第一種方式,測試的時間會很短,因爲執行完end=time.time()程序就退出了,後臺的cuda也因爲python的退出退出了,如果採用第二種方式,代碼會同步cuda的操作,等待gpu上的操作都完成了再繼續運行end = time.time() .

 

但是,如果將第一段代碼改爲 
 

start = time.time()
result = model(input)
print(result)  #增加print
end = time.time()

這時候會發現第三種方法和第二種方法的時間是差不多的,這是因爲第三段代碼會等待gpu上的結果執行完傳給print函數,所以時間就和第二段同步操作的時間基本上是一致的了,將print(result)換成result.cpu()結果是一致的了。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章