Tải bản đầy đủ (.doc) (16 trang)

Báo cáo: Nhân ma trận song song

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 (475.78 KB, 16 trang )

TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN

BÀI TẬP LỚN
Môn: XỬ LÝ SONG SONG

NHÂN MA TRÂN SONG SONG
Giáo viên hướng dẫn :

Bùi Thị Thủy

Sinh viên thực hiện

Nguyễn Đồng Thắng

:

Trần Thị Hà An
Nguyễn Thị Mừng

1


Hà Nội, 12/2012

Lời mở đầu
Nhu cầu tính toán ngày càng tăng cao và phức tạp với những bài toán lớn trên nhiều lĩnh vực
khoa học (như về hóa học lượng tử, vũ trụ, thiết kế vật liệu siêu dẫn, sinh học, dược học, công nghệ gen,
khí hậu, môi trường...) hay thương mại dịch vụ (hệ thống ngân hàng, điện toán...) đã và đang là thách
thức đối với nhiều nhà khoa học. Những chiếc máy tính thiết kế theo kiểu tuần tự đã hiệu quả với việc
phân rã bài toán lớn thành các bài toán con, phù hợp với kiến trúc máy tính đơn. Song, nguồn thông tin


đầu vào để xử lý ngày càng lớn, khiến máy tính tuần tự không còn đáp ứng được nhu cầu thực tế. Đồng
thời với việc tăng tốc độ phần cứng thì việc phát triển những chiếc máy tính song song cũng rất được
quan tâm.
Sự ra đời của những chiếc máy tính song song đã phần nào đáp ứng nhu cầu tính toán của con
người, trong đó hệ thống song song đa bộ xử lý ngày càng phát triển mạnh mẽ hơn cả.
Ma trận nhân là một trong những bài toán có thể áp dụng mô hình song song đa bộ xử lý, mục
đích của bài báo cáo là tổng kết quá trình tìm hiểu và áp dụng kiến trúc song song SIMD vào giải bài
toán Ma trận nhân. Nội dung bài báo cáo gồm 3 phần :
 Phần 1 : Tổng quan về xử lý song song
 Phần 2 : Giải bài toán ma trận nhân trên kiến trúc máy tính tuần tự SISD (Single Instruction
Single Data – Đơn dòng lệnh Đơn dòng dữ liệu).
 Phần 3 : Đưa bài toàn sang mô hình SIMD (Single Instruction Multiple Data – Đơn dòng lệnh
Đa dòng dữ liệu), với 2 cách tổ chức các bộ xử lý là Lưới 2D nối vòng và Siêu khối.
 Phần 4 : Tổng kết.
Do còn nhiều hạn chế về kiến thức cũng như kinh nghiệm, nên bài báo cáo có thể còn nhiều thiếu
xót, chúng em rất mong nhận được sự góp ý từ cô và các bạn.
Chúng em xin chân thành cảm ơn!

2


TỔNG QUAN VỀ XỬ LÝ SONG SONG
1. Khái niệm xử lý song song:
Xử lý song song là quá trình xử lý gồm nhiều tiến trình được kích hoạt đồng thời và cùng tham
gia giải quyết một vấn đề, được thực hiện trên hệ thống đa bộ xử lý. Nhiều bộ xử lý kết hợp với nhau để
giải quyết một vấn đề vì thế, tại một thời điểm có nhiều phép toán được thực hiện đồng thời, giúp giảm
thời gian xử lý.
Vấn đề xử lý song song liên quan trực tiếp đến kiến trúc máy tính, hệ điều hành, thuật toán, và ngôn ngữ
lập trình.
2. Chương trình dịch và các hệ điều hành:

