1. Trang chủ
  2. » Luận Văn - Báo Cáo

thiết kế nhân ma trận thưa với véctơ trong tính toán song song và ứng dụng

102 1,5K 4

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 102
Dung lượng 1,64 MB

Nội dung

Trong phạm vi luận văn này trình bày ba phần chính, Chương 1 trình bày tổng quan về xử lý song song, thuật toán song song và giới thiệu lập trình song song với MPI sử dụng Visual của Mi

Trang 1

đại học quốc gia hà nội

tr-ờng đại học khoa học tự nhiên

Ngô thị nhạn

Thiết kế nhân ma trận th-a với véctơ trong

tính toán song song và ứng dụng

luận văn thạc sĩ khoa học

Hà Nội - Năm 2011

Trang 2

đại học quốc gia hà nội

tr-ờng đại học khoa học tự nhiên

Ngô thị nhạn

Thiết kế nhân ma trận th-a với véctơ trong

tính toán song song và ứng dụng

Chuyên ngành: Bảo đảm toán học cho máy tính và hệ thống tính toán

Trang 3

MỤC LỤC

Trang

Trang phụ bìa

Mục lục

Danh mục các ký hiệu

Danh mục các bảng

Danh mục các hình vẽ

Danh mục các thuật toán

MỞ ĐẦU 1

Chương 1 - TỔNG QUAN VỀ XỬ LÝ SONG SONG 12

1.1 Hệ thống song song 12

1.1.1 Khái niệm xử lý song song 12

1.1.2 Kiến trúc xử lý song song 12

1.2 Các thành phần của máy tính song song 15

1.2.1 Bộ nhớ 15

1.2.2 Chương trình dịch và các hệ điều hành 17

1.3 Các mô hình lập trình song song 19

1.3.1 Mô hình chia sẻ bộ nhớ 19

1.3.2 Mô hình tuyến 20

1.3.3 Mô hình song song dữ liệu 20

1.3.4 Mô hình truyền thông điệp 21

1.4 Nguyên lý thiết kế thuật toán song song 22

1.4.1 Định nghĩa thuật toán song song 22

1.4.2 Các giai đoạn của thiết kế thuật toán song song 22

Trang 4

1.4.3 Đánh giá độ phức tạp của thuật toán song song 25

1.5 Lập trình song song với MPI 27

1.5.1 Giao diện truyền thông điệp - MPI 27

1.5.2 Giới thiệu gói CCP của Microsoft 31

1.5.3 Lập trình MPI với VS.NET 34

1.6 Kiến trúc cụm máy tính 35

Chương 2 – THUẬT TOÁN SONG SONG NHÂN MA TRẬN THƯA VỚI VÉCTƠ 38

2.1 Ma trận thưa 38

2.1.1 Đặt vấn đề 38

2.1.2 Cấu trúc dữ liệu cho ma trận thưa 43

2.2 Nhân ma trận thưa với véc tơ song song 48

2.2.1 Thuật toán song song 48

2.2.2 Phân phối ma trận 53

2.2.3 Phân phối véc tơ 60

2.2.3.1 Cận dưới địa phương cho số truyền thông cực đại 62

2.2.3.2 Phân phối các véc tơ độc lập 71

2.2.3.3 Phân phối các véc tơ đồng thời 78

Chương 3 – KẾT QUẢ THỰC NGHIỆM 83

3.1 Bộ dữ liệu 83

3.2 Kết quả 83

KẾT LUẬN 93

TÀI LIỆU THAM KHẢO 94

PHỤ LỤC 96

Trang 5

BẢNG THUẬT NGỮ VIẾT TẮT

CCS Compressed Column Storage Lưu trữ nén cột

CRS Compressed Row Storage Lưu trữ nén dòng

CPU Central Processing Unit Bộ xử lý trung tâm

HPC High Performance Computing Tính toán/máy tính hiệu năng cao

ICRS Incremental Compressed Row

Storage Lưu trữ nén dòng có gia số JDS Jagged Diagonal Storage Lưu trữ đường chéo răng cưa

MIMD Multi Instruction Stream, Multi

Data Stream Đa luồng lệnh, đa luồng dữ liệu MISD Multi Instruction Stream, Single

Data Stream Đa luồng lệnh, đơn luồng dữ liệu MPI Message Passing Interface Giao diện truyền thông điệp

NUMA Non-Uniform Memory Access Truy cập bộ nhớ không đồng thời

PRAM Parallel Random Access Machine Máy truy trập ngẫu nhiên song song

SIMD Single Instruction Stream, Multi

Data Stream Đơn luồng lệnh, đa luồng dữ liệu SISD Single Instruction Stream, Single

Data Stream Đơn luồng lệnh, đơn luồng dữ liệu TCP Transmission Control Protocol Giao thức điều khiển truyền thông

UDP User Datagram Protocol Giao thức gói người dùng

UMA Uniform Memory Access Truy cập bộ nhớ đồng thời

WSC Workstation Cluster Cụm máy trạm

Trang 6

DANH MỤC CÁC BẢNG

Trang

Bảng 3.1 Các file dữ liệu ma trận 83

Bảng 3.2 Thống kê cho ma trận bcsstk13 85

Bảng 3.3 Thống kê cho ma trận lp_cycle 86

Bảng 3.4 Thống kê cho ma trận onetone2 87

Bảng 3.5 Thống kê cho ma trận epb2 88

Bảng 3.7 Thống kê cho ma trận random20k 90

Trang 7

DANH MỤC HÌNH VẼ

Trang

Hình 1.1 Phân cấp hệ thống bộ nhớ 15

Hình 1.2 Mô hình tuyến 20

Hình 1.3 Các giai đoạn của quá trình thiết kế thuật toán 23

Hình 1.4 Luật Amdahl 27

Hình 1.5 Mô phỏng kiến trúc một cụm tính toán 32

Hình 1.6 Mô hình kiến trúc lập lịch 33

Hình 2.1 Mô phỏng động lực học bằng ma trận lực thưa 40

Hình 2.2 Minh hoạ nhân ma trận thưa với véc tơ song song 49

Hình 2.3 Minh hoạ truyền thông nhân ma trận thưa với véc tơ 51

Hình 2.4 Phân phối của ma trận impcol_b 58

Hình 3.1 Hình dạng thưa của ma trận bcsstk13 84

Hình 3.2 Hình dạng thưa của ma trận lp_cycle 85

Hình 3.3 Hình dạng thưa của ma trận onetone2 86

Hình 3.4 Hình dạng thưa của ma trận epb2 87

Hình 3.5 Hình dạng thưa của ma trận nasa2910 88

Hình 3.6 Phân phối LA cho random20k với P = 4 91

Hình 3.7 Phân phối LA cho lp_cycle với P = 4 92

Trang 8

DANH MỤC CÁC THUẬT TOÁN

Trang

Thuật toán 2.1 Thuật toán nhân ma trận thưa với véc tơ tuần tự 39

Thuật toán 2.2 Thuật toán tuần tự nhân ma trận thưa với véc tơ sử dụng CRS 45

Thuật toán 2.3 Thuật toán tuần tự nhân ma trận thưa với véc tơ sử dụng ICRS 46

Thuật toán 2.4 Nhân ma trận thưa với véc tơ song song 50

Thuật toán 2.5 Thuật toán Mondrian phân hoạch ma trận thưa 59

Thuật toán 2.6 Xây dựng cận dưới địa phương của bộ xử lý s 64

Thuật toán 2.7 Chuyển tập C thành C0, ,C1 66

Thuật toán 2.8 Tạo cận dưới địa phương tổng quát cho bộ xử lý s 69

Thuật toán 2.9 Thuật toán biên địa phương (LA) 73

Thuật toán 2.10 Thuật toán phân phối véc tơ đồng thời (LAvu) 80

Trang 9

MỞ ĐẦU

Nhân loại ngày nay đang chứng kiến sự phát triển mạnh mẽ của ngành Công nghệ thông tin, một trong những ngành mũi nhọn của nhiều quốc gia trên thế giới Sự phát triển vượt bậc của nó là kết quả tất yếu của sự phát triển các thiết bị phần cứng cũng như phần mềm tiện ích Từ những máy tính đơn giản, tốc độ xử lý chậm, và chỉ được sử dụng trong một số lĩnh vực kỹ thuật nhất định, thì ngày nay chúng đã có khả năng tính toán và tốc độ

