NVIDIA GPU对设备内存0x0做了什么?

Dat*_*gry 5 cuda

似乎CUDA书籍中的一个例子(CUDA by Example:General-Purpose GPU Programming简介)在初始化时从不使指针无效.

两个问题:

  1. GPU使用0x0(或整数0)作为NULL指针吗?我们应该遵循设备指针的C/C++指针练习(例如,在初始化时使它们无效)

  2. 我们需要在cudaFree之前检查指针是否为NULL吗?if(devPtr)HANDLE_ERROR(cudaFree(devPtr));

有人说,对于Fermi架构,0x0用于片上共享内存,似乎可以假设0x0不应该被使用的指针指向.
http://forums.thedailywtf.com/forums/p/25369/273567.aspx

开普勒架构怎么样?GPU用0x0地址做什么?

谢谢!

har*_*ism 1

通常,您可以像对待主机指针一样对待 NULL 指针。回答您的问题。

  1. 是的。随意使用您在主机上使用的相同做法(随意无效)。

  2. 在释放它之前检查 NULL 是安全的,但不是必需的,因为cudaFree(0)实际上不会尝试释放任何内存。(事实上cudaFree(0)​​,通常用于初始化 CUDA 上下文!)我相信大多数现代malloc实现不会尝试释放零值指针。