【问题标题】:Iterations indices processed by OpenMP threadsOpenMP 线程处理的迭代索引
【发布时间】:2017-10-15 08:11:56
【问题描述】:

我正在运行一个带有 openmp 静态负载平衡的 for 循环。我想打印每个线程处理的第一个和最后一个迭代(也就是每个线程的i 的第一个和最后一个值)。 循环如下所示:

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

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

【问题讨论】:

    标签: c multithreading parallel-processing multiprocessing openmp


    【解决方案1】:

    只需记住初始化为标记值 (-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);
    }
    

    【讨论】:

    • 谢谢祖蓝。我可以用lastindex-1替换after last,对吧?
    • 实际上,index 显示了在循环中处理的最后一个i(例如99 代表n=100)。请注意,您不能直接使用i,因为根据 OpenMP 标准,它的值通常是未指定的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    相关资源
    最近更新 更多