2011-07-20 1 views
0

非常に大きなテキストファイル(約11 GBのサイズ)を読み込み、機能を実行しようとしています(基本的にファイルを別のセクションに分割しています)。ロード機能を8スレッド程度までマルチスレッド化したり、ロード機能を使用する際には、この特定のソート機能を実行してください。 (私は並べ替え機能について詳しく議論することはできません)。C++でのマルチスレッド化:大きなファイルを読み込んで関数を実行していますか?

これはすべてC++で書かれています。私はラム(私は約60ギガバイト)の面での制限がありません。

+2

を読み取るために、複数のスレッドを割り当てる必要があり権利です。 –

+0

ファイル内のデータのサイズについてもっと詳しく説明し、ここにいくつかのコードを貼り付けることができます。それはあなたの問題のより適切な解決策を提案するのに役立ちます。 –

+1

Hans Passantのコメントによると、ボトルネックはディスクの読み込み速度である可能性があります。たぶんあなたの記憶の一部を取って素敵な大きなVDISKを作るか、高速のSSDを使用してください。これにより、ボトルネックをCPUに戻すのに役立ちます。 –

答えて

0

ファイルを複数のチャンクに分割し、読み込み関数をfseekオフセットに渡すことで、読み込み関数がfseekから始まるファイルから長さ分読み込み(メモリに読み込み)、その情報をスレッド(あなたの秘密ソートアルゴリズムを使用)。それで、ファイルサイズを8で割ってfseekオフセットを計算するか、固定サイズのチャンクを使って処理するファイルコンテンツがなくなるまで読み込むことができます(11GBのHDコンテンツをRAMにマッピングするにはかなりの時間がかかります)。あなたはこれを増分的にやりたいかもしれません)。これはあなたに理にかなっていますか?

+0

うーん...私たちはそれを試すことができます。私たちが今まで試みてきたことは、ユーザーがスレッドの数を入力することであり、ファイルはそのようにチャンクに分割されています。あなたのアイデアは有効と思われ、私はそれを試すことができます。私たちが8つのスレッドを入れて何らかの理由で、2つしか仕事をしていないようですが、1つはほぼ即時に共有し(約1.2 GB)、もう1つは何もしません。私たちのリソースに関しては、私はそこに心配することはありません。 –

+0

私は、ディスクから1GBをロードするのはページ(1GB/4KB)が多いので、ディスクの競合があると推測しています。そのため、OSがこれらの要求を満たすためにはしばらく時間がかかることがあります。実装でfseekを使用しましたか、どのように分割しましたか? –

+0

かなりの可能性がありますが、この解決策は単にディスク読み取りキャッシュを使い果たしてしまい、個々のスレッドが別々の物理的な場所を探しているディスクヘッドを送信するため、すべてが単一のスレッド内にある場合よりも遅くなります。同時読み込みの数にコントローラ制限がある可能性もあります。すべてのビットハードウェアはtbhに依存します。 –

0

スレッドがチャンク内でメモリにロードされ、処理のために各チャンクを独自のスレッドに渡すことができるため、処理をできるだけ早く開始することができます。私は、複数のスレッドが同じファイルから同時に読み込もうとするのは良い考えだとは思わない。

+0

メモリを一度処理するほうが速いですが、ロードするよりも速いですが、次のスレッドが起動する前にスレッドが終了する可能性があります。 I/Oとソートの重さがCPU上にあるかどうかによって異なります。 –

0

解決策1:ヒープ上にメモリを予約し、ファイルを読み取るために1つのスレッドを開始し、読み取り値がDATA_READED/NUMBER_OF_DESIRED_THREADS_FOR_PROCESSINGになるとただちに報告して、メモリから読み込まれたデータブロックを処理するスレッドを開始し、 DATA_READED/NUMBER_OF_DESIRED_THREADS_FOR_PROCESSING

解決策2:NUMBER_OF_DESIRED_THREADS_FOR_PROCESSINGと同じ数のキューを読み込み(ディスクIOの場合は1つのスレッド)、チャンクが読み込まれるときにバッファポインタと処理するデータのサイズを経由してスレッドのキューに作成するロック機構そうすれば、データが利用可能になるとすぐにすべてのスレッドが動作し始めます。

ハンスアンパッサンは、あなたがより多くのディスクを使用することができれば、あなたはあなたがより多くのCPU、ディスクをする必要はありませんチャンク

関連する問題