我正在阅读Guide to OpenMP而我无法理解omp single
指令。
struct node { int data; node* next; };
extern void process(node* );
void increment_list_items(node* head)
{
#pragma omp parallel
{
#pragma omp single
{
for(node* p = head; p; p = p->next)
{
#pragma omp task
process(p); // p is firstprivate by default
}
}
}
}
为什么omp parallel
在omp single
之前运行?这没有意义吗?是不是并行创建工作者然后单个只是限制为单个线程无论如何功能?当你知道你将在单个线程中使用那些工作者时,这只是处理一些开销吗?