0

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

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

CUDA 驱动程序 API 似乎没有回答这些问题。

int*PS - 即使对于布尔属性,您是否应该通过 an或 a也不够清楚bool*

4

1 回答 1

1

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

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

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

类似地,使用char*withCU_POINTER_ATTRIBUTE_IS_LEGACY_CUDA_IPC_CAPABLE会报告大小为 4 的无效写入,而与int*

(使用 NVCC V11.5.119)

于 2021-12-01T21:17:50.710 回答