ĐÁNH GIÁ HIỆU NĂNG NHÂN MA TRẬN VỚI THUẬT TOÁN CANNON SỬ DỤNG OPENMP

23 9 0
ĐÁNH GIÁ HIỆU NĂNG NHÂN MA TRẬN VỚI THUẬT TOÁN CANNON SỬ DỤNG OPENMP

Đ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

Khoanh vùng giữa hiện thực và khả năng, tính toán hiệu năng cao không chỉ là một khái niệm, mà là cột mốc dẫn đường cho sự tiến bộ và sự phát triển trong thế giới công nghệ ngày nay. Được hình thành từ việc tận dụng tối đa tài nguyên tính toán, hiệu năng cao không chỉ đòi hỏi sự tinh tế trong thiết kế mà còn yêu cầu sự kết hợp tuyệt vời giữa kiến thức lý thuyết và ứng dụng thực tế. Nhìn rộng hơn, môn tính toán hiệu năng cao không chỉ là về việc tối ưu hóa thuật toán hay tăng cường sức mạnh tính toán. Đó còn là việc thấu hiểu sâu sắc về cách các yếu tố kỹ thuật, từ cấu trúc dữ liệu đến cấu trúc máy tính, hòa quyện vào nhau để tạo ra những giải pháp đột phá, từ ứng dụng di động đến các hệ thống phức tạp đòi hỏi sự xử lý cực kỳ nhanh chóng. Tính toán hiệu năng cao không chỉ tập trung vào việc làm cho mọi thứ chạy nhanh hơn, mà còn là việc định hình lại cách chúng ta nghĩ về khả năng và giới hạn của công nghệ. Qua sự tiến bộ không ngừng, chúng ta có thể đạt được những tiến bộ kỳ diệu mà trước đây dường như không thể. Đây là cuộc hành trình không chỉ tạo ra những sản phẩm và dịch vụ tuyệt vời, mà còn định hình lại cả nền văn hóa công nghiệp và khoa học kỹ thuật. Với những cơ hội và thách thức không ngừng, môn tính toán hiệu năng cao là hành trình không chỉ đầy thú vị mà còn đầy hứa hẹn, mở ra cánh cửa cho sự sáng tạo và đổi mới vô tận.

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI KHOA CÔNG NGHỆ THƠNG TIN BÁO CÁO BÀI TẬP LỚN Học Phần: TÍNH TOÁN HIỆU NĂNG CAO (HPC) ĐỀ TÀI: ĐÁNH GIÁ HIỆU NĂNG NHÂN MA TRẬN VỚI THUẬT TOÁN CANNON SỬ DỤNG OPENMP Giảng viên hướng dẫn Lớp : TS Hà Mạnh Đào : 20231IT6069001 Nhóm thực : Nhóm 16 Nguyễn Hưng Thịnh - 2021603670 Lữ Sơn Trường - 2021601393 Lê Trần Anh Tú - 2021601281 DANH MỤC DANH MỤC DANH MỤC HÌNH ẢNH .5 LỜI MỞ ĐẦU CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI 1.1 Mô tả mục tiêu tập lớn 1.2 Giới thiệu nhân ma trận ứng dụng .8 1.3 Giới thiệu OpenMP 1.4 Giới thiệu thuật toán Cannon .13 CHƯƠNG 2: Thiết kế thuật toán Cannon 14 2.1 Mô tả chi tiết thuật toán Cannon 14 2.2 Thiết kế mã nguồn thuật toán Cannon 15 2.2.1 Thuật toán Cannon không sử dụng OpenMp .15 2.2.2 Thuật toán Cannon sử dụng OpenMP 17 2.3 Giải thích tác dụng OpenMP mã nguồn 19 2.3.1 Các phân chia công việc 19 2.3.2 Tối ưu hoá hiệu suất .19 CHƯƠNG 3: THỰC NGHIỆM 20 3.1 Môi trường thực nghiệm toán 20 3.1.1 Môi trường thực nghiệm .20 3.1.2 Bài toán 20 3.2 Thực thực nghiệm kết luận .21 3.2.1 Thực nghiệm với mã nguồn không sử dụng OpenMP 21 3.2.2 Thực nghiệm với mã nguồn có sử dụng OpenMP 22 3.3 Kết luận .23 LỜI MỞ ĐẦU Khoanh vùng thực khả năng, tính tốn hiệu cao khơng khái niệm, mà cột mốc dẫn đường cho tiến phát triển giới cơng nghệ ngày Được hình thành từ việc tận dụng tối đa tài ngun tính tốn, hiệu cao khơng địi hỏi tinh tế thiết kế mà yêu cầu kết hợp tuyệt vời kiến thức lý thuyết ứng dụng thực tế Nhìn rộng hơn, mơn tính tốn hiệu cao khơng việc tối ưu hóa thuật tốn hay tăng cường sức mạnh tính tốn Đó cịn việc thấu hiểu sâu sắc cách yếu tố kỹ thuật, từ cấu trúc liệu đến cấu trúc máy tính, hòa quyện vào để tạo giải pháp đột phá, từ ứng dụng di động đến hệ thống phức tạp đòi hỏi xử lý nhanh chóng Tính tốn hiệu cao khơng tập trung vào việc làm cho thứ chạy nhanh hơn, mà cịn việc định hình lại cách nghĩ khả giới hạn công nghệ Qua tiến khơng ngừng, đạt tiến kỳ diệu mà trước dường khơng thể Đây hành trình khơng tạo sản phẩm dịch vụ tuyệt vời, mà cịn định hình lại văn hóa công nghiệp khoa học kỹ thuật Với hội thách thức khơng ngừng, mơn tính tốn hiệu cao hành trình khơng đầy thú vị mà đầy hứa hẹn, mở cánh cửa cho sáng tạo đổi vô tận CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI 1.1 Mô tả mục tiêu tập lớn Bài tập lớn nhằm tập trung vào việc nghiên cứu, thử nghiệm đánh giá hiệu thuật toán nhân ma trận Cannon sử dụng cơng nghệ song song hóa OpenMP Mục tiêu hiểu rõ cách thuật toán Cannon hoạt động, áp dụng hiệu OpenMP để tối ưu hóa việc nhân ma trận đánh giá hiệu suất thuật toán tảng đa lõi - Hiểu Rõ Thuật Toán Cannon: Trước hết, thâm nhập vào cách thuật toán Cannon thực nhân ma trận Bao gồm trình chia ma trận thành khối, phân phối công việc cho lõi xử lý, cách thức di chuyển khối ma trận để tận dụng song song hóa việc tính tốn - Áp Dụng OpenMP vào Thuật Toán Cannon: Sau nắm vững thuật toán, sâu vào việc áp dụng công nghệ song song hóa OpenMP vào thuật tốn Cannon Chia nhỏ công việc quản lý luồng để tận dụng hiệu suất tính tốn hệ thống đa lõi - Đo Đạc Phân Tích Hiệu Suất: Bước thực thử nghiệm liệu kiểm tra ma trận thử nghiệm để đo đạc thời gian thực tài nguyên sử dụng thuật tốn Phân tích hiệu suất kích thước ma trận loại liệu khác để đánh giá tính linh hoạt hiệu thuật toán - So Sánh Đánh Giá Kết Quả: Kết thu từ thực nghiệm so sánh phân tích để đưa nhận xét hiệu suất thuật tốn Cannon sử dụng OpenMP Từ đó, tìm điểm mạnh, điểm yếu cải thiện tiềm thuật toán trường hợp liệu khác - Tối Ưu Hóa Đề Xuất Cải Tiến: Cuối cùng, việc tổng hợp kết thông tin thu được, đề xuất cải tiến tối ưu hóa thuật toán để nâng cao hiệu suất tận dụng tối đa tiềm hệ thống đa lõi - Mục Tiêu Tổng Quát: Bằng cách hoàn thành tập này, mục tiêu cuối hiểu rõ cách thức hoạt động hiệu suất thuật tốn Cannon áp dụng cơng nghệ song song hóa OpenMP Đồng thời, từ hiểu biết kết thu được, có sở để cải thiện tối ưu hóa thuật tốn để phục vụ cho ứng dụng nhu cầu tính tốn thực tế 1.2 Giới thiệu nhân ma trận ứng dụng Nhân ma trận phép toán quan trọng đại số tuyến tính Quá trình nhân ma trận thực việc kết hợp giá trị từ hàng ma trận với giá trị từ cột ma trận thứ hai để tạo ma trận Công Thức Nhân Ma Trận: Giả sử có hai ma trận A B với kích thước m x n n x p, kết việc nhân hai ma trận tạo ma trận C có kích thước m x p Q trình nhân ma trận thực cách nhân phần tử hàng ma trận A với phần tử cột ma trận B tương ứng tổng hợp kết Ví dụ: Ma trận A kích thước 2x3: |123| |456| Ma trận B kích thước 3x2: |78| | 10 | | 11 12 | Kết việc nhân hai ma trận A B tạo ma trận C kích thước 2x2: | 58 64 | | 139 154 | Ứng Dụng Nhân Ma Trận: - Xử Lý Ảnh Đồ Họa: Trong xử lý ảnh đồ họa máy tính, việc nhân ma trận quan trọng để thực biến đổi hình học, chuyển đổi màu sắc hiệu chỉnh ảnh - Mạng Nơ-ron Học Máy: Trong lĩnh vực học máy mạng nơ-ron, việc nhân ma trận thường xuyên sử dụng để thực phép tính q trình huấn luyện mơ hình dự đốn - Tính Tốn Khoa Học Kỹ Thuật: Trong ứng dụng tính tốn khoa học kỹ thuật, việc nhân ma trận thường sử dụng để giải phương trình đạo hàm riêng, giải hệ phương trình tuyến tính, nhiều ứng dụng tính tốn khác - Xử Lý Dữ Liệu Tính Tốn Song Song: Trong ứng dụng xử lý liệu lớn tính tốn song song, việc nhân ma trận tối ưu hóa để thực nhiều lõi CPU GPU Việc nhân ma trận không phép tốn mà cịn yếu tố quan trọng nhiều lĩnh vực khác nhau, đặc biệt lĩnh vực tính tốn xử lý liệu lớn 1.3Giới thiệu OpenMP OpenMP (Open Multiprocessing) giao diện lập trình ứng dụng song song (API) dành cho việc lập trình ứng dụng song song hệ thống đa lõi phân tán Nó cung cấp cách tiếp cận linh hoạt tiện lợi để tận dụng tài nguyên xử lý đa lõi, giúp nhà phát triển viết mã song song dễ dàng Đặc Điểm Chính OpenMP: - Dễ Sử Dụng: OpenMP thiết kế để đơn giản dễ sử dụng, cho phép nhà phát triển song song hóa ứng dụng cách tương đối nhanh chóng hiệu - Hỗ Trợ Đa Nền Tảng: Nó tiêu chuẩn hỗ trợ nhiều tảng phần cứng hệ điều hành, từ máy tính cá nhân siêu máy tính cụm máy tính phân tán - Tính Chất Mở Quen Thuộc: OpenMP chuẩn mở trì phát triển nhóm cơng ty tổ chức Điều đảm bảo tính liên tục quen thuộc di chuyển tảng khác - Hỗ Trợ Đa Dạng Các Cấu Trúc: OpenMP hỗ trợ song song hóa nhiều loại cấu trúc, bao gồm vịng lặp, phân chia cơng việc, khối mã, nhiều loại phép tính khác - Tăng Cường Hiệu Năng: Bằng cách tận dụng tài nguyên đa lõi việc phân chia công việc, OpenMP giúp tăng cường hiệu suất tính tốn ứng dụng - Thích Hợp cho Mọi Kích Thước Dự Án: Từ dự án nhỏ đến dự án lớn quy mô cao, OpenMP áp dụng cách linh hoạt phù hợp Cấu Trúc Cơ Bản OpenMP: - Chỉ Thị #pragma: Sử dụng thị #pragma để thêm dẫn song song hóa vào mã nguồn C/C++ - API Functions: Bên cạnh việc sử dụng thị #pragma, OpenMP cung cấp số hàm API để kiểm soát hoạt động song song, quản lý luồng tài nguyên Ứng Dụng OpenMP: - Tính Tốn Khoa Học Tính Tốn Đa Phương Tiện: OpenMP thường sử dụng rộng rãi lĩnh vực tính tốn khoa học, mơ phỏng, xử lý hình ảnh, video âm - Cơ Sở Dữ Liệu Xử Lý Dữ Liệu Lớn:Trong ứng dụng liên quan đến sở liệu xử lý liệu lớn, OpenMP đóng vai trị quan trọng để tối ưu hóa việc xử lý song song Các thị phổ biến OpenMP: #pragma omp parallel Chức Năng: Tạo nhóm luồng song song Sử Dụng: Sử dụng để tạo luồng song song, luồng thực phần mã khối định Ví Dụ: #pragma omp parallel { // Mã thực thi song song printf("Hello, world!\n"); } #pragma omp for Chức Năng: Phân chia vòng lặp cho luồng Sử Dụng: Sử dụng để song song hóa vịng lặp, phân chia cơng việc vịng lặp cho luồng nhóm song song Ví Dụ: #pragma omp parallel { #pragma omp for for (int i = 0; i < n; ++i) { // Mã vòng lặp thực thi song song printf("Iteration %d\n", i); } } Hàm API omp_get_thread_num() Chức Năng: Trả ID luồng Sử Dụng: Sử dụng để xác định ID luồng thực thi nhóm song song Ví Dụ: #pragma omp parallel { int thread_id = omp_get_thread_num(); printf("Hello from thread %d\n", thread_id); } Hàm omp_get_num_threads() Chức Năng: Trả số lượng luồng nhóm song song Sử Dụng: Sử dụng để biết số lượng luồng thực thi nhóm song song Ví Dụ: int num_threads = omp_get_num_threads(); printf("Number of threads: %d\n", num_threads); #pragma omp atomic Chức Năng: Thực phép toán nguyên tử Sử Dụng: Sử dụng để đảm bảo phép tốn thực ngun tử mà khơng bị xung đột luồng Ví Dụ: #pragma omp parallel { #pragma omp atomic sum += 1; } #pragma omp barrier Chức Năng: Đồng hóa luồng Sử Dụng: Sử dụng để đảm bảo tất luồng đạt đến điểm cụ thể mã trước tiếp tục thực Ví Dụ: #pragma omp parallel { // Mã song song #pragma omp barrier // Mã } 1.4 Giới thiệu thuật toán Cannon Thuật toán Cannon thuật toán phổ biến sử dụng để nhân hai ma trận môi trường tính tốn song song Đặc điểm thuật toán việc phân chia ma trận đầu vào thành ô (submatrix) thực phép di chuyển xoay vịng (cyclic shift) lưới hai chiều tiến trình (processors grid) Thuật toán thường áp dụng mơi trường tính tốn song song hệ thống đa lõi cụm máy tính Các Bước Cơ Bản Thuật Toán Cannon: - Phân Chia Ma Trận: Ma trận phân chia thành ô con, ô gửi đến tiến trình - Di Chuyển Dữ Liệu: Các ô ma trận di chuyển tiến trình theo hướng xoay vịng lưới hai chiều - Nhân Ma Trận: Sau liệu di chuyển, tiến trình thực phép nhân ma trận mà giữ - Tổ Hợp Kết Quả: Kết từ phép nhân ma trận ô tổ hợp để tạo ma trận kết cuối Ứng Dụng Thuật Tốn Cannon: - Tính Tốn Song Song Đa Lõi: Cannon thuật toán phổ biến sử dụng tính tốn song song, đặc biệt hệ thống đa lõi, cụm máy tính mơi trường tính tốn phân tán - Xử Lý Dữ Liệu Lớn Tính Tốn Khoa Học: Trên tảng tính tốn khoa học xử lý liệu lớn, Cannon cung cấp cách tiếp cận hiệu để thực phép nhân ma trận với hiệu suất cao - Mơ Hình Học Máy Xử Lý Hình Ảnh: Trong lĩnh vực mơ hình học máy, xử lý hình ảnh đồ họa máy tính, việc sử dụng thuật tốn nhân ma trận Cannon giúp tối ưu hóa q trình tính toán Thuật toán Cannon phương pháp hiệu để thực nhân ma trận môi trường song song, đặc biệt hệ thống tính tốn có cấu trúc lưới Việc phân chia ma trận di chuyển liệu tiến trình giúp tận dụng tài ngun tính tốn cách hiệu để tăng cường hiệu suất tính tốn phép nhân ma trận CHƯƠNG 2: Thiết kế thuật tốn Cannon 2.1 Mơ tả chi tiết thuật tốn Cannon Để mơ tả chi tiết thuật toán Cannon sử dụng OpenMP việc nhân ma trận, trước hết, cần hiểu rõ thuật tốn Cannon cách OpenMP áp dụng để tối ưu hóa việc thực thuật tốn nhiều luồng Thuật toán Cannon sử dụng để nhân hai ma trận vng có kích thước N×N cách chia ma trận thành ô di chuyển chúng theo cách định lưới ma trận 2D ảo Mỗi bước thuật toán liên quan đến việc nhân ma trận cập nhật kết ma trận kết Khi sử dụng OpenMP để tối ưu hóa thuật tốn Cannon, tận dụng tính song song nhiều luồng để thực phép tính ma trận đồng thời Đầu tiên, việc triển khai thuật toán Cannon OpenMP yêu cầu phân chia ma trận đầu vào thành ô Mỗi luồng thực việc nhân ma trận tương ứng cập nhật ma trận kết tương ứng chúng Một cách tiếp cận phổ biến sử dụng hàm thị OpenMP #pragma omp parallel để tạo luồng song song Điều cho phép chia nhỏ công việc nhân ma trận vào phần nhỏ gán phần cho luồng riêng biệt Đồng thời, việc sử dụng thị #pragma omp for áp dụng để phân phối cơng việc tính tốn ô ma trận cho luồng Cần ý việc phân phối công việc phải thực cách cẩn thận để tránh xung đột đảm bảo tính đồng kết Điều địi hỏi sử dụng cấu trúc liệu phù hợp việc đồng hóa phù hợp luồng Ngồi ra, tối ưu hóa hiệu suất thuật tốn Cannon thơng qua OpenMP địi hỏi việc sử dụng phương pháp tối ưu hóa nhớ đệm (cache) tránh truy cập khơng đồng đến nhớ chung Trong q trình triển khai, việc đánh giá tinh chỉnh thông qua thử nghiệm với kích thước ma trận khác phần quan trọng để đảm bảo thuật tốn hoạt động hiệu tảng có nhiều lõi xử lý Trên tất cả, việc triển khai thuật tốn Cannon sử dụng OpenMP địi hỏi hiểu biết sâu sắc thuật toán bản, kiến thức vững lập trình song song khả tối ưu hóa hiệu suất mã nguồn để có kết tốt Việc sử dụng OpenMP thuật toán Cannon nhằm tận dụng sức mạnh việc thực song song nhiều lõi xử lý, giúp tăng hiệu suất giảm thời gian tính tốn cho việc nhân ma trận lớn Dưới bước thiết kế: Phân Chia Ma Trận: - Sử dụng thị #pragma omp parallel để tạo luồng song song - Chia ma trận đầu vào thành ô (submatrix) phân phối chúng cho luồng Di Chuyển Dữ Liệu: - Sử dụng thị #pragma omp for để thực việc di chuyển liệu luồng theo hướng xoay vòng - Sử dụng thị #pragma omp barrier để đồng hóa luồng trước bắt đầu phép nhân Phép Nhân Ma Trận Trên Các Ô Con: - Mỗi luồng thực phép nhân ma trận ô mà giữ - Sử dụng thị hàm OpenMP để tận dụng tính song song tiến trình Tổ Hợp Kết Quả: - Tổ hợp kết từ phép nhân ma trận ô để tạo ma trận kết cuối 2.2 Thiết kế mã nguồn thuật toán Cannon 2.2.1 Thuật tốn Cannon khơng sử dụng OpenMp Dưới mà mã nguồn thuật tốn Cannon khơng sử dụng OpenMP #include #include #include using namespace std; using namespace std::chrono; const int matrixSize = 10; // Function to print a matrix void printMatrix(const vector& matrix) { for (const auto& row : matrix) { for (double element : row) { cout

Ngày đăng: 12/01/2024, 20:04

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

Tài liệu liên quan