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

Kỹ Thuật Đường Ống Và Cân Bằng Tải Trong Lập Trình Song Song MPI

84 1,7K 2

Đ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 84
Dung lượng 0,98 MB

Nội dung

KỸ THUẬT ĐƯỜNG ỐNG VÀ CÂN BẰNG TẢI TRONG LẬP TRÌNH SONG SONG MPI Chương I Tổng quan về xử lý song song ........................................................ 2 1.1 Tính toán song song ....................................................................................... 2 1.1.1 Giới thiệu về tính toán song song ................................................................ 2 1.1.2 Xu thế của tính toán song song trong công nghệ mới .................................. 2 1.2 Phân loại máy tính song song ......................................................................... 4 1.2.1 Phân loại dựa trên sự tương tác giữa các BXL............................................. 4 1.2.1.1 Chia sẻ bộ nhớ chung ............................................................................... 4 1.2.1.2 Bộ nhớ phân tán ....................................................................................... 6 1.2.1.3 Máy tính với bộ nhớ lai ............................................................................ 7 1.2.2 Phân loại dựa trên cơ chế điều khiển chung................................................. 7 1.2.2.1 Hệ thống đơn lệnh đa dữ liệu(SIMD) ....................................................... 7 1.2.2.2 Hệ thống đa lệnh đa dữ liệu(MIMD) ........................................................ 8 1.3 Mô hình trừu tượng của máy tính song song .................................................. 8 1.3.1 Mô hình chia sẻ bộ nhớ dùng chung ............................................................ 9 1.3.2 Mô hình luồng ............................................................................................ 9 1.3.3 Mô hình truyền thông điệp ........................................................................ 10 1.3.4 Mô hình song song dữ liệu ........................................................................ 10 1.3.5 Mô hình lai ............................................................................................... 11 1.4 Thiết kế giải thuật song song........................................................................ 11 1.4.1 Nguyên lý thiết kế song song .................................................................... 11 1.4.2 Đánh giá chương trình song song .............................................................. 13 1.4.3 Chiến lược phân chia và chia để trị ........................................................... 18 1.4.3.1 Sự phân chia .......................................................................................... 18 1.4.3.2 Chia để trị .............................................................................................. 21 1.4.3.3 Bài toán tích phân .................................................................................. 25 1.4.4 Tính toán đường ống ................................................................................. 28 1.4.4.2 Sắp xếp số .............................................................................................. 32 1.4.4.3 Thuật toán sắp xếp so sánh và đổi chỗ .................................................... 33 1.4.4.4 Giải bài toán hệ phương trình tuyến tính dạng đặc biệt ........................... 35 Chương II Kỹ thuật truyền thông điệp trong tính toán song song với MPI ..... 37 2.1 Cơ bản về truyền thông điệp ........................................................................ 37 2.1.1 Mô hình truyền thông điệp ........................................................................ 37 2.1.2 Kênh truyền thông .................................................................................... 37 2.1.3 Truyền thông đồng bộ ............................................................................... 38 2.1.4 Truyền thông dị bộ .................................................................................... 39 2.1.5 Mô hình lập trình ...................................................................................... 39 2.1.5.1 Phát sinh tiến trình ................................................................................. 39 2.1.5.2 Hàm send và receive .............................................................................. 41 2.1.5.3 Truyền thông nhóm ................................................................................ 42 2.2 MPI ............................................................................................................. 45 2.2.1 Tạo tiến trình và thực thi ........................................................................... 46 2.2.2 Sử dụng mô hình tính toán SPMD ............................................................. 46 2.2.3 Các hàm MPI cơ bản ................................................................................. 47 2.3 Sử dụng MPI trên Linux và Windows .......................................................... 50 2.3.1 Linux ........................................................................................................ 50 2.3.2 Windows ................................................................................................... 54 Chương III Kỹ thuật đường ống và cân bằng tải trong lập trình song song .... 59 3.1 Cân bằng tải tập trung trong bài toán tìm đường đi n gắn nhất với giải thuật Moore ................................................................................................................ 59 3.2 Giải hệ phương trình tuyến tính bằng phương pháp khử Gaus sử dụng tính toán đường ống .................................................................................................. 67 PHỤ LỤC ............................................................................................................. 71 Cài đặt song song các thuật toán trong luận văn ................................................. 71

Trang 1

Lời cảm ơn

Điều đầu tiên cho tôi gửi lời cảm ơn sâu sắc đến TS Nguyễn Mậu Hân

người đã hướng dẫn chỉ bảo tôi trong suốt quá trình thực hiện đề tài Thầy đã cho

tôi những lời khuyên bổ ích, dạy cách viết báo cáo - một kỹ năng không thể thiếu

đối với một nhà nghiên cứu Khóa luận sẽ không hoàn thiện nếu thiếu sự hướng dẫn

của thầy từ việc nghiên cứu lý thuyết đến thực nghiệm và hoàn thành khóa luận

Tôi xin cảm ơn các thầy trong Khoa Công Nghệ Thông Tin đã giúp đỡ tôi

trang thiết bị máy móc trong quá trình thực nghiệm Tôi cũng xin cảm ơn đến tập

thể lớp TinK26A và cô giáo chủ nhiệm Hoàng Thị Lan Giao đã có những đóng góp

quý báu cho khóa luận cũng như trong quá trình học tập

Và cuối cùng tôi xin cảm ơn đến gia đình, bạn bè những người luôn quan

tâm cổ vũ động viên tôi trong suốt thời gian học tập và làm khóa luận

Huế, tháng 5 năm 2006

Nguyễn Hữu Hoàng Thọ

Trang 2

MỤC LỤC

Chương I Tổng quan về xử lý song song 2

1.1 Tính toán song song 2

1.1.1 Giới thiệu về tính toán song song 2

1.1.2 Xu thế của tính toán song song trong công nghệ mới 2

1.2 Phân loại máy tính song song 4

1.2.1 Phân loại dựa trên sự tương tác giữa các BXL 4

1.2.1.1 Chia sẻ bộ nhớ chung 4

1.2.1.2 Bộ nhớ phân tán 6

1.2.1.3 Máy tính với bộ nhớ lai 7

1.2.2 Phân loại dựa trên cơ chế điều khiển chung 7

1.2.2.1 Hệ thống đơn lệnh đa dữ liệu(SIMD) 7

1.2.2.2 Hệ thống đa lệnh đa dữ liệu(MIMD) 8

1.3 Mô hình trừu tượng của máy tính song song 8

1.3.1 Mô hình chia sẻ bộ nhớ dùng chung 9

1.3.2 Mô hình luồng 9

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

1.3.4 Mô hình song song dữ liệu 10

1.3.5 Mô hình lai 11

1.4 Thiết kế giải thuật song song 11

1.4.1 Nguyên lý thiết kế song song 11

1.4.2 Đánh giá chương trình song song 13

1.4.3 Chiến lược phân chia và chia để trị 18

1.4.3.1 Sự phân chia 18

1.4.3.2 Chia để trị 21

1.4.3.3 Bài toán tích phân 25

1.4.4 Tính toán đường ống 28

1.4.4.2 Sắp xếp số 32

1.4.4.3 Thuật toán sắp xếp so sánh và đổi chỗ 33

1.4.4.4 Giải bài toán hệ phương trình tuyến tính dạng đặc biệt 35

Chương II Kỹ thuật truyền thông điệp trong tính toán song song với MPI 37

2.1 Cơ bản về truyền thông điệp 37

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

2.1.2 Kênh truyền thông 37

2.1.3 Truyền thông đồng bộ 38

2.1.4 Truyền thông dị bộ 39

2.1.5 Mô hình lập trình 39

2.1.5.1 Phát sinh tiến trình 39

2.1.5.2 Hàm send và receive 41

2.1.5.3 Truyền thông nhóm 42

2.2 MPI 45

2.2.1 Tạo tiến trình và thực thi 46

2.2.2 Sử dụng mô hình tính toán SPMD 46

2.2.3 Các hàm MPI cơ bản 47

Trang 3

2.3.1 Linux 50

2.3.2 Windows 54

Chương III Kỹ thuật đường ống và cân bằng tải trong lập trình song song 59

3.1 Cân bằng tải tập trung trong bài toán tìm đường đi ngắn nhất với giải thuật Moore 59

3.2 Giải hệ phương trình tuyến tính bằng phương pháp khử Gaus sử dụng tính toán đường ống 67

PHỤ LỤC 71

Cài đặt song song các thuật toán trong luận văn 71

KẾT LUẬN 80

Tài liệu tham khảo 81

Bảng các chữ viết tắt

Chữ viết tắt Tiếng Việt Tiếng Anh

dữ liệu

Multiple instruction multiple data

truyền thông điệp

Message Passing Interface

dữ liệu

Single instruction multiple data

xứng

Symmetric MultiProcessor

đều

Uniform Memory Access

Trang 4

MỞ ĐẦU

Ngày nay các phương pháp tính toán song song ra đời với sự thực thi đồng thời

