Tôi muốn gọi một cái gì đó như usleep()
bên trong một hạt nhân CUDA. Mục tiêu cơ bản là làm cho tất cả các lõi GPU ngủ hoặc bận rộn với một số millescond - đó là một phần của một số kiểm tra độ chính xác mà tôi muốn làm cho một ứng dụng CUDA. nỗ lực của tôi lúc làm điều này là dưới đây:Tương đương với việc ngủ() trong hạt nhân 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;
}
tôi nhận được lỗi sau khi tôi cố gắng biên dịch này sử dụng NVCC:
error: calling a host function("usleep") from a __device__/__global__
function("gpu_uSleep") is not allowed
Rõ ràng, tôi không được phép sử dụng một chức năng máy chủ như usleep()
bên trong hạt nhân. Điều gì sẽ là một lựa chọn tốt cho điều này?
Cảm ơn! Tôi muốn sử dụng clock64() để tôi có thể đếm lâu hơn và giảm tác động của việc lăn lộn. Khi tôi biên dịch một hạt nhân CUDA bao gồm một cuộc gọi clock64(), tôi nhận được "lỗi: định danh" clock64 "là không xác định." Khi tôi sử dụng clock(), chương trình sẽ biên dịch đúng cách. Tôi đang sử dụng nvcc 4.0. Dựa trên tìm kiếm google nhanh, có vẻ như clock64() được cho là nằm trong cuda/nvcc 4.0. Bất kỳ suy nghĩ về cách giải quyết này? – solvingPuzzles
Bạn cũng cần khả năng tính toán> = 2.0 để có được 'clock64()'. –
thú vị. Tôi đang sử dụng một GTX480, mà nvidia liệt kê là có khả năng tính toán 2.0. – solvingPuzzles