Tải bản đầy đủ (.pdf) (22 trang)

20 CÂU HỎI - MÔN TÍNH TOÁN SONG SONG FIX

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (845.65 KB, 22 trang )

20 CÂU HỎI - MƠN TÍNH TỐN SONG SONG ( Fix)
1. Vẽ và trình bày máy tính kiểu MISD

• Một dòng dữ liệu duy nhất được đưa vào các đơn vị đa xử lý.
• Mỗi đơn vị xử lý hoạt động trên các dữ liệu một cách độc lập thông qua các luồng chỉ
thị độc lập khác nhau
- Kiến trúc MISD được chia làm 2 nhóm cơ bản:
 Thứ nhất, nhóm máy tính u cầu có các cơng việc khác nhau, các phân tử xử lý
khác nhau có thể nhận những chỉ lệnh khác nhau để thực hiện trên một mục dữ
liệu
 Thứ hai, nhóm máy tính có các luồng dữ liệu được chuyển tuần tự theo dãy các
PE ( Processing Element- phần tử xử lý) liên tiếp.Hoạt động của máy tính theo
kiến trúc này giống như hệ tuần hồn nên cịn được gọi là hệ tâm thu, như hình
trên.
2. Vấn đề tính tốn song song hiện nay rất khả thi, điều kết luận này dựa trên các
yếu tố nào?
- Giá thành CPU giảm mạnh , do đó có thể tạo lập các hệ thống đa bộ vi xử lý với chi
phí hợp lý.
- Sự phát triển của mạc tích hợp VLSI ( Very Large Scale Integration – độ tích hợp rất
cao) cho phép tạo ra các hệ phức hợp với hàng triệu tranzito trên mơt chip.
- Tốc độ tính toán của các bộ xử lý kiểu tuần tự bị hạn chế, nên phải tìm cách tính tốn
song song.

1


3. Hai vec tơ A và B cùng có 20 phần tử và cùng kiểu dữ liệu số và 5 bộ xử lý. Hãy
chỉ ra chương trình tính tổng hai véc tơ theo các 5 tiến trình khi dùng cấu trúc
Forall
Cho hai vec tơ A và B cùng có N phần tử và cùng kiểu dữ liệu số. Chương trình tính tổng
hai véc tơ là:


forall (i = 0 ; i < N; i++) {
C[i] = A[i] + B[i];

//(1)

}
Thực hiện song song hóa đoạn chương trình này như thế nào?
Tương tự như ví dụ nêu trên, giả sử ta có M tiến trình. Chúng ta có thể chia N phần tử
thành M phần (thường ta giả thiết N chia hết cho M, nghĩa là N/M là số nguyên) và gán
từng phần đó cho mỗi tiến trình. Chu trình trên có thể viết thành:
forall (j = id * N/M ; j < (id+1) * N/M ; j++){
C(j) = A[j] + B[j] ;
}
Trong đó, id là số hiệu của tiến trình, chạy từ 0 đến M-1. Tiến trình thứ i xử lý N/M
phần tử liên tiếp kể từ i * N/M +1, ví dụ hình 4.4-1(a).
Hoặc ta có thể cho phép các tiến trình truy cập xen kẽ vào các phần tử của mảng như
sau:
Tiến trình Pi bắt đầu từ phần tử thứ i, sau đó bỏ qua M phần tử để xử lý phần tử tiếp
theo, nghĩa là nó truy cập đến i, i+M, i+2M , ... , ví dụ hình 4.1-1(b).
Chu trình (1) khi đó được viết như sau:
forall (j=id ; j < N ; j+ = M) {
C[j] = A[j] + B[j];
}
Ví dụ: Khi N = 20 và M = 5 thì việc gán các phần tử của vector cho các tiến trình sẽ
được thực hiện theo cách trên như sau:
P1
1
2
3
4


P2
5
6
7
8

P3
P4
P5
P1
P2
P3
P4
9
13
17
1
2
3
4
10
14
18
6
7
8
9
11
15

19
11
12
13
14
12
16
20
16
17
18
19
(a)
(b)
Hình 4.1-1. Các cách phân chia chu trình của một mảng tuần tự

2

P5
5
10
15
20


4. Cho bảng sau và ba bộ xử lí như nhau. Hãy cân bàng tải cho q trình tính tốn
song song.
tn

0.23s


xn 1

0.2s

0.3s

0.1s

0.21s 0.13s 0.15s 0.3s

0.1s 0.11s 0.28s

2

3

4

5

9

6

7

8

10


11

Nhận thấy :
Tổng thời gian hồn thành cơng việc 11 tiến trình là : 2.11s và có 3 bộ xử lý như nhau vậy
mỗi bộ xử lý sẽ xử lý tổng thời gian xấp sỉ 0.7s ( cụ thể tg trung bình 3 bộ XL như nhau là :
0.703333s)
Chia các tiến trình cho các Process như sau: ( Tự làm nhé….)
P1 =
P2 =
P3 =
5. Vẽ và trình bày bộ nhớ hỗn hợp
Bộ nhớ hỗn hợp - HDSM (Hybrid Distributed-Shared Memory)

- Các thành phần bộ nhớ chia sẻ thường là máy SMP với bộ nhớ cache coherency. Các
bộ xử lý trên một SMP đã cho có thể được địa hóa chỉ bộ nhớ của máy đó như địa chỉ
tồn cục.
- Bộ nhớ dùng mạng nối nhiều SMPs.
- Các SMPs chỉ biết về bộ nhớ của riêng nó – mà khơng biết bộ nhớ trên SMPs khác. Vì
vậy cần đến mạng truyền thơng để chuyển dữ liệu giữa các SMPs.
- Các xu hướng hiện nay cho thấy kiến trúc bộ nhớ kiểu này sẽ tiếp tục thắng thế và tăng
lên trong tương lai.
- Những thuận lợi và nhược điểm: Những thuận lợi và nhược điểm của HDSM cũng
giống như kiến trúc bộ nhớ chia sẻ lẫn phân phối.
3


