Ich entwickle derzeit eine Domänenzerlegungsmethode zur Lösung des Streuproblems. Grundsätzlich löse ich iterativ ein System von Helmholtz-BVPs. Ich diskretisiere die Gleichungen mit der Finite-Elemente-Methode über Dreiecks- oder Tetraedernetzen. Ich entwickle den Code für meine Doktorarbeit. Ich kenne einige der vorhandenen Finite-Elemente-Bibliotheken wie deal.ii oder DUNE und obwohl ich denke, dass sie mit inspirierendem Design und API für Lernzwecke großartig sind, wollte ich meine eigene kleine Anwendung von Grund auf neu entwickeln.
Ich bin an einem Punkt angelangt, an dem meine seriellen Versionen ausgeführt werden, und jetzt möchte ich sie parallelisieren. Schließlich ist es eine der Stärken des Domänenzerlegungs-Frameworks, Algorithmen zu formulieren, die zumindest im Prinzip leicht zu parallelisieren sind. In der Praxis gibt es jedoch viele Details, die berücksichtigt werden müssen. Mesh Management ist einer von ihnen. Wenn die Anwendungen eine hohe Auflösung erreichen und gleichzeitig auf viele CPUs skaliert werden sollen, ist die Replikation eines gesamten Netzes auf jeder CPU ineffizient.
Ich wollte die Entwickler, die an ähnlichen Anwendungen in Hochleistungsrechnerumgebungen arbeiten, fragen, wie sie mit diesem Problem umgehen.
Es gibt eine p4est-Bibliothek für die verteilte Netzverwaltung. Ich brauche AMR nicht, daher könnte es ein Overkill sein, da ich nur an der Verwendung einheitlicher Netze interessiert bin und nicht sicher bin, ob es Dreiecksnetze verfeinern kann. Ich könnte auch einfach ein einheitliches Netz erstellen und es dann in einen der Netzpartitionierer einspeisen und die Ausgabe nachbearbeiten.
Der einfachste Ansatz scheint darin zu bestehen, für jede Partition eine separate Datei zu erstellen, die Netzinformationen enthält, die nur für diese bestimmte Partition relevant sind. Diese Datei würde von einer einzelnen CPU gelesen, die für die Montage des diskreten Systems auf diesem Teil des Netzes verantwortlich wäre. Natürlich müssten einige globale Partitionskonnektivitäts- / Nachbarschaftsinformationen auch in einer Datei gespeichert werden, die von allen CPUs für die Kommunikation zwischen Prozessen gelesen wird.
Welche anderen Ansätze gibt es da draußen? Wenn einige von Ihnen dies mitteilen könnten, welche Methoden werden in der Branche oder bei staatlichen Forschungseinrichtungen im Zusammenhang mit der Behandlung dieses Problems häufig verwendet? Ich bin ziemlich neu in der Programmierung eines parallelen Finite-Elemente-Lösers und wollte ein Gefühl dafür bekommen, ob ich über dieses Problem richtig nachdenke oder nicht und wie andere es angehen. Jeder Rat oder Hinweis auf relevante Forschungsartikel wäre sehr dankbar!
Danke im Voraus!