Ich schreibe einen Hamiltonschen Evolutionscode, der stark auf der Matrixmultiplikation basiert, deshalb habe ich versucht, etwas über die Entwicklung für eine GPU mit Python zu lernen.
Wenn ich diese Codezeilen jedoch in meiner Time-Evolution-Wrapper-Funktion ausführe:
Ich bekam in der Zeile cuda.synchronize() einen „Fehler 700“.
Als ich versuchte, dies mithilfe von Druckanweisungen zu debuggen, bemerkte ich, dass der Code erfolgreich kompiliert wurde und auch plausible Antworten lieferte, was darauf hindeutet, dass er ordnungsgemäß ausgeführt wird, wenn dem Code eine Druckanweisung hinzugefügt wird. Dies lässt mich vermuten, dass es ein Problem mit der Thread-Synchronisierung gibt und die kompilierte Version mit der print-Anweisung dies irgendwie vermeidet. Der momentum_update-Code lautet wie folgt:
Der eigentliche momentum_update_kernel-Code ist nicht besonders interessant und definiert im Wesentlichen nur idx und ruft momentum_update auf, daher habe ich ihn hier nicht aufgenommen.
Ein mögliches Problem ist nun eine Art Race Condition, da momentum_update sowohl in die Konfiguration liest als auch aus ihr schreibt. Ich vermute jedoch, dass dies nicht der Fall ist. config ist ein (2, N, d, 2, 2)-Array, und jeder Thread in der Momentum-Aktualisierung sollte nur lesen aus:
Link-Array, dem in config[0] gespeicherten (N, d, 2, 2)-Array und
dem spezifischen Momentum-Wert, den es aktualisiert.
Es können also mehrere Threads aus demselben lesen sein Speicher auf einmal, aber es sollte nichts von etwas gelesen werden, in das von einem anderen Thread geschrieben wird.
Wenn ich die Größe der Simulation auf die Größe vergrößere, mit der ich sie tatsächlich ausführen möchte, stürzt sie ab, unabhängig davon, ob die Druckanweisung vorhanden ist, sodass ich die Druckanweisung nicht einfach als Hacky-Fix belassen kann.
Gibt es zumindest eine Möglichkeit, das zu debuggen? Offensichtlich ruft momentum_update mehrere andere Funktionen auf, aber wenn es sich um einen Fehler bei den anderen Funktionen handeln würde, würde ich erwarten, dass die hamiltonsche Evolution anfängt, mir falsche Antworten zu geben (ich hatte früher beispielsweise Fehler in matmul_2x2_cuda, die dazu führten, dass es nicht richtig funktionierte, wenn das Ausgabearray mit einem der Eingaben übereinstimmte, aber ich konnte es erkennen, weil die Simulation plötzlich numerisch instabil wurde), was nicht zu passieren scheint.
Ich laufe Dies auf der GTX1060 in meinem Desktop, aber der Fehler ist beispielsweise auch auf den GPU-Knoten von ComputeCanada vorhanden (und tatsächlich funktioniert der Print-Anweisungs-Hack dort nicht).
Ich schreibe einen Hamiltonschen Evolutionscode, der stark auf der Matrixmultiplikation basiert, deshalb habe ich versucht, etwas über die Entwicklung für eine GPU mit Python zu lernen. Wenn ich diese Codezeilen jedoch in meiner Time-Evolution-Wrapper-Funktion ausführe: [code]momentum_update_kernel[blocks, threads_per_block](config, dt / 2, staple_gpu, Barray_gpu, V2Barray_gpu, g_in) cuda.synchronize() print("momentum updated") link_update_kernel[blocks, threads_per_block](config, dt, lie_gens) [/code] Ich bekam in der Zeile cuda.synchronize() einen „Fehler 700“. Als ich versuchte, dies mithilfe von Druckanweisungen zu debuggen, bemerkte ich, dass der Code erfolgreich kompiliert wurde und auch plausible Antworten lieferte, was darauf hindeutet, dass er ordnungsgemäß ausgeführt wird, wenn dem Code eine Druckanweisung hinzugefügt wird. Dies lässt mich vermuten, dass es ein [url=viewtopic.php?t=26065]Problem[/url] mit der Thread-Synchronisierung gibt und die kompilierte Version mit der print-Anweisung dies irgendwie vermeidet. Der momentum_update-Code lautet wie folgt: [code]def momentum_update(config, dt, staple_index_array, Barray, V2Barray, idx, out, g):
#calculating new momentum add_2x2_cuda(momentum[nodeindex, direction], temp, temp2) for i in range(2): for j in range(2): config[1][nodeindex, direction,i,j] = temp2[i,j]
[/code] Der eigentliche momentum_update_kernel-Code ist nicht besonders interessant und definiert im Wesentlichen nur idx und ruft momentum_update auf, daher habe ich ihn hier nicht aufgenommen. Ein mögliches [url=viewtopic.php?t=26065]Problem[/url] ist nun eine Art Race Condition, da momentum_update sowohl in die Konfiguration liest als auch aus ihr schreibt. Ich vermute jedoch, dass dies nicht der Fall ist. config ist ein (2, N, d, 2, 2)-Array, und jeder Thread in der Momentum-Aktualisierung sollte nur lesen aus: [list] [*]Link-Array, dem in config[0] gespeicherten (N, d, 2, 2)-Array und [*]dem spezifischen Momentum-Wert, den es aktualisiert. [/list] Es können also mehrere Threads aus demselben lesen sein Speicher auf einmal, aber es sollte nichts von etwas gelesen werden, in das von einem anderen Thread geschrieben wird. Wenn ich die Größe der Simulation auf die Größe vergrößere, mit der ich sie tatsächlich ausführen möchte, stürzt sie ab, unabhängig davon, ob die Druckanweisung vorhanden ist, sodass ich die Druckanweisung nicht einfach als Hacky-Fix belassen kann. Gibt es zumindest eine Möglichkeit, das zu debuggen? Offensichtlich ruft momentum_update mehrere andere Funktionen auf, aber wenn es sich um einen Fehler bei den anderen Funktionen handeln würde, würde ich erwarten, dass die hamiltonsche Evolution anfängt, mir falsche Antworten zu geben (ich hatte früher beispielsweise Fehler in matmul_2x2_cuda, die dazu führten, dass es nicht richtig funktionierte, wenn das Ausgabearray mit einem der Eingaben übereinstimmte, aber ich konnte es erkennen, weil die Simulation plötzlich numerisch instabil wurde), was nicht zu passieren scheint. Ich laufe Dies auf der GTX1060 in meinem Desktop, aber der Fehler ist beispielsweise auch auf den GPU-Knoten von ComputeCanada vorhanden (und tatsächlich funktioniert der Print-Anweisungs-Hack dort nicht).
Ich habe Nvidia-Driver-580 und cuda-tools-13 auf Debian Trixie installiert (beide sind die neueste Version, die ich finden kann): $ a p t l i s t - - i n s t a l l e d | a g n v i d i a f i r m w a r...
Wenn ich das Projekt in VS ausführe und ich aufgefordert werde, mich bei meinem Office-Konto anzumelden, gebe ich meine Anmeldeinformationen ein und erhalte Folgendes:
An error occurred while...
Ich habe bereits mehrere mögliche SO-Duplikate wie dieses gelesen
und insbesondere dieses, wo hipertrtacker sagt, dass register_shutdown_function schwerwiegende Fehler abfangen kann und Peter...
Gestern hat Tomcat auf meinem Rechner auf Eclipse ordnungsgemäß funktioniert, heute konnte Tomcat nicht gestartet werden, obwohl ich nichts geändert habe.
Ich habe versucht, mein JEE-Projekt auf dem...