gpt4 book ai didi

c++ - CUDA curand "An illegal memory access was encountered"

转载 作者:搜寻专家 更新时间:2023-10-31 01:41:11 31 4
gpt4 key购买 nike

我花了很多时间试图找出这个问题的原因。以下代码尝试在 device 上使用 curand 生成一系列正态分布的随机变量。它似乎成功生成了一些,但随后因“遇到非法内存地址错误”而崩溃。非常感谢任何帮助。

主.cu

#include <stdio.h>
#include <cuda.h>
#include <curand_kernel.h>

class A {
public:

__device__ A(const size_t& seed) {

printf("\nA()");

curandState state;

curand_init(seed, 0, 0, &state);

for(size_t i = 0; i < 1000; ++i)
printf("\n%f", curand_normal(&state));

}

__device__ ~A() { printf("\n~A()"); }
};

/// Kernel
__global__ void kernel(const size_t& seed) {

printf("\nHello from Kernel...");

A a(seed);

return;
}

int main(void) {


kernel<<<1,1>>>(1);

cudaError_t cudaerr = cudaDeviceSynchronize();
if (cudaerr != CUDA_SUCCESS)
printf("kernel launch failed with error \"%s\".\n",
cudaGetErrorString(cudaerr));


return 0;
}

输出

Hello from Kernel...
A()
0.292537
-0.718359
0.958011
0.633711kernel launch failed with error "an illegal memory access was encountered".

我已经在我的机器 (CUDA 7.0) 和一个 super 计算集群 (CUDA 6.5) 上运行了它,结果相同。

最佳答案

摆脱内核参数(&)上的按引用传递。

你是not allowed to write GPU kernels that have pass-by-reference parameters . GPU 内核不能修改主机变量。 (忽略这里没有讨论的统一内存、零拷贝和相关机制。)

关于c++ - CUDA curand "An illegal memory access was encountered",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28796749/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com