6

似乎其中一本 CUDA 书籍(CUDA by Example: An Introduction to 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地址做了什么?

谢谢!

4

1 回答 1

1

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

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

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

于 2012-09-07T02:44:56.860 回答