【问题标题】:I get access violation writing location error when trying to allocate memory using CUDA尝试使用 CUDA 分配内存时出现访问冲突写入位置错误
【发布时间】:2017-08-31 02:54:55
【问题描述】:

我刚开始学习如何使用 CUDA api,我从这个介绍指南开始: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;
}
}

我用谷歌搜索了这个问题,但没有找到任何可行的解决方案。

【问题讨论】:

  • 这个问题在你链接的博客文章中讨论here

标签: c++ cuda


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-20
    • 2012-11-01
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    相关资源
    最近更新 更多