? s U w U 7 OpenMP >2014/01/15 · 2 = . r 1 HPC W p | _ 1 ´ TÊ 1 W p | _ B B - D ] ] H k g +g 6...
Transcript of ? s U w U 7 OpenMP >2014/01/15 · 2 = . r 1 HPC W p | _ 1 ´ TÊ 1 W p | _ B B - D ] ] H k g +g 6...
-
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