为什么CUDA CUdeviceptr使用无符号int而不是void?

为什么CUDA CUdeviceptr使用无符号int而不是void?,cuda,Cuda,只是好奇 为什么驱动程序API中的函数使用无符号int作为CUdeviceptr,而不是void 不过,运行时API使用void。我认为根本原因在于CUdeviceptr是设备内存中分配的句柄,而不是设备内存中的地址。驱动程序使用此句柄从内存映射内部查找地址,而内部驱动程序API要求地址为无符号整数 Tim Murray曾在NVIDIA负责CUDA驱动程序开发,几年前他在另一个论坛上写道。我认为这是你会发现的最权威的答案(尽管Nick Wilt是CUDA驱动程序的原始作者,他偶尔也会回答有关堆栈

只是好奇

为什么驱动程序API中的函数使用无符号int作为CUdeviceptr,而不是void


不过,运行时API使用void。

我认为根本原因在于CUdeviceptr是设备内存中分配的句柄,而不是设备内存中的地址。驱动程序使用此句柄从内存映射内部查找地址,而内部驱动程序API要求地址为无符号整数


Tim Murray曾在NVIDIA负责CUDA驱动程序开发,几年前他在另一个论坛上写道。我认为这是你会发现的最权威的答案(尽管Nick Wilt是CUDA驱动程序的原始作者,他偶尔也会回答有关堆栈溢出的问题,可能会插话,提供比我更好的答案).

我认为根本原因是因为CUdeviceptr是设备内存中分配的句柄,而不是设备内存中的地址。驱动程序使用此句柄从内存映射内部查找地址,而内部驱动程序API要求地址为无符号整数


Tim Murray曾在NVIDIA负责CUDA驱动程序开发,几年前他在另一个论坛上写道。我认为这是你会发现的最权威的答案(尽管Nick Wilt是CUDA驱动程序的原始作者,他偶尔也会回答有关堆栈溢出的问题,可能会插话,提供比我更好的答案)。

是这样吗?在64位中,Cuda 3.2(见5.5版Cuda.h中的第147行)是无符号长的,是吗?在64位中,Cuda 3.2(见5.5版Cuda.h中的第147行)很久以前就没有符号了。感谢您的快速回答:)它们始终是Cuda地址空间中的指针;最初是因为GPU和CPU的指针大小不同(SM 1.x GPU不支持64位地址);人们希望在主机和设备指针之间实施某种类型的安全性。但在64位平台上,您可以使用uintptr\t作为中介直接在两者之间进行强制转换;最初是因为GPU和CPU的指针大小不同(SM 1.x GPU不支持64位地址);人们希望在主机和设备指针之间实施某种类型的安全性。但在64位平台上,您可以通过使用uintptr\t作为中介直接在两者之间进行强制转换。