Случайное исключение 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. Возможно, вы захотите попробовать это, хотя это не считается проблемой в любом случае.
Вы также можете быть заинтересованы в этом вопросе/ответе.