SlideShare a Scribd company logo
1 of 20
Download to read offline
Tài liệu: Introduction to Parallel Computing
Blaise Barney, Lawrence Livermore National Laboratory
https://computing.llnl.gov/tutorials/parallel_comp/
Tính toán song song và phân tán
PGS.TS. Trần Văn Lăng
langtv@vast. vn
1
L
ậ
p tr
ì
nh song song v
ớ
i Python
2
1. T
ổ
ng quan
2. S
ự
kh
á
c bi
ệ
t gi
ữ
a Thread v
à
Process
3. Song song d
ữ
li
ệ
u
4. S
ử
dung Thread
5. S
ử
d
ụ
ng Process
6. Đa x
ử
l
ý
trong Khoa h
ọ
c d
ữ
li
ệ
u
T
ổ
ng quan
• L
ậ
p tr
ì
nh song song v
ớ
i Python c
ó
th
ể
ti
ế
p c
ậ
n theo
c
á
c c
á
ch như:
– D
ù
ng thư vi
ệ
n c
ủ
a c
ủ
a Python
• Threading, multiprocessing
– D
ù
ng ScientificPython
• Scientific.BSP
• Scientific.DistributiedComputing
– IPython
• Interactive shell for working with clusters
– Kh
á
c
• pyMPI, mpi4py, pypar
3
• Đ
ể
ki
ể
m tra c
ấ
u h
ì
nh c
ủ
a m
á
y, s
ử
d
ụ
ng g
ó
i platform
(sysinfor.py)
4
• Đ
ể
bi
ế
t s
ố
core c
ủ
a m
á
y, s
ử
dung g
ó
i
multiprocessing
5
• M
ộ
t s
ố
k
ế
t qu
ả
th
ử
nghi
ệ
m
6
• Đ
ể
bi
ế
t t
ê
n v
à
đ
ị
a ch
ỉ
IP c
ủ
a m á
y (hostname.py)
7
• Để đo thời gian thực thi, d
ù
ng h
à
m time() c
ó
trong
g
ó
i time (elapsetime.py)
8
C
ó
th
ể
coi th
ê
m t
ạ
i https://www.tutorialspoint.com/python/python_date_time.htm
Thread v
à
Process
• Process (ti
ế
n tr
ì
nh) l
à
m
ộ
t th
ự
c th
ể
(instance) c
ủ
a
chương tr
ì
nh m
á
y t
í
nh.
• Ti
ế
n tr
ì
nh sinh ra c
á
c Threads (lu
ồ
ng) hay c
ò
n g
ọ
i l
à
sub-processes (ti
ể
u ti
ế
n tr
ì
nh) đ
ể
x
ử
l
ý
c
á
c nhi
ệ
m v
ụ
ph
ụ
. Ch
ẳ
ng h
ạ
n, đ
ọ
c c
á
c ph
í
m đư
ợ
c nh
ấ
n
(keystrokes), hi
ể
n th
ị
k
ý
t
ự
v
ừ
a đ
ọ
c l
ê
n m
à
n h
ì
nh, n
ạ
p
m
ộ
t trang v
ă
n b ả
n t
ừ
đ
ĩ
a v
à
o b
ộ
nh
ớ
sau đ
ó
hi
ể
n th
ị
l
ê
n m
à
n h
ì
nh, ghi t
ậ
p tin v
à
o đ
ĩ
a, ...
• Threads t
ồ
n t
ạ
i (live) b
ê
n trong ti
ế
n tr
ì
nh v
à
chia s
ẻ
c
ù
ng kh
ô
ng gian b
ộ
nh
ớ
c
ủ
a Process.
9
• V
í
d
ụ
, khi m
ở
m
ộ
t
ứ
ng d
ụ
ng so
ạ
n th
ả
o v
ă
n b
ả
n; c
ó
ngh
ĩ
a l
à
ch
ú
ng ta t
ạ
o ra m
ộ
t Process.
• Khi b
ắ
t đ
ầ
u nh
ậ
p, Process sinh ra c
á
c Threads ch
ẳ
ng
h
ạ
n như:
– đ
ọ
c c
á
c ph
í
m b
ấ
m
– hi
ể
n th
ị
v
ă
n b
ả
n
– t
ự
đ
ộ
ng lưu t
ậ
p tin l
ạ
i
– l
à
m n
ổ
i b
ậ
t (highlight) c
á
c l
ỗ
i ch
í
nh t
ả
khi nh
ậ
p
10
• B
ằ
ng c
á
ch sinh ra nhi
ề
u Thread, Chương tr
ì
nh so
ạ
n
th
ả
o v
ă
n b
ả
n t
ậ
n d
ụ
ng th
ờ
i gian nh
à
n r
ỗ
i c
ủ
a CPU
(ch
ờ
đ
ợ
i c
á
c ph
í
m b
ấ
m ho
ặ
c t
ả
i t ậ
p tin v
ề
) qua đ
ó
l
à
m cho c
ô
ng vi
ệ
c c
ó
n
ă
ng su
ấ
t hơn.
11
• Như v
ậ
y v
ề
vi
ệ
c s
ử
dung b
ộ
nh
ớ
: Threads v
à
Processes l
à
kh
á
c nhau:
– Threads d
ù
ng shared-memory, trong khi đ
ó
Processes th
ì
c
ó
th
ể
kh
ô
ng.
– S
ự
đ
ồ
ng b
ộ
h
ó
a v
ề
d
ữ
li
ệ
u l
à
c
ầ
n thi
ế
t đ
ố
i v
ớ
i c
á
c
Threads, nhưng v
ớ
i Processes l
à
c
ó
th
ể
kh
ô
ng c
ầ
n
12
Process
• M
ộ
t Process c
ó
th
ể
c
ó
nhi
ề
u Thread
• Process đư
ợ
c t
ạ
o ra b
ở
i h
ệ
đi
ề
u h
à
nh đ
ể
th
ự
c thi
chương tr
ì
nh
• Hai Process c
ó
th
ể
thi h
à
nh đ
ồ
ng th
ờ
i m
ộ
t đo
ạ
n code
trong chương tr
ì
nh Python
• Khi m
ở
v
à
đ
ó
ng Process t
ố
n nhi
ề
u th
ờ
i gian hơn so
v
ớ
i m
ở
đ
ó
ng Thread
• Trong trư
ờ
ng h
ợ
p kh
ô
ng chia s
ẻ
kh
ô
ng gian b
ộ
nh
ớ
,
th
ì
vi
ệ
c chia s
ẻ
th
ô
ng tin gi
ữ
a c
á
c Process ch
ậ
m hơn
gi
ữ
a c
á
c Thread
13
Threads
• Thread như l
à
nh
ữ
ng ti
ế
n tr
ì
nh nh
ỏ
(mini-
processes) t
ồ
n t
ạ
i b
ê
n trong Process
• Thread chia s
ẻ
kh
ô
ng gian b
ộ
nh
ớ
n
ê
n c
á
c bi
ế
n đư
ợ
c
dung chung trong vi
ệ
c đ
ọ
c ghi
• Hai Threads kh
ô
ng th
ể
th
ự
c thi đ
ồ
ng th
ờ
i c
ù
ng m
ộ
t
đo
ạ
n code trong chương tr
ì
nh Python
14
V
í
d
ụ
v
ề
s
ự
kh
á
c nhau
• H
à
m (myFunc) xu
ấ
t ID c
ủ
a thread đang ho
ạ
t đ
ộ
ng.
• Khi g
ọ
i h
à
m n
à
y nhi
ề
u l
ầ
n, ID n
à
y đư
ợ
c lưu tr
ữ
l
ạ
i
trong m
ộ
t m
ả
ng to
à
n c
ụ
c A.
15
• K
í
ch ho
ạ
t 10 l
ầ
n đ
ể
cho Thead g
ọ
i h
à
m myFunc() đ
ã
t
ạ
o
ở
tr
ê
n.
• Vi
ệ
c k
ế
t th
ú
c m
ộ
t thread đ
ể
chuy
ể
n sang thread
kh
á
c l
à
kh
ô
ng đ
ặ
t ra ngay khi m
ộ
t thread đư
ợ
c start;
ch
í
nh v
ì
v
ậ
y c
á
c thread c
ầ
n đư
ợ
c lưu tr
ữ
v
à
o trong
m
ả
ng th đ
ể
s
ử
d
ụ
ng v
ề
sau.
16
• Sau đ
ó
m
ớ
i l
ầ
n lư
ợ
t đ
ợ
i cho c
á
c thread n
à
y ho
à
n
th
à
nh c
ô
ng vi
ệ
c b
ằ
ng h
à
m join().
• Sau khi xong, k
ế
t qu
ả
c
ó
trong bi
ế
n to
à
n c
ụ
c A đư
ợ
c
xu
ấ
t ra
17
K
ế
t qu
ả
th
ự
c thi chương tr
ì
nh v
ớ
i Thread
18
Nh
ậ
n x
é
t
• Do th
ờ
i gian sleep kh
á
c nhau, n
ê
n c
á
c thread k
ế
t
th
ú
c kh
ô
ng gi
ố
ng nhau, d
ẫ
n đ
ế
n th
ứ
t
ự
c
ô
ng vi
ệ
c
kh
ô
ng theo th
ứ
t
ự
c
ủ
a c
â
u l
ệ
nh l ặ
p for
• Thread theo cơ ch
ế
s
ử
d
ụ
ng b
ộ
nh ớ
chia s
ẻ
, n
ê
n bi
ế
n
A c
ó
hi
ệ
u l
ự
c trong thread (ID...64) ch
í
nh v
à
c
á
c
thread kh
á
c (ID...52, ID...88, ..., ID...60). V
ì
v
ậ
y m
ả
ng
A ban đ
ầ
u r
ỗ
ng, sau khi th
ự
c hi
ệ
n m
ả
ng A g
ồ
m 10
ph
ầ
n t
ử
l
à
c
á
c Thread ID.
19
• Như v
ậ
y, bi
ế
n to
à
n c
ụ
c A đư
ợ
c s
ử
d
ụ
ng chung gi
ữ
a
c
á
c thread v
ớ
i nhau (shared-memory)
• V
ớ
i chương tr
ì
nh như tr
ê
n; nhưng thay v
ì
d
ù
ng
Thread, d
ù
ng Process th
ì
bi
ế
n to
à
n c
ụ
c A n
à
y
kh
ô
ng t
á
c đ
ộ
ng gi
ữ
a c
á
c process
• C
ầ
n import
20
• H
à
m đ
ể
c
á
c process th
ự
c hi
ệ
n
21
• Th
ự
c thi t
ấ
t c
ả
c
á
c process
22
K
ế
t qu
ả
th
ự
c thi chương tr
ì
nh v
ớ
i Process
23
Lưu
ý
• D
ù
ng Process nhưng đ
ể
c
ó
k
ế
t qu
ả
như Thread, c
ầ
n
ph
ả
i lưu gi
á
tr
ị
v
à
o trong m
ộ
t h
à
ng đ
ợ
i b
ằ
ng c
á
ch
khai b
á
o bi
ế
n Q = Queue().
• Sau đ
ó
đ
ẩ
y k
ế
t qu
ả
c
ầ
n lưu v
à
o trong h
à
ng đ
ợ
i n
à
y.
Ch
ẳ
ng h
ạ
n, Q.put( os.getpid() ).
• Cu
ố
i c
ù
ng, đ
ể
xu
ấ
t ra v
à
đưa v
à
o m
ả
ng A qua l
ệ
nh
A.append( Q.get() )
24
• Chương tr
ì
nh vi
ế
t l
ạ
i như sau
25 26
K
ế
t qu
ả
27
Song song d
ữ
li
ệ
u
• multiprocessing l
à
m
ộ
t g
ó
i c
á
c API h
ỗ
tr
ợ
đ
ể
ph
á
t
sinh c
á
c Process; qua đ
ó
gi
ú
p t
ậ
n d
ụ
ng đư
ợ
c nhi
ề
u
b
ộ
x
ử
l
ý
đ
ể
vi
ế
t chương tr
ì
nh.
• Gi
ả
s
ử
c
ó
m
ộ
t c
ô
ng vi
ệ
c (vi
ế
t dư
ớ
i d
ạ
ng m
ộ
t h
à
m)
đư
ợ
c th
ự
c hi
ệ
n tr
ê
n nhi
ề
u d
ữ
li
ệ
u kh
á
c nhau (Data
Parallelism).
28
• V
í
d
ụ
: C
ầ
n t
í
nh c
ă
n b
ậ
c 2 c
ủ
a 3 s
ố
.
• C
á
c c
â
u l
ệ
nh tu
ầ
n t
ự
c
ó
th
ể
vi
ế
t như sau:
29
• Ho
ặ
c như sau v
ớ
i h
à
m map()
30
• Khi c
ầ
n giao cho nhi
ề
u Process t
í
nh, ch
ẳ
ng h
ạ
n v
ớ
i 3
Process:
31
• Trong đ
ó
, đ
ố
i tư
ợ
ng Pool cung c
ấ
p m
ộ
t phương ti
ệ
n
đ
ể
song song h
ó
a vi
ệ
c th
ự
c hi
ệ
n m
ộ
t h
à
m qua nhi
ề
u
gi
á
tr
ị
đ
ầ
u v
à
o, v
à
ph
â
n ph
ố
i d
ữ
li
ệ
u đ
ầ
u v
à
o cho c
á
c
Process.
32
• V
ớ
i h
à
m nhi
ề
u đ
ố
i s
ố
.
• V
í
d
ụ
: Gi
ả
i 3 phương tr
ì
nh b
ậ
c I d
ạ
ng ax+b=0
33
• Lưu
ý
: khi d
ù
ng v
ớ
i đ
ố
i tư
ợ
ng thu
ộ
c l
ớ
p Pool, h
à
m
map() n
à
y kh
ô
ng chuy
ể
n đ
ổ
i nhi
ề
u đ
ố
i s
ố
đư
ợ
c.
• Đ
ể
thu
ậ
n l
ợ
i, c
ó
th
ể
d
ù
ng m
ộ
t l
ớ
p Container, ch
ẳ
ng
h
ạ
n d
ù
ng g
ó
i collections đ
ể
gom c
á
c đ
ố
i s
ố
c
ủ
a h
à
m
th
à
nh m
ộ
t nh
ó
m.
• Ch
ẳ
ng h
ạ
n, h
à
m f(a,b) c
ó
2 đ
ố
i s
ố
đ
ể
gi
ả
i phương
tr
ì
nh b
ậ
c nh
ấ
t như tr
ê
n, c
ó
th
ể
vi
ế
t l
ạ
i th
à
nh m
ộ
t đ
ố
i
s
ố
f(item)
34
35
• Trong đ
ó
, item c
ó
2 th
à
nh ph
ầ
n l
à
a v
à
b
• Khi s
ử
d
ụ
ng, ph
ả
i t
ạ
o ra ki
ể
u đ
ố
i s
ố
n
à
y:
36
• Khi s
ử
d
ụ
ng
37
• C
ó
th
ể
so s
á
nh th
ờ
i
gian th
ự
c hi
ệ
n c
ủ
a
chương tr
ì
nh song
song so v
ớ
i tu
ầ
n t
ự
qua v
í
d
ụ
gi
ả
i phương
tr
ì
nh.
38
S
ử
d
ụ
ng Thread
• D
ù
ng l
ớ
p Thread trong g
ó
i threading.
• Ch
ẳ
ng h
ạ
n, c
ầ
n k
í
ch ho
ạ
t m
ộ
t Thread đ
ể
th
ự
c hi
ệ
n
c
ô
ng vi
ệ
c qua h
à
m c
ó
s
ẵ
n (gi
ả
i phương tr
ì
nh eqI)
39
S
ử
d
ụ
ng Process
• Tương t
ự
như Thread, c
ó
th
ể
d
ù
ng l
ớ
p Process
trong g
ó
i multiprocessing đ
ể
th
ự
c thi h
à
m eqI()
• V
ớ
i k
ế
t qu
ả
40
Threads v
à
Processes
• Gi
ả
s
ử
c
ó
m
ộ
t chương tr
ì
nh ch
ỉ
ch
ờ
cho h
ế
t th
ờ
i gian
(đ
ặ
t t
ê
n l
à
sleeping()), kh
ô
ng th
ự
c hi
ệ
n b
ấ
t k
ỳ
t
í
nh
to
á
n n
à
o như sau:
41
• N
ế
u run chương tr
ì
nh n
à
y tr
ê
n t
ấ
t c
ả
c
á
c Thread c
ủ
a
m
á
y qua v
í
d
ụ
:
42
• Th
ì
th
ờ
i gian th
ự
c thi l
à
th
ờ
i gian c
ủ
a Thread l
â
u
nh
ấ
t:
43
4 lần gọi
Các Threads của Process 6269
• N
ế
u run chương tr
ì
nh n
à
y tr
ê
n t
ấ
t c
ả
c
á
c Process,
m
ỗ
i Process s
ử
dung Thread ch
í
nh:
44
• Trong trư
ờ
ng h
ợ
p n
à
y, th
ờ
i gian th
ự
c thi tr
ê
n c
á
c
Process c
ũ
ng l
à
th
ờ
i gian l
â
u nh
ấ
t c
ủ
a m
ộ
t Process
n
à
o đ
ó
trong c
á
c Process đư
ợ
c k
í
ch ho
ạ
t
45
• Nhưng khi c
ó
m
ộ
t chương tr
ì
nh c
ó
t
í
nh to
á
n (đ
ặ
t t
ê
n
l
à
calculating())
46
• Th
ờ
i gian th
ự
c thi c
ủ
a Process v
à
Thread l
à
kh
á
c
bi
ệ
t:
47
Truy
ề
n v
à
nh
ậ
n d
ữ
li
ệ
u
• Chương tr
ì
nh Python t
ạ
o 2 Process, Master v
à
Slave.
• Process Master g
ử
i m
ộ
t m
ả
ng 10 gi
á
tr
ị
ng
ẫ
u nhi
ê
n
đ
ế
n Process Slave
• Process Slave nh
ậ
n v
à
xu
ấ
t ra m
à
n h
ì
nh
48
• M
ộ
t s
ố
import c
ầ
n thi
ế
t
49
• H
à
m Master() đ
ể
t
ạ
o gi
á
tr
ị
ng
ẫ
u nhi
ê
n v
à
g
ử
i
• H
à
m Slave() đ
ể
nh
ậ
n r
ồ
i xu
ấ
t ra m
à
n h
ì
nh
50
• Chương tr
ì
nh s
ử
d
ụ
ng đ
ố
i tư
ợ
ng k
ế
t n
ố
i đư
ợ
c
sinh ra b
ở
i Pipe
M
ộ
t v
à
i v
í
d
ụ
• V
í
d
ụ
c
ầ
n t
í
nh t
ổ
ng c
ủ
a N s
ố
th ự
c c
ó
gi
á
tr
ị
đư
ợ
c t
ạ
o
ng
ẫ
u nhi
ê
n trong kho
ả
ng [0,1).
import numpy as np
N = 10000000
a = np.random.random(N)
51
• H
à
m t
í
nh t
ổ
ng c
ó
th
ể
vi
ế
t
def psum( ib, ie ):
s = 0.0
for i in range(ib,ie+1):
s += a[i]
return s
52
• Đ
ể
t
í
nh t
ổ
ng tu
ầ
n t
ự
c
ủ
a N s
ố
n
à
y:
t0 = time.time()
psum(0,N-1)
print( "Tuần tự: Thời gian tr
ô
i qua %8.6f gi
â
y" %
(time.time()-t0) )
53
• Trong trư
ờ
ng h
ợ
p c
ầ
n d
ù
ng đ
ố
i tư
ợ
ng Pool c
ó
trong
g
ó
i Multiprocessing, ch
ú
ng ta s
ử
d
ụ
ng h
à
m psum()
nhi
ề
u l
ầ
n, m
ỗ
i l
ầ
n l
à
m
ộ
t ti
ế
n tr
ì
nh t
í
nh t
ổ
ng m
ộ
t
đo
ạ
n nh
ỏ
. Khi đ
ó
c
ầ
n ph
ả
i s
ử
d
ụ
ng h
à
m map() đ
ể
t
ạ
o m
ộ
t d
ã
y l
ặ
p l
ạ
i.
54
• Nhưng do h
à
m psum() c
ó
2 đ
ố
i s
ố
(c
ó
2 tham s
ố
khi
g
ọ
i h
à
m), n
ê
n ph
ả
i vi
ế
t th
ê
m m ộ
t h
à
m đ
ể
chuy
ể
n
vi
ệ
c g
ọ
i h
à
m nhi
ề
u tham s
ố
v
ề
1 tham s
ố
như sau:
def multirun(args):
return psum(*args)
55
• Gi
ả
s
ử
d
ù
ng 4 ti
ế
n tr
ì
nh cho vi
ệ
c t
í
nh to
á
n song song
n
à
y, chương tr
ì
nh vi
ế
t như sau:
from multiprocessing import Pool
t0 = time.time()
l1 = [0, int(N/4), int(N/2), int(3*N/4)]
l2 = [int(N/4)-1, int(N/2)-1, int(3*N/4)-1, N-1]
l3 = zip(l1,l2)
56
p = Pool(4)
result = p.map( multirun, l3 )
print( "Sử dụng Pool: Thời gian tr
ô
i qua %8.6f gi
â
y"
% (time.time()-t0) )
print( "Tổng l
à
%10.6f" % sum(result) )
57
• Lưu
ý
r
ằ
ng,
– Do h
à
m multirun() ch
ỉ
c
ó
1 đ
ố
i s
ố
, n
ê
n ph
ả
i d
ù
ng
h
à
m zip() đ
ể
chuy
ể
n 2 danh s
á
ch v
ề
1 danh s
á
ch.
– Đ
ể
bi
ế
t k
ế
t qu
ả
sau c
ù
ng, c
ó
th
ể
d
ù
ng h
à
m sum()
c
ủ
a g
ó
i Python chu
ẩ
n đ
ể
t
í
nh to
á
n.
• Ch
ú
ng ta c
ó
th
ể
s
ử
d
ụ
ng đ
ố
i tư
ợ
ng Process ho
ặ
c
Thread đ
ể
th
ự
c hi
ệ
n c
ô
ng vi
ệ
c n
à
y. C
á
ch th
ứ
c c
ũ
ng
ho
à
n to
à
n như nhau:
58
import threading as th
t0 = time.time()
t1 = th.Thread(target = psum, args = [0,int(N/4)-1])
t2 = th.Thread(target = psum, args = [int(N/4),int(N/2)-1])
t3 = th.Thread(target = psum, args = [int(N/2),int(3*N/4)-1])
t4 = th.Thread(target = psum, args = [int(3*N/4),N-1])
59
t1.start()
t2.start()
t3.start()
t4.start()
t1.join()
t2.join()
t3.join()
t4.join()
print( "Sử dụng Thread: Thời gian tr
ô
i qua %8.6f gi
â
y"
% (time.time()-t0) )
60
• Tuy nhi
ê
n, đ
ể
t
í
nh đư
ợ
c t
ổ
ng c
ủ
a t
ấ
t c
ả
c
á
c ph
ầ
n t
ừ
,
h
à
m psum() đư
ợ
c hi
ệ
u ch
ỉ
nh như sau:
result = []
def psum( ib, ie ):
s = 0.0
for i in range(ib,ie+1):
s += a[i]
result.append( s )
return s
61
• C
á
ch th
ứ
c gi
ả
i quy
ế
t d
ù
ng Process c
ũ
ng tương t
ự
Thread. Tuy nhi
ê
n, do c
á
c process kh
ô
ng chia s
ẻ
kh
ô
ng gian b
ộ
nh
ớ
, n
ê
n đ
ể
c
ó
k
ế
t qu
ả
l
à
t
ổ
ng c
ủ
a
to
à
n b
ộ
c
á
c ph
ầ
n t
ử
c
ầ
n t
í
nh, ph
ả
i s
ử
d
ụ
ng th
ê
m đ
ố
i
tư
ợ
ng Queue đ
ể
lưu tr
ữ
.
from multiprocessing import Queue
Q = Queue()
def psump( ib, ie ):
s = 0.0
for i in range(ib,ie+1):
s += a[i]
Q.put(s)
return s
62
• Khi đ
ó
, vi
ệ
c t
í
nh t
ổ
ng đư
ợ
c x
ử
l
ý
sau khi c
á
c ti
ế
n
tr
ì
nh t
í
nh to
á
n như sau:
t0 = time.time()
p1 = mp.Process(target = psump, args = [0,int(N/4)-1])
p2 = mp.Process(target = psump, args = [int(N/4),int(N/2)-1])
p3 = mp.Process(target = psump, args = [int(N/2),int(3*N/4)-1])
p4 = mp.Process(target = psump, args = [int(3*N/4),N-1])
p1.start()
p2.start()
p3.start()
p4.start()
63
p1.join()
p2.join()
p3.join()
p4.join()
result = []
while not Q.empty():
result.append( Q.get() )
print( "Sử dụng Process: Thời gian tr
ô
i qua %8.6f gi
â
y"
% (time.time()-t0) )
print( "Tổng l
à
%10.6f" % sum(result) )
64
• K
ế
t qu
ả
c
ả
3 trư
ờ
ng h
ợ
p v
à
t
í
nh to
á
n tu
ầ
n t
ự
v
ớ
i N
l
à
10 tri
ệ
u như sau:
65
• V
í
d
ụ
t
í
nh s
ố
đơn gi
ả
n nh
ấ
t l
à
d
ù
ng h
à
m Arctan(x).
• Ta bi
ế
t
• Suy ra
𝜋
tan
(
𝜋
4 )
= 1
arctan(1) =
𝜋
4
66
• M
à
khai tri
ể
n Taylor c
ủ
a h
à
m arctan() l
à
𝑎
𝑟
𝑐
𝑡
𝑎
𝑛
(
𝑥
) =
𝑥
−
𝑥
3
3
+
𝑥
5
5
−
𝑥
7
7
+ … + (−1)
𝑛
−1
𝑥
2
𝑛
−1
2
𝑛
− 1
+
𝑂
(
𝑥
2
𝑛
−1
)
67
• T
ừ
đ
â
y suy ra
𝜋
4
≈ 1 −
1
3
+
1
5
−
1
7
+ … + (−1)
𝑛
−1 1
2
𝑛
− 1
=
𝑛
∑
𝑖
=1
(−1)
𝑖
−1 1
2
𝑖
− 1
68
• Đ
ể
s
ử
d
ụ
ng l
ạ
i h
à
m psum()
ở
tr
ê
n, c
ó
th
ể
vi
ế
t đơn
gi
ả
n b
ằ
ng c
á
ch t
ạ
o m
ả
ng a, thay v
ì
ng
ẫ
u nhi
ê
n trong
[0,1) th
ì
a là
c
á
c s
ố
h
ạ
ng trong t
ổ
ng
ở
tr
ê
n.
a = []
sign = 1
for i in range(N):
a.append(sign/(2*(i+1)-1))
sign = -sign
69
• V
í
d
ụ
, d
ù
ng đ
ố
i tư
ợ
ng Pool đ
ể
t
í
nh, to
à
n b
ộ
chương tr
ì
nh c
ó
th
ể
vi
ế
t như sau:
import time
from multiprocessing import Pool
def multirun(args):
return psum(*args)
def psum( ib, ie ):
s = 0.0
for i in range(ib,ie+1):
s += a[i]
return s
70
N = 10000000
a = []
sign = 1
for i in range(N):
a.append(sign/(2*(i+1)-1))
sign = -sign
l1 = [0, int(N/4), int(N/2), int(3*N/4)]
l2 = [int(N/4)-1, int(N/2)-1, int(3*N/4)-1, N-1]
l3 = zip(l1,l2)
p = Pool(4)
result = p.map( multirun, l3 )
print( "Số Pi l
à
%54.52f" % (4*sum(result)) )
71
• V
í
d
ụ
d
ữ
li
ệ
u ph
â
n t
á
n
• Trong c
á
c v
í
d
ụ
tr
ê
n, ch
ú
ng ta th
ự
c hi
ệ
n c
á
c thao t
á
c
đ
ể
r
ồ
i c
ù
ng chia s
ẻ
m
ộ
t v
ù
ng b
ộ
nh
ớ
chung. Ch
ẳ
ng
h
ạ
n v
ớ
i Pool ho
ặ
c v
ớ
i Thread, d
ữ
li
ệ
u đư
ợ
c t
í
nh to
á
n
sau đ
ó
t
ậ
p trung v
à
o list c
ó
t
ê
n l
à
result. V
ớ
i Process,
k
ế
t qu
ả
c
ủ
a c
á
c process đư
ợ
c đưa v
à
o h
à
ng đ
ợ
i Q,
sau đ
ó
t
ừ
h
à
ng đ
ợ
i đưa v
à
o result n
à
y đ
ể
t
í
nh t
ổ
ng
tr
ê
n list.
72
• Gi
ả
s
ử
chương tr
ì
nh t
í
nh to
á
n l
à
m nh
ữ
ng c
ô
ng vi
ệ
c
kh
á
c nhau tr
ê
n c
ù
ng m
ộ
t d
ữ
li
ệ
u, nhưng do m
ỗ
i
process lưu tr
ữ
trong v
ù
ng b
ộ
nh
ớ
ri
ê
ng như m
ộ
t h
ệ
th
ố
ng ph
â
n t á
n (Distributed System).
• Ch
ẳ
ng h
ạ
n, process đ
ó
ng vai tr
ò
master ch
ị
u tr
á
ch
nhi
ệ
m t
ạ
o m
ộ
t ma tr
ậ
n l
à
c
á
c gi
á
tr
ị
th
ự
c ng
ẫ
u nhi
ê
n
thu
ộ
c đo
ạ
n [0,1), sau đ
ó
g
ử
i v
ề
cho process đ
ó
ng vai
tr
ò
slave. Process n
à
y ch
ị
u tr
á
ch nhi
ệ
m nh
â
n ma tr
ậ
n
n
à
y v
ớ
i ma tr
ậ
n ngh
ị
ch đ
ả
o r
ồ
i g
ử
i chu
ẩ
n-2 c
ủ
a ma
tr
ậ
n t
í
ch n
à
y v
ề
cho master đ
ể
xu
ấ
t ra m
à
n h
ì
nh.
73
• Chương tr
ì
nh đư
ợ
c vi
ế
t như sau:
import numpy as np
import multiprocessing as mp
N = 10
M = 10
def master( conn ):
ma_a = np.random.random((N,M))
conn.send(ma_a)
norm = conn.recv()
print( "Norm is %20.18f" % norm )
conn.close()
74
def slave( conn ):
sl_b = conn.recv()
norm2 = np.linalg.norm(np.dot(sl_b,np.linalg.inv(sl_b)),2)
conn.send( norm2 )
conn.close()
ma_conn, sl_conn = mp.Pipe()
ma_p = mp.Process( target = master, args = (sl_conn,) )
sl_p = mp.Process( target = slave, args = (ma_conn,) )
ma_p.start()
sl_p.start()
ma_p.join()
sl_p.join()
75
S
ử
d
ụ
ng trong Khoa h
ọ
c d
ữ
li
ệ
u
• C
ó
hai
á
p d
ụ
ng đa x
ử
l
ý
trong Khoa h
ọ
c d
ữ
li
ệ
u:
• X
ử
l
ý
nh
ậ
p xu
ấ
t: Th
ô
ng thư
ờ
ng vi
ệ
c ghi d
ữ
li
ệ
u l
ê
n Data
Warehouses n
à
o đ
ó
thư
ờ
ng m
ấ
t nhi
ề
u th
ờ
i gian hơn l
à
vi
ệ
c đ
ọ
c d
ữ
li
ệ
u đ
ể
đưa v
à
o x
ử
l
ý
. N
ê
n vi
ệ
c ghi đư
ợ
c
th
ự
c hi
ệ
n song song s
ẽ
hi
ệ
u qu
ả
.
• X
â
y d
ự
ng m
ô
h
ì
nh hu
ấ
n luy
ệ
n: kh
ô
ng ph
ả
i t
ấ
t c
ả
c
á
c m
ô
h
ì
nh đư
ợ
c hu
ấ
n luy
ệ
n theo c
á
ch song song, nhưng m
ộ
t
s
ố
m
ô
h
ì
nh c
ó
th
ể
th
ự
c hi
ệ
n theo c
á
ch n
à
y. Ch
ẳ
ng h
ạ
n
Random Forest đư
ợ
c tri
ể
n khai tr
ê
n nhi
ề
u c
â
y quy
ế
t
đ
ị
nh (Decision Tree) đ
ể
l
ấ
y m
ộ
t quy
ế
t đ
ị
nh t
í
ch lu
ỹ
76
• C
ũ
ng lưu
ý
, trong
thư vi
ệ
n sklearn
c
ó
cung c
ấ
p tham
s
ố
n_jobs gi
ú
p
cho vi
ệ
c s
ử
d
ụ
ng
nhi
ề
u task.
• V
í
d
ụ
minh ho ạ
: gi
ả
s
ử
c
ó
c
ô
ng vi
ệ
c dowork()
c
ầ
n gi
ả
i quy
ế
t trong 2
l
ầ
n.
77
• S
ử
d
ụ
ng Multi-Processing
78
79

More Related Content

Similar to Intro Parallel Computing for student11.pdf

giao-trinh-tu-hoc-matlab.pdf
giao-trinh-tu-hoc-matlab.pdfgiao-trinh-tu-hoc-matlab.pdf
giao-trinh-tu-hoc-matlab.pdfMnhNguynGia4
 
HDH_chuong 1_2019_color.pdf
HDH_chuong 1_2019_color.pdfHDH_chuong 1_2019_color.pdf
HDH_chuong 1_2019_color.pdfHongVitc
 
056 giao trinh thvp2011
056 giao trinh thvp2011056 giao trinh thvp2011
056 giao trinh thvp2011Torres Pham
 
Laptrinh ph pvamysql
Laptrinh ph pvamysqlLaptrinh ph pvamysql
Laptrinh ph pvamysqlHiền Phạm
 
Ngôn ngữ lập trình PHP và MySQL - khoahoclaptrinhweb.tin.vn
Ngôn ngữ lập trình PHP và MySQL - khoahoclaptrinhweb.tin.vnNgôn ngữ lập trình PHP và MySQL - khoahoclaptrinhweb.tin.vn
Ngôn ngữ lập trình PHP và MySQL - khoahoclaptrinhweb.tin.vnTrình Kim Ngân
 
THCS_W02_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)
THCS_W02_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)THCS_W02_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)
THCS_W02_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)CNTT-DHQG
 
