Thư viện Runtime (Runtime Library Routine)

Một phần của tài liệu Tìm hiểu OpenMP và ứng dụng (Trang 46 - 50)

OpenMp cung cấp một thư viện với rất nhiều các hàm chức năng bao gồm các truy vấn liên quan tới số lượng, chỉ số, thiết lập các luồng được thực thi trong chương trình và các hàm thiết lập môi trường thực thi giúp người lập trình dễ dàng sử dụng và quản lý chương trình ứng dụng song song của mình. Hầu hết các hàm thư viện chứa trong tệp tiêu đề omp. h, do vậy để sử dụng được các thư viện này, khi khai báo tệp tiêu đề chúng ta phải khai báo #include <omp. h> 2.5.1 OMP_SET_NUM_THREADS

Hàm thư viện này dùng để thiết lập tổng số luồng thực thi trong vùng song song tiếp theo. Khuôn mẫu của hàm này có dạng.

void omp_set_num_threads(int)

Trong đó:

 int là một số nguyên, là tổng số luồng cần được tạo để thực hiện vùng song song.

Hàm thư viện này được khai báo trong vùng tuần tự trước vùng mã song song mà vùng mã này có số luồng thực thi cần được tạo lập. Một vấn đề đặt ra là cần phải tạo ra bao nhiêu luồng cho phù hợp với bộ xử lý, số luồng tối đa có thể tạo ra là bao nhiêu. Thông thường nguời lập trình thường tạo số luồng bằng với số bộ xử lý và như vậy mỗi bộ xử lý sẽ thực hiện một luồng khác nhau, tuy nhiên chúng ta có thể tạo số luồng lớn hơn nhiều so với số bộ xử lý nhưng giới hạn không quá 64 luồng.

2.5.2 OMP_GET_NUM_THREADS

Hàm này trả về giá trị là tổng số luồng được thực thi trong vùng mà nó được gọi. Khuôn mẫu của hàm này có dạng:

Nếu hàm này được gọi trong vùng tuần tự nó sẽ trả về giá trị 1 điều đó có nghĩa là chỉ có một luồng được thực thi. Nếu hàm này được gọi trong vùng song song nó sẽ trả về giá trị là tổng số luồng được thực thi trong vùng song song đó.

2.5.3 OMP_GET_THREAD_NUM

Hàm này trả về giá trị là chỉ số của luồng đang thực thi trên đoạn mã mà hàm này được gọi. Chỉ số của luồng bắt đầu từ 0 tới tổng số luồng -1. Khuôn mẫu của hàm này có dạng:

int omp_get_thread_num(void)

2.5.4 OMP_GET_MAX_THREADS

Hàm này cũng tương tự như hàm omp_get_num_threads() tuy nhiên nó khác hàm omp_get_num_threads() ở chỗ nó sẽ trả về giá trị lớn nhất là số luồng có thể tạo ra trong vùng song song. Khuôn mẫu của hàm này được cho bởi:

int omp_get_max_threads()

2.5.5 OMP_GET_NUM_PROCS

Hàm này trả về giá trị là số bộ xử lý đang được thực thi của hệ thống. Khuôn mẫu của hàm này có dạng:

int omp_get_num_procs()

Hàm này được gọi trong vùng tuần tự.

2.5.6 OMP_IN_PARALLEL

Hàm này kiểm tra xem sự thực thi của các luồng có phải là song song hay không. Khuôn mẫu của hàm này có dạng:

int omp_in_parallel().

Hàm này được gọi từ vùng song song và nếu các luồng thực thi đoạn mã song song, hàm sẽ trả về giá trị khác 0. Nếu đoạn mã được thực hiện tuần tự nó sẽ trả về giá trị bằng 0.

2.5.7 OMP_SET_DYNAMIC

Hàm này cho phép hay không cho phép có sự điều chỉnh động các luồng trong vùng song song. Khuôn mẫu của hàm này có dạng như sau:

void omp_set_dynamic(int dynamic_thread)

Nếu dynamic_thread khác 0 có nghĩa là cho phép sự điều chỉnh động các luồng xảy ra có nghĩa là các luồng có thể thực thi hơn một vùng song song. ngược lại không cho phép sự điều chỉnh động các luồng.

2.5.8 OMP_GET_DYNAMIC

Hàm này dùng để kiểm tra xem có sự điều chỉnh động của các luồng hay không. Khuôn mẫu của hàm này có dạng như sau.

int omp_get_dynamic()

Nếu hàm này trả về giá trị khác 0 nghĩa là có sự điều chỉnh động giữa các luồng, ngược lại không có sự điều chỉnh động giữa các luồng. (adsbygoogle = window.adsbygoogle || []).push({});

2.5.9 OMP_SET_NESTED

Hàm này cho phép hay không cho phép việc song song lồng. Khuôn mẫu của hàm này có dạng:

void omp_set_nested(int nested)

Hàm này được gọi cả trong vùng tuần tự lẫn song song. Đối số nested trong hàm này là số luồng được phép lồng trong vùng song song. Nếu nested bằng 0 tức là không cho phép sự song song lồng xảy ra, ngược lại nếu đối số của nested khác 0 thì sự thực hiện song song lồng sẽ xảy ra.

2.5.10 OMP_GET_NESTED

Hàm này dùng để kiểm tra xem có sự song song lồng xảy ra hay không. Khuôn mẫu của hàm này có dạng:

hàm này bắt buộc phải được gọi trong vùng có đoạn mã song song lồng. Nếu hàm trả về giá trị khác 0 nghĩa là có việc song song lồng xảy ra, ngược lại hàm trả về giá trị bằng 0.

2.5.11 OMP_INIT_LOCK

Hàm này dùng để thiết lập một khoá thông qua các biến khoá. Khuôn mẫu của hàm này có dạng:

void omp_init_lock(omp_lock_t *lock)

void omp_init_nest_lock(omp_nest_lock_t *lock)

2.5.12 OMP_DESTROY_LOCK

Hàm này dùng để tách ra các biến khoá từ bất kỳ khoá nào. khuân mẫu của hàm này có dạng như sau:

void omp_destroy_lock(omp_lock_t *lock) void omp_destroy_nest_lock(omp_lock_t *lock)

2.5.13 OMP_SET_LOCK

Hàm này dùng để bắt buộc sự thực hiện của các luồng phải chờ đợi khi khoá được mở với giả sử rằng các luồng đó được quyền sở hữu khoá đó. Khuôn mẫu của hàm có dạng như sau:

void omp_set_lock(omp_set_t *lock)

void omp_set_nest_lock(omp_set_nest_t *lock)

2.5.14 OMP_UNSET_LOCK

Hàm này dùng để giải thoát sự thực hiện của các luồng vào khóa. Khuôn mẫu của hàm này có dạng như sau:

void omp_unset_lock(omp_unset_t *lock)

2.5.15 OMP_TEST_LOCK

Hàm này được sử dụng để cố gắng thử dặt một khoá. Nếu thành công nó sẽ trả về giá trị khác 0 ngược lại nó trả về giá trị bằng 0. Khuôn mẫu của hàm này có dạng:

int omp_test_lock(omp_lock_t *lock) int omp_test_nest_lock(omp_nest_t *lock)

Một phần của tài liệu Tìm hiểu OpenMP và ứng dụng (Trang 46 - 50)