我是cuda驱动Api接口(interface)的新手,但我认为CUdeviceptr看起来像一个句柄参数。所以我对CUdeviceptr和npp8u *之间的转换感到困惑。
Npp8u * src;
......
unsigned char temp;
temp = src;
CUdeviceptr devPtr;
.......
devPtr = (CUdeviceptr)temp;
我尝试像上面那样编写转换,对吗!
最佳答案
cuDevicePtr
实际上是一个原始指针,而不是句柄。你可以看CUDA驱动和驱动API的原始架构师讨论这个here (并在此过程中对我进行教育)。因此,如果您有现有的“类型化”设备指针,则可以安全地将其强制转换为 cuDevicePtr,反之亦然,例如:
cuDevicePtr m;
cuMemAlloc(&m, size);
Npp8U* p = (Npp8U*)(m);
// Pass p to NPP library functions...
是合法的并且应该有效。
关于api - 如何将 Npp8u * 转换为 CUdeviceptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23813275/