CUDA指针的reintepret_cast行为?

时间:2014-02-18 03:52:42

标签: 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);

由于该函数,cudaMalloc将自动满足一些对齐要求(我认为它与某个128字节的内存边界对齐),因此我认为SomeDevIntPtrSomeDevPtr都应该是从GPU的全局内存中的相同物理内存地址开始,我对此是否正确?

我只是想确认一下,因为我写的一些函数依赖于它。

1 个答案:

答案 0 :(得分:5)

指针reinterpret_cast指针 does not(即不应该)更改基础数值(位模式表示)指针。

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

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

您可能也对this question感兴趣。