【问题标题】:What are the types of these CUDA pointer attributes?这些 CUDA 指针属性的类型是什么?
【发布时间】:2022-01-08 03:03:49
【问题描述】:

cuGetPointerAttribute() 被传递一个指向多种类型之一的指针,根据请求的实际属性填充。其中一些类型是明确说明的,或者可以隐含地推导出来推导,但有些类型 - 不是那么多。具体来说......必须为属性传递指针的类型是什么:

  • CU_POINTER_ATTRIBUTE_BUFFER_ID - 可能是数字 ID,但它的类型是什么?
  • CU_POINTER_ATTRIBUTE_ALLOWED_HANDLE_TYPES - 应该是位掩码,但有多宽?

CUDA 驱动程序 API 似乎无法回答这些问题。

PS - 即使是布尔属性,也不清楚您应该传递 int* 还是 bool*

【问题讨论】:

    标签: cuda cuda-driver


    【解决方案1】:

    根据文档,缓冲区 id 存储为 unsigned long long:

    CU_POINTER_ATTRIBUTE_BUFFER_ID:在 *data 中返回一个缓冲区 ID,该 ID 在进程中保证是唯一的。 数据必须指向一个 unsigned long long

    当我尝试通过CU_POINTER_ATTRIBUTE_ALLOWED_HANDLE_TYPES 传递char* 时,valgrind 报告大小为8 的无效写入。传递std::size_t* 不会导致错误。

    类似地,将char*CU_POINTER_ATTRIBUTE_IS_LEGACY_CUDA_IPC_CAPABLE 一起使用会报告大小为4 的无效写入,而int* 则不是这种情况

    (使用 NVCC V11.5.119)

    【讨论】:

    • 错过了文档中有关缓冲区 ID 的最后一点。关于使用 valgrind 检查写入大小的好主意... :-)
    猜你喜欢
    • 2014-08-10
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 2020-06-26
    相关资源
    最近更新 更多