xử lý vượt trội trở thành một công cụ không thể thiếu trong mọi lĩnh vực của đời sống Những máy tính ra đời đầu tiên, do hạn chế về tốc độ xử lý và cơ chế vào ra dữ liệu nên việc lập trình rất khó khăn Điều này làm cho máy tính không có khả năng sử dụng dễ dàng và phổ cập, nó chỉ được ứng dụng trong một số lĩnh vực khoa học đặc biệt

Ngày nay, cùng với sự phát triển mạnh mẽ của thiết bị lưu trữ, bộ nhớ, tốc độ xử lý

và các thiết bị ngoại vi,… máy tính đã trở nên thân thiện hơn với người sử dụng, cũng như tốc độ tính toán nhanh hơn rất nhiều Nhờ đó mà rất nhiều bài toán lớn đã có khả năng thực thi và nhiều ứng dụng được đưa ra

Tuy nhiên, một thực tế là còn rất nhiều vấn đề lớn với số lượng cần tính toán khổng

lồ mà một máy tính thông thường không thể giải quyết được Vào thập kỷ 70, các nhà khoa học đã đưa ra ý tưởng về cấu trúc song song nhằm kết hợp sức mạnh của nhiều bộ

xử lý trên một máy tính, hoặc kết hợp nhiều máy tính với nhau thông qua mạng máy tính tạo thành máy song song ảo. Ngoài việc tính nhanh, các máy tính song song có độ an toàn cao hơn máy tính đơn, khi một vài bộ xử lý hỏng thì máy tính song song vẫn có thể hoạt động được trong khi máy tính đơn thì không làm được điều đó

Hiện nay trên thế giới đã có những máy tính song song chứa đến hàng nghìn bộ xử

lý Để khai thác tiềm năng và sức mạnh của máy tính song song, cùng với việc thiết kế kiến trúc song song ta còn phải nghiên cứu những vấn đề quan trọng khác như hệ điều

hành hỗ trợ xử lý song song, các ngôn ngữ lập trình và thuật toán song song

Việc nghiên cứu thiết kế các máy tính song song, và các thuật toán song song cũng như các ngôn ngữ lập trình hỗ trợ lập trình song song bắt đầu được quan tâm từ những

Trang 10

năm 70, cho đến nay các ứng dụng của chúng đã lan rộng khắp các lĩnh vực của đời sống như đánh giá khả năng rủi ro về tài chính: dùng để mô hình hoá các xu hướng trên thị trường… Hỗ trợ quyết định như phân tích thị trường, dự báo thời tiết… Trí tuệ nhân tạo như thiết kế robot… Xử lý ảnh ứng dụng trong công nghệ nhận dạng… Điều khiển tự

động… Trong đó bài toán có liên quan tới ma trận thưa đóng một vai trò quan trọng, hay

gặp 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, …

Do vậy việc nghiên cứu các thuật toán ma trận thưa, đặc biệt là các thuật toán song song trên ma trận thưa là rất cần thiết

Trong phạm vi luận văn này trình bày ba phần chính, Chương 1 trình bày tổng quan

về xử lý song song, thuật toán song song và giới thiệu lập trình song song với MPI sử

dụng Visual của Microsoft; Chương 2 trình bày về các thuật toán thiết kế cho nhân ma trận thưa với véc tơ song song; Chương 3 trình bày một số kết quả thực nghiệm trên một

số bộ dữ liệu cho chương trình nhân ma trận thưa với véc tơ song song Với thời gian tiếp cận vấn đề và lượng thông tin còn hạn chế, luận văn còn nhiều thiếu sót Tôi rất mong nhận được sự góp ý của các thầy, các cô và các anh/chị để có thể tiếp tục phát triển đề tài

đã nghiên cứu và đạt được kết quả

Trang 11

Chương 1 - TỔNG QUAN VỀ XỬ LÝ SONG SONG

1.1 Hệ thống song song

1.1.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 đề, thường được thực hiện trên những hệ thống có nhiều bộ xử lý [1]

Máy tính song song là tập hợp các bộ xử lý, thường cùng một loại, kết nối với nhau

theo một kiến trúc xác định để cùng hợp tác hoạt động và trao đổi dữ liệu

1.1.2 Kiến trúc xử lý song song

a) Máy tính song song phân chia theo cách thức thực hiện chương trình

Có nhiều cách để phân loại máy tính song song, người ta thường sử dụng cách phân loại máy tính song song của M.J Flynn (1966) [13] Cách phân loại này dựa vào sự phân phối dữ liệu và phân phối các lệnh trên mỗi bộ xử lý

Luồng lệnh (instruction stream) là một dãy các lệnh từ một đơn vị điều khiển hướng

đến một hay nhiều bộ xử lý

Luồng dữ liệu (data stream) là một dãy dữ liệu từ một vùng nhớ hướng đến một bộ

xử lý hoặc từ một bộ xử lý hướng đến một vùng nhớ

Bốn cấu trúc máy tính song song được phân loại bởi Flynn đó là:

Mô hình SISD (đơn luồng lệnh, đơn luồng dữ liệu)

Máy tính loại SISD chỉ có một CPU, ở mỗi thời điểm thực hiện một chỉ lệnh và chỉ đọc, ghi một mục dữ liệu Tất cả các máy tính SISD chỉ có một thanh ghi register được gọi là bộ đếm chương trình được sử dụng để nạp địa chỉ của lệnh tiếp theo khi xử lý tuần tự và kết quả

là thực hiện theo một thứ tự xác định của các câu lệnh Mô hình SISD còn được gọi là SPSD

Trang 12

- đơn chương trình và đơn luồng dữ liệu Đây chính là mô hình máy tính truyền thống kiểu von Neumann 1

Mô hình SIMD (đơn luồng lệnh, đa luồng dữ liệu)

Máy tính loại SIMD có một đơn vị điều khiển để điều khiển nhiều đơn vị xử lý thực hiện theo một luồng các câu lệnh CPU phát sinh tín hiệu điều khiển tới tất cả các phần tử

xử lý, những bộ xử lý 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 bộ xử lý có luồng dữ liệu riêng Đây là kiểu tính toán lặp lại các đơn vị số học trong CPU, cho phép những đơn vị khác nhau thực hiện trên những toán hạng khác nhau, nhưng thực hiện cùng một lệnh Máy tính SIMD có thể hỗ trợ xử lý kiểu véc tơ, trong đó có thể gán các phần tử của véc tơ cho các phần tử xử lý để tính toán đồng thời Máy tính véc tơ và các bộ xử lý mảng là mô hình chủ yếu thuộc loại này Mô hình SIMD còn được gọi là SPMD - đơn chương trình và đa luồng dữ liệu Đây chính là mô hình máy tính phổ biến có trên thị trường như: ILLIAC IV, DAP và Connection Machine CM-2

Mô hình MISD (đa luồng lệnh, đơn luồng dữ liệu)

Máy tính MISD có thể thực hiện nhiều chương trình (nhiều lệnh) trên cùng một mục

dữ liệu, nên còn được gọi là MPSD - đa chương trình, đơn luồng dữ liệu Kiến trúc kiểu này có thể chia thành hai nhóm:

- Lớp các máy tính yêu cầu những đơn vị xử lý khác nhau có thể nhận được những chỉ lệnh khác nhau để thực hiện trên cùng một mục dữ liệu Đây là kiến trúc khó

và hiện nay chưa có loại máy tính nào được sản xuất theo loại này

- Lớp các máy tính có các luồng dữ liệu được chuyển tuần tự theo dãy các CPU liên tiếp Đây là loại kiến trúc hình ống thực hiện xử lý theo vector thông qua một dãy các bước, trong đó mỗi bước thực hiện một chức năng và sau đó chuyển kết quả

1 Mô hình máy tính do von Neumann (1903-1957) đưa ra, là kiến trúc máy tính phổ biến nhất hiện nay, với đặc