Chương trình viết bằng ngôn ngữ bậc cao phải được dịch sang ngôn ngữ máy, chương trình dịch
và chương trình thông dịch được sử dụng để thực hiện việc chuyển đổi này.
Đối với hệ thống song song, thì thành phần đóng vai trò rất quan trọng đó là Chương trình dịch
song song. Chương trình dịch làm giảm thời gian làm việc của chương trình bằng cách chia nhỏ công
việc thành các khối công việc con, những khối này sẽ được xử lý đồng thời bởi nhiều đơn vị xử lý.
Hệ điều hành là một chương trình làm nhiệm vụ phối hợp các hoạt động của máy tính, hệ điều
hành song song thực hiện các chức năng chính sau:
 Khởi động hệ thống
 Phân đoạn, lập trình cho các tiến trình
 Trao đổi và đồng bộ hóa tiến trình
 Quản lý điều hành hệ thống
Nhiệm vụ chính của hệ điều hành đa bộ xử lý là tích hợp các tài nguyên tính toán và các bộ xử lý
trao đổi với nhau thông qua mạng liên kết để tạo thành một hệ thống thống nhất làm việc một cách hiệu
quả.
3. Lập trình song song:
a) Giới thiệu chung:
Trong môi trường lập trình song song, công việc của lập trình viên không chỉ là viết ra chương
trình, dữ liệu mà còn phải cung cấp các công cụ để đồng bộ hóa và điều khiển tương tác giữa các tiến
trình. Do đó, người lập trình cần tạp ra và lập lịch cho các tiến trình. Có hai cách tiếp cận khai thác khả
năng của các bộ xử lý, hai cách này bổ sung cho nhau, nếu chỉ áp dụng một cách thì khó đạt được hiệu
quả tốt:

3


 Phát triển những ngôn ngữ lập trình cho phép thể hiện được việc song song ở mức thuật toán
(Ví dụ: Fortran, C…)
 Xây dựng những chương trình dịch đủ mạnh để nhận dạng được các phân đoạn chương trình
nào có thể song song hóa.
b) Ngôn ngữ lập trình song song MPI (Message Passing Interface):

Truyền thông điệp là mô hình đang được sử dụng rộng rãi trong các hệ thống máy tính song song
đặc biệt là hệ thống có bộ nhớ phân tán. Những nỗ lực để chuyển đổi các ứng dụng lớn sang mô hình
này đã được thực hiện hơn mười năm trước. Mục tiêu của MPI là là phát triển một chuẩn được sử dụng
rộng rãi đẻ viết các chương trình truyền thông điệp:
 Thiết kế giao diện lập trình ứng dụng
 Cho phép truyền thông điệp hiệu quả, tránh sao chép từ bộ nhớ sang bộ nhớ, cho phép chồng lấp
tính toán và truyền thông
 Sử dụng ngôn ngữ lập trình C và Fortran cho thư viện
 Cho phép những sự thực thi có thể được sử dụng trong nhiều môi trường
 Đảm bảo an toàn cho tiến trình
Sau đây ta sẽ tìm hiểu về việc giải quyết bài toán ma trận nhân trên một trong các kiến trúc song
song đa bộ xử lý.

II. MÔ HÌNH TUẦN TỰ SISD (Single Instruction Single Data) :

Hình 1: Kiến trúc tuần tự SISD

4


1. Ý tưởng :
Việc nhân hai ma trận trong kiến trúc tuần tự dựa trên kiến thức tính toán thông thường. Nhân
ma trận Alxm và ma trận Bmxn được ma trận Clxn , với mỗi phần tử trong ma trận C được tính theo công
thức :
m 1

cij =




aikbkj

k 0

2. Thuật toán :
Input: A[0…(l-1)][0…(m-1)]
B[0…(m-1)][0…(n-1)]
Output:

C[0…(l-1)][0…(n-1)]

BEGIN
for i = 0 to (l-1) do
for j = 0 to (n-1) do
begin
t=0
for k = 0 to (m-1) do
t = t + aik*bkj
endfor
cij = t
end
endfor
endfor
END.
3. Đánh giá:
Trong mô hình SISD chỉ có một bộ xử lý, để nhân hai ma trận cỡ n, sẽ phải thực hiện tuần tự n 3
lệnh nhân và n3 lệnh cộng, độ phức tạp của giải thuật là O(n 3). Như vậy nếu kích cỡ hai ma trận tăng, số
lượng phép tính mà bộ xử lý phải thực hiện tăng theo hàm mũ, thời gian thực hiện sẽ lâu hơn rất nhiều.

