アプリケーションの予測不可能な受信状態でのマルチプロセッサシステムでの典型的な順次「重い」計算の実行時間の予測

Habrの最初の記事を書くというアイデアは、サーバーシステムを作成するための「石の収集」プロセスで生まれました。その主なタスクは次のとおりです。







研究の多くの状況を明確にする必要があります。







計算時間を予測しようとする著者の最初の試みは精度が低かった。 「目による」アルゴリズムでは、平均偏差を最小化するために、Nに対する時間の依存性がべき乗係数を使用して選択されました。 このようなテスト計算の結果、あまり快適な結果は得られませんでした。

N リアルタイム(秒) 推定時間(秒)
417 9.60 5.04±0.96
689 26,20 18.33±3.50
1165 78.40 70.56±13.48
2049 264.60 300.34±57.40
3001 654.20 799.24±152.74
3341 875.80 1,052.50±201.13
4769 2323.60 2 621.69±501.01
5449 3424.10 3 690.10±705.18
6129 4811.80 4 988.97±953.40


よくあることですが、これを助けるために、古典が登場しました。 長い間忘れられていた「補間」、「外挿」という言葉を思い出し、選択された方向の正しさを疑ってインターネットで検索が開始されました。 多くの投稿、記事、その他のリソースが再読されました。 主な結論は次のとおりです。1つの変数の未知の関数の値を予測する問題を解決するために、チェビシェフまたはラグランジュ多項式が最もよく使用されます。 既存の「引数値」のセットに信頼がなく、逆の場合はラグランジュ多項式が適している場合、チェビシェフ多項式を使用するのが理にかなっていることがわかりました(原則として、MNCもそれらを置き換えることができます)。 2番目は必要なものに見えました。 実際、特定のシステムで計算アルゴリズムをテストするための「理想的な」条件を作成し(100%の負荷でカーネルを割り当て)、ラグランジュ多項式を構築するのに十分な統計を収集してみませんか?

ラグランジュ多項式の構築の図例
ラグランジュ多項式.svg

ユーザーによる「 ラグランジュ多項式:Acdx - Image:Lagrangepolys.pngに基づいて自作。 ウィキメディアコモンズの WebサイトからCC BY-SA 3.0でライセンスされています。


一方、ラグランジュ多項式を構築するためにすでに実装されているアルゴリズムは、たとえばここにあります 。 タスクに適応したアルゴリズムは、増加する統計セットに外挿すると同様の(モジュロ偏差)結果を示し始めました(N = 1165の予測では、N = 417およびN = 689でリアルタイムが使用され、N = 2049での予測ではN = 417、N = 689およびN = 1165など):

N リアルタイム(秒) 推定時間(秒)
417 9.60 -
689 26,20 -
1165 78.40 55.25
2049 264.60 253.51
3001 654.20 617.72
3341 875.80 863.74
4769 2323.60 2899.77
5449 3424.10 2700.96
6129 4811.80 5862.79


ラグランジュ多項式で補間すると、N = 2049から結果が印象的でした(1つの測定がサンプルから順次除外され、除外された測定の引数に従って計算が行われました)。

N リアルタイム(秒) 推定時間(秒)
417 9.60 -
689 26.20 2,58
1165 78.40 98.35
2049 264.60 245.74
3001 654.20 664.15
3341 875.80 862.91
4769 2323.60 2,407.75
5449 3424.10 3251,71
6129 4811.80 -


実際、N = 689およびN = 1165の場合、予測値の実際の値からの偏差はそれぞれ約90%および25%でしたが、これは許容できませんが、N = 2049以降では、偏差は1.5-7%以内に維持されました良い結果として扱います。



多項式: F(x)= -5.35771746746065e-22 * x ^ 7 + 1.23182612519573e-17 * x ^ 6-1.14069960055193e-13 * x ^ 5 + 5.44407657742344e-10 * x ^ 4-1.39944148088413e-6 * x ^ 3 + 0.00196094886960409 * x ^ 2-1.22001773413031 * x + 263.749105425487

必要に応じて、アルゴリズムの次数をわずかに変更することにより、多項式の次数を必要なものに減らすことができます(原則として、著者のタスクのために3次は不要です)

この多項式のグラフ


多項式は補間であることに注意することが重要です。つまり、範囲[N min ; N max ]の範囲外の値に対しては、予測の質には多くのことが望まれます。







結論: 「理想的な」条件下(特にNの値が大きい場合)で事前に十分な統計を収集し、ラグランジュ多項式を構築し、アプリケーションの受信時に、完成した多項式にN iを代入して計算時間の予測を受け取ることは理にかなっています。



このアプローチは非常に明確ですが、プロプロセッサ(マルチコア)システムについて話すとき、状況はより複雑になります。





これらの側面の分析により、リードタイムを事前に予測することは不可能であることが示されましたが、この値は、計算に割り当てられた現在のコンピューティングリソースに影響するイベントが発生したときに調整し、ユーザーに発行できます。 そのようなイベントは次のとおりです。 新しいタスクの到着とタスク完了 。 これらのイベントが発生すると、予測の修正が提案されます。



画像



これらのイベントのいずれかが発生すると、各タスクに割り当てられたリソースを再計算する必要があることが明らかになります(タスク間のリソースの既知の分布の場合)、または組み込み(言語または操作)手段を使用して何らかの方法でこの値を取得し、残りの時間を再計算する必要があります割り当てられたリソースを考慮に入れます。 ただし、このためには、プロセスによってすでに完了している作業の量を知る必要があります。 そのため、必要な情報を含むストレージ(DBMSのテーブルなど)を整理することをお勧めします。たとえば、次のとおりです。

タスクID 開始する 終わり ラグランジュ(N) 完了 最後のリクエスト 最終修正 現在のCPU
2457 12:46:11 ... ラグランジュ(N) 0.45324 ... 12:46:45 1.00
6574 12:46:40 ... ラグランジュ(N) 0,08399 ... 12:46:45 1.00
2623 12:44:23 12:46:45 ラグランジュ(N) 1.00 ... 12:46:45 0
... ... ... ... ... ... ... ...


次のアルゴリズム(メタコード)を実装することになっています。





結論: 「理想的な」条件の事前予測を行うことで、システムの負荷が変化したときに「重い」逐次計算の予測割合を実際に「オンザフライ」で調整し、要求に応じてこれらの値をユーザーに提供できます。



特定の実装には、人生を複雑化または単純化する独自の特性がある場合がありますが、この記事の目的は、デリケートなケースを分析することではなく、読者の公正な裁判に対する上記のアプローチを提供することです(主に実行可能性に関して)。



All Articles