của nhiều tài nguyên máy tính giúp giải quyết các bài toán yêu cầu thời gian xử lý

nhanh đồng thời xử lý khối lượng dữ liệu lớn như bài toán dự báo thời tiết, bài toán

mô phỏng các hiện tượng vật lý Hiện nay đã có nhiều chuẩn hỗ trợ cho việc lập

trình song song như MPI (Message Passing Interface) hỗ trợ lập trình song song

trên mô hình bộ nhớ phân tán, OpenMP (Open MultiProcessing) hỗ trợ lập trình

song song trên mô hình chia sẻ bộ nhớ chung, Pthread hỗ trợ lập trình luồng

Xử lý song song xuất hiện từ lâu và đã giải quyết nhiều bài toán trong thực tế

Nhiều hệ điều hành, ngôn ngữ lập trình hỗ trợ lập trình song song như WindowsNT,

Linux

Mục đích của luận văn là nghiên cứu chuẩn MPI và ứng dụng MPI vào lập

trình song song, tiến hành cài đặt một số thuật toán theo hai kỹ thuật lập trình song

song được sử dụng nhiều trong thực tế đó là kỹ thuật phân chia và kỹ thuật đường

ống

Nội dung của luận văn được phân thành 3 chương:

Chương 1: Giới thiệu tổng quan về xử lý song song

Chương 2: Giới thiệu về lập trình truyền thông điệp MPI trên môi trường

Linux và Windows

Chương 3: Áp dụng kỹ thuật cân bằng tải và đường ống để giải quyết bài toán

tìm đường đi ngắn nhất và bài toán giải hệ phương trình bằng phương pháp khử

Gaus Các bài toán này đã được cài đặt thử nghiệm trên hệ thống giả lập của hệ điều

hành Linux và Window

Trang 5

Chương I Tổng quan về xử lý song song

1.1 Tính toán song song

1.1.1 Giới thiệu về tính toán song song

Ngày nay các chương trình chúng ta đang sử dụng thông thường là các chương

trình được viết theo các giải thuật tuần tự, nghĩa là một bài toán được giải quyết

thông qua một chuỗi các câu lệnh tuần tự, thường thì bài toán này sẽ được thực hiện

trên một máy tính đơn với một BXL

Tính toán song song là một bước tiếp theo và là tất yếu của sự phát triển của

khoa học máy tính Tính toán song song, đó là sự giải quyết bài toán dựa trên sự

thực thi một cách đồng thời của nhiều tài nguyên máy tính Tài nguyên máy tính

bao gồm:

- Một máy tính với nhiều BXL

- Nhiều máy tính đơn BXL kết nối với nhau

- Kết hợp cả hai loại trên

Tính toán song song được sử dụng để giải quyết các vấn đề phức tạp yêu cầu

thời gian tính toán lớn hoặc làm việc với khối lượng dữ liệu lớn như: các bài toán

dự báo thời tiết,các vấn đề khoa học như khai phá dữ liệu, trí tuệ nhân tạo, xử lý ảnh

ba chiều (3-D), mô phỏng các hệ thống lớn Hầu hết các bài toán này, những máy

tính xử lý tuần tự đều không đáp ứng được yêu cầu về thời gian và khối lượng công

việc

Mặc dù tốc độ tính toán của các BXL tăng nhiều qua từng năm, nhưng do giới

hạn vật lý nên khả năng tính toán của chúng không thể tăng mãi Nếu muốn tăng

khả năng tính toán thì chúng ta phải khai thác được khả năng 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 bài toán

1.1.2 Xu thế của tính toán song song trong công nghệ mới

Tiểu trình (thread)

Trang 6

Tiểu trình là một luồng dữ liệu đi vào bộ xử lý Mỗi ứng dụng đều tạo ra một

hay nhiều tiểu trình khác nhau của chúng tùy thuộc công việc chúng cần giải quyết

Với kiến trúc đa nhiệm ngày nay, mỗi CPU tại mỗi thời điểm chỉ có thể xử lý một

tiểu trình, trong máy tính đơn VXL, sự đa nhiệm đồng thời là ảo, nghĩa là các hệ

điều hành tạo ra ảo tưởng có nhiều bộ xử lý ảo, mỗi bộ xử lý xử lý một nhiệm vụ,

thật ra CPU chỉ có thể xử lý một thread(tiểu trình) tại mỗi thời điểm, nhưng nó

chuyển đổi trong việc thực thi các thread một cách liên tục, với thời gian rất nhanh

nên tạo ra ảo giác nhiều chương trình có thể chạy đồng thời Thường thì chính hệ

điều hành đa nhiệm tạo ra các ảo giác này, bằng cách phân chia thời gian hợp lý cho

các thread

Trong những năm gần đây, với sự phát triển của phần cứng, các chíp lõi kép đã xuất

hiện ngày càng nhiều và càng trở nên thông dụng Mở đầu là công nghệ siêu luồng

Hyper-threading(HT) của Intel với các dòng chíp của họ, đây là một khái niệm khác

với multithread, sự khác biệt ở đây là siêu luồng được tích hợp ngay trên một lõi

đơn của CPU chứ không phải do hệ điều hành tạo ra, CPU sẽ “đánh lừa” hệ điều

hành nhận ra nhiều BXL Công dụng thực tế của nó tăng tốc độ chuyển đổi giữa các

thread của hệ thống và nâng cao khả năng xử lý đa nhiệm Thời điểm này CPU vẫn

đơn lõi Khi Pentium D 800 đầu tiên gắn hai CPU Prescott trên cùng đế và lúc này

hiện thực hóa CPU ảo HT thành CPU vật lý thực sự Lúc này CPU ảo đã trở thành

CPU thật

Và thật sự, sự ra đời của chip lõi kép đã làm tăng hiệu năng đáng kể cho tốc độ máy

tính

Vai trò của xử lý song song trong nền tảng công nghệ đa lõi

Mặc dù lý thuyết về sức mạnh của các BXL lõi kép là rất thuyết phục nhưng

thực tế vẫn còn tồn tại một số khó khăn khá lớn Câu hỏi lớn đặt ra là liệu người

dùng có tận dụng được sức mạnh đa xử lý, đó là phần mềm được sử dụng trên máy

tính phải hỗ trợ xử lý song song nhiều thread cùng lúc Nếu không có điều này một

phần mềm bình thường sẽ chỉ gởi luồng dữ liệu của nó vào một lõi duy nhất và hầu

như không cải thiện được tốc độ Tuy các hệ điều hành hiện nay đều hỗ trợ đa xử lý,

nhưng khả năng xử lý song song phải được đưa vào từng ứng dụng đơn lẻ thì tốc độ

Trang 7

mới thực sự được cải thiện Hầu hết các ứng dụng trên thị trường ngày nay chưa

được viết theo cách này Ví dụ trong các game, có các sự kiện và các dạng trí tuệ

nhân tạo, với một BXL lõi đơn, cả hai yếu tố này đều được xử lý song song nhưng

theo cách chuyển đổi liên tục thread Nếu như chạy hệ thống đa lõi, hay lõi kép thì

mỗi lõi sẽ đảm nhận một loại nhiệm vụ, khi đó tốc độ sẽ tăng lên thấy rõ

1.2 Phân loại máy tính song song

Một trong những khía cạnh quan trọng của máy tính song song là cơ chế trao

đổi thông tin giữa các BXL Có 3 kiến trúc phổ biến:

Kiến trúc chia sẻ bộ nhớ dùng chung

cả các BXL đều có thể truy cập đến Một BXL này có thể trao đổi thông

tin với một BXL khác bằng cách ghi vào bộ nhớ toàn cục và BXL thứ hai sẽ đọc dữ

liệu tại cùng vị trí đó trong bộ nhớ Điều này cho phép trao đổi thông tin giữa các

BXL, tuy nhiên, nó đã dẫn đến một vấn đề là đồng thời có nhiều BXL cùng truy cập

tới cùng một vị trí trong bộ nhớ toàn cục Máy tính loại này có hai loại chính dựa

trên thời gian truy cập bộ nhớ

MEMORY

BXL

BXL

BXL

BXL

Trang 8

Thứ nhất là máy tính truy cập đồng bộ (UMA) Là loại máy tính với các BXL giống

nhau Tất cả các BXL đều có thể truy cập bộ nhớ đồng thời và thông qua một BUS

dùng chung

Hình 1.2 Máy tính Uniform Access Memory (UMA)

Máy tính loại này gọi là Cache coheren-UMA (CC-UMA) Cache coheren ở đây có

nghĩa là khi một BXL cập nhật một vị trí trong bộ nhớ thì tất cả các BXL khác đều

nhận biết được sự cập nhật đấy

Thứ hai là máy tính truy cập không đồng bộ (NUMA) Với máy tính loại này có

một đường vật lý nối hai hay nhiều SMP lại với nhau

Hình 1.3 Máy tính Non-Uniform Access Memory (NUMA)

