2016-07-31 40 views
-1

Ich habe helper_cuda.h aufgenommen und verwende den Makro checkCudaErrors bei jedem CUDA-Aufruf in meinem Code. Ich habe einen Fehler durch den folgenden Code gezwungen:checkCudaErrors druckt keine Fehlerinformationen

checkCudaErrors(cudaMalloc(&GPUCameraData, sizeof(float) /*<-- Should be HCameraData */)); 
checkCudaErrors(cudaMemcpy(GPUCameraData, CPUCameraData, sizeof(HCameraData) 
                 , cudaMemcpyHostToDevice)); 

Die Anwendung einfach beendet mit Fehlercode 1, wie es soll, aber keine Informationen gedruckt werden. Wenn ich in der ersten Zeile abbruche und in die zweite Zeile gehe, sehe ich, dass _cudaGetErrorEnum() in "cudaErrorInvalidValue" zurückgibt, aber keine Information wird in der Ausgabe gedruckt.

Die Entwicklungsumgebung, die ich verwende, ist Visual Studio 2013, und ich habe dies sowohl im Debug- als auch im Release-Modus getestet.

Hinweis: Ich habe das gleiche Problem mit OpenGL und glGetError. Es scheint, als ob irgendwelche Aufrufe von fprintf(stderr, ...); aus Code, der nicht direkt in meiner eigenen Dateistruktur ist, nichts drucken wird.

+1

Führen Sie das Programm über die Befehlszeile oder in VS? Wenn Sie das Programm innerhalb von VS ausführen, versuchen Sie es über die Befehlszeile auszuführen. Wenn der Fehlerausdruck dort aber nicht innerhalb von VS auftritt, müssen Sie Ihre VS-Konfiguration überprüfen (z. B. [herauszufinden, wohin die stderr-Pipe weitergeleitet wird ...] (http://stackoverflow.com/questions/2683249/redirect-). stdout-und-stderr-zu-der-ausgang-debug-konsole-of-microsoft-visual-studi)) –

+0

@RobertCrovella Ich leitete die Stderr-Leitung in eine Fehlerprotokoll-Textdatei und die Fehlermeldungen werden nun korrekt gedruckt. Ich werde versuchen, herauszufinden, wie sie an das Ausgabe-Log in der VS IDE weitergeleitet werden. Fühlen Sie sich frei, Ihren Vorschlag als Antwort hinzuzufügen. – henrikdahlberg

Antwort

0

Der Grund könnte sein, dass Sie einen anderen Anwendungstyp als C++ - Standardanwendung erstellen (CUDA und OpenGL in Ihrem Fall neu berechnen), dh Sie kompilieren diesen Code zu einer Bibliothek, die in einem anderen Projekt verwendet wird, das nicht C++ ist. oder irgendeine Art von Verknüpfungsproblemen (welche Art von Projekt haben Sie ... brauchen Informationen!). Ich hatte das gleiche Problem, als ich Cuda-Code zu Matlab-Mex-Datei kompilierte, die mit dem Befehl "mexPrintf" nicht "fprintf" drucken würde, das in "checkCudaErrors" verwandt wird. Sie könnten testen, wie Sie den Druckbefehl in helper_cuda.h von fprintf auf einen Befehl ändern, der Informationen ausgibt, wenn Sie ihn von Ihrem Programm aus aufrufen.