ファイルへの書き込みでいくつかの問題が発生しました。つまり、十分な速度で書き込めません。
説明すると、私の目標は、ギガビット イーサネット経由で受信するデータ ストリームをキャプチャし、単純にファイルに保存することです。
生データは 10MS/s のレートで受信され、バッファに保存され、続いてファイルに書き込まれます。
以下は、コードの関連セクションです。
std::string path = "Stream/raw.dat";
ofstream outFile(path, ios::out | ios::app| ios::binary);
if(outFile.is_open())
cout << "Yes" << endl;
while(1)
{
rxSamples = rxStream->recv(&rxBuffer[0], rxBuffer.size(), metaData);
switch(metaData.error_code)
{
//Irrelevant error checking...
//Write data to a file
std::copy(begin(rxBuffer), end(rxBuffer), std::ostream_iterator<complex<float>>(outFile));
}
}
私が直面している問題は、サンプルをファイルに書き込むのに時間がかかりすぎることです。約 1 秒後、サンプルを送信するデバイスは、バッファがオーバーフローしたことを報告します。std::copy(...)
コードの簡単なプロファイリングの後、実行時間のほぼすべて(正確には時間の 99.96%)が費やされます。この行を削除すると、オーバーフローが発生することなく、プログラムを何時間も実行できます。
とはいえ、書き込み速度を向上させる方法についてはかなり困惑しています。このサイトのいくつかの投稿に目を通しましたが、(速度に関して) 最も一般的な提案は、私が既に行ったように、std::copy
.
お役に立てれば、このプログラムを Ubuntu x86_64 で実行しています。任意の提案をいただければ幸いです。