ĐÁNH GIÁ HIỆU NĂNG TÍNH TÍCH 2 MA TRẬN DẦY ĐẶC (DENSE) SỬ DỤNG MPI

29 6 0
ĐÁNH GIÁ HIỆU NĂNG TÍNH TÍCH 2 MA TRẬN DẦY ĐẶC (DENSE) SỬ DỤNG MPI

Đ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

Sự phát triển và mở rộng phạm vi ứng dụng của công nghệ thông tin luôn gặp phải hai thách thức lớn đó là không gian nhớ và tốc độ xử lí của máy tính. Một số bài toán do thực tiễn và nghiên cứu lý thuyết đặt ra đòi hỏi phải xử lý nhanh trên một cơ sở dữ liệu đồ sộ, đặc biệt là trong các lĩnh vực trí tuệ nhân tạo, nhận dạng, xử lí ảnh, điều khiển tự động, mô phỏng, các bài toán dự báo,... mà các phương pháp và công cụ tính toán truyền thống không thể đáp ứng được. Trong những trường hợp ấy, ta có thể tìm cách phân rã bài toán thành những bài toán có kích thước và quy mô dữ liệu nhỏ hơn. Tuy nhiên điều đó không phải bao giờ cũng có thể thực hiện. Xử lí song song (parallel processing) là một trong những giải pháp giúp ta có thể xử lý tình huống nêu trên. Hiện nay có rất nhiều chuẩn hỗ trợ lập trình song song như MPI hỗ trợ lập trình song song trên bộ nhớ phân tán, OpenMP hỗ trợ lập trình trên bộ nhớ chia sẽ chung, Pthread hỗ trợ lập trình luồng,... Bài báo này giới thiệu những kiến thức cơ bản về tính toán song song và lập trình song song. Ngoài ra còn trình bày khái niệm về MPI (Message Passing Interface), những nguyên tắc lập trình song song với MPI. Sử dụng thư viện hàm MPI lập trình minh họa bài toán nhân hai ma trận bằng thuật toán Cannon. Rút ra những kết luận về thời gian chạy chương trình bằng giải thuật tuần tự và bằng giải thuật song song. Do kiến thức, kinh nghiệm còn hạn chế nên bài báo cáo có thể còn có một số lỗi sai, chương trình có thể không đúng trong một vài trường hợp, mong thầy và các bạn góp ý, giúp đỡ để chúng em hoàn thiện hơn.

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI KHOA CÔNG NGHỆ THƠNG TIN ======***====== BÁO CÁO BTL THUỘC HỌC PHẦN: TÍNH TỐN HIỆU NĂNG CAO ĐÁNH GIÁ HIỆU NĂNG TÍNH TÍCH MA TRẬN DẦY ĐẶC (DENSE) SỬ DỤNG MPI Giáo viên hướng dẫn: TS Hà Mạnh Đào Nhóm sinh viên thực hiện: 1, Trịnh Thế Khánh Mã SV: 2021602271 2, Lê Tuấn Anh Mã SV: 2021601643 3, Nguyễn Mỹ Hạnh Mã SV: 2021600647 Mã Lớp: 20231IT6069001 Nhóm: Hà nội, Năm 2023 LỜI CẢM ƠN Trước tiên, chúng em muốn gửi lời tri ân chân thành đến TS Hà Mạnh Đào, với lịng biết ơn sâu sắc kiến thức quý báu mà thầy truyền đạt cho chúng em tận tâm việc hướng dẫn chúng em hoàn thành đề tài Sự giúp đỡ đồng hành thầy đóng vai trị vơ quan trọng trình nghiên cứu chúng em Chúng em mong muốn nhận ý kiến đóng góp từ thầy để hồn thiện đề tài chúng em Sự phản hồi góp ý từ thầy giúp chúng em nắm bắt khía cạnh cần cải thiện phát triển thêm ý tưởng Chúng em trân trọng đóng góp mong học hỏi thêm từ chuyên môn kinh nghiệm thầy Một lần nữa, chúng em xin chân thành cảm ơn TS Hà Mạnh Đào tận tâm kiến thức mà thầy dành cho chúng em Sự hướng dẫn thầy thúc đẩy chúng em tiến trở thành người học viên tự tin Chúng em biết ơn ln mang lịng tri ân Nhóm chúng em xin chân thành cảm ơn! Tính tốn hiệu cao LỜI MỞ ĐẦU Sự phát triển mở rộng phạm vi ứng dụng công nghệ thông tin gặp phải hai thách thức lớn khơng gian nhớ tốc độ xử lí máy tính Một số toán thực tiễn nghiên cứu lý thuyết đặt đòi hỏi phải xử lý nhanh sở liệu đồ sộ, đặc biệt lĩnh vực trí tuệ nhân tạo, nhận dạng, xử lí ảnh, điều khiển tự động, mơ phỏng, toán dự báo, mà phương pháp cơng cụ tính tốn truyền thống khơng thể đáp ứng Trong trường hợp ấy, ta tìm cách phân rã tốn thành tốn có kích thước quy mơ liệu nhỏ Tuy nhiên điều khơng phải thực Xử lí song song (parallel processing) giải pháp giúp ta xử lý tình nêu Hiện có nhiều chuẩn hỗ trợ lập trình song song MPI hỗ trợ lập trình song song nhớ phân tán, OpenMP hỗ trợ lập trình nhớ chia chung, Pthread hỗ trợ lập trình luồng, Bài báo giới thiệu kiến thức tính tốn song song lập trình song song Ngồi cịn trình bày khái niệm MPI (Message Passing Interface), nguyên tắc lập trình song song với MPI Sử dụng thư viện hàm MPI lập trình minh họa toán nhân hai ma trận thuật toán Cannon Rút kết luận thời gian chạy chương trình giải thuật giải thuật song song Do kiến thức, kinh nghiệm hạn chế nên báo cáo cịn có số lỗi sai, chương trình khơng vài trường hợp, mong thầy bạn góp ý, giúp đỡ để chúng em hồn thiện Tính tốn hiệu cao MỤC LỤC Chương Tổng quan mơ hình lập trình song song với MPI 1.1 Tính tốn song song 1.1.1 Tính tốn song song gì? 1.1.2 Tại phải tính tốn song song? 1.1.3 Các thành phần liên quan đến tính tốn song song 1.1.4 Nguyên lý thiết kế thuật toán song song 1.2 Giới thiệu MPI .8 1.2.1 Khái niệm MPI 1.2.2 Mơ hình lập trình truyền thông điệp (message passing) 1.2.3 Các giao thức MPI 1.2.4 Nguyên tắc lập trình MPI 10 1.2.5 Các hàm MPI thường dùng 10 Chương Phương pháp giải toán 12 2.1 Bài toán nhân ma trận dày đặc (dense) thuật toán Cannon .12 2.1.1 Ma trận dày đặc (dense) gì? 12 2.1.2 Phép nhân ma trận 12 2.1.3 Thiết kế thuật toán song song nhân ma trận dày đặc (dense) 12 2.2 Tính tích ma trận thuật toán thuật toán song song 16 2.2.1 Thuật toán .16 2.2.2 Thuật toán song song 17 2.3 Một số vấn đề hiệu 24 Chương Thực nghiệm kết 26 3.1 Cấu hình thiết bị 26 3.2 Kết thực 27 3.3 Kết luận .28 Tài liệu tham khảo .29 Tính tốn hiệu cao Chương Tổng quan mơ hình lập trình song song với MPI 1.1 Tính tốn song song 1.1.1 Tính tốn song song gì? Như thấy phần mềm phổ biến ngày hầu hết viết sở tính tốn Các phần mềm thường thực máy tính đơn với xử lý Vấn đề giải thông qua chuỗi lệnh thực xử lý Tại thời điểm có lệnh thực Tính tốn song song đời cải tiến tính tốn Nó giải vấn đề dựa thực thi đồng thời 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 đơn với nhiều xử lý - Nhiều máy tính nối lại với thành mạng máy tính - Kết hợp hai loại Tính tốn song song thường dùng để giải vấn đề phức tạp u cầu thời gian tính tốn lớn làm việc với khối liệu lớn tốn dự báo thời tiết, mơ tai nạn xe hơi, xây dựng mơ hình thương mại vấn đề khoa học khai phá liệu , trí tuệ nhân tạo, an tồn liệu… 1.1.2 Tại phải tính tốn song song? Việc tính tốn song song cần thiết Ngoài hai nguyên nhân dùng để tính tốn tốn u cầu thời gian tính tốn lớn khối lượng liệu lớn cịn có ngun nhân khác để sử dụng tài nguyên máy khác mạng LAN thơng qua mạng internet, sử dụng nhiều tài ngun tính tốn nhỏ kết hợp lại tạo nên siêu máy tính Do giới hạn không gian lưu trữ nhớ máy Tính tốn hiệu cao đơn để giải vấn đề lớn việc sử dụng nhiều nhớ nhiều máy tính hữu hiệu trường hợp Giới hạn tính tốn bao gồm hai nguyên nhân thực tế nguyên nhân vật lý Để xây dựng nên máy tính tốc độ cao gặp nhiều hạn chế: - Về tốc độ truyền liệu: Tốc độ truyền máy tính phụ thuộc trực tiếp vào di chuyển liệu phần cứng Cho nên việc tăng tốc độ thực phải chủ yếu vào yếu tố tính tốn - Về kích cỡ: Công nghệ chế tạo xử lý cho phép gắn nhiều bóng bán dẫn chip Tuy nhiên việc làm làm tăng kích thước xử lý - Về thương mại: Việc tạo xử lý tốc độ xử lý cao tốn Sử dụng nhiều xử lý nhỏ đạt hiệu tương tự mà lại tốn 1.1.3 Các thành phần liên quan đến tính tốn song song - Kiến trúc máy tính song song - Phần mềm hệ thống - Giải thuật song song - Ngơn ngữ lập trình song song 1.1.4 Ngun lý thiết kế thuật toán song song Khi muốn thực việc xử lí song song ta phải xét kiến trúc máy tính thuật tốn song song Để thiết kế thuật toán song song cần phải thực hiện: - Phân chia liệu cho tác vụ - Chỉ cách truy cập chia sẻ liệu - Phân tác vụ cho tiến trình (bộ xử lí) - Các tiến trình đồng Tính tốn hiệu cao Khi thiết kế thuật tốn song song sử dụng năm ngun lí thiết kế thuật tốn song song: - Nguyên lý lập lịch: mục đích giảm tối thiểu xử lí sử dụng thuật tốn cho thời gian tính tốn khơng tăng (xét theo khía cạnh độ phức tạp) - Nguyên lý hình ống: Nguyên lý áp dụng toán xuất dãy thao tác {T1, T2, , Tn}, Ti+1 thực sau Ti kết thúc - Nguyên lý chia để trị: Chia toán thành phần nhỏ tương đối độc lập với giải chúng cách song song - Nguyên lý đồ thị phụ thuộc liệu: Phân tích mối quan hệ liệu tính toán để xây dựng đồ thị phụ thuộc liệu dựa vào để xây dựng thuật tốn song song - Nguyên lý điều kiện tương tranh: Nếu hai tiến trình muốn truy cập vào mục liệu chia sẻ chúng phải tương tranh với nhau, nghĩa chúng cản trở lẫn Ngoài nguyên lý nêu trên, thiết kế thuật tốn song song ta cịn phải ý đến kiến trúc hệ thống tính tốn Khi chuyển thuật toán sang thuật toán song song chuyển thuật tốn song song thích hợp với kiến trúc có Cần xác định yêu cầu sau: - Kiến trúc tính tốn phù hợp với toán? - Những toán loại xử lý hiệu kiến trúc song song cho trước ? Tính tốn hiệu cao 1.2 Giới thiệu MPI 1.2.1 Khái niệm MPI Là viết tắt Message Passing Interface, dạng giao thức kết nối máy tính Nó nằm chuẩn “de facto” cho kết nối nút chạy chương trình song song nhớ phân tán Tập MPI thi hành bao gồm thư viện thủ tục cho gọi từ chương trình Fortran, C, C++ hay Ada MPI đời mục đích dành cho hệ thống máy tính có nhớ phân tán Tuy nhiên MPI triển khai hệ thống máy tính có nhớ chia sẻ Lợi MPI so với thư viện cũ vừa thuận tiện (vì MPI thực thi cho hầu hết kiến trúc nhớ phân phối) vừa nhanh (vì thủ tục tối ưu hóa cho phần cứng mà chạy) Thường so sánh với PVM (Parallel Virtual Machine) kết hợp để tạo thành PVM_MPI 1.2.2 Mơ hình lập trình truyền thơng điệp (message passing) Trong khoa học máy tính, truyền thông điệp (tiếng Anh: message passing) kỹ thuật để gọi hành vi (ví dụ chạy chương trình) máy tính Chương trình gọi gửi thơng điệp tới q trình (có thể tác nhân hay đối tượng) dựa vào quy trình với sở hạ tầng hỗ trợ để chọn gọi mã thực để chạy Truyền thơng điệp khác với lập trình thơng thường chỗ q trình, chương trình con, hay hàm gọi trực tiếp tên Truyền thông điệp chìa khóa cho số mơ hình lập trình tương tranh hướng đối tượng Truyền thông điệp sử dụng phổ biến phần mềm máy tính đại Nó sử dụng cách để đối tượng tạo nên chương trình hoạt động với phương tiện để đối tượng hệ thống chạy Tính tốn hiệu cao máy tính khác (ví dụ Internet) tương tác Truyền thơng điệp dược thực theo nhiều chế khác nhau, bao gồm kênh Mơ hình lập trình truyền thơng điệp phát triển dựa ý tưởng lập trình song song Trong tốn chia thành nhiều node(phần) nhỏ, node giải processor với nhớ riêng Các nodes giao tiếp với qua nhiều mạng cục thông qua message để giải vấn đề toán Các nodes truyền thông tin cho thông qua link (kết nối) gọi external channels (kênh ngồi) Hình 1: Mơ hình truyền thơng điệp Ví dụ: tính y=(a+b)×(c+d) Tính processor phải thơng qua bước Nhưng tính processor cần thơng qua bước Bước tính Cơng việc Đọc a, b Tính a+b Lưu kết Đọc c, d Tính c+d Tính (a+b)*(c+d) Ghi kết Kết thúc Bước tính Cơng việc Processor Đọc a, b Tính a+b Gửi kết cho P2 Kết thúc Công việc Processor Đọc c, d Tính c+d Lưu kết Nhận kết từ P1 Tính (a+b)*(c+d) Ghi kết Kết thúc Tính tốn hiệu cao 1.2.3 Các giao thức MPI Giao thức Point to Point: giao thức đơn giản truyền thông điệp Một thông điệp truyền từ processor tới processor khác hai processor biết thơng tin thơng điệp Khi Processor thực giao thức truyền tin (send) Prosessor khác phải có giao thức nhận tin (receive) tương ứng Giao thức Collective: giao thức cho phép nhiều processor trao đổi thơng điệp 1.2.4 Ngun tắc lập trình MPI Tất chương trình sử dụng MPI phải bắt đầu với hàm MPI_Init() kết thúc với hàm MPI_Finalize() MPI_Init gọi lần tồn chương trình 1.2.5 10 Các hàm MPI thường dùng Tên hàm Ý nghĩa MPI_Init() Khởi tạo môi trường thực thi MPI, hàm phải gọi trước tất hàm MPI khác, gọi lần MPI_Finalize() Dùng để kết thúc môi trường thực thi MPI Hàm phải gọi cuối tất hàm MPI MPI_Comm_size( MPI Xác định số lượng tiến trình tham gia vào _COMM_WORLD, giao tiếp, thơng thường, dùng &size) giao tiếp MPI_COMM_WORLD giao tiếp xây dựng sẵn, bao gồm tất tiến trình tham gia vào chương trình MPI_Comm_rank( MPI Xác định thứ tự tiến trình giao _COMM_WORLD, tiếp Lúc ban đầu tiến trình gán cho &rank) số thứ tự từ tới n-1 giao tiếp Tính tốn hiệu cao Hình 3: Tách ma trận thành khối Căn chỉnh ma trận: 15 Hình 4: Căn chỉnh ma trận Mỗi khối gửi đến quy trình phần phụ chép từ khối nhân với kết thêm vào tiểu khối C Tính tốn hiệu cao Hình 5: Nhân ma trận Các khối A đẩy sang trái bước khối B cuộn lên bước 16 Hình 6: Đổi vị trí Lặp lại bước & √p lần: Tính tốn hiệu cao Hình 7: Lặp lại bước 3&4 17 2.2 Tính tích ma trận thuật toán thuật toán song song 2.2.1 Thuật toán // Thuật toán song song Cannon tính tích ma trận dày đặc (Dense) #include #include using namespace std; #define N 500 clock_t tstart, tend; int main() { static int a[N][N]; static int b[N][N]; static int c[N][N]; for (int i = 0; i < N; i++) { //let's make fist matrix for (int j = 0; j < N; j++) { Tính tốn hiệu cao a[i][j] = (int)rand() % 100 + 1; b[i][j] = (int)rand() % 100 + 1; c[i][j] = 0; } } tstart = clock(); int i, j, k; for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { int tt = 0; for (k = 0; k < N; k++) { tt = tt + (a[i][k] * b[k][j]); } c[i][j] = tt; } } /*for(i=0;i

Ngày đăng: 12/01/2024, 11:22

Tài liệu cùng người dùng

Tài liệu liên quan