trưng là các lệnh được thực hiện một cách tuần tự, mỗi thời điểm chỉ thực hiện được một lệnh

Trang 13

cho đơn vị xử lý thực hiện bước tiếp theo Hoạt động của máy tính theo kiến trúc loại này giống như hệ tuần hoàn nên còn được gọi là hệ tâm thu

Mô hình MIMD (đa luồng lệnh, đa luồng dữ liệu)

Máy tính loại MIMD còn gọi là đa bộ xử lý, trong đó mỗi bộ xử lý có thể thực hiện những luồng lệnh (chương trình) khác nhau trên các luồng dữ liệu riêng

Hầu hết các hệ thống MIMD đều có bộ nhớ riêng và cũng có thể truy cập vào được

bộ nhớ chung (toàn cục) khi cần, do vậy giảm thiểu được sự trao đổi giữa các bộ xử lý trong hệ thống

Đây là kiến trúc phức tạp nhất, nhưng nó là mô hình hỗ trợ xử lý song song cao nhất

và đã có nhiều máy tính được sản xuất theo kiến trúc này như: BBN Butterfly, Aliant FX, iSPC của Intel, …

b) Máy tính song song phân chia theo kiến trúc phần cứng

Kiến trúc máy tính là một phần rất quan trọng quyết định hiệu quả của công việc, đối với một máy tính song song có một số loại kiến trúc phần cứng cơ bản sau:

Máy tính song song với bộ nhớ chia sẻ

Trong máy tính song song với bộ nhớ chia sẻ, bộ nhớ là chung cho tất cả các bộ xử

lý Bộ nhớ được phân thành các mô đun nhớ, mỗi mô đun này có kênh vào ra riêng Các

mô đun nhớ này được nối với bộ xử lý trên mỗi CPU thông qua bus hoặc mạng kết nối nội bộ

Trong mô hình này, các CPU được nối đến ngân hàng bộ nhớ trên cùng một bus, với cùng tốc độ Các bộ xử lý khi hoạt động cùng chia sẻ dữ liệu ghi trong bộ nhớ chung Mỗi

bộ xử lý đọc dữ liệu mà nó cần trong bộ nhớ chung, xử lý chúng, rồi lại ghi kết quả vào

bộ nhớ

Vì các bộ xử lý dùng chung bộ nhớ, có xuất hiện xung đột truy cập, vì vậy loại kết nối dùng trong mô hình này là: bus hoặc crossbar, với bus thì các bộ xử lý được tổ chức liên kết với nhau theo dãy, đây là dạng liên kết đơn giản

Trang 14

Máy tính song song với bộ nhớ phân tán

Trong mô hình này mỗi CPU có bộ nhớ riêng, mỗi CPU truy nhập đến bộ nhớ riêng của mình với tốc độ nhanh, còn truy cập đến bộ nhớ của CPU khác thì chậm hơn

Trong mô hình này mỗi bộ xử lý ngoài việc sử dụng dữ liệu trong bộ nhớ riêng, nó còn có thể đọc trên một hoặc nhiều kênh truyền thông từ các bộ xử lý khác mà nó cần, thực hiện xử lý, rồi lại có thể truyền kết quả cho bộ xử lý khác Do đó thới gian thực hiện trong kiến trúc phụ thuộc vào thời gian di chuyển dữ liệu giữa các bộ xử lý

Nhìn chung mạng liên kết không cho phép kết nối tất cả các CPU với nhau, mỗi CPU chỉ được kết nối với một số CPU khác

Mô hình hỗn hợp

Mô hình này là sự kết hợp giữa các mô hình đã trình bày ở trên, nó dung hoà được các ưu nhược điểm của hai kiến trúc trên, các bộ xử lý được liên kết với nhau thông qua một mạng giao tiếp tạo thành một hệ thống liên cụm, mỗi cụm có kiến trúc dùng chung (chia sẻ)

1.2 Các thành phần của máy tính song song

1.2.1 Bộ nhớ

Một trong các thành phần quan trọng nhất của kiến trúc máy tính là bộ nhớ Bộ nhớ

thường được chia thành n mức như hình 1.1 [1]

Trang 15

Bộ nhớ mức 1 là mức bộ nhớ cao nhất có dung lượng nhỏ nhất, nhanh và đắt nhất, thường gắn chặt với mỗi bộ xử lý thành bộ nhớ cục bộ Bộ nhớ mức 2 thường nhỏ hơn, chậm hơn và rẻ hơn mức 1, …

Về nguyên tắc, dữ liệu được chuyển đổi giữa các mức lân cận của các bộ nhớ và hoàn toàn được điều khiển bởi bộ nhớ mức 1 Về lý thuyết, trong cấu trúc phân cấp bộ nhớ, tốc độ truy cập bộ nhớ trung bình gần bằng tốc độ truy cập ở mức cao (mức 1), nhưng chi phí của các đơn vị nhớ trung bình lại gần với chi phí của bộ nhớ ở mức thấp

Tất cả các bộ nhớ AM được tổ chức thành các từ và được xây dựng thành mảng các

ô giống nhau Mỗi ô trong số m n ô nhớ và nó có một mạch vòng để so sánh đối số với giá trị được lưu trữ trong các ô nhớ, đồng thời chỉ ra kết quả khi đối sánh thành công Hệ thống có thanh ghi lưu trữ đối số, một thanh ghi đánh dấu những trường của mỗi từ mà bộ nhớ cần so sánh và thanh ghi đối sánh (các bít đối sánh) chỉ ra những từ tìm thấy

Mô hình tính toán song song PRAM bao gồm bộ nhớ chung RAM với m vùng nhớ

đủ lớn để chia sẻ cho p bộ xử lý Bộ nhớ chung được sử dụng để lưu trữ dữ liệu và là vùng nhớ để trao đổi giữa các bộ xử lý

Có một số cách khác nhau để các bộ xử lý có thể đọc/ghi dữ liệu, đó là:

- Concurrent Read (CR): nhiều bộ xử lý có thể đọc đồng thời cùng một ô nhớ

- Exlusive Read (ER): p bộ xử lý đọc được p vùng nhớ khác nhau Mỗi bộ xử lý đọc được chính xác một vùng nhớ và mỗi vùng nhớ được đọc bởi một bộ xử lý

Trang 16

- Concurrent Write (CW): cùng một thời điểm cho phép nhiều bộ xử lý ghi vào cùng một vùng nhớ

- Exlusive Write (EW): p bộ xử lý ghi được vào p vùng nhớ khác nhau Mỗi bộ xử lý ghi được vào chính xác một vùng nhớ và ngược lại

Dễ nhận thấy rằng: ER, EW là trường hợp đăc biệt của CR và CW Trong đó, CW là cần phải chú ý nhất và được phân nhỏ thành các loại như sau:

- Ghi đồng thời có ưu tiên (Priority CW): 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 một vùng nhớ thì ưu tiên cho bộ xử lý có mức ưu tiên cao nhất Các mức ưu tiên có thể gắn tĩnh hoặc động theo những qui

tắc được xác định khi thực hiện

- Ghi đồng thời chung (Common CW): tất cả các bộ xử lý được phép ghi vào cùng

một vùng nhớ chỉ khi chúng ghi cùng một giá trị Trong trường hợp này, một bộ

xử lý được chọn để ghi dữ liệu đó

- Ghi đồng thời tự do (Arbitrary CW): một số bộ xử lý muốn ghi dữ liệu đồng thời

vào một vùng nhớ, nhưng chỉ một bộ xử lý được phép thay đổi giá trị của vùng nhớ đó Trong trường hợp này, chúng ta phải chỉ ra cách để lựa chọn bộ xử lý thực

hiện

- Ghi đồng thời ngẫu nhiên (Random CW): bộ xử lý được lựa chọn để ghi dữ liệu là ngẫu nhiên

- Ghi đồng thời phối hợp (Combining CW): tất cả cá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ị Giá trị này sẽ được ghi

Trang 17

chương trình thông dịch được sử dụng để thực hiện các chuyển đổi đó Có ba cách tiếp cận để xây dựng chương trình dịch cho các máy tính song song:

