一、总览
虚拟内存是一种计算机内存管理的技术,它让程序认为程序自身有一段完整的连续可用的内存(一个地址空间)。当程序运行时所占的内存空间大于物理空间容量,操作系统可以将暂时不用的数据放入到磁盘,用的时候再拿出来,这样磁盘有一部分空间就是用来存放这样的数据,即ram与硬盘的临时空间结合使用,这个临时空间就叫虚拟内存。每个程序用的虚拟地址相互独立,不同的程序可以使用相同的虚拟地址。
物理地址就是物理内存上的地址,但虚拟地址空间是一个空间,不是真正存在的,只是通过CPU的寻址虚拟出来的一个范围,操作系统和软件(其实操作系统也可以说是软件)可以根据cpu的最大寻址范围来建立自己的寻址范围。而虚拟内存是实实在在的硬盘的空间。
二、固定内存 p 127 p_{127} p127
主机内存分为 可分页内存(Pagable) 和 固定内存(Pinned Memory)
1、对于可分页内存:(由
M
a
l
l
o
c
Malloc
Malloc分配的)
因为主机虚拟内存中分配的数据在物理内存中是随时可能被移动的(虚拟内存技术),所以当数据在可分页内存时,系统随时可能会移动数据,
此时将该数据传输给GPU时,需要将可分页内存复制到一块“临时的”页锁定内存,然后再从这块“临时的页锁定内存“复制到GPU
页锁定内存是占用系统的物理内存的,并不能交换到磁盘上,当机器的物理内存比较少时程序运行会受到影响
2、对于固定内存:(由
c
u
d
a
M
a
l
l
o
c
H
o
s
t
cudaMallocHost
cudaMallocHost分配的)
固定内存是页面锁定的并且对设备来说是可访问的,由于固定内存能被设备直接访问,所以允许更好的带宽进行读写。
需要注意的是,分配过多的固定内存可能会降低主机系统的性能,这是因为它减少了用于存储虚拟内存数据的可分页内存的数量。使用固定内存在CPU与GPU间传输数据有更高的性能,但是要慎用。
三、零拷贝内存
主机和设备都可以访问零拷贝内存。
零拷贝内存的技术实现主要靠固定内存(不可分页),该内存映射到设备地址空间中。(有点像虚拟技术和分页的关系)
https://blog.csdn.net/DU_YULIN/article/details/123365688