我想在CUDA內核中調用類似usleep()
的東西。基本目標是使所有GPU內核在幾毫秒內都處於睡眠或等待狀態 - 這是我想爲CUDA應用程序執行某些理智檢查的一部分。我在做這個嘗試是如下:CUDA內核中usleep()的等價物?
#include <unistd.h>
#include <stdio.h>
#include <cuda.h>
#include <sys/time.h>
__global__ void gpu_uSleep(useconds_t wait_time_in_ms)
{
usleep(wait_time_in_ms);
}
int main(void)
{
//input parameters -- arbitrary
// TODO: set these exactly for full occupancy
int m = 16;
int n = 16;
int block1D = 16;
dim3 block(block1D, block1D);
dim3 grid(m/block1D, n/block1D);
useconds_t wait_time_in_ms = 1000;
//execute the kernel
gpu_uSleep<<< grid, block >>>(wait_time_in_ms);
cudaDeviceSynchronize();
return 0;
}
我收到以下錯誤,當我嘗試編譯此使用NVCC:顯然
error: calling a host function("usleep") from a __device__/__global__
function("gpu_uSleep") is not allowed
,我不能使用主機功能,如內核中的usleep()
。什麼會是一個很好的選擇呢?
謝謝!我想使用clock64(),這樣我可以計算更長的時間並減少滾動的影響。當我編譯包含clock64()調用的CUDA內核時,我得到「error:identifier」clock64「未定義。」當我使用clock()時,程序編譯正確。我正在使用nvcc 4.0。基於快速谷歌搜索,看起來clock64()應該是在cuda/nvcc 4.0中。有關如何解決這個問題的任何想法? – solvingPuzzles
您還需要計算能力> = 2.0才能獲得'clock64()'。 –
有趣。我使用的是GTX480,nvidia列出了具有計算能力2.0的GTX480。 – solvingPuzzles