- Phân hoạch và lập lịch khi chạy: Cách tiếp cận này khá phù hợp với một số ứng

dụng thực tế Tuy nhiên, nó có hạn chế là việc lập lịch và phân hoạch được thực hiện lúc chạy chương trình sẽ làm giảm hiệu suất của hệ thống

- Phân hoạch khi biên dịch và lập lịch khi chạy: Đây là mô hình chung để xây dựng

chương trình dịch cho đa bộ xử lý Lập lịch phân việc được thực hiện lúc chương trình chạy, nhưng việc phân hoạch công việc thành các khối được thực hiện bởi người lập trình và chương trình dịch Theo cách tiếp cận này, sự đồng bộ hóa các tiến trình và truyền thông phải được xác định rõ trong hệ thống

- Phân hoạch và lập lịch khi biên dịch: Phân hoạch công việc và lập lịch được thực

hiện ở giai đoạn dịch chương trình Do vậy, chương trình dịch loại này đòi hỏi phải rất hoàn hảo Nhưng điều này khá khó, bởi vì rất khó đánh giá được thời gian thực hiện chương trình, đặc biệt là vấn đề lập lịch trước sẽ không thể thực hiện tối ưu được

Hệ điều hành

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 thực hiện các chức năng chính sau:

- Khởi động hệ thống

- Phân đoạn chương trình và lập lịch cho các tiến trình

- Trao đổi và đồng bộ hóa các tiến trình

- Quản lý và điều hành hệ thống, v.v

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 nhất làm việc cho hiệu quả

Nói chung, hệ điều hành đa bộ xử lý cũng giống như hệ điều hành tập trung, phải chứa các thành phần quản trị hệ thống như: quản trị các tiến trình, quản trị bộ nhớ, quản

Trang 18

trị tài nguyên và quản trị các tệp Người ta phân các hệ điều hành cho các máy tính song song thành ba loại:

- Những hệ điều hành mở rộng và phát triển từ những hệ đơn bộ xử lý để chạy được trên những kiến trúc song song, như VMS, UNIX

- Những hệ điều hành được thiết kế riêng cho những kiến trúc song song, như: hệ Hydra cho C.mmp, Medusa cho Cm*, cả hai đều được phát triển ở Carnegie-Mellon University

- Những hệ điều hành tổng hợp được thiết kế để cài đặt được trên những kiến trúc song song khác nhau, ví dụ MACH Multiprocessor

Hầu hết các phiên bản mới của hệ điều hành UNIX đều thực hiện trên các hệ đa bộ

xử lý Trong số đó có thể kể ra như Solaris của Sun, HP UNIX của HP, Digital UNIX của Digital, AIX của IBM, … Những hệ điều hành mới nhất như Window NT của Microsoft cũng được thiết kế để chạy trên những hệ thống đa bộ xử lý

1.3 Các mô hình lập trình song song

1.3.1 Mô hình chia sẻ bộ nhớ

Trong mô hình này, các bộ xử lý đều được kết nối tới một bộ nhớ chung, thông qua các phương tiện phần cứng hoặc phần mềm Có các cơ chế khác nhau như khóa/semaphores sử dụng để kiểm soát truy cập vào bộ nhớ chung đó

Điểm bất lợi của mô hình này là khả năng phát triển tới 32 bộ xử lý là rất khó, và mô hình bộ nhớ chia sẻ là ít linh hoạt hơn mô hình bộ nhớ phân tán

Dạng đường bus

Các máy MIMD với bộ nhớ chia sẻ có các bộ xử lý cùng chia sẻ một vùng nhớ tập trung chung Nói đơn giản nhất, mọi bộ xử lý đều kết nối bằng một đường bus tới bộ nhớ Cách kết nối này gọi là dựa trên đường bus, và có quá nhiều xung đột trên đó

Dạng phân cấp

Các máy MIMD với bộ nhớ chia sẻ phân cấp sử dụng một hệ thống phân chia các bus cho phép các bộ xử lý truy cập tới các bộ nhớ của những bộ xử lý khác Các bộ xử lý

Trang 19

ở các vùng khác nhau có thể giao tiếp thông qua các nút nối Các bus hỗ trợ giao tiếp giữa các máy Với kiến trúc này, các máy có thể hỗ trợ tới hàng ngàn bộ xử lý

1.3.2 Mô hình tuyến

Trong mô hình tuyến (hay mô hình luồng) của lập trình song song, một tiến trình đơn có thể bao gồm nhiều tuyến thực hiện đồng thời, minh họa hình 1.2 Mỗi luồng có dữ liệu cục bộ, nhưng đồng thời chia sẻ toàn bộ tài nguyên của tiến trình chủ Điều này tiết kiệm các chi phí liên quan đến việc sao chép các tài nguyên của chương trình cho mỗi tuyến

Có hai chuẩn triển khai luồng đó là: POSIX Threads và OpenMP Microsoft có triển khai luồng riêng, không liên quan đến các chuẩn UNIX POSIX hay OpenMP

Hình 1.2 Mô hình tuyến Hình 1,2 mô tả chương trình trong tệp a.out, chương trình khởi động chạy như một tiến trình đơn, sau đó các tiến trình được khởi tạo để chạy đồng thời, các tiến trình có thể

sử dụng tài nguyên của a.out và có thể kết thúc riêng rẽ

1.3.3 Mô hình song song dữ liệu

Mô hình song song dữ liệu hay gặp khi phần lớn công việc song song tập trung vào việc thực hiện các tác vụ trên một tập dữ liệu Tập dữ liệu thường được tổ chức thành một cấu trúc thông dụng, như mảng hay khối lập phương.Một tập các tác nhiệm làm việc trên cùng một cấu trúc dữ liệu, tuy nhiên, mỗi tác nhiệm làm việc trên một phân vùng khác

Trang 20

nhau của cùng một cấu trúc dữ liệu Các tác nhiệm thực hiện cùng một tác vụ trên phân vùng làm việc của chúng.

Trên các kiến trúc bộ nhớ chia sẻ, tất cả các tác nhiệm có thể truy cập vào cấu trúc

dữ liệu thông qua bộ nhớ toàn cục Trên các kiến trúc bộ nhớ phân tán, cấu trúc dữ liệu được chia ra và được đặt như là các phần trong bộ nhớ cục bộ của mỗi tác nhiệm

1.3.4 Mô hình truyền thông điệp

Trong mô hình truyền thông điệp, các tiến trình chia sẻ với nhau qua các kênh truyền thông Kênh là khái niệm trừu tượng của đường truyền thông vật lý giữa các tiến trình

Các kênh được truy cập bởi hai phương thức gửi và nhận thông điệp: send() và receive()

Khi một tiến trình gửi đi một thông điệp vào kênh truyền và có một tiến trình khác yêu cầu nhận thông điệp đó thì diễn ra sự trao đổi dữ liệu và sự trao đổi được hoàn tất khi dữ liệu đã được chuyển từ nơi gửi tới nơi nhận

Mô hình truyền thông điệp có các đặc điểm sau:

- Một tập các tác nhiệm sử dụng bộ nhớ cục bộ riêng của chúng trong quá trình tính toán Nhiều tác nhiệm có thể nằm trên cùng một máy cũng như nằm trên nhiều máy

- Các tác nhiệm vụ trao đổi dữ liệu thông qua truyền thông bằng cách gửi và nhận các thông điệp

- Truyền dữ liệu thường đòi hỏi sự hợp tác giữa các tiến trình Ví dụ, một tác vụ gửi thông điệp phải có một tác vụ nhận thông điệp tương ứng

Có hai mô hình truyền thông điệp cơ bản là:

- Truyền thông điệp đồng bộ: Trong mô hình này, tiến trình gửi bị chặn lại cho đến khi tiến trình nhận sẵn sàng nhận Ở đây, sự truyền thông và đồng bộ hoá luôn gắn chặt với nhau

- Truyền thông điệp dị bộ: Trong mô hình này, tiến trình gửi sẽ không phải chờ đến khi tiến trình nhận sẵn sàng mà cứ gửi khi có yêu cầu Như vậy, hai tiến trình gửi

