Bài toán nhân ma trận thưa với véc tơ gần như là tầm thường trong tính tốn tuần tự, nhưng khi ma trận có kích thước lớn, phải thực hiện nhân ma trận với véc tơ lặp đi lặp lại nhiều lần, khối lượng tính tốn khổng lồ thì việc thực hiện nhân ma trận thưa với véc tơ song song có vai trị cực kỳ quan trọng. Trong các lời giải lặp của hệ phương trình tuyến tính, hệ phương trình giá trị riêng, trong các bài tốn mơ phỏng, ta thường phải thực hiện
Input: A ma trận thưa cấp m n ,
v véc tơ dày độ dài n.
Output: u véc tơ dày độ dài m, u = Av.
for i := 0 to m - 1 do
ui := 0;
for all (i,j): 0im0 j naij 0 do
nhân ma trận thưa với véc tơ lặp đi lặp lại. Trong các phương pháp giải lặp, bắt đầu với ước đoán ban đầu của nghiệm x0 và sau đó tiếp tục cải thiện nó bằng việc tìm xấp xỉ tơt
hơn xk , k = 1, 2,…, cho tới khi hội tụ với sai số cho trước. Ví dụ, phương pháp gradient
liên hợp cho hệ phương trình tuyến tính hữu hạn dương, đối xứng Ax = b và phương pháp Lanczos [11] cho hệ phương trình đối xứng Ax = x. Trong chương này trình bày bài
tốn nhân ma trận thưa với véc tơ song song, tính thưa của ma trận có thể là bất thường, khơng có qui tắc. Nhưng thật may mắn trong bài toán nhân ma trận với véc tơ thì ma trận là khơng thay đổi trong q trình tính tốn.
Nghiên cứu nhân ma trận thưa với véc tơ cũng đưa ra cái nhìn sâu sắc hơn trong các lĩnh vực khác của tính tốn khoa học. Trong mơ phỏng động lực học, lực tương tác giữa các hạt i và j có thể mô tả bằng một lực fij. Cho khoảng tương tác ngắn, lực bằng 0 nếu các hạt này là cách xa nhau. Ở đây cho ta ma trận lực F là ma trận thưa. Tính tốn các vị trí mới của các hạt di chuyển dưới lực của hai hạt tương tự như nhân một véc tơ với ma trận F. Miền hạt hai chiều và ma trận tương ứng được chỉ ra trong hình 2.1.
Hình 2.1 Mơ phỏng động lực học bằng ma trận lực thưa
Trong hình 2.1, (a) miền động lực học phân tử hai chiều kích thước 1.0 1.0 với 10 hạt. Mỗi vòng tròn ký hiệu vùng tương tác của một hạt, và được xác định bởi bán kính rc
= 0.1. (b) Ma trận thưa F kích thước 10 10 tương ứng. Nếu các vòng tròn của hạt i và hạt
j giao nhau thì hai hạt này tương tác lẫn nhau và giá trị fij và fji khác 0 xuất hiện trong (b). Các bài toán về ma trận thưa đã được đề cập, cùng với các bộ dữ liệu từ những bài toán thực tế đã được tập hợp bởi các nhóm nghiên cứu như: Matrix maket, Harwell- Boeing [20] ngày nay gọi là Rutherford-Boeing… Mục tiêu cho việc xây dựng các bộ sưu tập này đó là các nhà nghiên cứu kiểm nghiệm các bộ dữ liệu, cho các thuật toán khác nhau trên các máy khác nhau, để có thể sử dụng như một tập phổ biến các bộ thử nghiệm cho trường hợp đặc biệt như ma trận thưa.
Các kết quả đã đạt được
Trong những năm gần đây, đã có nhiều kết quả đạt được từ bài tốn nhân ma trận thưa với véc tơ song song. Trước tiên, bài toán phân hoạch ma trận được giải quyết như một bài toán phân hoạch đồ thị. Đây là phương pháp phân hoạch một chiều, là cơ sở của các thuật toán phân hoạch được cài đặt trong các phần mềm Chaco [4] và Metis [12] được sử dụng rộng rãi từ những năm 1995-1998. Thành công của các chương trình phân hoạch này là sự kết hợp hiệu quả các thuật tốn phân đơi nhiều mức, được đề xuất bởi Bui và Jones [19] từ những năm 1993.
Hendrickson [5], năm 1998, chỉ trích phương pháp phân hoạch đồ thị bởi vì nó chỉ xử lý với các ma trận vuông đối xứng và áp đặt cách phân hoạch ma trận để phân hoạch cho các véc tơ đầu vào và đầu ra, và bởi vì nó khơng nhất thiết để cực tiểu dung lượng truyền thông, số thông điệp gửi đi, cũng như cân bằng tải truyền thông cực đại của mỗi bộ xử lý. Hendrickson và Kolda [5], chỉ ra những bất lợi đối với tất cả các ứng dụng của phân hoạch đồ thị trong tính tốn song song, khơng chỉ riêng với việc nhân ma trận thưa với véc tơ. Hendrickson và Kolda [7], năm 2000, đã trình ra phương án thay thế, mơ hình chia đơi đồ thị. Mơ hình này có thể xử lý được cả ma trận vuông không đối xứng và ma trận hình chữ nhật và nó khơng áp đặt cách phân phối ma trận cho các véc tơ đầu vào và đầu ra.
Catalyiirek và Aykanat [21], năm 1999, chỉ ra thuật tốn phân hoạch đa mức, họ tính được dung lượng truyền thơng chính xác bằng việc sử dụng phương pháp siêu đồ thị. Một
siêu đồ thị H = (V, N) bao gồm một tập các đỉnh V = {0, …, n - 1} và một tập các siêu
cạnh N = {n0,…, nm-1} và cũng được gọi là một mạng. Catalyiirek và Aykanat giả thiết
rằng m = n, và việc phân phối véc tơ được thực hiện như cách phân phối ma trận. Lợi ích của phương pháp này là nó cố gắng cực tiểu dung lượng truyền thông thực sự.
Cả hai phương pháp phân hoạch đồ thị chuẩn và phân hoạch siêu đồ thị đều là các phương pháp phân hoạch ma trận một chiều. Phân hoạch ma trận hai chiều cũng được đề xuất, và mới được sử dụng với các phiên bản nhân ma trận với véc tơ nhằm khai thác trong tính tốn mà chưa khai thác cho truyền thơng.
Berger và Bokhari [15], năm 1987, trình bày chiến lược dựa trên chia đôi đệ quy cho việc phân hoạch không đồng bộ lưới hai chiều. Việc phân hoạch chia lưới lần lượt theo chiều dọc, chiều ngang, với mục tiêu đạt cân bằng tải tốt trong tính tốn. Chia đơi đệ quy là kỹ thuật tối ưu đã được biết đến, đã được sử dụng trong mô phỏng mạch song song. Kỹ thuật này cũng được sử dụng để phân hoạch ma trận, đã được thực hiện bởi Romero và Zapata [14], năm 1995, để đạt được cân bằng tải tốt trong bài toán nhân ma trận thưa với véc tơ.
Bisseling [16], năm 1993, trình bày thuật tốn hai chiều nhằm khai thác tính thưa của ma trận ở cả tính tốn và truyền thơng. Bisseling và McColl [17], năm 1994, cải tiến thuật tốn chỉ những truyền thơng thực sự cần thiết mới được thực hiện; họ đạt được điều này bằng việc chuyển thuật tốn từ mơ hình lưới vng hạn chế với định tuyến store-and- forward sang mơ hình song song đồng bộ khối chung. Họ phân tích truyền thơng của một loạt phân phối sử dụng số gửi hay nhận cực đại trên một bộ xử lý như hàm chi phí. Phân phối ma trận là phân phối đề các, xác định bằng việc phân hoạch các hàng ma trận thành
M tập Is và các cột thành N tập Jt và phân P = M.N tích đề các Is x Jt cho P bộ xử lý. Phân phối véc tơ giống như ma trận đường chéo.
Pinar và Aykanat [3], năm 1997, chia ma trận trước tiên thành các khối hàng và rồi chia mỗi khối độc lập thành các khối cột. Phân hoạch của họ chỉ tính đến cân bằng tải tính tốn.
Gần đây, Catalyurek và Aykanat [22], năm 2001, mở rộng phương pháp phân hoạch siêu đồ thị một chiều cho ma trận vuông cho phương pháp phân hoạch hai chiều. Họ đã
tạo ra phân hoạch ma trận đề các bằng cách phân hoạch các hàng thành M tặp có số phần tử khác không gần bằng nhau, rồi phân hoạch các cột sao cho phân đều các phần tử khác không trên các tập hàng. Họ đã chú ý đi vào xử lý các vấn đề phân hoạch còn hạn chế trong phương pháp phân hoạch một chiều. Phân phối các véc tơ như phân phối ma trận đường chéo. Lựa chọn M = N = p, với p là số bộ xử lý của máy tính song song, khi đó số thơng điệp cực đại trên bộ xử lý giảm là 2 p1, so với p – 1 thông điệp của phân
phối một chiều. Đây là một lợi thế, đặc biệt với ma trận tương đối nhỏ. Theo kết quả thực nghiệm của họ, số các thông điệp giảm đáng kể và dung lượng truyền thơng thì như nhau.
Để khai thác tính thưa của ma trận thưa, trước tiên chúng ta phải lựa chọn được cấu trúc dữ liệu thích hợp, thường chỉ lưu các phần tử khác không của ma trận. Tiếp theo, đi vào thiết kế thuật toán nhân ma trận thưa với véc tơ song song với mục tiêu đề ra là cực tiểu hố chi phí truyền thơng và đạt cân bằng tải tốt.
2.1.2 Cấu trúc dữ liệu cho ma trận thƣa
Lợi ích chính của việc khai thác tính thưa là làm giảm bộ nhớ sử dụng (các phần tử 0 không được lưu trữ) và thời gian tính tốn (các phép tốn với 0 được bỏ qua hoặc được làm cho đơn giản). Tuy nhiên, có một giá phải trả là các thuật toán ma trận thưa phức tạp hơn so với ma trận dày tương ứng. Việc phát triển và cài đặt các ma trận thưa chi phí nhiều thời gian và cơng sức hơn. Ma trận thưa có thể lưu trữ sử dụng nhiều cấu trúc dữ liệu khác nhau, lựa chọn cấu trúc nào là tốt nhất phụ thuộc vào bài toán cụ thể. Dưới đây là một số cấu trúc thường gặp [18]:
Lƣợc đồ tọa độ (coordinate scheme), hay lược đồ bộ ba (triple scheme). Mỗi phần
tử khác không aij được biểu diễn lại bằng bộ ba (i, j, aij), ở đây i là chỉ số dòng, j là chỉ số
cột và aij là giá trị số. Bộ ba được lưu trữ theo thứ tự tuỳ ý trong mảng. Cấu trúc dữ liệu này là dễ hiểu nhất và chúng được sử dụng cho các bộ dữ liệu trong Matrix Market. Đây là cấu trúc phù hợp cho đầu vào tính tốn song song, tất cả các thơng tin về phần tử khác không được chứa trong bộ ba, ta có thể gửi trực tiếp và độc lập các bộ ba này tới các bộ xử lý. Tuy nhiên sẽ khó để thực hiện các thao tác hàng hay cột thông minh (row-wise,
column-wise) trên cấu trúc dữ liệu này, tức là việc lấy ra từng hàng hay từng cột để tính
tốn thì khơng thuận tiện lắm.
Lƣu trữ hàng nén (CRS-Compressed Row Storage). Mỗi hàng i của ma trận được
lưu trữ như một véc tơ thưa chứa các cặp (j, aij) biểu diễn các giá trị khác 0. Trong cấu
trúc dữ liệu, a[k] biểu thị giá trị của phần tử khác không aij được đánh chỉ số k, và j[k] là chỉ số cột của aij. Các hàng được lưu trữ liên tục, theo thứ tự tăng của chỉ số hàng. Vị trí
của phần tử khác khơng đầu tiên của hàng i được cho bởi start[i]; số các phần tử khác
không của hàng i bằng start[i+1] - start[i], ở đây qui ước start[m] = nz(A).
Ví dụ 2.1: cho ma trận 0 3 0 0 1 4 1 0 0 0 , 5, ( ) 13. 0 5 9 2 0 6 0 0 5 3 0 0 5 8 9 A n nz A
Cấu trúc dữ liệu CRS của ma trận A như sau:
a[k]= 3 1 4 1 5 9 2 6 5 3 5 8 9
j[k]= 1 4 0 1 1 2 3 0 3 4 2 3 4
k = 0 1 2 3 4 5 6 7 8 9 10 11 12
Cấu trúc dữ liệu CRS có lợi thế đó là các phần tử của hàng được lưu trữ liên tiếp, bởi vậy các thao tác hàng là dễ dàng. Nếu chúng ta tính u = Av, thì các phần tử khác khơng aij cần thiết để tính ui được nhóm lại với nhau thuận tiện. Thuật toán 2.2 chỉ ra nhân ma trận thưa với véc tơ tuần tự sử dụng CRS.
start[i] = 0 2 4 7 10 13