零是CUDA设备指针的有效值吗?

时间:2012-01-23 10:56:41

标签: cuda

CUdeviceptr可以设置为零(NULL)以指示未初始化的指针,或者在任何情况下都可以为零有效的设备指针吗?是否允许将空设备指针传递给cuMemFree?我假设这类似于它在C(++)中的工作方式,但我无法找到任何证明这一点的文档。如果可能的话,我想要一个能引用某种可靠来源的答案。

编辑:想知道我是否可以编写这样的代码:

CUdeviceptr p=0;

[... do something else, maybe allocate memory for p ...]

if (p != 0) {
     cuMemFree(p);
     p = 0;
}

在没有if声明的情况下甚至更好,就像我可以使用delete一样。或者我是否必须手动跟踪p的分配状态?

2 个答案:

答案 0 :(得分:2)

是,0是CUdeviceptr的保证无效值。

我不确定cuMemFree(0)是否一直有效,但在CUDA 4.0中,cuMemFree(0)返回CUDA_SUCCESS。

答案 1 :(得分:1)

0地址不是C ++功能 - 它是硬件功能。 CPU阻止访问地址0并引发中断。 0地址也是GPU中的无效地址。 尝试将0传递给cuMemFree,结果应该得到error code