ĐÁNH GIÁ HIỆU NĂNG BÀI TOÁN TÍNH NGHỊCH ĐẢO MA TRẬN BẰNG OPENMP

24 8 0
ĐÁNH GIÁ HIỆU NĂNG BÀI TOÁN TÍNH NGHỊCH ĐẢO MA TRẬN BẰ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

Lời đầu tiên, chúng em xin bày tỏ lòng biết ơn sâu sắc đến TS. Hà Mạnh Đào, người đã dành thời gian và tâm huyết để hướng dẫn chúng em trong quá trình nghiên cứu và hoàn thiện đề tài. Sự am hiểu chuyên sâu và lòng tận tâm của thầy đã giúp chúng em có thêm những kiến thức sâu sắc về bộ môn tính toán hiệu năng cao. Chúng em trân trọng mọi lời góp ý và phản hồi mang tính xây dựng từ phía thầy. Đây là cơ hội quý báu để chúng em có thể hoàn thiện và nâng cao chất lượng của đề tài. Sự hỗ trợ và chia sẻ kinh nghiệm của thầy là nguồn động viên lớn, giúp chúng em không chỉ làm việc hiệu quả hơn mà còn trở nên chín chắn hơn trong lĩnh vực nghiên cứu. Chúng em cảm nhận sâu sắc lòng nhân ái và sự hướng dẫn tận tâm của TS. Hà Mạnh Đào. Những giờ giảng, những lời khuyên hữu ích và sự động viên của thầy đã tạo nên một hành trình học tập đầy ý nghĩa và khám phá. Chúng em xin chân thành cảm ơn thầy vì những đóng góp to lớn và sẽ luôn mang theo sự tri ân này trong lòng trong hành trình phát triển của chúng tôi.

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 TOÁN HIỆU NĂNG CAO ĐÁNH GIÁ HIỆU NĂNG BÀI TOÁN TÍNH NGHỊCH ĐẢO MA TRẬN BẰNG OPENMP Giáo viên hướng dẫn: TS Hà Mạnh Đào Nhóm sinh viên thực hiện: 1, Vũ Văn Tuệ Mã SV: 2021606491 2, Lê Hoàng An Mã SV: 2021604365 3, Nguyễn Minh Đức Mã SV: 2021607287 Mã Lớp: 20231IT6069001 Nhóm: 10 Hà nội, Năm 2023 LỜI CẢM ƠN Lời đầu tiên, chúng em xin bày tỏ lòng biết ơn sâu sắc đến TS Hà Mạnh Đào, người dành thời gian tâm huyết để hướng dẫn chúng em trình nghiên cứu hoàn thiện đề tài Sự am hiểu chuyên sâu lịng tận tâm thầy giúp chúng em có thêm kiến thức sâu sắc mơn tính toán hiệu cao Chúng em trân trọng lời góp ý phản hồi mang tính xây dựng từ phía thầy Đây hội quý báu để chúng em hồn thiện nâng cao chất lượng đề tài Sự hỗ trợ chia sẻ kinh nghiệm thầy nguồn động viên lớn, giúp chúng em khơng làm việc hiệu mà cịn trở nên chín chắn lĩnh vực nghiên cứu Chúng em cảm nhận sâu sắc lòng nhân hướng dẫn tận tâm TS Hà Mạnh Đào Những giảng, lời khuyên hữu ích động viên thầy tạo nên hành trình học tập đầy ý nghĩa khám phá Chúng em xin chân thành cảm ơn thầy đóng góp to lớn ln mang theo tri ân lịng hành trình phát triển chúng tơi Cảm ơn thầy nhiều! Tính tốn hiệu cao LỜI MỞ ĐẦU Trong thời đại ngày nay, việc tối ưu hóa đánh giá hiệu thuật tốn tính tốn thách thức quan trọng, đặc biệt lĩnh vực xử lý ma trận Bài tốn tính ma trận nghịch đảo, vấn đề lớn đại số tuyến tính, đặt nhu cầu hiệu suất cao tận dụng tối đa tài nguyên hệ thống Trong nỗ lực tối ưu hóa hiệu cho tốn này, chúng em chọn sử dụng OpenMP - tiêu chuẩn lập trình đa luồng mở, để mơ đánh giá hiệu thuật tốn tính ma trận nghịch đảo OpenMP cung cấp cách tiếp cận linh hoạt để tận dụng sức mạnh lõi xử lý đa nhiệm kiến trúc máy tính đại Trong đề tài này, chúng em trình bày quy trình kết việc ứng dụng OpenMP tốn tính ma trận nghịch đảo, đồng thời đánh giá hiệu thuật tốn sau tối ưu hóa Điều không giúp chúng em hiểu rõ khả OpenMP mà mang lại thông tin quan trọng khả mở rộng tối ưu hóa việc xử lý ma trận lớn Chúng em hi vọng nghiên cứu đóng góp phần nhỏ vào phát triển ứng dụng hiệu suất thuật toán đại số tuyến tính mơi trường tính tốn đa luồng ngày Tính tốn hiệu cao MỤC LỤC Chương 1.1 Giới thiệu OpenMP thư viện 1.1.1 OpenMP gì? 1.1.2 Mơ hình song song OpenMP 1.1.3 Tổng quan API OpenMP 1.1.4 Cú pháp OpenMP 10 1.1.5 Hiệu suất với OpenMP 10 1.1.6 Ưu nhược điểm tính OpenMP 11 1.2 Giới thiệu MPI 12 1.2.1 Phương pháp khử Gassian 12 1.2.2 Phân tích tốn 15 Chương Tổng quan OpenMP .5 2.1 Kết nghiên cứu 17 Thiết kế thuật toán phép khử Gassian 17 2.1.1 Bài toán 17 2.1.2 Thuật toán .17 2.2 Tận dụng tính song song 19 Chương 3.1 Kết luận học kinh nghiệm 22 Kết đánh giá ma trận khác .22 3.1.1 Thông số hệ thống 22 3.1.2 Thiết lập toán 22 3.1.3 Thống kê thời gian .22 3.1.4 Thống kê thời gian .23 3.1.5 Kết luận 24 TÀI LIỆU THAM KHẢO 25 Tính tốn hiệu cao Chương Tổng quan OpenMP 1.1 Giới thiệu OpenMP thư viện OpenMP gì? OpenMP (Open Multi-Processing) tiêu chuẩn lập trình đa luồng mở thiết kế để tận dụng sức mạnh xử lý đa nhân (multicore) đa luồng kiến trúc máy tính đại Mục tiêu OpenMP giúp nhà phát triển tận dụng tài nguyên xử lý đa nhiệm cách hiệu mà không cần ý chi tiết vấn đề phức tạp lập trình đa luồng OpenMP giao diện lập trình ứng dụng(API) định nghĩa nhóm tổ chức phần cứng chuyên dụng nhà cung cấp phần mềm OpenMP cung cấp mơ hình lập trình linh động, mở rộng cho nhà phát triển mơ hình tính tốn song song cho nhớ chia sẻ OpenMP hỗ trợ ngôn ngữ C/C++ Fortran lượng rộng kiến trúc phần cứng khác Trong đề tài sử dụng OpenMP môi trường C++ để cài đặt minh họa hiệu suất thuật toán nhân ma trận làm việc hai mơ hình lập trình song song Các ưu điểm OpenMP bao gồm tính di động, tính chất đa tảng, khả tích hợp dễ dàng vào mã nguồn mà không cần thay đổi nhiều Bằng cách sử dụng OpenMP, người lập trình tận dụng hiệu sức mạnh xử lý đa nhân, giúp cải thiện hiệu suất ứng dụng họ môi trường tính tốn đa luồng đa nhân Mơ hình song song OpenMP Cơ chế đa luồng  OpenMP thực việc tính tốn song song tn theo chế đa luồng Luồng đơn vị thực thi nhỏ tiến trình lịch hệ điều hành Trong tiến trình có nhiều luồng thực thi Song song tường minh Tính tốn hiệu cao  Khơng giống số mơ hình lập trình song song trừu tượng hóa tự động khác, OpenMP yêu cầu người lập trình điều khiển tồn hoạt động tính tốn song song Một chương trình song song xây dựng OpenMP việc chèn thêm thị tiền xử lý vào chương trình bình thường Cơ chế nhớ chia sẻ Hình 1 Mơ hình lập trình nhớ chia sẻ  OpenMP thiết kế cho hệ thống đa nhân chia sẻ nhớ kiến trúc kể tên UMA, hay NUMA Trong OpenMP luồng truy cập đến vùng nhớ tồn cục Dữ liệu toàn cục riêng tư luồng Việc đồng hóa thực người lập trình phần lớn tự động Mơ hình fork – join  OpenMP sử dụng mơ hình fork-join cho việc thực thi song song Một chương trình OpenMP ban đầu tiến trình đơn thực gặp đoạn thị song song rẽ nhánh thành chương trình con, sau thực xong lại luồng Fork q trình rẽ nhánh, Join Tính tốn hiệu cao q trình hợp lại Hình Minh họa mơ hình Fork join OpenMP Các đoạn song song lồng  OpenMP luồng song song tiếp tục tách thành luồng song song nhỏ nhằm đẩy mạnh tốc độ tính toán Tổng quan API OpenMP OpenMP gồm thành phần sau:  Các thị biên dịch  Thư viện lập lịch thời gian chạy  Các biến môi trường Cấu trúc thị biên dịch OpenMP  Chỉ thị biên dịch sử dụng với mục đích:  Sinh luồng chương trình song song  Phân chia khối lệnh luồng  Thực đoạn mã định  Đồng hóa cơng việc luồng  Cú pháp thị tiền xử lý OpenMP C++ #pragma omp [Tên thị] [Các đối số bổ sung] Thư viện lập lịch thời gian chạy  OpenMP bao gồm nhiều thư viện lập lịch thời gian chạy với sử dụng cho mục đích sau:  Thiết đặt truy vấn số luồng  Truy vấn id luồng, số luồng có Tính tốn hiệu cao  Truy vấn chu kỳ đồng hồ phân giải Các biến môi trường  OpenMP cung cấp biến môi trường giúp người lập trình cấu hình thời gian chạy cho đoạn thực thi song song  Biến môi trường thường sử dụng cho mục đích sau  Thiết đặt số luồng  Chỉ định cách lần lặp vòng lặp chia cho luồng  Gán luồng với tiến trình  Thiết lập cấu trúc ngăn xếp Cấu trúc tổng quát đoạn chương trình OpenMP #include main () { Tính tốn hiệu cao Cú pháp OpenMP Một số thị tiền xử lý:  parallel: Chỉ thị bắt đầu đoạn code song song  for: Thực vòng lặp for bên vùng song song chia cho luồng  sections: Xác định phần mã chia sẻ cho luồng  single: Chỉ định phần mã thực thi luồng  master: Chỉ luồng thực thi chương trình  critical: Chỉ định phần mã đoạn giới hạn (Đoạn chương trình sử dụng tài nguyên gang)  barrier: Tạo chặn ngăn luồng tiếp tục thực thi tất luồng khác xong  atomic: Chỉ phần nhớ cập nhật luồng thời điểm  flush: Chỉ định luồng có khung nhìn chung cho nhớ chia sẻ  ordered: Chỉ định thứ tự thực vòng lặp for song song  threadprivate: Chỉ định biến riêng luồng Các hàm quan trọng:  omp_get_thread_num(): Lấy số lượng luồng thời  omp_get_num_thread(): Lấy id luồng  num_threads(): Chỉ định số luồng thực Hiệu suất với OpenMP     Hệ số tăng tốc hệ số mà thời gian giải vấn đề cải thiện so với việc sử dụng xử lý Việc song song hóa phần lớn chương trình quan trọng Mỗi lần chương trình gọi vùng song song vịng lặp, gây khoản chi phí định để chuyển sang chế độ song song Ngồi chi phí gọi vịng lặp song song thực thi rào cản, hiệu ứng nhớ đệm đồng hóa làm tăng chi phí đáng kể Tính tốn hiệu cao Cân tải (Load balancing): OpenMP hiểu phân phối công việc thread để tăng hiệu suất xử lý Các công việc chia nhỏ phân phối cho thread để tận dụng tối đa tài nguyên hệ thống Nếu số thread phải thực nhiều công việc so với thread khác, hiệu suất bị giảm.Trong trường hợp ma trận thưa thớt, số hàng có nhiều phần từ khác không so với hàng khác, cân tải vấn đề với lập lịch tĩnh.Vấn đề cân tải giải cách sử dụng lập lịch động.Tuy nhiên, việc sử dụng lịch trình động có chi phí riêng nó.Lập lịch tĩnh thường đạt hiệu tải tốt tình mà lượng cơng việc cho lần lặp đồng biến đổi theo cách dự đoán được.  Ưu nhược điểm tính OpenMP Có số ưu điểm OpenMP ứng dụng tương đối dễ để thực 10 với độ trễ thấp thông cao OpenMP cho phép lập lịch thời gian chạy dynamic load balancing ưu điểm lớn OpenMP khẳ giao tiếp ngầm Mặc dù có số hạn chế định việc truy cập song song vào nhớ dẫn đến việc giảm hiệu suất kích thước vong lập song song nhỏ phí trở thành vấn đề việc đồng hòa trở nên cần thiết Các tính OpenMP  Hỗ trợ cho tăng tốc: Một chế cung cấp để xác định vùng mã việc tính tốn liệu (và/hoặc) chuyển sang thiết bị máy tính  Xử lí lỗi: khả OpenMP xác định rõ ràng để cải thiện khả phục hồi tính ổn định ứng dụng OpenMP có lỗi cấp độ hệ thống, cấp độ thời gian chạy lỗi người dùng giải thích  Mối quan hệ luồng: Người dùng mô tả nơi thực thi luồng OpenMP Dữ liệu tảng thuộc tính thuật tốn cụ thể tách biệt, đóng góp hành vi xác định đơn giản Tính tốn hiệu cao sử dụng Lợi ích cho người dùng địa phương tốt hơn, chia sẻ sai băng thơng nhớ nhiều Tiện ích mở rộng tác vụ: Các tiện ích mở rộng tác vụ xem xét đồng hóa sâu tác vụ, tác vụ phụ thuộc, hỗ trợ giảm bớt cho tác vụ luồng dành cho tác vụ Các luồng dành cho tác vụ luồng không tham gia vào chia sẻ cấu trúc công việc mà chờ tác vụ thực thi 1.2 Giới thiệu MPI Phương pháp khử Gassian Phép khử Gass thuật toán liên quan đến việc biến đổi sơ cấp hàng ma trận, ứng dụng phổ biến đại số tuyến tính Một số ứng dụng phương pháp là: tính hạng mà trận, giải hệ phương trình, tính nghịch đảo ma trận khả nghịch Trong luận này, việc tính tốn sử dụng OpenMP Để tính tốn thời gian thực cho từ độ lớn ma trận Và đánh giá khả gia tốc hiệu từ trường 11 hợp Thuật toán chia làm phần Forward elimination: biến đổi ma trận thành ma trận hàng bậc thang Backward Substitution: Biển đổi ma trận hàng bậc thang tìm kết Tính nghịch đảo ma trận khả nghịch [A] dựa sở ma trận nhiều nghịch đảo ma trận Xét ma trận không suy biến A ϵ Rnxn a11 a12 [ A ]= a 21 ⋱ ⋮ ⋮ ai1 ⋯ [ ⋯ a1 j ⋯ ⋮ ⋱ ⋮ ⋯ aij ] Tính tốn hiệu cao Sau để tính nghịch đảo ma trận ta đưa thêm ma trận đơn vị với kích thước với ma trận ban đầu vào bên phải ma trận cần tính a11 a12 [ A|I ]= a21 ⋱ ⋮ ⋮ ⋯ [ ⋯ a1 j | ⋯ ⋯ ⋮| ⋱ ⋯ ⋱ ⋮| ⋮ ⋯ ⋱ ⋯ a ij | ⋯ ⋯ ⋮ ⋮ ] Đặt mi1 = ai1 a11 i=1,2,3 .n Các phần tử bên a11 ma trận gốc loại bỏ cách nhân phần từ hàng với mi1 trừ phần tử tương ứng từ hàng đến hàng cuối Phép tốn sau: 12 aij =aij −mi1 ×a j i, j=1,2,3 .n bij =bij −mi1 ×b1 j i, j=1,2,3 n Với bij phần tử vế phải ma trận trận bổ xung [A|I] Kết ma trận sau thao tác hàng phần tử hàng thứ có kết sau a11 a12 [ A|I ]= a 22−m21×a12 ⋮ ⋮ a i2 −mi1×a12 [ ⋯ a1 j | ⋯ ⋯ ⋮ | 0−m21 ⋯ ⋮ ⋯ ⋱ ⋱ ⋮| ⋯ a ij | 0−mi ⋯ ⋯ Tính toán hiệu cao ⋮ ⋮ ] Theo cách tương tự, tất hàng biến đổi thao tác biến đổi sơ cấp phần tử bên phần tử đường chéo bị loại bỏ Sau hồn thành thao tác hàng cho tất hàng, vế phải ma trận bổ xung có dạng bậc hàng rút gọn hình a11 a 12 [ A|I ]= a 22 ⋮ ⋮ 0 [ ⋯ a1 j| ⋯ ⋮ | b21 b22 ⋱ ⋮| ⋮ ⋯ ⋯ aij | b i1 b i2 ⋯ ⋯ ⋮ ⋱ ⋮ ⋯ bij ] Có thể thấy vế phải ma trận bổ xung[A|I] khơng cịn ma trận đơn vị Điều hồn thành q trình đầu thuật tốn Bước thuật toán BackWard Substitution hàng cuối ma trận lên đến 13 hàng hai Đặt a ik mik= a kk k=1,2, n−1 i=k +1, n Sau đó, thao tác phép biến đổi sơ cấp thực trước để loại bỏ tất phần tử phía phần tử đường chéo vế phải ma trận bổ xung [A|I] aij =aij −mik ×a kj k=1,2,3 n−1 bij =bij −mi1 ×b1 j i, j=k+1 , k+2, n Sau đó, hàng chia cho phần tử đường chéo tương ứng ma trận vế trái akk để biến ma trận vế trái thành ma trận đơn vị: Tính toán hiệu cao aij = bij = aij aii bij bii Ma trận có dạng 0 [ A|I ]= ⋮ ⋮ ⋯ [ ⋯ ⋯ ⋱ ⋯ | b11 ⋮ | b21 ⋮| ⋮ 0| b i1 b12 b22 ⋯ b i2 ⋯ b1 j ⋯ b2 j ⋱ ⋮ ⋯ b ij ] 14 Có thể nhận thấy ma trận bên trái chuyển hóa hồn tồn thành ma trận đơn vị Vậy ma trận vế phải tương ứng ma trận nghịch đảo ma trận gốc b11 ¿ [ Aalignl¿ −1 ¿ ]= b 21 ⋮ bi1 [ b 12 b 22 ⋯ bi ⋯ ⋯ ⋱ ⋯ b1 j b2 j ¿ ⋮ bij ] Phân tích tốn Trong phần thảo luận cách bắt đầu tạo chương trình song song Chúng ta sử dụng phương pháp phân tích nhân tử LU đơn giản để phân tích ma trận thành ma trận tam giác ma trận tam giác Các ma trận tam giác sau sử dụng để tính nghịch đảo Tính toán hiệu cao ma trận Việc phân tách LU thực phương pháp khử Gaussian tính tốn so với kỹ thuật tính nghịch đảo ma trận thông thường Giả sử cần đảo ngược ma trận A Nếu B nghịch đảo A thì: A.B = I I ma trận đơn vị Nếu chia A thành hai ma trận cho ma trận ma trận tam giác ma trận ma trận tam giác thì: A = L.U L ma trận tam giác U ma trận tam giác Do L.U.B = I L.(X) = I X = U.B Ta giải hai phương trình L.X = I 15 U.B = X Giải hai phương trình B, nghịch đảo A Việc tính tốn L U thực song song việc tính tốn khơng phụ thuộc vào bước trước Tương tự, việc tính tốn nghịch đảo thực song song, việc tính tốn cột kết độc lập với Logic tương tự sử dụng để song song hóa mã nối tiếp lệnh OpenMP Tính toán hiệu cao Chương Kết nghiên cứu 2.1 Thiết kế thuật toán phép khử Gassian Bài tốn Cho ma trận A n×n , xác định nghịch đảo ma trận ký hiệu A-1 A×B=B× A=I n ⇒ B= A −1 Phép biến đổi sơ cấp: Hốn đổi vị trí hàng khác ma trận Nhân hàng ma trận với số khác Cộng hàng i với hàng j với i khác j Chúng ta biết chuỗi phép biến đổi sơ cấp áp dụng cho ma trận A biến thành ma trận đơn vị I n, chuỗi 16 phép biến đổi sơ cấp áp dụng cho ma trận đơn vị I n biến thành A-1 Vì vậy, tìm ma trận nghịch đảo A -1 cách tìm chuỗi phép biến đổi sơ cấp ma trận bổ xung [ A | In ] thành [ I | A-1 ] Thuật toán Thuật toán chia thành phần nêu phần I Sau bước thực Cho i = đến n thực Nếu A[i,i] = A[m,i] = với m > i, kết luật A -1 không tồn dừng thuật toán Nếu A[i,i] = A[m,i] != với giá trị nhỏ m > i, đổi chỗ hàng i với hàng m mảng Chia giá trị hàng i với giá trị A[i, i] với j = đến n, A[i, j] = A[i, j]/A[i,i] Tính tốn hiệu cao Ta có A[i, i] = Nếu i < n, sau với r > i, trừ A[r, i] lần hàng i từ hàng r for (int i = 0; i < n; ++i) { // Check if diagonal element is zero if (A[i][i] == 0) { // Swap with the nearest subsequent row where A[i,i] ≠ int swapRow = i + 1; while (swapRow < n && A[swapRow][i] == 0) { swapRow++; } if (swapRow == n) { cout

Ngày đăng: 12/01/2024, 19:45

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

  • Đang cập nhật ...

Tài liệu liên quan