【发布时间】:2015-05-02 00:50:28
【问题描述】:
我花了很多时间试图找出这个问题的原因。以下代码尝试使用device 上的curand 生成一系列正态分布的随机变量。它似乎成功生成了一些,但随后因“遇到非法内存地址错误”而崩溃。非常感谢任何帮助。
main.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) 和一个超级计算集群 (CUDA 6.5) 上运行了这个程序,结果相同。
【问题讨论】: