c - OpenMP 线程处理的迭代索引

标签 c multithreading parallel-processing multiprocessing openmp

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

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

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

最佳答案

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

#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);
}

关于c - OpenMP 线程处理的迭代索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43998178/

相关文章:

c - 在 C 中释放字符串

c - 指向指针数组的指针指向意外的地址

c - 为什么文件指针为空?

java - 静态和非静态同步,为什么输出结果不同?

c# - 'using' block 线程安全吗?

java - boolean 值流,是真的吗?

c - fflush 在 Visual C++ 2010 上失败

java - 1 个核心上的并行 Java 流

java - 如何仅在处理完 RDD 中的所有分区后才在 Spark Streaming 中接收输入?

multithreading - 使用 QWaitCondition 唤醒线程