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

时间:2012-08-25 22:46:54

标签: 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));

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

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

    谢谢!

1 个答案:

答案 0 :(得分:1)

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

  1. 是。您可以随意使用您在主机上使用的相同练习(随意取消)。

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