OpenMP

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

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. +more 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, verze 3. 0 v roce 2008, verze 4. 0 v roce 2013, verze 4. 5 v roce 2015, verze 5. 0 pro C/C++ a FORTRAN potom v roce 2018. Aktuální je verze 5. 1 pro C/C++ a FORTRAN, která byla uvolněna 13. listopadu 2020.

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. +more sekvenční program je postupně (podle možností) paralelizován.

střed

OpenMP schéma řešení

střed

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

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) . +more$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

Odkazy

Reference

Externí odkazy

OpenMP OpenMP na anglické Wikipedii * [url=http://www. openmp. +moreorg/]The official site for OpenMP[/url] * [url=http://www. cOMPunity. org/]cOMPunity[/url] Community of OpenMP Users, Researchers, Tool Developers and Providers * [url=https://web. archive. org/web/20070402183104/http://www. etnus. com/TotalView/Threads. html]TotalView[/url] A debugger for OpenMP programs * [url=https://web. archive. org/web/20050704081146/http://www. intel. com/software/products/threading/]Intel® Threading Tools[/url] - Intel®Thread Checker, Intel® Thread Profiler * [url=http://alphaworks. ibm. com/tech/dpomp]Dynamic Performance Monitor for OpenMP[/url] * [url=https://web. archive. org/web/20080220040800/http://www. parawiki. org/index. php/OpenMP]Parawiki page for OpenMP[/url] * [url=http://www. pccluster. org/]PC Cluster Consortium[/url].

Kategorie:Programové knihovny Kategorie:Rozhraní pro programování aplikací

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top