Случайное исключение cudaError_enum в ячейке памяти

Я получаю эту ошибку при запуске моего приложения из Visual Studio 2012. Особенности разработки:

  • Cuda 5.0
  • VS С++ 2012
  • Quadro K4000

Я видел, что есть другие сообщения, связанные здесь, здесь и здесь, но никто не имеет хорошего ответа на мою проблему. Я проверяю все коды возврата из API CUDA, CuRAND и CuBLAS, и все возвращают УСПЕХ. Я просмотрел код, в котором возникла проблема, и это происходит, когда я создаю объект таймера для графического процессора.

Я использую таймер, который поставляется с CUDA SDK

struct GpuTimer{
    cudaEvent_t start;
    cudaEvent_t stop;
    GpuTimer(){
        checkCudaErr(
            cudaEventCreate(&start)
            );

        checkCudaErr(
            cudaEventCreate(&stop)
            );
    }
    ~GpuTimer(){
        checkCudaErr(
            cudaEventDestroy(start)
            );
        checkCudaErr(
            cudaEventDestroy(stop)
            );
    }
    void Start(){
        checkCudaErr(
            cudaEventRecord(start, 0)
            );
    }
    void Stop(){
        checkCudaErr(
            cudaEventRecord(stop, 0)
            );
    }
    float Elapsed(){
        float elapsed;
        checkCudaErr(
            cudaEventSynchronize(stop)
            );

        checkCudaErr(
            cudaEventElapsedTime(&elapsed, start, stop)
            );
        return elapsed;
    }
};

поэтому в основной функции у меня есть

int main(args)
{
   ...
   ...
   ...
   GpuTimer t;
   ...
   ...
}

и точно после выполнения этой строки я получаю

'App.exe' (Win32): Loaded 'C:\Windows\System32\nvcuda.dll'. Module was built without symbols.
'App.exe' (Win32): Loaded 'C:\Windows\System32\user32.dll'. Cannot find or open the PDB file.
'App.exe' (Win32): Loaded 'C:\Windows\System32\gdi32.dll'. Cannot find or open the PDB file.
'App.exe' (Win32): Loaded 'C:\Windows\System32\lpk.dll'. Cannot find or open the PDB file.
'App.exe' (Win32): Loaded 'C:\Windows\System32\usp10.dll'. Cannot find or open the PDB file.
'App.exe' (Win32): Loaded 'C:\Windows\System32\msvcrt.dll'. Cannot find or open the PDB file.
'App.exe' (Win32): Loaded 'C:\Windows\System32\setupapi.dll'. Cannot find or open the PDB file.
'App.exe' (Win32): Loaded 'C:\Windows\System32\cfgmgr32.dll'. Cannot find or open the PDB file.
'App.exe' (Win32): Loaded 'C:\Windows\System32\rpcrt4.dll'. Cannot find or open the PDB file.
'App.exe' (Win32): Loaded 'C:\Windows\System32\advapi32.dll'. Cannot find or open the PDB file.
'App.exe' (Win32): Loaded 'C:\Windows\System32\sechost.dll'. Cannot find or open the PDB file.
'App.exe' (Win32): Loaded 'C:\Windows\System32\oleaut32.dll'. Cannot find or open the PDB file.
'App.exe' (Win32): Loaded 'C:\Windows\System32\ole32.dll'. Cannot find or open the PDB file.
'App.exe' (Win32): Loaded 'C:\Windows\System32\devobj.dll'. Cannot find or open the PDB file.
'App.exe' (Win32): Loaded 'C:\Windows\System32\shell32.dll'. Cannot find or open the PDB file.
'App.exe' (Win32): Loaded 'C:\Windows\System32\shlwapi.dll'. Cannot find or open the PDB file.
'App.exe' (Win32): Loaded 'C:\Windows\System32\imm32.dll'. Cannot find or open the PDB file.
'App.exe' (Win32): Loaded 'C:\Windows\System32\msctf.dll'. Cannot find or open the PDB file.
'App.exe' (Win32): Loaded 'C:\Windows\System32\dwmapi.dll'. Cannot find or open the PDB file.
'App.exe' (Win32): Unloaded 'C:\Windows\System32\dwmapi.dll'
'App.exe' (Win32): Loaded 'C:\Windows\System32\nvapi64.dll'. Cannot find or open the PDB file.
'App.exe' (Win32): Loaded 'C:\Windows\System32\version.dll'. Cannot find or open the PDB file.
'App.exe' (Win32): Loaded 'C:\Windows\System32\wintrust.dll'. Cannot find or open the PDB file.
'App.exe' (Win32): Loaded 'C:\Windows\System32\crypt32.dll'. Cannot find or open the PDB file.
'App.exe' (Win32): Loaded 'C:\Windows\System32\msasn1.dll'. Cannot find or open the PDB file.
First-chance exception at 0x000007FEFDA29E5D in App.exe: Microsoft C++ exception: cudaError_enum at memory location 0x000000000018EA00. //Repeated 20 times at least

наконец, сразу после запуска приложения я увидел это сообщение в выходной консоли (на VS2012)

'App.exe' (Win32): Loaded 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\bin\cudart64_50_35.dll'. Module was built without symbols.
'App.exe' (Win32): Loaded 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\bin\cublas64_50_35.dll'. Module was built without symbols.
'App.exe' (Win32): Loaded 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\bin\curand64_50_35.dll'. Module was built without symbols.

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

Ответы

Ответ 1

Наблюдение, которое вы делаете, связано с исключением, которое поймано и правильно обработано в библиотеках CUDA. В некоторых случаях это обычная часть работы графического процессора CUDA. Как вы заметили, ваше приложение не возвращает ошибок API и работает правильно. Если вы не были в среде VS, которая могла бы сообщить об этом, вы не заметили бы этого вообще.

Это считается нормальным поведением в CUDA 5.0. Я считаю, что были попытки устранить его в CUDA 5.5. Возможно, вы захотите попробовать это, хотя это не считается проблемой в любом случае.

Вы также можете быть заинтересованы в этом вопросе/ответе.