我正在执行一个简单的测试,比较使用 malloc() 分配的数据和使用 cudaHostAlloc() 从主机分配的数据的访问延迟(cpu 正在执行访问)。我注意到在 Jetson Tk1 上访问用 cudaHostAlloc() 分配的数据比访问用 malloc() 分配的数据要慢得多。
这不是独立 GPU 的情况,似乎只适用于 TK1。经过一番调查,我发现使用 cudaHostAlloc() 分配的数据被内存映射 (mmap) 到进程地址空间的 /dev/nvmap 区域。对于映射在进程堆上的正常 malloc 数据,情况并非如此。我知道这种映射可能是允许 GPU 访问数据所必需的,因为 cudaHostAlloc 的数据必须从主机和设备都可见。
我的问题如下:从主机访问 cudaHostAlloc 数据的开销来自哪里?映射到 /dev/nvmap 的数据是否未在 CPU 缓存中缓存?