在尝试使用CUDA分配内存时,我遇到了访问冲突写入位置错误

I get access violation writing location error when trying to allocate memory using CUDA

本文关键字:遇到 访问冲突 错误 位置 CUDA 内存 分配      更新时间:2023-10-16

我刚开始学习如何使用CUDAapi,我从这个介绍指南开始:https://devblogs.nvidia.com/parallelforall/even-easier-introduction-cuda/

我正在学习教程,但在尝试用cudaMallocManaged()分配内存后,我想初始化数组,但在试图初始化数组时,会抛出一个异常,它说:

VectorAdd.exe中0x003983D7处引发异常:0xC0000005:写入位置0x00000000时发生访问冲突。

程序可以识别我的GPU,我知道这一点,因为我制作了一个函数,可以写入我所有的CUDA设备,我的GPU就在那里。

这是我的代码,正如教程中所示:

int main(void)
{
PrintCudaDevices();
int N = 1 << 20; //1M elements
float *x, *y;
cudaMallocManaged(&x, N * sizeof(float));
cudaMallocManaged(&y, N * sizeof(float));
for (int i = 0; i < N; i++)
{
x[i] = 1.0f;
y[i] = 2.0f;
}
}

我在谷歌上搜索了那个问题,但没有找到任何有效的解决方案。

问题是我用x86编译它,但当我用x64编译它时,它运行得很好。它不适用于x86,因为统一内存需要x64位操作系统。此外,如果您想在任何内核之后使用它的结果,请不要忘记调用cudaDeviceSynchronize()