我正在学习cuda,但目前还没有访问cuda设备,对一些统一内存行为感到好奇。据我所知,统一内存功能根据需要从主机传输数据到设备。因此,如果CPU调用了100次在GPU上的某些数据,则只在第一次尝试时将数据传输到GPU,并清除GPU上的该内存空间。(我的解释是否正确?)
1 假设如此,如果编程结构要适合GPU的内存太大而不能容纳,UM是否会交换一些最近访问的数据结构以腾出空间来完成计算,或者这仍需手动实现?
2 另外,如果您能澄清与内存传输行为相关的另一件事,我将不胜感激。显然,在访问实际数据时,数据将在前后传输,但是访问指针呢?例如,如果我有两个相同UM指针的数组(指针中的数据当前在GPU上,下面的代码从CPU执行),并且要切片第一个数组(可能删除元素),则迭代步骤是否会将指针放入新数组中以便访问数据进行Cudamem传输?肯定不会吧。