Mỗi một SMP lại có thể truy cập tới bộ nhớ của SMP khác, tuy nhiên với kiến trúc

kiểu này thì tất cả các BXL không thể truy cập cùng một lúc tới các bộ nhớ và với

việc kết nối các SMP bằng đường vật lý nên thời gian truy cập bộ nhớ chậm đi

MEMORY

BXL

BXL

Đường kết nối các SMP

Trang 9

Máy tính chia sẻ bộ nhớ chung có thuận lợi là giúp cho người lập trình thuận tiện

khi viết các chương trình song song Dữ liệu chia sẻ giữa các nhiệm vụ đảm bảo cả

hai tiêu chuẩn nhanh và đồng thời Tuy nhiên máy tính loại này có một số khó khăn

là rất khó mở rộng số lượng các BXL vì việc thêm các BXL, về phương diện hình

học có thể làm tăng các đường kết nối giữa bộ nhớ toàn cục và các BXL Đối với hệ

thống Cache coheren thì làm tăng sự truyền thông giữa cache và thiết bị quản lý bộ

nhớ Với máy tính loại này người lập trình phải chịu trách nhiệm đồng bộ chương

trình để đảm bảo tính đúng đắn của dữ liệu dùng chung

1.2.1.2 Bộ nhớ phân tán

Ngược với máy tính chia sẻ bộ nhớ chung là máy tính với bộ nhớ phân tán

trong đó không tồn tại bộ nhớ chia sẻ chung mà mỗi BXL có bộ nhớ cục bộ riêng

của chúng Trong máy tính song song có bộ nhớ phân tán, các BXL liên lạc với

nhau bằng các thông điệp (message) qua một mạng liên kết (interconnection

network) gồm các liên kết truyền thông trực tiếp giữa một số cặp BXL Một trong

những lựa chọn quan trọng trong thiết kế lúc đó sẽ là các cặp BXL nào được nối với

nhau Tốc độ liên lạc là tối ưu khi các BXL được nối trực tiếp với nhau Tuy nhiên

điều này thường là không khả thi do số lượng các liên kết là quá lớn dẫn đến việc

tăng giá thành của hệ thống Cách thứ hai được sử dụng là các BXL liên lạc thông

qua một BUS chia sẻ Điều này dẫn đến việc độ trễ cao khi số lượng BXL lớn dẫn

Memory

BXL

Trang 10

1.2.1.3 Máy tính với bộ nhớ lai

Hầu hết các máy tính nhanh và lớn ngày nay đều xây dựng dựa trên

sự kết hợp giữa kiến trúc chia sẻ bộ nhớ chung và bộ nhớ phân tán Sự kết hợp đó

tạo nên một máy tính với tên gọi máy tính có bộ nhớ lai

Hình 1.5 Máy tính bộ nhớ lai

Các thành phần chia sẻ bộ nhớ chung trong máy tính bộ nhớ lai thường là các máy

CC-SMP Các BXL trong thành phần chia sẻ bộ nhớ chung có thể truy cập bộ nhớ

toàn cục riêng của thành phần đó Thành phần bộ nhớ phân tán được biết như là một

mạng các SMP Các SMP chỉ có thể truy cập đến bộ nhớ toàn cục trong thành phần

chia sẻ bộ nhớ phân tán của chúng, chứ không truy cập được bộ nhớ của các thành

phần chia sẻ bộ nhớ chung khác Cái mạng kết nối được xây dựng để chuyển dữ

liệu từ SMP này đến SMP khác

1.2.2 Phân loại dựa trên cơ chế điều khiển chung

Phần lớn các máy tính song song thường có một cơ chế điều khiển chung

Song vấn đề đặt ra ở đây là các hoạt động của máy tính được điều khiển ở mức độ

nào Xem việc điều khiển theo hai khía cạnh khác nhau

Khía cạnh thứ nhất: Cơ chế điều khiển chung chỉ được sử dụng để nạp

chương trình và dữ liệu vào các BXL còn sau đó các BXL hoạt động độc lập

Khía cạnh thứ hai: Cơ chế điều khiển được sử dụng để hướng dẫn các BXL

các công việc phải làm tại mỗi bước Giữa hai khía cạnh này là những cơ chế điều

khiển trung gian Hai loại cơ chế điều khiển phổ biến nhất là:

1.2.2.1 Hệ thống đơn lệnh đa dữ liệu(SIMD)

Trang 11

một đơn vị điều khiển (CU) Tất cả các đơn vị xử lý nhận được cùng một lệnh từ

CU nhưng hoạt động trên những tập dữ liệu khác nhau Mô hình máy tính SIMD

được chỉ ra như hình 1.6 có những đặc tính sau:

 Phân tán việc xử lý trên nhiều phần cứng

 Thao tác đồng thời trên nhiều phần tử dữ liệu

 Thực hiện cùng một tính toán trên tất cả các phần tử dữ liệu

Hình 1.6 Hệ thống đơn lệnh đa dữ liệu(SIMD)

1.2.2.2 Hệ thống đa lệnh đa dữ liệu(MIMD)

Máy tính kiểu MIMD là loại đa BXL hoặc còn gọi là hệ thống đa máy tính,

trong đó mỗi BXL có đơn vị điều khiển (CU) riêng và thực hiện chương trình riêng

của mình MIMD có những đặc trưng sau:

 Xử lý phân tán trên một số BXL độc lập

 Chia sẻ với nhau một số tài nguyên, trong đó có hệ thống bộ nhớ

 Mỗi BXL thao tác độc lập và có thể thực hiện đồng thời với nhau

 Mỗi BXL chạy một chương trình riêng

Hình 1.7 Hệ thống đa lệnh đa dữ liệu(MIMD)

1.3 Mô hình trừu tượng của máy tính song song

Việc đưa ra một mô hình máy tính chung cho việc lập trình giúp cho việc thiết

kế giải thuật trở nên đơn giản hơn Lập trình song song đưa thêm những khó khăn

Câu lệnh

Trang 12

mới vào mô hình lập trình tuần tự Nếu chương trình được thực hiện ở mức thấp

nhất thì không những số lệnh thực hiện là rất lớn mà nó còn phải quản lý trực tiếp

quá trình thực hiện song song của hàng nghìn BXL và kết hợp hàng triệu tương tác

liên BXL Bởi vậy khả năng trừu tượng và tính toán module là các đặc tính rất quan

trọng trong lập trình song song

Các mô hình thông dụng bao gồm:

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

Mô hình luồng

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

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

Mô hình lai

1.3.1 Mô hình chia sẻ bộ nhớ dùng chung

Trong mô hình chia sẻ bộ nhớ chung các nhiệm vụ cùng chia sẻ một không

gian địa chỉ chung có thể được truy cập đọc ghi theo phương thức không đồng bộ

Các cơ chế khác nhau như khóa (locks) và semaphore được điều khiển để truy cập

đến bộ nhớ toàn cục Xét theo quan điểm của lập trình viên thì ưu điểm của mô hình

này là không có khái niệm sở hữu dữ liệu Nghĩa là không phải chỉ định rõ ràng quá

trình truyền dữ liệu giữa nhiệm vụ gửi và nhiệm vụ nhận dữ liệu Tính chất này giúp

cho phát triển các chương trình đơn giản hơn Tuy nhiên khi đó việc hiểu và đảm

bảo tính cục bộ trở nên khó khăn và cũng được chú ý nhiều nhất trong kiến trúc chia

sẻ bộ nhớ chung Việc viết các chương trình xác định cũng trở nên khó khăn

1.3.2 Mô hình luồng

Trong mô hình luồng chương trình chính được chia thành các nhiệm vụ Mỗi

nhiệm vụ được thực hiện bởi các luồng một cách đồng thời Mỗi một luồng có dữ

liệu riêng của nó và chia sẻ dữ liệu toàn cục của chương trình chính Các nhiệm vụ

đưa cho mỗi luồng là các thủ tục con của chương trình chính Bất kì luồng nào cũng

có thể thực hiện bất kì thủ tục con nào tại cùng thời điểm với các luồng khác Trong

mô hình luồng các luồng kết nối với nhau thông qua bộ nhớ toàn cục Với việc kết

nối này thì chương trình phải được xây dựng một cách đồng bộ để tránh cùng một

lúc có nhiều luồng cùng cập nhập một vị trí trong bộ nhớ toàn cục

Trang 13

Hình 1.8 Mô hình luồng

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

Trong mô hình truyền thông điệp chương trình song song được chia thành

các nhiệm vụ Mỗi nhiệm vụ sử dụng bộ nhớ cục bộ của nó Các nhiệm vụ này có

thể được cư trú trên các máy vật lý giống nhau kết nối với nhau qua mạng với số

lượng tùy ý

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

Các nhiệm vụ trao đổi dữ liệu với nhau qua hai phương thức gửi và nhận thông

điệp Xét trên khía cạnh lập trình thì các thông điệp chứa trong một thư viện thông