Cau truc may_tinh_&_asm
Cau truc may_tinh_&_asmCau truc may_tinh_&_asm
Cau truc may_tinh_&_asmCuong Pham
 
bui anh_tai__Bai_19_mot_so_thu_vien_chuan_trong_pascal
bui anh_tai__Bai_19_mot_so_thu_vien_chuan_trong_pascalbui anh_tai__Bai_19_mot_so_thu_vien_chuan_trong_pascal
bui anh_tai__Bai_19_mot_so_thu_vien_chuan_trong_pascalSP Tin K34
 
Tính toán khoa học - Chương 1: Nhập môn Matlab
Tính toán khoa học - Chương 1: Nhập môn MatlabTính toán khoa học - Chương 1: Nhập môn Matlab
Tính toán khoa học - Chương 1: Nhập môn MatlabChien Dang
 
Chuong 3 tinh toan va thiet ke mong coc
Chuong 3 tinh toan va thiet ke mong cocChuong 3 tinh toan va thiet ke mong coc
Chuong 3 tinh toan va thiet ke mong cocHoàng Gia
 

Similar to Intro Parallel Computing for student11.pdf (20)

giao-trinh-tu-hoc-matlab.pdf
giao-trinh-tu-hoc-matlab.pdfgiao-trinh-tu-hoc-matlab.pdf
giao-trinh-tu-hoc-matlab.pdf
 
