ĐÁNH GIÁ HIỆU NĂNG THUẬT TOÁN TÍNH TÍCH MA TRẬN FOX SỬ DỤNG OPENMP

25 6 0
ĐÁNH GIÁ HIỆU NĂNG THUẬT TOÁN TÍNH TÍCH MA TRẬN FOX 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

Ngày nay với sự phát triển từng ngày của công nghệ, truyền thông, các ngành công nghệ thông tin nói chung và các ngành nghề khác nói riêng đều cần thiết sử dụng các công nghệ cao, nhanh, dễ dàng sử dụng. Do vậy, sinh viên trường Đại học Công nghiệp Hà Nội cần phải học hỏi và biết cách áp dụng những kiến thức đó vào trong công việc, đời sống. Đặc biệt là với môn Tính toán hiệu năng cao, có rất nhiều bài toán, số liệu có độ phức tạp lớn và khối lượng dữ liệu khổng lồ. Một thuật toán tuần tự thông thường sẽ mất rất nhiều thời gian để có thể giải quyết được hoặc có thể không thể giải được. Vậy nên việc học tập và áp dụng các phương pháp tính toán song song là rất cần thiết. Ở bài báo cáo này chúng em muốn đánh giá hiệu năng thuật toán tính tích ma trận Fox sử dụng OpenMP. Trong bài báo cáo chúng em chia làm 3 chương chính: • Chương 1: Kiến thức cơ sở • Chương 2: Mô tả chi tiết bài toán • Chương 3: Thực nghiệm Mặc dù có nhiều cố gắng bằng những kiến thức đã được học để hoàn thành công việc, song vẫn còn nhiều thiếu sót cần được bổ sung. Vì vậy chúng em rất mong nhận được những ý kiến đóng góp của thầy cô để bài báo cáo của nhóm em có thể 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 THỰC NGHIỆM Mơn học: TÍNH TOÁN HIỆU NĂNG CAO ĐÁNH GIÁ HIỆU NĂNG THUẬT TOÁN TÍNH TÍCH MA TRẬN FOX SỬ DỤNG OPENMP GVHD: Nhóm - Lớp: Thành viên: TS HÀ MẠNH ĐÀO 19 - 20231IT6069001 Đặng Hoàng Phương Nguyễn Thị Hoàng Mai Nguyễn Thị Linh Hà Nội, Năm 2023 LỜI MỞ ĐẦU Ngày với phát triển ngày công nghệ, truyền thơng, ngành cơng nghệ thơng tin nói chung ngành nghề khác nói riêng cần thiết sử dụng công nghệ cao, nhanh, dễ dàng sử dụng Do vậy, sinh viên trường Đại học Công nghiệp Hà Nội cần phải học hỏi biết cách áp dụng kiến thức vào cơng việc, đời sống Đặc biệt với mơn Tính tốn hiệu cao, có nhiều tốn, số liệu có độ phức tạp lớn khối lượng liệu khổng lồ Một thuật tốn thơng thường nhiều thời gian để giải giải Vậy nên việc học tập áp dụng phương pháp tính tốn song song cần thiết Ở báo cáo chúng em muốn đánh giá hiệu thuật tốn tính tích ma trận Fox sử dụng OpenMP Trong báo cáo chúng em chia làm chương chính: • Chương 1: Kiến thức sở PAGE • Chương 2: Mơ tả chi tiết tốn • Chương 3: Thực nghiệm Mặc dù có nhiều cố gắng kiến thức học để hồn thành cơng việc, song cịn nhiều thiếu sót cần bổ sung Vì chúng em mong nhận ý kiến đóng góp thầy để báo cáo nhóm em hồn thiện Nhóm em xin chân thành cảm ơn! MỤC LỤC LỜI MỞ ĐẦU .1 MỤC LỤC Chương 1: Kiến thức sở 1.1 Giới thiệu tính tốn hiệu cao .4 1.1.1 Tính tốn hiệu cao gì? 1.1.2 Cách hoạt động tính tốn hiệu cao 1.1.3 Tính tốn song song gì? 1.1.4 Mơ hình tính tốn song song 1.1.5 Giới thiệu Thư viện OpenMP 13 1.2 Giới thiệu thuật toán FOX 15 1.2.1 Định nghĩa 15 1.2.2 Nguyên lý hoạt động 15 1.2.3 Phân tích độ phức tạp thuật tốn 16 Chương 2: Mô tả chi tiết toán 17PAGE 2.1 Giới thiệu toán 17 2.2 Thực thuật tốn Fox so sánh với tính tốn 17 2.3 Đánh giá thuật toán Fox theo lý thuyết 19 2.4 Hướng dẫn cài đặt thiết lập môi trường Visual Studio với OpenMP 19 Chương 3: Thực nghiệm 23 3.1 Kết thực nghiệm thực tế 23 3.1.1 Bảng so sánh hiệu 23 KẾT LUẬN .24 TÀI LIỆU THAM KHẢO 25 Chương 1: Kiến thức sở 1.1 Giới thiệu tính tốn hiệu cao 1.1.1 Tính tốn hiệu cao gì? - Là việc sử dụng tổng hợp sức mạnh máy tính để mang lại kết cao so với máy tính truyền thống máy chủ việc xử lý tốn khó phức tạp - Mơ hình hệ thống tính tốn hiệu cao hệ thống máy tính có kết nối với qua mạng internet siêu máy tính thiết kế để giải toán lớn với tốc độ cao - Tính tốn hiệu cao thường sử dụng số vấn đề lớn giới khoa học, kĩ thuật, tài chính, mơi trường … PAGE 1.1.2 Cách hoạt động tính tốn hiệu cao - Một hệ thống tính tốn hiệu cao hoạt động cách nút(nodes) máy tính đơn lẻ hoạt động cụm (nhóm) kết nối với để thực lượng lớn tính tốn thời gian ngắn - Các máy tính (nodes) kết nối với qua mạng Internet để trao đổi liệu Vì HPC quan trọng: - Tính toán hiệu cao (HPC) phần quan trọng hoạt động nghiên cứu đổi công nghiệp nhiều thập kỉ qua HPC giúp nhà kỹ sư, khoa học liệu, nhà thiết kế nhà nghiên cứu giải vấn đề lớn, phức tạp thời gian ngắn chi phí thấp so với điện tốn truyền thống Các lợi ích to lớn HPC: ● Giảm kiểm tra vật lý: HPC sử dụng để tạo mơ phỏng, loại bỏ nhu cầu kiểm tra vật lý Ví dụ, thử nghiệm vụ tai nạn ô tô, việc tạo mơ dễ dàng tốn nhiều so với thực thử nghiệm va chạm ● Tốc độ: Với CPU, xử lý đồ họa (GPU) kết cấu mạng có độ trễ thấp truy cập nhớ trực tiếp từ xa (RDMA), kết hợp với thiết bị lưu trữ khối cục tồn flash, HPC thực phép tính lớn vài phút thay tuần tháng ● Chi phí: Câu trả lời nhanh có nghĩa lãng phí thời gian tiền bạc Ngoài ra, với HPC dựa đám mây, doanh nghiệp nhỏ công ty thành lập đủ khả để chạy PAGE khối lượng công việc HPC, trả tiền cho họ sử dụng mở rộng quy mô cần ● Cải tiến: HPC thúc đẩy đổi hầu hết ngành—đó động lực đằng sau khám phá khoa học đột phá giúp cải thiện chất lượng sống cho người khắp giới 1.1.3 Tính tốn song song gì? Theo nghĩa đơn giản nhất, tính tốn song song việc sử dụng đồng thời nhiều tài ngun tính tốn để giải vấn đề tính tốn: ● Một vấn đề chia thành phần riêng biệt giải đồng thời ● Mỗi phần chia nhỏ thành loạt hướng dẫn ● Các hướng dẫn từ phần thực thi đồng thời xử lý khác ● Một chế kiểm soát/phối hợp tổng thể sử dụng Vấn đề tính tốn có thể: ● Chia nhỏ cơng việc rời rạc để giải đồng thời; ● Thực nhiều hướng dẫn chương trình lúc nào; ● Được giải thời gian ngắn với nhiều tài nguyên điện PAGE toán so với tài nguyên điện toán Các tài ngun tính tốn thường là: ● Một máy tính có nhiều xử lý/lõi ● Một số lượng tùy ý máy tính kết nối mạng Máy tính song song: Hầu tất máy tính độc lập ngày song song từ góc độ phần cứng: ● Nhiều đơn vị chức (bộ đệm L1, đệm L2, nhánh, tìm nạp trước, giải mã, dấu phẩy động, xử lý đồ họa (GPU), số nguyên, v.v.) ● Nhiều đơn vị thực thi/lõi ● Nhiều chủ đề phần cứng ● Các mạng kết nối nhiều máy tính độc lập (các nút) để tạo thành PAGE cụm máy tính song song lớn Ví dụ, sơ đồ bên hiển thị cụm máy tính song song LLNL điển hình: ● Bản thân nút tính tốn máy tính song song đa xử lý ● Nhiều nút điện toán nối mạng với mạng Infiniband ● Các nút mục đích đặc biệt, xử lý đa năng, sử dụng cho mục đích khác • Phần lớn máy tính song song lớn (siêu máy tính) giới cụm phần cứng sản xuất số (hầu hết) nhà cung cấp tiếng PAGE 1.1.4 Mơ hình tính tốn song song Mơ hình tính tốn song song có cách phân loại theo Flynn: SISD: Single Instruction stream Single Data stream • Một máy tính nối tiếp (khơng song song) • Chỉ lệnh đơn: Chỉ có luồng lệnh CPU thực chu kỳ xung nhịp • Dữ liệu đơn: Chỉ luồng liệu sử dụng làm đầu vào chu kì đồng hồ • Thực xác định • Đây loại máy tính lâu đời • Ví dụ: máy tính lớn hệ cũ, máy tính mini, máy trạm PC lõi đơn/bộ xử lý PAGE SIMD: Single Instruction stream Multiple Data stream ● Một loại máy tính song song ● Lệnh đơn: Tất đơn vị xử lý thực lệnh chu kỳ xung nhịp định ● Nhiều liệu: Mỗi đơn vị xử lý hoạt động phần tử liệu khác ● Thích hợp cho vấn đề chuyên biệt đặc trưng mức độ PAGE đặn cao, chẳng hạn xử lý đồ họa/hình ảnh ● Thực thi đồng (lockstep) xác định ● Hai loại: Mảng xử lý Đường ống Vector PAGE MISD: Multiple Instruction stream Single Data stream ● Một loại máy tính song song ● Nhiều lệnh: Mỗi đơn vị xử lý hoạt động liệu cách độc lập thông qua luồng lệnh riêng biệt ● Dữ liệu đơn: Một luồng liệu đưa vào nhiều đơn vị xử lý ● Rất (nếu có) ví dụ thực tế loại máy tính song song tồn ● Một số cách sử dụng hiểu là: - Nhiều lọc tần số hoạt động luồng tín hiệu 10 - Nhiều thuật tốn mã hóa cố gắng bẻ khóa tin nhắn mã hóa PAGE MIMD: Multiple Instruction stream Multiple Data stream ● Một loại máy tính song song ● Nhiều lệnh: Mỗi xử lý thực thi luồng lệnh khác ● Nhiều liệu: Mọi xử lý làm việc với luồng liệu khác ● Việc thực thi đồng không đồng bộ, xác định khơng xác định 11 ● Hiện tại, loại máy tính song song phổ biến - hầu hết siêu máy tính đại thuộc loại ● Ví dụ: hầu hết siêu máy tính tại, cụm máy tính song song nối mạng "lưới", máy tính SMP đa xử lý, PC đa lõi PAGE 1.1.5 Giới thiệu Thư viện OpenMP OpenMP viết tắt Open specifications for Multi Processing Là Application Programming Interface (API), đem lại mơ hình lập trình linh động cho nhà phát triển ứng dụng song song chia sẻ nhớ ❖ OpenMP hợp thành bởi: 12 ● Chỉ thị chương trình dịch (Compiler Directives) ● Thư viện hàm thời gian chạy (library runtime routines) ● Các biến môi trường (environment variables) OpenMP ngôn ngữ lập trình Thực OpenMP hoạt động liên kết chặt chẽ với ngơn ngữ lập trình làm sở, Fortran, C/C++ OpenMP tự động song song hóa chương trình: VD: Người lập trình phải tự ý thức tính song song cơng việc OpenMP cung cấp chế để định việc thực song song OpenMP phương tiện lập trình cho hệ thống có nhớ phân tán ❖ Ưu điểm OpenMP: ● Một chuẩn hồn chỉnh cơng nhận thực tế ● Hiệu suất khả mở rộng tốt chương trình thiết kế ● Tính khả chun cao: Khi chương trình viết dịch nhiều chương trình dịch khác PAGE ● Dễ sử dụng nhờ đơn giản số lượng thị ● Cho phép song song hóa tăng dần chương trình ❖ Mơ hình song song OpenMP: ● OpenMP cung cấp mơ hình lập trình đa luồng cấp cao, xây dựng thư viện lập trình đa luồng hệ thống, vd, POSIX Threads ● Thực theo mơ hình Fork-Join: ● Chương trình OpenMP bắt đầu việc thực luồng chủ nhất, master thread ● Luồng chủ thực vùng song song ● Luồng chủ tạo nhóm luồng để chia sẻ thực công việc song song: Song song đa luồng, song song khai báo, song song động ❖ Mơ hình nhớ OpenMP: ● Mọi luồng có quyền truy cập đến vùng nhớ chung toàn cục ● Dữ liệu chia sẻ riêng tư 13 ● Việc truyền liệu suốt với người lập trình ● Cần thiết phải đồng hóa thực ngầm ❖ Tính OpenMP: ● Tạo nhóm luồng cho thực song song ● Chỉ rõ cách chia sẻ công việc luồng thành viên nhóm ● Khai báo liệu chia sẻ riêng tư ● Đồng luồng cho phép luồng thực công việc cách độc quyền ● Cung cấp hàm thời gian chạy ● Quản lý số lượng luồng 1.2 Giới thiệu thuật toán FOX 1.2.1 Định nghĩa Thuật toán Fox thuật toán phổ biến để thực tính tốn nhân ma trận nhiều Thuật toán hiệu sử dụng để tính tốn song song nhân ma trận PAGE 1.2.2 Nguyên lý hoạt động ● Các phần tử n ma trận A B phân vùng xử lý với tổng số xử lý p để xử lý ban đầu lưu trữ ( √np ) * ( √np ) ● Lúc này, thuật toán sử dụng phần tử ma trận A nhân với tất phần tử hàng ma trận B Sau dịch chuyển vịng trịn bước lên khối lệnh ma trận B dọc theo cột xử lý ● Ban đầu chọn khối chéo Ai,i để phân vùng xử lý Sau hoàn thành phần trên, ta lập lại thêm p lần: Nhân Ai,i với tất phần tử hàng ma trận B Nhân ma trận A vừa nhận với ma trận B Dịch khối B lên bước 14 Sau chọn khối Ai,(j+1)mod√ p nhân với phần tử hàng Quay lại bước 1.2.3 Phân tích độ phức tạp thuật tốn Độ phức tạp tính tốn phép nhân ma trận cho biết thao tác nhân ma trận thực nhanh Các thuật toán nhân ma trận chương trình trung tâm thuật toán lý thuyết số cho đại số tuyến tính số tối ưu hóa, việc tìm khoảng thời gian phù hợp cần thiết có ý nghĩa thực tế lớn Áp dụng trực tiếp định nghĩa toán học phép nhân ma trận đưa thuật toán yêu cầu n thao tác trường để nhân hai ma trận n × n trường ( O(n3) ký hiệu O lớn ) Đây với thuật toán Khi sử dụng thuật toán song song cụ thể sử dụng thuật toán song song Fox ta có độ phức tạp: O(n2s) s số bước thực thuật tốn Ví dụ với phép tính ma trận 4x4 ta có: n = s =4 Từ ta có độ phức tạp O(424) = O(64) PAGE 15 Chương 2: Mơ tả chi tiết tốn 2.1Giới thiệu tốn Cho ma trận A = (aij)mxn Nếu ma trận A có kích thước m x n ma trận B có kích thước n x p ma trận tích C = A * B có kích thước m x p có phần tử đứng hàng thứ i, cột thứ j xác định bởi: Cij = ai1b1j + ai2b2j + … + ainbnj Với i = … m, j = … p Từ kiến thức ta áp dụng để tính ma trận theo theo thuật toán Fox song song 2.2 PAGE Thực thuật tốn Fox so sánh với tính tốn #include #include #include #include #include 16 void matrix_multiply_fox_interative(const std::vector& A, const A, const std::vector& B, std::vector& C, int n, int block_size) { for (int bi = 0; bi < n; bi += block_size) { for (int bj = 0; bj < n; bj += block_size) { for (int bk = 0; bk < n; bk += block_size) { for (int i = bi; i < std::min(bi + block_size, n); ++i) { for (int j = bj; j < std::min(bj + block_size, n); ++j) { for (int k = bk; k < std::min(bk + block_size, n); ++k) { C[i * n + j] += A[i * n + k] * B[k * n + j]; } } } } } } } void matrix_multiply_fox_parallel(const std::vector& std::vector& B, std::vector& C, int n, int block_size) { #pragma omp parallel for collapse(2) shared(A, B, C) for (int bi = 0; bi < n; bi += block_size) { PAGE for (int bj = 0; bj < n; bj += block_size) { for (int bk = 0; bk < n; bk += block_size) { for (int i = bi; i < std::min(bi + block_size, n); ++i) { for (int j = bj; j < std::min(bj + block_size, n); ++j) { for (int k = bk; k < std::min(bk + block_size, n); ++k) { C[i * n + j] += A[i * n + k] * B[k * n + j]; } } } } } } } int main() { const int n = 1000; // Kích thước ma trận const int block_size = 50; // Kích thước khối std::vector A(n * n), B(n * n), C_serial(n * n, 0.0), C_parallel(n * n, 0.0); // Khởi tạo ma trận A, B với giá trị ngẫu nhiên srand(time(nullptr)); for (int i = 0; i < n * n; ++i) { A[i] = rand() % 100; B[i] = rand() % 100; 17 } // Tính thời gian thực thi cho phép tính double start_time = omp_get_wtime(); matrix_multiply_fox_interative(A, B, C_serial, n, block_size); double interative_time = omp_get_wtime() - start_time; // Tính thời gian thực thi cho phép tính song song start_time = omp_get_wtime(); matrix_multiply_fox_parallel(A, B, C_parallel, n, block_size); double parallel_time = omp_get_wtime() - start_time; // In kết thời gian thực thi std::cout

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

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

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

Tài liệu liên quan