điệp Thư viện này phải được gắn vào mã nguồn của chương trình song song MPI

là một thư viện ngày nay được dùng rất phổ biến

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

Mô hình lập trình song song dữ liệu giúp lập trình các chương trình song

song được thực hiện trên một tập dữ liệu lớn Tập dữ liệu ở đây thường được sắp

xếp theo một cấu trúc nhất định như là mảng hoặc theo khối

Trang 14

Hình 1.10 Mô hình lập trình song song dữ liệu

Với mô hình này thì các nhiệm vụ của chương trình làm việc với cùng một cấu trúc

dữ liệu Tuy nhiên mỗi nhiệm vụ sẽ làm việc trên từng phân vùng khác nhau của dữ

liệu và các nhiệm vụ phải thực hiện các thao tác giống nhau

Trong kiến trúc chia sẻ bộ nhớ chung thì tất cả các nhiệm vụ truy cập vào cấu trục

dữ liệu thông qua bộ nhớ toàn cục Còn đối với kiến trúc bộ nhớ phân tán thì dữ liệu

được chia ra và lưu trữ trên các bộ nhớ cục bộ của các BXL

1.3.5 Mô hình lai

Mô hình lai là sự kết hợp của hai hay nhiều mô hình lập trình song song kết

hợp lại với nhau

Hiện nay, mô hình lai phổ biến nhất là mô hình kết hợp giữa mô hình truyền thông

điệp với mô hình luồng hoặc với mô hình chia sẻ bộ nhớ chung Một mô hình lai

khác nữa là sự kết hợp giữa mô hình song song dữ liệu với mô hình truyền thông

điệp Mô hình dạng này rất thuận tiện vì mô hình song song dữ liệu trên kiến trúc

bộ nhớ phân tán sử dụng thông điệp để trao đổi dữ liệu giữa các nhiệm vụ một cách

trong suốt đối với lập trình viên song song

1.4 Thiết kế giải thuật song song

1.4.1 Nguyên lý thiết kế song song

Nói đến xử lý song song là phải xét cả kiến trúc máy tính lẫn các thuật toán

Trang 15

Những thuật toán, trong đó có một số thao tác có thể thực hiện đồng thời được

gọi là thuật toán song song Tổng quát hơn, thuật toán song song là một tập các tiến

trình hoặc các tác vụ có thể thực hiện đồng thời và có thể trao đổi dữ liệu với nhau

để kết hợp cùng giải một bài toán đặt ra

Có năm nguyên lý chính trong thiết kế thuật toán song song:

1 Các nguyên lý lập lịch: Giảm tối thiểu các bộ xử lý sử dụng trong thuật toán

sao cho thời gian tính toán là không tăng (xét theo khía cạnh độ phức tạp)

Nói chung, nếu độ phức tạp tính toán của thuật toán là O(f(n)) thì thời gian

thực hiện của chương trình khi số bộ xử lý giảm, có thể tăng và thời gian

tính toán tổng thể tăng lên một hằng số nào đó Nghĩa là xét theo khía cạnh

độ phức tạp tính toán vẫn không thay đổi, vẫn là O(f(n))

2 Nguyên lý hình ống: Nguyên lý này được áp dụng khi bài toán xuất hiện

một dãy các thao tác {T1, T2, , Tn}, trong đó Ti+1 thực hiện sau khi Ti kết

thúc

3 Nguyên lý chia để trị: Chia bài toán thành những phần nhỏ hơn tương đối

độc lập với nhau và giải quyết chúng một cách song song

4 Nguyên lý đồ thị phụ thuộc dữ liệu: Phân tích mối quan hệ dữ liệu trong tính

toán để xây dựng đồ thị phụ thuộc dữ liệu và dựa vào đó để xây dựng thuật

toán song song

5 Nguyên lý điều kiện tranh đua: Nếu hai tiến trình cùng muốn truy cập vào

cùng một mục dữ liệu chia sẻ thì chúng phải tương tranh với nhau, nghĩa là

chúng có thể cản trở lẫn nhau

Ngoài những nguyên lý nêu trên, khi thiết kế thuật toán song song còn một số điểm

cần quan tâm:

 Tương tự như kiến trúc, hiệu quả thực hiện của thuật toán song song có thể

rất khác nhau, mà yếu tố quan trọng nhất ảnh hưởng tới độ phức tạp tính

toán là cấu hình tô pô liên kết mạng Ví dụ: DAP là máy tính kiểu SIMD với

64 * 64 bộ xử lý, thời gian nhân ma trận là tuyến tính theo kích cỡ của ma

trận và phụ thuộc vào đường truyền dữ liệu giữa các hàng với cột

Trang 16

 Thuật toán song song phải được thiết kế dựa trên những kiến thức về kiến

trúc máy tính, ngôn ngữ lập trình song song và các phương pháp tính toán

1.4.2 Đánh giá chương trình song song

Sự đánh giá thời gian thực thi song song

Chúng ta có thể bắt đầu bằng sự đánh giá thời gian thực thi của một chương

trình đơn, ts là thời gian của việc đếm từng bước tính toán của giải thuật tuần tự một

cách tốt nhất Với một thuật toán song song ,bên cạnh việc xác định số các bước

tính toán, chúng ta cần đánh giá sự truyền thông

Trong hệ thống truyền thông điệp, thời gian để gởi thông điệp phải được xem

xét trong thời gian thực thi của bài toán Thời gian thực thi song song, tp bao gồm

hai phần, một phần tính toán và một phần truyền thông Như vậy chúng ta có:

tp=tcomp+tcommThời gian tính toán có thể đánh giá như thời gian tuần tự, bằng cách đếm số lượng

các bước tính toán Khi có nhiều hơn một tiến trình được thực thi đồng thời, chúng

ta cần đếm từng số bước tính toán của tiến trình phức tạp nhất Thông thường, tất cả

các tiến trình thực thi cùng một thao tác tính toán, vì vậy chúng ta cần đếm một

cách đơn giản số lượng các bước tính toán của một tiến trình Trong trường hợp

khác chúng ta sẽ tìm số lượng các bước tính toán lớn nhất của những tiến trình thực

hiện cùng một thời gian

Để thuận lợi chúng ta cần bỏ qua thời gian tính toán trong thành phần phân chia thời

gian truyền thông báo Khi đó thời gian cho tính toán là:

tcomp=tcomp1+tcomp2+tcomp3…

Sự phân tích thời gian tính toán thường được giả định rằng tất cả các bộ vi xử lý là

cùng thao tác và cùng tốc độ

Một đặc tính mạnh của cụm là máy tính không cần như nhau Việc tính đến

một hệ thống không đồng nhất thì khó trong phân tích toán học, vì vậy trong phân

tích, chúng ta sẽ giả định các máy tính là giống hệt nhau Những kiểu máy tính khác

nhau sẽ được tính bởi những phương pháp thi hành cân bằng tải

Thời gian truyền thông

Thời gian truyền thông phụ thuộc vào:

Trang 17

-Số lượng các thông điệp

-Kích thước của mỗi thông điệp

-Kiến trúc liên quan bên dưới và kiểu di chuyển (mode of transfer)

Thời gian truyền thông của mỗi thông điệp là phụ thuộc vào nhiều yếu tố, bao

gồm kiến trúc mạng và sự tranh chấp mạng Một sự xấp xỉ đầu tiên:

tcomm1=tstartup+wtdata

Thuật ngữ tstartup là thời gian khởi động, thời gian tối thiểu cần để truyền một

thông báo mà không có dữ liệu Nó bao gồm thời gian gói thông điệp ở nguồn và

mở thông điệp ở đích Nó còn được sử dụng để mô tả thời gian trì hoãn hoàn tất

tstartup còn được giả định là một hằng số

Thuật ngữ tdata là thời gian để gởi một từ (word) dữ liệu, cũng được giả định là

một hằng số và có w (word) từ dữ liệu Tốc độ truyền thường được đo lường bởi

đơn vị bit/second

Chúng ta không có một quan hệ tuyến tính hoàn hảo trong hệ thống thực

Nhiều nhân tố có thể ảnh hưởng đến thời gian truyền thông, bao gồm (contention)

sự tương tranh (medium) trong trung gian truyền thông Phương trình lờ đi tình

huống nguồn và đích không liên kết trực tiếp trong hệ thống thực để mà thông điệp

phải được truyền xuyên qua những node (nút) trung gian

Thời gian truyền thông cuối cùng, tcomm sẽ là tổng của thời gian truyền thông của

tất cả các thông điệp tuần tự từ một tiến trình Như vậy

tcomm=tcomm1+tcomm2………

Nhân tố đánh giá chuẩn:

Tốc độ (Speed up) =ts/tp=ts/(tcomp+tcomm)

Tỉ lệ tính toán/truyền thông=tcomp/tcomm

Những ghi chú trong sự giải thích phương trình

Thời gian thực thi song song tp, tất nhiên sẽ phụ thuộc vào hệ thống máy tính

