3

マルチコア ボックスでは、Java スレッド スケジューラの決定はかなり恣意的であり、スレッドがいつ作成されたか、どのスレッドから作成されたかなどに基づいてスレッドの優先度を割り当てます。

アイデアは、スレッドの優先度をランダムに設定し、最終的にフィットネス関数がプログラムの合計実行時間である最適な優先度に到達する pso を使用してチューニングプロセスを実行することですか?

もちろん、実行中に優先度が変化して最適な優先度関数を見つけるなど、より多くのパラメーターがあります。

アイデアはどれほど実用的で興味深いものですか?および任意の提案。いくつかの背景として、さまざまなプロジェクトで数年間 Java/c/c++ でプログラミングしてきましたが、別の方法として、c でこれに基づいてスレッド スケジューラを作成することもできます。デフォルトのスレッド スケジューラは OS です。

4

2 に答える 2

2

説明したアプローチは静的なアプローチです。つまり、プログラムを数回実行し、スケジューリング ソリューションを考え出し、スケジューリング情報をプログラムに送信する必要があります。

問題は、ほとんどの重要なプログラムでは、そのパフォーマンスが、処理している特定のデータに部分的に依存することです。あるデータ セットのスレッドをスケジュールする最適な方法を見つけたとしても、別のデータ セットの速度が向上するという保証はまったくありません。ほとんどの場合、新しいリリースを行うたびに長くて骨の折れる最適化を実行することは、開発者にとっては価値がありません。 Java とにかく)。

自己学習スレッド スケジューラは良いアイデアだと思いますが、ここでは従来の最適化問題として扱うことはできません。スケジューリングの順序が最適なままであることを確認する (可能性は低い) か、実行時に機能する最適化方法を見つける必要があります。ここでの問題は、スケジューラーのオーバーヘッドがパフォーマンスの向上を台無しにするのにそれほど時間はかからないということかもしれません。

これはやや主観的な質問だと思いますが、全体的にいいえ、うまくいかないと思います。

于 2010-08-06T14:58:23.663 に答える
0

見つけるための最良の方法 -- オープンソース プロジェクトを開始し、人々の使用状況や反応を確認してください。

私には非常に興味深いように思えますが、個人的にはあまり役に立ちません。おそらく、並行プログラミングがこれほど普及し、簡単にできるようになるまでには至っていないのでしょう。

関数型プログラミングの推進により、世界はスレッド同期を可能な限り回避する方向に移行すると思います (したがって、スレッドのスケジューリングが全体的なパフォーマンスに及ぼす影響を少なくします)。

私の個人的な主観的な経験から、ソフトウェアのパフォーマンスの問題のほとんどは、速度低下の 90% を占める 1 つのボトルネック領域を改善することで解決できます。このオプティマイザーは、それを見つけるのに役立つ場合があります。ただし、スケジューリング戦略によって全体的なパフォーマンスがどの程度向上するかはわかりません。

しかし、がっかりしないでください!私はただ薄い空気から話しているだけです。楽しそうなので、とにかく遊んでみませんか :)

于 2010-08-06T07:36:26.540 に答える