настройка cuda cudaError - PullRequest
       12

настройка cuda cudaError

0 голосов
/ 28 декабря 2011

Как самостоятельно установить переменную cudaError в ядре cuda (например, для условий, которые не являются фатальными, но логически неправильными).

Мое ядро ​​cuda неожиданно выплевывает значения nan, и я отлаживаю это.

1 Ответ

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

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

Если вы хотите, чтобы код вашего устройства возвращал индикатор ненормального состояния, самый простой способ сделать это - объявить статическую переменную флага глобальной памяти и иметь любой поток, в котором произошла ошибка записи в этот флаг.Если вы хотите, чтобы поток прерывал ядро, вы можете сделать что-то вроде этого:

__device__ int errorflag;

__global__ void kernel()
{
    // Processing code here

    if (errorcondition) {
        errorflag=errorcode;
        __threadfence();
        asm("trap;");
    }
}

Это приводит к ошибке аварийного завершения, сигнализируемой из среды выполнения, с вашим состоянием ошибки, сохраненным в errorflag.Вы можете прочитать обратно из errorflag, используя cudaMemcpyToSymbol в коде хоста, чтобы проверить результат.Указатель на нулевую копию памяти также может быть потенциально использован, если вы предпочитаете, и в этом случае вам нужно будет использовать вместо этого вызов __threadfence_system(), чтобы гарантировать, что запись была сброшена на хост перед выполнением прерывания.

...