我对omp single
和omp task
指令感到困惑。我读过几个使用两者的示例。以下示例展示如何使用任务构造处理链接列表的元素。
1 #pragma omp parallel
2 {
3 #pragma omp single
4 {
5 for(node* p = head; p; p = p->next)
6 {
7 #pragma omp task
8 process(p);
9 }
10 }
11 }
我不理解这个例子中的并行性。使用omp single
,只有一个线程会执行与single构造相关的结构化块,是这样吗?在此示例中,第4-10行是与single构造相关的结构化块,它只能执行一次,那么为什么我们可以在此结构化块内使用omp task
?它怎么能以并行方式工作?