CUDAHOSTER注册移动地址范围或复制到固定注册范围是否更快

CUDAHOSTER注册移动地址范围或复制到固定注册范围是否更快,cuda,Cuda,CUDAHOSTER注册移动地址范围窗口或复制到固定注册地址范围是否更快? CudaHosterRegister引脚主机内存使可分页内存无法分页,以加速从主机到设备内存的传输。可以注册一个主机内存范围,然后传输,然后注册另一个范围,等等。或者,可以注册一个主机内存范围,复制到该范围并传输,然后使用第二个数据集重复该过程,而不重新注册地址范围。涉及CUDA与操作系统交互的主机注册过程花费的时间非常昂贵。根据经验,它所花费的时间可能与一次传输数据所花费的时间相同,实际上是第一次使用缓冲区传输数据所花

CUDAHOSTER注册移动地址范围窗口或复制到固定注册地址范围是否更快?
CudaHosterRegister引脚主机内存使可分页内存无法分页,以加速从主机到设备内存的传输。可以注册一个主机内存范围,然后传输,然后注册另一个范围,等等。或者,可以注册一个主机内存范围,复制到该范围并传输,然后使用第二个数据集重复该过程,而不重新注册地址范围。

涉及CUDA与操作系统交互的主机注册过程花费的时间非常昂贵。根据经验,它所花费的时间可能与一次传输数据所花费的时间相同,实际上是第一次使用缓冲区传输数据所花费时间的两倍

因此,仅从性能角度来看,注册一个缓冲区并使用一次很少是一个显著的性能胜利。但是,您可能仍然希望这样做,以实现并发性等其他功能

如果一个缓冲区将被重复使用,固定(即注册缓冲区)通常是一种性能优势,与固定单个连续区域并使用一次相比,这种优势随着缓冲区的重用程度而增加。但是,如果有必要,这并不考虑将数据复制到固定缓冲区和从固定缓冲区复制数据的成本


固定的好处(如果有的话)取决于您的特定使用模式,以及您将要与之进行比较的确切使用形式。但是,重复一次,与在传输中使用非固定内存相比,固定缓冲区并只使用它一次很少能显著提高性能。

考虑到工具包选择复制到缓冲区,这可能是更快的方法。但为什么不自己尝试一下并测试一下呢?根据我的经验,创建一个注册内存池并重新使用它比为每个副本注册一个新内存要快得多。例如,我使用这种方法来处理视频流,其中每一帧都必须上传到GPU,因此我只为初始帧注册了一个内存空间,并将其重新用于后续帧。