【问题标题】:openmp parallel for over struct members?结构成员的openmp并行?
【发布时间】:2012-02-13 10:25:19
【问题描述】:

是否可以使用 OpenMP 对 stuct 成员进行并行循环? 我用 GCC 尝试了以下操作

point_t p;
double sum;
#pragma omp parallel for private(p) reduction(+: sum)
for (p.x = 0; p.x < N; p.x++) {
    for (p.y = 0; p.y < N; p.y++) {
            sum += foo(p);
    }
}

但这给了我一个编译错误

    error: expected iteration declaration or initialization before ‘p

这是 GCC 错误还是不是 OpenMP 规范的一部分?

【问题讨论】:

    标签: gcc struct parallel-processing openmp


    【解决方案1】:

    我认为这在 OpenMP 中是不允许的; parallel for 需要循环一个变量,而不是一个通用的左值。做

    int x, y;  // or whatever you store in a point_t
    double sum;
    
    #pragma omp parallel for reduction(+:sum)
    for (x=0; x<N; x++)
        for (y=0; y<N; y++) {
            point_t p(x, y);  // assuming C++
            sum += foo(p);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-11
      • 2017-10-15
      • 1970-01-01
      • 2012-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多