Neue Datenstrukturen

  • Verteilungsklassen
    • Aktivierung von verschieden Verteilungen
    • Block-Verteilung implementiert
    • Zyklische Verteilung implementiert
    • Block-Zyklische Verteilung implementiert
    • Erweiterung: Benutzer können eigene verteilte Klassen schreiben
  • Verteilte Vektoren
    • Parametrisierter lokaler Vektor (kann auch nutzerdefiniert sein)
    • Parametrisierung mit Verteilungsklasse, jede Verteilung ist möglich
  • Verteilte Matrizen
    • Parametrisiert mit nicht-verteilter Matrixklasse
      • Gleiche Implementierung von verteilten dichten und verteilten schwach besetzten Matrizen
      • Klasse kann spezialisiert werden, für noch bessere Laufzeiten
    • Parametrisierung mit zwei Verteilungsklassen
      • Im Matrix-Vektor-Produkt v= A * w können die Vektoren v und w verschiedene Verteilungen haben (die einzelnen Verteilungen müssen aber mit A kompatibel sein)
      • Migration von Vektoren und Matrizen kann dadurch als Matrixprodukt ausgeführt werden
  • Verteilter Vektor-Inserter
    • Werte können mit globalem Index eingefügt werden
    • Lokale Einträge werden direkt eingefügt und entfernte Werte am Ende der Einfügungsphase kommuniziert (wenn das Inserter-Objekt zerstört wird)
    • Parametrisierung mit Update-Funktion
    • Bei mehrfachen Einfügungen in denselben Eintrag können die Werte addiert werden (oder multipliziert, maximiert,...)
  • Verteilter Matrix-Inserter
    • Gleiche Funktionalität wie der verteilte-Vektor Inserter
    • Am Ende des Einfügens werden Puffer für das verteilte Matrix-Vektor-Produkt vorbereitet (wie in PETSc)
    • Es wird vorab keine genaue Information benötigt, wie viele Nichtnull-Elemente existieren bzw. wo sie liegen (im Gegensatz zu PETSc). Ein einzelner Besetztheitsparameter ist ausreichend für den Matrix-Inserter.
  • Generische verteilte Blockvorkonditionierer
    • Diagonal
    • ILU(0)
    • IC(0)
  • Migrationsklassen zur Umverteilung
    • Zur Zeit ist die Implementierung nur von Block zu Block realisiert
    • Sehr einfache Verwendung im Konstruktor:
      • Sei ‘A’ eine Matrix vom Type ‘M’ und ‘m’ eine Migration Objekt, dann konstruiert der Ausdruck
        M B(A, m); 
        eine neue Matrix ‘B’ mit den Werten von ‘A’ und der neuen Verteilung
      • Genauso können auch Vektoren migriert werden
    • Umgekehrte Migration, z.B.:
      M A2(B, reverse(m));
      migriert die Werte von B zurück zur ursprünglichen Verteilung (natürlich nur nützlich, wenn sich B zwischenzeitlich geändert hat)
    • Um zum Beispiel die Ergebnisse zurück auf die Anfangsindizierung eines FEM-Werkzeugs abzubilden.
  • Einfache Ausgabe
    • Zum Beispiel:
      sout << “Matrix A ist\n” << A << “v ist “ << v << ‘\n’;
      gibt Matrix A und Vektor v einmal aus
    • Funktioniert auch mit verteilten Matrizen und Vektoren
    • Kann auch für die Dateiausgabe verwendet werden
  • Mehrfache Ausgabe
    • Zum Beispiel
      rout << “alpha ist “ << alpha << ‘\n’;
      gibt für jeden Prozessor eine Nachricht mit vorangestellter Prozessornummer aus

 

© 2017 SimuNova UG