5



Nhận thấy nhược điểm này, đồng thời thấy được đặc điểm tính toán trong bài toán ma trận nhân
là lặp lại cùng một câu lệnh trên nhiều bộ dữ liệu khác nhau, ta có ý tưởng đưa bài toán sang giải ở một
kiến trúc song song, nhằm tăng hiệu xuất tính toán, và cụ thể ở đây là kiến trúc song song SIMD.

6


MÔ HÌNH SONG SONG SIMD:
Đây là kiến trúc song song đồng bộ, cụ thể, sẽ có nhiều bộ xử lý, mỗi bộ xử lý có một đường dữ
liệu riêng, các bộ xử lý này được điều khiển bởi một Khối điều khiển (Control Unit - CU) duy nhất. Khi
CU phát ra một lệnh nào đó, đồng loạt các bộ xử lý sẽ thực hiện lệnh này trên bộ dữ liệu mà bộ xử lý đó
sở hữu, và kết thúc trong một chu kỳ lệnh.

Hình 2: Kiến trúc song song SIMD
Với bài toán nhân ma trận, ta sẽ xem xét hai cách tổ chức bộ xử lý: Mạng lưới 2D nối vòng và
Siêu khối.
1. Kết nối các bộ xử lý theo mạng lưới 2D nối vòng:
a) Ý tưởng:
Để nhân hai ma trận Anxn và Bnxn, ta sẽ sử dụng một mảng n2 bộ xử lý kết nối với nhau theo mạng
lưới 2D nối vòng. Mỗi bộ xử lý tương ứng với vị trí của một phần tử trong ma trận.

Hình 3: Mảng bộ xử lý dùng nhân hai ma trận cỡ 3x3

7


Sau qúa trình dịch chuyển dữ liệu và tính toán, phần tử c ij của ma trận trận kết quả C được lưu tại
bộ xử lý Pij tương ứng. Quá trình thực hiện chia làm hai giai đoạn như sau :

Giai đoạn 1:
Các phần tử aij và bij được truyền vào các bộ xử lý Pij. Lúc này tại các bộ xử lý đã chứa các cặp
dữ liệu, tuy nhiên chỉ các cặp dữ liệu tại P ij (i = j) là chắc chắn có thể nhân với nhau, ngoài ra không cặp
dữ liệu có thể nhân được với nhau.

Hình 4 : Nhân ma trận cấp 3, truyền dữ liệu vào các bộ xử lý
Để làm xuất hiện các cặp dữ liệu nhân được với nhau, ta tiến hành bước dịch chuyển đặc biệt đầu
tiên. Các phần tử của ma trận A xét theo hàng, hàng thứ i sẽ dịch trái i vị trí. Các phần tử của ma trận B
xét theo cột, cột thứ j sẽ dịch lên trên i vị trí.

Lúc này tại các bộ xử lý sẽ chứa các cặp dữ liệu có thể nhân được với nhau. CU phát ra một lệnh
nhân, đồng loạt các Pij sẽ tiến hành việc nhân cặp dữ liệu của mình. Tuy nhiên lúc này mới chỉ có n 2
phép nhân được thực hiện, đây chưa phải kết quả cuối cùng.

8


Giai đoạn 2: Ta tiếp tục tiến hành dịch chuyển dữ liệu, tính toán và cộng kết quả.
Các phần tử của ma trận A xét theo hàng, tất cả các hàng sẽ dịch trái 1 vị trí. Các phần tử của ma
trận B xét theo cột, tất cả các cột sẽ dịch lên trên 1 vị trí. Thực hiện việc dịch chuyển này (n-1) lần, mỗi
lần ta lại được các cặp mới cần phải nhân.
Ví dụ khi nhân ma trận cấp 3, ở giai đoạn 2 này sẽ thực hiện 2 bước dịch chuyển. Sự dịch chuyển
dữ liệu nhìn từ góc độ bộ xử lý P4. Ở lần dịch chuyển trước đang chứa cặp dữ liệu a12 và b21.

