ΔΙΑΦΑΝΕΙΕΣ ΦΡΟΝΤΙΣΤΗΡΙΟΥ 2004

88
Παράλληλη Επεξεργασία Φροντιστήριο: Εισαγωγή στα Πολυεπεξεργαστικά Συστήματα ∆ιεργασίες και Νήματα σε Πολυεπεξεργαστικά Συστήματα Εργαστήριο Πληροφοριακών Συστημάτων Υψηλής Επίδοσης 23/03/2004

Upload: scribdlover8919

Post on 24-Nov-2015

11 views

Category:

Documents


4 download

TRANSCRIPT

  • :

    23/03/2004

  • / - :

    :

  • 1 , (multiprocessors)

    - (uniprocessor)

  • multiprocessors. :

    : read/write

    .

    : /

  • -

  • = + ( )

    = . ( )

  • :

    (address space), :

    (code segment) To (data segment) To (stack segment) (Heap)

    ( , , , ).

    . :

    ,

    CPU, Program Counter (PC), Stack Pointer (SP) .

    HEAP( )

    CODE SEGMENT

    DATA SEGMENT( )

    STACK( ..)

    0x00000000

    0xFFFFFFFF

    PC

    HP

    SP

  • CPU

    CPU

    (context switching):

    CPU

    CPU

  • CPU A (T0)

    CPU A (T1)

    CPU (T0)

    CPU (T0)

    CPU (T2)

    CPU A (T1)

    CPU (T2)

    CPU A (T3)

    0 2 1 3

  • :

    .

    : uniprocessor

    multiprocessor = #

    ;

  • 1 :

    (parent process) - (child processes).

    - .

    - , .

    fork()

  • 2 : (Threads) :

    .

    .

    :

    , .

    CPU .

    , .

    pthread_create()

    HEAP( )

    CODE SEGMENT

    DATA SEGMENT( )

    THREAD STACK 2

    0x00000000

    0xFFFFFFFF

    PC

    HP

    SP1THREAD STACK 1

    THREAD STACK 0SP0

    SP2

  • -

    -

    9 load-store

    8 ( , )

    , ,

    9

    9 POSIX

  • - pid (process id )

    pid_t pid;

    pid .

    pid

    pid_t getpid(void);

    POSIX

    pthread_t:

    pthread_t thread;

    pthread_t

    pthread_t pthread_self(void);

  • -

    pid_t fork (void );

    fork( )

    - -

    , fork( )

    int pthread_create (pthread_t * thread,pthread_attr_t *attr,void * (*start_routine) (void *),void * arg);

    start_routine, arg.

    thread.

    .

  • - - :

    pid_t waitpid(

    pid_t pid, int *status, int options);

    waitpid( ) pid

    K void exit(int);

    exit( )

    :

    int pthread_join( pthread_t thread,void ** ret);

    pthread_join( ) thread ,

    ret

    void pthread_exit(void *);

  • void * work_function(void *);

    int main(int argc, char **argv)

    {

    int i=1;

    int pid, status;

    pid = fork();

    if(pid == 0){

    printf(Child\n);

    work_function((void *) i);

    exit(0);

    }

    printf(Father of %d\n, pid);

    waitpid(pid, &status, 0);

    return 0;

    }

  • void * work_function(void *);

    int main(int argc, char **argv)

    {

    int i = 1;

    pthread_t thread;

    pthread_create(&thread, NULL, workfunction,

    (void *) i);

    pthread_join(thread, NULL);

    printf(Child ended, exiting\n);

    return 0;

    }

  • forum My.CEID

    e-mail [email protected]

    http://www.hpclab.ceid.upatras.gr/

  • :

    &

    30/03/2004

  • ,

    pipeline producer consumer

    (.. )

  • 1

    =10

    =100

    =+

    0

    1

    2

    3

    4

    5

    2

    =10

    =100

    =+

    =100

    =100

    =100

    =100

    =110

    =110

    =10

    =10

    =10

    =10

    =10

    =10

    =110

    : !

  • ,

  • 1

    =10

    =100

    =+

    2

    =10

    =100

    =+

    =100

    =100

    =100

    =100

    =110

    =110

    =110

    =120

    =120

    =10

    =10

    =10

    =10

    =10

    =10

    =10

    =10

    =10

    012345678

    =120

  • -

    POSIX pthread_mutex_t,

    :

    :pthread_mutex_t Mutex = PTHREAD_MUTEX_INITIALIZER;

    :int pthread_mutex_init(mutex);

    .

  • -

    :

    pthread pthread_mutex_lock (mutex);

    ,

  • -

    :

    pthread_mutex_unlock (mutex);

    ( )

  • -

    :

    pthread_mutex_trylock (mutex);

  • -

    pthread_mutex_lock , pthread_mutex_unlock

    , :

    pthread_mutex_destroy(mutex);

  • ...pthread_mutex_t mutex =

    PTHREAD_MUTEX_INITIALIZER;int Global;...

    void * work_function(void * Arg);{

    ...

    pthread_mutex_lock(&mutex);...// Access Global variable // (Critical Section)...pthread_mutex_lock(&mutex);

    ...}

  • ...

    ... (poll) , .

    polling , ...

  • -

    POSIX pthread_cond_t,

    :

    :

    pthread_cond_t condition = PTHREAD_COND_INITIALIZER;

    :

    int pthread_cond_init(condition);

  • -

    ... :

    pthread_cond_wait (condition, mutex);

    ...

  • -

    ... :

    pthread_cond_signal (condition);

    ... :

    pthread_cond_broadcast (condition);

    . , pthread_cond_wait

  • -

    ,

    pthread_cond_wait ,

    pthread_cond_signal, pthread_cond_wait

  • for(...){...pthread_mutex_lock(&mutex);

    count++;if(count == N){

    // Wake-up thread 2

    pthread_cond_signal(&condition);}pthread_mutex_unlock(&mutex);...//Do work

    }

    ...pthread_mutex_lock(&mutex);

    while(count

  • forum My.CEID

    e-mail [email protected]

    http://www.hpclab.ceid.upatras.gr/

  • :

    2004

    (Parallel Mergesort)

    04/05/2004

  • MergeSort

    :

    &:

    (merging):

  • 000001

    010011

    100

    110

    101

    111

    0

    0

    0 0

    0

    0

    0

    0

    1

    1

    1 1

    1

    1

    1

    1

    : 1 bit ( logn)

    nid = id XOR 2i i = 0,1,2... ( i n- ).

  • MergeSort (1/3)parallel_mergesort(myid, space, data, newdata){

    data := sequential_sort(data);

    for i := 0 to space - 1 do

    for j := i downto 0 do

    neig := neighbor at jth dimension;

    if (i + 1)st bit of myid jth bit of myidthen

    data := comp_exchange max(neig, data); else

    data := comp_exchange min(neig, data);

    barrier_wait(barrier);

    newdata := data;}

  • MergeSort (2/3)

    000010

    001011

    100

    101

    110

    111

    000010

    001011

    100

    101

    110

    111

    000010

    001011

    100

    101

    110

    111

    2 413 14

    6 810 11

    7 9

    3 5

    12 150 1

    2 410 11

    6 813 14

    12 15

    3 5

    7 90 1

    2 413 14

    6 810 11

    7 93 5

    12 150 1

  • MergeSort (3/3)

    000010

    001011

    100

    101

    110

    111

    000010

    001011

    100

    101

    110

    111

    000010

    001011

    100

    101

    110

    111

    2 410 11

    6 813 14

    12 15

    3 5

    7 90 1

    3 5 2 4

    6 70 1

    12 15

    10 11

    8 913 14

    2 34 5

    0 16 7

    10 1112 15

    8 913 14

  • MergeSort (3/3)

    000010

    001011

    100

    101

    110

    111

    0 14 5

    2 36 7

    8 912 13

    10 1114 15

  • 1

    . .

    ( ).

  • B

    NetworkInterface

    NetworkInterface

    buffer

    buffer

    (send) (receive)

  • (send)

    =

    buffer

    B

    (receive)

    =

    buffer

    buffer

    buffer buffer

  • Barriers (1/3)

    barrier barrier

    barrier

    Posix Barriers

  • Barriers (2/3)

    :

    barrier_t barrier

    int barrier_init(barrier_t *barrier, int count);

    count barrier. ( race condition)

  • Barriers (3/3)

    barrier

    int barrier_wait(barrier_t *barrier);

    barrier

    int barrier_destroy (barrier_t *barrier);

  • -

    4 aigaio.ceid.upatras.gr

    ssh sftp

    Workload: w.

    : ...

  • -

    parallel mergesort

    4 8

  • On-line :1. Designing & Building Parallel Programs, Ian Foster

    http://www-unix.mcs.anl.gov/dbpp/

    2. Parallel Computing Works, G. Fox, R. Williams, P. Messinahttp://www.netlib.org/utk/lsi/pcwLSI/text/BOOK.html

    forum My.CEID

    e-mail [email protected]

    http://www.hpclab.ceid.upatras.gr/

  • 33

  • 1 1 38 38 Wallace Wallace ( (CSA) CSA) ( (CPA);CPA); CSA CSA ;;

  • CSACSA

    xxNN--44 xxNN--33 xxNN--22

    CSACSA

    xx11 xx22 xx33

    CSACSA

    xx44 xx55 xx66 xxNN--11 xxNN

    kk 3 3 CSACSA 22 CSACSA

    kk+1+1 ( ) ( ) 2

    3kN1kN

    =+ ( )[ ]3 mod kN+

  • 11221+0=21+0=2008811221+1=31+1=3117722222+0=42+0=4006622222+2=62+2=6225544224+0=84+0=8004466226+0=126+0=12003388228+2=188+2=182222

    12122212+2=2612+2=262211

    CSAsCSAs

    88 CSA + 1 CSA + 1 CPACPA 36 36 CSACSA

  • 2 2 WallaceWallace : 111, 110, : 111, 110, 101, 100, 011, 010.101, 100, 011, 010.

    3 3 bitbit 5 5 bit bit (27 = 11011)(27 = 11011)

    3 5 3 5 bitbit;;

  • FA

    xn-1 yn-1 zn-1

    FA

    x0 y0 z0

    FA

    x1 y1 z1

    sn-1cn-1 s1c1 s0c0

    xxkk = 1= 1yykk = 0= 0 zzkk == 1

    sskk = 1= 1cckk = 0= 01

  • FAFA

    0121-nn

    012n1n

    0121n

    AAAAAcccc

    ssss

    LLL

    3 3 nn bit bit nn+1+1 bitbit

  • CSA CSA

    101011111

    010110001

    0010 0111 1010 0010

    CSA

    1 1110 0 0010 0 0100

    CSA

  • 10 1000 00 0110

    CPA

    101 1100

  • 3 3 4 : 4 :

    8

    9

    10

    43

    21

    76543210

    ii))

  • 1: 6 1 = 5 2: 9 3 = 6 3: 10 2 = 8 3: 7 0 = 7

    8 bits

    { }56,7,8,F ={ } 8FMax =111100000 =

  • 00 0011 = [= [00]]11 OR OR 00 = = 01111000 01111000 OR OR 11110000 = 11110000 =

    1111100011111000

    22 = [= [00]]22 OR OR 00 = = 00111100 00111100 OROR 11110000 = 11110000 = 1111110011111100

    33 = [= [00]]33 OR OR 00 = = 00011110 00011110 OROR 11110000 = 11110000 = 1111111011111110

    44 = [= [00]]44 OR OR 00 = = 00001111 00001111 OROR 11110000 = 11110000 = 1111111111111111

  • 4 4 = 11111111 = 11111111

    33 = 11111110= 11111110[[33]]11 OR OR 00 = = 01111111 01111111 OROR 11110000 = 11110000 =

    11111111 (= 11111111 (= 44) )

    22 = 11111100= 11111100[[22]]11 OR OR 00 = = 01111110 01111110 OROR 11110000 = 11110000 =

    11111110 (= 11111110 (= 33))[[22]]22 OR OR 00 = = 00111111 00111111 OROR 11110000 = 11110000 =

    11111111 (= 11111111 (= 44))

  • 1 1 = 11111000= 11111000[[11]]11 OR OR 00 = = 01111100 01111100 OROR 11110000 = 11110000 =

    11111100 (= 11111100 (= 22))[[11]]22 OR OR 00 = = 00111110 00111110 OROR 11110000 = 11110000 =

    11111110 (= 11111110 (= 33))[[11]]33 OR OR 00 = = 00011111 00011111 OROR 11110000 = 11110000 =

    11111111 (= 11111111 (= 44))

  • 90

    1 2 3 4

    4321

    1 1 1

    2

    2

    3

  • ii)ii)

    09

    4321

    1 2 3 41 1 1

    2

    32

    rrmaxmax = 5 / (1 + 1 + 1 + 1 + 9) = 5 / 13= 5 / (1 + 1 + 1 + 1 + 9) = 5 / 13

  • iii)iii) 3 3 ;;

    11 11

    +1 +1

    +1 +1

  • iv)iv) 77;;

    1133 3 3

    +1 +1

    +1 +1

    +9 +9

    +1 +1

  • 4 4

  • 1 1 ))TT 7x7 7x7 m m

    , , , , , , m m..

    7x7 7 banks.

    aa 1111 aa 1122 aa 1133 aa 1144 aa 1155 aa 1166 aa 1177aa 2211 aa 2222 aa 2233 aa 2244 aa 2255 aa 2266 aa 2277aa 3311 aa 3322 aa 3333 aa 3344 aa 3355 aa 3366 aa 3377aa 4411 aa 4422 aa 4433 aa 4444 aa 4455 aa 4466 aa 4477aa 5511 aa 5522 aa 5533 aa 5544 aa 5555 aa 5566 aa 5577aa 6611 aa 6622 aa 6633 aa 6644 aa 6655 aa 6666 aa 6677aa 7711 aa 7722 aa 7733 aa 7744 aa 7755 aa 7766 aa 7777BBaannkk11 BBaannkk22 BBaannkk33 BBaannkk44 BBaannkk55 BBaannkk66 BBaannkk77

    , bank.

    ,

    :

  • 4.11, (1,1) d.= 1 , d.= 1 d.= d.+d.= 2 , :

    n*n*..(..(d,d,))

    : 7*..(1,) 7 ( )

    7*..(2,) 7,

    ( ) 7*..(2,) 14,

    7x7 banks banks 77, , banks banks 1414. .

    = 7 = 7.

  • 7 banks d.=1 d.=1 :

    d. :

    aa1111 : [1,1][1,1] aa1212 : [1,2][1,2] aa1313 : [1,3][1,3] aa1414 : [1,4][1,4] aa1515 : [1,5][1,5] aa1616 : [1,6][1,6] aa1717 : [1,7][1,7]

    BBaannkk11 BBaannkk22 BBaannkk33 BBaannkk44 BBaannkk55 BBaannkk66 BBaannkk77

    a11 a12 a13 a14 a15 a16 a17

  • BBaannkk11 BBaannkk22 BBaannkk33 BBaannkk44 BBaannkk55 BBaannkk66 BBaannkk77

    a11 a12 a13 a14 a15 a16 a17 aa2121 : [2,2][2,2] aa2222 : [2,3][2,3] aa2323 : [2,4][2,4] aa2424 : [2,5][2,5] aa2525 : [2,6][2,6] aa2626 : [2,7][2,7] aa2727 : [2,1][2,1]

    a21 a22 a23 a24 a25 a26a27a31 a32 a33 a34 a35a36 a37

    a45 a46 a47 a41 a42 a43 a44a54 a55 a56 a57 a51 a52 a53a63 a64 a65 a66 a67 a61 a62a72 a73 a74 a75 a76 a77 a71

    7 banks d.=1 d.=1 :

    d. d. :

    d. d. .

  • aa1111 aa 1122 aa 1133 aa 1144 aa 1155 aa 1166 aa 1177aa 2277 aa 2211 aa 2222 aa 2233 aa 2244 aa 2255 aa 2266aa 3366 aa 3377 aa 3311 aa 3322 aa 3333 aa 3344 aa 3355aa 4455 aa 4466 aa 4477 aa 4411 aa 4422 aa 4433 aa 4444aa 5544 aa 5555 aa 5566 aa 5577 aa 5511 aa 5522 aa 5533aa 6633 aa 6644 aa 6655 aa 6666 aa 6677 aa 6611 aa 6622aa 7722 aa 7733 aa 7744 aa 7755 aa 7766 aa 7777 aa 7711BBaannkk11 BBaannkk22 BBaannkk33 BBaannkk44 BBaannkk55 BBaannkk66 BBaannkk77

    :

    7 7 banks banks , 7x7.

  • ) 8) 8xx8, 8, m;m;

    (1,1) d.= 1 , d.= 1 d.= d.+ d.= 2 , :

    n*n*..(..(d,d,)) :

    8*..(1,) 8 ( )

    8*..(2,) 8, ( )

    8*..(2,) 16,

    8x8 banks banks 88, , banks banks 1616. .

    = 9 = 9.

  • 8x8 9 banks d.=1 d.=1. :

    aa1111 aa 1122 aa 1133 aa 1144 aa 1155 aa 1166 aa 1177 aa 1188 ++++ aa 2211 aa 2222 aa 2233 aa 2244 aa 2255 aa 2266 aa 2277 aa 2288aa 3388 ++ aa 3311 aa 3322 aa 3333 aa 3344 aa 3355 aa 3366 aa 3377aa 4477 aa 4488 ++ aa4411 aa 4422 aa 4433 aa 4444 aa 4455 aa 4466aa 5566 aa 5577 aa 5588 ++ aa 5511 aa 5522 aa 5533 aa 5544 aa 5555aa 6655 aa 6666 aa 6677 aa 6688 ++ aa 6611 aa 6622 aa 6633 aa 6644aa 7744 aa 7755 aa 7766 aa 7777 aa 7788 ++ aa7711 aa 7722 aa 7733aa 8833 aa 8844 aa 8855 aa 8866 aa 8877 aa 8888 ++ aa 8811 aa 8822BBaannkk11 BBaannkk22 BBaannkk33 BBaannkk44 BBaannkk55 BBaannkk66 BBaannkk77 BBaannkk88 BBaannkk99

    , bank.

    : :

  • 2 2 cache cache p p n n ::

    ::OC p),Overhead(np)Compute(n,p)T(n, +=

    qp3p),Overhead(n,p1n1p)Compute(n, +=+=

    ) ) cache.cache.

    :

    , , cache cache . .

  • O :(n, p) = Compute(n,p)*c + Overhead(n, p)*

    .

    O ., :

    c = .Compute(n,p) = .

    O cache misses. :

    = cache (miss penalty).Overhead(n, p) = cache.

    cachecache:

    %

    p1n1

    qp3p)Compute(n,,p)Overhead(n

    cachemissescache +

    +===

  • 128 . cache C bytes. O cache 1 .

    bytes. 100 .

    ci=ci+aijxj 1 .

    , C > 4n, M > 4n(n+2) n > p.

    3 3 ) )

    c = Axc = Ax, , n x nn x n c,x c,x n xn x 1. 1. UMA UMA ::

  • xc

    X=

    ; ; :

    XDO i = 1, n

    DO J = 1, nci = ci + Aijxj

    ENDEND

    i c: i-

    x

    ci.

  • c n/n/128128 c.

    , cc :

    22n + 1n + 1 c1, A1* x*. nn ci = ci + Aijxj

    cc : nn cache x*. n + 1n + 1 ci Ai*. nn ci = ci + Aijxj.

    c , x x cachecache o .

    :

    128101n12900nn)1)(100(n1128

    nn1)100(2np)(n,T2+=++

    +++=

    :

  • 1.pdf2.pdf - - - - - - - - -

    3.pdf MergeSort MergeSort (1/3) MergeSort (2/3) MergeSort (3/3) MergeSort (3/3) Barriers (1/3) Barriers (2/3) Barriers (3/3) - -

    1.pdf?a??????a S?st?ata?????? ?a? ??a??sat???? ?p?????st???a??????a S?st?ata?????? ?a? ??a??sat???? ?p?????st???a??????a S?st?ata?????? ?a? ??a??sat???? ?p?????st???a??????a S?st?ata?????? ?a? ??a??sat???? ?p?????st???a??????a S?st?ata?????? ?a? ??a??sat???? ?p?????st???a??????a S?st?ata?????? ?a? ??a??sat???? ?p?????st???a??????a S?st?ata?????? ?a? ??a??sat???? ?p?????st???a??????a S?st?ata?????? ?a? ??a??sat???? ?p?????st???a??????a S?st?ata?????? ?a? ??a??sat???? ?p?????st???a??????a S?st?ata?????? ?a? ??a??sat???? ?p?????st???a??????a S?st?ata?????? ?a? ??a??sat???? ?p?????st???a??????a S?st?ata?????? ?a? ??a??sat???? ?p?????st???a??????a S?st?ata?????? ?a? ??a??sat???? ?p?????st???a??????a S?st?ata?????? ?a? ??a??sat???? ?p?????st???a??????a S?st?ata?????? ?a? ??a??sat???? ?p?????st??

    2.pdf?S??S??S 4?? ??F?????? ????? ?S??S? 1?S??S? 2