私は cuda ドライバー Api インターフェイスに不慣れですが、CUdeviceptr はハンドル パラメーターのように見えると思います。
Npp8u * src;
......
unsigned char temp;
temp = src;
CUdeviceptr devPtr;
.......
devPtr = (CUdeviceptr)temp;
上記のような変換を書いてみましたが、そうですか!
cuDevicePtr
実際には、ハンドルではなく生のポインターです。CUDA ドライバーとドライバー API の元のアーキテクトがここで議論しているのを見ることができます(そして、その過程で私を教えてくれます)。したがって、既存の「型指定された」デバイス ポインターがある場合は、それを にキャストしても安全cuDevicePtr
です。たとえば、次のようにします。
cuDevicePtr m;
cuMemAlloc(&m, size);
Npp8U* p = (Npp8U*)(m);
// Pass p to NPP library functions...
合法であり、機能するはずです。
通常、これを明示的に行うのではなく、cudaMalloc に渡すときに Npp8u* を void ** にキャストします。
Npp8u * src;
int length = ...
cudaMalloc( (void **)(&src), sizeof( Npp8u ) * length );