Paralelní výpočetní jádro matematického modelu elektrostatického zvlákňování Milan Šimko Technická univerzita v Liberci Interní odborný seminář KO MIX 19. prosince 2011
Obsah prezentace 1 MOTIVACE 2 VLÁKNOVÝ PARALELISMUS 3 IMPLEMENTACE 4 ZÁVĚR Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 2/ 20
Obsah prezentace MOTIVACE 1 MOTIVACE 2 VLÁKNOVÝ PARALELISMUS 3 IMPLEMENTACE 4 ZÁVĚR Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 3/ 20
MOTIVACE Motivace Paralelizace výpočetního jádra vyvíjeného počítačového programu byla motivována dvěma hlavními důvody: požadavek na maximální využití výkonu vícejádrových procesorů výpočetní stanice, optimalizace výpočetního času. S ohledem na hardware výpočetní stanice jsem zvolil cestu paralelizace pomocí OpenMP. Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 4/ 20
MOTIVACE Motivace Paralelizace výpočetního jádra vyvíjeného počítačového programu byla motivována dvěma hlavními důvody: požadavek na maximální využití výkonu vícejádrových procesorů výpočetní stanice, optimalizace výpočetního času. S ohledem na hardware výpočetní stanice jsem zvolil cestu paralelizace pomocí OpenMP. Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 4/ 20
MOTIVACE Motivace Paralelizace výpočetního jádra vyvíjeného počítačového programu byla motivována dvěma hlavními důvody: požadavek na maximální využití výkonu vícejádrových procesorů výpočetní stanice, optimalizace výpočetního času. S ohledem na hardware výpočetní stanice jsem zvolil cestu paralelizace pomocí OpenMP. Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 4/ 20
MOTIVACE Motivace Paralelizace výpočetního jádra vyvíjeného počítačového programu byla motivována dvěma hlavními důvody: požadavek na maximální využití výkonu vícejádrových procesorů výpočetní stanice, optimalizace výpočetního času. S ohledem na hardware výpočetní stanice jsem zvolil cestu paralelizace pomocí OpenMP. Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 4/ 20
Obsah prezentace VLÁKNOVÝ PARALELISMUS 1 MOTIVACE 2 VLÁKNOVÝ PARALELISMUS 3 IMPLEMENTACE 4 ZÁVĚR Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 5/ 20
VLÁKNOVÝ PARALELISMUS Open Multi Processing Co je OpenMP? Standardizované rozhraní pro paralelní programování aplikací běžících na počítačových systémech se sdílenou pamětí. Sestává se ze sady direktiv pro kompilátor, knihovních metod a proměnných prostředí. Dostupné pro programovací jazyky C, C++ a Fortran. Vícevláknový paralelismus fork/join. Na vývoji se podílí hlavní výrobci hardwaru a softwaru(amd, IBM, Intel, Oracle, atd.). Aktuální verze projektu 3.1(9. červenec 2011, GNU/gcc v4.7). Domovská stránka projektu http://openmp.org. Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 6/ 20
VLÁKNOVÝ PARALELISMUS Open Multi Processing Co je OpenMP? Standardizované rozhraní pro paralelní programování aplikací běžících na počítačových systémech se sdílenou pamětí. Sestává se ze sady direktiv pro kompilátor, knihovních metod a proměnných prostředí. Dostupné pro programovací jazyky C, C++ a Fortran. Vícevláknový paralelismus fork/join. Na vývoji se podílí hlavní výrobci hardwaru a softwaru(amd, IBM, Intel, Oracle, atd.). Aktuální verze projektu 3.1(9. červenec 2011, GNU/gcc v4.7). Domovská stránka projektu http://openmp.org. Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 6/ 20
VLÁKNOVÝ PARALELISMUS Open Multi Processing Co je OpenMP? Standardizované rozhraní pro paralelní programování aplikací běžících na počítačových systémech se sdílenou pamětí. Sestává se ze sady direktiv pro kompilátor, knihovních metod a proměnných prostředí. Dostupné pro programovací jazyky C, C++ a Fortran. Vícevláknový paralelismus fork/join. Na vývoji se podílí hlavní výrobci hardwaru a softwaru(amd, IBM, Intel, Oracle, atd.). Aktuální verze projektu 3.1(9. červenec 2011, GNU/gcc v4.7). Domovská stránka projektu http://openmp.org. Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 6/ 20
VLÁKNOVÝ PARALELISMUS Open Multi Processing Co je OpenMP? Standardizované rozhraní pro paralelní programování aplikací běžících na počítačových systémech se sdílenou pamětí. Sestává se ze sady direktiv pro kompilátor, knihovních metod a proměnných prostředí. Dostupné pro programovací jazyky C, C++ a Fortran. Vícevláknový paralelismus fork/join. Na vývoji se podílí hlavní výrobci hardwaru a softwaru(amd, IBM, Intel, Oracle, atd.). Aktuální verze projektu 3.1(9. červenec 2011, GNU/gcc v4.7). Domovská stránka projektu http://openmp.org. Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 6/ 20
VLÁKNOVÝ PARALELISMUS Open Multi Processing Co je OpenMP? Standardizované rozhraní pro paralelní programování aplikací běžících na počítačových systémech se sdílenou pamětí. Sestává se ze sady direktiv pro kompilátor, knihovních metod a proměnných prostředí. Dostupné pro programovací jazyky C, C++ a Fortran. Vícevláknový paralelismus fork/join. Na vývoji se podílí hlavní výrobci hardwaru a softwaru(amd, IBM, Intel, Oracle, atd.). Aktuální verze projektu 3.1(9. červenec 2011, GNU/gcc v4.7). Domovská stránka projektu http://openmp.org. Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 6/ 20
VLÁKNOVÝ PARALELISMUS Open Multi Processing Co je OpenMP? Standardizované rozhraní pro paralelní programování aplikací běžících na počítačových systémech se sdílenou pamětí. Sestává se ze sady direktiv pro kompilátor, knihovních metod a proměnných prostředí. Dostupné pro programovací jazyky C, C++ a Fortran. Vícevláknový paralelismus fork/join. Na vývoji se podílí hlavní výrobci hardwaru a softwaru(amd, IBM, Intel, Oracle, atd.). Aktuální verze projektu 3.1(9. červenec 2011, GNU/gcc v4.7). Domovská stránka projektu http://openmp.org. Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 6/ 20
VLÁKNOVÝ PARALELISMUS Open Multi Processing Co je OpenMP? Standardizované rozhraní pro paralelní programování aplikací běžících na počítačových systémech se sdílenou pamětí. Sestává se ze sady direktiv pro kompilátor, knihovních metod a proměnných prostředí. Dostupné pro programovací jazyky C, C++ a Fortran. Vícevláknový paralelismus fork/join. Na vývoji se podílí hlavní výrobci hardwaru a softwaru(amd, IBM, Intel, Oracle, atd.). Aktuální verze projektu 3.1(9. červenec 2011, GNU/gcc v4.7). Domovská stránka projektu http://openmp.org. Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 6/ 20
VLÁKNOVÝ PARALELISMUS Open Multi Processing OpenMP vs. MPI Jednoduchost a přenositelnost. Možnost paralelizace jen nejkritičtějších částí programu. Omezeno pouze na systémy se sdíleným paměťovým prostorem. Vyžaduje překladač s podporou OpenMP. Poznámka(Podpora OpenMP v sadě kompilátorů GNU/gcc) $ gcc -fopenmp -o hello hello.c $ g++ -fopenmp -o hello hello.cpp $ gfortran -fopenmp -o hello hello.f95 Projekt v QtCreatoru: následující řádky vložit do souboru hello.pro 1 QMAKE_CXXFLAGS += -fopenmp 2 QMAKE_LFLAGS += -fopenmp Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 7/ 20
VLÁKNOVÝ PARALELISMUS Open Multi Processing OpenMP vs. MPI Jednoduchost a přenositelnost. Možnost paralelizace jen nejkritičtějších částí programu. Omezeno pouze na systémy se sdíleným paměťovým prostorem. Vyžaduje překladač s podporou OpenMP. Poznámka(Podpora OpenMP v sadě kompilátorů GNU/gcc) $ gcc -fopenmp -o hello hello.c $ g++ -fopenmp -o hello hello.cpp $ gfortran -fopenmp -o hello hello.f95 Projekt v QtCreatoru: následující řádky vložit do souboru hello.pro 1 QMAKE_CXXFLAGS += -fopenmp 2 QMAKE_LFLAGS += -fopenmp Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 7/ 20
VLÁKNOVÝ PARALELISMUS Open Multi Processing OpenMP vs. MPI Jednoduchost a přenositelnost. Možnost paralelizace jen nejkritičtějších částí programu. Omezeno pouze na systémy se sdíleným paměťovým prostorem. Vyžaduje překladač s podporou OpenMP. Poznámka(Podpora OpenMP v sadě kompilátorů GNU/gcc) $ gcc -fopenmp -o hello hello.c $ g++ -fopenmp -o hello hello.cpp $ gfortran -fopenmp -o hello hello.f95 Projekt v QtCreatoru: následující řádky vložit do souboru hello.pro 1 QMAKE_CXXFLAGS += -fopenmp 2 QMAKE_LFLAGS += -fopenmp Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 7/ 20
VLÁKNOVÝ PARALELISMUS Open Multi Processing OpenMP vs. MPI Jednoduchost a přenositelnost. Možnost paralelizace jen nejkritičtějších částí programu. Omezeno pouze na systémy se sdíleným paměťovým prostorem. Vyžaduje překladač s podporou OpenMP. Poznámka(Podpora OpenMP v sadě kompilátorů GNU/gcc) $ gcc -fopenmp -o hello hello.c $ g++ -fopenmp -o hello hello.cpp $ gfortran -fopenmp -o hello hello.f95 Projekt v QtCreatoru: následující řádky vložit do souboru hello.pro 1 QMAKE_CXXFLAGS += -fopenmp 2 QMAKE_LFLAGS += -fopenmp Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 7/ 20
VLÁKNOVÝ PARALELISMUS Open Multi Processing OpenMP vs. MPI Jednoduchost a přenositelnost. Možnost paralelizace jen nejkritičtějších částí programu. Omezeno pouze na systémy se sdíleným paměťovým prostorem. Vyžaduje překladač s podporou OpenMP. Poznámka(Podpora OpenMP v sadě kompilátorů GNU/gcc) $ gcc -fopenmp -o hello hello.c $ g++ -fopenmp -o hello hello.cpp $ gfortran -fopenmp -o hello hello.f95 Projekt v QtCreatoru: následující řádky vložit do souboru hello.pro 1 QMAKE_CXXFLAGS += -fopenmp 2 QMAKE_LFLAGS += -fopenmp Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 7/ 20
VLÁKNOVÝ PARALELISMUS Open Multi Processing OpenMP vs. MPI Jednoduchost a přenositelnost. Možnost paralelizace jen nejkritičtějších částí programu. Omezeno pouze na systémy se sdíleným paměťovým prostorem. Vyžaduje překladač s podporou OpenMP. Poznámka(Podpora OpenMP v sadě kompilátorů GNU/gcc) $ gcc -fopenmp -o hello hello.c $ g++ -fopenmp -o hello hello.cpp $ gfortran -fopenmp -o hello hello.f95 Projekt v QtCreatoru: následující řádky vložit do souboru hello.pro 1 QMAKE_CXXFLAGS += -fopenmp 2 QMAKE_LFLAGS += -fopenmp Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 7/ 20
Obsah prezentace IMPLEMENTACE 1 MOTIVACE 2 VLÁKNOVÝ PARALELISMUS 3 IMPLEMENTACE 4 ZÁVĚR Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 8/ 20
IMPLEMENTACE QApplication MainWindow: QMainWindow QApplication::exec() GLWidget: QGLWidget ToolBar: QToolBar hlavní vlákno aplikace paralelní výpočetní jadro Kernel:QThread:Model QThread::exec() CircleCollector ICollector WireCollector Obr. 1: Hierarchický diagram tříd. Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 9/ 20
IMPLEMENTACE QThread::exec() QThread tok instrukcí Obr. 2: Schema vláknového paralelismu uvnitř výpočetního vlákna. Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 10/ 20
IMPLEMENTACE vlákno 0 vlákno 1 QThread::exec() QThread FORK vlákno 2. vlákno n tok instrukcí Obr. 2: Schema vláknového paralelismu uvnitř výpočetního vlákna. Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 10/ 20
IMPLEMENTACE vlákno 0 vlákno 1 QThread::exec() QThread FORK vlákno 2. vlákno n JOIN tok instrukcí Obr. 2: Schema vláknového paralelismu uvnitř výpočetního vlákna. Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 10/ 20
IMPLEMENTACE vlákno 0 vlákno 1 QThread::exec() vlákno 0 vlákno 1 QThread FORK vlákno 2. JOIN FORK vlákno 2. JOIN vlákno n tok instrukcí vlákno n Obr. 2: Schema vláknového paralelismu uvnitř výpočetního vlákna. Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 10/ 20
IMPLEMENTACE Obr. 3: Vývojový diagram. Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 11/ 20
IMPLEMENTACE 1 void Model::computeFFE(const int &n0, 2 const int &n, 3 const double &t, 4 const unsigned short &kold, 5 BEAD *pb) 6{ 7 double *pe = new double [3]; 8#pragma omp parallel for shared(pb) 9 for (int i = n0; i < n; ++i) { 10 pe = pic->computefield(kold, pb[i].rr); 11 pb[i].ffe[x] = KE/pB[i].m*pE[X]*pB[i].q; 12 pb[i].ffe[y] = KE/pB[i].m*pE[Y]*pB[i].q; 13 pb[i].ffe[z] = KE/pB[i].m*pE[Z]*pB[i].q; 14 } // end of parallel loop 15 delete [] pe; pe = 0; 16} Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 12/ 20
IMPLEMENTACE 1 void Kernel::eulerCromer(const int &n0, 2 const int &n, 3 const double &t, 4 const double &dt, 5 const unsigned short &kold, 6 const unsigned short &knew, 7 BEAD *pb, DUMBBELL *pd) 8{ 9#pragma omp parallel sections 10 { 11#pragma omp section 12 { 13 computeffc(n0, n, t, kold, pb); 14 } 15 [...]; 16 } // end of parallel sections Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 13/ 20
IMPLEMENTACE 11#pragma omp barrier 12#pragma omp parallel for shared(pb,pd) 13 for (int i = n0; i < n-1; ++i) { 14 // ODE(1): Constitutive equation 15 pd[i].s[knew] = [...]; 16 // ODE(2): Motion equation 17 pb[i].vv[x][knew] = [...]; 18 pb[i].vv[y][knew] = [...]; 19 pb[i].vv[z][knew] = [...]; 20 // ODE(3): Kinematics equation 21 pb[i].rr[x][knew] = [...]; 22 pb[i].rr[y][knew] = [...]; 23 pb[i].rr[z][knew] = [...]; 24 } // end of parallel loop 25} Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 14/ 20
IMPLEMENTACE 1 void Kernel::computeErr(const double &rb, 2 const double &_rb, 3 double &err_max) 4{ 5 double err = 2.0*fabs(_rB-rB); 6#pragma omp critical 7 if (err > err_max) 8 err_max = err; 9#ifdef DEBUG 10 qdebug("error %12.7f Error max: %12.7f", 11 err, err_max); 12#endif 13} Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 15/ 20
Obsah prezentace ZÁVĚR 1 MOTIVACE 2 VLÁKNOVÝ PARALELISMUS 3 IMPLEMENTACE 4 ZÁVĚR Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 16/ 20
ZÁVĚR Tab. 1: Porovnání výpočetních časů sériového a paralelního zdrojového kódu v závislosti na velikosti řešené úlohy. N 100 200 400 800 1 600 Čas a (s) 46.206 93.196 181.996 360.311 699.387 Čas b (s) 43.498 76.774 138.300 273.608 546.302 a Sekvenčníaplikace. b Paralelníaplikace. Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 17/ 20
ZÁVĚR 700 600 N= 100 N= 200 N= 400 N= 800 N=1600 výpočetní čas(s) 500 400 300 200 100 0 1 2 počet vláken v paralelním týmu Obr. 4: Grafické znázornění výsledků porovnání výpočetních časů sériového a paralelního zdrojového kódu v závislosti na velikosti řešené úlohy. Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 18/ 20
ZÁVĚR Použité zdroje [1] OpenMP Application Program Interface v3.0, May 2008. Dostupné z: http://www.openmp.org/mp-documents/spec30.pdf. [2] OpenMP Application Program Interface v3.1, July 2011. Dostupné z: http://www.openmp.org/mp-documents/openmp3.1.pdf. [3]QUINN,M.J. ParallelProgramminginCwithMPIandOpenMP. 1stedition.NewYork:McGraw Hill,2003. 529s. ISBN 007 282256 2. [4] STALLMAN, R. M. the gcc Developer Community. Using the GNU Compiler Collection v4.6.2, October 2011. Dostupné z: http://gcc.gnu.org/onlinedocs/gcc-4.6.2/gcc.pdf. Milan Šimko (TUL) Modelování bičující nestability Odborný seminář KO MIX 19/ 20
Děkuji za pozornost. PODĚKOVÁNÍ: Vytvořeno za podpory projektu ESF č. CZ.1.07/2.3.00/09.0155 Vytvoření a rozvoj týmu pro náročné technické výpočty na paralelních počítačíchnatuvliberci. Milan Šimko Technická univerzita v Liberci Studentská 2, 461 17 Liberec Česká republika Sazba systémem LATEX