【发布时间】:2016-12-18 11:23:32
【问题描述】:
我正在学习 cuda,但目前还没有访问 cuda 设备,并且对一些统一的内存行为感到好奇。据我了解,统一内存功能在需要知道的基础上将数据从主机传输到设备。因此,如果 cpu 在 gpu 上调用某些数据 100 次,它只会在第一次尝试时传输数据并清除 gpu 上的内存空间。 (到目前为止我的解释正确吗?)
1 假设这一点,是否存在一些行为,如果旨在适合 gpu 的编程结构对于设备内存来说太大,UM 是否会交换一些最近访问的数据结构以腾出空间下一个需要完成计算还是必须手动完成?
2 此外,如果您能澄清与内存传输行为相关的其他内容,我将不胜感激。很明显,在访问实际数据时数据会被反向传输,但是访问指针呢?例如,如果我有 2 个相同 UM 指针的数组(指针中的数据当前在 gpu 上,并且从 cpu 执行以下代码)并且要对第一个数组进行切片,也许是要删除一个元素,那么迭代跨过被放置到新数组中的指针,以便访问数据以进行 cudamem 传输?肯定不会。
【问题讨论】: