最大 240 のスレッドを持つ Intel Xeon Phi コプロセッサーを使用しており、特定のアプリケーションに使用されるスレッドの数を最小化 (またはパフォーマンスを最大化) しながら、最高の実行時間のパーセンテージ内に収まるように取り組んでいます。たとえば、次の測定値があるとします。
- スレッド | 実行時間
- 240 100秒
- 200 105秒
- 150 107秒
- 120 109秒
- 100 120秒
120 から 150 の間のスレッド数を選択したいと思います。これは、そこでの「パフォーマンス曲線」が安定しているように見え、実行時間の短縮がそれほど重要ではないためです (この場合、測定された最良の時間の約 15% です。私はこれを行いました)。徹底的な検索アルゴリズム (1 から 240 のスレッドを測定) を使用していますが、私の問題は、スレッドの数が少ないと時間がかかりすぎることです (明らかに問題のサイズによって異なります)。
測定回数を減らすために、一種の「二分探索」アルゴリズムを開発しました。基本的に、上限と下限 (0 スレッドと 240 スレッドから始まる) があり、中間の値を取り、240 で測定します。両方の値のパーセント差を取得し、15% 以内の場合 (この値は徹底的な検索の結果を分析した後に選択された) 新しい下限または上限を割り当てます。差が 15% より大きい場合、これは新しい下限 (120-240) であり、それより小さい場合は新しい上限 (0-120) であり、実行時間が改善された場合は、次のように保存します。最高の実行時間。
このアルゴリズムの問題は、まず第一に、これは必ずしも実行時間の並べ替えられた配列ではないことです。問題のサイズによっては、網羅的な検索結果に 2 つの異なる最小値が表示されるため、たとえば 1 つは 80 スレッドで最高のパフォーマンスが得られ、検索の結果、170 スレッドではなく 80 スレッドを返すことができるようにしたいと考えています。ただし、最小値が 1 つしかない他のケースでは、アルゴリズムは予想される値に非常に近い値を検出しました。
誰かが私を助けることができる既存の検索アルゴリズムまたはヒューリスティックについてより良いアイデアを持っているか知っているなら、私は本当に感謝しています.