我开发了一种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;
将输出数据添加到向量中,然后一次性写入文件?
答案 0 :(得分:2)
唯一正确的答案是衡量并将两种方法与生产构建设置进行比较。直觉上,我不明白为什么vector
方法会更快 - 我希望它更慢。
可能你当前的瓶颈是使用std::endl
,它会强制将任何缓冲区刷新到目的地。将其替换为\n
并且仅在结束时冲洗一次 - 这应该会给您带来相当大的加速。 E.g。
for(int tstep=0;tstep<maxTstep;++tstep)
{
<code>
outFile<<"data"<<'\n';
}
outFile.flush();
答案 1 :(得分:0)
如果“数据”相对较小,则方法#1和&amp; #2的表现非常相似。
如果“data”很大,例如几百字节或更高,那么方法#1会更好,因为它避免了将数据分配和复制到outputVector
(除非这是必要的)。