CUDA允许使用非对齐固定内存吗?

mel*_*sgl 1 cuda

是否传递指向cudaHostRegister的指针,该指针不是页面对齐允许/可移植的?我问,因为simpleStream示例执行手动页面对齐,但我在文档中找不到此要求.也许这是一个可移植性问题(类似于mlock()支持linux上的非对齐,但POSIX一般不会)?

我更改为带宽测试并使用非对齐,但注册的内存执行与cudaHostAlloc返回的内存相同.由于我使用这些固定缓冲区来重叠复制和计算,我也对非对齐是否阻止它(迄今为止我无法检测到性能损失)感兴趣.

我所有的测试都是在x86-64 linux上进行的.

use*_*016 5

也许这是一个可移植性问题(类似于mlock()支持linux上的非对齐,但POSIX一般不会)?

双方的Linux的mlockWindows的VirtualLock将锁定包含一个或多个字节,你要锁定的地址范围内的所有页面,则不需要手动对齐.但是正如您所指出的,POSIX允许实现要求参数与mlock页面对齐.特别是OS X的情况mlock是将页面未对齐的地址四舍五入到下一页边界,因此不会锁定整个地址范围.

文档cudaHostRegister没有提及对其参数的任何对齐约束.因此,此API的消费者有权期望在底层平台上的任何对齐问题是cudaHostRegister由用户而不是用户负责.但是,如果没有看到来源cudaHostRegister,就无法确定这是否真的如此.由于样品是故意手动处理对准,因此可能cudaHostRegister没有这种透明的对准固定功能.

因此,是的,可能编写的示例是为了确保其在CUDA(Windows,Linux,Mac OS X)支持的操作系统之间的可移植性.

  • 作为指定和实现`cudaHostRegister()`的工程师:我希望StackOverflow允许双倍投票: - ) (3认同)