openmp表示块错误

时间:2012-02-13 17:05:55

标签: c openmp

为什么openmp会给我这个错误: -

错误:对于在'{'标记

之前预期的语句
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
#include <unistd.h>

int main (int argc, char *argv[]) 
{

#pragma omp parallel 
{

int a[100],b[100],c[100];
int i =0;

    for(; i < 100; i++){
    a[i] = i;
    b[i] = i;
    }

    #pragma omp parallel for schedule(static,5)
    {
    int i = 0;
        for( ; i < 100 ; i++){ // this is the for loop that is referred in the error message
    c[i] = a[i] + b[i];
    }

    }

}

printf("Outside parallel block \n");

}

3 个答案:

答案 0 :(得分:5)

首先,第二个OpenMP pragma不应该有“并行”;你已经打开了一个并行块,你现在需要分享for循环的工作。

其次,你不能用并行来封闭一般块;它必须是for循环。如果您确实需要与上面使用的i不同的#pragma omp for schedule(static,5) for (int i=0; i < 100; i++) { c[i] = a[i] + b[i]; } ,请执行以下操作:

{{1}}

答案 1 :(得分:2)

这是我发布到this问题的答案,之后才意识到它与此问题重复。由于它以某种方式扩展了这里已经给出的答案,我将其重新安置。

parallel for是一个组合指令。它将parallelfor组合在一个指令中,从而节省了一些空间。

#pragma omp parallel for shared(sum) private(i,j,k)
...

基本上是

的简写符号
#pragma omp parallel shared(sum) private(i,j,k)
{
   #pragma omp for
   ...
}

private子句也可以归因于for指令)

由于for指令的语法要求for - 循环紧跟,因此相同的语法要求适用于parallel for指令。换句话说,上面的...只能是for - 循环及其关联的(块)正文:

#pragma omp parallel for ...
for (...)
{
   ...
}

在块中包含for - 循环是错误的。但是,将整个并行区域放在块内是不可能的。以下是完全有效的语法:

{
   #pragma omp parallel for ...
   for (...)
   {
      ...
   }
}

答案 2 :(得分:1)

这样做

int i;
#pragma omp parallel for schedule(static,5)
for (i=0;...