Để dễ dàng phân tích, giả định rằng hệ thống là đồng nhất Mỗi tiến trình phải giống

nhau và thao tác cùng tốc độ Hơn nữa, tất cả các thao tác tính toán được quy định

Trang 18

cùng thời gian, lấy ví dụ phép chia quy định cùng thời gian như phép cộng Tuy

điều này không đúng trong thực tế, nhưng đó là sự giả định chung trong phân tích

Chúng ta sẽ không phân biệt giữa việc gửi một số nguyên và một số thực hoặc là

những dạng khác Tất cả được giả định là cùng thời gian (điều này không đúng

trong thực tế, một kí tự 8 bit thì đòi hỏi ít thời gian hơn một kí tự 64 bit ) Tuy nhiên

trong nhiều vấn đề, kiểu dữ liệu của dữ liệu được gởi thường là cùng như nhau ở

khắp nơi Thật sự thời gian khởi động và thời gian truyền tải là khác nhau tùy thuộc

vào hệ thống máy tính

Thường thời gian khởi động lớn hơn thời gian truyền thông, cũng lớn hơn thời gian

thao tác số học Trong thực tế thời gian khởi động sẽ chi phối thời gian truyền thông

trong nhiều trường hợp Chúng ta không thể lờ đi số hạng này trừ phi n quá lớn

Sự phức tạp trong thời gian của thuật toán song song

Nếu phân tích sự phức tạp về thời gian, tcomm sẽ có độ phức tạp thời gian là O(n) Độ

phức tạp thời gian của tp sẽ là tổng của độ phức tạp của tính toán và song song

Ví dụ:

Giả sử chúng ta thực hiện việc cộng n số với sự tham gia của hai máy tính, mỗi máy

tính cộng n/2 số với nhau và những số này được khởi tạo trong máy tính đầu tiên

Máy tính thứ hai gởi trả kết quả của nó đến máy tính thứ nhất để cộng kết quả tổng

hai phần với nhau Bài toán này có một vài giai đoạn:

1 Máy 1 gởi đến máy 2 : n/2 số

2 Cả hay máy cộng n/2 số một cách đồng thời

3 Máy 3 gởi phần kết quả của nó trở lại máy 1

4 Máy 1 cộng phần tổng đó để tạo ra kết quả cuối cùng

Phân tích:

Tính toán(2,4)

tcomp=n/2+1;

Truyền thông(1,3)

tcomm=(tstartup+n/2tdata)+(tstartup+tdata)=2tstartup+(n/2+1)tdata

Độ phức tạp của tính toán là O(n) Độ phức tạp của truyền thông là O(n) Toàn bộ

độ phức tạp thời gian là O(n)

Trang 19

Tỉ lệ comp/comm (tính toán/truyền thông)

Thông thường, truyền thông là rất hao tốn ( nghĩa là mất nhiều thời gian), nếu cả

tính toán và truyền thông cùng độ phức tạp, tăng n là không chắc cải thiện sự thực

thi Một cách lý tưởng, độ phức tạp của tính toán sẽ lớn hơn truyền thông, trong

trường hợp tăng n sẽ cải tiến sự thực thi

Ví dụ: giả sử thời gian truyền thông có độ phức tạp là O(n) và thời gian tính toán

có độ phức tạp là O(n2

) Bằng cách tăng n, cuối cùng là n có thể là nguyên nhân mà thời gian tính toán chi phối hầu hết thời gian thực thi

Chi phí và chi phí tối ưu thuật toán

Chi phí tính toán có thể định nghĩa:

Chi phí=(thời gian thực thi)X(tổng số các bộ xử lý được sử dụng)

Chi phí của tính toán tuần tự đơn giản là thời gian xử lý của nó, ts Chi phí của tính

toán song song là tp*p Giải thuật song song tối ưu về chi phí là một trong những

giải thuật mà chi phí để giải quyết một vấn đề là cân xứng như thời gian thực thi

trên một hệ thống bộ xử lý đơn

Chi phí=tp*p=k*ts

Ở đây k là hằng số Phân tích độ phức tạp thời gian, chúng ta có thể nói rằng giải

thuật song song là tối ưu về chi phí nếu:

Độ phức tạp thời gian song song*số bộ xử lý = độ phức tạp thời gian tuần tự

Ví dụ:

Giả sử giải thuật tuần tự tốt nhất cho một vấn đề với n số có độ phức tạp về thời

gian là O(nlogn) Một thuật toán song song giải quyết cùng vấn đề sử dụng n BXL

và có độ phức tạp về thời gian là O((n/p)*logn) là chi phí tối ưu Nhưng ngược lại,

một giải thuật song song sử dụng p2

BXL và độ phức tạp về thời là O(n2/p) là không tối ưu về chi phí

Thời gian truyền thông của quảng bá và kết hợp (broadcast/gather)

Mặc dù những thảo luận của chúng ta là về phân tích lý thuyết, chúng ta hãy xem

thao tác broadcast/gather và độ phức tạp của chúng Hầu hết các vấn đề cần đến dữ

Trang 20

liệu được quảng bá (broadcast) đến các tiến trình và dữ liệu sẽ được kết hợp

(gather) từ các tiến trình Hầu hết các môi trường phần mềm cung cấp broadcast và

gather Giải thuật thực tế được sử dụng phụ thuộc vào kiến trúc bên trong của nhiều

máy tính Trước đây, người lập trình được trang bị kiến thức của kiến trúc nối liền

với nhau và có lẽ sẽ có thể nắm lấy lợi thế của nó, nhưng ngày nay điều này thường

ẩn với người lập trình

Trong phần này, chúng ta tập trung vào sử dụng cụm (Cluster) máy tính Một lần

nữa kiến trúc kết nối mạng được ẩn từ người dùng, mặc dù nó có vẻ cung cấp đầy

đủ tính kết nối đồng thời giữa các phần của những máy tính sử dụng switches

Trong quá khứ, Ethernet dùng một dây đơn nối tất cả các máy tính Broadcast trên

một kết nối Ethernet đơn có thể được sử dụng với một thông điệp đơn mà được đọc

bởi tất cả các điểm đích trên mạng đồng thời (Giao thức Ethernet cung cấp nghi

thức này trong truyền thông)

Sau đó broadcast có thể rất hiệu quả và quy định trong một thông điệp đơn:

tcomm=tstartup+wtdata

Với độ phức tạp O(1) cho mỗi mục dữ liệu, cho w mục dữ liệu là O(w)

Tất nhiên , hầu hết các cụm máy tính là sử dụng những kiến trúc mạng khác nhau,

broadcast trong 1 mạng Ethernet đơn nói chung sẽ không thích hợp

Mỗi lần một thông báo đến tại nơi cần đến, nó được thực hiện theo kiểu lan truyền 1

tới N (từ một node đến n node)

Cũng tương tự cho gather, ngoại trừ thông điệp chuyển đến phương hướng đối diện

Thời gian truyền thông là:

tcomm=N(tstartup+wtdata)

O(N) độ phức tạp thời gian truyền thông cho một nguồn kết nối đến N đích

Sequential

N destination Source

Trang 21

Hình 1.11 1 đến n quảng bá hệ số phân đầu ra

1.4.3 Chiến lược phân chia và chia để trị

Trong mục này chúng ta khảo sát tỉ mỉ hai kỹ thuật cơ bản nhất trong lập

trình song song: phân chia và chia để trị Những kỹ thuật này liên quan với nhau

Trong phân chia, bài toán được chia thành nhiều phần khác nhau và mỗi phần được

tính toán khác nhau Chia để trị thường áp dụng phân chia (recursive manner) đệ

quy Đầu tiên, chúng ta sẽ xem xét kỹ thuật phân chia Sau đó chúng ta thảo luận về

phương pháp chia để trị Tiếp theo chúng ta phát thảo một vài vấn đề tiêu biểu mà

có thể được giải quyết bằng những cách tiếp cận này

1.4.3.1 Sự phân chia

Sự phân chia là chia vấn đề thành nhiều phần Nó là những khái niệm cơ bản

trong hầu hết lập trình song song trong hình thức này hoặc hình thức khác Ta có

thể sử dụng phân chia mà không có sự tương tác giữa các nhiệm vụ Phân chia có

thể được áp dụng đến dữ liệu của chương trình ( chia dữ liệu và thao tác trên dữ liệu

đã được chia đồng thời) Điều này được gọi là sự phân chia dữ liệu hay sự phân rã

dữ liệu

Sự phân chia có thể chỉ được áp dụng đến những chức năng của một chương trình

(nghĩa là chia nó thành những chức năng độc lập và thực thi chúng cùng lúc) Đây

là sự phân rã chức năng Ý tưởng thực thi một nhiệm vụ là chia nó thành một số nhỏ

hơn những nhiệm vụ và hoàn thành chúng đồng thời Tất nhiên, phải thực sự hiểu

biết tốt về nó thì mới có thể áp dụng được cho nhiều ngữ cảnh

