スレッドプールを使用してマルチスレッドマージソートを作成したいので、boostライブラリをダウンロードしました。私はC++の初心者であり、ソースで与えられたサンプルプログラムの実行方法を理解するのが難しいです。ここで私はどこからダウンロードしたのですか?http://threadpool.sourceforge.net/ ....ダウンロードセクションにあります...どんな助力もありがとうございます。スレッドプールを使用したBoostライブラリ
1
A
答えて
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)時間を必要とするため効率的ではありません)
関連する問題
- 1. 汎用タスクのためのboost :: asioスレッドプールの使用
- 2. BadaでBoostライブラリを使用
- 3. スレッドプール(.NET、IIS6)を使用したディレクトリアクセス
- 4. CMakeを使ったBuilding Boost Systemライブラリ?
- 5. C++でboostを使ってスレッドプールを作成する方法は?
- 6. boost :: asio、スレッドプールとスレッドの監視
- 7. 標準ライブラリと組み合わせた `boost :: phoenix :: static_cast_`の使用
- 8. タイムゾーン文字列を含むBoost datetimeライブラリを使用した解析エラー
- 9. イベントループまたはスレッドプールを使用したFRPの例
- 10. Boost :: Spiritを使用したカスタムスキップパーサー
- 11. boost :: asioを使用したAF_NETLINK(netlink)ソケット
- 12. Boost :: serializationを使用したXML階層
- 13. Boost :: Pythonを使用した高次プログラミング
- 14. MonodevelopのBoostライブラリ
- 15. BoostライブラリのDoxygenドキュメント
- 16. 任意のBoostライブラリを使った奇妙なNDKコンパイル
- 17. アーチLinuxでのC++ Boost regexライブラリの使用
- 18. boost :: lambdaでboost :: formatを使用する
- 19. Geventでスレッドプールを使用する場合
- 20. BOOSTライブラリの問題C++
- 21. boost :: gil :: color_converted_viewとboost :: gil :: for_each_pixelの使用
- 22. boost :: indirect_iteratorの使用
- 23. 実際の作業でboost :: triboolを使用しましたか?
- 24. `inet_res`ライブラリを使用したエリクサーエラー
- 25. Zendライブラリを使用したGoogleカレンダーAPI
- 26. Pythonライブラリを使用したオーバーレイ画像
- 27. 共有ライブラリを使用したクロスコンパイル
- 28. AndroidでPythonライブラリを使用したい
- 29. ASM Javaライブラリを使用したアンボクシング
- 30. mupdfライブラリを使用したPDFビューア
質問は何ですか? – ronag
マージソートのスレッドバージョンは、おそらくおそらくそのソートがスレッド化されていないにもかかわらず、標準ライブラリに含まれているソートよりも遅くなるでしょう。ソートはすでに数十億分の1秒以内に数十億の整数を処理することができます。スレッディングはソートアルゴリズムよりも高いレベルで行われる方がいいでしょう。 (ただし、試してみてください)) –