và nhận có thể hoạt động gần như đọc lập với nhau và thông điệp có thể nhận được sau một khoảng thời gian nào đó (lâu bất kỳ) kể từ khi nó được gửi đi Tuy nhiên,

Trang 21

tiến trình nhận thì phải chờ cho đến khi có được thông điệp của tiến trình gửi gửi cho nó.

Có nhiều thư viện truyền thông điệp, nhưng chúng khác nhau đáng kể, gây khó khăn cho các nhà lập trình trong việc phát triển các ứng dụng di động MPI Forum được lập ra với mục đích thiết lập một chuẩn cho việc triển khai mô hình truyền thông điệp Hiện nay, MPI là chuẩn cho mô hình truyền thông điệp

1.4 Nguyên lý thiết kế thuật toán song song

1.4.1 Định nghĩa thuật toán song song

Thuật toán song song là một tập hợp các tiến trình hay các tác vụ có thể thực thi

đồng thời và có thể trao đổi dữ liệu với nhau để kết hợp giải quyết vấn đề đặt ra [13]

Có thể có nhiều thuật toán song song khác nhau cùng giải quyết một bài toán, tùy thuộc vào cách dữ liệu được truy xuất, cách phân rã dữ liệu thành những tác vụ, cách ánh

xạ các tác vụ này vào các bộ vi xử lý và cách đồng bộ các tiến trình Do đó, để có được một thuật toán song song hiệu quả, ta cần tận dụng các nguyên lý cho việc thiết kế thuật toán song song như: nguyên lý lập lịch, nguyên lý “hình ống”, nguyên lý chia để trị, nguyên lý đồ thị phụ thuộc, nguyên lý tình thế cạnh tranh…

1.4.2 Các giai đoạn của thiết kế thuật toán song song

Có ba phương pháp thiết kế thuật toán song song:

- Song song hoá những thuật toán tuần tự đã có

- Thiết kế thuật toán song song mới trên cơ sở thuật toán song song đã có

- Thiết kế thuật toán song song hoàn toàn mới thích ứng với những cấu trúc song song

Dù sử dụng phương pháp nào thì quá trình thiết kế cũng thường bao gồm các giai đoạn sau:

Phân hoạch bài toán

Mục tiêu của giai đoạn phân hoạch là tìm kiếm khả năng thực hiện song song của bài toán Phân hoạch là thao tác phân tích một tính toán thành nhiều tác vụ nhỏ Giai đoạn

Trang 22

thiết kế này thường độc lập với kiến trúc máy và đảm bảo thuật toán đặt ra có độ tương thích cao với các hệ máy tính song song

Hình 1.3 Các giai đoạn của quá trình thiết kế thuật toán Một phương pháp phân hoạch được coi là tốt nếu phân hoạch kết hợp cả sự tính toán

và dữ liệu trong bài toán Có hai phương pháp phân hoạch:

Trang 23

 Phân hoạch theo miền: Phương pháp này tập trung vào dữ liệu liên kết với bài toán, sau đó mới xác định một sự tính toán thích hợp trên những dữ liệu đó

 Phân hoạch theo chức năng: Phương pháp này phân hoạch sự tính toán thành những tác vụ tách rời, sau đó làm việc trên dữ liệu được kết hợp với bài toán

Truyền thông

Sau khi bài toán được chia nhỏ thành các tác vụ thì chúng ta phải xác định mối quan

hệ giữa các tác vụ đó rồi dựa trên các quan hệ này để chỉ ra cách truyền thông thích hợp giữa các tác vụ

Trong quá trình thiết kế thuật toán, giai đoạn truyền thông là rất cần thiết vì để thực hiện tính toán ta cần phải chuyển giao dữ liệu giữa các tác vụ Để thiết lập được một phương pháp truyền thông thích hợp cần cân nhắc đến hai vấn đề, đó là: cấu trúc kênh và cấu trúc truyền thông điệp

Tích hợp

Mục tiêu của giai đoạn này là đưa ra cách tích hợp một số tác vụ thích hợp thành một tác vụ đủ lớn cho một máy tính thực hiện Việc lựa chọn cách tích hợp tốt dựa trên việc cân nhắc một số vấn đề như: các đòi hỏi về truyền thông, kiến trúc thực thi thuật toán, khả năng và chi phí thực hiện

Ánh xạ

Sau khi đã tích hợp lại thành những tác vụ thích hợp, ta cần ánh xạ các tác vụ này vào kiến trúc máy tính thực thi thuật toán Giai đoạn này chỉ rõ nơi mà mỗi tác vụ được thực hiện Nói cách khác, mỗi thao tác sẽ được gán cho một bộ xử lý riêng để số bộ xử lý được sử dụng lớn nhất và chi phí truyền thông nhỏ nhất Có hai chiến lược được sử dụng nhằm đạt mục tiêu này, đó là:

 Đặt các tác vụ có khả năng chạy song song lên các vi xử lý khác nhau để tăng tính song song của giải thuật, từ đó giảm được thời gian thực hiện

 Đặt các tác vụ cần sự truyền thông với nhau thường xuyên lên cùng một vi xử lý nhằm làm tăng tính cục bộ

Trang 24

1.4.3 Đánh giá độ phức tạp của thuật toán song song

Độ phức tạp về thời gian là tiêu chí quan trọng trong đánh giá thuật toán song song Nói chung, độ phức tạp về thời gian của thuật toán song song không thể được xác định đơn giản chỉ là số thao tác tính toán cơ bản như trong tính toán tuần tự mà ta cần xét đến hai loại thao tác: thao tác tính toán cơ bản và thao tác định tuyến dữ liệu

- Thao tác cơ bản: là một thao tác số học hoặc logic được thực hiện cục bộ bởi một

bộ vi xử lý Trong thuật toán song song, một bước cơ bản được định nghĩa là tập hợp các thao tác cơ bản có thể được thực hiện đồng thời bởi một số bộ vi xử lý

khác nhau Độ phức tạp về thời gian thực hiện một bước cơ bản là O(1)

- Thao tác định tuyến: thực hiện việc định tuyến dữ liệu giữa các bộ xử lý để trao

đổi thông tin Một bước định tuyến được định nghĩa là một tập hợp các thao tác định tuyến dữ liệu có thể được thực hiện giữa một tập hợp các bộ vi xử lý khác nhau Việc xác định mỗi bước định tuyến phụ thuộc vào kiểu mạng liên kết

Ngoài ra, để đánh giá được độ phức tạp tính toán của các thuật toán song song, ngoài

số bước tính toán chúng ta còn cần đánh giá thời gian truyền thông của các tiến trình Trong một hệ thống truyền thông điệp, thời gian truyền thông điệp cũng phải được xem xét trong thời gian thực hiện của thuật toán

Thời gian thực hiện song song, ký hiệu là t p gồm hai phần t comp và t comm

p comp comm

ttt (1.1)

Trong đó, t comp là thời gian tính toán và t comm là thời gian truyền thông dữ liệu

Thời gian tính toán t comp được xác định giống như thuật toán tuần tự [2] Khi có nhiều tiến trình thực hiện đồng thời thì chỉ cần tính thời gian thực hiện của tiến trình phức tạp nhất Trong phân tích độ phức tạp tính toán, chúng ta luôn giả thiết rằng, tất cả các bộ

xử lý là giống nhau và thao tác cùng một tốc độ như nhau Đối với những cụm máy tính không thuần nhất thì điều này không đảm bảo nên việc đánh giá thời tính toán của những

hệ như thế là rất phức tạp

Trang 25

Thời gian truyền thông t comm lại phụ thuộc vào kích cỡ của các thông điệp, vào cấu hình kết nối mạng đường truyền và cả cách thức truyền tải thông điệp Công thức ước lượng thời gian truyền thông được xác định như sau:

comm startup data

Trong đó, t startup là thời gian cần thiết để gửi những thông điệp không phải là dữ liệu

Nó bao gồm cả thời gian để đóng gói thông điệp ở nơi gửi và thời gian mở gói ở nơi nhận Để đơn giản chúng ta giả thiết thời gian này là hằng số

t data là thời gian cần thiết để chuyển một mục dữ liệu (data word) từ nơi gửi tới nơi nhận, được giả thiết là hằng số và n là số từ dữ liệu được trao đổi trong hệ thống