Dù chia thành những chức năng độc lập nhưng không phải dễ để tìm thấy những

chức năng thực thi đồng thời trong một vấn đề, do đó phân chia dữ liệu là chiến

lược chính cho lập trình song song

Lấy ví dụ phân chia dữ liệu đơn giản, giả sử có một dãy số tuần tự x0,…,xn được

cộng lại với nhau Trừ khi đó là một dãy số vô cùng lớn, nếu không một lời giải

song song sẽ là không thể đáng giá Tuy nhiên, cách tiếp cận này có thể được sử

dụng trong nhiều ứng dụng thực tế bao hàm những tính toán phức tạp trên những dữ

liệu lớn

Trang 22

Chúng ta có thể xem xét chia dãy thành p phần, mỗi phần n/p số (x0…x

(n/p)-1),(xn/p…x2n/p),…(x(p-1)n/p… xn-1), tại BXL p (hay là tiến trình) có thể cộng mỗi dãy

một cách độc lập để tạo những tổng riêng phần P tổng riêng phần phải được cộng

lại với nhau để được tổng cuối cùng Hình 1.12 cho thấy một sự sắp xếp mà trong

đó một BXL đơn cộng tổng riêng phần p Chú ý rằng mỗi BXL yêu cầu truy cập

đến những số mà nó phải tính toán Trong hệ thống truyền thông điệp, các số này

cần được truyền đến những BXL riêng lẻ (trong hệ thống chia sẻ bộ nhớ, mỗi BXL

có thể truy cập những số nó muốn từ bộ nhớ chia sẻ, và trong khía cạnh này, hệ

thống chia sẻ bộ nhớ có thể thuận tiện trong những vấn đề tương tự)

Hình 1.12 Phân chia 1 dãy số tuần tự và tính tổng riêng phần trên các tiến trình

Mã song song của ví dụ này không phức tạp Với cách tiếp cận master-slave, những

số này sẽ được gởi từ BXL master đến những BXL slave Chúng sẽ cộng những số

của chúng, thao tác độc lập đồng thời, và gởi kết quả tính tổng riêng phần đến BXL

master BXL master sẽ cộng những kết quả riêng phần để thiết lập kết quả cuối

cùng Thường chúng ta nói tiến trình hơn là BXL cho dãy mã, ở đây tiến trình là

được ánh xạ lên một BXL

Một quan điểm gây tranh luận là quảng bá hầu hết danh sách những số đến mỗi

slave hay là chỉ gởi những số đặc biệt đến slave là tốt nhất hay không ? Vì trong cả

hai trường hợp tất cả những số phải được gởi từ master Một sự quảng bá có thời

gian khởi động đơn lẻ hơn là thực hiện khởi động nhiều lần khác nhau khi sử dụng

nhiều hàm gởi và có lẽ là được thích hơn

Trang 23

Đầu tiên chúng ta gởi những số đặc biệt đến mỗi slave sử dụng send() riêng biệt

Cho n số chia thành p nhóm, ở đây n/p là số nguyên và mỗi nhóm được gán đến một

Nếu dùng quảng bá chúng ta sẽ gởi một danh sách tới mỗi tiến trình slave, mã cần

cho mỗi slave sẽ chọn những phần dãy thích hợp để sử dụng:

scatter(numbers,&s,Pgroup,root=master);

reduce_add(&sum,&s,Pgroup,root=master);

Trang 24

Cách tiếp cận chia để trị được mô tả bởi việc chia một bài toán thành những

bài toán con cùng dạng như là bài toán lớn Việc phân chia này thường được thực

thiện bởi kỹ thuật đệ quy Kỹ thuật đệ quy sẽ tiếp tục chia bài toán cho đến khi bài

toán không thể chia nhỏ được nữa Khi đó những bài toán đơn này sẽ được giải

quyết và kết quả được kết hợp lại Jájá(1992) đã phân biệt khi công việc chính là

phân chia bài toán và khi nó kết hợp kết quả Ông phân loại phương thức như là

chia và trị, trị khi công việc chính là kết hợp những kết quả và phân chia khi công

việc chính là chia bài toán Chúng ta sử dụng thuật ngữ chia và trị là sự phân chia

tiếp tục bài toán càng lúc càng nhỏ

Một sự định nghĩa đệ quy tuần tự cho việc cộng danh sách các số:

Trong đệ quy, một phương thức phải được đưa ra để giới hạn sự đệ quy khi sự phân

chia có thể không thể tiến xa hơn nữa Trong đoạn mã, number (s) trả về số các số

trong danh sách được xem bởi s Nếu có hai nhóm số trong danh sách, chúng được

gọi là n1,n2 Nếu có một số trong danh sách, nó được gọi là n1 và n2 là 0 Nếu không

có số nào, cả n1 và n2 là 0 Câu lệnh if được sử dụng cho các trường hợp 0,1,2 nhóm

số trong danh sách Khi mỗi sự phân chia tạo ra hai phần, việc đưa ra công thức chia

để trị một cách đệ quy sẽ thiết lập một cây nhị phân

Thực thi song song

Trang 25

Trong thực thi tuần tự, chỉ một node trên cây có thể được viếng thăm tại mỗi thời

điểm Một giải pháp song song đề nghị viếng thăm một vài node của cây đồng thời

Một trong số đó là sự chia cắt được tạo ra hai phần, cả hai phần có thể được xử lý

đồng thời Mặc dù giải pháp song song một cách đệ quy được xem xét, có thể dễ

hơn khi hình dung nó không đệ quy, mấu chốt ở đây là cấu trúc cây Một trong số

đó có thể đơn giản là gán mỗi BXL cho mỗi node của cây Điều này rốt cuộc sẽ yêu

cầu 2(m+1)

-1 BXL để chia những nhiệm vụ thành 2m phần Mỗi BXL chỉ hoạt động

tại một cấp trong cây, điều này đưa đến một phương thức không hiệu quả

Để hiệu quả hơn ta sử dụng lại những BXL tại mỗi cấp của cây, sự phân chia sẽ

dừng lại khi tổng số các BXL là có giới hạn Cho đến khi mỗi cấp của BXL giữ một

nửa danh sách và chuyển một nửa cho BXL khác Đầu tiên p0 giao tiếp với p4,

chuyển một nửa danh sách đến p4 Sau đó p0,p4 chuyển một nửa danh sách chúng

nắm đến p2 và p6 theo thứ tự định sẵn Cuối cùng, p0,p2,p4 và p6 chuyển một nửa

danh sách chúng nắm đến p1,p3,p5,p7 mỗi danh sách tại cấp cuối cùng có n/8 số,hay

là n/p trong trường hợp chung của p BXL, có logp cấp của cây

Hình 1.13 Chia một danh sách thành nhiều phần

Việc kết hợp tính tổng của những tổng riêng phần được thấy tại hình 1.14 Một

trong những tổng riêng phần đã được thiết lập, mỗi bộ xử lý chuyển tổng riêng phần

của nó đến BXL riêng phần kế cận p1 chuyển tổng đến p0, p3 chuyển tổng của nó

đến p2, p5 đến p4 và vân vân Mỗi BXL cộng tổng riêng phần với tổng riêng phần

của nó và chuyển kết quả về phía trước Tiếp tục cho đến khi p0 có kết quả cuối

cùng

Trang 27

Những dãy tương tự được yêu cầu trên những tiến trình khác Một cách sáng tỏ,

những thao tác kết hợp khác, như nhân,logic OR, AND, minimum, maximum, hay

chuỗi có thể móc nối vào nhau, có thể thay thế thao tác cộng trong ví dụ trước

Phân tích

Chúng ta giả sử n là lũy thừa của 2 Giai đoạn phân chia tối thiểu chỉ có truyền

thông nếu chúng ta giả định rằng sự phân chia danh sách thành hai phần đòi hỏi tính

toán ít nhất Giai đoạn kết hợp yêu cầu cả tính toán và phân chia để cộng những

tổng riêng phần được nhận và chuyển thành kết quả

Truyền thông

Thời gian truyền thông trong giai đoạn này cho bởi:

tcomm1=n/2*tdata +n/4*tdata+n/8*tdata+…+n/p*tdata=n(p-1)/p*tdata_

Ở đây, tdata là thời gian truyền thông cho một từ dữ liệu Thời gian tcomm1 là mép tốt

hơn là một broadcast đơn Giai đoạn kết hợp cũng tương tự, ngoại lệ là chỉ có một

mục dữ liệu được gởi trong mỗi thông điệp ( tổng riêng phần) đó là tcomm2=(logp)tdata

Tổng cộng thời gian truyền thông là:

tcomm=tcomm1+tcomm2=n(p-1)/p*tdata+(logp)*tdata

hoặc độ phức tạp là O(n) cho một số tiến trình cố định

Tính toán

Kết thúc giai đoạn phân chia, kết quả các dãy số được cộng lại với nhau, khi đó:

tcomp= n/p+logp

