问题标签 [unified-memory]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
535 浏览

multithreading - CUDA统一内存可以被另一个CPU线程写入吗?

我正在编写一个程序,它从相机中检索图像并使用 CUDA 处理它们。为了获得最佳性能,我将一个 CUDA 统一内存缓冲区传递给图像采集库,该库将写入另一个线程中的缓冲区。

这会导致在我无法访问的库代码中编程挂起的各种奇怪结果。如果我使用普通的内存缓冲区,然后复制到 CUDA,问题就解决了。所以我开始怀疑可能不允许从另一个线程写作,并且像我一样用谷歌搜索,我找不到明确的答案。

那么是否允许从另一个 CPU 线程访问统一内存缓冲区?

0 投票
1 回答
426 浏览

memory-management - 如何将统一内存应用到现有的对齐主机内存

我参与了将 CUDA 集成到一些现有软件中的工作。我要集成的软件是伪实时的,所以它有一个内存管理器库,可以手动传递来自预先分配的单个大内存分配的指针。CUDA 的统一内存对我们很有吸引力,因为理论上我们可以将这个大内存块更改为统一内存,让现有的 CPU 代码仍然工作,并允许我们添加 GPU 内核,而对现有数据的更改很少I/O 流。

我们现有的 CPU 处理代码的一部分需要内存对齐到一定的对齐。cudaMallocManaged() 不允许我指定内存对齐方式,我觉得必须在这些 CPU 部分的“托管”和严格 CPU 缓冲区之间进行复制几乎违背了 UM 的目的。有没有已知的方法来解决我缺少的这个问题?

我在 Stack Overflow 上找到了这个链接,理论上似乎可以解决它,但我无法用这种方法产生好的结果。使用 CUDA 9.1、特斯拉 M40 (24GB):

当使用 memalign() + cudaHostRegister() (USE_HOST_REGISTER == 1) 时,最后一个打印语句打印 0。通过内核在较大文件中启动的设备访问会报告非法访问。

使用 cudaMallocManaged() (USE_HOST_REGISTER == 0) 时,最后一个打印语句按预期打印 1。

编辑: cudaHostRegister() 和 cudaMallocManaged() 确实为我返回成功的错误代码。在我共享的示例中留下了这个错误检查,但我在最初的集成工作中确实检查了它们。刚刚添加了要检查的代码,两者仍然返回 CUDA_SUCCESS。

感谢您的见解和建议。

0 投票
1 回答
328 浏览

c++ - 用 cudaMemPrefetchAsync 替换 cudaMemcpy2D

我正在尝试以与提供相同的方式对驻留在统一内存中的数据进行异步内存传输(主机到设备),即使用目标(设备)内存的间距值cudaMemcpy2DAsync()

但是,据我了解:

  • 我不能使用cudaMemcpy2DAsync(),因为它需要固定内存,并且使用分配的统一内存块cudaMallocManaged()默认情况下不固定,也不能手动固定。

  • 我不能使用cudaMemPrefetchAsync(),因为它只复制一个连续的内存块,而cudaMemcpy2DAsync()包括额外的选项来根据给定的音高值缓冲我的数据行。

我的问题:

如何以异步方式将(a) 驻留在统一内存中的数据(b) 从主机传输到设备,同时确保以正确的间距复制数据(c)价值

我当前的传输使用cudaMemcpy2D()如下所示:

(如您所见,源头的音高实际上为零,而目的地的音高dest_pitch——也许这有帮助?)

另一个麻烦是我自己不分配需要传输的数据,因此我无法在不创建数据的额外副本的情况下手动应用音高(这将是有问题的)。

我的一个想法是简单地逐行复制数据。然而,这将意味着大量非常小的数据传输,这听起来有点可怕。在我的示例中,它将是 3,040,000 次传输,每次传输 304 字节.. 但如果传输在多个流中异步传播,那么在 Pascal 上可能没问题..?

任何指针/想法将不胜感激!

0 投票
1 回答
98 浏览

c++ - 统一内存分配 cuda 的功能关键字

我从 CUDA 编程开始,作为实现粒子积分器的开始,我创建了一个积分器类,它保存有关粒子的数据并且应该能够集成它。数据来自另一个容器类,我想把这些数据分配到统一内存上。为此,我有一个成员函数“_allocate”,它所做的只是为成员变量调用 cudaMallocManaged。现在我想知道我应该用什么样的函数关键字来包装这个函数。