Bộ nhớ chia sẻ truy cập ngang quyền (Uniform Memory Access (UMA)) (hay
SMP (Symmetric Multi-Processor))
Ưu điểm của bộ nhớ chia sẻ:

- Khơng gian địa chỉ tồn cục cung cấp cho người lập trình thân thiện với bộ nhớ.
- Chia sẻ dữ liệu giữa các tác vụ vừa nhanh và vừa thống nhất cho các CPUs gần
gũi bộ nhớ cục bộ của nó.
Nhược điểm của bổ nhớ chia sẻ :
- Thiếu khả năng mở rộng giữa bộ nhớ và CPUs. Thêm nhiều CPU làm tăng lưu
lượng truy cập vào bộ nhớ chia sẻ và bộ nhớ đệm cho các hệ thống Card
coherent, tăng lưu lượng cùng với quản lý bộ nhớ cache ở đó.
- Người lập trình phải xây dựng đồng bộ hóa và đảm bảo truy cập "đúng" vào bộ
nhớ tồn cục là vấn đề khơng phải bao giờ cũng dễ - nhất là khi cần truy cập
chéo.
- Thiết kế và sản xuất các máy có bộ nhớ chia sẻ với việc gia tăng số lượng bộ vi
xử lý sẽ làm tăng chi phí.
Ưu điểm của bộ nhớ phân tán -DM
- Cho khả năng mở rộng tuỳ ý số lượng các bộ vi xử lý. Khi tăng số lượng các bộ
vi xử lý thì kích thước của bộ nhớ cũng tăng tương ứng.
- Mỗi bộ xử lý có thể truy cập nhanh chóng bộ nhớ riêng mà khơng cần sự can
thiệp và khơng có thêm chi phí phát sinh để duy trì Cache Coherency.
- Có thể sử dụng các thiết bị sẵn có và rẻ tiền như: các bộ vi xử lý off-the-shelf và
kết nối mạng.
Nhược điểm của bộ nhớ phân tán DM
- Gây khó khăn cho các lập trình viên, vì chương trình liên đới với nhiều chi tiết
liên quan đến dữ liệu và giao tiếp giữa các bộ vi xử lý.
- Các lần truy cập bộ nhớ không đồng đều.

4


6. Viết các cấu trúc lệnh song song và cho ví dụ.
Các cấu trúc lệnh song song
6.1. Cấu trúc Parbegin và Parend, Cobegin và Coend

Trong chương trình, những tiến trình không sử dụng dữ liệu chung hay đôacj lập với nhau
thì thực hiện được đồng thời. Giả thiết các lệnh S1, S2, …, Sn được thực hiện song song trên
n tiến trình ( hay n bộ xử lý) riêng biệt. khi đó chúng ta có thể viết thành khối song song như
sau:
Hoặc Cobegin
Parbegin
S1;

S1;

S2;

S2;

......

......

Sn;

Sn;

Parend

Coend

a. Cấu trúc forall (parfor) và in Par
Nhiều khi một số tiến trình (câu lệnh) tương tự nhau cần phải bắt đầu thực hiện và
cùng lặp lại một số lần. Điều này có thể thực hiện được bằng cấu trúc forall:
forall (i = 0; i < n; i++)

{
S1;
S2;
......
Sn;
}
Hoặc sử dụng cấu trúc
for (i = 0; i < n; i++){
S1;
S2;
......
Sn;
} In Parrallel
+> Cho ví dụ :
?????

5


VD: Giải pháp song song thứ nhất

7. Trình bày loại máy tính SIMD (Single Instruction, Multiple Data) - Đơn chỉ thị,
Đa dữ liệu.

-

Đơn chỉ thị: Tất cả các bộ vị xử lý p1, p2, …, pn cùng thực thi cùng một chỉ thị tại cùng
một chu kỳ đồng hồ đã cho. Chẳng hạn, hình B, chu kỳ đồng hồ thứ nhất, n bộ xử lý này
cùng có một chỉ thị là load, chu kỳ đồng hồ thứ hai, n bộ xử lý cùng có một chỉ thị là load,
… , chu kỳ đồng hồ thứ 4, n bộ xử lý cùng có một chỉ thị là Store,…


-

Đa luồng dữ liệu: Mỗi bộ xử lý có thể hoạt động trên một phần tử dữ liệu khác với dữ liệu
của bộ xử lý khác - có nhiều dữ liệu đang được sử dụng như đầu vào trong một chu kỳ đồng
hồ nào đó. Chẳng hạn, hình B, chu kỳ đồng hồ thứ nhất A(1), A(2), …, A(n); chu kỳ đồng hồ
thứ hai B(1), B(2), …, B(n) ; … , chu kỳ đồng hồ thứ 4 là C(1), C(2), …, C(n); …

-

Loại máy tính này rất phù hợp cho các vấn đề chuyên ngành được đặc trưng bởi mức đồng
bộ cao, chẳng hạn như xử lý đồ họa hoặc hình ảnh,….

-

Đồng bộ và thực hiện tiền định.

-

Hai kiến trúc bộ xử lý hay được sử dụng nhất trong trường hợp này là: Bộ xử lý mảng và xử
lý kiểu đường ống vectơ (Processor Arrays and Vector Pipelines)
6


*Máy tính kiến trúc SIMD chỉ có một CU (Control Unit) để điều khiển nhiều PE (Procesing
Elements - phần tử xử lý) thực hiện theo một luồng lệnh. CU phát lệnh điều khiển tới tất cả các PE,
các PE này cùng thực hiện một phép toán trên các mục dữ liệu khác nhau, nghĩa là mỗi PE có một
luồng dữ liệu riêng. Như vậy SIMD cho phép các Pi khác nhau (hoặc ALU khác nhau) làm cùng
một phép tính trên các tốn hạng khác nhau. Máy tính SIMD có hỗ trợ cách xử lý vector, nghĩa là
gán mỗi thành phần của một vector cho các Pi để thực hiện tính tốn đồng thời. Cấu trúc cơ bản của

SIMD như hình 1-9

Hình B
8. Giả sử có n = 16, hãy chỉ ra các bộ xử lí được kết nối xáo trộn với các bộ xử lí: p3,
p8, p11 và p15
Giả sử có n bộ xử lý p0, p1,…pn-1, với n = 2m , m  N*. Khi đó đường liên kết chiều đi từ i
đến j được xác định như sau:
J=



2i
2 i 1 n

n
0  i  1 (1)
2
n
 i  n 1 (2)
2

Theo đề bài ta có n=16  n/2=8
a. Với P3
P3 tương ứng với i = 3 < n/2 - 1 = 7. nằm trong trường hợp (1)
 2i=2*3=6. Vậy P3 nối với P6
b. Với P8
P8 tương ứng với i = 8 = n/2 = 8. nằm trong trường hợp (2)
 2i+1-n = 2*8+1-16=1. Vậy P8 nối với P1
c. Với P11
P11 tương ứng với i = 11 > n/2 = 8 nằm trong trường hợp (2)

 2i+1-n = 2*11+1-16=7. Vậy P11 nối với P7
d. Với P15
P15 tương ứng với i = 15 > n/2=8 nằm trong trường hợp( 2)
 2i+1-n = 2*15+1-16=15. Vậy P15 nối với chính nó
7


9. Trình bày các phương thức truy cập bộ nhớ
Các phương thức để các bộ xử lý đọc/ghi dữ liệu:
- CR (Concurrent Read) - Đọc đồng thời
Nhiều bộ xử lý có thể đọc đồng thời cùng một vùng nhớ.
- ER (Exclusive Read)- Đọc loại trừ
Giả sử có p bộ xử lý, p bộ xử lý có thể đọc được p vùng nhớ khác nhau. Tuy nhiên mỗi bộ
xử lý chỉ đọc được một vùng nhớ và ngược lại.
- CW (Concurrent Write)- Ghi đồng thời
Nhiều bộ xử lý có thể ghi đồng thời vào cùng một vùng nhớ và cùng một thời điểm.
- EW (Exclusive Write)- Ghi loại trừ
Giả sử có p bộ xử lý, p bộ xử lý ghi được vào p vùng nhớ khác nhau. Tuy nhiên mỗi bộ xử
lý ghi được vào chỉ một vùng nhớ và ngược lại.
Đặc biệt CW lại được chia ra các loại sau:
a) Priority CW – ghi đồng thời có ưu tiên.
Các bộ xử lý được gắn mức ưu tiên và khi có nhiều bộ xử lý muốn ghi dữ liệu vào cùng
một vùng nhớ thì thứ tự ghi được thực hiện từ bộ xử lý có ưu tiên cao nhất đến bộ xử lý có
mức ưu tiên thấp nhất. Các mức ưu tiên có thể được gắn tĩnh hoặc động.
b) Common CW- ghi đồng thời chung.
Trường hợp này chỉ được thực hiện khi tất cả các bộ xử lý cùng ghi vào một vùng nhớ và
đều ghi dữ liệu giống nhau. Khi đó chỉ một bộ xử lý được chỉ định để ghi dữ liệu chung đó.
c) Arbitrary CW – ghi đồng thời tự do.
Một số bộ xử lý đều muốn ghi dữ liệu cùng một lúc vào một vùng nhớ, nhưng một trong
số đó sẽ được chỉ định ghi dữ liệu vào vùng nhớ.

d) Random CW – ghi dữ liệu ngẫu nhiên
Một bộ xử lý nào đó được phép ghi vào vùng nhớ là ngẫu nhiên.
e) Combining CW- ghi đồng thời tổ hợp.
Tất cả dữ liệu mà các bộ xử lý định ghi đồng thời vào bộ nhớ được tổ hợp lại thành một
giá trị và được ghi vào bộ nhớ đó (chẳng hạn ghi cả mảng dữ liệu, cả một bản ghi trong một
quan hệ, một danh sách kiểu Enumeration,…)

8


10.Vẽ và trình bày bộ nhớ chia sẻ truy cập ngang quyền (Uniform Memory Access
(UMA))
Bộ nhớ chia sẻ truy cập ngang quyền (Uniform Memory Access (UMA)) (hay
SMP(Symmetric Multi-Processor))

Hình 2.2. Shared Memory (UMA)
+ UMA hay SMP có nhiều bộ xử lý, mỗi bộ xử lý giải quyết cơng việc riêng, ví dụ nhập xuất
dữ liệu, in thông tin ra,...
+ Các bộ vi xử lý là đồng nhất - giống hệt nhau về mọi phương diện.
+ Các bộ xử lý có quyền bình đẳng truy cập và số lần truy cập vào bộ nhớ.
+ Loại CC-UMA (Cache Coherent UMA). UMA có lắp thêm Cache Coherent khi đó nếu một
bộ xử lý cập nhật một vị trí trong bộ nhớ chia sẻ, thì tất cả các bộ xử lý khác đều biết về sự
cập nhật này. Cache Coherent được thực hiện ở cấp phần cứng.
Tất cả các bộ xử lý làm việc nhờ vào cơ chế chuyển mạch tập trung (Central
Switching) để điều khiển việc truy cập tới bộ nhớ chia sẻ. Thời gian để truy cập vào bộ nhớ
là như nhau cho mọi bộ nhớ xử lý nên có tên gọi là mơ hình UMA của bộ nhớ chia sẻ.
Các cơ chế chuyển mạch có thể được thể hiện bởi các phương pháp sau:
- Sử dụng chung đường dẫn (Common Bus).
Dùng cách chuyển mạch chéo (Crossbar Switch).
Dùng mạng đa giai đoạn (Multi Stage Network).