Chi phí cho một thuật toán song song được xác định bằng tích của thời gian tính

toán song song và số bộ xử lý được sử dụng Chi phí này phản ánh tổng số thời gian mà

một bộ xử lý dùng để giải quyết bài toán

Một thuật toán song song sử dụng p bộ vi xử lý để giải quyết bài toán đặt ra trong

O(T) đơn vị thời gian, sử dụng p bộ xử lý trong t p đơn vị thời gian, khi đó chi phí cho

thuật toán song song C p:

Hệ số tăng tốc cũng là yếu tố đáng chú ý khi đánh giá thuật toán song song được song song hóa từ một thuật toán tuần tự

Hệ số tăng tốc là tỉ lệ giữa thời gian thực hiện của thuật toán tuần tự t s và thời gian

thực hiện của thuật toán song song t p với p bộ xử lý

St t , 1 S pp (1.4) Giả sử các bộ xử lý trong hệ thống song song hoàn toàn giống với bộ xử lý sử dụng

trong tính toán tuần tự và t s là thời gian thực hiện bài toán bằng tính toán tuần tự tối ưu

nhất Hệ số tăng tốc lí tưởng đạt được khi S p = p

Hiệu suất của tính toán song song là tỉ số giữa hệ số tăng tốc và số các phần tử xử lý

trong hệ thống song song:

Trang 26

Luật Amdahl: luật này phát biểu rằng nếu P là tỉ lệ có thể song song hóa của thuật toán

tuần tự thì hệ số tăng tốc lớn nhất có thể đạt được khi sử dụng N bộ xử lý là 1

P N

1.5 Lập trình song song với MPI

Phần này giới thiệu một công cụ hỗ trợ lập trình song song, đó là MPI, với gói hỗ trợ tính toán song song MPI SDK của Microsoft

1.5.1 Giao diện truyền thông điệp - MPI

Giới thiệu về MPI

Trang 27

Giao diện truyền thông điệp chuẩn MPI (MessagePassing Interface) là một giao diện

chuẩn cho phép nhiều máy tính giao tiếp với nhau, được sử dụng trong các cụm máy tính

và siêu máy tính MPI là giao thức độc lập ngôn ngữ sử dụng cho các máy tính song song MPI là một giao diện lập trình ứng dụng truyền thông điệp với mục đích là đem lại hiệu năng cao, khả năng mở rộng và linh hoạt

MPI không được chính thức thừa nhận bởi bất cứ tiêu chuẩn nào, tuy nhiên nó lại trở thành một chuẩn thực tế cho giao tiếp giữa các tiến trình để một chương trình song song

có thể chạy trên hệ thống bộ nhớ phân tán Các siêu máy tính với bộ nhớ phân tán thực sự thường sử dụng các chương trình này Thông thường, các chương trình MPI chạy trên các máy tính có bộ nhớ chia sẻ, mô hình MPI có lợi trên kiến trúc NUMA do MPI khuyến khích tính cục bộ của bộ nhớ

Hầu hết cài đặt MPI bao gồm tập hợp đặc tả các hàm để có thể gọi trực tiếp từ Fortran, C/C++ và bất cứ ngôn ngữ nào khác tương thích với thư viện hàm (như C#, Java

và Python) Lợi ích của việc sử dụng MPI so với các thư viện cũ là tính khả chuyển (vì MPI được cài đặt cho hầu hết các kiến trúc bộ nhớ phân tán) và tốc độ (vì mỗi cài được được tối ưu hoá về nguyên lý cho phần cứng mà nó thực thi trên đó)

MPI sử dụng đặc tả độc lập ngôn ngữ (LIS) cho các lời gọi hàm Hiện nay, các chuẩn MPI có hai phiên bản phổ biến là 1.2 (gọi tắt là MPI-1) chủ yếu là truyền thông điệp và có môi trường hoạt động tĩnh, và phiên bản MPI-2.1 (gọi tắt là MPI-2) bao gồm nhiều đặc điểm mới như vào/ra song song, quản lý tiến trình động và truy cập bộ nhớ từ

xa MPI-2 gần như bao hàm toàn bộ MPI-1, mặc dù có một số hàm đã bị loại bỏ Vì thế, các chương trình viết theo MPI-1.2 vẫn có thể tương thích với chuẩn MPI-2

Chức năng của MPI

Giao diện MPI là một phương tiện để cung cấp các chức năng topo ảo, sự đồng bộ hoá và giao tiếp giữa tập hợp các tiến trình (các nút/máy chủ/máy tính) theo cách độc lập với ngôn ngữ, với cú pháp đặc tả ngôn ngữ, cộng thêm một số đặc điểm khác Các chương trình MPI luôn làm việc với tiến trình, nhưng các lập trình viên thường xem các

Trang 28

tiến trình như các bộ xử lý Thông thường, để tối ưu hoá hiệu năng, mỗi CPU (hoặc lõi trong các máy đa lõi) sẽ được chỉ định một tiến trình đơn lẻ

Chức năng của thư viện MPI bao gồm (nhưng không hạn chế) các hoạt động gửi nhận điểm-điểm, lựa chọn topo tiến trình logic dạng hình học phẳng hay đồ thị, trao đổi

dữ liệu giữa các cặp tiến trình, phối hợp kết quả từng phần của quá trình tính toán, các nút đồng bộ cũng như các thông tin về mạng …

Một số khái niệm về MPI

MPI cung cấp nhiều khả năng thực hiện Các khái niệm sau đây sẽ cho chúng ta hiểu

rõ hơn, giúp chúng ta quyết định cần sử dụng chức năng nào cho chương trình của mình

Có 8 khả năng cơ bản, và 4 trong số đó chỉ có ở MPI-2 Một số khả năng đó là:

Bộ truyền thông: Bộ truyền thông chịu trách nhiệm kết nối các tiến trình sử dụng

MPI Trong truyền thông, mỗi tiến trình có một bộ nhận diện độc lập và các tiến trình được sắp xếp theo một thứ tự topo nhất định MPI cũng có các nhóm, nhưng chủ yếu phục vụ cho tổ chức và tái tổ chức các tiến trình con, trước khi các bộ truyền thông khác được tạo ra MPI hiểu được các hoạt động nhóm truyền thông nội bộ đơn, và hoạt động truyền thông liên nhóm Trong MPI-1, hoạt động truyền thông của nhóm đơn là phổ biến nhất, còn truyền thông liên nhóm giữ vai trò quan trọng nhất trong MPI-2 để mở rộng cho quản lý tiến trình động và truyền thông tập thể

Cơ sở điểm-điểm: Các hoạt động điểm-điểm, thực sự hữu ích trong truyền thông

không đồng đều, mỗi tiến trình lặp đi lặp lại trao đổi các vùng dữ liệu với tiến trình khác giữa các bước tính toán, trong kiến trúc chủ-tớ, tiến trình chủ thường xuyên gửi dữ liệu cho tiến trình kia mỗi khi có một tác vụ hoàn thành

MPI-1 đặc tả cơ chế truyền thông điểm-điểm không khoá và có khoá

Cơ sở cộng tác tập thể: Chức năng hoạt động tập thể trong MPI liên quan đến

truyền thông giữa mọi tiến trình trong nhóm Một hàm, hay gặp, dạng này là MPI_Bcast

Hàm này lấy dữ liệu từ một nút đặc biệt nào đó và gửi thông điệp tới mọi tiến trình trong

nhóm Một hàm khác đó là MPI_Reduce, hàm này dùng để lấy dữ liệu từ mọi tiến trình

khác trong nhóm Các loại hàm này thường hữu ích khi bắt đầu hoặc kết thúc quá trình

Trang 29

tính toán phân tán lớn Còn có một số hàm phức tạp hơn như MPI_Alltoall, hàm này tái sắp xếp n phần dữ liệu từ mỗi tiến trình để nút thứ n lấy dữ liệu phần tử thứ n từ mỗi nút

Các loại dữ liệu: Nhiều hàm MPI cần chúng ta đặc tả loại dữ liệu được gửi giữa

