View
0
Download
0
Category
Preview:
Citation preview
OpenMP
1 / HPCI
HPC https://www.hpci-office.jp/pages/seminar_text
HPC
8
CPU
CPU
OpenMP
MPI
CPUCPU
CPUCPU
Core
Core
Core
Core
Core
Core
Core
Core
Core
Core
Core
Core
Core
Core
Core
Core
4
処理
処理
処理
処理
処理 処理 処理 処理
CPU
CPU
CPU CPU
8
MPI(Message Passing Interface)OpenMP
(cont.)9
OpenMP MPI
OpenMP10
OpenMP
OpenMP
OpenMP Fortran
OpenMP / ++
parallel
(parallel region)
Hello OpenMP world
( )
(*) intel fortran: ifort –openmp hello.f GNU: gfortran –fopenmp hello.f login-node: frtpx –Kopenmp hello.f (**) csh : setenv OMP_NUM_THREADS 4
OpenMP
OpenMP
=
join
fork
!$omp parallel
!$omp end parallel
Hello OpenMP world
Write
Write
Write
Write
Write
Hello OpenMP
world
Hello OpenMP
world
Hello OpenMP
world
Hello OpenMP
world
Hello world
write
Parallel
Parallel OpenMP
do
single
sections
workshare (Fortran ) fortran90
DO
n=4000
n=40001 2 3
1000 2000 3000 4000
DO Fortran
DO
DO Fortran
DO
For C
for
shared private
23
Shared Private
OpenMP
private private shared
V(:), X(:), Y(:)i i
Shared Private
OpenMP
shared
V(:), X(:), Y(:)
private
iprivate
i
parallel do
shared parallel do do
private
private(i) shared(V, X, Y)
Shared
Shared
shared shared
Private
Private
Private
i0 i
Fortran
Private ( i )
Parallel DO
DO private
Shared ( X(:) ) default
default(shared), default(private), default(none)
none
call y call X(i)
Shared COMMON/SAVE (n, ymax, a) module save shared
Private
SHARED
common shared
PRIVATE/SHARED
OpenMP
OpenMP
37
exit goto continue
“ ”
V(4)
V(4)
V(4)
V(4)
reduction
Reduction
(cont.)
Reduction
Reduction r = r op expr r: reduction , expr: r
Reduction reduction private
!$omp parallel do reduction(op : r1 [ , r2] )
op : reduction (+ , * , - , .and. , .or. , .eqv. , .neqv. , max, min, iand, ior, ieor)
r1 [ , r2] : reduction
reduction
Reduction (cont.)
Reducion
Reduction private
0 .neqv. .false.
1 max
0 min
.and. .true. iand 1
.or. .false. Ior 0
.eqv. .true. ieor 0
OpenMP
DO
• •
(cont.)
!$omp parallel do
(load balancing)
idle idleidleiiiiddddddll iiiiiiiiidddddddddlleeeeeeeee
static
(cont.)
i
(cont.)
56
nowait
10/08 j
10/08 j
single
master
barrier
V
critical
critical
shared private/reduction
atomic critical
flush
ordered
65
OpenMP API
include ‘omp_lib.h’ Fortran use omp_lib Fortran90
omp_get_thread_num integer
0 [ -1]
omp_get_max_threads integer
omp_get_num_threads integer
omp_in_parallel logical.true. .false.
omp_get_wtime real*8 wall clock
!$ OpenMP OpenMP
”#ifdef _OPENMP”
omp_get_max_threads OpenMP OpenMP
”!$” OpenMP
OpenMP
OpenMP
OpenMP
OpenMP
i f(i)
( – )
OpenMP
1
2
3
5
6
f21= -f12
4
f21 fff12 f16
f13f15
-f15
-f16
-f13f14
-f14
1
OpenMP
n = 6
i=1 f
OpenMP OpenMP
OpenMP
i
OpenMP
i f
OpenMP
f(4) f(6) f f
f reduction
f
OpenMP cont.
OpenMP
24: 6 18:12
=30/24 = 1.25 =30/18= 1.67
OpenMP
PRIVATE REDUCTION
OpenMP OpenMP
80
(1-p)
∞
1-p
p
1/(1-p)
80% ( p = 0.8 ) 1/0.2 =
1 2 4 81
2
4
8
(cont.)
(N)
1-p = 1/2
1-p = 1/4
1-p = 0 (1-p)
1-p = 1/8
s = 11− p( ) + p / N
p: N:
100%
(88%)
(75%)
(50%)
2.3 2.9
4.3
1 10 100 1000 104 1051
10
100
1000
104
105
(cont.)
(N)
1-p = 1/10
1-p = 1/100
1-p = 1/1000
1-p = 1/10000
1-p = 0
(1-p)
s = 11− p( ) + p / N
p: N:
100%
99.99%
99.9%
99%
90%
1-p = 1/10000099.999%
OpenMP http://openmp.org/wp/openmp-specifications/
version 3.0 OpenMP v3.0 gcc 4.4 v3.0 gcc 4.7 v3.1 intel 11.0 : v3.0 12.1 : v3.1
https://computing.llnl.gov/tutorials/openMP/
Fortran/C
Using OpenMP B. Chapman The MIT Press Fortran
OpenMP C/C++
C/C++ OpenMP OpenMP CPU
https://www.hpci-office.jp/pages/seminar_text
1 OpenMP並列化の例 2 アクセス競合の例
デモ85
RIST FX10
OpenMP
x(80000)
(A) (B) (C)
OpenMP
OpenMP
(A) vi
(B) OpenMP vi (A)
OpenMP
OpenMP
(C) vi (B)
OpenMP SCHEDULE
OpenMP
(A) (B) (C)
(a)OpenMP (b) b0, b1
temp private
temp
do private
vi
OpenMP
100
Sections
90
Sections
Sections
Single Program, Multiple Data streams (SPMD)
FirstPrivate/LastPrivate Threadprivate
92
Firstprivate
Lastprivate
95
COMMON SAVE Threadprivate
Threadprivate
common SAVE module
(=shared ×)
Threadprivate (cont.)
Threadprivate common common subroutine
private
common subroutine
common equivalence threadprivate
common
Copyin copyprivate
Copyin threadprivate
threadprivateCopyin
CopyprivateSingle
Single Single( )
ThreadPrivate
Threadprivate id routine_A, routine_B
id
common threadprivate
routine_A routine_B
COMMON SAVE
-save READ WRITE I/O Fortran
write
critical
openmp_2014-01-15_ 1openmp_2014-01-15_ 2openmp_2014-01-15_ 3openmp_2014-01-15_ 4openmp_2014-01-15_ 5openmp_2014-01-15_ 6openmp_2014-01-15_ 7openmp_2014-01-15_ 8openmp_2014-01-15_ 9openmp_2014-01-15_10openmp_2014-01-15_11openmp_2014-01-15_12openmp_2014-01-15_13openmp_2014-01-15_14openmp_2014-01-15_15openmp_2014-01-15_16openmp_2014-01-15_17openmp_2014-01-15_18openmp_2014-01-15_19openmp_2014-01-15_20openmp_2014-01-15_21openmp_2014-01-15_22openmp_2014-01-15_23openmp_2014-01-15_24openmp_2014-01-15_25openmp_2014-01-15_26openmp_2014-01-15_27openmp_2014-01-15_28openmp_2014-01-15_29openmp_2014-01-15_30openmp_2014-01-15_31openmp_2014-01-15_32openmp_2014-01-15_33openmp_2014-01-15_34openmp_2014-01-15_35openmp_2014-01-15_36openmp_2014-01-15_37openmp_2014-01-15_38openmp_2014-01-15_39openmp_2014-01-15_40openmp_2014-01-15_41openmp_2014-01-15_42openmp_2014-01-15_43openmp_2014-01-15_44openmp_2014-01-15_45openmp_2014-01-15_46openmp_2014-01-15_47openmp_2014-01-15_48openmp_2014-01-15_49openmp_2014-01-15_50openmp_2014-01-15_51openmp_2014-01-15_52openmp_2014-01-15_53openmp_2014-01-15_54openmp_2014-01-15_55openmp_2014-01-15_56openmp_2014-01-15_57openmp_2014-01-15_58openmp_2014-01-15_59openmp_2014-01-15_60openmp_2014-01-15_61openmp_2014-01-15_62openmp_2014-01-15_63openmp_2014-01-15_64openmp_2014-01-15_65openmp_2014-01-15_66openmp_2014-01-15_67openmp_2014-01-15_68openmp_2014-01-15_69openmp_2014-01-15_70openmp_2014-01-15_71openmp_2014-01-15_72openmp_2014-01-15_73openmp_2014-01-15_74openmp_2014-01-15_75openmp_2014-01-15_76openmp_2014-01-15_77openmp_2014-01-15_78openmp_2014-01-15_79openmp_2014-01-15_80openmp_2014-01-15_81openmp_2014-01-15_82openmp_2014-01-15_83openmp_2014-01-15_84openmp_2014-01-15_85openmp_2014-01-15_86openmp_2014-01-15_87openmp_2014-01-15_88openmp_2014-01-15_89openmp_2014-01-15_90openmp_2014-01-15_91openmp_2014-01-15_92openmp_2014-01-15_93openmp_2014-01-15_94openmp_2014-01-15_95openmp_2014-01-15_96openmp_2014-01-15_97openmp_2014-01-15_98openmp_2014-01-15_99openmp_2014-01-15_100
Recommended