Lần 1: a12 dịch sang trái 1 vị trí (P3), b 21 dịch lên trên 1 vị trí (P1), P4 chứa cặp dữ liệu mới được
dịch vào là a10 và b01. CU lại phát lệnh nhân cho các bộ xử lý thực hiện. Nhân xong, cộng gộp với kết
quả nhân trước đó.

Lần 2: a10 dịch sang trái 1 vị trí (P3), b 01 dịch lên trên 1 vị trí (P1), P4 chứa cặp dữ liệu mới được
dịch vào là a11 và b11. CU lại phát lệnh nhân cho các bộ xử lý thực hiện. Cuối cùng ta được ma trận C lưu

ở mảng bộ xử lý.

9


b)

Thuật toán :

Biến toàn cục: n, k
Biến cục bộ: a, b, c
BEGIN
(Giai đoạn 1: Định tuyến dữ liệu)
for k=0 to (n-2) do
for all Pij với 0 ≤ i,j ≤ (n-1) do
if (i > k) then
a = east(a)
endif
if (j > k) then
b = south(b)
endif
endfor
endfor
for all Pij với 0 ≤ i,j ≤ (n-1) do
c=axb
endfor
(Giai đoạn 2: Cộng kết quả)
for k=0 to (n-2) do
for all Pij với 0 ≤ i,j ≤ (n-1) do
a = east(a)

b = south(b)
c = c + a*b
endfor
endfor
END
c) Đánh giá:
Mô hình song song SIMD tổ chức bộ xử lý theo mạng lưới 2D nối vòng, để nhân hai ma trận cỡ
n, sử dụng n2 bộ xử lý. Sự song song diễn ra khi tiến hành phép nhân, n 2 bộ xử lý đồng thời thực hiện

10


lệnh nhân do CU phát ra, vậy sau n 3/n2 = n lệnh nhân, các bộ xử lý sẽ tính ra được kết quả cuối cùng. Độ
phức tạp của giải thuật là O(n), giảm được đáng kể thời gian thực hiện.
2. Kết nối các bộ xử lý theo mạng hình siêu khối:
a) Ý tưởng:
Để nhân hai ma trận Anxn và Bnxn, ta sẽ sử dụng n3=23q bộ xử lý kết nối với nhau theo mạng hình siêu
khối. Mạng siêu khối – hay còn gọi là một n-lập phương nhị phân, gồm có 2k nút tạo thành siêu khối k
chiều. Sử dụng k bit đánh tên nút theo quy tắc hai nút cạnh nhau chỉ sai khác nhau đúng một vị trí bit.

Hình 5: Siêu khối 3 chiều – 8 nút, dùng nhân ma trận cấp 2
Ý tưởng ở đây, sẽ đưa tất cả n 3 cặp số cần phải nhân vào n3 bộ xử lý, sau đó CU chỉ phải phát
lệnh nhân một lần.
Ban đầu, các phần tử aij và bij được truyền vào các bộ xử lý P(2qi + j). Sau qúa trình dịch chuyển
dữ liệu và tính toán, phần tử cij của ma trận trận kết quả C được lưu tại bộ xử lý P(2qi + j) tương ứng.
P(2qi + j)

A

B


P000 (P0)

a00

b00

P001 (P1)

a01

b01

P010 (P2)

a10

b10

P011 (P3)

a11

b11

P100 (P4)

11



P101 (P5)
P110 (P6)
P111 (P7)

Giai đoạn 1:
Truyền giá trị của hai ma trận vào các bộ xử lý còn lại. Các bộ xử lý đều đã chứa các cặp dữ liệu,
tuy nhiên đây chưa phải các cặp dữ liệu có thể nhân được với nhau, ta tiến hành việc định tuyến dữ liệu,
tức đưa các cặp số phải nhân vào bộ xử lý thích hợp.

Giai đoạn 2:
Ta sẽ áp dụng giải thuật, định tuyến cho các phần tử của các ma trận về vị trí theo cặp có thể
nhân được với nhau. Khi các cặp số đã về đúng bộ xử lý thích hợp, ta tiến hành việc nhân song song, n 3
bộ xử lý đồng thời nhân các cặp dữ liệu của mình.

