【发布时间】:2014-08-28 09:15:39
【问题描述】:
我正在用 MPI 编写一个 c++ 程序(C 接口,没有 boost 等)。在我的程序中,我有很多输出,要么是 cout,要么是文件,它们只在等级 0 上完成。有没有避免的好方法
写if (rank == 0) cout << string?
在我的计算机上使用我的 MPI 实现有两种方法,但在我看来,这两种方法都很不稳定:
if (rank != 0)
cout.setstate(ios_base::badbit);
这有效地禁用了除 0 之外的所有等级的输出,但是否允许?这样做会不会有问题?
另一个想法是创建一个未打开的ofstream,并将输出重定向到那里。
ostream* os;
ofstream nullstream;
if (rank == 0)
os = &cout;
else
os = &nullstream;
*os << "rank " << rank << endl;
这会使 nullstream 处于错误状态,但实际上也会禁用所有非 0 等级的输出...
这个问题对我来说似乎很常见,所以如果其他地方已经回答了这个问题,我很抱歉。我没有通过搜索找到答案,并且很高兴将任何重定向到现有问题。
【问题讨论】: