CUDA指针的reintepret_cast行为?

use*_*128 0 c++ cuda nvidia reinterpret-cast

考虑以下主机功能:

uint64_t * SomeDevPtr =...
/* Where SomeDevPtr is a pointer pointed to some device memory address allocated by cudaMalloc(); */

uint32_t * SomeDevIntPtr = reintepret_cast<uint32_t *>(SomeDevPtr);
Run Code Online (Sandbox Code Playgroud)

由于该功能,cudaMalloc将automatcially fullfill一些aligment要求(我认为它对准一些128字节存储器边界),因此,我认为无论是SomeDevIntPtrSomeDevPtr应在GPU的全局内存确切相同的物理内存地址开始,我是正确的这一?

我只是想确定一下,因为我编写的一些函数依赖于它.

Rob*_*lla 5

reinterpret_cast一个的指针到一个指针 不会(即不应)改变指针的基础的数值(比特模式表示).

因此,存在任何对齐条件都不会受到那种演员表的影响.

当然,可以将正确对齐的指针强制转换为不再具有正确对齐的类型.例如,正确对齐的float指针不能均匀地分割为4 float偏移(索引),无法正确地转换为float4指针以供CUDA设备使用.一些CUDA指针需要自然对齐.

您可能也对此问题感兴趣.