9


11.Viết một đoạn gỉa mã thể hiện việc biến đổi mã lệnh chương trình bằng các biến
quy nạp làm tăng được mức độ song song của chương trình.
Xét đoạn chương trình sau:
m=0
FOR i = 1 to N
m=m+k
(m là biến quy nạp)
x[m] = a[i]
ENDFOR
Hiển nhiên là hai câu lệnh trên có sự phụ thuộc dữ liệu vì m được sử dụng chéo giữa
các vịng lặp. Khi vịng lặp trước tính giá trị của m và giá trị này được sử dụng ở lệnh thứ hai
thì vịng lặp hiện thời khơng biết được giá trị của m. Do đó, chúng phải thực hiện tuần tự.
Tuy nhiên, hãy xét cái gì sẽ xảy ra đối với m? Nếu với mỗi vòng lặp chúng ta dự báo được
giá trị của m thì có thể sẽ loại bỏ được sự phụ thuộc dữ liệu liên quan đến m.
Lưu ý: Giá trị k là bất biến trong các vòng lặp và được cộng liên tiếp vào sau mỗi vòng
lặp, do vậy, ở vòng lặp thứ i, m = i*k.
Đoạn chương trình trên được viết thành:
FOR i = 1 to N
x[i*k] = a[i]
ENDFOR
Ta nhận thấy ngay, các vịng lặp của chu trình này khơng phụ thuộc vào nhau, do vậy
chúng ta có thể thực hiện song song.
Cách biến đổi loại này cho phép chuyển chương trình tuần tự thành chương trình song song.
12.Trình bày Xử lý mảng - Đề án nhiệm vụ tập trung
Hai quy trình được sử dụng :
+. Quy trình chính ( Chủ ):

- Chia cơng việc cho các quy trình con để làm
- Gửi cơng việc cho quy trình con khi được u cầu
- Thu thập các kết quả từ các quy trình con
+. Quy trình con :
- Nhận cơng việc từ quy trình chủ
- Thực hiện tính tốn
- Gửi kết quả đến quy trình chủ
10


- Các quy trình con khơng biết trước kh thực thi phần nào của mảng cúng sẽ xử lý hoặc
bao nhiêu công việc chúng sẽ phải thực hiện
- Cân bằng tải động xảy ra vào thời gian chạy : các quy trình con nhanh hơn sẽ nhận
được nhiều việc để làm hơn.
- Giải mã của phương pháp: Các dòng chữ đậm có thể thay đổi để xử lý song song
Find out if I am MASTER or WORKER
If I am MASTER
Do until no more jobs
Send to WORKER next job
Receive results from WORKER
End do
Tell WORKER no more jobs
Else If I am WORKER
Do until no more jobs
Receive from MASTER next job
calculate array element: a(i,j) = fcn(i,j)
Send results to MASTER
End do
Endif
- Nhận xét:

+ Trong ví dụ đề án nhiệm vụ tập trung trên, mỗi tác vụ tính tốn một phần tử riêng biệt
của mảng như là một cơng việc . các tính tốn đối với tỷ lệ truyền là dạng mịn.
+ Các giải pháp dạng mịn phải chịu thêm một chi phí truyền thống trên khơng ( ngồi
trời ) nhằm làm giảm thời gian nhàn rỗi.
+ một giải pháp tối ưu hơn có thể là để phân phối việc làm nhiều hơn với mỗi công việc.
số lượng của công việc ở đây là vấn đề phụ thuộc.

11


13.Các loại phụ thuộc dữ liệu giữa các dòng lệnh đơn
Ví dụ 3.7. Xét các dịng lệnh sau:
S1:
A := B + C
S2:
B := A + E
S3:
A := A + B
Đồ thị phụ thuộc dữ liệu của ba dòng lệnh trên được cho ở hình 3-3
Để nghiên cứu tiếp chúng ta ký
hiệu
DEF (S) - Tập tất cả các biến có
giá trị bị thay đổi khi thực hiện
câu lệnh S, nghĩa là các biến nằm
bên trái lệnh gán.
USE (S) - Tập tất cả các biến
được sử dụng khi thực hiện câu
lệnh S, nghĩa là các biến này tham
gia vào các biểu thức tính tốn.


Ví dụ3.9
C1: X = N + 4
C2: Y = SQRT(M)
C3: AREA = Pi+R*R
Thì
DEF (C1) = {X }
DEF (C2) = {Y }
DEF (C3) = {AREA }

USE (C1) = {N }
USE (C2) = {M }
USE (C3) = {R }
Hoặc
S: B = A + C - 2.0
Thì
DEF (S) = {B},
USE = {A, C}