12


Hinh: Định tuyến dữ liệu, đưa các cặp số về bộ xử lý thích hợp

Hinh: CU phát lệnh nhân, các bộ xử lý tiến hành nhân song song
Giai đoạn 3:
Cộng kết quả.
b)

Thuật toán:

Tham số: q (Ma trận cỡ 2q)
Biến toàn cục : k
Biến cục bộ : a,b,c,s,t
BEGIN

(Giai đoạn 1)
for k = (3q-1) downto 2q do
for all Pm mà mà BIT(m,k) = 1 do
t = BIT.COMPLEMENT(m,k)
a = [t]a
b = [t]b

13


endfor
endfor
(Định tuyến dữ liệu)
for k = (q-1) downto 0 do
for all Pm mà BIT(m,k) ≠ BIT(m,2q+k) do
t = BIT.COMPLEMENT(m,k)
a = [t]a
endfor
endfor
for k = (2q-1) downto q do
for all Pm mà BIT(m,k) ≠ BIT(m,q+k) do
t = BIT.COMPLEMENT(m,k)
b = [t]b
endfor
endfor
(Giai đoạn 2)
for all Pm do
c=axb
endfor
(Giai đoạn 3)

for k=2q to (3q-1) do
for all Pm do
t = BIT.COMPLEMENT(m,k)
s = [t]c
c = c+s
endfor
endfor
END.
Hàm BIT(m,k) có ý nghĩa là trả về giá trị bit thứ k trong biểu diễn nhị phân của m. Ví dụ: Biểu
diễn nhị phân của 9 là 1001

 BIT(9,0) = 1
14


BIT(9,1) = 0
BIT(9,2) = 0
BIT(9,3) = 1
Hàm BIT.COMPLEMENT(m,k) có ý nghĩa là trả về giá trị số nguyên, sau khi thực hiện bù bit
thứ k trong biểu diễn nhị phân của m. Ví dụ:
BIT.COMPLEMENT(9,0) = 8 (1000)
BIT.COMPLEMENT(9,1) = 11 (1011)
BIT.COMPLEMENT(9,2) = 13 (1101)
BIT.COMPLEMENT(9,3) = 1 (0001)
c) Đánh giá:
Mô hình song song SIMD tổ chức bộ xử lý theo mạng hình siêu khối, để nhân hai ma trận cỡ n,
sử dụng n3 bộ xử lý. Sự song song diễn ra khi tiến hành phép nhân, n 3 bộ xử lý đồng thời thực hiện lệnh
nhân do CU phát ra, vậy sau n3/n3=1 lệnh nhân, các bộ xử lý sẽ tính ra được kết quả cuối cùng. Độ phức
tạp của giải thuật là O(log n), chỉ cần một lệnh nhân duy nhất toàn bộ n3 cặp dữ liệu được nhân lại với
nhau.

TỔNG KẾT:
Số phép nhân
thực hiện

Số bộ xử lý

Số lệnh nhân mà
CU phát ra

Tuần tự SISD

n3

1

n3

SIMD Lưới 2D

n3

n2

n

SIMD Siêu khối

n3

n3


1

Sau quá trình tìm hiểu, ta thấy được sự khác biệt giữa mô hình tính toán song song và tuần tự
trong việc giải bài toán nhân ma trận, đồng thời cũng thấy được sự khác biệt giữa hai cách tổ chức bộ xử
lý ở mô hình song song là Lưới 2D nối vòng và Siêu khối. Tuy rằng, trong mô hình song song, việc thiết
kế, kết nối, các bộ xử lý phức tạp hơn mô hình tuần tự, chi phí cho phần cứng tăng cao, tuy nhiên hiệu
quả công việc mà nó mang lại là rất lớn. Với cùng một khối lượng công việc, nếu dùng mô hình song
song nhiều bộ xử lý, rõ ràng tốc độ thực thi giải bài toán sẽ nhanh hơn rất nhiều.

15


******************
HẾT

16



×