(57)【要約】【課題】  マイクロアーキテクチャを使用するコンピュータ環境でデータ処理および特定機能を実行する応用プログラムのリアルタイム性を保障する方法および装置に関する。【解決手段】  カーネル実行順序スケジューリング装置は、有効プログレスインデックス（ＥＰＩ：Ｅｆｆｅｃｔｉｖｅ  Ｐｒｏｇｒｅｓｓ  Ｉｎｄｅｘ）に基づいてカーネルの実行時間を推定し、カーネルの推定された実行時間および前記カーネルの優先順位に基づいて前記カーネルの実行順序を決定する。【選択図】      図４
2013161483.tif 000002
【特許請求の範囲】
【請求項１】
有効プログレスインデックス（ＥＰＩ：Ｅｆｆｅｃｔｉｖｅ  Ｐｒｏｇｒｅｓｓ  Ｉｎｄｅｘ）に基づいてカーネルそれぞれの実行時間を推定する推定部、および
前記カーネルそれぞれの推定された実行時間および前記カーネルそれぞれの優先順位に基づいて前記カーネルの実行順序を決定する制御部、
を含む、カーネル実行順序スケジューリング装置。
【請求項２】
前記制御部は、
前記カーネルのスケジューリング方式がプリエンプティブ（ｐｒｅｅｍｐｔｉｖｅ）方式である場合、前記カーネルのデッドライン（ｄｅａｄｌｉｎｅ）時間に基づいて前記カーネルの実行順序をスケジューリングするプリエンプティブスケジューリング部、
を含む、請求項１に記載のカーネル実行順序スケジューリング装置。
【請求項３】
前記制御部は、
前記カーネルのスケジューリング方式がノンプリエンプティブ（ｎｏｎ−ｐｒｅｅｍｐｔｉｖｅ）方式である場合、前記カーネルの推定された実行時間に基づいて所定サイズのウィンドウ単位で前記カーネルの実行順序をスケジューリングするノンプリエンプティブスケジューリング部、
を含む、請求項１に記載のカーネル実行順序スケジューリング装置。
【請求項４】
前記ノンプリエンプティブスケジューリング部は、
コマンドキュー（ｃｏｍｍａｎｄ  ｑｕｅｕｅ）でのカーネルの入力順序、前記カーネルそれぞれの優先順位、および前記カーネルそれぞれの推定された実行時間に基づいて、前記カーネルの実行が一定の時間間隔のタイムスロットで構成されたウィンドウ内で完了するように前記カーネルの実行順序をスケジューリングする、
請求項３に記載のカーネル実行順序スケジューリング装置。
【請求項５】
前記ノンプリエンプティブスケジューリング部は、
前記カーネルの推定された実行時間に基づいて、前記ウィンドウ内で実行が完了されるカーネルが優先的に実行されるように前記カーネルの実行順序をスケジューリングする、
請求項３または４に記載のカーネル実行順序スケジューリング装置。
【請求項６】
前記制御部は、
前記カーネルのうちで応用プログラムの特性に応じて周期的に実行されるカーネルに対しては、実行周期に該当するウィンドウのタイムスロットを予約し、残りのタイムスロットに他のカーネルの実行順序をスケジューリングする予約スケジューリング部、
をさらに含む、請求項２または３に記載のカーネル実行順序スケジューリング装置。
【請求項７】
前記制御部は、
ウィンドウ内で残ったタイムスロットがカーネルの推定された実行時間よりも小さい場合に、前記ウィンドウの大きさを前記カーネルの推定された実行時間だけ変更するウィンドウ変更部、
をさらに含む、請求項６に記載のカーネル実行順序スケジューリング装置。
【請求項８】
前記ウィンドウ変更部は、
前記ウィンドウの大きさの変更を要請したカーネルがコマンドキューに格納されたカーネルのうちで優先順位が最も大きく、要請された変更の大きさが予め設定されたウィンドウ変更範囲に含まれ、前記ウィンドウの大きさ変更要請が予め設定された回数の範囲からなる場合に、前記ウィンドウの大きさを変更する、
請求項７に記載のカーネル実行順序スケジューリング装置。
【請求項９】
前記推定部は、
前記カーネルの最終有効プログレスインデックス、前記カーネルが実行される環境の影響を示す最終メモリプログレスインデックス、および最終カーネルプログレスインデックスに基づいて前記カーネルの実行時間を推定する、
請求項１に記載のカーネル実行順序スケジューリング装置。
【請求項１０】
前記推定部は、
応用プログラムを実行する過程で繰り返し行われるカーネルのヒストリーに基づいて、前記有効プログレスインデックス、メモリプログレスインデックス、およびカーネルプログレスインデックスを推定するプログレスインデックス推定部、
を含む、請求項１に記載のカーネル実行順序スケジューリング装置。
【請求項１１】
前記推定部は、
物理プログレスインデックス、前記有効プログレスインデックス、前記カーネルのメモリ効率、および実行するカーネルに対するメモリ効率の変化量に基づいて最終メモリプログレスインデックスを推定するメモリプログレスインデックス推定部、および
物理プログレスインデックス、前記有効プログレスインデックス、前記カーネルに対するオペレーティングシステムの効率、および実行するカーネルに対する前記オペレーティングシステムの効率の変化量に基づいて最終カーネルプログレスインデックスを推定するカーネルプログレスインデックス推定部、
をさらに含む、請求項１０に記載のカーネル実行順序スケジューリング装置。
【請求項１２】
前記推定部は、
単独で実行されるカーネルのメモリ効率および共同で実行されるカーネルのメモリ効率に基づいて前記メモリ効率の変化量を推定する第１変化量推定部、および
単独で実行されるカーネルに対するオペレーティングシステムの効率および共同で実行されるカーネルに対するオペレーティングシステムの効率に基づいて前記オペレーティングシステムの効率の変化量を推定する第２変化量推定部、
をさらに含む、請求項１１に記載のカーネル実行順序スケジューリング装置。
【請求項１３】
前記推定部は、
前記カーネルの非有効サイクルおよび前記メモリプログレスインデックスに基づいて前記メモリ効率を推定するメモリ効率推定部、および
前記カーネルの非有効サイクルおよび前記カーネルプログレスインデックスに基づいて前記オペレーティングシステムの効率を推定するオペレーティングシステム効率推定部、
をさらに含む、請求項１０または１１に記載のカーネル実行順序スケジューリング装置。
【請求項１４】
前記プログレスインデックス推定部は、
前記カーネルを構成するデータの大きさおよび前記データの並列化レベルに基づいて初期有効プログレスインデックスと前記有効プログレスインデックス間の相関関数を計算する有効相関関数計算部、
前記カーネルを構成するデータの大きさおよび前記データの並列化レベルに基づいて初期メモリプログレスインデックスと前記メモリプログレスインデックス間の相関関数を計算するメモリ相関関数計算部、および
前記カーネルを構成するデータの大きさおよび前記データの並列化レベルに基づいて初期カーネルプログレスインデックスと前記カーネルプログレスインデックス間の相関関数を計算するカーネル相関関数計算部、
を含む、請求項１０に記載のカーネル実行順序スケジューリング装置。
【請求項１５】
有効実行方式によって実行される命令語の実行時間を累積して前記有効プログレスインデックスを生成する有効プログレスカウンタ（ＥＰＣ：Ｅｆｆｅｃｔｉｖｅ  Ｐｒｏｇｒｅｓｓ  Ｃｏｕｎｔｅｒ）、
前記カーネルが共有メモリにアクセスするのに消耗したサイクルを累積してメモリプログレスインデックス（ＭＰＩ：Ｍｅｍｏｒｙ  Ｐｒｏｇｒｅｓｓ  Ｉｎｄｅｘ）を生成するメモリプログレスカウンタ（ＭＰＣ：Ｍｅｍｏｒｙ  Ｐｒｏｇｒｅｓｓ  Ｃｏｕｎｔｅｒ）、および
システムカーネル実行に消耗したサイクルを累積してカーネルプログレスインデックス（ＫＰＩ：Ｋｅｒｎｅｌ  Ｐｒｏｇｒｅｓｓ  Ｉｎｄｅｘ）を生成するカーネルプログレスカウンタ（ＫＰＣ：Ｋｅｒｎｅｌ  Ｐｒｏｇｒｅｓｓ  Ｃｏｕｎｔｅｒ）、
をさらに含む、請求項１に記載のカーネル実行順序スケジューリング装置。
【請求項１６】
プロセッサによって有効プログレスインデックス（ＥＰＩ：Ｅｆｆｅｃｔｉｖｅ  Ｐｒｏｇｒｅｓｓ  Ｉｎｄｅｘ）に基づいてカーネルそれぞれの実行時間を推定するステップ、および
前記カーネルそれぞれの推定された実行時間および前記カーネルそれぞれの優先順位に基づいて前記カーネルの実行順序を決定するステップ、
を含む、カーネル実行順序スケジューリング方法。
【請求項１７】
前記決定するステップは、
コマンドキュー（ｃｏｍｍａｎｄ  ｑｕｅｕｅ）へのカーネルの入力順序、前記カーネルそれぞれの優先順位、および前記カーネルそれぞれの推定された実行時間に基づいて、前記カーネルの実行が一定の時間間隔のタイムスロットで構成されたウィンドウ内で完了するように前記カーネルの実行順序を決定する、
請求項１６に記載のカーネル実行順序スケジューリング方法。
【請求項１８】
前記推定するステップは、
前記カーネルの最終有効プログレスインデックス、前記カーネルが実行される環境の影響を示す最終メモリプログレスインデックス、および最終カーネルプログレスインデックスに基づいて前記カーネルの実行時間を推定する、
請求項１６に記載のカーネル実行順序スケジューリング方法。
【請求項１９】
前記推定するステップは、
応用プログラムを実行する過程で繰り返し行われるカーネルのヒストリーに基づいて、前記有効プログレスインデックス、メモリプログレスインデックス、およびカーネルプログレスインデックスを推定するステップ、
を含む、請求項１６に記載のカーネル実行順序スケジューリング方法。
【請求項２０】
前記推定するステップは、
物理プログレスインデックス、前記有効プログレスインデックス、前記カーネルのメモリ効率、および実行するカーネルに対するメモリ効率の変化量に基づいて最終メモリプログレスインデックスを推定するステップ、および
物理プログレスインデックス、前記有効プログレスインデックス、前記カーネルに対するオペレーティングシステムの効率、および実行するカーネルに対する前記オペレーティングシステムの効率の変化量に基づいて最終カーネルプログレスインデックスを推定するステップ、
をさらに含む、請求項１９に記載のカーネル実行順序スケジューリング方法。
【請求項２１】
複数の中央処理部を含むホストプロセッサ、
複数のマイクロ実行部を含むコンピュータデバイス、
カーネルそれぞれの有効プログレスインデックス（ＥＰＩ：Ｅｆｆｅｃｔｉｖｅ  Ｐｒｏｇｒｅｓｓ  Ｉｎｄｅｘ）に基づいてカーネルそれぞれの実行時間を推定する推定部、および
前記カーネルそれぞれの推定された実行時間および前記カーネルそれぞれの優先順位に基づいて前記カーネルの実行順序を決定する制御部、
を含み、
前記ホストプロセッサは、前記制御部で決定された前記実行順序に基づいて前記コンピュータデバイスでカーネルを実行することを命令するカーネル実行命令を送信する、
異機種コンピュータ環境システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロアーキテクチャを使用するコンピュータ環境でデータ処理および特定機能を実行する応用プログラムの精密な性能予測によってリアルタイム性を保障する方法および装置に関する。
【背景技術】
【０００２】
個人携帯端末の普及と情報処理の要求量が増加するに伴い、コンピュータ機器は次第に複雑化し、多様な応用を同時に処理しなければならない状況に置かれている。また、リアルタイム処理を要求するマルチメディアのような応用プログラムの増加に伴い、コンピュータ機器のシステム性能に対する要求量も次第に増加しており、単一プロセッサだけでは応用プログラムを効率的に処理することができない状況に置かれている。
【０００３】
このような状況を克服するために、半導体集積技術の発達とマルチプロセッサコンピュータ技術が登場した。マルチプロセッサを使用する場合、単一プロセッサよりもエネルギー効率および性能向上において多くの利点がある。
【０００４】
しかし、多重コア上で同時に実行される応用プログラムの特性により、予想外の共有資源使用の衝突が発生し、衝突によって性能が低下するという問題が発生している。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
カーネルの実行時間を比較的正確に推定することにより、所定のタイムスロットで構成されたウィンドウ基盤によってカーネルスケジュールのリアルタイム性を保障する装置および方法を提供することを目的とする。
【０００６】
応用プログラムの固有な実行特性指標である有効プログレスインデックス、システム環境による性能指標であるメモリプログレスインデックス、およびカーネルプログレスインデックスを利用することにより、カーネルの実行時間を推定する装置および方法を提供する。
【課題を解決するための手段】
【０００７】
一実施形態において、カーネル実行順序スケジューリング装置は、有効プログレスインデックス（ＥＰＩ：Ｅｆｆｅｃｔｉｖｅ  Ｐｒｏｇｒｅｓｓ  Ｉｎｄｅｘ）に基づいてカーネルの実行時間を推定する推定部、およびカーネルの推定された実行時間および前記カーネルの優先順位に基づいて前記カーネルの実行順序を決定する制御部を含む。
【０００８】
前記制御部は、前記カーネルのスケジューリング方式がプリエンプティブ（ｐｒｅｅｍｐｔｉｖｅ）方式である場合、前記カーネルのデッドライン（ｄｅａｄｌｉｎｅ）時間に基づいて前記カーネルの実行順序をスケジューリングするプリエンプティブスケジューリング部を含んでもよい。
【０００９】
前記制御部は、前記カーネルのスケジューリング方式がノンプリエンプティブ（ｎｏｎ−ｐｒｅｅｍｐｔｉｖｅ）方式である場合、前記カーネルの推定された実行時間に基づいて所定サイズのウィンドウ単位で前記カーネルの実行順序をスケジューリングするノンプリエンプティブスケジューリング部を含んでもよい。
【００１０】
前記ノンプリエンプティブスケジューリング部は、コマンドキュー（ｃｏｍｍａｎｄ  ｑｕｅｕｅ）に入力された順序、前記カーネルの優先順位、および前記カーネルの推定された実行時間に基づいて、前記カーネルの実行が一定の時間間隔のタイムスロットで構成されたウィンドウ内で完了するように前記カーネルの実行順序をスケジューリングしてもよい。
【００１１】
前記ノンプリエンプティブスケジューリング部は、前記カーネルの推定された実行時間に基づいて、前記ウィンドウ内で実行が完了されるカーネルが優先的に実行されるように前記カーネルの実行順序をスケジューリングしてもよい。
【００１２】
前記制御部は、前記カーネルのうちで応用プログラムの特性に応じて周期的に実行されるカーネルに対しては、実行周期に該当するウィンドウのタイムスロットを予約し、残りのタイムスロットに他のカーネルの実行順序をスケジューリングする予約スケジューリング部をさらに含んでもよい。
【００１３】
前記制御部は、ウィンドウ内で残ったタイムスロットがカーネルの推定された実行時間よりも小さい場合に、前記ウィンドウの大きさを前記カーネルの推定された実行時間だけ変更するウィンドウ変更部をさらに含んでもよい。
【００１４】
前記ウィンドウ変更部は、前記ウィンドウの大きさの変更を要請したカーネルがコマンドキューに格納されたカーネルのうちで優先順位が最も大きく、要請された変更の大きさが予め設定されたウィンドウ変更範囲に含まれ、前記ウィンドウの大きさ変更要請が予め設定された回数の範囲からなる場合に、前記ウィンドウの大きさを変更してもよい。
【００１５】
前記推定部は、前記カーネルの最終有効プログレスインデックス、前記カーネルが実行される環境の影響を示す最終メモリプログレスインデックス、および最終カーネルプログレスインデックスに基づいて前記カーネルの実行時間を推定してもよい。
【００１６】
前記推定部は、応用プログラムを実行する過程で繰り返し実行されるカーネルのヒストリーに基づいて、前記有効プログレスインデックス、メモリプログレスインデックス、およびカーネルプログレスインデックスを推定するプログレスインデックス推定部を含んでもよい。
【００１７】
前記推定部は、物理プログレスインデックス、前記有効プログレスインデックス、前記カーネルのメモリ効率、および実行するカーネルに対するメモリ効率の変化量に基づいて最終メモリプログレスインデックスを推定するメモリプログレスインデックス推定部、および物理プログレスインデックス、前記有効プログレスインデックス、前記カーネルに対するオペレーティングシステムの効率、および実行するカーネルに対する前記オペレーティングシステムの効率の変化量に基づいて最終カーネルプログレスインデックスを推定するカーネルプログレスインデックス推定部をさらに含んでもよい。
【００１８】
前記推定部は、単独で実行されるカーネルのメモリ効率および共同で実行されるカーネルのメモリ効率に基づいて前記メモリ効率の変化量を推定する第１変化量推定部、および単独で実行されるカーネルに対するオペレーティングシステムの効率および共同で実行されるカーネルに対するオペレーティングシステムの効率に基づいて前記オペレーティングシステムの効率の変化量を推定する第２変化量推定部をさらに含んでもよい。
【００１９】
前記推定部は、前記カーネルの非有効サイクルおよび前記メモリプログレスインデックスに基づいて前記メモリ効率を推定するメモリ効率推定部、および前記カーネルの非有効サイクルおよび前記カーネルプログレスインデックスに基づいて前記オペレーティングシステムの効率を推定するオペレーティングシステム効率推定部をさらに含んでもよい。
【００２０】
前記プログレスインデックス推定部は、前記カーネルを構成するデータの大きさおよび前記データの並列化レベルに基づいて初期有効プログレスインデックスと前記有効プログレスインデックス間の相関関数を計算する有効相関関数計算部、前記カーネルを構成するデータの大きさおよび前記データの並列化レベルに基づいて初期メモリプログレスインデックスと前記メモリプログレスインデックス間の相関関数を計算するメモリ相関関数計算部、および前記カーネルを構成するデータの大きさおよび前記データの並列化レベルに基づいて初期カーネルプログレスインデックスと前記カーネルプログレスインデックス間の相関関数を計算するカーネル相関関数計算部を含んでもよい。
【００２１】
他の一実施形態において、カーネル実行順序スケジューリング装置は、有効実行方式によって実行される命令語の実行時間を累積して前記有効プログレスインデックスを生成する有効プログレスカウンタ（ＥＰＣ：Ｅｆｆｅｃｔｉｖｅ  Ｐｒｏｇｒｅｓｓ  Ｃｏｕｎｔｅｒ）、前記カーネルが共有メモリにアクセスするのに消耗したサイクルを累積してメモリプログレスインデックス（ＭＰＩ：Ｍｅｍｏｒｙ  Ｐｒｏｇｒｅｓｓ  Ｉｎｄｅｘ）を生成するメモリプログレスカウンタ（ＭＰＣ：Ｍｅｍｏｒｙ  Ｐｒｏｇｒｅｓｓ  Ｃｏｕｎｔｅｒ）、およびシステムカーネル実行に消耗したサイクルを累積してカーネルプログレスインデックス（ＫＰＩ：Ｋｅｒｎｅｌ  Ｐｒｏｇｒｅｓｓ  Ｉｎｄｅｘ）を生成するカーネルプログレスカウンタ（ＫＰＣ：Ｋｅｒｎｅｌ  Ｐｒｏｇｒｅｓｓ  Ｃｏｕｎｔｅｒ）をさらに含んでもよい。
【００２２】
一実施形態において、カーネル実行順序スケジューリング方法は、有効プログレスインデックス（ＥＰＩ：Ｅｆｆｅｃｔｉｖｅ  Ｐｒｏｇｒｅｓｓ  Ｉｎｄｅｘ）に基づいてカーネルの実行時間を推定するステップ、およびカーネルの推定された実行時間および前記カーネルの優先順位に基づいて前記カーネルの実行順序を決定するステップを含む。
【００２３】
前記決定するステップは、コマンドキュー（ｃｏｍｍａｎｄ  ｑｕｅｕｅ）に入力された順序、前記カーネルの優先順位、および前記カーネルの推定された実行時間に基づいて、前記カーネルの実行が一定の時間間隔のタイムスロットで構成されたウィンドウ内で完了するように前記カーネルの実行順序を決定してもよい。
【００２４】
前記推定するステップは、前記カーネルの最終有効プログレスインデックス、前記カーネルが実行される環境の影響を示す最終メモリプログレスインデックス、および最終カーネルプログレスインデックスに基づいて前記カーネルの実行時間を推定してもよい。
【００２５】
前記推定するステップは、応用プログラムを実行する過程で繰り返し実行されるカーネルのヒストリーに基づいて、前記有効プログレスインデックス、メモリプログレスインデックス、およびカーネルプログレスインデックスを推定するステップを含んでもよい。
【００２６】
前記推定するステップは、物理プログレスインデックス、前記有効プログレスインデックス、前記カーネルのメモリ効率、および実行するカーネルに対するメモリ効率の変化量に基づいて最終メモリプログレスインデックスを推定するステップ、および物理プログレスインデックス、前記有効プログレスインデックス、前記カーネルに対するオペレーティングシステムの効率、および実行するカーネルに対する前記オペレーティングシステムの効率の変化量に基づいて最終カーネルプログレスインデックスを推定するステップをさらに含んでもよい。
【００２７】
一実施形態において、異機種コンピュータ環境システムは、複数の中央処理部を含むホストプロセッサ、複数のマイクロ実行部を含むコンピュータデバイス、カーネルそれぞれの有効プログレスインデックス（ＥＰＩ：Ｅｆｆｅｃｔｉｖｅ  Ｐｒｏｇｒｅｓｓ  Ｉｎｄｅｘ）に基づいてカーネルそれぞれの実行時間を推定する推定部、および前記カーネルそれぞれの推定された実行時間および前記カーネルそれぞれの優先順位に基づいて前記カーネルの実行順序を決定する制御部を含み、前記ホストプロセッサは、前記制御部で決定された前記実行順序に基づいて前記コンピュータデバイスでカーネルを実行することを命令するカーネル実行命令を送信してもよい。
【発明の効果】
【００２８】
カーネルの実行時間を比較的正確に推定することにより、所定のタイムスロットで構成されたウィンドウ基盤でカーネルスケジュールのリアルタイム性を保障することができる。
【００２９】
応用プログラムの固有な実行特性指標である有効プログレスインデックス、システム環境による性能指標であるメモリプログレスインデックス、およびカーネルプログレスインデックスを利用することにより、カーネルの実行時間を推定することができる。
【００３０】
カーネルの推定された実行時間に基づいて、カーネルの応答レイテンシ（ｌａｔｅｎｃｙ）を保障するためのリアルタイムスケジューリングを実行することができる。
【００３１】
システムの性能および応用プログラムの特性を考慮してウィンドウの大きさを拡張させることにより、タイムスロットの活用率を高めることができる。
【００３２】
カーネルの推定された実行時間およびウィンドウ基盤のスケジューリングを利用することにより、異機種多重コア方式のプログラムでカーネル実行の性能を保障しながら、リアルタイム性を要請するカーネルの応答速度を保障することができる。
【図面の簡単な説明】
【００３３】
【図１】一般的な応用プログラムが実行されるコンピュータ環境を示す図である。
【図２】一実施形態に係る有効プログレスインデックスの概念を示す図である。
【図３】一実施形態に係るカーネル実行順序スケジューリング方法が適用されるホストとデバイスで構成された異機種コンピュータ環境システムを示す図である。
【図４】一実施形態に係るカーネル実行順序スケジューリング装置のブロック図である。
【図５】一般的なカーネルの実行方式を示す図である。
【図６】一実施形態に係るカーネル実行順序スケジューリング方式を示す図である。
【図７】一実施形態に係るカーネル実行順序スケジューリング方法に使用されるウィンドウおよびタイムスロットを示す図である。
【図８】他の一実施形態に係るカーネル実行順序スケジューリング方式を示す図である。
【図９】さらに他の一実施形態に係るカーネル実行順序スケジューリング方式を示す図である。
【図１０】さらに他の一実施形態に係るカーネル実行順序スケジューリング方式を示す図である。
【図１１】一実施形態に係るカーネル実行順序スケジューリング方法のフローチャートである。
【発明を実施するための形態】
【００３４】
以下、一方の側に係る実施形態について、添付の図面を参照しながら詳細に説明する。
【００３５】
ＯｐｅｎＣＬ（Ｏｐｅｎ  Ｃｏｍｐｕｔｉｎｇ  Ｌａｎｇｕａｇｅ）およびＯｐｅｎＧＬ（Ｏｐｅｎ  Ｇｒａｐｈｉｃｓ  Ｌｉｂｒａｒｙ）のような開放型並列プラットフォームの場合、異機種コンピュータ環境において、ホストがデバイスのコンピュータ資源を活用してプログラムを作成することができるプラットフォームを提供する。
【００３６】
異機種コンピュータ環境は、ホスト（Ｈｏｓｔ）プロセッサとコンピュータデバイスがバス（Ｂｕｓ）のような相互接続（ｉｎｔｅｒｃｏｎｎｅｃｔｉｏｎ）によって接続されている環境を意味する。ホストプロセッサは、コンピュータデバイスで実行するプログラムをバスを介して伝達する。ここで、コンピュータデバイスで実行するプログラムを、一般的にカーネルという。
【００３７】
ホストプロセッサは、カーネルの実行のためにコンピュータデバイスにコマンド（ｃｏｍｍａｎｄ）を送信する。ここで、一般的にカーネルの実行は、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）方式によって実行されるため、カーネルの優先順位を保障したり、カーネルの応答レイテンシ（ｌａｔｅｎｃｙ）を保障することが困難である。
【００３８】
ＧＰＵ（Ｇｒａｎｐｈｉｃ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の活用範囲が広範囲化するに伴い、汎用的な応用プログラムの加速のための目的として使用されながら、優先順位基盤のカーネルスケジューリングまたはリアルタイム性保障のカーネルスケジューリングが必要となっている。また、一般的なＧＰＵの場合、カーネル実行方式がノンプリエンプティブ（ｎｏｎ−ｐｒｅｅｍｐｔｉｖｅ）方式であるため、ノンプリエンプティブ方式を考慮したリアルタイムスケジューリングが必要となる。
【００３９】
また、実行される応用プログラムの正確な性能および進行が測定可能であれば、測定された値を指標化することにより、リアルタイムスケジューリング、性能改善、負荷均衡、および低電力管理のために応用プログラムの現状態を示す情報として活用することができる。
【００４０】
さらに、システムで共有する資源に対する衝突状態を効率的にモニタリングして指標化することができれば、指標は応用プログラムの実行に必要な資源割当、再分配、およびスケジューリングを決定するにおいて重要な情報として活用することができる。問題は、どんな指標を生成して効率的に資源を分配するのかにある。
【００４１】
ランタイム性能低下を発生させずに応用プログラムの状態を正確かつ精密に測定するのは容易ではない。また、応用プログラムの実行を構成する命令語の実行時間は一定ではない。さらに、応用プログラム実行時に共に実行される他の応用プログラムの予想外の影響により、応用プログラムの状態に対する正確な測定は容易ではない。
【００４２】
単一応用プログラムが実行される場合にも、単一応用を構成する複数のスレッドが共に実行されれば互いに影響を及ぼすようになり、１つのスレッドで構成された場合にもスレッドを構成する命令語の実行時間が一定でないため、応用プログラムの状態測定が困難である。
【００４３】
また、多重コア上で応用プログラムの同時実行により、共有資源アクセス時の衝突問題が発生する。特に、共有メモリアクセス時に発生する衝突によってシステムの性能低下が激しくなる。したがって、多重コア上でシステムの実行状態を正確にモニタリングし、共有した資源の衝突状態をモニタリングし、モニタリング結果を指標化する必要がある。このような指標を活用してカーネルの実行を制御することができる。
【００４４】
図１は、一般的な応用プログラムが実行されるコンピュータ環境を示す図である。
【００４５】
一般的に、応用プログラムは、プロセッサ上でメモリとハードウェアデバイスを資源とし、定められた機能を実行する。メモリは、通常の場合は階層的構造を有する。このとき、接続（ａｃｃｅｓｓ）速度が速いメモリはローカルバスに備えられ、接続速度は遅いが安価なメモリはシステムバス上に備えられてもよい。また、多重プロセッサは、高い性能の要求事項を満たすために１つのシステムに複数のプロセッサが集積したものであって、応用プログラムを並列処理する。
【００４６】
一般的に、応用プログラムは１つ以上のスレッドで構成される。１つのプロセッサ上で多重スレッドが実行される。１つのプロセッサ上で多重スレッドが実行されることをマルチスレッディングと言う。応用プログラムの性能および進行状態を測定するためには、応用プログラムを構成するスレッドの性能および進行状態を測定しなければならない。
【００４７】
図１は、一般的に構成されるコンピュータ環境の一例であるが、一方の側に係るカーネル実行順序スケジューリング装置の適用環境は、図１に示す例に限定されることはない。
【００４８】
図２は、一実施形態に係る有効プログレスインデックスの概念を示す図である。
【００４９】
応用プログラムは、複数のスレッドで構成される。スレッドは、特定機能を実行するための命令語で構成される。命令語の実行方式は、有効実行（ｅｆｆｅｃｔｉｖｅ  ｅｘｅｃｕｔｉｏｎ）方式および非有効実行（ｎｏｎｅｆｆｅｃｔｉｖｅ  ｅｘｅｃｕｔｉｏｎ）方式に区分される。
【００５０】
命令語の実行方式が有効実行方式である場合、命令語の実行完了時点または命令語群（グループ）の実行完了時点は一定のサイクルを有する。有効実行方式によって実行される命令語の大部分は、プロセッサの外部状況とは独立的に実行される。また、有効実行方式によって実行される命令語は、該当命令語の実行サイクルがプログラム進行のために必要となる。また、該当命令語の実行サイクルは、応用プログラムの目的に有効な命令語を実行するのに必要なプロセッササイクルで測定される。
【００５１】
この反面、命令語の実行方式が非有効実行方式である場合、命令語あるいは命令語群（グループ）の実行完了時点は一定でない遅延サイクルを有する。非有効実行方式によって実行される命令語の大部分は、入出力端、メモリなどのように共有する資源を使用しなければならない場合である。プロセッサで非有効実行方式の命令語が実行される場合、該当命令語の実行が完了するためには数十サイクルの遅延が要求されることがある。このような遅延は、該当命令語の実行時、プロセッサがアクセスしようとする共有資源を他のプロセッサで使用する場合に発生する。共有資源に他のプロセッサと同時接続することによって衝突が発生し、衝突によって遅延が発生するようになる。
【００５２】
図２を参照すれば、スレッドが実行される物理的時間（Ｐｈｙｓｉｃａｌ  ｔｉｍｅ）は一定に増加する。このとき、物理的時間の増加は、ＲＰＩ（Ｒｅａｌ  Ｐｒｏｇｒｅｓｓ  Ｉｎｄｅｘ、以下「ＲＰＩ」とする）で表示される。
【００５３】
有効実行（ｅｆｆｅｃｔｉｖｅ  ｅｘｅｃｕｔｉｏｎ）方式の命令語は、同じ実行時間内に命令語が完了する。この反面、非有効実行（Ｎｏｎｅｆｆｅｃｔｉｖｅ  ｅｘｅｃｕｔｉｏｎ）方式の命令語は、他のスレッドの実行によって影響を受けたり実行時点に応じて発生する状況のため、命令語の実行完了時間が一定ではなくなる。
【００５４】
非有効実行は、プロセッサの命令語水準で非有効実行をするハードウェア非有効実行（Ｈａｒｄｗａｒｅ  Ｎｏｎｅｆｆｅｃｔｉｖｅ  ｅｘｅｃｕｔｉｏｎ、以下「ＨＷＮＥ」とする）と命令語で構成された関数またはシステムのカーネル水準で応用プログラムの実行中に発生するイベントで非有効実行をするソフトウェア非有効実行（Ｓｏｆｔｗａｒｅ  ｎｏｎｅｆｆｅｃｔｉｖｅ  ｅｘｅｃｕｔｉｏｎ、以下「ＳＷＮＥ」とする）に区分される。ここで、システムのカーネルは、一般的なユーザ応用プログラムではなく、オペレーティングシステムを構成するシステムプログラムを意味する。ＨＷＮＥとＳＷＮＥは、予め設定された基準に応じて区分される。
【００５５】
実際のスレッドの実行時間からＳＷＮＥとＨＷＮＥを除いた残りの部分の実行時間は、すべて有効な実行時間であると言える。スレッドの実行からＳＷＮＥとＨＷＮＥを除いた残りの部分を実行するのに必要なサイクルは毎回同じ値を有するため、ＳＷＮＥとＨＷＮＥを除いた残りの部分を指標化すれば、スレッドの有効な（ｅｆｆｅｃｔｉｖｅ）実行指標として活用することができる。ここで、有効な実行時間を示す指標を、有効プログレスインデックス（Ｅｆｆｅｃｔｉｖｅ  Ｐｒｏｇｒｅｓｓ  Ｉｎｄｅｘ、以下「ＥＰＩ」とする）と定義する。ＥＰＩは次の数式（１）によって表現される。
【００５６】
Ｐスレッド＝Ｐ有効実行＋Ｐ非有効実行
τ有効スレッドプログレス＝τ物理的−（τＳＷＮＥ＋τＨＷＮＥ）      （１）
【００５７】
ここで、応用プログラムを構成するプログラムＰスレッドは、有効実行（Ｐ有効実行）と非有効実行（Ｐ非有効実行）に区分される。スレッドの有効プログレスを示す時間（τ有効スレッドプログレス）は、スレッドが実行される物理的時間（τ物理的）からＳＷＮＥ実行時間（τＳＷＮＥ）とＨＷＮＥ実行時間（τＨＷＮＥ）を除去すればよい。
【００５８】
ＨＷＮＥに該当する命令語は、共有資源へのアクセスが必要な命令語である。このような命令語の実行サイクルは、外部Ｉ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）またはメモリアクセス遅延によるサイクルを含んでもよい。スレッドの実行中に外部Ｉ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）またはメモリアクセス遅延に消耗したサイクルをスレッド別に累積管理した指標を、メモリプログレスインデックス（ＭＰＩ：Ｍｅｍｏｒｙ  Ｐｒｏｇｒｅｓｓ  Ｉｎｄｅｘ）と定義する。
【００５９】
スレッドの実行中にシステムのイベントをオペレーティングシステムのカーネルで処理するために消耗するサイクルを、カーネルプログレスインデックス（ＫＰＩ：Ｋｅｒｎｅｌ  Ｐｒｏｇｒｅｓｓ  Ｉｎｄｅｘ）と定義する。カーネルプログレスインデックスは、インタラプト、スレッドコンテキストスイッチ（ｃｏｎｔｅｘｔ  ｓｗｉｔｃｈ）、およびマロック（ｍａｌｌｏｃ）などのシステム関数コールによるカーネル共有資源のアクセス衝突によって測定される。
【００６０】
ＳＷＮＥおよびＨＷＮＥを実行する間、実際の物理的な時間が増加してもＥＰＩは増加しない。したがって、ＥＰＩ値は、スレッドの実行において絶対的な進行位置を示す指標として使用される。ＥＰＩが重要な理由は、実際の応用プログラムを構成するスレッドのプロセッサ占有率ではなく、実際の応用プログラムの進行状態を正確に示すことができるためである。
【００６１】
スレッドの実行において、ＳＷＮＥおよびＨＷＮＥは、予め設定された基準に基づいて判断される。予め設定された基準は、現在まで測定された命令語または命令語で構成された関数の実行時間が一定の場合と一定でない場合を考慮して定義される。ただし、予め設定された基準は定義されるＳＷＮＥおよびＨＷＮＥの一例に過ぎず、これに限定されることはなく、一方の側に係る発明が属する分野において通常の知識を有する者が容易に類推することができる範囲を含んでもよい。
【００６２】
下記表１では、ＳＷＮＥおよびＨＷＮＥの一例が分類されている。
【００６３】
【表１】
2013161483.tif 000003
【００６４】
表１において、ビジーウェイティングは、Ｉ／Ｏ  ＡｃｃｅｓｓのためのＰｏｌｌｉｎｇ方式のアクセス形態で、実際のＩ／Ｏによるデータ送受信の場合にはＳＷＮＥに該当しない。ビジーウェイティングは、Ｉ／Ｏの状態をチェックするために「繰り返し」コードを実行する場合にのみＳＷＮＥに該当する。ＳＷＮＥおよびＨＷＮＥは、表１に例示された場合ではなくても、スレッドの機能を実行するにおいて有効でないすべての実行区間を含んでもよい。
【００６５】
ＲＰＩは、スレッドがプロセッサで実行中に累積したプロセッササイクルの累積値を意味する。また、ＲＰＩは、スレッドのプロセッサ占有率を示す指標として使用される。
【００６６】
ＥＰＩは、スレッドのプロセッササイクル水準でカウントされた有効実行サイクルの累積値を意味する。また、ＥＰＩは、スレッドの有効進行状態を示す指標として使用される。
【００６７】
ＭＰＩは、スレッドの実行中に共有資源アクセス衝突によってストール（Ｓｔａｌｌ）したり消耗したサイクルの累積値を意味する。また、ＭＰＩは、共有資源へのアクセスおよび衝突発生程度を示す指標として使用される。
【００６８】
ＫＰＩは、スレッドの実行中にシステムカーネル実行によって発生する非有効サイクルの累積値を意味する。また、ＫＰＩは、システムカーネルで共有する資源へのアクセスおよび衝突発生程度を示す指標として使用される。
【００６９】
それぞれの指標を活用することにより、応用プログラムを構成するスレッドの状態が分析される。例えば、ＥＰＩとＲＰＩの差を利用することにより、応用プログラムのプロセッサ占有率に対比する実際応用プログラムの進行状態を把握する。
【００７０】
ＥＰＩは、カーネルが実行される環境から独立的な特性を有する。すなわち、同じ入力に対し、実行環境とは関係なく常に同じ出力を有する指標である。したがって、システムと分離した状況で応用プログラムの実行特性を示す。
【００７１】
異機種コンピュータシステムのデバイスで実行されるカーネルは、上述したスレッドに対応する。したがって、一実施形態に係るカーネル実行順序スケジューリング装置は、上述したスレッドのＥＰＩ、ＭＰＩ、ＫＰＩ、ＲＰＩをカーネルに適用することにより、カーネルの実行性能をモニタリングする。
【００７２】
より具体的に、異機種コンピュータシステムのデバイスで実行されるカーネルに適用されるＥＰＩ、ＭＰＩ、ＫＰＩは、次の意味を有する。ＥＰＩは、応用プログラムが実行されるシステムの変化から独立した応用プログラム自体とプロセッサ自体の実行特性を示す指標である。ＭＰＩは、システム構成のうちでメモリの構造的特性を反映し、メモリレイテンシ（ｌａｔｅｎｃｙ）および衝突（ｃｏｌｌｉｓｉｏｎ）などの実行特性を反映した指標である。ＫＰＩは、システムのオペレーティングシステムの特性を反映した指標であって、カーネルの資源使用、同期化、および共有資源割当によるオペレーティングシステムの応答速度などを反映した性能指標である。
【００７３】
図３は、一実施形態に係るカーネル実行順序スケジューリング方法が適用されるホストとデバイスで構成された異機種コンピュータ環境システムを示す図である。図３を参照すれば、ホストは複数のＣＰＵで構成されてもよく、デバイス３１０は複数のＭＥ（Ｍｉｃｒｏ  Ｅｘｅｃｕｔｉｏｎ  ｕｎｉｔ）で構成される。
【００７４】
ホストは、デバイス３１０でカーネルを実行するために、カーネルを実行するためのコマンド（ｃｏｍｍａｎｄ）をデバイスに送信する。送信されたコマンドは、コマンドキュー（ｃｏｍｍａｎｄ  ｑｕｅｕｅ）にプッシュ（ｐｕｓｈ）され、デバイスによってポップ（ｐｏｐ）されて該当カーネルが実行される。
【００７５】
一般的な場合、コマンドキューにプッシュされたコマンドは、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）方式によってポップされ、優先順位を考慮したりレイテンシ（ｌａｔｅｎｃｙ）が考慮されない。したがって、高い優先順位のカーネルはコマンドキューに先にプッシュされ、実行されている低い優先順位のカーネルのために処理されず、コマンドキューにペンディング（ｐｅｎｄｉｎｇ）状態として留まる。
【００７６】
優先順位およびレイテンシを考慮したカーネルスケジューリングのためには、コマンドキューにプッシュされたカーネルの優先順位とデッドライン（ｄｅａｄｌｉｎｅ）を考慮し、コマンドキューでカーネルの実行順序を再構成することによって実現される。デッドラインは、該当カーネルの動作を完了するための制限時間を意味する。
【００７７】
デッドライン基盤のカーネル実行順序を再構成するためには、コマンドキューにプッシュされたカーネルの実行時間が分からなければならないが、ここで、上述したＥＰＩ、ＭＰＩ、ＫＰＩが使用される。
【００７８】
図４は、一実施形態に係るカーネル実行順序スケジューリング装置のブロック図である。図４を参照すれば、カーネル実行順序スケジューリング装置は、推定部４１０、制御部４３０、有効プログレスカウンタ４４０、メモリプログレスカウンタ４５０、およびカーネルプログレスカウンタ４６０を含む。
【００７９】
推定部４１０は、有効プログレスインデックス（ＥＰＩ：Ｅｆｆｅｃｔｉｖｅ  Ｐｒｏｇｒｅｓｓ  Ｉｎｄｅｘ）に基づいてカーネルの実行時間を推定する。より具体的には、推定部４１０は、カーネルの最終有効プログレスインデックス、カーネルが実行される環境の影響を示す最終メモリプログレスインデックス、および最終カーネルプログレスインデックスに基づいてカーネルの実行時間を推定する。
【００８０】
最終有効プログレスインデックス、最終メモリプログレスインデックス、および最終カーネルプログレスインデックスの合計がカーネルの実行時間として推定される。
【００８１】
制御部４３０は、推定部４１０で推定された実行時間およびカーネルの優先順位に基づいてカーネルの実行順序を決定する。
【００８２】
推定部４１０は、プログレスインデックス推定部４２０、メモリプログレスインデックス推定部４１１、カーネルプログレスインデックス推定部４１２、第１変化量推定部４１３、第２変化量推定部４１４、メモリ効率推定部４１５、およびオペレーティングシステム効率推定部４１６を含んでもよい。
【００８３】
プログレスインデックス推定部４２０は、応用プログラムを実行する過程で繰り返し行われるカーネルのヒストリーに基づいて、有効プログレスインデックス、メモリプログレスインデックス、およびカーネルプログレスインデックスを推定する。
【００８４】
応用プログラムが実行されれば、繰り返し行われるカーネルがある。プログレスインデックス推定部４２０は、カーネルが繰り返し行われる度に、有効プログレスインデックス、メモリプログレスインデックス、およびカーネルプログレスインデックスを推定する。プログレスインデックス推定部４２０は、繰り返される前の有効プログレスインデックスと繰り返された後の有効プログレスインデックスを比較して両者の相関関係を計算する。プログレスインデックス推定部４２０は、メモリプログレスインデックスおよびカーネルプログレスインデックスに対しても相関関係を計算する。
【００８５】
メモリプログレスインデックス推定部４１１は、物理プログレスインデックス（ＲＰＩ）、有効プログレスインデックス（ＥＰＩ）、カーネルのメモリ効率（ＭＥ：Ｍｅｍｏｒｙ  Ｅｆｆｉｃｉｅｎｃｙ）、および実行するカーネルに対するメモリ効率の変化量（△ＭＥ）に基づいて最終メモリプログレスインデックスを推定する。
【００８６】
カーネルプログレスインデックス推定部４１２は、物理プログレスインデックス（ＲＰＩ）、有効プログレスインデックス（ＥＰＩ）、カーネルに対するオペレーティングシステムの効率（ＫＥ：Ｋｅｒｎｅｌ  Ｅｆｆｉｃｉｅｎｃｙ）、および実行するカーネルに対するオペレーティングシステムの効率の変化量（△ＫＥ）に基づいて最終カーネルプログレスインデックスを推定する。
【００８７】
第１変化量推定部４１３は、単独で実行されるカーネルのメモリ効率および共同で実行されるカーネルのメモリ効率に基づいてメモリ効率の変化量を推定する。
【００８８】
第２変化量推定部４１４は、単独で実行されるカーネルに対するオペレーティングシステムの効率および共同で実行されるカーネルに対するオペレーティングシステムの効率に基づいてオペレーティングシステムの効率の変化量を推定する。
【００８９】
メモリ効率推定部４１５は、カーネルの非有効サイクルおよびメモリプログレスインデックスに基づいてメモリ効率を推定する。ＥＰＩとＲＰＩの差を、スレッドの非有効サイクル（Ｔｎｅ）と定義する。
【００９０】
メモリ効率推定部４１５は、非有効サイクル（Ｔｎｅ）とＭＰＩを利用してカーネルのメモリ効率（ＭＥ）を計算する。このとき、メモリ効率（ＭＥ：Ｍｅｍｏｒｙ  Ｅｆｆｉｃｉｅｎｃｙ）は、次のように定義する。ＭＥ＝１−（ＭＰＩ／Ｔｎｅ）、ＭＥは、カーネル間に共有するメモリのうち、衝突せずに有効に使用される区間の比率を示す指標として使用される。
【００９１】
オペレーティングシステム効率推定部４１６は、カーネルの非有効サイクルおよびカーネルプログレスインデックスに基づいてオペレーティングシステムの効率を推定する。
【００９２】
オペレーティングシステム効率推定部４１６は、非有効サイクル（Ｔｎｅ）とＫＰＩを利用してカーネルに対するオペレーティングシステムの効率（ＫＥ）を計算する。このとき、カーネルに対するオペレーティングシステムの効率（ＫＥ：Ｋｅｒｎｅｌ  Ｅｆｆｉｃｉｅｎｃｙ）は、次のように定義する。ＫＥ＝１−（ＫＰＩ／Ｔｎｅ）、ＫＥは、オペレーティングシステム実行区間のうち、カーネル共有資源で衝突せずに有効に使用される区間の比率を示す指標として使用される。
【００９３】
ＭＥおよびＫＥはシステム依存的な指標であるため、現在実行されているカーネルに示されたシステムの状態を示していると言える。したがって、ＭＥおよびＫＥを性能予測に反映して現在のシステム状況を反映した指標を生成する。
【００９４】
プログレスインデックス推定部４２０は、有効相関関数計算部４２１、メモリ相関関数計算部４２３、およびカーネル相関関数計算部４２５を含んでもよい。
【００９５】
異機種コンピュータ環境システムのように開放型プログラムを使用して作成される応用プログラムでは、デバイスの加速性が利用される。
【００９６】
異機種コンピュータ環境システムのホストは、応用プログラムを構成するモジュールのうちで並列加速が可能な部分に対し、「加速に使用されるデータ」と「計算しようとする命令語」の集合であるカーネルを対象デバイスで実行可能なコードにコンパイルした後、対象デバイスで該当カーネルを実行するようにする。
【００９７】
該当カーネルは、応用プログラムで繰り返し実行される特徴を有する。カーネルとして処理しなければならない多様なデータ集合が使用される。
【００９８】
プログレスインデックス推定部４２０は、繰り返し実行されるカーネルに対し、ＥＰＩ、ＭＰＩ、およびＫＰＩをプロファイリング（ｐｒｏｆｉｌｉｎｇ）する。プログレスインデックス推定部４２０は、プロファイリングされたＥＰＩ、ＭＰＩ、およびＫＰＩを、入力データの大きさ（以下「ｓ」と表記）と入力データの並列化レベル（以下「ｐ」と表記）に対する関数にモデリングする。
【００９９】
有効相関関数計算部４２１は、カーネルを構成するデータの大きさおよびデータの並列化レベルに基づいて、初期有効プログレスインデックスと有効プログレスインデックス間の相関関数を計算する。
【０１００】
メモリ相関関数計算部４２３は、カーネルを構成するデータの大きさおよびデータの並列化レベルに基づいて、初期メモリプログレスインデックスとメモリプログレスインデックス間の相関関数を計算する。
【０１０１】
カーネル相関関数計算部４２５は、カーネルを構成するデータの大きさおよびデータの並列化レベルに基づいて、初期カーネルプログレスインデックスとカーネルプログレスインデックス間の相関関数を計算する。
【０１０２】
例えば、ｔ０時間でのカーネル実行で取得したカーネルの性能指標をＫＰＩｔ０、ＭＰＩｔ０、ＥＰＩｔ０とすれば、次のカーネル実行による性能指標ＫＰＩ’、ＭＰＩ’、ＥＰＩ’は、以前性能指標との関係において次のように表現される。それぞれの性能指標は指標間の独立的な指標であり、以前指標に対するｓとｐに対する関数にモデリングされる。
【０１０３】
ＫＰＩ’＝ｆｋ（ｓ、ｐ）＊ＫＰＩｔ０
ＭＰＩ’＝ｆｍ（ｓ、ｐ）＊ＭＰＩｔ０
ＥＰＩ’＝ｆｅ（ｓ、ｐ）＊ＥＰＩｔ０
【０１０４】
ＥＰＩ’は、有効実行サイクルに基づいた性能指標であって、同じ入力に対して決定的な（ｄｅｔｅｒｍｉｎｉｓｔｉｃ）特性を有する。したがって、入力データセットに影響を受ける部分（Ｃｄｓ）と受けない部分（Ｃｉｄｓ）に区分されてもよく、ＥＰＩ’は次のように表現される。
【０１０５】
ＥＰＩ’＝Ｃｉｄｓ＋ｆ’ｅ（ｓ、ｐ）＊Ｃｄｓ
カーネルの実行において、入力データの大きさと並列化レベルによって実際に予想される実行時間をＴ’ｐとすれば、ＥＰＩ’、ＭＰＩ’、ＫＰＩ’を利用して次のように計算される。
【０１０６】
Ｔ’ｐ＝ＫＰＩ’＋ＭＰＩ’＋ＥＰＩ’
【０１０７】
プログレスインデックス推定部４２０は、応用プログラムが実行されるターゲットシステムのエミュレーションを利用し、ｓとｐにモデリングされるＥＰＩ、ＫＰＩ、ＭＰＩを推定する。プログレスインデックス推定部４２０は、繰り返される前のＥＰＩ、ＫＰＩ、ＭＰＩと繰り返された後のＥＰＩ、ＫＰＩ、ＭＰＩを比較して相関関数を計算する。
【０１０８】
プログレスインデックス推定部４２０は、別途に準備された応用プログラムのランニングコードの実行から、ｓとｐにモデリングされるＥＰＩ、ＫＰＩ、ＭＰＩを推定する。また、プログレスインデックス推定部４２０は、繰り返される前のＥＰＩ、ＫＰＩ、ＭＰＩと繰り返された後のＥＰＩ、ＫＰＩ、ＭＰＩを比較して相関関数を計算する。
【０１０９】
プログレスインデックス推定部４２０は、デバイスでカーネルが繰り返し実行される特性を活用し、実際カーネルの実行途中に入力されたデータセット（ｓ）および並列化レベル（ｐ）に対する値を記録し、記録された値を活用して相関関数を計算する。
【０１１０】
プログレスインデックス推定部４２０は、リニア補間（Ｌｉｎｅａｒ  ｉｎｔｅｒｐｏｌａｔｉｏｎ）によって相関関数を計算する。プログレスインデックス推定部４２０は、入力データセットの大きさ（ｓ）、並列化レベル（ｐ）の一次関数の形態で表現された相関関数の係数値を計算する。計算された係数値は、ヒストリー基盤の性能予測のために実行カーネルコード別に格納されてもよく、ランタイム実行時に抽出して使用される。
【０１１１】
デバイスでカーネルが同時に実行されれば、現在実行されているカーネルのＫＥおよびＭＥがカーネル実行時間予測に反映される。
【０１１２】
例えば、カーネルＫ１、Ｋ２、Ｋ３それぞれの単独実行で計算されたＭＰＩとＫＰＩを利用し、計算された効率指標をそれぞれＭＥ１、ＫＥ１、ＭＥ２、ＫＥ２、ＭＥ３、ＫＥ３と仮定する。ここで、Ｋ１とＫ２がデバイスで現在実行されており、実行中に推定されたそれぞれのＭＰＩとＫＰＩによって計算された効率指標がそれぞれ‘ＭＥ１、‘ＫＥ１、‘ＭＥ２、‘ＫＥ２であるとすれば、Ｋ１とＫ２の共同実行によって変化したそれぞれの効率が計算される。各カーネルに対する効率の変化量は、次のように表現される。
【０１１３】
△ＭＥ１＝ＭＥ１−‘ＭＥ１
△ＫＥ１＝ＫＥ１−‘ＫＥ１
同じ方法によってＫ２に対するＭＥ、ＫＥの変化量が計算される。計算された変化量をカーネルの共同実行可能な場合に対して平均すれば、デバイスで実行されるカーネルに対し、メモリおよびオペレーティングシステムの効率の変化量が計算される。メモリ効率の変化量およびオペレーティングシステム効率の変化量は、次のように表現される。
【０１１４】
△ＫＥ＝ΣＫＥｎ／ｎ
△ＭＥ＝ΣＭＥｎ／ｎ
△ＫＥ、△ＭＥ、および相関関数を考慮し、システム状況を反映した最終性能予測指数である最終カーネルプログレスインデックスＫＰＩ’ｓおよび最終メモリプログレスインデックスＭＰＩ’ｓが下記のように計算される。
【０１１５】
ヒストリー基盤の性能予測によってＫＰＩ’、ＭＰＩ’、およびＥＰＩ’が推定される。ＫＰＩ’、ＭＰＩ’、およびＥＰＩ’を利用してカーネルの実行時間ＲＰＩ’が推定される。しかし、現在のシステムの特性を示す△ＫＥ、△ＭＥ値があれば、現在システムの実行性能指標を反映したＫＰＩ’ｓ、ＭＰＩ’ｓは次のように計算される。
【０１１６】
ＫＰＩ’ｓ＝｛１−（ＫＥ＋△ＫＥ）｝＊（ＲＰＩ’−ＥＰＩ’）
ＭＰＩ’ｓ＝｛１−（ＭＥ＋△ＭＥ）｝＊（ＲＰＩ’−ＥＰＩ’）
【０１１７】
システムの現在の性能指標を反映したカーネルの最終実行時間Ｔ’ｐは、Ｔ’ｐ＝ＫＰＩ’ｓ＋ＭＰＩ’ｓ＋ＥＰＩ’と推定される。ＥＰＩ’はシステムの特性に影響を受けないため、ＫＰＩ’ｓおよびＭＰＩ’ｓと共に使用される。
【０１１８】
有効プログレスカウンタ４４０は、有効実行方式によって実行される命令語の実行時間を累積して有効プログレスインデックスを生成する。
【０１１９】
メモリプログレスカウンタ（Ｍｅｍｏｒｙ  Ｐｒｏｇｒｅｓｓ  Ｃｏｕｎｔｅｒ、以下「ＭＰＣ」とする）４５０は、カーネルが共有メモリにアクセスするのに消耗したサイクルを累積してメモリプログレスインデックス（ＭＰＩ：Ｍｅｍｏｒｙ  Ｐｒｏｇｒｅｓｓ  Ｉｎｄｅｘ）を生成する。
【０１２０】
カーネルプログレスカウンタ（Ｋｅｒｎｅｌ  Ｐｒｏｇｒｅｓｓ  Ｃｏｕｎｔｅｒ、以下「ＫＰＣ」とする）４６０は、カーネルがプロセッサを占有し、システムカーネル実行に消耗したサイクルを累積してカーネルプログレスインデックス（ＫＰＩ：Ｋｅｒｎｅｌ  Ｐｒｏｇｒｅｓｓ  Ｉｎｄｅｘ）を生成する。
【０１２１】
システムカーネル実行の例としては、インタラプト、スレッドコンテキストスイッチ（ｔｈｒｅａｄ  ｃｏｎｔｅｘｔ  ｓｗｉｔｃｈ）、ｍａｌｌｏｃなどのシステム関数がある。このようなシステム関数のコールによってカーネル共有資源でのアクセス過程で衝突が発生することにより、非有効実行区間が発生する。
【０１２２】
制御部４３０は、プリエンプティブスケジューリング部４３１、ノンプリエンプティブスケジューリング部４３３、予約スケジューリング部４３５、およびウィンドウ変更部４３７を含んでもよい。
【０１２３】
プリエンプティブスケジューリング部４３１は、カーネルのスケジューリング方式がプリエンプティブ（ｐｒｅｅｍｐｔｉｖｅ）方式である場合、カーネルのデッドライン（ｄｅａｄｌｉｎｅ）時間に基づいてカーネルの実行順序をスケジューリングする。プリエンプティブスケジューリング部４３１は、デッドライン時間が速く到達する順にカーネルの実行順序をスケジューリングする。
【０１２４】
ノンプリエンプティブスケジューリング部４３３は、カーネルのスケジューリング方式がノンプリエンプティブ（ｎｏｎ−ｐｒｅｅｍｐｔｉｖｅ）方式である場合、カーネルの推定された実行時間に基づいて所定サイズのウィンドウ単位でカーネルの実行順序をスケジューリングする。
【０１２５】
ノンプリエンプティブスケジューリング部４３３は、コマンドキュー（ｃｏｍｍａｎｄ  ｑｕｅｕｅ）に入力された順序、カーネルの優先順位、およびカーネルの推定された実行時間に基づいて、カーネルの実行が一定の時間間隔のタイムスロットで構成されたウィンドウ内で完了するようにカーネルの実行順序をスケジューリングする。
【０１２６】
ノンプリエンプティブスケジューリング部４３３は、カーネルの推定された実行時間に基づいて、ウィンドウ内で実行が完了することができるカーネルが優先的に実行されるようにカーネルの実行順序をスケジューリングする。
【０１２７】
予約スケジューリング部４３５は、カーネルのうちで応用プログラムの特性に応じて周期的に実行されるカーネルに対しては、実行周期に該当するウィンドウのタイムスロットを予約し、残りのタイムスロットに他のカーネルの実行順序をスケジューリングする。予約スケジューリング部４３５は、予約されたタイムスロットでは予約カーネル以外の他のカーネルが実行されないようにスケジューリングする。
【０１２８】
ウィンドウ変更部４３７は、ウィンドウ内で残ったタイムスロットがカーネルの推定された実行時間よりも小さい場合に、ウィンドウの大きさをカーネルの推定された実行時間だけ変更する。
【０１２９】
ウィンドウ変更部４３７は、ウインドウの大きさの変更を要請したカーネルがコマンドキューに格納されたカーネルのうちで優先順位が最も大きく、要請された変更の大きさが予め設定されたウィンドウ変更範囲に含まれ、前記ウィンドウの大きさ変更要請が予め設定された回数の範囲からなる場合に、ウィンドウの大きさを変更する。
【０１３０】
図５は、一般的なカーネルの実行方式を示す図である。図５を参照すれば、コマンドキュー（Ｃｏｍｍａｎｄ  Ｑｕｅｕｅ）に入力された順にカーネルＫ１、Ｋ２、Ｋ３が実行される。すなわち、ＦＩＦＯ方式によってカーネルが実行される。さらに具体的に詳察すれば、カーネルＫ１はＴｋ１中に実行され、デッドライン時間Ｄｋ１を満たす。カーネルＫ２はＴｋ２まで実行され、デッドライン時間Ｄｋ２を満たす。ところが、カーネルＫ３は、Ｔｋ２以後、デッドライン時間Ｄｋ３まで残った時間がＫ３の必要な実行時間よりも短いため、デッドライン時間は満たされない。デッドライン時間は、応用プログラムがエラーなく実行されるために、対応するカーネルが実行されなければならない制限時間を意味する。デッドライン時間を満たすことができなければ、該当カーネルに対応する応用プログラムが実行されなかったり、実行にエラーが発生することがある。
【０１３１】
図６は、一実施形態に係るカーネル実行順序スケジューリング方式を示す図である。図６は、デバイスで実行されるカーネルがプリエンプティブ（ｐｒｅｅｍｐｔｉｏｎ）可能な場合の一例を示す。
【０１３２】
カーネルがプリエンプティブ可能な場合とは、カーネルの実行途中、先順位カーネルのために実行中であるカーネルを止めて先順位のカーネルを実行させることが可能な場合を意味する。デバイスは、コマンドキュー（Ｃｏｍｍａｎｄ  ｑｕｅｕｅ）にプッシュ（ｐｕｓｈ）されたカーネルのうちで、推定されたカーネルのデッドライン時間に合わせてカーネルが実行されるようにコマンドキューを再構成する。
【０１３３】
図５と比較すれば、Ｋ３のデッドライン時間がＫ２のデッドライン時間よりも先に到来するため、デバイスはＫ３がＫ２よりも先に実行されるようにコマンドキューを再構成する。
【０１３４】
また、デバイスは、現在実行中であるカーネルの推定された実行時間が完了した後に他のカーネルの実行が開始されても、デッドライン時間を満たすことができれば、現在実行中であるカーネルを対置しなくてもよい。
【０１３５】
また、デバイスは、再構成によってもデッドライン時間を満たさない場合、優先順位を考慮して先順位のカーネルが先に実行されるようにコマンドキューを再構成する。
【０１３６】
図７は、一実施形態に係るカーネル実行順序スケジューリング方法に使用されるウィンドウおよびタイムスロットを示す図である。
【０１３７】
デバイスで実行されるカーネルがプリエンプティブ可能でない場合（ｎｏｎ−ｐｒｅｅｍｐｔｉｖｅ）、次のような問題が発生することがある。
【０１３８】
先ず、コマンドキュー（Ｃｏｍｍａｎｄ  Ｑｕｅｕｅ）にプッシュされた低い優先順位のカーネルが、コマンドキューでディスパッチ（ｄｉｓｐａｔｃｈ）されて実行が始まった状況で、以後にコマンドキューにプッシュされた高い優先順位のカーネルは、先に実行されたカーネルの実行が終了するまで実行を開始することができない。言い換えれば、デバイスは、実行中であるカーネルの実行を中止して先順位のカーネルを実行させることはできない。
【０１３９】
デバイスは、カーネル別にデバイスを使用することができる時間に制限を置いてもよい。カーネル実行は、一定の大きさのウィンドウ（Ｗｉｎｄｏｗ）単位で管理される。
【０１４０】
ウィンドウ単位でカーネルの実行を保障することにより、応用プログラムのリアルタイムスケジューリング（ｒｅａｌｔｉｍｅ  ｓｃｈｅｄｕｌｅ）が保障される。ウィンドウは、リアルタイム性を保障する最小単位で使用される。ウィンドウの大きさを調節してプログラムの性能がチューニング（ｔｕｎｉｎｇ）される。
【０１４１】
ウィンドウは、一定の時間間隔に区分されたタイムスロット（Ｔｉｍｅ−ｓｌｏｔ）で構成される。カーネルは、タイムスロットの割り当てを受けてデバイスで実行される。
【０１４２】
カーネルは、デバイスから応用プログラムの優先順位を考慮し、ウィンドウ内で実行可能なタイムスロットが割り当てられてもよい。カーネルは、ウィンドウ内で割り当てられたタイムスロットだけデバイスで実行されてもよく、実行を開始する時点で現在のウィンドウを逸脱する場合、次のウィンドウで実行が開始される。
【０１４３】
新たなウィンドウの開始時点で、該当カーネルよりも高い優先順位のカーネルがなければ、割り当てられたタイムスロットだけ実行される。
【０１４４】
図８は、他の一実施形態に係るカーネル実行順序スケジューリング方式を示す図である。図８を参照すれば、カーネルＫ１、Ｋ２、およびＫ３はそれぞれ、Ｔｋ１、Ｔｋ２、Ｔｋ３を基点にコマンドキューにプッシュされる。Ｔｋ１をＴ０とすれば、Ｋ２はＫ１よりも２スロット後に、Ｋ３はＫ１よりも３スロット後にプッシュされる。
【０１４５】
カーネルＫ１、Ｋ２、およびＫ３に割り当てられたタイムスロットはそれぞれ５スロット、６スロット、および４スロットである。Ｔ０時点において、Ｋ１は現在ウィンドウ内で５スロットを使用して実行が終了するものと推定された。ここで、推定された５スロットは、図４の推定部４１０で推定されるカーネルの実行時間に対応する。Ｋ１は、コマンドキューでポップ（ｐｏｐ）されてデバイスで５スロットの間に実行される。
【０１４６】
しかし、Ｔｋ２時間にコマンドキューにプッシュされたカーネルＫ２は、割り当てられたタイムスロットが６スロットであって、推定された実行時間が５スロットであるにもかかわらず、現在ウィンドウ内で（Ｔ０＋Ｗ）終了されないため実行されず、コマンドキューにそのまま留まるようになる。
【０１４７】
Ｋ２に続いてコマンドキューにプッシュされたカーネルＫ３は、Ｋ１の実行終了時点であるＴ０＋５スロット時点において、現在ウィンドウ内で終了可能な３スロットの推定された実行時間を有するため、Ｋ１カーネルが終了する時点にＫ３が実行されるようにスケジューリングされる。Ｋ３に割り当てられたタイムスロットは４スロットであるため、Ｋ３は推定された実行時間３スロットの間に実行される。
【０１４８】
新たなウィンドウが開始するＴ０＋Ｗ時点において、Ｋ２はコマンドキューでポップされてデバイスで実行される。したがって、ウィンドウ単位でＫ１、Ｋ２、およびＫ３の実行完了が保障される。
【０１４９】
図９は、さらに他の一実施形態に係るカーネル実行順序スケジューリング方式を示す図である。
【０１５０】
カーネルの実行が周期的な特性を有した場合であれば、特定タイムスロットを予約するスケジューリング方式が利用される。応用プログラムの特性を考慮して、応用プログラム水準で実行周期（Ｃｙｃｌｉｃ）と予約しようとするスロット数が決定される。カーネル実行順序スケジューリング装置は、実行周期と予約しようとするスロット数に基づいて、予約されたスロットが予約カーネルのために空いているように他のカーネルをスケジューリングする。
【０１５１】
図９を参照すれば、カーネルＫ３は、８スロットを周期として実行される。Ｋ３が初めて実行されるタイムスロットから８スロット単位で推定された実行時間３スロットの間にタイムスロットが予約される。カーネルＫ１およびＫ２は、残りのタイムスロットで実行されるようにスケジューリングされる。
【０１５２】
図１０は、さらに他の一実施形態に係るカーネル実行順序スケジューリング方式を示す図である。
【０１５３】
ウィンドウの大きさは、カーネルの実行時間によって変更される。ウィンドウ拡張方式は、タイムスロットの活用率を高めることができる。
【０１５４】
図１０を参照すれば、カーネルＫ２の実行開始可能時点において、現在ウィンドウには３スロットだけが残っている状態であって、Ｋ２の終了予想時間である５スロットよりも小さいため、Ｋ２は次のウィンドウで実行を開始するようになる。
【０１５５】
しかし、ウィンドウの拡張が可能であれば、デバイスのスケジューラは、ウィンドウの大きさを実行の完了に必要な２スロットだけ拡張することを要請されてもよく、デバイススケジューラで要請が受諾された場合、デバイスでカーネルの実行が開始される。
【０１５６】
ウィンドウ拡張要請の受諾可否は、次の条件に基づいて決定される。
【０１５７】
カーネル実行順序スケジューリング装置は、ウィンドウ拡張が要請された現在カーネルの優先順位よりも高いカーネルがコマンドキューにない場合、拡張スロットがウィンドウ拡張が許容されたスロットの範囲（ＭＡＸ＿ＷＩＮＤＷ＿ＥＸＴＥＮＳＩＯＮ）内にある場合、ウィンドウ内で既に拡張が発生し、カーネルの実行時間が拡張されたウィンドウを超過して実行されたことがない場合にウィンドウを拡張する。
【０１５８】
カーネル実行順序スケジューリング装置は、上述した条件を除いた要請に対しては、リアルタイム性保障のために要請を拒否する。最大許容が可能な拡張スロットの個数は、応用プログラムの特性とシステム性能を考慮して決定される。
【０１５９】
図１１は、一実施形態に係るカーネル実行順序スケジューリング方法のフローチャートである。
【０１６０】
ステップＳ１１１０で、カーネル実行順序スケジューリング装置は、カーネルの最終有効プログレスインデックス、カーネルが実行される環境の影響を示す最終メモリプログレスインデックス、および最終カーネルプログレスインデックスに基づいてカーネルの実行時間を推定する。
【０１６１】
有効プログレスインデックスは、システム環境から独立した特性を有するため、初めに推定された有効プログレスインデックスが最終有効プログレスインデックスとして使用される。
【０１６２】
カーネル実行順序スケジューリング装置は、物理プログレスインデックス、有効プログレスインデックス、カーネルのメモリ効率、および実行するカーネルに対するメモリ効率の変化量に基づいて最終メモリプログレスインデックスを推定する。
【０１６３】
カーネル実行順序スケジューリング装置は、物理プログレスインデックス、有効プログレスインデックス、カーネルに対するオペレーティングシステムの効率、および実行するカーネルに対するオペレーティングシステムの効率の変化量に基づいて最終カーネルプログレスインデックスを推定する。
【０１６４】
ステップＳ１１２０で、カーネル実行順序スケジューリング装置は、カーネルの推定された実行時間およびカーネルの優先順位に基づいてカーネルの実行順序を決定する。
【０１６５】
カーネル実行順序スケジューリング装置は、コマンドキュー（ｃｏｍｍａｎｄ  ｑｕｅｕｅ）に入力された順序、カーネルの優先順位、およびカーネルの推定された実行時間に基づいて、カーネルの実行が一定の時間間隔のタイムスロットで構成されたウィンドウ内で完了するようにカーネルの実行順序を決定する。
【０１６６】
上述した実施形態に係る方法は、多様なコンピュータ手段によって実行されるプログラム命令形態で実現され、コンピュータで読み取り可能な媒体に記録される。前記コンピュータで読み取り可能な媒体は、プログラム命令、データファイル、データ構造などを単独または組み合わせて含んでもよい。前記媒体に記録されるプログラム命令は、本発明のために特別に設計されて構成されたものであってもよく、コンピュータソフトウェア当業者に公示されて使用可能なものであってもよい。
【０１６７】
上述したように、本発明は限定された実施形態と図面によって説明されたが、本発明が上述した実施形態に限定されることはなく、本発明が属する分野において通常の知識を有する者であれば、このような記載から多様な修正および変形が可能である。
【０１６８】
したがって、本発明の範囲は、説明された実施形態に限定されて決定されてはならず、添付する特許請求の範囲だけでなく、この特許請求の範囲と均等なものなどによって定められなければならない。
【符号の説明】
【０１６９】
３１０  デバイス
４１０  推定部
４２０  プログレスインデックス推定部
４３０  制御部
４４０  有効プログレスカウンタ
４５０  メモリプログレスカウンタ
４６０  カーネルプログレスカウンタ
【図１】
2013161483.tif 000004
【図２】
2013161483.tif 000005
【図３】
2013161483.tif 000006
【図４】
2013161483.tif 000007
【図５】
2013161483.tif 000008
【図６】
2013161483.tif 000009
【図７】
2013161483.tif 000010
【図８】
2013161483.tif 000011
【図９】
2013161483.tif 000012
【図１０】
2013161483.tif 000013
【図１１】
2013161483.tif 000014