HDH_chuong 1_2019_color.pdf
HDH_chuong 1_2019_color.pdfHDH_chuong 1_2019_color.pdf
HDH_chuong 1_2019_color.pdf
 
056 giao trinh thvp2011
056 giao trinh thvp2011056 giao trinh thvp2011
056 giao trinh thvp2011
 
Phân tích khái niệm hình thức để phân loại và phát hiện mã độc
Phân tích khái niệm hình thức để phân loại và phát hiện mã độcPhân tích khái niệm hình thức để phân loại và phát hiện mã độc
Phân tích khái niệm hình thức để phân loại và phát hiện mã độc
 
Lập trình PHP và MySQL
Lập trình PHP và MySQLLập trình PHP và MySQL
Lập trình PHP và MySQL
 
Laptrinh ph pvamysql
Laptrinh ph pvamysqlLaptrinh ph pvamysql
Laptrinh ph pvamysql
 
Ngôn ngữ lập trình PHP và MySQL - khoahoclaptrinhweb.tin.vn
Ngôn ngữ lập trình PHP và MySQL - khoahoclaptrinhweb.tin.vnNgôn ngữ lập trình PHP và MySQL - khoahoclaptrinhweb.tin.vn
Ngôn ngữ lập trình PHP và MySQL - khoahoclaptrinhweb.tin.vn
 
