2016-09-15 102 views
0

我想用特定的超時啓動CUDA內核。我知道CUDA內核有一個設備超時,但是由於我在共享服務器上工作,即使有可能,我也無法設置此超時。用超時啓動CUDA內核

我需要這個用於自動調整應用程序。我想設置一個超時來取消內核運行,它不會比已經找到的最快的運行時更快。

有沒有辦法像這樣的超時啓動CUDA內核? 在此先感謝!

+0

https://devtalk.nvidia.com/default/topic/902660/per-kernel-timeout-/ – tera

回答

1

感謝tera發佈的鏈接,我能夠自己實現超時。正如該線程所述,它可以按如下方式完成:

const int timeout = 2000000; 
int progressed = 0; 
while (cudaEventQuery(stop) != cudaSuccess) { 
    usleep(20000); 
    progressed += 20000; 
    if (progressed >= timeout) { 
     cudaDeviceReset(); 

     throw std::runtime_error("timeout"); 
    } 
} 
// No timeout occured 

在這種情況下,stop是內核執行後記錄的事件。