2009-07-29 8 views
1

私はいくつかの大きなファイル(数ギガバイトから数百ギガバイトまで)を探していて、特定の文字列が見つかるたびに見つけようとしています。並列検索を行うとき、メモリ帯域幅が制限要因になるのはいつですか?

私はこれを並行して動作させることを検討しており、いくつか質問があります。

  1. どうすればよいですか?ファイルが大きすぎるので、ファイル全体をメモリにコピーできません。複数のFILE *ポインタは機能しますか?

  2. ディスクの帯域幅がCPUではなく制限要因になる前に、いくつのスレッドをファイルに置くことができますか?これを回避するにはどうしたらいいですか?

現在、私が考えていたことは、私はそれぞれの保存ファイルを介して、0%、25%、50%、および75%の方法のいずれかでのFILE *で4つのスレッド、タスクそれぞれを使用して、必要がありますされ、その結果をファイルまたはメモリに格納し、結果を最終ステップとして収集します。このアプローチでは、帯域幅によっては、スレッドを簡単に追加でき、スピードアップの可能性もあります。

あなたはどう思いますか?

編集:私がメモリ帯域幅を言ったとき、私は実際にディスクI/Oを意味しました。申し訳ありません。

+2

ボトルネックがディスクI/Oにない場合は、クイックハードドライブが必要です。 – balpha

+0

私の考えはまさに:) –

+0

ハードウェアが追いついていない場合、帯域幅(I/Oまたはメモリ)がボトルネックになります。どの種類が*ハードウェア*に依存しているか。あなたのコンピュータを私に送ってください。私はあなたのためにそれをテストします。あるいは、信頼できる結果を得るための唯一の方法なので、自分のシステムで自分で試すこともできます。一般的な答えはありません。 – jalf

答えて

6

この新しい改訂版の質問では、答えは「ほぼ直ちに」です。ハードディスクは、同時にディスク上の2か所から読み取ることはあまりよくありません。 :)複数のハードドライブがあり、それらのファイルを分割した場合、おそらくいくつかのスレッドを利用できます。公正だとはいえ、私はディスクの速度がであり、すでにの制限要因であると言います。私はあなたのディスクがプロセッサが処理できるよりも速くデータを読み取ることができることを非常に疑っています。

+1

RAID構成で複数セクタの読み取り速度が大幅に向上しましたか? – xtofl

+1

はい、適切なRAID構成は本質的に複数のディスクにファイルを分割するのと同じことを行います。また、ソリッドステートディスクは、スピンする必要がないために複数のセクタから一度に読み込むことができるため、大幅な改善をもたらすと私は考えています。だから私は彼のハードウェアをアップグレードする能力についてより多くの情報を求めました。私はI/Oがおそらくおそらくボトルネックになると思う。プロセッサはFAST FAST FASTです。 –

1

メモリの帯域幅がディスクIOの制限と同じくらい大きな問題になるかどうかは疑問です。ほとんどのハードウェアを使用すると、非常に各スレッドがディスクから読み取ることができますどのように制限することになるだろう -

あなたはスループットを最大化したい場合は、仕事だ一つのスレッドが(ディスクIOを処理するためにある必要がありような何かをする必要があるかもしれませんほとんどのハードウェアは一度に1つのチャンクしかディスクからストリーミングできないため、これが制限要因になります)。次に、これを使用して、処理するスレッドプールの種類によって、メモリのチャンクを個々のスレッドにプッシュすることができます。

私の推測によれば、処理速度は速くて、おそらくディスクIOよりはるかに高速ですが、処理速度が遅い場合、複数の処理スレッドを使用すると処理全体が高速化される可能性があります。

複数のFILE *ポインタは機能しますが、実際には1つしかないより遅くなる可能性があります。ファイルを読み取るための時間スライスが終了するため、ディスク上でさらにジャンプします。

0

SSDドライブを使用している場合。複数のファイルポインタを持つファイルをパラレル検索することで、この問題を克服できます。

関連する問題