私はいくつかの大きなファイル(数ギガバイトから数百ギガバイトまで)を探していて、特定の文字列が見つかるたびに見つけようとしています。並列検索を行うとき、メモリ帯域幅が制限要因になるのはいつですか?
私はこれを並行して動作させることを検討しており、いくつか質問があります。
どうすればよいですか?ファイルが大きすぎるので、ファイル全体をメモリにコピーできません。複数のFILE *ポインタは機能しますか?
ディスクの帯域幅がCPUではなく制限要因になる前に、いくつのスレッドをファイルに置くことができますか?これを回避するにはどうしたらいいですか?
現在、私が考えていたことは、私はそれぞれの保存ファイルを介して、0%、25%、50%、および75%の方法のいずれかでのFILE *で4つのスレッド、タスクそれぞれを使用して、必要がありますされ、その結果をファイルまたはメモリに格納し、結果を最終ステップとして収集します。このアプローチでは、帯域幅によっては、スレッドを簡単に追加でき、スピードアップの可能性もあります。
あなたはどう思いますか?
編集:私がメモリ帯域幅を言ったとき、私は実際にディスクI/Oを意味しました。申し訳ありません。
ボトルネックがディスクI/Oにない場合は、クイックハードドライブが必要です。 – balpha
私の考えはまさに:) –
ハードウェアが追いついていない場合、帯域幅(I/Oまたはメモリ)がボトルネックになります。どの種類が*ハードウェア*に依存しているか。あなたのコンピュータを私に送ってください。私はあなたのためにそれをテストします。あるいは、信頼できる結果を得るための唯一の方法なので、自分のシステムで自分で試すこともできます。一般的な答えはありません。 – jalf