我开发了一个CFD仿真模型,该模型主要在单个循环中运行。
线性代数求解器中的每个时间步都需要输出一些数据,例如收敛和迭代。
最佳做法是什么?目前我有:
for(int tstep=0;tstep<maxTstep;++tstep)
{
<code>
outFile<<"data"<<endl;
{
在每个循环的末尾将一行写入多个文件的位置。这样做是更好的做法吗?
for(int tstep=0;tstep<maxTstep;++tstep)
{
<code>
outputVector.push_back("data");
}
for(int i=0;i<outputVector.size();++i) outFile<<outputVector[i]<<endl;
从而将输出数据一次性添加到向量中,然后写入文件中?
最佳答案
唯一正确的答案是将两种方法与生产构建设置进行比较。凭直觉,我不明白为什么vector
方法会更快-我希望它会更慢。
当前的瓶颈可能是使用std::endl
,它会强制将任何缓冲区刷新到其目的地。用\n
替换它,最后只冲洗一次-这样可以大大提高速度。例如。
for(int tstep=0;tstep<maxTstep;++tstep)
{
<code>
outFile<<"data"<<'\n';
}
outFile.flush();