计算机内存有两种状态,分页内存和锁页内存。通常情况下,Python 分配的是分页内存,操作系统可以把这部分内存交换到硬盘上。
当需要把数据从 CPU 搬运到 GPU 上时,如果没有使用 pin_memory,系统需要在 CPU 上限开辟一块临时的锁页内存,把数据拷贝进去,再传送数据到 GPU。而如果使用了 pin_memory,GPU 就可以直接读取,省去了中间的拷贝步骤。
一般配合 tensor.to('cuda', non_blocking=True) 使用:
x = x.pin_memory().to('cuda', non_blocking=True)