Một lần nữa có độ phức tạp là O(n) cho một số tiến trình cố định Với n lớn và biến

thiên p, chúng ta lấy O(n/p)

Toàn bộ thời gian tính toán:

Thời gian thực thi song song tổng cộng sẽ là:

tp=(n(p-1)/p+logp)*tdata+n/p+logp

Nhân tố tốc độ

Tốc độ=ts/tp=(n-1)/{((n/p)(p-1)+logp)*tdata+n/p+logp}

Trang 28

Tốc độ tốt nhất mà ta mong chờ với phương thức này, tất nhiên, khi tất cả các tiến

trình p tính toán tổng riêng phần của nó Tốc độ thực sự sẽ nhỏ hơn giai đoạn phân

chia và kết hợp

Tỉ lệ tính toán trên truyền thông

tcomp/tcomm=(n/p+logp)/(((n/p)(p-1)+logp)*tdata)

Tính toán song song trong tích phân

Trước kia, chúng ta chia một bài toán và giải quyết mỗi bài toán con Bài toán đã

được giả định được chia thành những phần bằng nhau, và sự phân chia đã được tận

dụng Thỉnh thoảng, sự phân chia đơn giản sẽ không cho một giải pháp tối ưu

Một kỹ thuật chia để trị tổng quát là chia những vùng thành những phần liên tiếp và

để cho một hàm tối ưu quyết định khi nào những vùng được chia chắc chắn thích

Để tính tích phân của hàm này(nghĩa là tính vùng ở dưới đường cong), chúng ta có

thể chia vùng này thành các phần khác nhau, mỗi phần được tính toán trên một tiến

trình riêng Mỗi vùng được tính toán sử dụng giá trị gần đúng của hình chữ nhật

Hình 1.15 Tích phân dùng những hình chữ nhật

Ở đây f(p),f(q) là chiều cao của hai cạnh của vùng hình chữ nhật, và dx là chiều

rộng của hình chữ nhật Tích phân hoàn tất có thể xấp xỉ bằng cách cộng tất cả

Trang 29

Một sự xấp xỉ tốt nhất có thể thu được bởi liên kết những hình chữ nhật để trung

điểm của mỗi hình chữ nhật cắt ngang với hàm

Hình 1.16 Tích phân chính xác hơn sử dụng hình chữ nhật

Những kiến trúc khác rõ ràng hơn là sử dụng những đường cắt nhau thật sự với hàm

để tạo vùng hình thang Mỗi vùng được tính toán là :

½(f(p)+f(q))*dx

Sự gán tĩnh

Chúng ta hãy xem xét phương thức hình thang Ưu tiên để bắt đầu tính toán, mỗi

tiến trình sẽ được gán tĩnh để chịu trách nhiệm tính toán mỗi vùng Bằng cách tạo

những vùng nhỏ hơn, chúng ta sẽ tính chính xác hơn Từ đó mỗi bước tính toán là

cùng hình thức, chế độ SPMD là thích hợp trong tình huống này Giả sử chúng ta

tính tổng vùng từ a đến b sử dụng p tiến trình đánh số từ 0 đến p-1.Kích thước mỗi

vùng cho tiến trình là (b-a)/p Để tính toán vùng theo kiểu đã được mô tả, một đoạn

giả mã SPMD được sử dụng

Trang 30

Hình 1.17 Tích phân sử dụng phương thức hình thang

Thao tác rút gọn là được sử dụng để cộng những vùng đã được tính toán bởi những

tiến trình riêng biệt Để tính toán hiệu quả, sự tính toán ở mỗi vùng có thể được viết

lại như sau:

area=0.0;

for(x=start;x<end;x=x+d)

area=area+f(x)+f(x+d);

area=0.5*area*d;

Chúng ta giả định biến area không vượt quá giá trị max cho phép Để hiệu quả hơn,

chúng ta có thể đơn giản tính toán bởi rút gọn đại số, như sau:

Area

