Top Banner
?ɳʃɕɿɷʅɕ 7ƑʉOpenMPľʊ Ƨ±vĠºőĜĦçåʉʡʠʢʣʊȉȉÜ}Ź 1 ē ēƏЊBĎ+ƅçƔȉ/ HPCIƆĎM ŊŰnðȉƧ±vĠºőĜĦçåʉʡʠʢʣʊ ʒʐʑʔȉʑØȉʗÑĂ ȉȉȉʉƌĎʊ
100

? 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 k g 1 ?O ª U TÊ k gB 1wa X E 2 28 k g v a W K CPU: . TÊ 1 s ] b X W K n ^ W *

Jan 27, 2021

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • 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