Chỉ thị section
Chỉ thị section trong OpenMP được sử dụng để phân chia đoạn mã trong khối sections thành các phần riêng biệt. Khi kết hợp với #pragma omp parallel sections, các đoạn mã này sẽ được xử lý song song. Mỗi section sẽ được thực thi một lần bởi một luồng (thread) duy nhất, và các section khác nhau có thể được thực thi bởi các luồng khác nhau. Tuy nhiên, nếu một luồng chạy nhanh Enough, nó có thể thực thi nhiều section. Bibliothèque OpenMP sẽ chịu trách nhiệm phân bổ luồng cho các section khác nhau.
#include <iostream>
#include <omp.h>
using namespace std;
int main(int argc, char* argv[]) {
int thread_id[5];
#pragma omp parallel sections
{
#pragma omp section
{
thread_id[0] = omp_get_thread_num();
}
#pragma omp section
{
thread_id[1] = omp_get_thread_num();
}
#pragma omp section
{
thread_id[2] = omp_get_thread_num();
}
#pragma omp section
{
thread_id[3] = omp_get_thread_num();
}
#pragma omp section
{
thread_id[4] = omp_get_thread_num();
}
}
for (int i = 0; i < 5; ++i) {
cout << "Phần section " << i << " được xử lý bởi luồng " << thread_id[i] << endl;
}
return 0;
}
Output:
Xem kết quả
Phần section 0 được xử lý bởi luồng 0
Phần section 1 được xử lý bởi luồng 0
Phần section 2 được xử lý bởi luồng 1
Phần section 3 được xử lý bởi luồng 2
Phần section 4 được xử lý bởi luồng 3
Chỉ thị single
Chỉ thị #pragma omp single được sử dụng để chỉ định rằng đoạn mã ngay sau đó sẽ được thực thi唯一 một lần trong miền song song hiện tại. Dù có bao nhiêu luồng đang chạy, chỉ một luồng duy nhất sẽ thực thi đoạn mã này, trong khi các luồng khác sẽ bỏ qua nó. Chỉ thị này rất hữu ích trong việc 초기 hóa biến chia sẻ, thiết lập các khóa (lock), hoặc thực thi các tác vụ chỉ cần một luồng. Ví dụ:
#include <iostream>
#include <omp.h>
using namespace std;
int main(int argc, char* argv[]) {
#pragma omp parallel
{
cout << "Luồng " << omp_get_thread_num() << endl;
#pragma omp single
{
cout << "Chỉ thực thi một lần trên luồng " << omp_get_thread_num() << endl;
}
}
return 0;
}
Output:
Xem kết quả
Luồng 0
Luồng 1
Luồng 2
Luồng 3
Chỉ thực thi một lần trên luồng 2