似乎其中一本CUDA书籍中的例子(CUDA by Example:General-Purpose GPU Programming简介)在初始化它们时从不使指针无效。
两个问题:
GPU是否使用0x0(或整数0)作为NULL指针?我们应该遵循C / C ++指针吗? 练习设备指针(例如,在初始化时将它们置空)
我们需要在cudaFree之前检查指针是否为NULL吗? if(devPtr) 了handle_error(cudaFree(devPtr));
有人说对于Fermi架构,0x0用于片上共享内存,似乎可以假设0x0不应该被使用过的指针指向。
http://forums.thedailywtf.com/forums/p/25369/273567.aspx
开普勒架构怎么样? GPU用0x0地址做什么?
谢谢!
答案 0 :(得分:1)
通常,您可以像处理主机指针一样处理NULL指针。回答你的问题。
是。您可以随意使用您在主机上使用的相同练习(随意取消)。
在释放之前检查NULL是安全的,但不是必需的,因为cudaFree(0)
实际上不会尝试释放任何内存。 (实际上cudaFree(0)
通常用于初始化CUDA上下文!)我相信大多数现代malloc
实现都不会尝试释放零值指针。