如何组织正确的并行程序输出?

时间:2012-06-12 18:54:13

标签: c++ parallel-processing openmp cout

我有类似于使用openMP的C ++程序

#pragma omp parallel for private(i)
for (j=0;j<NUM_STEPS_J) {

    for (i=0;i<NUM_STEPS_I;i++) {

        std::cout << "Print some information about step i" << std::endl;


    }

    std::cout << "Check of item " << j << " finished" << std::endl;
}

在我的情况下提供正确输出的最佳方法是什么?

我知道,使用“printf”代替“cout”可以解决这个问题。

但是当我将“cout”更改为“printf”时,我的程序执行时间从大约80秒增加到大约120秒。 我认为,这对计划的生产力有足够的影响。

没有“printf”解决此问题的最佳方法是什么?

是否可以在输出过程中以某种方式锁定“cout”功能?

1 个答案:

答案 0 :(得分:2)

我会惊讶地看到printf比iostream慢...(考虑到你使用std::endl来强制刷新缓冲区,我会更加惊讶)但无论如何,你可以使用stringstream一次构建输出,然后使用已构建的行调用printfstd::cout <<一次。