我有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;
}
什麼是提供在我的情況下,正確的輸出的最佳方式一樣的C++程序?
我知道,用「printf」代替「cout」解決了這個問題。
但是,當我將「cout」更改爲「printf」時,我的程序執行時間從約80秒增加到約120秒。 我認爲,這對程序的生產力有着足夠的影響。
解決這個問題沒有「printf」的最好方法是什麼?
是否可以在輸出過程中以某種方式鎖定「cout」功能?
您可以考慮在運行時收集一些信息並以某種形式的數據結構存儲它。然後在運行後打印報告。這樣你就不會將你的計算和printint輸出混合在一起。當然,你不會更新「現場」。 – Matthias
是的,當然這是最有效的方法。但主要想法是在運行時打印這些信息。在其他情況下,信息「std :: cout <<」檢查項目「<< j <<」已完成「<< std :: endl;」是無意義的,我可以刪除它,並使用「#pragma omp critical」作爲「std :: cout <<」打印有關step i「std :: endl;」的一些信息 –