- Lý thuyết tính toán song song.- Mong muốn cải tiến được một thuật toán nào đó sang tính toán song songsao cho tốc độ tính toán nhanh hơn thuật toán cũ và phát biểu bài toán thực tế có
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO
ĐẠI HỌC ĐÀ NẴNG
TRƯƠNG VĂN HIỆU
NGHIÊN CỨU CÁC GIẢI THUẬT SONG SONG TRÊN HỆ THỐNG XỬ LÝ ĐỒ HỌA GPU ĐA LÕI
LUẬN VĂN THẠC SĨ KỸ THUẬT
Trang 2Đà Nẵng - Năm 2011
BỘ GIÁO DỤC VÀ ĐÀO TẠO
ĐẠI HỌC ĐÀ NẴNG
TRƯƠNG VĂN HIỆU
NGHIÊN CỨU CÁC GIẢI THUẬT SONG SONG TRÊN HỆ THỐNG XỬ LÝ ĐỒ HỌA GPU ĐA LÕI
Chuyên ngành: KHOA HỌC MÁY TÍNH
Mã số: 60.48.01
LUẬN VĂN THẠC SĨ KỸ THUẬT
Người hướng dẫn khoa học: TS Nguyễn Thanh Bình
Trang 3Đà Nẵng - Năm 2011
LỜI CAM ĐOAN
Tôi xin cam đoan:
hướng dẫn trực tiếp của TS Nguyễn Thanh Bình.
trung thực về tên tác giả, tên công trình, thời gian và địa điểm công bố Mọi sao chép không hợp lệ, vi phạm quy chế đào tạo, hay gian trá, tôi xin chịu hoàn toàn trách nhiệm.
Tác giả
Trương Văn Hiệu
Trang 4MỤC LỤC
LỜI CAM ĐOAN i
MỤC LỤC ii
DANH MỤC BẢNG v
DANH MỤC HÌNH vi
MỞ ĐẦU 1
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 5
1.1 GIỚI THIỆU ĐẠI CƯƠNG VỀ TÍNH TOÁN SONG SONG 5
1.1.1 Tổng quan về tính toán song song 5
1.1.2 Phân loại các kiến trúc song song 7
1.1.3 Các mô hình lập trình song song 11
1.1.4 Đánh giá hiệu quả tính toán song song 13
1.2 THIẾT KẾ GIẢI THUẬT SONG SONG(7) 19
1.2.1 Nguyên lý thiết kế giải thuật song song 19
1.2.2 Thiết kế giải thuật song song bằng phân rã phục thuộc dữ liệu 21
1.2.3 Giải thuật sắp xếp so sánh và đổi chỗ 22
1.2.4 Thiết kế giải thuật song song bằng phương pháp chia để trị 24
1.2.5 Thiết kế giải thuật song song cho bài toán tính tổng 26
1.2.6 Song song hóa một bài toán tuần tự 28
1.2.7 Mẫu thiết kế giải thuật song song bằng phương pháp cây nhị phân 29
1.3 PHÁT BIỂU MỘT SỐ BÀI TOÁN TÍNH TOÁN SONG SONG(7) 30
1.3.1 Thuật toán sắp xếp 31
1.3.2 Thuật toán nhân hai ma trận 31
1.3.3 Tích vô hướng của hai vector 31
1.3.4 Bài toán tổng con 31
1.4 TỔNG KẾT CHƯƠNG 1 31
CHƯƠNG 2: CẤU TRÚC HỆ THỐNG XỬ LÝ ĐỒ HỌA GPU VÀ CÔNG NGHỆ TÍNH TOÁN HỖ TRỢ SONG SONG DỮ LIỆU CUDA(25) 32 2.1 CẤU TRÚC HỆ THỐNG XỬ LÝ ĐỒ HỌA GPU(12) 32
2.1.1 Giới thiệu công nghệ GPU (2) 32
2.1.2 Tìm hiểu kiến trúc GPU (4)[chưa] 32
2.1.3 So sánh GPU và CPU (3) 32
2.1.4 Ứng dụng của GPU trong các lĩnh vực 34
Trang 5[chưa] Sự phát triển công nghệ song song lĩnh vực xử lý ảnh, lĩnh vực y học,
giải trí, mật mã, 34
2.2 CÔNG NGHỆ TÍNH TOÁN HỖ TRỢ SONG SONG DỮ LIỆU CUDA .34 2.2.1 Giới thiệu công nghệ CUDA 34
2.2.2 Ứng dụng của CUDA trong các lĩnh vực công nghệ (4) 37
2.2.3 Môi trường lập trình với CUDA (6) 43
2.2.4 Một số ví dụ tính toán của CUDA 48
2.3 TỔNG KẾT CHƯƠNG 2 48
CHƯƠNG 3: XÂY DỰNG ỨNG DỤNG ÁP DỤNG GIẢI THUẬT SONG SONG TRÊN HỆ THỐNG ĐA LÕI XỬ LÝ ĐỒ HỌA GPU CHO BÀI TOÁN BẮT CẶP TRÌNH TỰ (30) 48
3.1 GIỚI THIỆU 49
3.1.1 Trình tự 49
3.1.2 Sắp hàng trình tự 51
3.1.3 Sắp hàng trình tự hệ gen 53
3.2 PHÁT BIỂU VỀ MỘT BÀI TOÁN BẮT CẶP TRÌNH TỰ 57
3.2.1 Mô tả bài toán thực tế 57
3.2.2 Phát biểu bài toán cho một số trường hợp đơn giản, đưa ra hướng giải quyết 57 3.2.3 Đưa về dạng toán học 57
3.3 THIẾT KẾ GIẢI THUẬT SONG SONG TRÊN BÀI TOÁN BẮT CẶP TRÌNH TỰ 57
3.3.1 Xây dựng giải thuật 57
3.3.2 Đưa ra kết quả dự kiến 57
3.4 CÀI ĐẶT GIẢI THUẬT TRÊN CUDA 57
3.4.1 Cài đặt giải thuật 57
3.4.2 57 3.5 ĐÁNH GIÁ KẾT QUẢ CHẠY CHƯƠNG TRÌNH 57
3.5.1 Kết quả cho từng trường hợp 57
3.5.2 Phân tích ưu điểm, nhược điểm 57
3.5.3 So sánh với các phương pháp khác 57
3.6 KẾT QUẢ CHƯƠNG TRÌNH 57
3.7 ĐÁNH GIÁ KẾT QUẢ 57
3.8 TỔNG KẾT CHƯƠNG 3 57
KẾT LUẬN 58
Trang 6DANH MỤC TÀI LIỆU THAM KHẢO 59
Trang 7DANH MỤC BẢNGBảng 1.1 Mô tả phân loại kiến trúc của Flynn 8 Bảng 1.2 Sắp xếp theo nguyên lý hình ống 23
Trang 8DANH MỤC HÌNH
Hình 1.1 Mô tả kiến trúc Von Neumann 5
Hình 1.2 Mô hình nhiều bộ xử lý song song 6
Hình 1.3 Mô hình nhiều máy tính xử lý song song 6
Hình 1.4 Mô hình kiến trúc máy SISD 9
Hình 1.5 Mô hình kiến trúc máy SIMD 9
Hình 1.6 Mô hình kiến trúc máy MISD 10
Hình 1.7 Mô hình kiến trúc máy MIMD 11
Hình 1.8 Mô tả lập trình giữa các tác vụ dùng chung bộ nhớ 11
Hình 1.9 Mô hình lập trình truyền thông giữa hai tác vụ trên hai máy tính 12
Hình 1.10 Mô hình lập trình song song dữ liệu 12
Hình 1.11 Mô tả mối quan hệ các tham số trong công thức tính thời gian truyền thông 15
Hình 1.12 Kỹ thuật xen kẽ tính toán và truyền thông giữa P 1 và P 2 17
Hình 1.13 Thí nghiệm tính số PI 24
Hình 1.14 Mẫu nhị phân tính tổng N số 28
Hình 2.1 So sánh kiến trúc CPU và GPU 30
Hình 2.2 So sánh floating-point của GPU và CPU 31
Hình 2.3 CUDA trên các GPU đời mới của NVIDIA 32
Hình 2.4 Điện toán GPU được tăng cường bởi kiến trúc CUDA 33
Hình 2.5 Mô hình phần mềm hỗ trợ phát triển ứng dụng điện toán GPU dựa trên CUDA 34
Hình 2.6 PhysX và quy trình hiển thị hình ảnh trong game 36
Hình 2.7 Các tính năng do bộ PhysX SDK mang lại cho hiệu ứng trong game 37
Hình 2.8 Các thành tựu CUDA đã đạt được với các ứng dụng cho người dùng thông thường 38
Hình 2.9 Bodaboom bộ chuyển đổi media nhanh nhất đầu tiên trên thế giới 40 Hình 2.10 CUDA với ứng dụng hình ảnh cho người dùng bình thường 40
Hình 2.11 Hình này chưa có 43
Hình 2.12 Sơ đồ hoạt động truyền dữ liệu giữa Host và Divice 45
Trang 9Hình 3.1 Ví dụ về một trình tự Hình trên cùng: 1 đoạn 18S rDNA của sâu bọ khác cánh Hình giữa trên: Tổng quát cơ thể động vật chân dốt Hình giữa dưới: Orthopteran stridulation Hình dưới cùng: Đoạn gen mtDNA [13] 46 Hình 3.2 Các biến đổi ở mức độ gen giữa Người và Khỉ 51
Trang 10MỞ ĐẦU
Nhu cầu tính toán trong lĩnh vực khoa học, công nghệ ngày càng cao và trởthành một thách thức lớn, từ đó các giải pháp nhằm tăng tốc độ tính toán đã được rađời, từ năm 2001 đến năm 2003 tốc độ của Pentium 4 đă tăng gấp đôi từ 1.5GHz lênđến 3GHz, tuy nhiên hiệu năng của CPU (Central Processing Unit) không tăngtương xứng như mức gia tăng xung của CPU, và việc gia tăng tốc độ xung của CPUnhanh chóng chạm phải ngưỡng tối đa mà cụ thể trong khoảng thời gian 2 năm từnăm 2003 đến năm 2005 tốc độ của CPU chỉ tăng từ 3GHz lên 3.8GHz Trong quátrình tăng tốc độ xung của CPU các nhà sản xuất đã chạm phải vấn đề về nhiệt độcủa CPU sẽ quá cao và các giải pháp tản nhiệt khí đã đến mức tới hạn không thểđáp ứng được khả năng làm mát khi CPU hoạt động ở xung quá cao như vậy Vìvậy việc gia tăng xung hoạt động của CPU không sớm thì muộn cũng sẽ đi vào bếtắc
Trước tình hình này, các nhà nghiên cứu vi xử lý đã chuyển hướng sang pháttriển công nghệ đa lõi, nhiều lõi, với cơ chế xử lý song song trong các máy tínhnhằm tăng hiệu năng và tiết kiệm năng lượng
Một trong các công nghệ xử lý song song ra đời đó là GPU(GraphiscProcessing Unit - bộ xử lý đồ họa) Ban đầu, việc chế tạo GPU chỉ với những mụcđích công việc phù hợp với khả năng là tăng tốc độ xử lý đồ họa, cũng như trongngành game là chủ yếu Nhưng đến thời điểm GPU NV30 của nVIDIA ra đời, GPUbắt đầu tham gia vào những công việc khác ngoài đồ họa như: hỗ trợ tính toán dấuchấm động đơn, hỗ trợ tính toán lên cả ngàn lệnh Vì thế đã nảy sinh ra ý tưởngdùng GPU để xử lý, tính toán song song những chương trình không thuộc đồ họa.Câu hỏi được đặt ra là làm thế nào để ứng dụng GPU vào việc xử lý tính toánsong song? Câu hỏi này nhanh chóng được giải quyết bằng công nghệ CUDA(Compute Unified Device Architecture – kiến trúc thiết bị hợp nhất cho tính toán)của NVIDIA ra đời năm 2007 Với CUDA, các lập trình viên nhanh chóng phát
Trang 11triển các ứng dụng song song trong rất nhiều lĩnh vực khác nhau như: điện toán hóahọc, sắp xếp, tìm kiếm, mô phỏng các mô hình vật lý, chuẩn đoán y khoa, thăm dòdầu khí, v.v …CUDA là bộ công cụ phát triển phần mềm trên GPU được xây dựngbằng ngôn ngữ lập trình C Với CUDA các lập trình viên dùng để điều khiển GPU
để xử lý, tính toán song song các dữ liệu lớn
Việc tăng tốc trong quá trình tính toán không những đòi hỏi GPU khả năng xử
lý tốc độ cao, với dữ liệu khổng lồ mà cần phải có những thuật toán song song hữuhiệu
Xuất phát từ nhu cầu trên tôi chọn đề tài: “NGHIÊN CỨU CÁC GIẢI
THUẬT SONG SONG TRÊN HỆ THỐNG XỬ LÝ ĐỒ HỌA GPU ĐA LÕI”
1 Mục tiêu và nhiệm vụ nghiên cứu
Để hoàn thành mục đích ý tưởng đề ra cần nghiên cứu các nội dung như sau :
- Tìm hiểu các thuật toán tính toán song song, các cách thiết kế mẫu trong tínhtoán song song
- Tìm hiểu cấu trúc của GPU
- Tìm hiểu và triển khai lập trình song song với CUDA
- Phát biểu, phân tích, cài đặt thuật toán cho bài toán đặt ra
- Xây dựng thuật toán và ứng dụng áp dụng thuật toán tính toán song song trêncard đồ họa GPU
- Đánh giá kết quả theo yêu cầu của đề tài
2 Đối tượng và phạm vi nghiên cứu
Đối tượng nghiên cứu
Trong khuôn khổ của luận văn thuật loại nghiên cứu và ứng dụng, tôi chỉ giớihạn nghiên cứu các vấn đề sau:
Trang 12- Lý thuyết tính toán song song.
- Mong muốn cải tiến được một thuật toán nào đó sang tính toán song songsao cho tốc độ tính toán nhanh hơn thuật toán cũ và phát biểu bài toán thực tế
có áp dụng thuật toán trên và cài đặt, giải quyết trên bộ đa xử lý card đồ họaGPU bằng CUDA
Phạm vi nghiên cứu
- Phần này còn thiếu ????????????
3 Phương pháp nghiên cứu
Đề tài này sẽ kết hợp hai phương pháp nghiên cứu, đó là:
Phương pháp nghiên cứu lý thuyết
- Nghiên cứu lý thuyết về tính toán song song, các giải thuật tính toán songsong
- Nghiên cứu lý thuyết về cơ chế hoạt động tính toán trong GPU
Phương pháp nghiên cứu thực nghiệm
Sử dụng phương pháp nghiên cứu lý thuyết kết hợp với nghiên cứu thực nghiệm:
- Thiết kế giải thuật song song và cài đặt trên CUDA, …
- Triển khai xây dựng ứng dụng
- Chạy thử nghiệm và lưu trữ các kết quả đạt được, sau đó đánh giá lại kết quả
4 Kết quả dự kiến
- Nghiên cứu được một số thuật toán tính toán song song
- Cài đặt các thuật toán tính toán song song chạy trên card đồ họa GPU
- Xây dựng ứng dụng tính toán trên card đồ họa GPU sử dụng thuật toán tínhtoán song song
Trang 135 Ý nghĩa khoa học và thực tiễn của luận văn
Về mặt lý thuyết
- Nắm được các giải thuật, các mẫu thiết kế tính toán song song
- Khai thác các bộ thư viện CUDA SDK ứng dụng trong ngôn ngữ lập trìnhsong song bằng CUDA
Về mặt thực tiễn
- Việc nghiên cứu và đề xuất giải pháp để “Nghiên cứu các giải thuật songsong trên hệ thống xử lý đồ họa GPU”, làm cơ sở để giải quyết một số bàitoán cần lượng tính toán lớn với dữ liệu khổng lồ
6 Bố cục luận văn
Nội dung chính của luận văn được chia thành 3 chương như sau:
Chương 1: Cơ sở lý thuyết tính toán song song
Trang 14
1
-CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
Trong chương này đề cập sơ lược đến các vấn đề cơ bản trong tính toán songsong như: phân loại kiến trúc song song, mô hình lập trình song song, các mẫu thiết
kế giải thuật song song, … Qua đây sẽ đưa ra cái nhìn tổng quan hơn về tính toánsong song
1.1 GIỚI THIỆU ĐẠI CƯƠNG VỀ TÍNH TOÁN SONG SONG
1.1.1 Tổng quan về tính toán song song
1.1.1.1 Lịch sử ra đời tính toán song song
Trong những thập niên 60, nền tảng để thiết kế máy tính đều dựa trên mô hìnhcủa John Von Neumann, với một đơn vị xử lý được nối với một vùng lưu trữ làm bộnhớ và tại một thời điểm chỉ có một lệnh được thực thi
Hình 1.1 Mô tả kiến trúc Von Neumann
Với những bài toán yêu cầu về khả năng tính toán và lưu trữ lớn thì mô hìnhkiến trúc này còn hạn chế Để tăng cường sức mạnh tính toán giải quyết các bài toánlớn có độ tính toán cao, người ta đưa ra kiến trúc mới, với ý tưởng kết hợp nhiều bộ
xử lý vào trong một máy tính, mà người ta hay gọi là xử lý song song(Multiprocessor) hoặc kết hợp sức mạnh tính toán của nhiều máy tính dựa trên kếtnối mạng (gọi là máy tính song song - multicomputer)
Trang 15
2
-Kể từ lúc này, để khai thác được sức mạnh tiềm tàng trong mô hình máy tínhnhiều bộ xử lý song song, cũng như trong mô hình mạng máy tính xử lý song songthì các giải thuật tuần tự không còn phù hợp nữa cho nên việc xây dựng thiết kế giảithuật song song là điều quan trọng Giải thuật song song có thể phân rã công việctrên các phần tử xử lý khác nhau
1.1.1.2 Một số khái niệm xử lý song song
Định nghĩa 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 đồngthời và cùng tham giải quyết một bài toán Nói chung, xử lý song song được thựchiện trên những hệ thống đa bộ xử lý
Phân biệt xử lý song song và xử lý tuần tự
Trong tính toán tuần tự với một bộ xử lý thì tại mỗi thời điểm chỉ được thựchiện một phép toán
Trong tính toán song song thì nhiều bộ xử lý cùng kết hợp với nhau để giảiquyết cùng một bài toán cho nên giảm được thời gian xử lý vì mỗi thời điểm có thểthực hiện đồng thời nhiều phép toán
Mục đích của xử lý song song
Là thực hiện tính toán nhanh trên cơ sở sử dụng nhiều bộ xử lý đồng thời.Cùng với tốc độ xử lý nhanh, việc xử lý song song cũng sẽ giải được những bài toánphức tạp yêu cầu khối lượng tính toán lớn
Ba yếu tố chính dẫn đến việc xây dựng các hệ thống xử lý song song
Tốc độ xử lý của các bộ xử lý theo kiểu Von Neumann đã dần tiến tới giớihạn, không thể cải tiến thêm được, do vậy dẫn tới đòi hỏi phải thực hiện xử lý songsong Hiện nay giá thành của phần cứng (CPU) giảm mạnh, tạo điều kiện để xâydựng những hệ thống có nhiều bộ xử lý với giá thành hợp lý
Trang 16 Cài đặt thuật toán song song
Để cài đặt các thuật toán song song trên các máy tính song song, chúng ta phải
sử dụng những ngôn ngữ lập trình song song như: OpenMP với C/C++, MPI với C/C++, v.v…
1.1.2 Phân loại các kiến trúc song song
Một trong những phân loại kiến trúc máy tính song song được biết đến nhiềunhất là phân loại của Flynn, được sử dụng từ năm 1966 Michael Flynn dựa vào đặctính về số lượng bộ xử lý, số chương trình thực hiện, cấu trúc bộ nhớ, … để phânmáy tính thành 4 loại dựa trên sự biểu hiện của cặp khái niệm: dòng lệnh(instruction stream) và dòng dữ liệu (data stream), mỗi loại nằm trong một trong haitrạng thái đơn (single) hoặc đa (multiple) được thể hiện trong bảng sau:
Bảng 1.1 Mô tả phân loại kiến trúc của Flynn
Trang 17SISD Single Instruction Single DataTrạng thái đơn
(single)
Trạng thái đa(multiple)
SIMD Single Instruction Multiple DataTrạng thái đa
(multiple)
Trạng thái đơn(single)
MISDMultiple Instruction Single DataTrạng thái đa
(multiple)
Trạng thái đa(multiple)
MIMD Multiple Instruction Multiple Data
1.1.2.2 Kiến trúc đơn dòng lệnh đơn luồng dữ liệu (SISD)
Máy tính 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 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 Kiến trúc máy SISD
có mô hình hoạt động theo hình sau:
Hình 2.1 Mô hình kiến trúc máy SISD 1.1.2.3 Kiến trúc đơn dòng lệnh đa luồng dữ liệu (SIMD)
Máy tính 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 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 Kiến trúc máy SIMD
có mô hình hoạt động theo hình sau:
Trang 18Hình 4.1 Mô hình kiến trúc máy MISD 1.1.2.5 Kiến trúc đa dòng lệnh đa luồng dữ liệu (MIMD)
Máy tính loại MIMD gọi là đa bộ xử lý, trong đó mỗi bộ xử lý có thể thựchiệ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ầuhết các hệ thống MIMD đều có bộ nhớ riêng và cũng có thể truy cập vào bộ nhớchung khi cần, do vậy giảm thiểu được thời gian trao đổi dữ liệu giữa các bộ xử lýtrong hệ thống Đây là loại kiến trúc phức tạp nhất, nhưng nó là mô hình hỗ trợ xử
Trang 19
6
-lý song song cao nhất và đã có nhiều máy tính được thiết kế theo kiến trúc này, vídụ: BBN Butterfly, Alliant FX, iSPC của Intel, v.v Kiến trúc máy MIMD có môhình hoạt động theo hình sau:
Hình 5.1 Mô hình kiến trúc máy MIMD
1.1.3 Các mô hình lập trình song song
1.1.3.1 Lập trình bộ nhớ dùng chung
Lập trình bộ nhớ dùng chung hay còn gọi là lâp trình chia sẻ bộ nhớ Trong
mô hình này được thiết kế cho máy tính multiprocessors, các tác vụ chia sẻ khônggian địa chỉ dùng chung, được đọc/ghi một cách không đồng bộ Một số kỹ thuậtđược dùng trong lập trình bộ nhớ dùng chung như khoá (locks) hay cờ (semaphores)được sử dụng để điều khiển truy nhập đến bộ nhớ dùng chung Truyền thông giữacác tác vụ thông qua các biến dùng chung
Hình 1.1 Mô tả lập trình giữa các tác vụ dùng chung bộ nhớ
Trang 20
7
-1.1.3.2 Lập trình truyền thông điệp
Trong máy tính multicomputers cung cấp kỹ thuật truyền thông điệp để traođổi giữa các tác vụ Hai tác vụ nằm trên hai máy khác nhau có thể trao đổi với nhaubằng kỹ thuật truyền thông điệp trên mạng kết nối Các thông điệp có thể là cáclệnh, dữ liệu, tín hiệu đồng bộ hay ngắt Hai mô hình truyền thông điệp được thựcthi và sử dụng là đồng bộ hay không đồng bộ
Hình 2.1 Mô hình lập trình truyền thông giữa hai tác vụ trên hai máy tính 1.1.3.3 Mô hình song song dữ liệu
Trong mô hình này, hầu hết các công việc song song đều tập trung thực hiệncác phép toán trên một tập dữ liệu Tập dữ liệu này thường được tổ chức trong mộtcấu trúc dữ liệu thông dụng như mảng hoặc khối Một tập tác vụ sẽ làm việc trêncùng cấu trúc dữ liệu nhưng mỗi tác vụ sẽ làm việc trên một phần dữ liệu khác nhauvới cùng phép toán Mô hình này thiết kế chủ yếu dành cho máy tính song song kiểu
bộ xử lý mảng (array processor)
Hình 3.1 Mô hình lập trình song song dữ liệu
Trang 21
8
-1.1.3.4 Mô hình hướng đối tượng
Trong mô hình này, ánh xạ các đơn vị thực hiện vào các đối tượng Các đốitượng được tạo ra và thao tác theo cách tự động, việc xử lý được thực hiện thôngqua gửi và nhận giữa các đối tượng Các mô hình lập trình hiện nay đều xây dựngcác đối tượng từ mức thấp như tiến trình, tác vụ, hàng đợi và cờ tín hiệu đến mứccao như monitor hay module chương trình
Các ngôn ngữ lập trình song song hướng đối tượng như CORBA, DCE,
JAVA, C/C++.
1.1.3.5 Mô hình logic
Dựa trên cơ sở logic tiên đề, lập trình logic phù hợp cho xử lý trí thức giảiquyết cơ sở tri thức lớn Mô hình này chấp nhận một chiến lược tìm kiếm ẩn và hỗtrợ song song trong xử lý suy luận logic Một câu hỏi được trả lời nếu hợp với các
sự kiện được tìm thấy trong cơ sở dữ liệu Hai sự kiện hợp nhau nếu tiền đề củachúng và các đối kết hợp là như nhau Xử lý việc hợp và thống nhất có thể đượcsong song dưới các điều kiện chắc chắn Mô hình này được áp dụng song song chocác ứng dụng trí tuệ nhân tạo
1.1.4 Đánh giá hiệu quả tính toán song song
1.1.4.1 Thời gian thực hiện
Thời gian tính toán
Thời gian tính toán của giải thuật song song là thời gian dành để thực hiện tínhtoán Đối với giải thuật tuần tự thì thời gian này chỉ phụ thuộc vào kích thước củabài toán nhưng với tính toán song song thì việc tính toán lặp trên các tác vụ có thể
có Do đó thời gian tính toán sẽ phụ thuộc vào số tác vụ thực hiện Đối với mô hình
bộ nhớ chung thì số lượng bộ xử lý cũng ảnh hưởng đến tốc độ thực thi trên mỗi bộ
xử lý
Trang 22
9
Thông thường ta có thể xác định bằng thời gian thực hiện tuần tự cộng với bất
kỳ thời gian nào thêm vào do thực hiện song song Chẳng hạn như thời gian tínhtoán lặp lại cùng một công việc trên các tác vụ
Thời gian truyền thông
Thời gian truyền thông của một giải thuật là thời gian các tác vụ dành để gửi
và nhận thông điệp Có hai loại truyền thông cần xác định : truyền thông giữa haitác vụ trên hai bộ xử lý khác nhau và truyền thông giữa hai tác vụ cùng nằm trêncùng bộ xử lý Thông thường thời gian truyền bên trong bộ xử lý lớn hơn nhiều sovới thời gian truyền giữa hai bộ xử lý, nhất là đối với mô hình máy tính song songmulticomputers
Trong mô hình multicomputers lý tưởng thì chi phí để gửi một message giữahai tác vụ định vị trên bộ xử lý khác nhau phụ thuộc vào hai tham số sau :
Thời gian khởi tạo message: ts là thời gian cần thiết để khởi tạo truyền thôngThời gian truyền dữ liệu: tw là thời gian cần thiết để truyền đi dữ liệu có kíchthước một word (2 byte) tw được xác định bởi băng thông vật lý của kênh truyềnthông kết nối bộ xử lý nguồn và đích
Công thức tính thời gian gửi message có kích thước L (đơn vị là word) là:
Trang 23
10
-Thông thường ts và tw là các thông số được tính toán phụ thuộc vào cụ thểkiến trúc máy tính song song Tuy nhiên đối với mô hình multicomputer thực tế, tacần phân tích sự ảnh hưởng của hai kỹ thuật định đường truyền thông là store andforward và circuit-switched cũng như ảnh hưởng của tranh chấp băng thông trênđường truyền giữa các bộ xử lý
Trong sơ đồ của cơ chế store and forward, thời gian cần thiết để gửi mộtmessage từ một bộ xử lý tới một bộ xử lý khác tăng tuyến tính với số bước nhảy(hops) mà message phải tạo ra để đến được đích Ngược lại, thời gian cần thiết đểgửi một message từ một bộ xử lý tới một bộ xử lý khác trong lược đồ chuyển mạch
là phụ thuộc rất ít với khoảng cách giữa các bộ xử lý
Do đó ta có thể phát triển thành các công thức sau :
- Đối với truyền thông định đường theo cơ chế store and forward:
Tmsg = ( ts + tw L) D
Với D là khoảng cách giữa nút nhận và gửi trong bước định đường
- Đối với truyền thông định đường theo cơ chế circuit-switched:
Tmsg = ts + tw S L
Trong đó S là số bộ xử lý gửi đồng thời trên cùng một đường dây
Thời gian rỗi
Trang 24
11
-Thời gian tính toán và truyền thông thường đơn giản hơn trong việc xác địnhbởi vì ta có thể xác định sự phân bố của nó đối với thời gian thực hiện Thời rảnhrỗi khó có thể xác định bởi vì phụ thuộc vào trình tự các phép được thực hiện Một bộ xử lý có thể đặt trong trạng thái rỗi nếu thiếu tính toán hoặc dữ liệu
để tính toán Trong trường hợp đầu tiên, thời gian rảnh rỗi có thể tránh được bằngcách sử dụng kỹ thuật căn bằng nạp động Trong trường hợp thứ hai, bộ xử lý rỗitrong khi tính toán đang chờ dữ liêu dữ liệu từ xa mà dữ liệu này lại đang trongtrạng thái sử dụng Thời này có thể được tránh nếu ta cấu trúc chương trình để cóthể thực tính toán hoặc truyền thông trong khí đang chờ dữ liệu từ xa Kỹ thuật nàythường được gọi là xen kẽ tính toán và truyền thông (overlapping computation andcommunication) bởi vì tính toán với dữ liệu cục bộ được thực hiện đồng thời vớitính toán và truyền thông dữ liệu xa
Cách đơn giản để đạt được điều này là tạo ra nhiều tác vụ trên một bộ xử lý.Trong khi một tác vụ đang bị dùng để chờ dữ liệu ở xa thì tính toán có thể chuyểnsang tác vụ khác mà dữ liệu đã sẵn có
Hình 1.2 Kỹ thuật xen kẽ tính toán và truyền thông giữa P 1 và P 2
Hầu hết các máy tính song song đều hỗ trợ thực hiện kỹ thuật lập lịch trình,xen kẽ tính toán và truyền thông do đó thời gian rỗi chiếm tỷ trọng rất nhỏ trongtoàn bộ thời gian tính toán, nên thông thường có thể bỏ qua được
1.1.4.2 Tăng tốc và hiệu quả
Trang 25
12
-Thời gian thực hiện không luôn là thước đo thuận tiên nhất để đánh giá hiệunăng của giải thuật Khi thời gian thực hiện có xu hướng biến đổi theo kích thướcbài toán, thời gian thực hiện phải được tiêu chuẩn hoá khi so sánh hiệu năng giảithuật với kích thước bài toán khác nhau
Hiệu quả của giải thuât được định nghĩa là phần thời gian mà các bộ xử lýdùng để thực hiện công việc có ích, chỉ ra mức độ hiệu quả của một giải thuật khi sửdụng các tài nguyên tính toán của một máy tính song song theo hướng độc lập vớikích thước bài toán, được xác định theo công thức sau:
Ep =
p
pT
T1
Với T1 là thời gian thực hiện giải thuật tuần tự
Tp là thời gian thực hiện giải thuật song song
Ep là hiệu quả giải thuật
Với Sp là khả năng tăng tốc
T1 là thời gian thực hiện giải thuật tuần tự
Tp là thời gian thực hiện giải thuật song song
Hầu hết các trường hợp thì Sp p
Rõ ràng khả năng tăng tốc càng lớn thì giải thuật song song càng tốt
Trang 26
13
-Tuy nhiên năm 1967 Amdahl đã đưa ra luật về giới hạn khả năng tăng tốc nhưsau:
Luật Amdahl: Giả sử s là phần thao tác tính toán cần phải thực hiện tuần tự,
trong đó 0 s 1 Khả năng tăng tốc tối đa Sp đạt được bởi một máy tính songsong có P bộ xử lý thực hiện tính toán là :
1.1.4.3 Tính qui mô
Một giải thuật có tính qui mô nếu mức độ song song ít nhất cũng gia tăngtuyến tính theo kích thước bài toán Một kiến trúc có tính qui mô nếu nó tiếp tụcmang lại cùng hiệu năng cho từng bộ xử lý, mặc dù các bộ xử lý được dùng trongbài toán kích thước lớn hơn, khi số lượng bộ xử lý gia tăng Tính qui mô về thuậttoán và kiến trúc là quan trọng, bởi vì từ đó mới có thể cho phép người sử dụng giảiquyết các bài toán lớn hơn trong số lượng thời gian như nhau bằng cách mua mộtmáy tính song song với nhiều bộ xử lý hơn
Việc đánh giá tính qui mô của giải thuật thường thông qua một tiêu chuẩnphụ thuộc vào tính hiệu quả Nếu như giải thuật có thể duy trì hiệu quả là một hằng
số hoặc ít nhất là giới hạn dưới > 0 khi số bộ xử lý gia tăng do kích thước bài toántăng lên Theo công thức tính hiệu quả:
Trang 27
14
Các giải thuật song song theo dữ liệu thì linh động hơn các giải thuật songsong theo chức năng, bởi vì mức độ song song chức năng thường là một hằng số,độc lập với kích thước bài toán, trong khi mức độ song song dữ liệu là một hàmtăng theo kích thước bài toán
Việc tìm hiểu các cơ sở đánh giá giải thuật giúp cho ta có thể xem xét lại cácthiết kế đưa ra Chọn lựa giải thuật tốt cho mô hình máy tính cụ thể là một bài toánkhông đơn giản Những đánh giá trên mới chỉ mang tính lý thuyết, nhưng là cơ sởquan trọng khi ta thiết kế giải thuật song song
1.2 THIẾT KẾ GIẢI THUẬT SONG SONG(7)
Trong phần này đề cập đến phương pháp thiết kế giải thuật song song cho bàitoán, quá trình thiết kế giải thuật thật sự không dễ dàng để có thể rút gọn thành mộtcông thức đơn giản như công thức giải hệ phương trình bậc hai, giải hệ phươngtrình tuyến tính, … mà yêu cầu có sự sắp xếp tư duy sáng tạo Mục đích của phầnnày đưa ra một khung thiết kế, một sự đánh giá mang tính toán học nhằm giảm bớtnhững chi phí do phải quay lui lại sau khi lựa chọn phương án không hợp lý
1.2.1 Nguyên lý thiết kế giải thuật song song
Khi xử lý song song chúng ta phải xét đến kiến trúc máy tính và thuật toánsong song Những thuật toán mà trong đó có một số thao tác có thể thực hiện đồngthời được gọi là thuật toán song song
Khi thiết kế thuật toán song song, chúng ta cần phải thực hiện:
- Phân chia dữ liệu cho các tác vụ
- Chỉ ra cách truy cập và chia sẻ dữ liệu
- Phân các tác vụ cho các tiến trình (cho bộ xử lý)
- Các tiến trình được đồng bộ ra sao
Khi thiết kế thuật toán song song, ta cần tuân thủ 5 nguyên lý sau:
Trang 28
15
Các nguyên lý lập lịch: mục đích là giảm tối thiểu các bộ xử lý sử dụng trongthuậ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)
- 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ộtdãy các thao tác {T1, T2, , Tn}, trong đó Ti+1 thực hiện sau khi Ti kếtthúc
- 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
- Nguyên lý đồ thị phụ thuộc dữ liệu: phân tích mối quan hệ dữ liệu trong tínhtoán để xây dựng đồ thị phụ thuộc dữ liệu và dựa vào đó để xây dựng thuật toánsong song
- Nguyên lý điều kiện tranh đua: Nếu hai tiến trình cùng muốn truy cập vàocù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 ta còn phảichú ý đến kiến trúc của hệ thống tính toán: Kiến trúc tính toán nào sẽ phù hợp vớibài toán? Những bài toán loại nào sẽ xử lý hiệu quả trong kiến trúc song song chotrước?
Ví dụ: Những máy tính kiểu SIMD không thích hợp để giải các bài tóan, trong
đó có nhiều tiến trình dị bộ
Ngược lại, máy tính kiểu MIMD lại không hiệu quả để giải quyết những bài
toán trong đó nhiều tiến trình cần phải đồng bộ
1.2.2 Thiết kế giải thuật song song bằng phân rã phục thuộc dữ liệu
Quay trở lại vấn đề đặt ra ban đầu, muốn tận dụng được khả năng tính toánsong song trên nhiều máy tính, điều quan trọng nhất là tìm được thuật toán thíchhợp Nhiều khi sự phụ thuộc tính toán “giá trị sau được tính dựa vào giá trị trước
Trang 29
16
-đó” có vẻ rất “bền”, nhưng ta vẫn “tách” nó ra để chia cho nhiều máy cùng thựchiện Sau đây là một ví dụ minh họa:
Xét bài toán sau: Cho biết a0 và αk, βkvới k =1,2,3 ,n; trong đó n 2m Tính
an = αnan-1 βn (1) với giả thiết số bộ xử lý không giới hạn
Việc giá trị an phải tính toán qua an1 khiến chúng ta có cảm giác là việc tìm ragiá trị an nhất định phải thực hiện tuần tự qua n bước Tức là phải mất đúng n = 2m
bước tính, cho dù ta có thể huy động rất nhiều máy cùng tính đi chăng nữa Tuynhiên sự việc lại không hẳn như vậy, ta chỉ cần có m bước tính mà thôi Để thấyđược điều này chúng ta thực hiện phép biến đổi sau:
Tm = 2 + Tm-1 ( qua 2 bước tính a m
2 và a2m 1 )
Từ đây suy ra: Tm = 2m Từ đây kết luận, chúng ta không cần 2m bước tính, mà chỉdùng 2m bước tính
1.2.3 Giải thuật 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
Trang 30
17
-nhau Quá trình này lặp lại cho đến khí không còn cặp nào không thoả mãn thìdừng
1.2.3.1 Giải thuật sắp xếp tuần tự
Sắp xếp mảng a[n] theo thứ tự tăng dần - nổi bọt –buble sort
}
1.2.3.2 Giải thuật 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ắpxếp mảng a[n] Hệ thống được chia thành hai pha: pha chẵn và pha lẻ Pha chẵn: cáctiến trình được đánh số chẵn so 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ụ: Cho n = 8 và dãy số ban đầu là 6, 2, 8, 5, 1, 3, 4, 7
Trang 31Ở pha thứ 6 và pha thứ 7, không có cặp nào cần đổi chỗ nên thuật toán có thể dừng
và cho kết quả dãy đã sắp xếp
Giả thiết dữ liệu được lưu trữ ở 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:
Thuật toán này có độ phức tạp O(n)
1.2.4 Thiết kế giải thuật song song bằng phương pháp chia để trị
Tính số PI trên nhiều máy
Trang 32số lượng điểm reo sẽ dần tiến tới tỷ lệ của diện tích hình tròn so với hình vuông.Một thí nghiệm như vậy có thể thực hiện được trên máy tính Ở đấy mỗi điểm đượcbiểu diễn bởi hai số có tọa độ (x, y) của nó.
Trình “reo” 20000 điểm, ứng với vòng lặp for = k; k < n; k++, mỗi lần reo làmột lần ta có được 2 số (x, y) Lệnh rand() cho ta một số nguyên trong khoảng[0 RAND_MAX] Như vậy điểm (x, y) có tính chất 0 ≤ x, y ≤ 1 là điểm nằm tronggóc ¼ của hình vuông cạnh bằng 2, ngoại tiếp hình tròn đơn vị Để kiểm tra điểm(x,y) có đúng là nằm trong hình tròn đơn vị không, ta kiểm tra x2 + y 2 ≤ 1
Sau đây là chương trình “reo” điểm, qua đây tính được giá trị số 3.1
Trang 33“worker”, người làm thuê, phải được gửi đến cho một người chúng ta gọi là
“server”, tức ông chủ
Các worker cần phải kết nối với server để kết quả có thể gửi tới được Việcgửi-nhận thật ra là không đơn giản Ví dụ như worker (A) và (B) cùng gửi kết quảcho server thì server biết nhận của ai trước (A) hay (B)? Hoặc là nếu server đangbận xử lý việc khác, mà các worker gửi kết quả tới, thì làm sao mà nó nhận được?Vậy là phải có một môi trường đảm bảo cho việc gửi nhận này được an toàn Môitrường mà chúng ta đề cập đến trong các bài giảng sau là MPI
Trong mô hình, worker tiến hành “reo” và đếm các điểm rơi vào trong hìnhtròn Sau đó chúng gửi kết quả về cho server bằng lệnh send() Số lần mà servernhận dữ liệu vào – tức là số lần phải dùng đến lệnh recieve() – chính bằng số lượngcác worker
1.2.5 Thiết kế giải thuật song song cho bài toán tính tổng
Phát biểu S=x1+x2+…+xn (n chẵn)
Tuần tự:
Trang 35float x,y;
unsigned int k,n, c2=0;
n =10000;
for (k=0; k<=n;k++){
x= (float) rand()/RAND_MAX;y= (float) rand()/RAND_MAX;
if (x*x+y*y<=1) c2++;
}send(c2);
Trang 36
23
-}
1.2.6 Song song hóa một bài toán tuần tự
Vẫn là mục tiêu tính giá trị số π nhưng thông qua giới hạn =
ứng với các giá trị k chia hết cho 3; máy thứ hai ứng với các giá trị k chia cho
3 dư 1; và máy thứ ba ứng với các giá trị k chia cho 3 dư 2
Chi tiết như sau:
1
6 1
1 3
1
1 1
4 1
1 1
1
5 1
1 2
1
1 4
Sau đây là trình minh họa cho ý tưởng trên Lệnh thông báo kết quả cho nhau
là reduce() Giá trị của và số lượng máy được thông báo khi chạy trình
1.2.7 Mẫu thiết kế giải thuật song song bằng phương pháp cây nhị phân