0

我有类似的 C++ 程序和 openMP 用法

#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”功能?

4

1 回答 1

2

我会惊讶地看到printf它比 iostreams 慢...(考虑到您正在使用std::endl它强制刷新缓冲区,更是如此)但无论如何,您可以使用 astringstream一次构造输出,然后调用其中一个printfstd::cout <<一次与已经建成的生产线。

于 2012-06-12T19:02:26.820 回答