Как использовать что-то вроде Try-Catch внутри кода устройства CUDA - PullRequest
1 голос
/ 17 февраля 2020

Есть ли способ выполнить инструкцию внутри кода устройства, не вызывая ошибку CUDA? Что-то выглядит следующим образом:

__global__ void myKernel(float* X1, float* X2, float* Y){
try{
    Y[0] = X1[0] / X2[0];
   }catch(){
    Y[0] = 0.0f;
    }
}

Я знаю, что мы можем проверить значение X2 [0] до деления, но что если я хочу выполнить инструкцию без проверки на допустимые входные данные и выполнить ее безопасно ?

1 Ответ

2 голосов
/ 17 февраля 2020

в настоящее время, Код устройства CUDA не поддерживает обработку исключений .

try / catch не может использоваться в коде устройства CUDA.

Если оператор может привести к ошибке на стороне устройства (например, доступ за пределы), невозможно выполнить этот оператор в коде устройства, не вызывая ошибку на стороне устройства.

Чтобы избежать ошибки, вы бы необходимо изменить оператор или условно не выполнять его, чтобы избежать появления ошибки на стороне устройства.

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