1. Phụ thuộc dòng dữ liệu.
Lệnh S2 được gọi là phụ thuộc dòng dữ liệu vào S1 khi và chỉ khi DEF(S1) Phản phụ thuộc
dữ liệu
Lệnh S2 được gọi là phản phụ thuộc dòng dữ liệu vào S1  DEF(S2)USE (S1)  .
Phản phụ thuộc dữ liệu làm cho các câu lệnh khơng thực hiện song song được. Ví dụ các phụ
thuộc d4, d6, d7 là loại phản phụ thuộc dữ liệu. Cạnh biểu diễn quan hệ phụ thuộc dòng dữ
liệu được ký hiệu là:
USE (S2) ≠  một biến được sử dụng ở dòng lệnh sau S2 phải được tính tại lệnh S1 trước
lệnh S2.
Đây là loại phụ thuộc hay xuất hiện nhất và rất khó loại bỏ để thực hiện song song.
12



Chẳng hạn trong ví dụ 3.7 các phụ thuộc d1, d2, d3 là loại phụ thuộc dòng dữ liệu. Quan
hệ phụ thuộc dòng dữ liệu được ký hiệu bởi cạnh:
2. Phản phụ thuộc dữ liệu
Lệnh S2 được gọi là phản phụ thuộc dòng dữ liệu vào S1 khi và chỉ khi DEF(S2)  USE
(S1) ≠  .
Phản phụ thuộc dữ liệu làm cho các câu lệnh không thực hiện song song được. Ví dụ các phụ
thuộc d4, d6, d7 là loại phản phụ thuộc dữ liệu. Cạnh biểu diễn quan hệ phụ thuộc dòng dữ
liệu được ký hiệu là:

3. Phụ thuộc dữ liệu ra
Hai lệnh S1và S2 được gọi là phụ thuộc dữ liệu ra  DEF(S1)DEF(S2)  .
Sự phụ thuộc này xuất hiện do hai nguyên nhân:
1- Do sử dụng lại tên của các biến đã có
2- Khi tăng giá trị của cùng một biến dạng x += 1 chẳng hạn.
Nếu những lệnh này thực hiện đồng thời thì chúng sẽ ghi đè các giá trị vào cùng một ô
nhớ. Do vậy, cần phải xác định chính xác thứ tự thực hiện để ngăn ngừa việc sử dụng những
giá trị khơng đúng. Ví dụ các phụ thuộc d5 là loại phụ thuộc dữ liệu ra. Quan hệ phụ thuộc
dòng dữ liệu được ký hiệu là:

4. Phụ thuộc dữ liệu vào
Hai lệnh S1và S2 được gọi là phụ thuộc dữ liệu vào  USE (S2)USE (S1)  .
Bởi vì các lệnh này chỉ truy cập và không làm thay đổi giá trị của các biến đó, do vậy các
lệnh này có thể thực hiện theo bất kỳ thứ tự nào cũng được, nghĩa là có thể thực hiện song
song. Quan hệ phụ thuộc dòng dữ liệu được ký hiệu là:

5. Phụ thuộc điều khiển dữ liệu
Hai lệnh S1và S2 được gọi là sự phụ thuộc dữ liệu khi việc thực hiện của lệnh này phụ thuộc
vào giá của các biến được tính ở lệnh kia. Quan hệ phụ thuộc dịng dữ liệu được ký hiệu là:


13


14.Cho n = 5. Hãy chỉ ra các bộ xử lí sẽ được nối hình sao với P42135 và P21354
Ta lấy số n là số tự nhiên và sẽ sử dụng n! (n giai thừa ) bộ xử lý, chỉ số của mỗi bộ xử lý sẽ
tường ứng với một hoán vị của 123…n.
Bộ xử lý Pi liên kết với bộ xử lý Pj khi và chỉ khi j nhận được từ i bằng cách thay ký hiệu
đầu của i bởi ký hiệu thứ k ( 2<=k <=n ) của i.
Cụ thể :
n = 5, n! bộ xử lý = 5! Bộ xử lý = 120 bộ xử lý được đánh số
Vậy các bộ xử lý sẽ được nối hình sao với P42135 và P21354 là:
- P42135 kết nối với P24135, P12435, P32145 và P52134
- P21354 kết nối với P12354, P31254, P51324 và P41352
Đồ thị hình sao :…. …

15.Trình bày cách xử lý theo PHA trong bộ xử lý có nhiều đơn vị chức năng. Cho ví
dụ.
Thuật tốn sắp xếp so sánh và đổi chỗ
Thuật toán này so sánh hai phần tử liền kề với nhau và nếu chúng chưa theo thứ tự cần
sắp thì đổi chỗ của chúng với nhau. Q trình này lặp lại cho đến khi khơng cịn cặp nào
khơng thỏa mãn thì dừng.
Thuật tốn tuần tự:
{
for (i = n-1; i < n; i - -)
temp = a [j] ;
for (j = 0; j < n; j + +)
a [j] = a [k] ;
{
a [k] = temp ;
k = j + 1;

}
if (a[j] > a [k])
}
Chúng ta có thể sử dụng n tác vụ kết hợp theo nguyên lý hình ống để sắp xếp mảng a [n].
Hệ thống được chia thành hai pha: pha chẵn và pha lẻ.
+ Pha chẵn: các tác vụ được đánh số chẵn so sánh với những tác vụ tiếp theo (tác vụ có
số lẻ), nếu nó giữ phần tử lớn hơn thì đổi dữ liệu với tác vụ đó.
+ Pha lẻ: các tác vụ có số lẻ hoạt động tương tự như trên

14


Ví dụ: n = 8, và dãy số ban đầu: 4,2,7,8,5,1,3,6