我读到您不能在类定义中使用“全局”,现在我同时使用主机和设备,因为主机和设备都应该可以使用统一内存,但我不确定这是否是正确的方法。

这是我想在其中实现的类:

不知道这个是不是和function关键字有关,但是我也想在分配后查看cudaError看是否成功

0 投票
1 回答
79 浏览

cuda - gpu可以访问malloc分配的内存吗?

我正在尝试检查 GPU 是否可以访问系统分配器(例如 malloc)分配的内存。

我正在使用 Cuda 10.2,文档中提到该设备应支持 pageableMemoryAccessUsesHostPageTables。但是当我在我的机器上检查它时,它返回 0。

我想知道 x86 是否支持此功能?

英伟达

0 投票
1 回答
612 浏览

windows - CUDA统一内存和Windows 10

在使用 CudaMallocManaged() 分配内部包含数组的结构数组时,即使我有足够的可用内存,我也会收到“内存不足”错误。这是一些复制我的问题的代码:

当我调用 cudaMallocManaged() 一次来分配一块内存时,似乎没有问题,正如我在最后一段注释代码中所展示的那样。我有一个 GeForce GTX 1070 Ti,我使用的是 Windows 10。一个朋友试图在一台装有 Linux 的 PC 上编译相同的代码,它工作正常,而在另一台装有 Windows 10 的 PC 上它也有同样的问题。WDDM TDR 是停用。任何帮助,将不胜感激。谢谢。

0 投票
1 回答
257 浏览

c++ - CUDA:统一内存和指针地址的变化?

我正在使用 cuBlas 为一些矩阵运算创建一个库。我首先实现了一个矩阵乘法

库头类的片段(.h 文件)

乘法库类实现的片段(.cu 文件)

然后我创建了一个 gtest 程序来测试我的功能。我在函数中传递了 adouble *result = NULL;作为C参数MatrixMultiplicationDouble

gtest 程序片段(.cc 文件)

cuBlas 中的例程工作正常,因为当我在.cu文件中打印矩阵时可以看到结果。但是,当我尝试访问result我的 gtest 文件时,我遇到了段错误。经过进一步检查,我注意到result指针地址在.cu. .cpp作为一个例子,我得到:

我认为通过使用统一内存,我可以从主机或设备访问该指针。我似乎无法找到有关此地址为何更改并修复 seg 故障问题的答案。使用统一内存有什么我遗漏的吗?谢谢!

0 投票
1 回答
288 浏览

c++ - cuda统一内存泄漏

我正在编写一个程序,它使用 cuda 进行一些基本的对象检测。我遇到了一个问题,我用 cudaMallocManaged 分配统一内存,用它做一些处理,然后用 cudaFree 释放它。尽管事件,cudaFree 从未返回错误,内存似乎从未真正被释放,因为任务管理器显示系统内存使用量和 gpu 共享内存使用量都在不断增加。我对统一内存的理解是否存在根本性错误,或者这是一个错误?

最小的例子:

我使用的是 Windows 10,cuda 版本是 10.2,驱动版本是 26.21.14.4122。

0 投票
1 回答
373 浏览

cuda - 在 CUDA Unified Memory 多 GPU 或多处理器中使用原子算术运算

我正在尝试实现一个使用统一内存的 CUDA 程序。我有两个统一的数组,有时它们需要自动更新。

下面的问题有一个针对单个 GPU 环境的答案,但我不确定如何扩展问题中给出的答案以适应多 GPU 平台。

问题:cuda atomicAdd 示例无法产生正确的输出

如果您需要此信息,我有 4 个 Tesla K20,并且所有这些都更新了必须以原子方式完成的阵列的一部分。

我将不胜感激任何帮助/建议。

0 投票
1 回答
614 浏览

pytorch - 是否有带有 CUDA 统一 GPU-CPU 内存分支的 PyTorch?

因此,当一批一张图像需要 15GB 时,训练 DNN 模型可能会很痛苦。速度对我来说不是那么重要,但要适应更大的批次(和模型)。所以我想知道是否有一个带有 CUDA Unified Memory fork 的 PyTorch 或类似的东西来适应巨型模型(每个 GPU RAM 有 16gb,但 CPU 端有 250gb 似乎相当合理)?