2

) ( ) ) 1 ( ( (

2

) 2 ( ) ( ( 2

) ( ) (

Trang 31

)

n a f a

f a

f a

Trong phần này, chúng ta sẽ giới thiệu một kỹ thuật xử lý song song gọi là

đường ống, chúng được ứng dụng rộng rãi trong nhiều bài toán Tính toán đường

ống là cần thiết để tăng cường khả năng thi hành

1.4.4.1 Kỹ thuật đường ống

Trong kỹ thuật đường ống, bài toán được chia thành một loạt những nhiệm vụ

phải được hoàn thành theo cách: nhiệm vụ này hoàn tất sau những nhiệm vụ khác

Thật ra đây điều là cơ bản của lập trình tuần tự Trong kỹ thuật đường ống, mỗi

nhiệm vụ được thực thi bởi một tiến trình khác nhau Chúng ta thỉnh thoảng đề cập

đến một tiến trình đường ống như là một giai đoạn đường ống Mỗi giai đoạn góp

phần hoàn thành bài toán và chuyển thông tin cần thiết cho giai đoạn kế tiếp Tính

song song có thể nhận thấy như là một hình thức phân tán chức năng Bài toán được

chia thành nhiều giai đoạn khác nhau và được thực thi Nhưng trong trường hợp này

những chức năng được thực thi liên tiếp Như chúng ta sẽ thấy, dữ liệu đầu vào

thường được phân ly và xử lý khác nhau

Hình 1.18 Xử lý đường ống Một ví dụ của chương trình tuần tự có thể được trình bày rõ ràng như là một

đường ống, xem xét vòng lặp sau:

for (i=0;i<n;i++) sum=sum+a[i];

Với tổng của các phần tử của mảng a, vòng lặp có thể được tháo ra như sau:

sum=sum+a[0];

sum=sum+a[1];

sum=sum+a[2];

Trang 32

sum=sum+a[3];

sum=sum+a[4];

Một giải pháp đường ống là mỗi giai đoạn riêng biệt cho mỗi câu lệnh Mỗi

giai đoạn tính tổng với đầu vào của nó, sin

Và với một phần tử a[] tạo ra một tổng cho đầu ra của nó, sout

Do đó giai đoạn i thực thi:

Sout=sin+a[i];

Thay vì những câu lệnh đơn, một loạt các chức năng có thể được thực thi theo

phong cách đường ống Một bộ lọc tần số là một ví dụ thực sự trong đó bài toán

được chia thành một loạt các chức năng Mục tiêu ở đây là di chuyển những tần số

đặc biệt (f0,f1,f2,f3 v.v) từ một tín hiệu Tín hiệu có thể tham gia vào đường ống từ

bên trái Mỗi giai đoạn sẽ đáp lại bằng cách dịch chuyển một tần số

Hình 1.19 Đường ống trong vòng lặp

Hình 1.19 Đường ống trong bộ lọc tần số Cách tiếp cận đường ống có thể cung cấp việc tăng tốc theo 3 kiểu tính toán sau:

1 Nếu có nhiều hơn một yêu cầu để hoàn tất bài toán là được thi hành

2 Nếu một loạt những mục dữ liệu phải được xử lý, những mục dữ liệu này đòi

hỏi nhiều thao tác tính toán

3 Nếu thông tin để bắt đầu cho tiến trình kế tiếp được chuyển lên sau khi một tiến

trình hoàn tất những thao tác bên trong của nó

Chúng ta sẽ định danh 3 giải pháp như 3 kiểu: kiểu 1, kiểu 2, kiểu 3

Trang 33

Sự sắp xếp theo kiểu 1 được sử dụng rộng rãi trong thiết kế phần cứng

Kiểu đường ống 1 được minh họa như hình dưới:

Hình 1.20 Sơ đồ không gian thời gian của một ống dẫn Trong hình này, mỗi tiến trình được giả định là cho cùng thời gian để hoàn tất

những nhiệm vụ của nó Mỗi giai đoạn thời gian là một chu kì đường ống Mỗi yêu

cầu của bài toán đòi hỏi 6 tiến trình liên tiếp, P0 P1 P2 P3 P4 và P5

Những thông tin tương tự có thể thấy như hình sau:

Hình 1.21 Sơ đồ không gian thời gian luân phiên Dạng tương tự của biểu đồ này thỉnh thoảng hữu ích nếu nó cần thiết để cho thấy

thông tin được chuyển từ một yêu cầu của nhiệm vụ này đến nhiệm vụ khác

Với p tiến trình lập thành đường ống và m yêu cầu của bài toán để thực thi, số

lượng các chu kì đường ống để thực thi tất cả m yêu cầu được cho bởi m+p-1 chu

Sự sắp xếp theo kiểu 2: Một loạt những mục dữ liệu phải được xử lý trong một

chuỗi, xuất hiện trong thuật toán tính toán, ví dụ như: nhân những phần tử của một

mảng, ở đây những phần tử đơn lẻ tham gia vào đường ống như là một loạt các số

Trang 34

tuần tự Kiểu sắp xếp này được thể hiện như hình sau: ở đây 6 tiến trình thiết lập

đường ống và 6 phần tử d0 đến d5 được xử lý Với p tiến trình và m mục dữ liệu, tất

cả thời gian thực thi là (p-1)+n chu kì đường ống

(a) Kiến trúc đường ống

(b) Sơ đồ thời gian Hình 1.22 Đường ống đang xử lý với 6 phần tử dữ liệu

Thông dụng nhất là kiểu sắp xếp thứ 3, nó được ứng dụng nhiều trong lập trình

song song Ở đây chỉ có một yêu cầu của bài toán được thi hành nhưng mỗi tiến

trình có thể chuyển thông tin của yêu cầu này đến tiến trình tiếp theo trước khi yêu

cầu được hoàn tất Hình 1.23 cho thấy khoảng thời gian khi mà thông tin có thể

chuyển từ một tiến trình đến một tiến trình khác trước khi nó kết thúc việc thi hành

của một tiến trình

(a) Tiến trình với cùng thời gian (b) Tiến trình không cùng

Trang 35

Hình 1.23 Xử lý đường ống mà ở đó thông tin được chuyển đến giai đoạn tiếp theo

sau khi một tiến trình kết thúc

Nếu số lượng các giai đoạn lớn hơn số lượng các tiến trình trong đường ống,

một nhóm các giai đoạn có thể được gán đến mỗi tiến trình( có thể thấy như hình

1.23) Tất nhiên, những giai đoạn đường ống giới hạn trong một tiến trình phải

được thi hành tuần tự

Hình 1.23 Phân chia sự thi hành cho nhiều tiến trình

1.4.4.2 Sắp xếp số

Mục đích của sắp xếp số là sắp lại một tập các số theo chiều tăng hay giảm dần

Một giải pháp đường ống cho việc sắp xếp là bắt đầu bằng tiến trình đầu tiên, P0

nhận một loạt các số một lần, lưu trữ số lớn nhất mà nó nhận được và chuyển về

phía trước các số nhỏ hơn số được lưu trữ Nếu một số được nhận là lớn hơn số

hiện tại lưu trữ, nó sẽ thay thế số hiện tại được lưu trữ và số đã lưu trữ trước đó sẽ

được chuyển về phía trước Mỗi tiến trình tiếp theo sẽ thực hiện thuật toán tương

else send(&number,Pi+1);

Với n số, tiến trình thứ i phải biết n-i số, và chuyển n-i+1 số về phía trước

Một vòng lặp đơn có thể được sử dụng như sau:

Trang 36

Hình 1.24 Từng bước của thuật toán sắp xếp chèn với 5 số

1.4.4.3 Thuật toán sắp xếp so sánh và đổi chỗ

Một trong các thuật toán sắp xếp đơn giản nhất là thực hiện 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 Quá trình

này lặp lại cho đến khi không còn cặp nào thoả mãn thì dừng

a/ Thuật toán tuần tự: sắp xếp mảng a[n] theo thứ tự tăng dần

for(i=n-1; i > 0; i )

for(j=0; j < i; i++) {

k = j + 1;

if(a[j] > a[k])

{ temp = a[j];

a[j] = a[k];

a[k] = temp;

Trang 37

}

b/ Thuật toán song song:

Chúng ta có thể sử dụng n tiến trình 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 tiến trình được đánh số chẵn so sánh với những tiến trình

tiếp theo (tiến trình có số lẻ), nếu nó giữ phần tử lớn hơn thì đổi dữ liệu

với tiến trình đó

 Pha lẻ: các tiến trình có số lẻ hoạt động tương tự như trên

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

Hình 1.25 Sắp xếp theo nguyên lý ống

Ở pha thứ 6 và 7, không có cặp nào phải đổi chỗ do vậy thuật toán dừng và cho kết

quả là một dãy được sắp xếp Trong hình 5-4, mũi tên hai chiều đứt nét để chỉ

những cặp so sánh với nhau nhưng không cần đổi chỗ, còn mũi tên nét liền là phải

đổi giá trị cho nhau

Giả thiết dữ liệu được lưu ở những tiến trình chẵn là B và ở những tiến trình lẻ là A

Thuật toán song song theo hình ống được mô tả trong mô hình truyền thông điệp

như sau:

a/ Pha chẵn

Pi, i = 0, 2, 4, , n-2 (chẵn) Pi, i = 1, 3, 5, , n-3 (lẻ)

b/ Pha lẻ

Pi, i = 1, 3, 5, , n-3 (lẻ) Pi, i = 0, 2, 4, , n-2 (chẵn)

Trang 38

if(A > B) A = B; if(A > B) B = A;

Trong cả hai trường hợp, các tiến trình (bộ xử lý) được đánh số lẻ đều gọi hàm

send() sau đó mới gọi recv() Kết hợp lại chúng ta được thuật toán song song:

Pi, i = 1, 3, 5, , n-3 (lẻ) Pi, i = 0, 2, 4, , n-2 (chẵn)

send(&A, Pi-1); recv(&A, Pi+1);// pha chẵn

recv(&B, Pi-1); send(&B, Pi+1);

send(&A, Pi+1); recv(&A, Pi-1);// pha lẻ

recv(&B, Pi+1); send(&B, Pi-1);

Thuật toán này có độ phức tạp O(n)

1.4.4.4 Giải bài toán hệ phương trình tuyến tính dạng đặc biệt

Mục tiêu của việc giải bài toán hệ phương trình tuyến tính ở đây là giải hệ

phương trình tuyến tính dạng tam giác

0 0

a

b

x Giá trị thu được từ x0 là được sử dụng trong phương trình tiếp theo để thu được x1:

1 , 1

0 0 , 1 1 1

a

x a b

Giá trị thu được từ x0 và x1 sẽ được dùng trong hệ phương trình tiếp theo để thu

được x2:

2 , 2

1 1 , 2 0 0 , 2 2 2

a

x a x a b

Rõ ràng, giải thuật này có thể được thi hành bởi một đường ống Đầu tiên đường

ống nhận x0 và chuyển x0 sang giai đoạn thứ 2 để tính x1 từ x0 và chuyển cả x0,x1

sang giai đoạn tiếp theo để tính x từ x ,x , v.v mỗi giai đoạn thực thi với một tiến

Trang 39

trình Có n tiến trình cho n phương trình Tiến trình thứ i(0<i<p) nhận giá trị từ

x0,x1,…,xi-1 và tính giá trị xi:

i

j j i

j i

i

a

x a b

x

, , 1 0

Mã tuần tự của chương trình:

Cho ai,j và bk là hằng số và được lưu trong mảng a[][] và b[] theo thứ tự định sẵn,

và biến cần tìm được lưu trong mảng x[], mã tuần tự như sau:

Trang 40

Chương II Kỹ thuật truyền thông điệp trong tính toán song

song với MPI

2.1 Cơ bản về truyền thông điệp

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

Giống như mô hình chia sẻ bộ nhớ, các đơn vị xử lý song song trong mô hình

truyền thông điệp là các tiến trình Tuy nhiên cũng có một số điểm khác nhau giữa

hai mô hình này Trong mô hình truyền thông điệp:

Các tiến trình có thể thực hiện trên những bộ xử lý khác nhau và không truy cập

được vào không gian địa chỉ chia sẻ Vì lý do này, những chương trình trao đổi

thông điệp với nhau còn được gọi là các chương trình phân tán

Chỉ có kênh truyền là có thể chia sẻ cho các tiến trình, thường đó là LAN hoặc

mạng diện rộng

Việc truyền thông và đồng bộ hoá hoạt động của các tiến trình được thực hiện

thông qua hai phương thức send() và receive()

Tất cả các biến là cục bộ của các tiến trình Vì thế, những vấn đề về xung đột dữ

liệu (cần phải khoá dữ liệu khi một tiến trình truy cập), hay tranh chấp thông tin (bài

toán loại trừ nhau) không xuất hiện trong mô hình tính toán phân tán

Việc đồng bộ hoá các tiến trình của một chương trình song song được thực hiện

theo có chế truyền thông điệp Khi một tiến trình muốn gửi một thông điệp thì nó

phải chờ cho đến khi tiến trình nhận sẵn sàng nhận thông điệp đó và ngược lại, cũng

tương tự Ở đây không có các buffer để tạm lưu giữ các thông điệp cần trao đổi giữa

các tiến trình

2.1.2 Kênh truyền thông

Những hệ thống khác nhau sẽ cung cấp những kênh truyền ở những mức trừu

tượng khác nhau Hầu hết các hệ thống đều đảm bảo rằng các kênh truyền thông

không có các lỗi thông thường Nghĩa là, tất cả các thông điệp được gửi đi và sẽ đến

được đích mà không bị sai lạc

Kênh truyền thông có thể được xem như là hàng đợi, và thông điệp sẽ được gửi đến

đích theo thứ tự nó được gửi đi Kênh truyền thông cũng có thể được xem như là

Ngày đăng: 16/05/2015, 01:48

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