【问题标题】:Pinned memory in Nvidia CUDANvidia CUDA 中的固定内存
【发布时间】:2012-03-23 16:44:16
【问题描述】:

我正在使用 Streams 和明显固定内存为 GPU 编写矩阵加法程序。所以我在固定内存中分配了 3 个矩阵,但在特定维度之后它显示 API 错误 2:内存不足。我的 RAM 是 4GB,但我不是能够使用超过800MB。有什么方法可以控制这个上限吗? 我的系统配置: 英伟达 GEForce 9800GTX 英特尔酷睿 2 四核 对于流式执行代码如下所示

(int i=0;i<no_of_streams;i++)
    {
       cudaMemcpyAsync(device_a+i*(n/no_of_streams),hAligned_on_host_a+i*(n/no_of_streams),nbytes/no_of_streams,cudaMemcpyHostToDevice,streams[i]);
       cudaMemcpyAsync(device_b+i*(n/no_of_streams),hAligned_on_host_b+i*(n/no_of_streams),nbytes/no_of_streams,cudaMemcpyHostToDevice,streams[i]);
       cudaMemcpyAsync(device_c+i*(n/no_of_streams),hAligned_on_host_c+i*(n/no_of_streams),nbytes/no_of_streams,cudaMemcpyHostToDevice,streams[i]);
       matrixAddition<<<blocks,threads,0,streams[i]>>>(device_a+i*(n/no_of_streams),device_b+i*(n/no_of_streams),device_c+i*(n/no_of_streams));
       cudaMemcpyAsync(hAligned_on_host_a+i*(n/no_of_streams),device_a+i*(n/no_of_streams),nbytes/no_of_streams,cudaMemcpyDeviceToHost,streams[i]);
       cudaMemcpyAsync(hAligned_on_host_b+i*(n/no_of_streamss),device_b+i*(n/no_of_streams),nbytes/no_of_streams,cudaMemcpyDeviceToHost,streams[i]);
       cudaMemcpyAsync(hAligned_on_host_c+i*(n/no_of_streams),device_c+i*(n/no_of_streams),nbytes/no_of_streams,cudaMemcpyDeviceToHost,streams[i]));

    }

【问题讨论】:

  • 可能是一堆原因,从碎片化的内存到错误的代码。很高兴看到您正在做什么以提出有用的建议。
  • 代码流程如下`为每个流创建 2 个流只是想拥有更多固定内存,这是因为 GPU 的全局内存约为 1GB 吗?
  • 通过编辑问题输入任何代码。
  • 什么操作系统(是 32 位还是 64 位)?

标签: cuda


【解决方案1】:

因此,您没有指定这是否发生在 cudaMalloc 或 cudaHostAlloc 函数调用之后。

固定内存是一种有限的资源。任何定义为固定内存的内存必须始终位于 RAM 中。因此,这为其他系统应用程序留出了更少的 RAM 空间。这意味着,如果你有 4GB 的 RAM,你就不能有 4GB 的固定内存,否则其他任何东西都无法运行。

800MB 可能是系统强加的限制。考虑到它是您 RAM 的四分之一,这可能是一个合理的限制。它也非常接近您的全局内存的大小。卡上的故障不会转化为主机上的故障,所以如果它在抱怨而不必运行 cudaGetLastError 之类的东西,这可能是主机上的问题。

抱歉,我不知道增加固定内存限制的具体细节。

【讨论】:

  • 但是我在具有 4GB 全局内存的 Tesla C2070 上进行了相同的实验..同时运行相同的程序,每个矩阵占用 256MB 内存的程序被突然杀死..是因为同样的问题吗?
  • 看起来可能不是那张卡。尝试在每次分配后添加 cudaThreadSynchronize 和 cudaGetLastError 调用,您应该会看到哪个失败了。
猜你喜欢
  • 1970-01-01
  • 2013-10-16
  • 2013-10-06
  • 2020-04-06
  • 2014-07-18
  • 2013-05-01
  • 1970-01-01
  • 2011-02-08
  • 2011-08-09
相关资源
最近更新 更多