2013-01-08 41 views
1

我有一個CUDA內核,它在我的舊特斯拉卡中使用超過20秒。 如果內核運行時間超過20秒,我想以編程方式殺死CUDA內核。我的意圖是,如果內核運行超過20秒,那麼應該殺死該內核並運行另一個內核,其精度較低。如何以編程方式殺死CUDA內核

我的操作系統是Windows 7 64位。 CUDA版本是5.0。 GPU是特斯拉C1060

請幫助我在不退出應用程序的情況下殺死CUDA內核。

+0

哪部分是你的問題?時機還是殺戮? –

+1

我不認爲這是可能的。另外,我不認爲這是必要的。當然,你可以根據問題的大小和輸入參數估計你的內核的運行時間,並根據它選擇精度?或者,當程序瞭解更多關於輸入參數如何影響運行時間的信息時,您可以計算內核並動態調整切換點。 –

+0

@RogerDahl:聽起來像你在假設OP可以解決暫停問題。 – leftaroundabout

回答

1

您可以在CC 2.0或更高版本的設備上使用assert(其失敗)從內核中停止運行現有內核。但我認爲這不會達到既定目的,至少不方便。

您也可以使用cudaDeviceReset()暫停主機端設備的操作。我沒有完全想到這一點,但是應該可以在主機側監視某種計時器,並且在超時週期結束時重置設備,如果結果的某些指示不存在。這種類型的重置有點撬棍,因此您需要完全重新啓動該設備上的操作(包括cudaMallocs等)才能重新啓動所需的操作。