Metasloy:予測を適用してOSのプログラミングとリソース割り当てを最適化するためのアイデア

こんにちは親愛なる読者。



現在、 「ビッグデータ」について多くの話がありますが、その処理により、さまざまな分野で多くの新しい機会がもたらされるはずです。 この出版物では、一般的に言えば、最終プログラムまたはオペレーティングシステムの操作中に自然に発生する「ビッグデータ」の有用な処理を含む、すでに長年の仕事について少しお話したいと思います。 要するに、少なくともコード実行の時間プロファイルとそのさまざまな内部特性/変数について話している-これらは普遍的(たとえば、OSから要求されたメモリブロックのサイズ)またはローカル(内部プログラム変数)値です。 私は間違いなく興味があると思います:



a)個々のコードフラグメントの実行の時間特性のパラメーター化、つまり、その実行時間の内部変数の値への依存性の検索。



b)他のいくつかの内部プログラム変数の論理的および近似的な数学的依存関係の検索。



最初のアイデアが必要な理由は、おそらく非常に明白です。プログラムの実行を最適化すること、つまり、非常に効率的なアルゴリズムを設計することです。 たとえば、プログラムに並列モードで実行される複数のコンピューティングユニットが含まれている場合、最も効率的な負荷分散(バランシング)を行うには、これらのブロックのおおよその実行時間を予測する機能が必要になる場合があります。 作業ブロックアルゴリズムが複雑な場合、これは非常に重要なタスクです。 次に、特別なサブシステムが役立ちます。まず、変数の値とブロックの実行時間を慎重に収集し、次にこれらの変数の時間のおおよその依存関係を特定し、プログラムがすでに慎重に計画している可能性のある特定の評価関数を提供します(動的に構築します)並列処理の負荷分散。



2番目のアイデアは奇妙に思えるかもしれませんが、少なくとも2つの有用な用途があります。



1.内部変数の1つは、次に割り当てられるメモリブロックのサイズです。 たとえば、プログラムに割り当てられた次のブロックのサイズとその割り当ての瞬間を予測するために(メモリ割り当てを最適化するために)オペレーティングシステムが必要な場合、プログラムがいくつかの変数の値(その裁量で)XとブロックサイズNを報告するサブシステムにも役立ちます。また、サブシステムは要求時間Tを記録します。その後、依存関係N(X)、T(X)を構築し、それらを積極的に使用してリソースの割り当てを最適化し、スワップファイルの必要性を予測します。 第オーダー。 同様に、OSは、ファイル記述子、グラフィックスなど、他の多くのリソースの割り当てと戻りを予測できます。



2.たとえば、数値法の分野(空力方程式の積分など)のアルゴリズムがありますこのアルゴリズムでは、少なくとも大まかな概算結果(スターター用)を取得することが非常に重要な場合があります。修正などの正確な結果の準備ができています。 ここでは、変数と変数の依存関係のモデルが使用されます。 そのため、たとえば、空間内、ブロック内のワークスペースの分解を伴う空力問題の並列ソリューションへのアプローチの1つを実装できます。



ですから、少なくとも述べられているアイデアは有用であることを提案しました。 どのように実装できますか?



予測サブシステムがOSに表示され、頻繁にアイドル状態のCPUコアやビデオカードなどを使用してタスクを解決します。つまり、OSに提供する内部状態のデータに応じて、プログラム実行の時間やその他の特性をシミュレートします(異なる時点での重要な変数の値について)。



試作機



かつて、私はそのようなサブシステムのプロトタイプ(「メタレイヤー」)を開発していました。これは、ランタイムとデータの複雑なモデルを構築することでタスクを解決しました。 最初はモデルは非常に自明ではないと想定されていたので、プログラムによって提供されるデータは常に完全ではなく、実行のルート(変数のメタレイヤーによって提供される値を含む)を追加することが望ましいことを認識しましたデータ(たとえば、/ while / doの内部ネストループの擬似カウンター)。 この問題は、実行中に変数の値の大きなテーブルを分析し、サイクル、遷移、およびサイクル/遷移の条件を検索することで解決しました。 得られた変数(プログラムによって直接表される変数と連動した内部サイクルの補助カウンター)は、これらの変数に対する時間/データの依存性の関数を検索するために直接使用されました。 これは、引数のグループアカウンティング(MGUA)の方法を使用して行われました。



データのメタスレイヤーの受信は、その関数を呼び出すことによって形式化され、プログラムの「ラベル」の識別子と特定の内部変数の値が送信されました。 このデータを使用して、メタレイヤーは遷移/機能依存性の結合モデルを特別な関数の本体(C ++)の形式で構築し、外部コンパイラでダイナミックライブラリ(DLL)にコンパイルし、プログラムに接続して、必要な予測ツールを取得しました。



このアプローチは、いくつかのテストタスクでテストされています。





おわりに



これで、このプロトタイプメタスレイヤーの開発は終了しました(この時間はありませんし、彼の実験のために長い間コードを他の人に転送しました)。 しかし、アイデアは残り、面白いものになり、いつか誰かがそれを完全な形(OSサブシステムや有用なライブラリなど)で開発することを期待して、ここに提示しようとしました。



All Articles