私はクイックソートアルゴリズムのインプレース実装を書いており、それは美しく実行されました(1024要素で0.8ms)。私はboost :: threadを使って試してみたので、複数のスレッドで実装した方が速く実行できると思っていましたが、リストは完全にソートされましたが、私のシーケンシャルバージョン(1539.3ms)よりも1500倍も長くかかりました。私はさまざまな数にスレッドの数を制限しようとしましたが、何もそれは元のバージョンと同じくらい速くするように見えませんでした。これがなぜこのように思われるのでしょうか?誰かが正常にインプレースクイックソートを実装していますか?アドバイスのparallel quicksort boost :: thread
1
A
答えて
3
一般作品:
- 小さなワークロードを並列化しないでください、それは動作しませんが(ちょうどあなたの8ミリ秒にそれを比較し、試してみて、どのくらいのOSは、新しいスレッドを作成するために取るん測ります)。あなたはそのコストを過小評価しています。
- それぞれのスレッドにはまだ大きな作業負荷が必要です。そうでなければシングルスレッドに戻ってください。
- 可能であればをロックしないでください。。ロックすると、CPUに何もしない機会が与えられます。
- 異なるスレッドでデータを共有しないでください。それはありません:「クローズ」は、メモリ内のデータにアクセスしないでください
-
- は、最初の書き込みのため、同じデータにアクセスしない(決して)(フォルス・シェアリング効果)
- タスク・ライブラリーを使用しますスレッドの代わりに(boost.threadpool私は好きな人がいますが、ほかにも同じように良い人がいます)。
- 彼らは(あなたがハイパースレッディングまたは類似を持っている場合は論理プロセッサ)を使用すると、プロセッサを持っているよりも多くのスレッドを実行しないでください、より多くの仕事
- を待っている、作成されたスレッドを殺してはいけません。
- CPUアフィニティを使用して、指定されたコアのスレッドをロックします(使用するOSによって異なります)。
EDIT:1000は本当に小さなあるので、100万個の要素または何かをしてみてください。次に、スレッドごとの効率曲線と配列のサイズを描きます。
関連する問題
- 1. boost :: threadコンパイルエラー
- 2. boost :: threadとメモリモデル
- 3. boost :: threadセグメンテーションエラー
- 4. boost :: threadでクラッシュする
- 5. boost :: threadはスレッドセーフですか?
- 6. boost :: threadのスタックサイズを設定する
- 7. Boost Threadへの未定義の参照
- 8. boost :: thread変数の前方宣言
- 9. boost :: signals2 :: mutexとboost :: thread :: mutexの違いは何ですか?
- 10. boost :: threadはすべての実行で異なる結果を返します
- 11. std :: thread、thread-safety、multi-threading
- 12. boost :: thread :: thread(<未解決のオーバーロードされた関数型>、int) - テンプレートクラスメンバ関数
- 13. Cormen quicksort
- 14. omp parallel対omp parallel
- 15. QuickSort in C++
- 16. QuickSort OutOfBoundsエラー
- 17. 'm'個のジョブを実行するn個のboost :: threadインスタンス
- 18. std :: shared_ptrオブジェクトインスタンスを使ったboost :: threadの作成
- 19. 組み込みARMでセグメンテーションフォールトにつながるBoost :: Thread関数
- 20. std :: boost :: threadでエンコードされたオブジェクトのベクトルはinsde
- 21. C++ boost :: thread、クラス内でスレッドを開始する方法
- 22. cvQueryFrameとboost :: threadを一緒に使用する
- 23. PostThreadMessageのboost :: threadのIDを取得する
- 24. 並列タスクは、pplやOpenMPよりもboost :: threadのほうがパフォーマンスが良い
- 25. PARALLEL submakes
- 26. boost :: threadをboost :: bindで使用すると、無限ループでプログラムがハングします
- 27. boost :: asioとboost :: threadを使用すると「不正なファイル記述子」が表示される
- 28. quicksortが壊れる例
- 29. MemoryBarriersとParallel Extensions
- 30. PayPal Parallel Payment IPN
どのくらいの頻度でスレッドを作成しますか?いくつのスレッドを使用していますか?私の賭け:スレッドを作成し、それらを同期させるコストは報酬よりも大きいです。 –
スレッドの最大数は4です。たとえば、実行スレッドの数が4より少ない場合は、配列が分割されるたびに新しいスレッドを開きます。 – PgrAm
ここでは、有用なデータポイントを得るための練習です:マルチスレッドコードを取るが、スレッド数の制限を1に設定する。 – Hurkyl