may cat kim loai Chuong x a1
may cat kim loai Chuong x a1may cat kim loai Chuong x a1
may cat kim loai Chuong x a1
 
Quan tri he dieu hanh linux
Quan tri he dieu hanh linuxQuan tri he dieu hanh linux
Quan tri he dieu hanh linux
 
Chuong2 nmth
Chuong2 nmthChuong2 nmth
Chuong2 nmth
 
THCS_W02_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)
THCS_W02_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)THCS_W02_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)
THCS_W02_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)
 
Cau truc may_tinh_&_asm
Cau truc may_tinh_&_asmCau truc may_tinh_&_asm
Cau truc may_tinh_&_asm
 
Cau truc may tinh & asm
Cau truc may tinh & asmCau truc may tinh & asm
Cau truc may tinh & asm
 
Tu hoc matlab
Tu hoc matlabTu hoc matlab
Tu hoc matlab
 
Pascal 2
Pascal 2Pascal 2
Pascal 2
 
bui anh_tai__Bai_19_mot_so_thu_vien_chuan_trong_pascal
bui anh_tai__Bai_19_mot_so_thu_vien_chuan_trong_pascalbui anh_tai__Bai_19_mot_so_thu_vien_chuan_trong_pascal
bui anh_tai__Bai_19_mot_so_thu_vien_chuan_trong_pascal
 