các bộ xử lý Điều này xuất phát từ việc các tham số của hàm MPI đều là các biến, không

phải là loại được định nghĩa trước Nếu loại dữ liệu là chuẩn như int, char, double , thì ta

có thể sử dụng các loại dữ liệu định nghĩa của MPI như MPI_INT, MPI_CHAR,

MPI_DOUBLE… Giả sử ta có một mảng các số nguyên, và mọi bộ xử lý muốn gửi các

mảng dữ liệu đó tới nút gốc, thì có thể gọi hàm MPI_Gather Ví dụ:

Truyền thông một phía (MPI-2): MPI-2 xác định ba thao tác truyền thông một

phía, bao gồm Put, Get, và Accumulate, dùng để ghi, đọc đối với bộ nhớ từ xa, và một

thao thác rút gọn một số tác vụ trên cùng một bộ nhớ đó

Các hàm này thường được sử dụng trong các thuật toán mà việc đồng bộ là không thuận tiện (ví dụ như nhân ma trận phân tán), hoặc ở những bài toán mà nhiệm vụ cần cân bằng tải trong khi các bộ xử lý khác đang sử dụng dữ liệu

Quản lý tiến trình động (MPI-2): Vấn đề cốt lõi của đặc điểm này đó là “khả năng

của một tiến trình MPI có thể tạo ra một tiến trình MPI mới hoặc để thiết lập một giao tiếp với các tiến trình MPI để có thể khởi động rời rạc nhau” Chuẩn MPI-2 mô tả ba giao diện chính để các tiến trình MPI có thể thiết lập giao tiếp động, đó là:

MPI_Comm_spawn, MPI_Comm_accept/MPI_Comm_connect và MPI_Comm_join Hàm MPI_Comm_spawn cho phép một tiến trình MPI có thể nhân bản một số tiến trình MPI

nữa Tập hợp các tiến trình MPI mới nhân bản này tạo thành một bộ truyền thông

MPI_COMM_WORLD và có thể giao tiếp với tiến trình cha Hàm

MPI_Comm_spawn_multiple là một biến thể, nó cho phép các tiến trình nhân bản khác

nhau với các tham số khác nhau

Trang 30

MPI vào/ra (MPI-2): Đặc điểm vào ra song song được giới thiệu với MPI-2, đôi

khi còn được gọi là MPI-IO, liên quan đến một tập các hàm cho phép có thể giảm bớt khó khăn trong quản lý vào/ra trên các hệ thống phân tán, cũng như là cho phép các tệp có thể được truy cập dễ dàng hơn

1.5.2 Giới thiệu gói CCP của Microsoft

Gói CCP (gói cụm tính toán) chứa cài đặt của Microsoft về MPI dựa trên MPICH2 của Argonne National Laboratory

Microsoft MPI cung cấp một số lợi ích sau:

- Dễ dàng sử dụng các mã nguồn có sẵn sử dụng MPICH2

- Tính bảo mật cao dựa trên dịch vụ Active Directory

- Hiệu năng cao trên Windows

- Tương thích nhị phân với các loại tuỳ chọn kết nối khác nhau

Phiên bản 32-bit của thư viện Msmpi.dll sử dụng các lời gọi hàm stdcall() tiện dụng đối với các hàm C/C++ Các ứng dụng C/C++ sử dụng MSMPI có thể sử dụng các MPIAPI macro Đối với các hàm Fortran, phiên bản 32-bit của Msmpi.dll sử dụng lời gọi hàm dạng cdecl Phiên bản 64-bit của các hàm này thì sử dụng lời gọi fastcall

Kiến trúc cụm tính toán

Cụm tính toán là một đơn vị có tổ chức bao gồm một tập hợp các nút, một hàng đợi,

các ứng dụng và các tác vụ

Một nút là một máy tính đơn lẻ với một hoặc nhiều bộ xử lý Quản trị hệ thống sẽ

chịu trách nhiệm thêm hay bớt các nút Các ứng dụng có thể liệt kê, phê duyệt, tạm dừng,

và giành lại các nút thông qua giao diện ICluster Các ứng dụng có thể yêu cầu tính chất nút thông qua giao diện Inode

Mọi nút trong một cụm tính toán là một phần của cùng một domain Các nguồn dữ

liệu như cơ sở dữ liệu hay tệp được truy cập tại từng nút Các License servers cũng được

truy cập từ mỗi nút để xác nhận các nút đó chạy ứng dụng và có giấy phép cho ứng dụng

đó

Trang 31

Hình 1.5 Mô phỏng kiến trúc một cụm tính toán

Nút trưởng nhóm quản lý toàn bộ cụm và các tài nguyên Các tác vụ được gửi đăng

kí tới và lập lịch bởi nút này

Cụm chứa một hàng đợi đơn, nó là một tổ chức để chứa các tác vụ xếp hàng, đang chạy và đã hoàn thành Tác vụ đã hoàn thành sẽ được tuần hoàn gỡ bỏ khỏi hàng đợi này

Kiến trúc bộ lập lịch tác vụ

Dịch vụ lập lịch tác vụ là dịch vụ lập lịch chủ yếu cho gói cụm tính toán Bộ lập lịch

tác vụ kiểm soát cấp phát tài nguyên, hoạt động của tác vụ và phục hồi khi bị lỗi

Bộ quản lý nút thực hiện quản lý các nút tính toán Quản trị hệ thống thực hiện phê duyệt, tạm dừng, giành lại và gỡ bỏ các hoạt động Bộ theo dõi lập lịch cung cấp truyền thông giữa quản lý nút và bộ lập lịch nút Nó được gọi ra khi nút tính toán bắt đầu làm việc hoặc một tác vụ được hoàn thành trên nút tính toán

Dịch vụ lập lịch tác vụ là dịch vụ lập lịch cơ bản Các tài nguyên cụm được cấp phát dựa theo mức ưu tiên tác vụ Điều này đảm bảo rằng các tác vụ có mức ưu tiên cao sẽ được thêm vào dãy đầu của hàng đợi Nếu các tác vụ có mức ưu tiên ngang nhau thì tài

Trang 32

Hình 1.6 Mô hình kiến trúc lập lịch nguyên được cấp phát cho tác vụ được đăng kí trước Không có mức ưu tiên công việc bên trong một nhiệm vụ Các tài nguyên được cấp phát tới tác vụ theo thứ tự thêm vào

Bộ lập lịch tác vụ lựa chọn các nút sẵn sàng tốt nhất trong cụm để chạy từng tác vụ Một tác vụ cũng có thể đặc tả danh sách các nút mà nó có thể chạy trên đó, và bộ lập lịch lựa chọn nút tốt nhất trong danh sách đó

Công cụ lệnh (command-line)

Bộ theo dõi lập lịch

DB

Quản lý nút

Mức giao diện

Mức lập lịch

Mức thực thi

Trang 33

Lập lịch tác vụ cũng hỗ trợ khả năng khôi phục Điều này đảm bảo một ứng dụng ngốn tài nguyên sẽ không trì hoãn các ứng dụng khác đang sẵn sàng chạy Bộ lập lịch sẽ lập lịch một tác vụ ưu tiên thấp hơn nếu một tác vụ ưu tiên cao hơn đang chờ tài nguyên rảnh rỗi và tác vụ ưu tiên thấp hơn có thể hoàn thành công việc của mình với tài nguyên sẵn có mà không trì hoãn thời gian bắt đầu của tác vụ ưu tiên cao kia

Chúng ta cũng có thể mở rộng lập lịch với các bộ lọc Một bộ lọc đăng kí tác vụ được gọi ra trước khi một tác vụ được xếp vào hàng đợi hoặc được sửa đổi Nó có thể chấp nhận sửa đổi tác vụ hoặc từ chối sự đệ trình tác vụ đó Một bộ lọc kích hoạt được gọi ra trước khi tác vụ bắt đầu làm việc Bộ lọc này có thể thực hiện các nhiệm vụ như kiểm tra yêu cầu giấy phép phần mềm, hoặc triển khai các chính sách cấp phát tài nguyên Nếu bộ lọc kích hoạt trả lại giá trị khác 0 (bị lỗi), thì tác vụ vẫn duy trì trong hàng đợi Bộ lọc được gọi tuần hoàn cho đến khi nó thành công

