0
0

More than 3 years have passed since last update.

CUdeviceptr を void ポインタに変換するメモ

Posted at

背景

CUDA Device API だけを使っている.

cuBLAS など CUDA runtime API(e.g. cudaMalloc) で生成されたポインタ(i.e. void *)を想定している API を呼びたい.

方法

ありがとうございます.

CUdeviceptr devptr;

void *p = (void *)(uintptr_t)devptr;

で変換します!

逆は,

CUdeviceptr dptr = (CUdeviceptr) (uintptr_t) p;

CUDA の pointer のメモ

CUDeviceptr はポインタと同じサイズの整数型です.
64bit では typedef unsigned int int で定義されています.

CUDA runtime API ではインターフェイスは生ポインタですが, 内部的には CUdeviceptr のように整数として処理しています.
(使っていない領域にフラグを入れたりして管理するため)

そのため, address sanitizer のように, ポインタになにか情報を入れたりする仕組みとでは共存できません.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0