2

私は cuda ドライバー Api インターフェイスに不慣れですが、CUdeviceptr はハンドル パラメーターのように見えると思います。

Npp8u * src;
......
unsigned char temp;
temp = src;
CUdeviceptr devPtr;
.......
devPtr = (CUdeviceptr)temp;

上記のような変換を書いてみましたが、そうですか!

4

3 に答える 3

4

cuDevicePtr実際には、ハンドルではなく生のポインターです。CUDA ドライバーとドライバー API の元のアーキテクトがここで議論しているのを見ることができます(そして、その過程で私を教えてくれます)。したがって、既存の「型指定された」デバイス ポインターがある場合は、それを にキャストしても安全cuDevicePtrです。たとえば、次のようにします。

cuDevicePtr m;
cuMemAlloc(&m, size);

Npp8U* p = (Npp8U*)(m);
// Pass p to NPP library functions...

合法であり、機能するはずです。

于 2014-05-23T05:25:35.750 に答える
-1

通常、これを明示的に行うのではなく、cudaMalloc に渡すときに Npp8u* を void ** にキャストします。

Npp8u * src;
int length = ...
cudaMalloc( (void **)(&src), sizeof( Npp8u ) * length );
于 2014-05-22T19:20:36.743 に答える