在计算能力 2.x 设备上,我如何确保 gpu 在使用映射固定内存时使用合并内存访问,并假设通常在使用全局内存时 2D 数据需要填充?
我似乎无法在任何地方找到有关此的信息,也许我应该看起来更好,或者也许我错过了一些东西。欢迎任何指向正确方向的指针......
在计算能力 2.x 设备上,我如何确保 gpu 在使用映射固定内存时使用合并内存访问,并假设通常在使用全局内存时 2D 数据需要填充?
我似乎无法在任何地方找到有关此的信息,也许我应该看起来更好,或者也许我错过了一些东西。欢迎任何指向正确方向的指针......
使用零拷贝内存时应该应用合并方法。引用 CUDA C 最佳实践指南:
因为数据没有缓存在 GPU 上,映射的固定内存应该只被读取或写入一次,并且读取和写入内存的全局加载和存储应该被合并。
引用 S. Cook 的“CUDA 编程”一书
如果您考虑访问全局内存会发生什么,整个缓存行是从计算 2.x 硬件上的内存中引入的。即使在计算 1.x 硬件上,从全局内存中获取相同的 128 字节,可能会减少到 64 或 32。NVIDIA 没有公布它使用的 PCI-E 传输的大小,也没有公布如何实际实现零拷贝的细节。但是,用于全局内存的合并方法可以与 PCI-E 传输一起使用。如果有足够的算术密度来隐藏 PCI-E 传输的延迟,warp 内存延迟隐藏模型同样可以应用于 PCI-E 传输。