16.Trình bày lệnh tạo lập các tiến trình và huỷ bỏ tiến trình!.
Tạo lập và huỷ bỏ tiến trình
Để thêm N tiến trình, dùng lệnh:
id = create_process (N);
Lệnh này tạo thêm N tiến trình và cả một tiến trình cha (chủ) nữa để thực hiện
câu lệnh đó, kết quả là có N+1 tiến trình như nhau được tạo ra và mỗi giá trị của id
được gán tương ứng cho một tiến trình.
Để sử dụng các tiến trình đã được tạo ra, chúng ta có thể viết ra các chương trình
song song có dạng:
id = create_process(N);
Switch (id) {
Case 0 : … do NhiemVu0 …; Break;
Case 1 : … do NhiemVu1 …; Break;
Case 2 : … do NhiemVu2 …; Break;
………..
Case N : … do NhiemVuN …; Break; }

Sau khi các công việc trên thực hiện xong, chúng ta dùng lệnh
join_process (N, id), để giữ lại tiến trình id (như một tiến trình chủ) tiếp tục thực hiện
phần việc tuần tự còn lại, cịn những tiến trình khác kết thúc. Nghĩa là, sau lệnh này chỉ cịn
tiến trình id tiếp tục hoạt động, những tiến trình cịn lại kết thúc.
Bất kỳ câu lệnh kế tiếp lệnh này sẽ không được thực hiện cho đến khi tất cả các tiến trình
đều thực hiện câu lệnh join_process().
Sau join_process (N, id) chỉ còn lại một tiến trình hoạt động, do vậy vấn đề xử lý là tuần tự.
Một số hàm điều phối vấn đề chia xẻ bộ nhớ.
15


Khi muốn sử dụng bộ nhớ chung, cần phải xin cấp phát và sau khi sử dụng xong phải giải
phóng chúng.
Có hai hàm cơ bản được sử dụng ở đây là:
- Hàm cấp phát bộ nhớ shared(m , &id): hàm này giống như malloc(), nhưng cấp phát m
byte bộ nhớ chia sẻ cho tiến trình id.
- Hàm giải phóng bộ nhớ free_shm(): giải phóng phần bộ nhớ đã được cấp phát.

17.Viết một đoạn gỉa mã thể hiện việc đổi một số tên biến để tránh phụ thuộc dòng
dữ liệu ra trong chu trình, nhằm tăng được mức độ song song của chương trình.
Xét đoạn chương trình:
S1: for i = 1 to n
S2:
X = A[i] + B[i]
S3:
Y[i] = 2*X
S4:
X = C[i] + D[i]
S5:
P = X + 15

S6: end for
Đoạn chương trình trên khơng thể thực hiện song song nếu khơng có kỹ thuật tách thành hai
chu trình con. Thật vậy, lệnh S3 phụ thuộc dịng dữ liệu với S2 nên khơng thể song song hóa hai lệnh
này được, tương tự với hai lệnh S5 và S4
Nhưng nếu hai lệnh sau đổi X thành biến khác, chẳng hạn Z sẽ tạo ra đoạn chương trình có
thể thực hiện song song như sau:
S1: for i = 1 to n
S2:
X = A[i] + B[i]
S3:
Y[i] = 2*X
S4:
Z = C[i] + D[i]
S5:
P = Z + 15
S6: end for
Bây giờ tách chu trình này thành hai chu trình có thể thực hiện song song sau đây:
S1: for i = 1 to n
S2:
X = A[i] + B[i]
S3:
Y[i] = 2*X
S4: end for

S1’: for i = 1 to n
S2’:
Z = C[i] + D[i]
S3’:
P = Z + 15
S4’: end for


16


18.Bộ nhớ phân tán giống và khác bộ nhớ chia sẻ truy cập không ngang quyền
những chỗ nào?
Bộ nhớ phân tán
Bộ nhớ chia sẻ truy cập không ngang quyền
Giống nhau:
- Địi hỏi phải có mạng truyền thơng để kết nối các bộ nhớ trong liên bộ vi xử lý.
- Mỗi bộ xử lý có bộ nhớ cục bộ riêng của nó. Các địa chỉ nhớ trong một bộ xử lý
khơng ánh xạ đến các bộ xử lý khác, do đó khơng có khái niệm về khơng gian địa chỉ
tồn cục cho tất cả các bộ xử lý.
- Vì mỗi bộ xử lý có bộ nhớ cục bộ riêng của mình, nên nó hoạt động một cách độc lập.
Thay đổi trong bộ nhớ cục bộ của nó khơng có tác động vào bộ nhớ của các bộ vi xử
lý khác. Do đó, khái niệm về bộ nhớ cache coherency khơng được áp dụng ở đây.
- Khi một bộ xử lý yêu cầu truy cập vào dữ liệu trong bộ xử lý khác, thường đó là tác
vụ của các lập trình viên để xác định một cách tương minh: rằng như thế nào và khi
nào dữ liệu được truyền. Việc đồng bộ hóa giữa các tác vụ là trách nhiệm của lập
trình viên.
- Các mạng được sử dụng ở đây để truyền dữ liệu có những đặc điểm khác biệt, tuy
nhiên cũng có thể dùng mạng đơn giản như Ethernet.
Khác nhau:
- Bộ nhớ phân tán là bộ nhớ gồm nhiều máy Trong mơ hình bộ nhớ kiểu này, bộ nhớ phân
tính đơn nguyên được nối với nhau bằng

tán được chia thành các đơn thể độc lập, các

mạng truyền thông tốc độ cao.


đơn thể này được phân chia cho tất cả các bộ

VD : Mạng LAN – Mạng cục bộ.

xử lý và trở thành bộ nhớ cục bộ, tuyển tập các

Mạng WAN – Mạng liên kết nhiều mạng

đơn thể bộ nhớ tạo ra bộ nhớ chung cho các bộ

LAN với nhau qua các mạng truyền thông

xử lý. Các bộ xử lý được truy cập đồng thời

