由OpenMP线程处理的迭代索引

时间:2017-05-16 09:55:25

标签: c multithreading parallel-processing multiprocessing openmp

我正在使用openmp静态负载平衡运行for循环。我想打印每个线程处理的第一个和最后一个迭代(对于每个线程,a.k.a i的第一个和最后一个值)。 循环看起来像这样:

#pragma omp parallel for schedule(static) private(i)
for(i=0;i<n;i++){
//loop code
}

我很清楚OpenMP doc指定了在静态调度中平均划分的迭代范围,尽管我想打印迭代值。

1 个答案:

答案 0 :(得分:2)

只需记住初始化为标记值(-1)的私有变量中的索引:

#pragma omp parallel
{
    int index = -1;
    #pragma omp for schedule(static)
    for(int i=0; i<n; i++){
        //loop code
        if (index == -1) {
            printf("%d: start %d\n", omp_get_thread_num(), i);
        }
        index = i;
    }
    printf("%d: last %d\n", omp_get_thread_num(), index);
}