Closed LukasSiefke closed 4 years ago
dann doch eher cuModuleUnload(_module)
. CUDA_SAFE_CALL
wird ja schon vorher tausend mal aufgerufen und guckt eig nur ob der return wert in dem CUresult
enum ist und wirft dann die passende exception?
Ne, es liegt an SAFE_CALL Das liegt daran, dass dort ein Error (201) von der CUDA-Funktion geworfern wird. Wird dann die CUDA_SAFE_CALL Methode aufgerufen gibt es ein SIGSEGV-Error und das Programm stürtzt ab. Aber wenn man ein try catch Block drum macht tritt kein SIGSEGV-Error auf und die Exception wird scheinbar normal geworfen und danach stürzt das Programm mit einem anderen Fehler (exit Code 255) ab. Gleiches passiert, wenn man die CUDA_SAFE_CALL weglässt.
Dann funktioniert sie vieleicht doch, aber wieso tritt ein SIGSEGV auf, falls die Exception nicht mit einem try-catch aufgefangen wird?
Also falls es
Process finished with exit code 134 (interrupted by signal 6: SIGABRT)
Ist macht das ja Sinn, eine nicht gecatched exception soll das Program ja terminieren, aber dann hat die main
ja nie, return 0
bekommen, wurde also nicht richtig beendet.
Hmm aber die Zeile ist doch von der launch funktion die in einem try-catch block aufgerufen wird?
example_saxpy:
...
try {
...
program.kernel("saxpy")
.compile()
.configure(grid, block)
.launch(program_args); // <---- CUDA_SAFE_CALL(cuModuleUnload(_module));
} catch (const std::exception &e) {
std::cerr << e.what() << std::endl;
}
...
Edit: sorry, ja mit SIGSEGV sollte das nichts zu tun haben
bei mir sehe ich auch nie, dass das letze argument vom device befreit wird, also cuMemFree(_ddata)
deswegen dachte ich halt saxpy geht nicht wegen #1
Aber bei dir kommt der Fehler erst dann beim befreien des modules?
Das passiert ja direkt nach dem die ProgramArgs gedownloaded wurden
Also das ist meine Ausgabe, wenn ich um das CUDA_SAFE_CALL(cuModuleUnload(_module)));
ein try-catch Block mache:
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Program.cpp:16]: Program uses 0 Headers.
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:11]: created ProgramArg with size: 0, which should not be uploaded and should not be downloaded
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:11]: created ProgramArg with size: 2048, which should be uploaded and should not be downloaded
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:11]: created ProgramArg with size: 2048, which should be uploaded and should not be downloaded
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:11]: created ProgramArg with size: 2048, which should be uploaded and should be downloaded
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:11]: created ProgramArg with size: 0, which should not be uploaded and should not be downloaded
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Program.cpp:26]: creating a kernel for function: saxpy
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Kernel.cpp:16]: created Kernel saxpy
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Kernel.cpp:94]: compiling Kernel
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Kernel.cpp:107]: with no template parameters
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Kernel.cpp:113]: Kernel compiled
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Kernel.cpp:132]: Kernel compiled
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Kernel.cpp:29]: configuring Kernel with grid: 32, 1, 1 and block 16, 1, 1
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Kernel.cpp:38]: launching Kernel
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Kernel.cpp:48]: uploading arguemnts
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:26]: NOT uploading argument
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:19]: uploading argument
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:22]: copying data to device
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:19]: uploading argument
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:22]: copying data to device
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:19]: uploading argument
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:26]: NOT uploading argument
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Kernel.cpp:67]: launching saxpy<>
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Kernel.cpp:75]: done!
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Kernel.cpp:78]: downloading arguments
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:35]: NOT downloading argument
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:42]: NOT freeing argument from device
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:35]: NOT downloading argument
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:39]: freeing argument from device
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:35]: NOT downloading argument
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:39]: freeing argument from device
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:32]: downloading argument
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:39]: freeing argument from device
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:35]: NOT downloading argument
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:42]: NOT freeing argument from device
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Kernel.cpp:82]: freeing resources
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Kernel.cpp:84]: CUDAException geworfen Error: 201~CUDA_ERROR_INVALID_CONTEXT
-->description:
This most frequently indicates that there is no context bound to the current thread. This can also be returned if the context passed to an API call is not a valid handle (such as a context that has had cuCtxDestroy() invoked on it). This can also be returned if a user mixes different API versions (i.e. 3010 context with 3020 API calls). See cuCtxGetApiVersion() for more details.
->occoured in file:[/tmp/tmp.gCqitQHoYR/src/Kernel.cpp:84]
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Kernel.cpp:85]: freeing resources3
Process finished with exit code 255
Und folgendes passiert, wenn kein zusätzliches catch um das CUDA_SAFE_CALL steht:
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Program.cpp:16]: Program uses 0 Headers.
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:11]: created ProgramArg with size: 0, which should not be uploaded and should not be downloaded
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:11]: created ProgramArg with size: 2048, which should be uploaded and should not be downloaded
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:11]: created ProgramArg with size: 2048, which should be uploaded and should not be downloaded
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:11]: created ProgramArg with size: 2048, which should be uploaded and should be downloaded
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:11]: created ProgramArg with size: 0, which should not be uploaded and should not be downloaded
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Program.cpp:26]: creating a kernel for function: saxpy
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Kernel.cpp:16]: created Kernel saxpy
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Kernel.cpp:94]: compiling Kernel
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Kernel.cpp:107]: with no template parameters
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Kernel.cpp:113]: Kernel compiled
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Kernel.cpp:132]: Kernel compiled
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Kernel.cpp:29]: configuring Kernel with grid: 32, 1, 1 and block 16, 1, 1
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Kernel.cpp:38]: launching Kernel
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Kernel.cpp:48]: uploading arguemnts
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:26]: NOT uploading argument
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:19]: uploading argument
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:22]: copying data to device
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:19]: uploading argument
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:22]: copying data to device
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:19]: uploading argument
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:26]: NOT uploading argument
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Kernel.cpp:67]: launching saxpy<>
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Kernel.cpp:75]: done!
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Kernel.cpp:78]: downloading arguments
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:35]: NOT downloading argument
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:42]: NOT freeing argument from device
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:35]: NOT downloading argument
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:39]: freeing argument from device
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:35]: NOT downloading argument
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:39]: freeing argument from device
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:32]: downloading argument
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:39]: freeing argument from device
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:35]: NOT downloading argument
LOGGER:[/tmp/tmp.gCqitQHoYR/src/ProgramArg.cpp:42]: NOT freeing argument from device
LOGGER:[/tmp/tmp.gCqitQHoYR/src/Kernel.cpp:82]: freeing resources
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
Dieser try-catch in example_saxpy wird dabei nicht ausgelöst
...
try {
...
program.kernel("saxpy")
.compile()
.configure(grid, block)
.launch(program_args); // <---- CUDA_SAFE_CALL(cuModuleUnload(_module));
} catch (const std::exception &e) {
std::cerr << e.what() << std::endl;
}
...
oh lol @ ProgramArgs.download() und halt _copy da falsch zu initialisieren. Das mit dem try-catch macht mich aber gerade fertig, verstehe nicht wirklich warum man das jetzt extra catchen muss.
Die Funktion funktioniert nicht und verursacht SIGSEGV-Error z.B. bei Ausführung von example_saxpy Kernel.cpp Zeile 83