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
的分配状态?
答案 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。