error: expected ‘#pragma omp’ clause before ‘{’ token
error: expected ‘#pragma omp’ clause before ‘{’ token
我有一叠。每次从里面弹出一个元素,处理这个元素,根据一些结果判断这个元素是否应该被压回栈
代码如下。我使用 OpenMP 任务构造来实现并行性,因为不同元素的处理过程是独立的。但是 #pragma omp parallel
和 #pragma omp single
两行我都得到了 error: expected ‘#pragma omp’ clause before ‘{’ token
。我不知道原因。我也很好奇我使用 OpenMP 任务构造的正确性。
int processing_ele;
omp_set_num_threads(2);
#pragma omp parallel {
#pragma omp single {
while (!stack_ele.empty()) {
// pop
int processing_ele = stack_edge_id.top();
stack_ele.pop();
// handle
#pragma omp task
Test(processing_ele);
if (global_res[processing_ele].need_to_push) {
stack_ele.push(processing_elec);
}
}
}
}
在OpenMP specification你可以阅读
The syntax of an OpenMP directive is as follows:
#pragma omp directive-name [clause[ [,] clause] ... ] new-line
请注意指令末尾的新行,因此{
必须在新行中:
#pragma omp parallel
{
#pragma omp single
{
或
#pragma omp parallel
#pragma omp single
{
我有一叠。每次从里面弹出一个元素,处理这个元素,根据一些结果判断这个元素是否应该被压回栈
代码如下。我使用 OpenMP 任务构造来实现并行性,因为不同元素的处理过程是独立的。但是 #pragma omp parallel
和 #pragma omp single
两行我都得到了 error: expected ‘#pragma omp’ clause before ‘{’ token
。我不知道原因。我也很好奇我使用 OpenMP 任务构造的正确性。
int processing_ele;
omp_set_num_threads(2);
#pragma omp parallel {
#pragma omp single {
while (!stack_ele.empty()) {
// pop
int processing_ele = stack_edge_id.top();
stack_ele.pop();
// handle
#pragma omp task
Test(processing_ele);
if (global_res[processing_ele].need_to_push) {
stack_ele.push(processing_elec);
}
}
}
}
在OpenMP specification你可以阅读
The syntax of an OpenMP directive is as follows:
#pragma omp directive-name [clause[ [,] clause] ... ] new-line
请注意指令末尾的新行,因此{
必须在新行中:
#pragma omp parallel
{
#pragma omp single
{
或
#pragma omp parallel
#pragma omp single
{