Multimediaexpo.cz je již 18 let na českém internetu !!
V tiskové zprávě k 18. narozeninám brzy najdete nové a zásadní informace.
OpenMP
Z Multimediaexpo.cz
m (1 revizi) |
(+ Vylepšení) |
||
Řádka 1: | Řádka 1: | ||
+ | [[Soubor:OpenMP logo.png|thumb|200px|Logo architektury OpenMP]] | ||
'''OpenMP''' je soustava direktiv pro [[překladač]] a knihovních procedur pro [[paralelní programování]]. Jedná se o standard pro programování počítačů se [[sdílená paměť|sdílenou pamětí]]. OpenMP usnadňuje vytváření vícevláknových [[počítačový program|programů]] v programovacích jazycích [[Fortran]], [[C (programovací jazyk)|C]] a [[C++]]. | '''OpenMP''' je soustava direktiv pro [[překladač]] a knihovních procedur pro [[paralelní programování]]. Jedná se o standard pro programování počítačů se [[sdílená paměť|sdílenou pamětí]]. OpenMP usnadňuje vytváření vícevláknových [[počítačový program|programů]] v programovacích jazycích [[Fortran]], [[C (programovací jazyk)|C]] a [[C++]]. | ||
Řádka 4: | Řádka 5: | ||
== Programovací model OpenMP == | == Programovací model OpenMP == | ||
- | |||
Hlavní vlákno (master thread) vytváří podle potřeby skupinu podvláken. Paralelizace programu se pak provádí postupně s ohledem na výkon aplikace, tj. sekvenční program je postupně (podle možností) pararelizován. | Hlavní vlákno (master thread) vytváří podle potřeby skupinu podvláken. Paralelizace programu se pak provádí postupně s ohledem na výkon aplikace, tj. sekvenční program je postupně (podle možností) pararelizován. | ||
- | |||
- | |||
- | |||
- | |||
- | |||
== Programování v OpenMP == | == Programování v OpenMP == | ||
Řádka 65: | Řádka 60: | ||
== Externí odkazy == | == Externí odkazy == | ||
- | *[http://en.wikipedia.org/wiki/OpenMP] | + | *[http://en.wikipedia.org/wiki/OpenMP Wikipedia.org – OpenMP (anglicky)] |
- | *[http://www.openmp.org/ The official site for OpenMP] | + | *[http://www.openmp.org/ The official site for OpenMP (anglicky)] |
*[http://www.cOMPunity.org/ cOMPunity] Community of OpenMP Users, Researchers, Tool Developers and Providers | *[http://www.cOMPunity.org/ cOMPunity] Community of OpenMP Users, Researchers, Tool Developers and Providers | ||
*[http://www.etnus.com/TotalView/Threads.html TotalView] A debugger for OpenMP programs | *[http://www.etnus.com/TotalView/Threads.html TotalView] A debugger for OpenMP programs |
Aktuální verze z 3. 10. 2015, 22:13
OpenMP je soustava direktiv pro překladač a knihovních procedur pro paralelní programování. Jedná se o standard pro programování počítačů se sdílenou pamětí. OpenMP usnadňuje vytváření vícevláknových programů v programovacích jazycích Fortran, C a C++.
První OpenMP standard pro FORTRAN 1.0 byl publikován v roce 1997. Rok poté byl uvolněn standard pro C/C++. Standard verze 2.0 byl uvolněn pro FORTRAN v roce 2000 a pro C/C++ v roce 2002. Aktuální je verze 2.5, která byla jako kombinovaná pro jazyky C/C++/FORTRAN uvolněna v roce 2005.
Obsah |
Programovací model OpenMP
Hlavní vlákno (master thread) vytváří podle potřeby skupinu podvláken. Paralelizace programu se pak provádí postupně s ohledem na výkon aplikace, tj. sekvenční program je postupně (podle možností) pararelizován.
Programování v OpenMP
OpenMP se spouští pomocí tzv. direktiv. K vytvoření skupiny vláken použijeme direktivu pragma:
#pragma omp parallel { ... // každé vlákno vykonává příkazy tohoto bloku }
K rozdělení práce cyklu mezi vlákna použijeme:
#pragma omp parallel for for (i=0; i<N; i++) { ... // každé vlákno vykoná část iterací }
Klauzule modifikují direktivy:
- Private(list) – pro určené proměnné se vytváří jejich kopie v každém vláknu
- Reduction(op:list) – kombinuje (podle určené operace) lokálně spočítané hodnoty do privátní hodnoty uvedené v seznamu
Program hello.f90 v jazyce Fortran 90
program hello use omp_lib implicit none integer: nthr, myth !$omp parallel private(myth) !$omp single nthr=omp_get_num_threads() // OpenMP funkce (interface omp_lib, určí počet vláken a jeho index) !$omp end single myth=omp_get_thread_num() write(6,*) 'Hello from',myth, & // myth je lokální ve vlákně private, nthr je globální v procesu share & 'of',nthr !$omp end parallel end program hello
Tučně vyznačený kód provádějí všechna vlákna. Program zkompilujeme a použijeme přitom přepínač -openmp, který aktivuje OpenMP direktivy generující kód vláken:
ifort -openmp -o hello hello.f90
Zkompilovaný program spustíme. Všimněte si, že jednotlivé výstupy jsou v náhodném pořadí, protože pořadí není pro vlákna definováno:
export OMP_NUM_THREADS=4 // Definujeme počet použitých vláken v prostředí OpenMP ./hello Hello from 0 of 4 Hello from 2 of 4 Hello from 3 of 4 Hello from 1 of 4
Kompilace pro sériový běh vyžaduje knihovnu openmp_stubs:
ifort -openmp_stubs -o hello hello.f90 -lpthread
Externí odkazy
- Wikipedia.org – OpenMP (anglicky)
- The official site for OpenMP (anglicky)
- cOMPunity Community of OpenMP Users, Researchers, Tool Developers and Providers
- TotalView A debugger for OpenMP programs
- Intel® Threading Tools - Intel®Thread Checker, Intel® Thread Profiler
- Dynamic Performance Monitor for OpenMP
- Parawiki page for OpenMP
- PC Cluster Consortium
Náklady na energie a provoz naší encyklopedie prudce vzrostly. Potřebujeme vaši podporu... Kolik ?? To je na Vás. Náš FIO účet — 2500575897 / 2010 |
---|
Informace o článku.
Článek je převzat z Wikipedie, otevřené encyklopedie, do které přispívají dobrovolníci z celého světa. |