usleep()
CUDA カーネル内のようなものを呼び出したいと思います。基本的な目標は、すべての GPU コアを数ミリ秒の間スリープまたはビジーウェイトにすることです。これは、CUDA アプリケーションに対して実行したいサニティ チェックの一部です。これを行う私の試みは以下のとおりです。
#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()
明らかに、カーネル内などでホスト機能を使用することは許可されていません。これに代わる良い方法は何ですか?