Autor
|
Thema: parallelization + umat (3413 mal gelesen)
|
DDsDDe Mitglied
Beiträge: 102 Registriert: 04.02.2009
|
erstellt am: 15. Apr. 2009 11:15 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich hab mir eine umat geschrieben um elasto-plastisches Verhalten zu simulieren und da ich gewusst habe, dass die Problemstellungen sicher umfangreicher werden, die ich zu bearbeiten habe, einen multicore-Rechner dazubekommen. Nur: wenn ich einen job (mit der umat) starte und dabei mehrere Prozessoren auswähle (im "Edit Job"-Fenster) kann abaqus nicht einmal ain winziges increment rechnen. Der gleiche job, mit nur einem Prozessor, läuft durch, allerdings brauchts hal seine Zeit. Vielleicht weiss jemand Bescheid, was hier zu tun ist? Liegt das Problem bei Abaqus oder fortran? Vielen Dank erstmals! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Viktor M. Mitglied Wissenschaftlicher Mitarbeiter
Beiträge: 55 Registriert: 27.10.2008
|
erstellt am: 15. Apr. 2009 14:16 <-- editieren / zitieren --> Unities abgeben: Nur für DDsDDe
|
Nicksen Mitglied wissenschaftlicher Mitarbeiter
Beiträge: 239 Registriert: 04.05.2007
|
erstellt am: 15. Apr. 2009 14:36 <-- editieren / zitieren --> Unities abgeben: Nur für DDsDDe
Ich selbst kann meine UEL (also leider keine UMAT) durchaus mit 4 oder mehr Prozessoren rechnen lassen. Da gibt es kein Problem. Bist du denn sicher, dass du auch die notwendigen Lizenzen fuer die Parallelrechnerei hast? ------------------ ========== == Dingsen == ========== Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DDsDDe Mitglied
Beiträge: 102 Registriert: 04.02.2009
|
erstellt am: 15. Apr. 2009 15:55 <-- editieren / zitieren --> Unities abgeben:
Hallo Viktor M. & Nicksen, Danke für eure Nachfragen. Ich habe dzt. ein mini-Beispiel am Laufen um meine UMAT zu testen und Probleme festzustellen. Ich habe 8 Elemente, jeweils Würfel, C3D8. Mit 1 Prozessor läuft abaqus durch. Mit 2 Prozessoren (DOMAIN, THREAD) aus der *.msg: Zitat:
Abaqus Error: Abaqus/Standard Analysis exited with an error - Please see the message file for possible error messages if the file exists. Abaqus/Analysis exited with errors
Auszug (Ende) aus der *.dat-Datei (das 1. iicrement wird schon auf 1/5 des Startincrements von 0.01 reduziert):
Zitat:
... ... ... INCREMENT 1 STARTS. ATTEMPT NUMBER 5, TIME INCREMENT 3.906E-05 ... ... ... USING THE DIRECT SOLVER WITH 2 PROCESSORS CONVERGENCE CHECKS FOR EQUILIBRIUM ITERATION 4 AVERAGE FORCE 4.617E-04 TIME AVG. FORCE 4.617E-04 LARGEST RESIDUAL FORCE -4.771E-04 AT NODE 11 DOF 1 INSTANCE: PART-1-1 LARGEST INCREMENT OF DISP. 1.296E-06 AT NODE 4 DOF 2 INSTANCE: PART-1-1 LARGEST CORRECTION TO DISP. -1.931E-07 AT NODE 19 DOF 2 INSTANCE: PART-1-1 FORCE EQUILIBRIUM NOT ACHIEVED WITHIN TOLERANCE.
***NOTE: THE SOLUTION APPEARS TO BE DIVERGING. CONVERGENCE IS JUDGED UNLIKELY. ***ERROR: TOO MANY ATTEMPTS MADE FOR THIS INCREMENT ANALYSIS SUMMARY: TOTAL OF 1 INCREMENTS 5 CUTBACKS IN AUTOMATIC INCREMENTATION 26 ITERATIONS INCLUDING CONTACT ITERATIONS IF PRESENT 26 PASSES THROUGH THE EQUATION SOLVER OF WHICH 26 INVOLVE MATRIX DECOMPOSITION, INCLUDING 0 DECOMPOSITION(S) OF THE MASS MATRIX 1 REORDERING OF EQUATIONS TO MINIMIZE WAVEFRONT 0 ADDITIONAL RESIDUAL EVALUATIONS FOR LINE SEARCHES 0 ADDITIONAL OPERATOR EVALUATIONS FOR LINE SEARCHES 0 WARNING MESSAGES DURING USER INPUT PROCESSING 0 WARNING MESSAGES DURING ANALYSIS 0 ANALYSIS WARNINGS ARE NUMERICAL PROBLEM MESSAGES 0 ANALYSIS WARNINGS ARE NEGATIVE EIGENVALUE MESSAGES 1 ERROR MESSAGES JOB TIME SUMMARY USER TIME (SEC) = 0.22000 SYSTEM TIME (SEC) = 0.11000 TOTAL CPU TIME (SEC) = 0.33000 WALLCLOCK TIME (SEC) = 0
Wenn ich 4 Prozessoren nehme, erhalte ich das gleiche Ergebnis.
Was mich jetzt (beim Test) selbst überrascht hat ist folgendes: Wenn ich nur 1 Element (Würfel, C3D8) mit 4 Prozessoren nehme, läuft es wieder durch. Wobei ich mir nicht sicher bin ob das nicht eventuell daran liegen kann, das dieses 1 Element genau 1 Prozessor zugeordnet wird und es somit rechenbar wird? Ausschnitt aus *.msg: Zitat:
INITIAL ELEMENT LOAD BALANCE COMPUTE NODE 1 PROCESS NUMBER OF ELEMENTS 1 1 2 0 3 0 4 0
Kann jemand damit was anfangen?
Zur 2. Antwort: Die Lizenzen sollte ich haben, denn sonst würde abaqus nicht starten bzw kann ich (ohne der umat-Routine) parallel rechnen. Vielen Dank! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DDsDDe Mitglied
Beiträge: 102 Registriert: 04.02.2009
|
erstellt am: 06. Mai. 2009 16:57 <-- editieren / zitieren --> Unities abgeben:
Hallo nochmals, hat noch jemand etwas Hilfreiches beizusteuern? Mittlerweile funktioniert das parallel-Rechnen tatsächlich, allerdings nur bis zu einem gewissen Punkt und dann bricht die Berechnung ab. Wenn ich mit nur 1 Prozessor rechne läuft meine umat durch, deshalb denke ich, dass ich keine prinzipiellen Fehler habe. Kann man überhaupt parallel rechnen und dabei eine umat (also fortran) verwenden? Ich denke, dass der Fehler mit dem Speicherplatz im RAM zu tun hat, dh, dass verschiedene gleichzeitig aufgerufene umats aufden gleichen Speicherplatz schreiben und sich somit gegenseitig behindern. Was muss ich alles tun, dass jeder Speicherplatz tatsächlich nur von 1 umat besetzt und verwendet wird? Ich verwende keine common blocks (implicit none), kein "save" in den subroutinen und habe auch extra alle Variablen wie DDsDDe, stress, stran, KINC etc. die von abaqus an die umat übergeben werden, wieder neu definiert. Vielleich hat doch noch jemand einen Lösungsansatz zu bieten? Oder die eindeutige Aussage, dass Parallelrechnen + umat einfach nicht geht? Vielen Dank! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Daronin Mitglied
Beiträge: 16 Registriert: 25.06.2008
|
erstellt am: 07. Mai. 2009 07:42 <-- editieren / zitieren --> Unities abgeben: Nur für DDsDDe
Hallo Also ich kann dazu nur sagen, dass meine umats problemlos auf mehreren Prozessoren laufen. Mir ist nur aufgefallen, dass ich eine Rechnung mit nur einem Element (Würfel) nicht auf mehreren Prozessoren laufen lassen kann. Ich dachte, dass liegt daran, dass Abaqus ein Element nicht aufteilen kann. Sobald ich größere Strukturen berechne, geht das immer, egal ob auf einem oder auf acht Prozessoren. Und wie gesagt ich verwende unterschiedliche Umats, alle funktionieren ohne das ich etwas verändern muss. Liegt es bei dir eventuell am Speicher oder an den Tokens? Parallel rechnen verbraucht natürlich mehr Ram und mehr Tokens. Aber dann ist es merkwürdig, dass die Rechnung startet, aber dann abbricht. Grüsse Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DDsDDe Mitglied
Beiträge: 102 Registriert: 04.02.2009
|
erstellt am: 07. Mai. 2009 10:36 <-- editieren / zitieren --> Unities abgeben:
Hallo, mit den Tokens hats nix zu tun denn Rechnungen ohne meine umat laufen durch, auch mit mehreren Prozessoren. Ausserdem läuft sie mit der umat durch, wenn ich spezielle (einfache) Materialparameter (Neigung der lokalen Richtung zum globalen Lastangriff) eingebe. Parallelrechnen mit 1 Element geht deshalb nicht, weil IMHO abaqus elementsweise auf die einzelnen Prozessoren aufteilt (siehe *.msg-DAtei, bei mir ca. Zeile 95). Ich denke dass die bedeutet, dass immer die selben Elemente auf einem Prozessor laufen und nicht zB nach Integrationspunkten zusätzlich unterschieden wird. siehe Auszug *.msg: 95 INITIAL ELEMENT LOAD BALANCE 96 COMPUTE NODE 1 PROCESS NUMBER OF ELEMENTS 97 1 4 98 2 4 Weiters hat mir deine Antwort sehr geholfen da ich nun weiss dass es prinzipiel gehen sollte und es durchaus noch Sinn macht, nach einer Lösung zu suchen da vermutlich in Summe eine grössere Zeiersparnis beim Rechnen herauskommt als ich jetzt hineinstecke (ich hoffe es zumindest!!!). Sonst noch irgendwelche Tips im Umgang mit Speicher oder so? Meine umat hat relativ viel iterativ zu lösen, vielleicht ist dort irgendeine Stolperstelle? Vielen Dank jedenfalls erstmals, DDsDDe.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DDsDDe Mitglied
Beiträge: 102 Registriert: 04.02.2009
|
erstellt am: 13. Mai. 2009 11:07 <-- editieren / zitieren --> Unities abgeben:
Geschafft!!! So, ich danke für die Antworten, das Problem ist gelöst. Ehrlicher muss ich aber zugeben, dass ich nicht genau weiss, was ich dabei mache. Ich habe die Einstellungen auf "Parallelization method: domain" und "Multiprocessing method: default" gestellt und es läuft. lg, DDsDDe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|