Node *head = &node1;
while (head)
{
#pragma omp task
cout<<head->value<<endl;
head = head->next;
}
#pragma omp parallel
{
#pragma omp single
{
Node *head = &node1;
while (head)
{
#pragma omp task
cout<<head->value<<endl;
head = head->next;
}
}
}
在第一个代码块中,我只是创建了没有并行指令的任务。而在第二个代码块中,我使用了并行指令和单一指令,这种方法在论文中经常见到。 我想知道它们之间有什么区别?顺便说一下,我知道这些指令的基本含义。
我评论中的代码:
void traverse(node *root)
{
if (root->left)
{
#pragma omp task
traverse(root->left);
}
if (root->right)
{
#pragma omp task
traverse(root->right);
}
process(root);
}
traverse()
函数将在活动的parallel
区域内被调用时并行遍历树,在其他情况下则串行遍历。这就是OpenMP的美妙之处 :) (尽管增加了开销) - Hristo Iliev