Tính toán khoa học - Chương 1: Nhập môn Matlab
Tính toán khoa học - Chương 1: Nhập môn MatlabTính toán khoa học - Chương 1: Nhập môn Matlab
Tính toán khoa học - Chương 1: Nhập môn Matlab
 
Ch01
Ch01Ch01
Ch01
 
Basic C programming
Basic C programmingBasic C programming
Basic C programming
 
Chuong 3 tinh toan va thiet ke mong coc
Chuong 3 tinh toan va thiet ke mong cocChuong 3 tinh toan va thiet ke mong coc
Chuong 3 tinh toan va thiet ke mong coc
 

Recently uploaded

TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT VẬT LÝ 2024 - TỪ CÁC TRƯỜNG, TRƯ...
TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT VẬT LÝ 2024 - TỪ CÁC TRƯỜNG, TRƯ...TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT VẬT LÝ 2024 - TỪ CÁC TRƯỜNG, TRƯ...
TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT VẬT LÝ 2024 - TỪ CÁC TRƯỜNG, TRƯ...Nguyen Thanh Tu Collection
 
sách các Bài tập kinh tế vi mô chọn lọc.
sách các Bài tập kinh tế vi mô chọn lọc.sách các Bài tập kinh tế vi mô chọn lọc.
sách các Bài tập kinh tế vi mô chọn lọc.TunQuc54
 
