这些CUDA指针属性的类型是什么?
What are the types of these CUDA pointer attributes?
cuGetPointerAttribute()
传递了一个指向多种类型之一的指针,根据请求的实际属性进行填充。其中一些类型是明确说明的,或者可以隐含地推导出来推导,但有些 - 不是那么多。具体...属性必须传递指针的类型是什么:
CU_POINTER_ATTRIBUTE_BUFFER_ID
- 可能是数字 ID,但它的类型是什么?
CU_POINTER_ATTRIBUTE_ALLOWED_HANDLE_TYPES
- 据说是位掩码,但有多宽?
CUDA 驱动程序 API 似乎没有回答这些问题。
PS - 即使对于布尔属性,也不清楚您应该传递 int*
还是 bool*
.
根据文档,缓冲区 ID 存储为 unsigned long long:
CU_POINTER_ATTRIBUTE_BUFFER_ID: Returns 在 *data 中保证在进程中是唯一的缓冲区 ID。 数据必须指向一个 unsigned long long。
当我尝试将 char*
传递给 CU_POINTER_ATTRIBUTE_ALLOWED_HANDLE_TYPES
时,valgrind 报告大小为 8 的无效写入。传递 std::size_t*
不会导致错误。
类似地,将 char*
与 CU_POINTER_ATTRIBUTE_IS_LEGACY_CUDA_IPC_CAPABLE
一起使用会报告大小为 4 的无效写入,而 int*
则不是这种情况
(使用 NVCC V11.5.119)
cuGetPointerAttribute()
传递了一个指向多种类型之一的指针,根据请求的实际属性进行填充。其中一些类型是明确说明的,或者可以隐含地推导出来推导,但有些 - 不是那么多。具体...属性必须传递指针的类型是什么:
CU_POINTER_ATTRIBUTE_BUFFER_ID
- 可能是数字 ID,但它的类型是什么?CU_POINTER_ATTRIBUTE_ALLOWED_HANDLE_TYPES
- 据说是位掩码,但有多宽?
CUDA 驱动程序 API 似乎没有回答这些问题。
PS - 即使对于布尔属性,也不清楚您应该传递 int*
还是 bool*
.
根据文档,缓冲区 ID 存储为 unsigned long long:
CU_POINTER_ATTRIBUTE_BUFFER_ID: Returns 在 *data 中保证在进程中是唯一的缓冲区 ID。 数据必须指向一个 unsigned long long。
当我尝试将 char*
传递给 CU_POINTER_ATTRIBUTE_ALLOWED_HANDLE_TYPES
时,valgrind 报告大小为 8 的无效写入。传递 std::size_t*
不会导致错误。
类似地,将 char*
与 CU_POINTER_ATTRIBUTE_IS_LEGACY_CUDA_IPC_CAPABLE
一起使用会报告大小为 4 的无效写入,而 int*
(使用 NVCC V11.5.119)