gpt4 book ai didi

pointers - cuda统一内存: memory transfer behaviour

转载 作者:行者123 更新时间:2023-12-02 01:22:48 25 4
gpt4 key购买 nike

我正在学习 cuda,但目前还没有访问 cuda 设备并且对一些统一的内存行为感到好奇。据我了解,统一内存功能在需要知道的基础上将数据从主机传输到设备。因此,如果 cpu 调用某些数据 100 次,即在 gpu 上,它仅在第一次尝试时传输数据并清除 gpu 上的内存空间。 (到目前为止我的解释是否正确?)

1 假设这样,是否存在一些行为,如果适合 gpu 的编程结构对于设备内存而言太大,UM 是否会交换一些最近访问的数据结构以腾出空间对于下一个需要完成的计算还是仍然需要手动完成?

2 此外,如果您能澄清与内存传输行为相关的其他内容,我将不胜感激。很明显,数据会在访问实际数据时来回传输,但是访问指针呢?例如,如果我有 2 个相同 UM 指针的数组(指针中的数据当前在 gpu 上,下面的代码是从 cpu 执行的)并且要对第一个数组进行切片,可能要删除一个元素,迭代会跨过放置在新数组中的指针,以便访问数据以进行 cudamem 传输?肯定不是。

最佳答案

As far as i understood, the unified memory functionality, transfers data from host to device on a need to know basis. So if the cpu calls some data 100 times, that is on the gpu, it transfers the data only during the first attempt and clears that memory space on the gpu. (is my interpretation correct so far?)

第一部分是正确的:当 CPU 尝试访问驻留在设备内存中的页面时,它会透明地传输到主内存中。设备内存中的页面发生了什么可能是一个实现细节,但我想它可能不会被清除。毕竟,只有 CPU 写入页面并且 设备再次访问它时,才需要刷新其内容。我想最好问问 NVIDIA 的人。

Assuming this, is there some behaviour that, if the programmatic structure meant to fit on the gpu is too large for the device memory, will the UM exchange some recently accessed data structures to make space for the next ones needed to complete to computation or does this still have to be achieved manually?

在 CUDA 8 之前,不,您不能分配(超额订阅)超过设备所能容纳的数量。从 CUDA 8 开始,有可能:页面在设备内存中进出错误(可能使用 LRU 策略,但我不确定是否在任何地方指定),这允许处理不适合设备的数据集并且需要手动流式传输。

It seems obvious that data would be transferred back on fro upon access of the actual data, but what about accessing the pointer?

它的工作原理完全一样。无论您是取消引用由 cudaMalloc(甚至 malloc)返回的指针,还是取消引用该数据中的某个指针,都没有区别。驱动程序以相同的方式处理它。

关于pointers - cuda统一内存: memory transfer behaviour,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38901138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com