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
Nguyễn Hữu Hoàng Thọ Khóa luận tốt nghiệp 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ọ Nguyễn Hữu Hoàng Thọ Khóa luận tốt nghiệp 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 2.3 Sử dụng MPI trên Linux và Windows 50 Nguyễn Hữu Hoàng Thọ Khóa luận tốt nghiệp 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 BXL Bộ xử lý MIMD Đa lệnh đa dữ liệu Multiple instruction multiple data MPI Giao diện truyền thông điệp Message Passing Interface OPENMP Open MultiProcessing SIMD Đơn lệnh đa dữ liệu Single instruction multiple data SMP Đa xử lý đối xứng Symmetric MultiProcessor UMA Truy cập bộ nhớ đồng đều Uniform Memory Access CC-SMP Cache coheren-Symmetric MultiProcessor Nguyễn Hữu Hoàng Thọ Khóa luận tốt nghiệp 1 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. Nguyễn Hữu Hoàng Thọ Khóa luận tốt nghiệp 2 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) Nguyễn Hữu Hoàng Thọ Khóa luận tốt nghiệp 3 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 độ Nguyễn Hữu Hoàng Thọ Khóa luận tốt nghiệp 4 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. Kiến trúc bộ nhớ phân tán. Kiến trúc bộ nhớ lai. 1.2.1 Phân loại dựa trên sự tương tác giữa các BXL 1.2.1.1 Chia sẻ bộ nhớ chung Hình 1.1 Máy tính song song chia sẻ bộ nhớ dùng chung Máy tính loại này sử dụng bộ nhớ chia sẻ toàn cục (global shared memory) mà tất 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 Nguyễn Hữu Hoàng Thọ Khóa luận tốt nghiệp 5 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. BXL BXL BXL BXL MEMORY BXL Memory Memory BXL Đường kết nối các SMP Nguyễn Hữu Hoàng Thọ Khóa luận tốt nghiệp 6 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 đến vấn đề tranh chấp BUS. Hình 1.4 Máy tính có bộ nhớ phân tán Memory BXL BXL Memory Memory BXL Memory BXL Nguyễn Hữu Hoàng Thọ Khóa luận tốt nghiệp 7 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) Trong máy tính SIMD, tất cả các phần tử xử lý đều được điều hành bởi [...]... for(x=start+d;x . 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. 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ô. MPI cơ bản 47 2.3 Sử dụng MPI trên Linux và Windows 50 Nguyễn Hữu Hoàng Thọ Khóa luận tốt nghiệp 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