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.
Trang 1TRƯỜ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
Trang 2Hà 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!
Trang 3TỔ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:
Trang 4 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
Trang 51 Ý 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 :
cij =
1 0
m k
aikbkj
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 + a ik*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ự n3
lệnh nhân và n3 lệnh cộng, độ phức tạp của giải thuật là O(n3) 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
Trang 6Nhậ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
Trang 7MÔ 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
Trang 8Sau 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ý 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 Pij (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ó n2
phép nhân được thực hiện, đây chưa phải kết quả cuối cùng
Trang 9Giai đ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), b21 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), b01 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ý
Trang 10b) 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 = a x b
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, n2 bộ xử lý đồng thời thực hiện
Trang 11lệnh nhân do CU phát ra, vậy sau n3/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ả n3 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
P000 (P0) a00 b00
P001 (P1) a01 b01
P010 (P2) a10 b10
P011 (P3) a11 b11
P100 (P4)
Trang 12P101 (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, n3
bộ xử lý đồng thời nhân các cặp dữ liệu của mình
Trang 13Hinh: Đị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ả
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
Trang 14endfor
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
for k = (2q-1) downto q do
for all Pm mà BIT(m,k) ≠ BIT(m,q+k) do
b = [t]b
endfor
(Giai đoạn 2)
for all Pm do
c = a x b
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
Trang 15BIT(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, n3 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
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
Trang 16HẾT