Họ tên: Nguyễn Xuân Hòa Lớp: K63 Vật lý chuẩn Mã sinh viên: 18000402 BÁO CÁO BÀI TẬP LỚN GIỮA KÌ MƠN LẬP TRÌNH PHÂN TÁN VÀ SONG SONG Page | Mục Lục Phần 1: Tổng quan lập trình phân tán song song 1.1 Định nghĩa 1.1.1 Thế lập trình tính tốn song song 1.1.2 Tại phải lập trình tính tốn song song 1.1 Một vài mơ hình lập trình song song Phần 2: Thư viện mã nguồn mở Open MP 2.1 Giới thiệu Open MP 2.3 Chỉ thị Open MP 2.4 Các mệnh đề Open MP 2.5 Thư viện biến môi trường 2.5.1 Thư viện Runtime 2.5.2 Biến môi trường Phần 3: Thực nghiệm: Bài toán nhân hai ma trận kích thước 3.1 Bài toán nhân ma trận 3.2 Source code nhân hai ma trận sử dụng Open MP 3.3 Kết thực 10 Page | Phần 1: Tổng quan lập trình phân tán song song 1.1 Định nghĩa 1.1.1 Thế lập trình tính tốn song song Tính toán song song thực cách đồng thời hai nhiều phép tốn, cơng việc vào thời điểm, thực xử lý khác Tư lập trình song song giống việc nhóm phải giải vấn đề hay nhiệm vụ, thay người làm nhiệm vụ khoảng thời gian khác họ đồng thời thực nhiệm vụ vào thời điểm 1.1.2 Tại phải lập trình tính tốn song song Lập trình, tính tốn song để phát huy cơng năng, hiệu đa xử lý (multiple processor) Lập trình, tính tốn song song lời giải đáp cho toán tăng hiệu xử lý đồng thời rút ngắn thời gian xử lý tính tốn người dùng Giải số toán lớn mà xử lý đơn lõi (single processor) không thực 1.1 Một vài mô hình lập trình song song Một số mơ hình song song thường sử dụng là: - Mơ hình dùng chung nhớ (Shared Memory) Page | - Mô hình luồng( thread) Phần 2: Thư viện mã nguồn mở Open MP 2.1 Giới thiệu Open MP OpenMP (Open Multi – Processing) giao diện lập trình ứng dụng Application Program Interface (API) sử dụng để điều khiển luồng (Thread) dựa cấu trúc chia sẻ nhớ chung Các thành phần OpenMP Page | gồm: Các thị biên dịch (Compiler Directive) Thư viện runtime (Runtime Library Rountines) Các biến môi trường (Enviroment Variables) 2.2 Mơ hình lập trình song song Open MP OpenMP sử dụng mơ hình Fork-Join để thực thi cơng việc song song: Trong mơ hình tất chương trình song song bắt đầu với việc xử lý đơn luồng chủ (master thread) Luồng chủ thực thi cách bắt gặp vùng song song (parallel region) FORK: Có nghĩa luồng chủ sau tạo tập luồng song song Và sau đoạn mã vùng song song thực thi song song tập luồng song song vừa tạo JOIN: Khi mà tập luồng song song hoàn thành đoạn mã vùng song Page | song chúng đồng kết thúc sau công việc lại thực luồng chủ 2.3 Chỉ thị Open MP Khuôn dạng thị: Chỉ thị OpenMP cho dạng sau: # pragma omp directive-name [clause ] newline # pragma omp: Yêu cầu bắt buộc thị OpenMP C/C++ directive-name: Là tên thị phải xuất sau #pragma omp đứng trước mệnh đề [clause ]: Các mệnh đề không bắt buộc thị newline : Yêu cầu bắt buộc với thị tập mã lệnh nằm khối cấu trúc bao bọc thị 2.4 Các mệnh đề Open MP Vì OpenMP lập trình máy tính chia sẻ nhớ chung nên việc hiểu sử dụng phạm vi biến chương trình quan trọng Phạm vi biến bao gồm hai phạm vi toàn cục phạm vi bảo vệ Các biến toàn cục bao gồm biến tĩnh biến file tồn cục cịn biến bảo vệ bao gồm biến số vòng lặp, biến thủ tục gọi từ vùng song song Các mệnh đề phạm vi liệu bao gồm mệnh đề sau: PRIVATE FIRSTPRIVATE LASTPRIVATE SHARED DEFAULT REDUCTION COPYIN 2.5 Thư viện biến môi trường 2.5.1 Thư viện Runtime OpenMP cung cấp thư viện với nhiều hàm chức bao gồm truy vấn liên quan đến số lượng số luồng, thiết lập số lượng luồng sử dụng, semaphores, hàm thiết lập môi trường thực thi Trong C/C++ để sử dụng hàm phải đính vào file thư viện omp.h OMP_SET_NUM_THREADS OMP_GET_NUM_THREADS OMP_GET_MAX_THREADS Page | OMP_GET_THREAD_NUM OMP_GET_NUM_PROCS OMP_IN_PARALLEL OMP_SET_DYNAMIC OMP_GET_DYNAMIC OMP_SET_NESTED OMP_GET_NESTED OMP_INIT_LOCK OMP_SET_LOCK OMP_UNSET_LOCK OMP_TEST_LOCK 2.5.2 Biến môi trường Các biến môi trường dùng để điều khiển thực đoạn mã song song Bao gồm biến môi trường sau: OMP_SCHEDULE OMP_NUM_THREADS OMP_DYNAMIC OMP_NESTE Phần 3: Thực nghiệm: Bài tốn nhân hai ma trận kích thước 3.1 Bài toán nhân ma trận Cho hai ma trân A (m*n) B(n*p): Tích hai ma trận C = A*B thực sau: Page | 3.2 Source code nhân hai ma trận sử dụng Open MP / Matrix Multiple.cpp : Defines the entry point for the console application // // Nhan hai ma tran su dung OpenMP #include "StdAfx.h" #include #include #include #include #define N 4000// Kich thuoc ma tran NxN int main(int argc, char *argv[]) { int **a,**b,**c; // Khai báo mảng chiều so nguyen int tid,nthreads,chunk =10; //nthreads: bien de luu so threads duoc su dung; tid: Bien de luu so thu tu cua thread //chunk = 10: Sử dụng để chia vong lap For double dif; //Bien luu thoi gian tinh toan int i,j,k; // Bien su dung cho vong lap /* Cap phat bo nho cho ma tran A */ a=(int **) malloc(10*N); for( i=0;i