Эквивалент usleep() в ядре CUDA?

Я бы хотел вызвать что-то вроде usleep() внутри ядра CUDA. Основная цель состоит в том, чтобы заставить все ядра графического процессора спать или ждать в течение нескольких миллисекунд — это часть некоторых проверок работоспособности, которые я хочу выполнить для приложения 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()внутри ядра. Что могло бы быть хорошей альтернативой этому?

9
задан solvingPuzzles 29 June 2012 в 01:16
поделиться