có cùng cấu trúc hoặc có thế nối qua mạng

* Thường được thể hiện bởi liên kết vật lý của

điện thoại

hai hoặc nhiều SMPs

- Bộ nhớ phân tán sử dụng phương thức truy * SMP (Symmetric Multi- Processor – bộ đa xử
cập bộ nhớ không ngang quyền.

lý đối xứng) : kiến trúc phần cứng nơi các bộ

*Ưu điểm:

đa xử lý chia sẻ không gian địa chỉ duy nhất và

17


+ Bộ nhớ phân tán cho khả năng mở rộng

truy cập vào tất cả các tài nguyên; đó là bộ nhớ

với số lượng các bộ vi xử lý. Tăng số lượng

máy tính được chia sẻ.

các bộ vi xử lý và kích thước của bộ nhớ

* Một SMP có thể truy cập trực tiếp bộ nhớ

tăng tương ứng.

của một SMP khác.

+ Mỗi bộ xử lý có thể truy cập nhanh

* Khơng phải tất cả các bộ xử lý có thời gian

chóng bộ nhớ riêng của mình mà khơng cần

truy cập bằng nhau vào tất cả các bộ nhớ.

sự can thiệp và khơng có thêm chi phí phát

* Truy cập bộ nhớ kết nối chéo thì chậm hơn.


sinh để duy trì sự cache coherency.

* Nếu cache Coherent được duy trì, thì cũng có

+ Hiệu quả về mặt chi phí: có thể sử dụng thể được gọi là CC-NUMA
hàng hóa sẵn có như: các bộ vi xử lý off-

*Ưu điểm (Advantages):

the-shelf và kết nối mạng.

- Địa chỉ tồn cục cung cấp một khơng gian

*Nhược điểm:

thân thiện với người lập trình về quan điểm cho

+ Các lập trình viên có trách nhiệm với

bộ nhớ

nhiều chi tiết liên quan đến dữ liệu giao tiếp

- Chia sẻ dữ liệu giữa các tác vụ vừa nhanh và

giữa các bộ vi xử lý.

vừa thống nhất cho CPU do sự gần kề của các


+ Khó khăn khi cần ánh xạ đến các cấu

bộ nhớ

trúc dữ liệu hiện có, khi dựa vào bộ nhớ

*Nhược điểm ( Disadvantages):

toàn cục, và vào tổ chức bộ nhớ kiểu này.

- Bất lợi chính là thiếu khả năng mở rộng giữa

+ Các lần truy cập bộ nhớ không đồng bộ nhớ và CPU. Thêm nhiều CPU có thể tăng
đều.
lưu lượng truy cập vào bộ nhớ chia sẻ-path
CPU và bộ nhớ đệm cho các hệ thống coherent,
về phương diện hình học tăng lưu lượng cùng
với quản lý bộ nhớ cache.
- Lập trình chịu trách nhiệm về xây dựng đồng
bộ hóa và đảm bảo truy cập "đúng" vào bộ nhớ
tồn cục.
- Chi phí: làm tăng sự khó khăn phức tạp và tốn
kém để thiết kế và sản xuất các máy có bộ nhớ
chia sẻ với việc gia tăng số lượng BVXL trong
đó.
18


Hình 2.3. Shared Memory
kiểu NUMA


Hình 2.4. Distributed Memory

19.Trình bày các cách cơ bản để phân hoạch tính tốn giữa các tác vụ song song.
Có hai cách cơ bản để phân hoạch tính tốn giữa các tác vụ song song: phân hoạch theo
miền và phân hoạch theo chức năng.
 Phân hoạch theo miền dữ liệu (Domain Decomposition)
Phân hoạch kiểu này, các dữ liệu liên kết với một vấn đề được phân chia ra thành các
phần độc lập. Sau đó, mỗi tác vụ song song hoạt động trên một phần của dữ liệu đã được
phân hoạch. Ví dụ tính tổng hai véc tơ C = A + B
A(1)

A(2)

A(3)

A(4)


A(i)
.

A(i+1) A(i+2) …

A(n)

B(1)

B(2)


B(3)

B(4)


B(i)
.

B(i+1) B(i+2) …

B(n)

Hình 5-1. Các phần tử của các mảng A và B
Được chia thành các khối sau để đưa cho các tác vụ thực hiện phép cộng
A(
1)

A(2)

A(3)

A(
4)

A(i)


A(i+
1)


A(i+2

)

A(n-2)

A(n-1) A(n)

B(1
B(2)
)

B(3)

B(
4)

B(i)


B(i+1 B(i+2

)
)

B(n-2)

B(n-1) B(n)

Task 0 (Tác vụ 0)


Task i (Tác vụ i)

Task n-1 (Tác vụ n-1)

Hình 5-2. Các tác vụ cộng các phần tử của hai mảng

19


 Phân chia theo chức năng (Domain Problem)
Cách tiếp cận này tập trung vào việc tính tốn có thể thực hiện được hay khơng chứ
khơng phải nói về dữ liệu được chế tác bằng cách tính tốn này. Vấn đề được phân chia
theo cơng việc mà nó phải được thực hiện. Mỗi tác vụ sau đó thực hiện một phần của cơng
việc chung.
Ví dụ, một dây chuyền may áo sơ mi bao gồm: may thân áo, cổ áo, cửa tay, thùa khuết,
làm khuy, … có thể chia dây chuyền này theo các công đoạn trên-mỗi công đoạn là một
chức năng do các công nhân thực hiện một cách độc lập.
Khi tính diện tích tam giác theo cơng thức S = a*b*sin (<a,b>), có các chức năng: Nhập
dữ liệu cho a > 0, b > 0, nhập góc <a,b>, 0 < <a,b> < 3.1415; các chức năng này sẽ đưa
cho các tác vụ thực hiện.
Phân chia theo chức năng, chính nó cũng cho biết vấn đề có thể được chia thành
các tác vụ khác nhau hay khơng.