TÀI LIỆU DẠY THÊM HÓA HỌC 12 - SÁCH MỚI (BẢN HS+GV) (FORM BÀI TẬP 2025 CHUNG ...
TÀI LIỆU DẠY THÊM HÓA HỌC 12 - SÁCH MỚI (BẢN HS+GV) (FORM BÀI TẬP 2025 CHUNG ...TÀI LIỆU DẠY THÊM HÓA HỌC 12 - SÁCH MỚI (BẢN HS+GV) (FORM BÀI TẬP 2025 CHUNG ...
TÀI LIỆU DẠY THÊM HÓA HỌC 12 - SÁCH MỚI (BẢN HS+GV) (FORM BÀI TẬP 2025 CHUNG ...Nguyen Thanh Tu Collection
 
BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CHÂN TRỜI ...
BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CHÂN TRỜI ...BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CHÂN TRỜI ...
BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CHÂN TRỜI ...Nguyen Thanh Tu Collection
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
xemsomenh.com-Bố cục của lá số tử vi như thế nào.pdf
xemsomenh.com-Bố cục của lá số tử vi như thế nào.pdfxemsomenh.com-Bố cục của lá số tử vi như thế nào.pdf
xemsomenh.com-Bố cục của lá số tử vi như thế nào.pdfXem Số Mệnh
 
ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 THPT MÔN TOÁN CÁC TỈNH NĂM HỌC 2023-2024 CÓ ...
ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 THPT MÔN TOÁN CÁC TỈNH NĂM HỌC 2023-2024 CÓ ...ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 THPT MÔN TOÁN CÁC TỈNH NĂM HỌC 2023-2024 CÓ ...
ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 THPT MÔN TOÁN CÁC TỈNH NĂM HỌC 2023-2024 CÓ ...Nguyen Thanh Tu Collection
 
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...Nguyen Thanh Tu Collection
 
15 ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 SỞ GIÁO...
15 ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 SỞ GIÁO...15 ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 SỞ GIÁO...
15 ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 SỞ GIÁO...Nguyen Thanh Tu Collection
 
Đề cương môn Xã hội Chủ nghĩa Khoa học (sơ lược)
Đề cương môn Xã hội Chủ nghĩa Khoa học (sơ lược)Đề cương môn Xã hội Chủ nghĩa Khoa học (sơ lược)
Đề cương môn Xã hội Chủ nghĩa Khoa học (sơ lược)LinhV602347
 
BÀI TẬP BỔ TRỢ 4 KỸ NĂNG TIẾNG ANH 11 CẢ NĂM - GLOBAL SUCCESS - NĂM HỌC 2023-...
BÀI TẬP BỔ TRỢ 4 KỸ NĂNG TIẾNG ANH 11 CẢ NĂM - GLOBAL SUCCESS - NĂM HỌC 2023-...BÀI TẬP BỔ TRỢ 4 KỸ NĂNG TIẾNG ANH 11 CẢ NĂM - GLOBAL SUCCESS - NĂM HỌC 2023-...
BÀI TẬP BỔ TRỢ 4 KỸ NĂNG TIẾNG ANH 11 CẢ NĂM - GLOBAL SUCCESS - NĂM HỌC 2023-...Nguyen Thanh Tu Collection
 
CHƯƠNG 5. TTHCM VỀ VĂN HÓA, ĐẠO ĐỨC, CON NGƯỜI
CHƯƠNG 5. TTHCM VỀ VĂN HÓA, ĐẠO ĐỨC, CON NGƯỜICHƯƠNG 5. TTHCM VỀ VĂN HÓA, ĐẠO ĐỨC, CON NGƯỜI
CHƯƠNG 5. TTHCM VỀ VĂN HÓA, ĐẠO ĐỨC, CON NGƯỜInguyendoan3122102508
 
Vợ chồng A Phủ - Tô Hoài - phân tích chi tiết
Vợ chồng A Phủ - Tô Hoài - phân tích chi tiếtVợ chồng A Phủ - Tô Hoài - phân tích chi tiết
Vợ chồng A Phủ - Tô Hoài - phân tích chi tiếtauthihaiyen2000
 
mayphatdienhonda.com - Máy phát điện là gì ? cấu tạo và ứng dụng , phân loại ...
mayphatdienhonda.com - Máy phát điện là gì ? cấu tạo và ứng dụng , phân loại ...mayphatdienhonda.com - Máy phát điện là gì ? cấu tạo và ứng dụng , phân loại ...
mayphatdienhonda.com - Máy phát điện là gì ? cấu tạo và ứng dụng , phân loại ...mayphatdienhondacom
 
20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...
20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...
20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...Nguyen Thanh Tu Collection
 

Recently uploaded (16)

TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT VẬT LÝ 2024 - TỪ CÁC TRƯỜNG, TRƯ...
TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT VẬT LÝ 2024 - TỪ CÁC TRƯỜNG, TRƯ...TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT VẬT LÝ 2024 - TỪ CÁC TRƯỜNG, TRƯ...
TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT VẬT LÝ 2024 - TỪ CÁC TRƯỜNG, TRƯ...
 
sách các Bài tập kinh tế vi mô chọn lọc.
sách các Bài tập kinh tế vi mô chọn lọc.sách các Bài tập kinh tế vi mô chọn lọc.
sách các Bài tập kinh tế vi mô chọn lọc.
 
TÀI LIỆU DẠY THÊM HÓA HỌC 12 - SÁCH MỚI (BẢN HS+GV) (FORM BÀI TẬP 2025 CHUNG ...
TÀI LIỆU DẠY THÊM HÓA HỌC 12 - SÁCH MỚI (BẢN HS+GV) (FORM BÀI TẬP 2025 CHUNG ...TÀI LIỆU DẠY THÊM HÓA HỌC 12 - SÁCH MỚI (BẢN HS+GV) (FORM BÀI TẬP 2025 CHUNG ...
TÀI LIỆU DẠY THÊM HÓA HỌC 12 - SÁCH MỚI (BẢN HS+GV) (FORM BÀI TẬP 2025 CHUNG ...
 
BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CHÂN TRỜI ...
BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CHÂN TRỜI ...BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CHÂN TRỜI ...
BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CHÂN TRỜI ...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
xemsomenh.com-Bố cục của lá số tử vi như thế nào.pdf
xemsomenh.com-Bố cục của lá số tử vi như thế nào.pdfxemsomenh.com-Bố cục của lá số tử vi như thế nào.pdf
xemsomenh.com-Bố cục của lá số tử vi như thế nào.pdf
 
Talk Academy Presentation 2024 (ENG) MICE.pdf
Talk Academy Presentation 2024 (ENG) MICE.pdfTalk Academy Presentation 2024 (ENG) MICE.pdf
Talk Academy Presentation 2024 (ENG) MICE.pdf
 
ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 THPT MÔN TOÁN CÁC TỈNH NĂM HỌC 2023-2024 CÓ ...
ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 THPT MÔN TOÁN CÁC TỈNH NĂM HỌC 2023-2024 CÓ ...ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 THPT MÔN TOÁN CÁC TỈNH NĂM HỌC 2023-2024 CÓ ...
ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 THPT MÔN TOÁN CÁC TỈNH NĂM HỌC 2023-2024 CÓ ...
 
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
 
15 ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 SỞ GIÁO...
15 ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 SỞ GIÁO...15 ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 SỞ GIÁO...
15 ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 SỞ GIÁO...
 
Đề cương môn Xã hội Chủ nghĩa Khoa học (sơ lược)
Đề cương môn Xã hội Chủ nghĩa Khoa học (sơ lược)Đề cương môn Xã hội Chủ nghĩa Khoa học (sơ lược)
Đề cương môn Xã hội Chủ nghĩa Khoa học (sơ lược)
 
BÀI TẬP BỔ TRỢ 4 KỸ NĂNG TIẾNG ANH 11 CẢ NĂM - GLOBAL SUCCESS - NĂM HỌC 2023-...
BÀI TẬP BỔ TRỢ 4 KỸ NĂNG TIẾNG ANH 11 CẢ NĂM - GLOBAL SUCCESS - NĂM HỌC 2023-...BÀI TẬP BỔ TRỢ 4 KỸ NĂNG TIẾNG ANH 11 CẢ NĂM - GLOBAL SUCCESS - NĂM HỌC 2023-...
BÀI TẬP BỔ TRỢ 4 KỸ NĂNG TIẾNG ANH 11 CẢ NĂM - GLOBAL SUCCESS - NĂM HỌC 2023-...
 
CHƯƠNG 5. TTHCM VỀ VĂN HÓA, ĐẠO ĐỨC, CON NGƯỜI
CHƯƠNG 5. TTHCM VỀ VĂN HÓA, ĐẠO ĐỨC, CON NGƯỜICHƯƠNG 5. TTHCM VỀ VĂN HÓA, ĐẠO ĐỨC, CON NGƯỜI
CHƯƠNG 5. TTHCM VỀ VĂN HÓA, ĐẠO ĐỨC, CON NGƯỜI
 
Vợ chồng A Phủ - Tô Hoài - phân tích chi tiết
Vợ chồng A Phủ - Tô Hoài - phân tích chi tiếtVợ chồng A Phủ - Tô Hoài - phân tích chi tiết
Vợ chồng A Phủ - Tô Hoài - phân tích chi tiết
 
mayphatdienhonda.com - Máy phát điện là gì ? cấu tạo và ứng dụng , phân loại ...
mayphatdienhonda.com - Máy phát điện là gì ? cấu tạo và ứng dụng , phân loại ...mayphatdienhonda.com - Máy phát điện là gì ? cấu tạo và ứng dụng , phân loại ...
mayphatdienhonda.com - Máy phát điện là gì ? cấu tạo và ứng dụng , phân loại ...
 
20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...
20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...
20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...
 

Intro Parallel Computing for student11.pdf

  • 1. Tài liệu: Introduction to Parallel Computing Blaise Barney, Lawrence Livermore National Laboratory https://computing.llnl.gov/tutorials/parallel_comp/ Tính toán song song và phân tán PGS.TS. Trần Văn Lăng langtv@vast. vn 1 L ậ p tr ì nh song song v ớ i Python 2 1. T ổ ng quan 2. S ự kh á c bi ệ t gi ữ a Thread v à Process 3. Song song d ữ li ệ u 4. S ử dung Thread 5. S ử d ụ ng Process 6. Đa x ử l ý trong Khoa h ọ c d ữ li ệ u T ổ ng quan • L ậ p tr ì nh song song v ớ i Python c ó th ể ti ế p c ậ n theo c á c c á ch như: – D ù ng thư vi ệ n c ủ a c ủ a Python • Threading, multiprocessing – D ù ng ScientificPython • Scientific.BSP • Scientific.DistributiedComputing – IPython • Interactive shell for working with clusters – Kh á c • pyMPI, mpi4py, pypar 3 • Đ ể ki ể m tra c ấ u h ì nh c ủ a m á y, s ử d ụ ng g ó i platform (sysinfor.py) 4
  • 2. • Đ ể bi ế t s ố core c ủ a m á y, s ử dung g ó i multiprocessing 5 • M ộ t s ố k ế t qu ả th ử nghi ệ m 6 • Đ ể bi ế t t ê n v à đ ị a ch ỉ IP c ủ a m á y (hostname.py) 7 • Để đo thời gian thực thi, d ù ng h à m time() c ó trong g ó i time (elapsetime.py) 8 C ó th ể coi th ê m t ạ i https://www.tutorialspoint.com/python/python_date_time.htm
  • 3. Thread v à Process • Process (ti ế n tr ì nh) l à m ộ t th ự c th ể (instance) c ủ a chương tr ì nh m á y t í nh. • Ti ế n tr ì nh sinh ra c á c Threads (lu ồ ng) hay c ò n g ọ i l à sub-processes (ti ể u ti ế n tr ì nh) đ ể x ử l ý c á c nhi ệ m v ụ ph ụ . Ch ẳ ng h ạ n, đ ọ c c á c ph í m đư ợ c nh ấ n (keystrokes), hi ể n th ị k ý t ự v ừ a đ ọ c l ê n m à n h ì nh, n ạ p m ộ t trang v ă n b ả n t ừ đ ĩ a v à o b ộ nh ớ sau đ ó hi ể n th ị l ê n m à n h ì nh, ghi t ậ p tin v à o đ ĩ a, ... • Threads t ồ n t ạ i (live) b ê n trong ti ế n tr ì nh v à chia s ẻ c ù ng kh ô ng gian b ộ nh ớ c ủ a Process. 9 • V í d ụ , khi m ở m ộ t ứ ng d ụ ng so ạ n th ả o v ă n b ả n; c ó ngh ĩ a l à ch ú ng ta t ạ o ra m ộ t Process. • Khi b ắ t đ ầ u nh ậ p, Process sinh ra c á c Threads ch ẳ ng h ạ n như: – đ ọ c c á c ph í m b ấ m – hi ể n th ị v ă n b ả n – t ự đ ộ ng lưu t ậ p tin l ạ i – l à m n ổ i b ậ t (highlight) c á c l ỗ i ch í nh t ả khi nh ậ p 10 • B ằ ng c á ch sinh ra nhi ề u Thread, Chương tr ì nh so ạ n th ả o v ă n b ả n t ậ n d ụ ng th ờ i gian nh à n r ỗ i c ủ a CPU (ch ờ đ ợ i c á c ph í m b ấ m ho ặ c t ả i t ậ p tin v ề ) qua đ ó l à m cho c ô ng vi ệ c c ó n ă ng su ấ t hơn. 11 • Như v ậ y v ề vi ệ c s ử dung b ộ nh ớ : Threads v à Processes l à kh á c nhau: – Threads d ù ng shared-memory, trong khi đ ó Processes th ì c ó th ể kh ô ng. – S ự đ ồ ng b ộ h ó a v ề d ữ li ệ u l à c ầ n thi ế t đ ố i v ớ i c á c Threads, nhưng v ớ i Processes l à c ó th ể kh ô ng c ầ n 12
  • 4. Process • M ộ t Process c ó th ể c ó nhi ề u Thread • Process đư ợ c t ạ o ra b ở i h ệ đi ề u h à nh đ ể th ự c thi chương tr ì nh • Hai Process c ó th ể thi h à nh đ ồ ng th ờ i m ộ t đo ạ n code trong chương tr ì nh Python • Khi m ở v à đ ó ng Process t ố n nhi ề u th ờ i gian hơn so v ớ i m ở đ ó ng Thread • Trong trư ờ ng h ợ p kh ô ng chia s ẻ kh ô ng gian b ộ nh ớ , th ì vi ệ c chia s ẻ th ô ng tin gi ữ a c á c Process ch ậ m hơn gi ữ a c á c Thread 13 Threads • Thread như l à nh ữ ng ti ế n tr ì nh nh ỏ (mini- processes) t ồ n t ạ i b ê n trong Process • Thread chia s ẻ kh ô ng gian b ộ nh ớ n ê n c á c bi ế n đư ợ c dung chung trong vi ệ c đ ọ c ghi • Hai Threads kh ô ng th ể th ự c thi đ ồ ng th ờ i c ù ng m ộ t đo ạ n code trong chương tr ì nh Python 14 V í d ụ v ề s ự kh á c nhau • H à m (myFunc) xu ấ t ID c ủ a thread đang ho ạ t đ ộ ng. • Khi g ọ i h à m n à y nhi ề u l ầ n, ID n à y đư ợ c lưu tr ữ l ạ i trong m ộ t m ả ng to à n c ụ c A. 15 • K í ch ho ạ t 10 l ầ n đ ể cho Thead g ọ i h à m myFunc() đ ã t ạ o ở tr ê n. • Vi ệ c k ế t th ú c m ộ t thread đ ể chuy ể n sang thread kh á c l à kh ô ng đ ặ t ra ngay khi m ộ t thread đư ợ c start; ch í nh v ì v ậ y c á c thread c ầ n đư ợ c lưu tr ữ v à o trong m ả ng th đ ể s ử d ụ ng v ề sau. 16
  • 5. • Sau đ ó m ớ i l ầ n lư ợ t đ ợ i cho c á c thread n à y ho à n th à nh c ô ng vi ệ c b ằ ng h à m join(). • Sau khi xong, k ế t qu ả c ó trong bi ế n to à n c ụ c A đư ợ c xu ấ t ra 17 K ế t qu ả th ự c thi chương tr ì nh v ớ i Thread 18 Nh ậ n x é t • Do th ờ i gian sleep kh á c nhau, n ê n c á c thread k ế t th ú c kh ô ng gi ố ng nhau, d ẫ n đ ế n th ứ t ự c ô ng vi ệ c kh ô ng theo th ứ t ự c ủ a c â u l ệ nh l ặ p for • Thread theo cơ ch ế s ử d ụ ng b ộ nh ớ chia s ẻ , n ê n bi ế n A c ó hi ệ u l ự c trong thread (ID...64) ch í nh v à c á c thread kh á c (ID...52, ID...88, ..., ID...60). V ì v ậ y m ả ng A ban đ ầ u r ỗ ng, sau khi th ự c hi ệ n m ả ng A g ồ m 10 ph ầ n t ử l à c á c Thread ID. 19 • Như v ậ y, bi ế n to à n c ụ c A đư ợ c s ử d ụ ng chung gi ữ a c á c thread v ớ i nhau (shared-memory) • V ớ i chương tr ì nh như tr ê n; nhưng thay v ì d ù ng Thread, d ù ng Process th ì bi ế n to à n c ụ c A n à y kh ô ng t á c đ ộ ng gi ữ a c á c process • C ầ n import 20
  • 6. • H à m đ ể c á c process th ự c hi ệ n 21 • Th ự c thi t ấ t c ả c á c process 22 K ế t qu ả th ự c thi chương tr ì nh v ớ i Process 23 Lưu ý • D ù ng Process nhưng đ ể c ó k ế t qu ả như Thread, c ầ n ph ả i lưu gi á tr ị v à o trong m ộ t h à ng đ ợ i b ằ ng c á ch khai b á o bi ế n Q = Queue(). • Sau đ ó đ ẩ y k ế t qu ả c ầ n lưu v à o trong h à ng đ ợ i n à y. Ch ẳ ng h ạ n, Q.put( os.getpid() ). • Cu ố i c ù ng, đ ể xu ấ t ra v à đưa v à o m ả ng A qua l ệ nh A.append( Q.get() ) 24
  • 7. • Chương tr ì nh vi ế t l ạ i như sau 25 26 K ế t qu ả 27 Song song d ữ li ệ u • multiprocessing l à m ộ t g ó i c á c API h ỗ tr ợ đ ể ph á t sinh c á c Process; qua đ ó gi ú p t ậ n d ụ ng đư ợ c nhi ề u b ộ x ử l ý đ ể vi ế t chương tr ì nh. • Gi ả s ử c ó m ộ t c ô ng vi ệ c (vi ế t dư ớ i d ạ ng m ộ t h à m) đư ợ c th ự c hi ệ n tr ê n nhi ề u d ữ li ệ u kh á c nhau (Data Parallelism). 28
  • 8. • V í d ụ : C ầ n t í nh c ă n b ậ c 2 c ủ a 3 s ố . • C á c c â u l ệ nh tu ầ n t ự c ó th ể vi ế t như sau: 29 • Ho ặ c như sau v ớ i h à m map() 30 • Khi c ầ n giao cho nhi ề u Process t í nh, ch ẳ ng h ạ n v ớ i 3 Process: 31 • Trong đ ó , đ ố i tư ợ ng Pool cung c ấ p m ộ t phương ti ệ n đ ể song song h ó a vi ệ c th ự c hi ệ n m ộ t h à m qua nhi ề u gi á tr ị đ ầ u v à o, v à ph â n ph ố i d ữ li ệ u đ ầ u v à o cho c á c Process. 32
  • 9. • V ớ i h à m nhi ề u đ ố i s ố . • V í d ụ : Gi ả i 3 phương tr ì nh b ậ c I d ạ ng ax+b=0 33 • Lưu ý : khi d ù ng v ớ i đ ố i tư ợ ng thu ộ c l ớ p Pool, h à m map() n à y kh ô ng chuy ể n đ ổ i nhi ề u đ ố i s ố đư ợ c. • Đ ể thu ậ n l ợ i, c ó th ể d ù ng m ộ t l ớ p Container, ch ẳ ng h ạ n d ù ng g ó i collections đ ể gom c á c đ ố i s ố c ủ a h à m th à nh m ộ t nh ó m. • Ch ẳ ng h ạ n, h à m f(a,b) c ó 2 đ ố i s ố đ ể gi ả i phương tr ì nh b ậ c nh ấ t như tr ê n, c ó th ể vi ế t l ạ i th à nh m ộ t đ ố i s ố f(item) 34 35 • Trong đ ó , item c ó 2 th à nh ph ầ n l à a v à b • Khi s ử d ụ ng, ph ả i t ạ o ra ki ể u đ ố i s ố n à y: 36
  • 10. • Khi s ử d ụ ng 37 • C ó th ể so s á nh th ờ i gian th ự c hi ệ n c ủ a chương tr ì nh song song so v ớ i tu ầ n t ự qua v í d ụ gi ả i phương tr ì nh. 38 S ử d ụ ng Thread • D ù ng l ớ p Thread trong g ó i threading. • Ch ẳ ng h ạ n, c ầ n k í ch ho ạ t m ộ t Thread đ ể th ự c hi ệ n c ô ng vi ệ c qua h à m c ó s ẵ n (gi ả i phương tr ì nh eqI) 39 S ử d ụ ng Process • Tương t ự như Thread, c ó th ể d ù ng l ớ p Process trong g ó i multiprocessing đ ể th ự c thi h à m eqI() • V ớ i k ế t qu ả 40
  • 11. Threads v à Processes • Gi ả s ử c ó m ộ t chương tr ì nh ch ỉ ch ờ cho h ế t th ờ i gian (đ ặ t t ê n l à sleeping()), kh ô ng th ự c hi ệ n b ấ t k ỳ t í nh to á n n à o như sau: 41 • N ế u run chương tr ì nh n à y tr ê n t ấ t c ả c á c Thread c ủ a m á y qua v í d ụ : 42 • Th ì th ờ i gian th ự c thi l à th ờ i gian c ủ a Thread l â u nh ấ t: 43 4 lần gọi Các Threads của Process 6269 • N ế u run chương tr ì nh n à y tr ê n t ấ t c ả c á c Process, m ỗ i Process s ử dung Thread ch í nh: 44
  • 12. • Trong trư ờ ng h ợ p n à y, th ờ i gian th ự c thi tr ê n c á c Process c ũ ng l à th ờ i gian l â u nh ấ t c ủ a m ộ t Process n à o đ ó trong c á c Process đư ợ c k í ch ho ạ t 45 • Nhưng khi c ó m ộ t chương tr ì nh c ó t í nh to á n (đ ặ t t ê n l à calculating()) 46 • Th ờ i gian th ự c thi c ủ a Process v à Thread l à kh á c bi ệ t: 47 Truy ề n v à nh ậ n d ữ li ệ u • Chương tr ì nh Python t ạ o 2 Process, Master v à Slave. • Process Master g ử i m ộ t m ả ng 10 gi á tr ị ng ẫ u nhi ê n đ ế n Process Slave • Process Slave nh ậ n v à xu ấ t ra m à n h ì nh 48
  • 13. • M ộ t s ố import c ầ n thi ế t 49 • H à m Master() đ ể t ạ o gi á tr ị ng ẫ u nhi ê n v à g ử i • H à m Slave() đ ể nh ậ n r ồ i xu ấ t ra m à n h ì nh 50 • Chương tr ì nh s ử d ụ ng đ ố i tư ợ ng k ế t n ố i đư ợ c sinh ra b ở i Pipe M ộ t v à i v í d ụ • V í d ụ c ầ n t í nh t ổ ng c ủ a N s ố th ự c c ó gi á tr ị đư ợ c t ạ o ng ẫ u nhi ê n trong kho ả ng [0,1). import numpy as np N = 10000000 a = np.random.random(N) 51 • H à m t í nh t ổ ng c ó th ể vi ế t def psum( ib, ie ): s = 0.0 for i in range(ib,ie+1): s += a[i] return s 52
  • 14. • Đ ể t í nh t ổ ng tu ầ n t ự c ủ a N s ố n à y: t0 = time.time() psum(0,N-1) print( "Tuần tự: Thời gian tr ô i qua %8.6f gi â y" % (time.time()-t0) ) 53 • Trong trư ờ ng h ợ p c ầ n d ù ng đ ố i tư ợ ng Pool c ó trong g ó i Multiprocessing, ch ú ng ta s ử d ụ ng h à m psum() nhi ề u l ầ n, m ỗ i l ầ n l à m ộ t ti ế n tr ì nh t í nh t ổ ng m ộ t đo ạ n nh ỏ . Khi đ ó c ầ n ph ả i s ử d ụ ng h à m map() đ ể t ạ o m ộ t d ã y l ặ p l ạ i. 54 • Nhưng do h à m psum() c ó 2 đ ố i s ố (c ó 2 tham s ố khi g ọ i h à m), n ê n ph ả i vi ế t th ê m m ộ t h à m đ ể chuy ể n vi ệ c g ọ i h à m nhi ề u tham s ố v ề 1 tham s ố như sau: def multirun(args): return psum(*args) 55 • Gi ả s ử d ù ng 4 ti ế n tr ì nh cho vi ệ c t í nh to á n song song n à y, chương tr ì nh vi ế t như sau: from multiprocessing import Pool t0 = time.time() l1 = [0, int(N/4), int(N/2), int(3*N/4)] l2 = [int(N/4)-1, int(N/2)-1, int(3*N/4)-1, N-1] l3 = zip(l1,l2) 56
  • 15. p = Pool(4) result = p.map( multirun, l3 ) print( "Sử dụng Pool: Thời gian tr ô i qua %8.6f gi â y" % (time.time()-t0) ) print( "Tổng l à %10.6f" % sum(result) ) 57 • Lưu ý r ằ ng, – Do h à m multirun() ch ỉ c ó 1 đ ố i s ố , n ê n ph ả i d ù ng h à m zip() đ ể chuy ể n 2 danh s á ch v ề 1 danh s á ch. – Đ ể bi ế t k ế t qu ả sau c ù ng, c ó th ể d ù ng h à m sum() c ủ a g ó i Python chu ẩ n đ ể t í nh to á n. • Ch ú ng ta c ó th ể s ử d ụ ng đ ố i tư ợ ng Process ho ặ c Thread đ ể th ự c hi ệ n c ô ng vi ệ c n à y. C á ch th ứ c c ũ ng ho à n to à n như nhau: 58 import threading as th t0 = time.time() t1 = th.Thread(target = psum, args = [0,int(N/4)-1]) t2 = th.Thread(target = psum, args = [int(N/4),int(N/2)-1]) t3 = th.Thread(target = psum, args = [int(N/2),int(3*N/4)-1]) t4 = th.Thread(target = psum, args = [int(3*N/4),N-1]) 59 t1.start() t2.start() t3.start() t4.start() t1.join() t2.join() t3.join() t4.join() print( "Sử dụng Thread: Thời gian tr ô i qua %8.6f gi â y" % (time.time()-t0) ) 60
  • 16. • Tuy nhi ê n, đ ể t í nh đư ợ c t ổ ng c ủ a t ấ t c ả c á c ph ầ n t ừ , h à m psum() đư ợ c hi ệ u ch ỉ nh như sau: result = [] def psum( ib, ie ): s = 0.0 for i in range(ib,ie+1): s += a[i] result.append( s ) return s 61 • C á ch th ứ c gi ả i quy ế t d ù ng Process c ũ ng tương t ự Thread. Tuy nhi ê n, do c á c process kh ô ng chia s ẻ kh ô ng gian b ộ nh ớ , n ê n đ ể c ó k ế t qu ả l à t ổ ng c ủ a to à n b ộ c á c ph ầ n t ử c ầ n t í nh, ph ả i s ử d ụ ng th ê m đ ố i tư ợ ng Queue đ ể lưu tr ữ . from multiprocessing import Queue Q = Queue() def psump( ib, ie ): s = 0.0 for i in range(ib,ie+1): s += a[i] Q.put(s) return s 62 • Khi đ ó , vi ệ c t í nh t ổ ng đư ợ c x ử l ý sau khi c á c ti ế n tr ì nh t í nh to á n như sau: t0 = time.time() p1 = mp.Process(target = psump, args = [0,int(N/4)-1]) p2 = mp.Process(target = psump, args = [int(N/4),int(N/2)-1]) p3 = mp.Process(target = psump, args = [int(N/2),int(3*N/4)-1]) p4 = mp.Process(target = psump, args = [int(3*N/4),N-1]) p1.start() p2.start() p3.start() p4.start() 63 p1.join() p2.join() p3.join() p4.join() result = [] while not Q.empty(): result.append( Q.get() ) print( "Sử dụng Process: Thời gian tr ô i qua %8.6f gi â y" % (time.time()-t0) ) print( "Tổng l à %10.6f" % sum(result) ) 64
  • 17. • K ế t qu ả c ả 3 trư ờ ng h ợ p v à t í nh to á n tu ầ n t ự v ớ i N l à 10 tri ệ u như sau: 65 • V í d ụ t í nh s ố đơn gi ả n nh ấ t l à d ù ng h à m Arctan(x). • Ta bi ế t • Suy ra 𝜋 tan ( 𝜋 4 ) = 1 arctan(1) = 𝜋 4 66 • M à khai tri ể n Taylor c ủ a h à m arctan() l à 𝑎 𝑟 𝑐 𝑡 𝑎 𝑛 ( 𝑥 ) = 𝑥 − 𝑥 3 3 + 𝑥 5 5 − 𝑥 7 7 + … + (−1) 𝑛 −1 𝑥 2 𝑛 −1 2 𝑛 − 1 + 𝑂 ( 𝑥 2 𝑛 −1 ) 67 • T ừ đ â y suy ra 𝜋 4 ≈ 1 − 1 3 + 1 5 − 1 7 + … + (−1) 𝑛 −1 1 2 𝑛 − 1 = 𝑛 ∑ 𝑖 =1 (−1) 𝑖 −1 1 2 𝑖 − 1 68
  • 18. • Đ ể s ử d ụ ng l ạ i h à m psum() ở tr ê n, c ó th ể vi ế t đơn gi ả n b ằ ng c á ch t ạ o m ả ng a, thay v ì ng ẫ u nhi ê n trong [0,1) th ì a là c á c s ố h ạ ng trong t ổ ng ở tr ê n. a = [] sign = 1 for i in range(N): a.append(sign/(2*(i+1)-1)) sign = -sign 69 • V í d ụ , d ù ng đ ố i tư ợ ng Pool đ ể t í nh, to à n b ộ chương tr ì nh c ó th ể vi ế t như sau: import time from multiprocessing import Pool def multirun(args): return psum(*args) def psum( ib, ie ): s = 0.0 for i in range(ib,ie+1): s += a[i] return s 70 N = 10000000 a = [] sign = 1 for i in range(N): a.append(sign/(2*(i+1)-1)) sign = -sign l1 = [0, int(N/4), int(N/2), int(3*N/4)] l2 = [int(N/4)-1, int(N/2)-1, int(3*N/4)-1, N-1] l3 = zip(l1,l2) p = Pool(4) result = p.map( multirun, l3 ) print( "Số Pi l à %54.52f" % (4*sum(result)) ) 71 • V í d ụ d ữ li ệ u ph â n t á n • Trong c á c v í d ụ tr ê n, ch ú ng ta th ự c hi ệ n c á c thao t á c đ ể r ồ i c ù ng chia s ẻ m ộ t v ù ng b ộ nh ớ chung. Ch ẳ ng h ạ n v ớ i Pool ho ặ c v ớ i Thread, d ữ li ệ u đư ợ c t í nh to á n sau đ ó t ậ p trung v à o list c ó t ê n l à result. V ớ i Process, k ế t qu ả c ủ a c á c process đư ợ c đưa v à o h à ng đ ợ i Q, sau đ ó t ừ h à ng đ ợ i đưa v à o result n à y đ ể t í nh t ổ ng tr ê n list. 72
  • 19. • Gi ả s ử chương tr ì nh t í nh to á n l à m nh ữ ng c ô ng vi ệ c kh á c nhau tr ê n c ù ng m ộ t d ữ li ệ u, nhưng do m ỗ i process lưu tr ữ trong v ù ng b ộ nh ớ ri ê ng như m ộ t h ệ th ố ng ph â n t á n (Distributed System). • Ch ẳ ng h ạ n, process đ ó ng vai tr ò master ch ị u tr á ch nhi ệ m t ạ o m ộ t ma tr ậ n l à c á c gi á tr ị th ự c ng ẫ u nhi ê n thu ộ c đo ạ n [0,1), sau đ ó g ử i v ề cho process đ ó ng vai tr ò slave. Process n à y ch ị u tr á ch nhi ệ m nh â n ma tr ậ n n à y v ớ i ma tr ậ n ngh ị ch đ ả o r ồ i g ử i chu ẩ n-2 c ủ a ma tr ậ n t í ch n à y v ề cho master đ ể xu ấ t ra m à n h ì nh. 73 • Chương tr ì nh đư ợ c vi ế t như sau: import numpy as np import multiprocessing as mp N = 10 M = 10 def master( conn ): ma_a = np.random.random((N,M)) conn.send(ma_a) norm = conn.recv() print( "Norm is %20.18f" % norm ) conn.close() 74 def slave( conn ): sl_b = conn.recv() norm2 = np.linalg.norm(np.dot(sl_b,np.linalg.inv(sl_b)),2) conn.send( norm2 ) conn.close() ma_conn, sl_conn = mp.Pipe() ma_p = mp.Process( target = master, args = (sl_conn,) ) sl_p = mp.Process( target = slave, args = (ma_conn,) ) ma_p.start() sl_p.start() ma_p.join() sl_p.join() 75 S ử d ụ ng trong Khoa h ọ c d ữ li ệ u • C ó hai á p d ụ ng đa x ử l ý trong Khoa h ọ c d ữ li ệ u: • X ử l ý nh ậ p xu ấ t: Th ô ng thư ờ ng vi ệ c ghi d ữ li ệ u l ê n Data Warehouses n à o đ ó thư ờ ng m ấ t nhi ề u th ờ i gian hơn l à vi ệ c đ ọ c d ữ li ệ u đ ể đưa v à o x ử l ý . N ê n vi ệ c ghi đư ợ c th ự c hi ệ n song song s ẽ hi ệ u qu ả . • X â y d ự ng m ô h ì nh hu ấ n luy ệ n: kh ô ng ph ả i t ấ t c ả c á c m ô h ì nh đư ợ c hu ấ n luy ệ n theo c á ch song song, nhưng m ộ t s ố m ô h ì nh c ó th ể th ự c hi ệ n theo c á ch n à y. Ch ẳ ng h ạ n Random Forest đư ợ c tri ể n khai tr ê n nhi ề u c â y quy ế t đ ị nh (Decision Tree) đ ể l ấ y m ộ t quy ế t đ ị nh t í ch lu ỹ 76
  • 20. • C ũ ng lưu ý , trong thư vi ệ n sklearn c ó cung c ấ p tham s ố n_jobs gi ú p cho vi ệ c s ử d ụ ng nhi ề u task. • V í d ụ minh ho ạ : gi ả s ử c ó c ô ng vi ệ c dowork() c ầ n gi ả i quy ế t trong 2 l ầ n. 77 • S ử d ụ ng Multi-Processing 78 79