Dịch vụ cụm là một dịch vụ NET từ xa Nó cung cấp các thiết lập cụm rộng, các hoạt động liên quan đến nút, các hoạt động liên quan đến tác vụ, nhiệm vụ, và thông tin

sử dụng tài nguyên

Các ứng dụng và các công cụ dòng lệnh truy cập các chức năng của bộ lập lịch tác

vụ thông qua tầng giao diện

1.5.3 Lập trình MPI với VS.NET

Để lập trình một bài toán song song với công cụ Microsoft Visual Studio NET [10], trước hết chúng ta tạo một project, loại Win32 Console Application, không chọn

"Precompiled header"

Trong mã nguồn của project, thay đổi từ "_tmain" thành "main" và "_TCHAR*

argv[]" thành "char* argv[]" để nó tương thích với hàm MPI_Init

Nhấp phải chuột vào project trong phần "Solution Explorer", chọn "Properties" Mở rộng "Configuration Properties" ở bên trái

- Lựa chọn "All Configurations" từ hộp "Configuration:" ở góc trái trên

Trang 34

- Lựa chọn "General" bên dưới thực đơn "C/C++" Trong mục "Additional Include

Directories" ở bên phải, nhập vào đường dẫn tới thư mục include của SDK đã cài

đặt trong máy Thông thường, chúng ta sử dụng "C:\Program Files\Microsoft

Compute Cluster Pack\Include"

- Lựa chọn "Advanced" cũng trong mục "C/C++" ở phần "Compile As" ở bên phải, lựa chọn "Compile as C Code (/TC)" nếu chương trình viết bằng C chứ không phải

C++

- Lựa chọn "General" trong phần "Linker" Với phần "Additional Library

Directories" ở bên phải, nhập vào đường dẫn tới thư mục lib của SDK được cài ra

trong máy Ngầm định là "C:\Program Files\Microsoft Compute Cluster

Pack\Lib\i386"

- Lựa chọn mục "Input" cũng trong phần "Linker" Trong mục "Additional

Dependencies" ở bên phải, gõ dòng msmpi.lib, để sử dụng thư viện MPI

Đến đây, chúng ta đã có thể viết chương trình, biên dịch với Visual Studio Khi đã

biên dịch được tệp khả thi exe, chúng ta cần sử dụng chương trình mpirun.exe trong thư mục bin của gói SDK để chạy với cú pháp “mpiexec -np x abc.exe”, trong đó, “x” là số lượng vi xử lý muốn sử dụng, và “abc.exe” là tên tệp đã biên dịch ở trên

1.6 Kiến trúc cụm máy tính

Trước đây, thuật ngữ “máy tính hiệu năng cao” (High- Performance Computing -

HPC) thường được dùng để chỉ những máy tính song song hoặc máy tính véc tơ với giá

trị lên tới hàng triệu đôla Nhưng khi các máy tính hiệu năng cao được tạo ra bằng cách

kết nối các máy trạm (Workstation – WS) với nhau thì thuật ngữ “cụm máy tính”

(Computer Cluster) được sử dụng để chỉ dạng máy tính này

Cụm máy trạm (Workstation Cluster -WSC) là một nhóm các máy trạm được kết nối với nhau thông qua một mạng tốc độ cao Các máy tính trong một WSC truyền thông qua một trong hai giao thức truyền thông phổ biến đó là: truyền thông dựa trên kết nối và truyền thông không kết nối Mô hình kết nối dựa trên giao thức TCP (Tranmission Control Protocol) với độ tin cậy cho việc truyền thông điệp được bảo đảm Mô hình

Trang 35

không kết nối dựa trên giao thức UDP (User Datagram Protocol), với giao thức này độ tin cậy cho việc truyền thông điệp được bảo đảm Hiện nay có rất nhiều phần mềm hỗ trợ việc tính toán song song trên WSC tiêu biểu như MPICH

Kiến trúc bó IBM 1600 của trung tâm tính toán hiệu năng cao:

 5 node tính toán pSeires 655, mỗi node gồm 8 CPU Power4+16 bit RISC 1.7 GHz của IBM; cache 5.6 MB ECC L2, 128 MB ECC L3, băng thông: 72.3 GBps; 32 GB RAM, băng thông bộ nhớ 51.2 GBps; 6x36 GB HDD Năng lực tính toán tổng cộng khoảng 240 GFlóp (mở rộng tối đa 768 GFlops/16 node)

 1 node quản lí phần mềm CSM p630: Power4+64 bit 1.2 GHz; cache 1.5 MB ECC L2, 8 MB ECC L3, băng thông: 12.8 GBps; 1 GB RAM, băng thông: 6.4 GBps; 6x36 GB HDD, DVD ROM

 1 node điều khiển phần cứng HCM: Intel Xeon 3.06 GHz, 1GB RAM, 40 GB HDD, DVD RAM

 Các node được kết nối với nhau thông qua HPS (High Performance Switch – Switch hiệu năng cao), băng thông 2 GBps và Gethernet

 Hệ thống lưu trữ chung: IBM DS4400 và EXP700 kết nối với cụm IBM 1600 thông qua cáp quang với băng thông 2 GBps

 Các node chạy HĐH AIX 5L phiên bản 5.2

Kiến trúc bó IBM 1350 của trung tâm tính toán hiệu năng cao:

 8 node tính toán, mỗi node gồm 2 chip Intel Xeon Dual Core 3.2 GHz, 2 GB RAM, 1x36 GB HDD, DVD ROM Tổng năng lực tính toán của 8 node là khoảng 51.2 Gflops

 2 node phục vụ lưu trữ, mỗi node gồm 2 chip Intel Xeon Dual Core 3.2 GHz, 3

GB RAM, 4x72 GB HDD

Trang 36

 1 node đóng vai trò quản lí bao gồm chip Intel Xeon Dual Core 3.2 GHz, 3 GB RAM, 2x36 GBHDD

 Năng lực lưu trữ: thiết bị lưu trữ dùng chung EXP400 với 10x73 GB HDD SCSI 320 MBps 15KRpm, dùng hệ thống chia sẻ file: GPFS cho Linux v2.3.0.5

 Các node chạy HĐH Redhat Enterprise Linux 3.0 và được kết nối với nhau thông qua mạng Gethernet

Trang 37

Chương 2 – THUẬT TOÁN SONG SONG NHÂN MA TRẬN

THƯA VỚI VÉC TƠ 2.1 Ma trận thưa

Trang 38

Ma trận A gọi là thưa khi nz A  m n hay d A 1 [16]

Trong các ứng dụng thực tế ma trận thưa sinh ra là có quy tắc chứ không phải là ngoại lệ Một ma trận thưa nảy sinh trong mỗi tình huống mà ở đó mỗi biến từ một tập lớn các biến được kết nối chỉ với một số biến Chẳng hạn, trong bài toán tính toán phương trình nhiệt rời rạc trên lưới hai chiều, nhiệt độ tại một điểm lưới liên quan tới nhiệt độ tại các điểm lưới hàng xóm bắc, đông, nam và tây Bài toán này có thể biểu diễn bởi hệ phương trình tuyến tính, trong đó ma trận sinh ra là ma trận thưa

Bài toán

Cho ma trận thưa A cấp m n và véc tơ dày v độ dài n Kết quả tính toán là véc tơ u

độ dài m, u = Av

Ta có thuật toán tuần tự nhân ma trận thưa với véc tơ như sau:

Thuật toán 2.1 Thuật toán nhân ma trận thưa với véc tơ tuần tự 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 toá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 toá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 toá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

u i := 0;

for all (i,j): 0im0 jna ij 0 do

u i := u i + a ij v j ;

Trang 39

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 x 0 và sau đó tiếp tục cải thiện nó bằng việc tìm xấp xỉ tôt

hơn x k , 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

toá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 quá trình tính toá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 toá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 f ij 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 toá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 r c

Trang 40

= 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ị f ij và f ji 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 toá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 toá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 toá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 toá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

Ngày đăng: 08/01/2015, 08:31

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w