这里主要介绍CUDA的Overlapping计算。
1. Pinned Memory
所谓的Pinned Memory,是一种锁定内存物理地址的方法,对应于操作系统的分页技术。众所周知,操作系统的虚拟地址空间大于物理地址,通过分页(paging)技术来实现其转换与管理。如果在cudaMemcpy()过程中,正在发出或者接收数据的内存被paged out了,则对程序的性能肯定有影响。使用Pinned Memory能够避免这一问题。实际上,在调用cudaMemcpy(dest, src, ...)时,程序会自动检测dest或者src是否为Pinned Memory,若不是,则会自动将其内容拷入一不可见的Pinned Memory中,然后再进行传输。可以手动指定Pinned Memory,对应的API为:cudaHostAlloc(address, size, option)分配地址,cudaFreeHost(pointer)释放地址。注意,所谓的Pinned Memory都是在Host端的,而不是Device端。
2. Overlapping
部分的CUDA设备支持Overlap特性,使I/O和计算能够并行处理。这种特性能够更加优化程序性能。