2012-01-23 104 views
1

CUdeviceptr是否可以設置爲零(NULL)以表示未初始化的指針,或者在任何情況下都可以爲零有效的設備指針?此外,是否允許將空設備指針傳遞給cuMemFree?我假設這與C(++)中的工作方式類似,但我一直無法找到任何證明這一點的文檔。如果可能的話,我想要一個提到某種可信來源的答案。零是CUDA設備指針的有效值嗎?

編輯:有什麼想知道,如果它保證我可以寫這樣的代碼:

CUdeviceptr p=0; 

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

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

或不if聲明甚至更好,就像我可以做delete。還是我必須手動跟蹤p的分配狀態?

回答

2

是,0是CUdeviceptr的保證無效值。

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

+0

謝謝。你知道這是否記錄在某個地方? –

+0

我不知道它是否記錄在任何地方。我所知道的是,在使用CUDA驅動程序(我從1.0之前版本到4.0版本)時,我們特別在實現cuMemAlloc()時採取了措施,以防止在執行有效內存分配時它傳回0。 – ArchaeaSoftware

1

0地址不是C++功能 - 它是一個硬件功能。 CPU阻止訪問地址0並引發中斷。 0地址也是GPU中的無效地址。 嘗試將0傳遞給cuMemFree,結果應該得到error code

+0

但是C++明確允許使用空指針調用delete(3.7.3.2) - 它不起作用。我曾希望它在CUDA中保持一致。但是,如果零是一個對我來說足夠好的無效地址,那麼您是否有一個源代碼? –