Hình 5-5. Phân hoạch theo chức năng

20


20.*Cho hai vec tơ A và B cùng có 15 phần tử và cùng kiểu dữ liệu số và 5 bộ xử lý.

Hãy chỉ ra chương trình tính song song tổng hai véc tơ dùng 5 tiến trình, theo 2
hai cách có thể.
Cho hai vec tơ A và B cùng có N phần tử và cùng kiểu dữ liệu số. Chương trình tính
tổng hai véc tơ là:
FOR (i = 0 ; i < N; i++)
{
C[i] = A[i] + B[i];
//(1)
}
Thực hiện song song hóa đoạn chương trình này như thế nào?
Tương tự như ví dụ nêu trên, giả sử ta có M tiến trình. Chúng ta có thể chia N phần tử
thành M phần (thường ta giả thiết N chia hết cho M, nghĩa là N/M là số nguyên) và gán
từng phần đó cho mỗi tiến trình.
Cach 1:
Chu trình trên có thể viết thành:
FOR (j = id * N/M ; j < (id+1) * N/M ; j++)
{
C(j) = A[j] + B[j] ;
}
Trong đó, id là số hiệu của tiến trình, chạy từ 0 đến M-1. Tiến trình thứ i xử lý N/M
phần tử liên tiếp kể từ i * N/M +1, ví dụ hình 4.4-1(a).
Cach 2:
Hoặc ta có thể cho phép các tiến trình truy cập xen kẽ vào các phần tử của mảng như sau:
Tiến trình Pi bắt đầu từ phần tử thứ i, sau đó bỏ qua M phần tử để xử lý phần tử tiếp
theo, nghĩa là nó truy cập đến i, i+M, i+2M , ... , ví dụ hình 4.1-1(b).
Chu trình (1) khi đó được viết như sau:
FOR (j=id ; j < N ; j+ = M)
{
C[j] = A[j] + B[j];
}

Ví dụ: Khi N = 15 và M = 5 thì việc gán các phần tử của vector cho các tiến trình sẽ được
thực hiện theo cách trên như sau:
P1
1
2
3

P2
4
5
6

P3
P4
P5
P1
P2
P3
P4
7
10
13
1
2
3
4
8
11
14
6

7
8
9
9
12
15
11
12
13
14
(a)
(b)
Hình 4.1-1. Các cách phân chia chu trình của một mảng tuần tự
21

P5
5
10
15


MỤC LỤC
1. Vẽ và trình bày máy tính kiểu MISD .................................................................................. 1
2. Vấn đề tính tốn song song hiện nay rất khả thi, điều kết luận này dựa trên các yếu tố
nào?............................................................................................................................................. 1
3. Hai vec tơ A và B cùng có 20 phần tử và cùng kiểu dữ liệu số và 5 bộ xử lý. Hãy chỉ ra
chương trình tính tổng hai véc tơ theo các 5 tiến trình khi dùng cấu trúc Forall ...................... 2
4. Cho bảng sau và ba bộ xử lí như nhau. Hãy cân bàng tải cho q trình tính tốn song
song. ........................................................................................................................................... 3
5. Vẽ và trình bày bộ nhớ hỗn hợp........................................................................................... 3

6. Viết các cấu trúc lệnh song song và cho ví dụ. .................................................................... 5
7. Trình bày loại máy tính SIMD (Single Instruction, Multiple Data) - Đơn chỉ thị, Đa dữ
liệu. ............................................................................................................................................. 6
8. Giả sử có n = 16, hãy chỉ ra các bộ xử lí được kết nối xáo trộn với các bộ xử lí: p3, p8, p11
và p15 ........................................................................................................................................... 7
9. Trình bày các phương thức truy cập bộ nhớ ........................................................................ 8
10. Vẽ và trình bày bộ nhớ chia sẻ truy cập ngang quyền (Uniform Memory Access
(UMA)) ....................................................................................................................................... 9
11. Viết một đoạn gỉa mã thể hiện việc biến đổi mã lệnh chương trình bằng các biến quy
nạp làm tăng được mức độ song song của chương trình.......................................................... 10
12. Trình bày Xử lý mảng - Đề án nhiệm vụ tập trung ........................................................ 10
13. Các loại phụ thuộc dữ liệu giữa các dòng lệnh đơn ....................................................... 12
14. Cho n = 5. Hãy chỉ ra các bộ xử lí sẽ được nối hình sao với P42135 và P21354 .................. 14
15. Trình bày cách xử lý theo PHA trong bộ xử lý có nhiều đơn vị chức năng. Cho ví dụ. 14
16. Trình bày lệnh tạo lập các tiến trình và huỷ bỏ tiến trình!. ............................................ 15
17. Viết một đoạn gỉa mã thể hiện việc đổi một số tên biến để tránh phụ thuộc dòng dữ liệu
ra trong chu trình, nhằm tăng được mức độ song song của chương trình. .............................. 16
18. Bộ nhớ phân tán giống và khác bộ nhớ chia sẻ truy cập không ngang quyền những chỗ
nào? …………………………………………………………………………………………17
19. Trình bày các cách cơ bản để phân hoạch tính tốn giữa các tác vụ song song............. 19
20. *Cho hai vec tơ A và B cùng có 15 phần tử và cùng kiểu dữ liệu số và 5 bộ xử lý.Hãy
chỉ ra chương trình tính song song tổng hai véc tơ dùng 5 tiến trình, theo 2 hai cách có thể.21

22



×