零是CUDA设备指针的有效值吗?
CUdeviceptr是否可以设置为零(NULL)以指示未初始化的指针,或者零在任何情况下都可以是有效的设备指针?此外,是否允许将空设备指针传递给cuMemFree?我假设这类似于它在C++中的工作方式,但我还没有找到任何文档来证实这一点。如果可能的话,我想得到一个可靠来源的答案 编辑:我想知道的是,如果保证我可以编写这样的代码:零是CUDA设备指针的有效值吗?,cuda,Cuda,CUdeviceptr是否可以设置为零(NULL)以指示未初始化的指针,或者零在任何情况下都可以是有效的设备指针?此外,是否允许将空设备指针传递给cuMemFree?我假设这类似于它在C++中的工作方式,但我还没有找到任何文档来证实这一点。如果可能的话,我想得到一个可靠来源的答案 编辑:我想知道的是,如果保证我可以编写这样的代码: CUdeviceptr p=0; [... do something else, maybe allocate memory for p ...] if (p !
CUdeviceptr p=0;
[... do something else, maybe allocate memory for p ...]
if (p != 0) {
cuMemFree(p);
p = 0;
}
如果没有
if
语句,甚至更好,就像我可以使用delete
一样。还是要用手来跟踪<代码> P<代码>的分配状态?< /P> < P> 0地址不是C++的特性——它是硬件特性。
CPU阻止访问地址0并引发中断。
0地址在GPU中也是无效地址。
尝试将0传递给CuMeField,结果应该得到结果。< P> 0地址不是C++特性——它是硬件特性。 CPU阻止访问地址0并引发中断。 0地址在GPU中也是无效地址。
尝试将0传递给cuMemFree,结果应该是a。是的,0对于CUdeviceptr是一个保证无效的值
我不确定cuMemFree(0)是否始终有效,但在CUDA 4.0中,cuMemFree(0)返回CUDA_成功 是,0是CUdeviceptr的保证无效值
我不确定cuMemFree(0)是否始终有效,但在CUDA 4.0中,cuMemFree(0)返回CUDA_成功但是C++明确允许用空指针(3.7.3.2)调用DELIST——它将没有任何效果。我曾希望CUDA也能如此。但是如果0是一个对我来说足够好的无效地址,那么你有一个源代码吗?但是C++明确允许用空指针调用(3.7.3.2)删除它将没有任何效果。我曾希望CUDA也能如此。但是如果零是一个无效的地址,对我来说已经足够好了,你有这个来源吗?谢谢。你知道这有没有记录在案吗?我不知道这有没有记录在案。我所知道的是,在使用CUDA驱动程序时(我在1.0之前到4.0之前使用过),我们在实现cumeAlloc()时采取了措施,特别是在执行有效内存分配时,防止它传回0。谢谢。你知道这有没有记录在案吗?我不知道这有没有记录在案。我所知道的是,在使用CUDA驱动程序时(我在1.0之前到4.0之前使用过),我们在实现cumeAlloc()时采取了措施,专门防止它在执行有效内存分配时返回0。