Tìm hiểu về OpenMP trong lập trình song song

24 4 0
Tìm hiểu về OpenMP trong lập trình song song

Đ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

Trong mô hình này tất cả các chương trình song song đều bắt đầu với việc xử lý đơn bởi một luồng chủ (master thread) FORK: Có nghĩa là luồng chủ sau đó sẽ tạo ra một tập các luồng song song. Và sau đó đoạn mã trong vùng song song được thực thi song song bởi tập luồng song song vừa tạo ra. JOIN: Khi mà tập luồng song song đã hoàn thành đoạn mã trong vùng song song chúng sẽ được đồng bộ và kết thúc rồi sau đó công việc lại được thực hiện bởi luồng chủ

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THỰC PHẨM TP HCM KHOA CƠNG NGHỆ THƠNG TIN LẬP TRÌNH SONG SONG VỚI OPENMP OpenMP gì? Mơ hình lập trình nào? Nó có cấu trúc sao? Nhóm Đặng Quốc Hải : 2001170046 Thái Kim Hùng : 2001170064 Nguyễn Hữu Trọng : 2001170205 Phạm Thị Thanh Thanh : 2001170171 Mục lục  Giới thiệu OpenMP gì?   Mơ hình lập trình song song OpenMP   Cấu trúc chương trình  Các loại thị OpenMP  Các hàm OpenMP biến môi trường  Cách sử dụng ví dụ  Phần câu hỏi phản biện OpenMP ? 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 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) OpenMP thư viện, giúp cho người lập trình đơn giản mềm dẻo để phát triển chương trình song song chạy máy PC hỗ trợ nhiều xử lý Mơ hình lập trình song song OpenMP   *Mơ hình fork-Join: 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)   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 song chúng đồng kết thúc sau cơng việc lại thực luồng chủ   Cú Pháp cấu trúc song song 2.#pragma omp theo sau thông số kết thúc ký hiệu xuống dòng 1.Tất dẫn OpenMP C/C++ dùng thông qua Chỉ thị Parallel -Với OpenMP, thị bắt đầu #pragma omp   -Chỉ thị #pragma omp parallel cho biết câu lệnh khối thực thi song song thread máy Chương trình sẻ xuất dòng:”OpenMP:     *Lưu ý: – Chương trình sử dụng hàm thư viện, nên phải có #include   Hello” máy có thread Chỉ thị Parallel For Chỉ thị chia công việc vịng lặp for cho thread   • Trên máy có thread, với 12 câu lệnh lặp phân chia cho thread đảm trách câu lệnh   • Câu lệnh printf giá trị 0, 1, (của vòng lặp) thực thread thứ I   • Câu lệnh in giá trị 3, 4, thread thứ II   • Câu lệnh in giá trị 6, 7, thread thứ III   • Câu lệnh in giá trị 9, 10, 11 thread thứ IV     Kết thread xuất số cần print (4 x = 12 số)   Chỉ thị Section   Ví dụ cách viết code: Dùng để phần mã vùng song song chia cho luồng thực Trong #pragma omp sections [clause ] newline private(list) firstprivate(list) lastprivate(list) reduction(operator:list) nowait { #pragma omp section newline structured_block #pragma omp section newline structured_block   phạm vi thị SECTIONS có thị SECTION Mỗi SECTION thực luồng tập luồng SECTION khác thực luồng khác Chỉ thị SINGLE Chỉ đoạn mã bao quanh thị thực luồng tập luồng : #pragma omp sections [clause ] newline private(list) firstprivate(list) nowait Structure_block Các luồng khác mà không thực thi đoạn mã thị SINGLE phải đợi đến luồng thực thi đoạn mã thị kết thúc thực công việc ngoai thị SINGLE khơng có mệnh đề NOWAIT đưa Các hàm OpenMP Hàm: OMP_SET_NUM_THREADS: Hàm phải khai báo vùng đến vùng song song gần vùng song song thực với số lượng luồng mà đưa Hàm thư viện dùng để thiết lập số lượng luồng để thực vùng song song tiếp sau #include void omp_set_num_threads ( int num_threads ) Các hàm OpenMP 4.Nếu hàm gọi từ vùng trả lại kết 1.Hàm: OMP_GET_NUM_THREAD S #include int omp_get_num_thread () 2.Hàm gọi từ vùng song Khi gọi trả số lượng luồng thực vùng song song Các hàm OpenMP *Hàm OMP_GET_MAX_THREADS:   Hàm trả giá trị lớn giá trị trả hàm OMP_GET_NUM_THREADS #include //thư viện int omp_get_max_threads ( ) //khuông mẫu Hàm gọi vùng lẫn vùng song song   *Hàm OMP_GET_THREAD_NUM : Hàm trả số luồng thực Chỉ số nằm khoảng từ đến OMP_GET_NUM_THREADS – Và luồng chủ luân mang số #include int omp_get_thread_num () Nếu gọi từ vùng kết trả Ngồi cịn hàm int omp_in_parallel (): kiểm tra xem vùng mã chứa thực song song hay void omp_set_dynamic (int dynamic_thread) :cho phép không cho phép điều chỉnh động luồng thực thi vùng song song int omp_get_dynamic ():kiểm tra xem có điều chỉnh động hay không void omp_set_nested (int nested): cho phép hay không cho phép việc song song lồng int omp_get_nested ():sử dụng để nhận biết xem có song song lồng sẩy khơng void omp_init_lock ():dùng để thiết lập khóa thơng qua biến khóa void omp_destroy_lock() : dùng tách biến khóa từ khóa double omp_get_wtime(): trả thời gian tại, tính giây Một số Biến môi trường setenv giá trị export = giá trị *Cú pháp khai báo biến: 1.OMP_SCHEDULE Biến giống mệnh đề schedule Dùng để lập lịch thực cơng việc vịng lặp luồng thực Ví dụ : setenv OMP_SCHEDULE “ static, 4” Một số Biến môi trường 2.OMP_NUM_THREADS Biến giống hàm thư viện omp_set_num_threads() Dùng để thiết lập số lượng luồng thực vùng song song Ví dụ: setenv OMP_NUM_THREADS 3.OMP_DYNAMIC: Biến dùng để thiết lập điều chỉnh động luồng Nó nhận hai giá trị TRUE FALSE Nếu giá trị TRUE tức có cho phép điều chỉnh động luồng thực thi vùng song song, ngược lại không cho phép điều chỉnh động luồng thực thi vùng song song Ví dụ : setenv OMP_DYNAMIC TRUE CÁCH SỬ DỤNG VÀ VÍ DỤ Cách sử dụng thư viện OpenMP Visual Studio Ví dụ minh họa Cách sử dụng thư viện OpenMP Có thể enable IDE cách tạo Project Properties → C/C+ + → Language → OpenM P set Yes (/openmp) Cách sử dụng thư viện OpenMP Ví dụ minh họa Ví dụ minh họa Từ kết thấy vòng lặp for chia thành thread, thread xử lí phần (khơng giao nhau) vịng lặp Chính dịng định vịng lặp for tự động chạy song song (ở cpu máy tơi có nhân nên có thread chạy) So với chương trình c++ bình thường, đoạn code có thêm dịng #pragma omp parallel for

Ngày đăng: 15/09/2023, 21:47

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

Tài liệu liên quan