OpenMP: Porovnání verzí

Smazaný obsah Přidaný obsah
JAnDbot (diskuse | příspěvky)
m robot přidal: de, en, es, fr, ja, nl, pl
Bez shrnutí editace
Řádek 7:
 
== OpenMP schéma řešení ==
[[Image:OMPSchemaOMPSchema1.JPG|center]]<br />
 
== Programování v OpenMP ==
Řádek 23:
*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
 
[[Image:OMPHW.JPG|center]]<br />
===OpenMP ''Hello world'': ===
[[Image:OMPHW1.JPG|center]]<br />
program hello
use omp_lib
implicit none
integer: nthr, myth
!$omp parallel private(myth)
'''!$omp single'''
'''nthr=omp_get_num_threads()''' //Volání OpenMP funkcí (interface omp_lib, určí počet vláken a jeho index)
'''!$omp end single'''
'''myth=omp_get_thread_num()'''
'''write(6,*) 'Hello from',myth, &''' //Rozsah dat, 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
 
Compile:
ifort -openmp -o hello.exe hello f.90 //Přepínač -openmp aktivuje OpenMP direktivy, generuje kód vláken
Run:
export OMP_NUM_THREADS=4 //Prostředí OpenMP definuje chování při běhu, např. počet použitých vláken
./hello.exe
Hello from 0 of 4 //Pořadí není definováno
Hello from 2 of 4
Hello from 3 of 4
Hello from 1 of 4
Compile for serial run:
ifort -openmp_stubs -o hello.exe \ hello.f90 -lpthread //Kompilace pro sériový běh vyžaduje tzv. knihovnu stub
 
 
== Odkazy ==