Optimierung einer Klasse von Elektronischen Strukturberechnungen durch Abwägen von Speicherbedarf und Rechenzeit Gerald Baumgartner, Ohio State Daniel.

Slides:



Advertisements
Ähnliche Präsentationen
Imperative Programmierung
Advertisements

Christian Scheideler SS 2009
Grundlagen des A*-Algorithmus und Anwendung in der Routenplanung
Knapsack & Bin Packing Sebastian Stober
Hash-Tabellen und -Funktionen Hash-Tabellen in Java
(Zweistufige) Logiksynthese
Graph Matching Torsten Gründel
Der k-d-Baum Richard Göbel.
Zerlegung von Graphen.
Das LCA – Problem in Suffixbäumen
ADS Vorlesung Prof. Dr. W. Conen, FH Gelsenkirchen
FH-Hof Der B-Baum Richard Göbel. FH-Hof Wahl des Verzweigungsgrad Verzweigungsgrad kann größer als 2 sein v Nachfolger für einen Knoten v-1 Werte in einem.
Lineare Suche Divide-and-Conquer-Suche Kombinationssuche
7. Natürliche Binärbäume
R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister)
2. Kapitel: Komplexität und Komplexitätsklassen
3.1 3 Implementierungstechniken 3.1 Kompression von invertierten Dateien Warum? Parameter des Index: N = Anzahl Dokumente n = Anzahl Terme f t = Dokumentfrequenz.
Friedhelm Meyer auf der Heide 1 HEINZ NIXDORF INSTITUT Universität Paderborn Algorithmen und Komplexität Approximationsalgorithmen …liefern in polynomieller.
1 Computergestützte Verifikation Symbolisches Model Checking 4.1 CTL Model Checking mit Binary Decision Diagrams (1. Systeme 2. Spezifikationen.
Informierte Suche.
Sortierverfahren Richard Göbel.
Sortierverfahren Richard Göbel.
Algorithmentheorie 04 –Hashing
WS Algorithmentheorie 13 - Kürzeste (billigste) Wege Prof. Dr. Th. Ottmann.
Dynamische Programmierung (2) Matrixkettenprodukt
WS Algorithmentheorie 08 – Dynamische Programmierung (2) Matrixkettenprodukt Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (17 – Bäume: Grundlagen und natürliche Suchbäume) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 2 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Union-Find-Strukturen
Algorithmen und Datenstrukturen
Seminar parallele Programmierung SS 2003
1 Kap. 2 Graphen Kap. 2.1 Netze Beispiele: MVV, Autobahnen, WIN, E/R, LH-Flüge, Stützgraphen, Petri-Netze, SIPs, ISA-Hierarchien, Operator-Graphen, Wartegraphen.
R-tree, R*-tree und R+-tree
Klausur „Diskrete Mathematik II“
High Performance = Innovative Computer Systems + Efficient Algorithms Friedhelm Meyer auf der Heide 1 HEINZ NIXDORF INSTITUT Universität Paderborn Algorithmen.
Minimum Spanning Tree: MST
The Rectilinear Steiner Tree Problem is NP-complete
FH-Hof Algorithmen und Datenstrukturen - Einführung Richard Göbel.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung 1 SS 2001 Algorithmus von Dijkstra.
Effiziente Algorithmen
Chromatische Zahl.
Effiziente Algorithmen
Black Box Algorithmen Hartmut Klauck Universität Frankfurt SS
Diskrete Mathematik II
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Grundlagen der Informatik - Prof. Slany 1 Grundlagen der Informatik Prof. Wolfgang SLANY.
PPS Präsentation -> Wikommen
Agenda für heute, 28. April, 2005 Strukturierte VariablenStrukturierte Variablen Arrays.
Komplexität von Algorithmen
Einführung in Optimierungsprobleme auf modernen Rechnerarchitekturen
Programmiervorkurs WS 2014 Referenzdatentypen
Diskrete Mathematik II
Sammlungsklassen Array.
(Syntax, Strings/Zahlen, Variablen, Arrays)
Minimal spannende Bäume
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung Datenstrukturen für den Algorithmus von.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung Suche des kürzesten Weges in einem Netz.
Anwendung der Ellipsoidmethode in der Kombinatorischen Optimierung
Der A*-Algorithmus.
WS03/041 Dynamische Programmierung (3) Konstruktion optimaler Suchbäume Prof. Dr. S. Albers Prof. Dr. Th. Ottmann.
Gliederung der Vorlesung
Binärbäume.
Programmiersprachen II Fortsetzung Datenstrukturen Hashing Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Vorlesung AVL-Bäume/Algorithmen-
Vorlesung AVL-Bäume/Algorithmen-
 Präsentation transkript:

Optimierung einer Klasse von Elektronischen Strukturberechnungen durch Abwägen von Speicherbedarf und Rechenzeit Gerald Baumgartner, Ohio State Daniel Cociorva, Ohio State Chi-Chung Lam, Ohio State P. Sadayappan, Ohio State J. Ramanujam, Louisiana State Marcel Nooijen, Princeton David E. Bernholdt, ORNL Robert Harrison, PNNL

hbar[a,b,i,j] == sum[f[b,c]*t[i,j,a,c],{c}] -sum[f[k,c]*t[k,b]*t[i,j,a,c],{k,c}] +sum[f[a,c]*t[i,j,c,b],{c}] -sum[f[k,c]*t[k,a]*t[i,j,c,b],{k,c}] - sum[f[k,j]*t[i,k,a,b],{k}] -sum[f[k,c]*t[j,c]*t[i,k,a,b],{k,c}] -sum[f[k,i]*t[j,k,b,a],{k}] -sum[f[k,c]*t[i,c]*t[j,k,b,a],{k,c}] +sum[t[i,c]*t[j,d]*v[a,b,c,d],{c,d}] +sum[t[i,j,c,d]*v[a,b,c,d],{c,d}] +sum[t[j,c]*v[a,b,i,c],{c}] -sum[t[k,b]*v[a,k,i,j],{k}] +sum[t[i,c]*v[b,a,j,c],{c}] -sum[t[k,a]*v[b,k,j,i],{k}] -sum[t[k,d]*t[i,j,c,b]*v[k,a,c,d],{k,c,d}] -sum[t[i,c]*t[j,k,b,d]*v[k,a,c,d],{k,c,d}] - sum[t[j,c]*t[k,b]*v[k,a,c,i],{k,c}] +2*sum[t[j,k,b,c]*v[k,a,c,i],{k,c}] -sum[t[j,k,c,b]*v[k,a,c,i],{k,c}] - sum[t[i,c]*t[j,d]*t[k,b]*v[k,a,d,c],{k,c,d}] +2*sum[t[k,d]*t[i,j,c,b]*v[k,a,d,c],{k,c,d}] -sum[t[k,b]*t[i,j,c,d]*v[k,a,d,c],{k,c,d}] - sum[t[j,d]*t[i,k,c,b]*v[k,a,d,c],{k,c,d}] +2*sum[t[i,c]*t[j,k,b,d]*v[k,a,d,c],{k,c,d}] -sum[t[i,c]*t[j,k,d,b]*v[k,a,d,c],{k,c,d}] - sum[t[j,k,b,c]*v[k,a,i,c],{k,c}] -sum[t[i,c]*t[k,b]*v[k,a,j,c],{k,c}] -sum[t[i,k,c,b]*v[k,a,j,c],{k,c}] -sum[t[i,c]*t[j,d]*t[k,a]*v[k,b,c,d],{k,c,d}] -sum[t[k,d]*t[i,j,a,c]*v[k,b,c,d],{k,c,d}] -sum[t[k,a]*t[i,j,c,d]*v[k,b,c,d],{k,c,d}] +2*sum[t[j,d]*t[i,k,a,c]*v[k,b,c,d],{k,c,d}] - sum[t[j,d]*t[i,k,c,a]*v[k,b,c,d],{k,c,d}] -sum[t[i,c]*t[j,k,d,a]*v[k,b,c,d],{k,c,d}] -sum[t[i,c]*t[k,a]*v[k,b,c,j],{k,c}] +2*sum[t[i,k,a,c]*v[k,b,c,j],{k,c}] -sum[t[i,k,c,a]*v[k,b,c,j],{k,c}] +2*sum[t[k,d]*t[i,j,a,c]*v[k,b,d,c],{k,c,d}] - sum[t[j,d]*t[i,k,a,c]*v[k,b,d,c],{k,c,d}] -sum[t[j,c]*t[k,a]*v[k,b,i,c],{k,c}] -sum[t[j,k,c,a]*v[k,b,i,c],{k,c}] -sum[t[i,k,a,c]*v[k,b,j,c],{k,c}] +sum[t[i,c]*t[j,d]*t[k,a]*t[l,b]*v[k,l,c,d],{k,l,c,d}] -2*sum[t[k,b]*t[l,d]*t[i,j,a,c]*v[k,l,c,d],{k,l,c,d}] - 2*sum[t[k,a]*t[l,d]*t[i,j,c,b]*v[k,l,c,d],{k,l,c,d}] +sum[t[k,a]*t[l,b]*t[i,j,c,d]*v[k,l,c,d],{k,l,c,d}] - 2*sum[t[j,c]*t[l,d]*t[i,k,a,b]*v[k,l,c,d],{k,l,c,d}] -2*sum[t[j,d]*t[l,b]*t[i,k,a,c]*v[k,l,c,d],{k,l,c,d}] +sum[t[j,d]*t[l,b]*t[i,k,c,a]*v[k,l,c,d],{k,l,c,d}] -2*sum[t[i,c]*t[l,d]*t[j,k,b,a]*v[k,l,c,d],{k,l,c,d}] +sum[t[i,c]*t[l,a]*t[j,k,b,d]*v[k,l,c,d],{k,l,c,d}] +sum[t[i,c]*t[l,b]*t[j,k,d,a]*v[k,l,c,d],{k,l,c,d}] +sum[t[i,k,c,d]*t[j,l,b,a]*v[k,l,c,d],{k,l,c,d}] +4*sum[t[i,k,a,c]*t[j,l,b,d]*v[k,l,c,d],{k,l,c,d}] -2*sum[t[i,k,c,a]*t[j,l,b,d]*v[k,l,c,d],{k,l,c,d}] -2*sum[t[i,k,a,b]*t[j,l,c,d]*v[k,l,c,d],{k,l,c,d}] -2*sum[t[i,k,a,c]*t[j,l,d,b]*v[k,l,c,d],{k,l,c,d}] +sum[t[i,k,c,a]*t[j,l,d,b]*v[k,l,c,d],{k,l,c,d}] +sum[t[i,c]*t[j,d]*t[k,l,a,b]*v[k,l,c,d],{k,l,c,d}] +sum[t[i,j,c,d]*t[k,l,a,b]*v[k,l,c,d],{k,l,c,d}] -2*sum[t[i,j,c,b]*t[k,l,a,d]*v[k,l,c,d],{k,l,c,d}] -2*sum[t[i,j,a,c]*t[k,l,b,d]*v[k,l,c,d],{k,l,c,d}] +sum[t[j,c]*t[k,b]*t[l,a]*v[k,l,c,i],{k,l,c}] +sum[t[l,c]*t[j,k,b,a]*v[k,l,c,i],{k,l,c}] -2*sum[t[l,a]*t[j,k,b,c]*v[k,l,c,i],{k,l,c}] +sum[t[l,a]*t[j,k,c,b]*v[k,l,c,i],{k,l,c}] -2*sum[t[k,c]*t[j,l,b,a]*v[k,l,c,i],{k,l,c}] +sum[t[k,a]*t[j,l,b,c]*v[k,l,c,i],{k,l,c}] +sum[t[k,b]*t[j,l,c,a]*v[k,l,c,i],{k,l,c}] +sum[t[j,c]*t[l,k,a,b]*v[k,l,c,i],{k,l,c}] +sum[t[i,c]*t[k,a]*t[l,b]*v[k,l,c,j],{k,l,c}] +sum[t[l,c]*t[i,k,a,b]*v[k,l,c,j],{k,l,c}] -2*sum[t[l,b]*t[i,k,a,c]*v[k,l,c,j],{k,l,c}] +sum[t[l,b]*t[i,k,c,a]*v[k,l,c,j],{k,l,c}] +sum[t[i,c]*t[k,l,a,b]*v[k,l,c,j],{k,l,c}] +sum[t[j,c]*t[l,d]*t[i,k,a,b]*v[k,l,d,c],{k,l,c,d}] +sum[t[j,d]*t[l,b]*t[i,k,a,c]*v[k,l,d,c],{k,l,c,d}] +sum[t[j,d]*t[l,a]*t[i,k,c,b]*v[k,l,d,c],{k,l,c,d}] -2*sum[t[i,k,c,d]*t[j,l,b,a]*v[k,l,d,c],{k,l,c,d}] -2*sum[t[i,k,a,c]*t[j,l,b,d]*v[k,l,d,c],{k,l,c,d}] +sum[t[i,k,c,a]*t[j,l,b,d]*v[k,l,d,c],{k,l,c,d}] +sum[t[i,k,a,b]*t[j,l,c,d]*v[k,l,d,c],{k,l,c,d}] +sum[t[i,k,c,b]*t[j,l,d,a]*v[k,l,d,c],{k,l,c,d}] +sum[t[i,k,a,c]*t[j,l,d,b]*v[k,l,d,c],{k,l,c,d}] +sum[t[k,a]*t[l,b]*v[k,l,i,j],{k,l}] +sum[t[k,l,a,b]*v[k,l,i,j],{k,l}] +sum[t[k,b]*t[l,d]*t[i,j,a,c]*v[l,k,c,d],{k,l,c,d}] +sum[t[k,a]*t[l,d]*t[i,j,c,b]*v[l,k,c,d],{k,l,c,d}] +sum[t[i,c]*t[l,d]*t[j,k,b,a]*v[l,k,c,d],{k,l,c,d}] -2*sum[t[i,c]*t[l,a]*t[j,k,b,d]*v[l,k,c,d],{k,l,c,d}] +sum[t[i,c]*t[l,a]*t[j,k,d,b]*v[l,k,c,d],{k,l,c,d}] +sum[t[i,j,c,b]*t[k,l,a,d]*v[l,k,c,d],{k,l,c,d}] +sum[t[i,j,a,c]*t[k,l,b,d]*v[l,k,c,d],{k,l,c,d}] - 2*sum[t[l,c]*t[i,k,a,b]*v[l,k,c,j],{k,l,c}] +sum[t[l,b]*t[i,k,a,c]*v[l,k,c,j],{k,l,c}] +sum[t[l,a]*t[i,k,c,b]*v[l,k,c,j],{k,l,c}] +v[a,b,i,j] Realistisches Quantenchemie Beispiel

Formeln der Form Dutzende Arrays und Arrayindices, 100e von Termen Indexbereiche von 10 bis 3000 Und das ist noch ein einfaches Modell Problem: Tensorkontraktionen

Quantenchemie, Physik kondensierter Materie Beispiel: studieren chemischer Eigenschaften Typische Programmstruktur Quantenchemie Code; while (! fertig) { Tensorkontraktionen; Quantenchemie Code; } Großteil der Rechenzeit in Tensorkontraktionen Anwendungsgebiet

Einleitung Optimierungsprobleme Algorithmen Demo und weiterführende Arbeit Überblick

Braucht 4 * N 10 Operationen für Indexe a – l im Bereich N Assoziative, kommutative, distributive Gesetze verwendbar Optimale Formelsequenz braucht nur 6 * N 6 Operationen Operationsminimierung

Schleifenfusionierung zur Speicherreduktion S = 0 for b, c T1f = 0; T2f = 0 for d, f for e, l T1f += B befl D cdel for j, k T2f jk += T1f C dfjk for a, i, j, k S abij += T2f jk A acik T1 = 0; T2 = 0; S = 0 for b, c, d, e, f, l T1 bcdf += B befl D cdel for b, c, d, f, j, k T2 bcjk += T1 bcdf C dfjk for a, b, c, i, j, k S abij += T2 bcjk A acik FormelsequenzNicht-fusionierter CodeFusionierter Code

Illustration von Space-Time Trade-Offs for a, e, c, f for i, j X aecf += T ijae T ijcf for c, e, b, k T1 cebk = f1(c, e, b, k) for a, f, b, k T2 afbk = f2(a, f, b, k) for c, e, a, f for b, k Y ceaf += T1 cebk T2 afbk for c, e, a, f E += X aecf Y ceaf Array Speicher Zeit X V 4 V 4 O 2 T1V 3 OC f1 V 3 O T2V 3 OC f2 V 3 O Y V 4 V 5 O E 1 V 4 a.. f: range V = i.. k: range O =

Speicherminimale Form for a, f, b, k T2 afbk = f2(a, f, b, k) for c, e for b, k T1 bk = f1(c, e, b, k) for a, f for i, j X += T ijae T ijcf for b, k Y += T1 bk T2 afbk E += X Y Array Speicher Zeit X 1 V 4 O 2 T1 VOC f1 V 3 O T2V 3 OC f2 V 3 O Y 1 V 5 O E 1 V 4 a.. f: range V = 3000 i.. k: range O = 100

Redundante Rechnungen für volle Fusion for a, e, c, f for i, j X += T ijae T ijcf for b, k T1 = f1(c, e, b, k) T2 = f2(a, f, b, k) Y += T1 T2 E += X Y Array Speicher Zeit X 1 V 4 O 2 T1 1C f1 V 5 O T2 1C f2 V 5 O Y 1 V 5 O E 1 V 4

Kacheln zur Reduktion von Neuberechnungen for a t, e t, c t, f t for a, e, c, f for i, j X aecf += T ijae T ijcf for b, k for c, e T1 ce = f1(c, e, b, k) for a, f T2 af = f2(a, f, b, k) for c, e, a, f Y ceaf += T1 ce T2 af for c, e, a, f E += X aecf Y ceaf Array Speicher Zeit X B 4 V 4 O 2 T1 B 2 C f1 (V/B) 2 V 3 O T2 B 2 C f2 (V/B) 2 V 3 O Y B 4 V 5 O E 1 V 4

Kacheln zur Minimierung der Zugriffszeit FOR ii = 1, Ni, Ti FOR jj = 1, Nj, Tj FOR kk = 1, Nk, Tk FOR i = ii, ii + Ti - 1 FOR j = jj, jj + Tj - 1 FOR k = kk, kk + Tk - 1 C(i,k) = C(i,k) + A(i,j) * B(j,k) END FOR k, j, i, kk, jj, ii Wähle Ti, Tj, und Tk so daß Ti * Tj + Ti * Tk + Tj * Tk < Cache Größe Anzahl der Cache Misses: A(i,j): Ni * Nj B(j,k): Nj * Nk * Ni/Ti C(i,k): Ni * Nk * Nj/Tj

Einleitung Optimierungsprobleme Algorithmen Demo und weiterführende Arbeit Überblick

Tensor Contraction Engine Operationsminimierung Speicherminimierung Space-Time Trade-Offs Kommunikationsminimierung Datenzugriffsoptimierung Tensorkontraktionsausdrücke Geschachtelte Schleifen (Bäume) (Speicherbedarf Speicherplatz) (Speicherbedarf > Speicherplatz) Unregelmäßig geschachtelte Schleifen Parallele Schleifen Gekachelte, parallele Fortran Schleifen

mlimit = ; range V = 300; range O = 70; range U = 40; index a, b, c, d : V; index e, f : O; index i, j, k, l : U; procedure P (in T[V,V,U,U], in S[V,U,O,U], in N[V,V,O,U], in D[V,O,O,U], out X[V,V,O,O]) = begin X[a,b,i,j] == sum[T[a,c,i,k] * S[d,j,f,k] * N[c,d,e,l] * D[b,e,f,l], {c,d,e,f,k,l}]; end Anwendungsspezifische Sprache

Für individuellen Term (ohne binäre Addition): –Bottom-up dynamischer Programmieralgorithmus –NP-vollständig, aber sehr effizientes Pruning Für beliebige Tensorkontraktionsausdrücke –Aufzählung aller Formeln mit distributiven/assoziativen Gesetzen –Verwendung von Suchalgorithmus mit Pruning für Terme –Verwendung der chemischen Struktur für Pruning Operationsminimierung

Aufzählen aller möglichen Schleifenstrukturen Dynamischer Programmieralgorithmus Für jeden Knoten im Ausdrucksbaum –Berechne Menge der Lösungen mit (Fusion, Speicherbedarf) –Z.B., (, 42) –Streiche Lösungen mit eingeschränkterer Fusion, höheren Kosten –Nur eine Lösungen für die Wurzel Speicherminimierung

Der Fusionsgraph A(i,j)B(j,k) * ijjk j

Explizite Fusionierte Schleifen A(i,j)B(j,k) * ijjk j i: range 10 j: range 10 k: range 100

Für e1(i,j,k) * e2(i,j): mögliche Neuberechnung von e2 in k- Schleife Für jeden Knoten im Baum in bottom-up Algorithmus –Berechne Lösungsmenge { (Fusion, Speicher, Zeit),... } –Streiche suboptimale Lösungen Für alle Lösungen für Wurzel des Ausdrucksbaumes –Teile Neuberechnungsschleifen in Kachel-/Intrakachelschleifen –Bringe Intrakachelschleifen innerhalb von Kachelchleifen –Suche nach Kachelgrößen zur Minimierung von Neuberechnungen Space-Time Trade-Off Algorithmus

Einführung von Neuberechnungsschleifen A(i,j)B(j,k) * ijijk j { (, 3, 9000),... } i: range 10 j: range 10 k: range 100

Kacheln von Neuberechnungsschleifen A(i t,i,j)B(j,k) * ijitit jk j i: range 10 j: range 10 k: range 100 itit

Prozessoren als multidimensionales Prozessornetz Verteilung von Arraydimensionen über Prozessordimensionen –Beispiel: Verteilung von B(a,b,i,j): Mögliche Umverteilung von Arrays vor Operation Kommunikation: Übertragunszeit + Startzeit Für jeden Knoten im Ausducksbaum –Berechne (Fusion, Verteilung, Speicher, Komm.-Kosten) Lösungen –Verwende Lösung mit geringster Kommunikationszeit die noch im Speicher Platz hat Kommunikationskostenmodell ist empirisch erarbeitet Kommunikationsminimierung

Problem: Schleifenfusion und Datenzugriff wiedersprüchlich Lösung: beginne mit fusionierter Schleifenstruktur Expandiere Skalare und Vektoren auf Kachelgröße Trenne Schleifen in Kachelschleifen und Intrakachelschleifen Bringe alle Intrakachelschleifen innerhalb der Kachelschleifen In bottom-up Algorithmus über Syntaxbaum zähle Cache Misses Iteratiere über Kachelgrößen um optimale Lösung zu finden Datenzugriffsoptimierung

Einleitung Optimierungsprobleme Algorithmen Demo und weiterführende Arbeit Überblick

Gut strukturiertes Anwendungsgebiet Suchalgorithmen zur Optimierung Empirisch erarbeitete Kostenmodelle Compilerentwicklung in Java Zukünftige Erweiterungen –Heuristiken für Operationsminimierung –Schleifenfusion mit dynamischer Speicherallokierung –Dünn besetzten Arrays, Symmetrie, azyklische Graphen –Anwendungsspezifische Optimierungen Zusammenfassung und Aktueller Stand