这种错误通常是由于 CUDA 程序中访问了未分配或已释放的内存而导致的。以下是一些示例代码来避免这种错误:
- 确保分配设备内存后,调用cudaMemcpy函数将主机内存中的数据复制到设备内存中。
float *devPtr;
cudaMalloc(&devPtr, size);
cudaMemcpy(devPtr, hostPtr, size, cudaMemcpyHostToDevice);
- 在调用CUDA核函数时,确保为每个线程(blockIdx.x)分配足够的内存。
global void kernel(int *data, int size)
{
int tid = blockIdx.x * blockDim.x + threadIdx.x;
if (tid < size)
{
data[tid] = tid;
}
}
int main()
{
int size = 100;
int *data;
cudaMalloc(&data, size * sizeof(int));
kernel<<<(size + THREADS_PER_BLOCK - 1) / THREADS_PER_BLOCK, THREADS_PER_BLOCK>>>(data, size);
cudaFree(data);
}