ΔΙΑΦΑΝΕΙΕΣ ΦΡΟΝΤΙΣΤΗΡΙΟΥ 2004
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