Является ли ноль допустимым значением для указателя устройства CUDA? - PullRequest
1 голос
/ 23 января 2012

Может ли 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 ]

2 голосов
/ 23 января 2012

Да, 0 является гарантированно-недействительным значением для CUdeviceptr.

Я не уверен, что cuMemFree (0) всегда был допустимым, но в CUDA 4.0 cuMemFree (0) возвращает CUDA_SUCCESS.

1 голос
/ 23 января 2012

Адрес 0 не является функцией C ++ - это аппаратная функция.Процессор блокирует доступ к адресу 0 и вызывает прерывание.Адрес 0 также является недействительным адресом в графическом процессоре.Попробуйте передать 0 в cuMemFree, в результате вы получите код ошибки .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...