2010-12-08 9 views
1

スレッドプールを使用してマルチスレッドマージソートを作成したいので、boostライブラリをダウンロードしました。私はC++の初心者であり、ソースで与えられたサンプルプログラムの実行方法を理解するのが難しいです。ここで私はどこからダウンロードしたのですか?http://threadpool.sourceforge.net/ ....ダウンロードセクションにあります...どんな助力もありがとうございます。スレッドプールを使用したBoostライブラリ

+0

質問は何ですか? – ronag

+2

マージソートのスレッドバージョンは、おそらくおそらくそのソートがスレッド化されていないにもかかわらず、標準ライブラリに含まれているソートよりも遅くなるでしょう。ソートはすでに数十億分の1秒以内に数十億の整数を処理することができます。スレッディングはソートアルゴリズムよりも高いレベルで行われる方がいいでしょう。 (ただし、試してみてください)) –

答えて

0

OpenMPは自己管理型スレッドの要件に適しています。 this overviewに含まれるマージソートの例があります。

1

私はその特定のスレッドプールライブラリ(b.t.w.はBoostの一部ではありません)に精通していませんが、スレッドプールの一般的な概念は非常に簡単です。クラスはenqueue(std::function<void()> fn);インターフェイスのようなものでなければなりません。必要な関数オブジェクトを得るために関数をラップするだけです。通常はstd::bindまたはlambda関数のいずれかで行われます。スレッドプールは、実行可能なスレッドがあるまで関数オブジェクトをキューに保持します。その時点で単にfn()が呼び出されます。並列ソートに関しては、クイックソート版を書くことができます。これは、並列化のために非常に適しています。http://en.wikipedia.org/wiki/Quicksort

P.S. std::function、対応するstd::bind、ラムダ関数はC++ 0xの一部です。また、Boostで代替関数を見つけることもできます。

2

スレッドを管理するためのもう1つのツールはTBB Intel Thread Building Blocksです。 マージソートの実装が既にあります。「tbb/parallel_sort.hpp」 (ただし、この実装はスレッドの数に関係なく最小のO(n)時間を必要とするため効率的ではありません)

関連する問題