Die beste Infrastruktur ist nur so schnell, wie der Code der darauf läuft Fallbeispiel Wettervorhersage VPE Swiss Workshop, HSR 24. Januar 2013 David Müller, Tobias Gysi Vision trifft Realität. Supercomputing Systems AG Phone +41 43 456 16 00 Technopark 1 Fax +41 43 456 16 10 8005 Zürich www.scs.ch
Motivation 2 Zürich 24.01.2013 by Supercomputing Systems AG
Wer ist SCS? 3 Zürich 24.01.2013 by Supercomputing Systems AG
Entwicklungsdienstleister im Technopark Zürich 80 Mitarbeiter Elektroingenieure Informatikingenieure Physiker, Mathematiker, etc. 100% Fokus auf Kundenprojekte 4 Zürich 24.01.2013 by Supercomputing Systems AG
5 Zürich 24.01.2013 by Supercomputing Systems AG Industrial Controls & Sensors
Automotive 6 Zürich 24.01.2013 by Supercomputing Systems AG
7 Zürich 24.01.2013 by Supercomputing Systems AG Supercomputing
Computerarchitektur-Trend 8 Zürich 24.01.2013 by Supercomputing Systems AG
Performanz #500 Performance (Rmax) [Tflop/s] Performance per core [Gflop/s] Core Count 1000000 100 100000 10 10000 1 1000 0.1 100 0.01 10 0.001 1 0.0001 1993 1993 1994 1994 1995 1995 1996 1996 1997 1997 1998 1998 1999 1999 2000 2000 2001 2001 2002 2002 2003 2003 2004 2004 2005 2005 2006 2006 2007 2007 2008 2008 2009 2009 2010 2010 2011 2011 2012 2012 9 Zürich 24.01.2013 by Supercomputing Systems AG
Das COSMO Wettermodell 10 Zürich 24.01.2013 by Supercomputing Systems AG
Das COSMO Wettermodell Partielle Differentialgleichungen auf einem regulären Gitter (Geschwindigkeiten, Druck, Temperatur, Feuchtigkeit, etc.) Lösung mit Finite-Differenzen-Methode Stencils 2.2 km horizontale Maschenweite 60 vertikale Schichten 11 Zürich 24.01.2013 by Supercomputing Systems AG
Auflösung des Wettermodelles Eine gute örtliche Auflösung ist der Schlüssel zu einer genauen Vorhersage, insbesondere im Alpenraum Eine Halbierung der horizontalen Maschenweite erhöht den Rechenaufwand ca. um Faktor 10 35 km 8.8 km 2.2 km 12 Zürich 24.01.2013 by Supercomputing Systems AG
Motivation für ein Refactoring von COSMO Steigerung der Performanz auf der aktuellen Infrastruktur (x86) Portierbarkeit auf neue Prozessorarchitekturen wie GPU Gleichzeitige Optimierung für die Ausführung auf verschiedenen Architekturen (Performance Portability) One single source-code Lesbarkeit und Erweiterbarkeit des Codes für die Anwender (Meteorlogen und Klimatologen) Langfristige Wartbarkeit des Codes (Informatiker) 13 Zürich 24.01.2013 by Supercomputing Systems AG
COSMO Code Struktur % runtime % lines of code Directives Rewrite 14 Zürich 24.01.2013 by Supercomputing Systems AG
Rewrite des Dynamischen Kernes von COSMO Stencil Bibliothek 15 Zürich 24.01.2013 by Supercomputing Systems AG
Stencils Ein Stencil (= Schablone) ist eine Berechnung mit fixem Zugriffsmuster, welche auf alle Gitterpunkte eines Gitters angewendet wird Typischerweise wenig Berechnungen und viel Speicherzugriffe Ausführungsgeschwindigkeit wird durch die Speicherbandbreite limitiert Viele Stencil Codes erreichen weniger als 10% der Peak Performance 2D-Laplacian lap(i,j,k) = 4.0 * data(i,j,k) + data(i+1,j,k) + data(i-1,j,k) + data(i,j+1,k) + data(i,j-1,k); 16 Zürich 24.01.2013 by Supercomputing Systems AG
Stencil Code: Herausforderung Stencil Codes bestehen aus 2 Hauptkomponenten Loop-Logik definiert Stencil Anwendungsbereich und Reihenfolge (grün) Update-Funktion definiert die Update Formel (blau) do k = kstart, kend do j = jstart, jend do i = istart, iend lap(i, j, k) = -4.0_ir * data(i, j, k) + & data(i+1, j, k) + data(i-1, j, k) + & data(i, j+1, k) + data(i, j-1, k) end do end do end do Loop-Logik Update-Funktion Synthetisches Beispiel mit sehr geringer Komplexität + Direktiven für Parallelisierung, Vektorisierung + Performance Optimierungen wie Cache Blocking + Flexibilität der Loop-Order / des Memory-Layouts 17 Zürich 24.01.2013 by Supercomputing Systems AG
Stencil Library: Beispiel Laplace enum { data, lap }; template<typename TEnv> struct Laplacian { }; STENCIL_STAGE(TEnv) STAGE_PARAMETER(FullDomain, data) STAGE_PARAMETER(FullDomain, lap) static void Do(Context ctx, FullDomain) { } ctx[lap::center()] = -4.0 * ctx[data::center()] + ctx[data::at(iplus1)] + ctx[data::at(iminus1)] + ctx[data::at(jplus1)] + ctx[data::at(jminus1)]; Functor implementiert Update-Funktion 18 Zürich 24.01.2013 by Supercomputing Systems AG IJKRealField lapfield, datafield; Stencil stencil; StencilCompiler::Build( ); stencil, "Example", calculationdomainsize, StencilConfiguration<Real, BlockSize<32,4> >(), pack_parameters( ), Param<lap, cinout>(lapfield), Param<data, cin>(datafield) concatenate_sweeps( ) define_sweep<ckincrement>( ) define_stages( ) StencilStage< >() Laplacian, IJRange<cComplete,0,0,0,0>, KRange<FullDomain,0,0> for(int step = 0; step < numofsteps; ++step) { } stencil.apply(); Domain Specific Embedded Language (DSEL) definiert Loop-Logik
Domain Specific Embedded Language (DSEL) Übersetzung am Laplace Beispiel DSEL wird von Compiler und Stencil Bibliothek interpretiert und in Plattformabhängigen Code übersetzt (hier für die x86 Architektur) Loop beschrieben in DSEL: #pragma omp parallel for for(int block=0; block < numofblocks; ++block) { context.movetoblock(block); concatenate_sweeps( define_sweep<ckincrement>( define_stages( StencilStage< Laplacian, IJRange<cComplete,0,0,0,0>, KRange<FullDomain,0,0> >() ) ) ) for(int i=iblockstart; i < iblockend; ++i) { for(int j=jblockstart; j < jblockend; ++j) { context.moveto(i, j, kstart); for(int k=kstart; k < kend; ++k) { Laplacian::Do(context, FullDomain); context.advance<0,0,1>(); } } } } 19 Zürich 24.01.2013 by Supercomputing Systems AG
Ergebnisse der Bibliotheksentwicklung Die Stencil Bibliothek separiert Loop-Logik und Update-Funktion Die Loop-Logik wird mittels einer domänenspezifischen Sprache definiert Die Stencil Bibliothek unterstützt CPUs und GPUs Für beide Architekturen wird effizienter Code generiert CPU GPU Speicherlayout KIJ IJK Parallelisierung OpenMP CUDA Die komplette Dynamik von COSMO wurde erfolgreich implementiert 20 Zürich 24.01.2013 by Supercomputing Systems AG
Beschleunigung der Dynamik Application Performance - Interlagos 16 Core vs. Tesla X2090 Überarbeiteter Code, GPU 4.73 Überarbeiteter Code, CPU 1.65 Ursprünglicher Code, CPU 1.00 0.00 1.00 2.00 3.00 4.00 5.00 21 Zürich 24.01.2013 by Supercomputing Systems AG
Schlussfolgerungen 22 Zürich 24.01.2013 by Supercomputing Systems AG
Schlussfolgerungen Performance kritischer Code muss für jede Prozessorarchitektur optimiert werden Optimale Prozessorarchitektur ändert sich während des Software Life-Cycle COSMO ist ca. 30 Jahre alt und hat bereits Vektorrechner, PPC, x86 und GPU erlebt Anwendercode sollte Plattformunabhängig sein Für Linear Algebra Codes ist dies Tatsache dank BLAS Domain Specific Embedded Languages (DSELs) ermöglichen Bibliotheksunterstützung für komplexere algorithmische Motive 23 Zürich 24.01.2013 by Supercomputing Systems AG
Schlussfolgerungen Die Stencil Bibliothek erreicht Plattformunabhängigkeit Nur eine einzige Code-Basis für die Anwender Keine Performance-Optimierungen / Direktiven im Anwendercode Unterstützung für weitere Architekturen erfordert ausschliesslich Anpassungen an der Library Die Stencil Bibliothek verbessert die Ausführungsgeschwindigkeit Beschleunigung um Faktor 1.65 auf der identischen Hardware gezeigt 24 Zürich 24.01.2013 by Supercomputing Systems AG
Herzlichen Dank für die Unterstützung 25 Zürich 24.01.2013 by Supercomputing Systems AG
Supercomputing Systems AG info@scs.ch +41 43 456 16 00 Vision meets reality. Supercomputing Systems AG Phone +41 43 456 16 00 Technopark 1 Fax +41 43 456 16 10 8005 Zürich www.scs.ch