mapped pinned memory和pinned memory有区别吗?
显然有区别,mapped pinned和pinned都是页锁定内存,即他们都是有物理的内存页来支撑的,都是驻留在内存里不被OS的换页机制交换到磁盘上的。
但前者和后者显然不同,楼主仔细看看前者是否比后者多了一个字。这就是区别。
前者可被影射到设备的地址空间上,是后者的特殊情况,是后者中的一种。
谢谢您的耐心回答,我是新手,有些问题可能问的比较那个,
没关系。谁不是从新手走来的!只有不要灌水,非常欢迎你!
对于映射,我一直不明白,假设我的主机内存是8G,我的显存只有1.5G,我是不是映射的空间只能小于1.5G呢?
这个由实现确定,理论上说,其大小只受内存大小限制,因为是在运行时传输的.但是,分页锁定会导致操作系统能够使用的内存减少,可能会减弱操作系统的性能,因此不宜分配太多.
kernel里可以直接访问mapped pinned memory,所以编程更简单。如果lz想使用mapped pinned memory,有两点特别值得注意:
- mapped pinned memory不会在GPU上自动缓存。所以kernel里每次访问mapped pinned memory时,都会通过pcie总线读取。因此对于需要多次访问的数据,使用mapped pinned memory可能会对性能影响很大。
- pinned memory的分配(cudaHostAlloc等)十分耗时,所以应避免频繁的分配释放它们。最好在程序开始分配一次,然后尽量重用分配的空间。