(58)【調査した分野】(Int.Cl.,DB名)
有効実行方式によって実行される命令語の実行時間を累積して前記有効プログレスインデックスを生成する有効プログレスカウンタ(EPC:Effective Progress Counter)、
前記カーネルが共有メモリにアクセスするのに消耗したサイクルを累積してメモリプログレスインデックス(MPI:Memory Progress Index)を生成するメモリプログレスカウンタ(MPC:Memory Progress Counter)、および
システムカーネル実行に消耗したサイクルを累積してカーネルプログレスインデックス(KPI:Kernel Progress Index)を生成するカーネルプログレスカウンタ(KPC:Kernel Progress Counter)、
をさらに含む、請求項1に記載のカーネル実行順序スケジューリング装置。
【発明の概要】
【発明が解決しようとする課題】
【0005】
カーネルの実行時間を比較的正確に推定することにより、所定のタイムスロットで構成されたウィンドウ基盤によってカーネルスケジュールのリアルタイム性を保障する装置および方法を提供することを目的とする。
【0006】
応用プログラムの固有な実行特性指標である有効プログレスインデックス、システム環境による性能指標であるメモリプログレスインデックス、およびカーネルプログレスインデックスを利用することにより、カーネルの実行時間を推定する装置および方法を提供する。
【課題を解決するための手段】
【0007】
一実施形態において、カーネル実行順序スケジューリング装置は、有効プログレスインデックス(EPI:Effective Progress Index)に基づいてカーネルの実行時間を推定する推定部、およびカーネルの推定された実行時間および前記カーネルの優先順位に基づいて前記カーネルの実行順序を決定する制御部を含む。
【0008】
前記制御部は、前記カーネルのスケジューリング方式がプリエンプティブ(preemptive)方式である場合、前記カーネルのデッドライン(deadline)時間に基づいて前記カーネルの実行順序をスケジューリングするプリエンプティブスケジューリング部を含んでもよい。
【0009】
前記制御部は、前記カーネルのスケジューリング方式がノンプリエンプティブ(non−preemptive)方式である場合、前記カーネルの推定された実行時間に基づいて所定サイズのウィンドウ単位で前記カーネルの実行順序をスケジューリングするノンプリエンプティブスケジューリング部を含んでもよい。
【0010】
前記ノンプリエンプティブスケジューリング部は、コマンドキュー(command queue)に入力された順序、前記カーネルの優先順位、および前記カーネルの推定された実行時間に基づいて、前記カーネルの実行が一定の時間間隔のタイムスロットで構成されたウィンドウ内で完了するように前記カーネルの実行順序をスケジューリングしてもよい。
【0011】
前記ノンプリエンプティブスケジューリング部は、前記カーネルの推定された実行時間に基づいて、前記ウィンドウ内で実行が完了されるカーネルが優先的に実行されるように前記カーネルの実行順序をスケジューリングしてもよい。
【0012】
前記制御部は、前記カーネルのうちで応用プログラムの特性に応じて周期的に実行されるカーネルに対しては、実行周期に該当するウィンドウのタイムスロットを予約し、残りのタイムスロットに他のカーネルの実行順序をスケジューリングする予約スケジューリング部をさらに含んでもよい。
【0013】
前記制御部は、ウィンドウ内で残ったタイムスロットがカーネルの推定された実行時間よりも小さい場合に、前記ウィンドウの大きさを前記カーネルの推定された実行時間だけ変更するウィンドウ変更部をさらに含んでもよい。
【0014】
前記ウィンドウ変更部は、前記ウィンドウの大きさの変更を要請したカーネルがコマンドキューに格納されたカーネルのうちで優先順位が最も大きく、要請された変更の大きさが予め設定されたウィンドウ変更範囲に含まれ、前記ウィンドウの大きさ変更要請が予め設定された回数の範囲からなる場合に、前記ウィンドウの大きさを変更してもよい。
【0015】
前記推定部は、前記カーネルの最終有効プログレスインデックス、前記カーネルが実行される環境の影響を示す最終メモリプログレスインデックス、および最終カーネルプログレスインデックスに基づいて前記カーネルの実行時間を推定してもよい。
【0016】
前記推定部は、応用プログラムを実行する過程で繰り返し実行されるカーネルのヒストリーに基づいて、前記有効プログレスインデックス、メモリプログレスインデックス、およびカーネルプログレスインデックスを推定するプログレスインデックス推定部を含んでもよい。
【0017】
前記推定部は、物理プログレスインデックス、前記有効プログレスインデックス、前記カーネルのメモリ効率、および実行するカーネルに対するメモリ効率の変化量に基づいて最終メモリプログレスインデックスを推定するメモリプログレスインデックス推定部、および物理プログレスインデックス、前記有効プログレスインデックス、前記カーネルに対するオペレーティングシステムの効率、および実行するカーネルに対する前記オペレーティングシステムの効率の変化量に基づいて最終カーネルプログレスインデックスを推定するカーネルプログレスインデックス推定部をさらに含んでもよい。
【0018】
前記推定部は、単独で実行されるカーネルのメモリ効率および共同で実行されるカーネルのメモリ効率に基づいて前記メモリ効率の変化量を推定する第1変化量推定部、および単独で実行されるカーネルに対するオペレーティングシステムの効率および共同で実行されるカーネルに対するオペレーティングシステムの効率に基づいて前記オペレーティングシステムの効率の変化量を推定する第2変化量推定部をさらに含んでもよい。
【0019】
前記推定部は、前記カーネルの非有効サイクルおよび前記メモリプログレスインデックスに基づいて前記メモリ効率を推定するメモリ効率推定部、および前記カーネルの非有効サイクルおよび前記カーネルプログレスインデックスに基づいて前記オペレーティングシステムの効率を推定するオペレーティングシステム効率推定部をさらに含んでもよい。
【0020】
前記プログレスインデックス推定部は、前記カーネルを構成するデータの大きさおよび前記データの並列化レベルに基づいて初期有効プログレスインデックスと前記有効プログレスインデックス間の相関関数を計算する有効相関関数計算部、前記カーネルを構成するデータの大きさおよび前記データの並列化レベルに基づいて初期メモリプログレスインデックスと前記メモリプログレスインデックス間の相関関数を計算するメモリ相関関数計算部、および前記カーネルを構成するデータの大きさおよび前記データの並列化レベルに基づいて初期カーネルプログレスインデックスと前記カーネルプログレスインデックス間の相関関数を計算するカーネル相関関数計算部を含んでもよい。
【0021】
他の一実施形態において、カーネル実行順序スケジューリング装置は、有効実行方式によって実行される命令語の実行時間を累積して前記有効プログレスインデックスを生成する有効プログレスカウンタ(EPC:Effective Progress Counter)、前記カーネルが共有メモリにアクセスするのに消耗したサイクルを累積してメモリプログレスインデックス(MPI:Memory Progress Index)を生成するメモリプログレスカウンタ(MPC:Memory Progress Counter)、およびシステムカーネル実行に消耗したサイクルを累積してカーネルプログレスインデックス(KPI:Kernel Progress Index)を生成するカーネルプログレスカウンタ(KPC:Kernel Progress Counter)をさらに含んでもよい。
【0022】
一実施形態において、カーネル実行順序スケジューリング方法は、有効プログレスインデックス(EPI:Effective Progress Index)に基づいてカーネルの実行時間を推定するステップ、およびカーネルの推定された実行時間および前記カーネルの優先順位に基づいて前記カーネルの実行順序を決定するステップを含む。
【0023】
前記決定するステップは、コマンドキュー(command queue)に入力された順序、前記カーネルの優先順位、および前記カーネルの推定された実行時間に基づいて、前記カーネルの実行が一定の時間間隔のタイムスロットで構成されたウィンドウ内で完了するように前記カーネルの実行順序を決定してもよい。
【0024】
前記推定するステップは、前記カーネルの最終有効プログレスインデックス、前記カーネルが実行される環境の影響を示す最終メモリプログレスインデックス、および最終カーネルプログレスインデックスに基づいて前記カーネルの実行時間を推定してもよい。
【0025】
前記推定するステップは、応用プログラムを実行する過程で繰り返し実行されるカーネルのヒストリーに基づいて、前記有効プログレスインデックス、メモリプログレスインデックス、およびカーネルプログレスインデックスを推定するステップを含んでもよい。
【0026】
前記推定するステップは、物理プログレスインデックス、前記有効プログレスインデックス、前記カーネルのメモリ効率、および実行するカーネルに対するメモリ効率の変化量に基づいて最終メモリプログレスインデックスを推定するステップ、および物理プログレスインデックス、前記有効プログレスインデックス、前記カーネルに対するオペレーティングシステムの効率、および実行するカーネルに対する前記オペレーティングシステムの効率の変化量に基づいて最終カーネルプログレスインデックスを推定するステップをさらに含んでもよい。
【0027】
一実施形態において、異機種コンピュータ環境システムは、複数の中央処理部を含むホストプロセッサ、複数のマイクロ実行部を含むコンピュータデバイス、カーネルそれぞれの有効プログレスインデックス(EPI:Effective Progress Index)に基づいてカーネルそれぞれの実行時間を推定する推定部、および前記カーネルそれぞれの推定された実行時間および前記カーネルそれぞれの優先順位に基づいて前記カーネルの実行順序を決定する制御部を含み、前記ホストプロセッサは、前記制御部で決定された前記実行順序に基づいて前記コンピュータデバイスでカーネルを実行することを命令するカーネル実行命令を送信してもよい。
【発明の効果】
【0028】
カーネルの実行時間を比較的正確に推定することにより、所定のタイムスロットで構成されたウィンドウ基盤でカーネルスケジュールのリアルタイム性を保障することができる。
【0029】
応用プログラムの固有な実行特性指標である有効プログレスインデックス、システム環境による性能指標であるメモリプログレスインデックス、およびカーネルプログレスインデックスを利用することにより、カーネルの実行時間を推定することができる。
【0030】
カーネルの推定された実行時間に基づいて、カーネルの応答レイテンシ(latency)を保障するためのリアルタイムスケジューリングを実行することができる。
【0031】
システムの性能および応用プログラムの特性を考慮してウィンドウの大きさを拡張させることにより、タイムスロットの活用率を高めることができる。
【0032】
カーネルの推定された実行時間およびウィンドウ基盤のスケジューリングを利用することにより、異機種多重コア方式のプログラムでカーネル実行の性能を保障しながら、リアルタイム性を要請するカーネルの応答速度を保障することができる。
【発明を実施するための形態】
【0034】
以下、一方の側に係る実施形態について、添付の図面を参照しながら詳細に説明する。
【0035】
OpenCL(Open Computing Language)およびOpenGL(Open Graphics Library)のような開放型並列プラットフォームの場合、異機種コンピュータ環境において、ホストがデバイスのコンピュータ資源を活用してプログラムを作成することができるプラットフォームを提供する。
【0036】
異機種コンピュータ環境は、ホスト(Host)プロセッサとコンピュータデバイスがバス(Bus)のような相互接続(interconnection)によって接続されている環境を意味する。ホストプロセッサは、コンピュータデバイスで実行するプログラムをバスを介して伝達する。ここで、コンピュータデバイスで実行するプログラムを、一般的にカーネルという。
【0037】
ホストプロセッサは、カーネルの実行のためにコンピュータデバイスにコマンド(command)を送信する。ここで、一般的にカーネルの実行は、FIFO(First In First Out)方式によって実行されるため、カーネルの優先順位を保障したり、カーネルの応答レイテンシ(latency)を保障することが困難である。
【0038】
GPU(Granphic Processing Unit)の活用範囲が広範囲化するに伴い、汎用的な応用プログラムの加速のための目的として使用されながら、優先順位基盤のカーネルスケジューリングまたはリアルタイム性保障のカーネルスケジューリングが必要となっている。また、一般的なGPUの場合、カーネル実行方式がノンプリエンプティブ(non−preemptive)方式であるため、ノンプリエンプティブ方式を考慮したリアルタイムスケジューリングが必要となる。
【0039】
また、実行される応用プログラムの正確な性能および進行が測定可能であれば、測定された値を指標化することにより、リアルタイムスケジューリング、性能改善、負荷均衡、および低電力管理のために応用プログラムの現状態を示す情報として活用することができる。
【0040】
さらに、システムで共有する資源に対する衝突状態を効率的にモニタリングして指標化することができれば、指標は応用プログラムの実行に必要な資源割当、再分配、およびスケジューリングを決定するにおいて重要な情報として活用することができる。問題は、どんな指標を生成して効率的に資源を分配するのかにある。
【0041】
ランタイム性能低下を発生させずに応用プログラムの状態を正確かつ精密に測定するのは容易ではない。また、応用プログラムの実行を構成する命令語の実行時間は一定ではない。さらに、応用プログラム実行時に共に実行される他の応用プログラムの予想外の影響により、応用プログラムの状態に対する正確な測定は容易ではない。
【0042】
単一応用プログラムが実行される場合にも、単一応用を構成する複数のスレッドが共に実行されれば互いに影響を及ぼすようになり、1つのスレッドで構成された場合にもスレッドを構成する命令語の実行時間が一定でないため、応用プログラムの状態測定が困難である。
【0043】
また、多重コア上で応用プログラムの同時実行により、共有資源アクセス時の衝突問題が発生する。特に、共有メモリアクセス時に発生する衝突によってシステムの性能低下が激しくなる。したがって、多重コア上でシステムの実行状態を正確にモニタリングし、共有した資源の衝突状態をモニタリングし、モニタリング結果を指標化する必要がある。このような指標を活用してカーネルの実行を制御することができる。
【0044】
図1は、一般的な応用プログラムが実行されるコンピュータ環境を示す図である。
【0045】
一般的に、応用プログラムは、プロセッサ上でメモリとハードウェアデバイスを資源とし、定められた機能を実行する。メモリは、通常の場合は階層的構造を有する。このとき、接続(access)速度が速いメモリはローカルバスに備えられ、接続速度は遅いが安価なメモリはシステムバス上に備えられてもよい。また、多重プロセッサは、高い性能の要求事項を満たすために1つのシステムに複数のプロセッサが集積したものであって、応用プログラムを並列処理する。
【0046】
一般的に、応用プログラムは1つ以上のスレッドで構成される。1つのプロセッサ上で多重スレッドが実行される。1つのプロセッサ上で多重スレッドが実行されることをマルチスレッディングと言う。応用プログラムの性能および進行状態を測定するためには、応用プログラムを構成するスレッドの性能および進行状態を測定しなければならない。
【0047】
図1は、一般的に構成されるコンピュータ環境の一例であるが、一方の側に係るカーネル実行順序スケジューリング装置の適用環境は、
図1に示す例に限定されることはない。
【0048】
図2は、一実施形態に係る有効プログレスインデックスの概念を示す図である。
【0049】
応用プログラムは、複数のスレッドで構成される。スレッドは、特定機能を実行するための命令語で構成される。命令語の実行方式は、有効実行(effective execution)方式および非有効実行(noneffective execution)方式に区分される。
【0050】
命令語の実行方式が有効実行方式である場合、命令語の実行完了時点または命令語群(グループ)の実行完了時点は一定のサイクルを有する。有効実行方式によって実行される命令語の大部分は、プロセッサの外部状況とは独立的に実行される。また、有効実行方式によって実行される命令語は、該当命令語の実行サイクルがプログラム進行のために必要となる。また、該当命令語の実行サイクルは、応用プログラムの目的に有効な命令語を実行するのに必要なプロセッササイクルで測定される。
【0051】
この反面、命令語の実行方式が非有効実行方式である場合、命令語あるいは命令語群(グループ)の実行完了時点は一定でない遅延サイクルを有する。非有効実行方式によって実行される命令語の大部分は、入出力端、メモリなどのように共有する資源を使用しなければならない場合である。プロセッサで非有効実行方式の命令語が実行される場合、該当命令語の実行が完了するためには数十サイクルの遅延が要求されることがある。このような遅延は、該当命令語の実行時、プロセッサがアクセスしようとする共有資源を他のプロセッサで使用する場合に発生する。共有資源に他のプロセッサと同時接続することによって衝突が発生し、衝突によって遅延が発生するようになる。
【0052】
図2を参照すれば、スレッドが実行される物理的時間(Physical time)は一定に増加する。このとき、物理的時間の増加は、RPI(Real Progress Index、以下「RPI」とする)で表示される。
【0053】
有効実行(effective execution)方式の命令語は、同じ実行時間内に命令語が完了する。この反面、非有効実行(Noneffective execution)方式の命令語は、他のスレッドの実行によって影響を受けたり実行時点に応じて発生する状況のため、命令語の実行完了時間が一定ではなくなる。
【0054】
非有効実行は、プロセッサの命令語水準で非有効実行をするハードウェア非有効実行(Hardware Noneffective execution、以下「HWNE」とする)と命令語で構成された関数またはシステムのカーネル水準で応用プログラムの実行中に発生するイベントで非有効実行をするソフトウェア非有効実行(Software noneffective execution、以下「SWNE」とする)に区分される。ここで、システムのカーネルは、一般的なユーザ応用プログラムではなく、オペレーティングシステムを構成するシステムプログラムを意味する。HWNEとSWNEは、予め設定された基準に応じて区分される。
【0055】
実際のスレッドの実行時間からSWNEとHWNEを除いた残りの部分の実行時間は、すべて有効な実行時間であると言える。スレッドの実行からSWNEとHWNEを除いた残りの部分を実行するのに必要なサイクルは毎回同じ値を有するため、SWNEとHWNEを除いた残りの部分を指標化すれば、スレッドの有効な(effective)実行指標として活用することができる。ここで、有効な実行時間を示す指標を、有効プログレスインデックス(Effective Progress Index、以下「EPI」とする)と定義する。EPIは次の数式(1)によって表現される。
【0056】
P
スレッド=P
有効実行+P
非有効実行
τ
有効スレッドプログレス=τ
物理的−(τ
SWNE+τ
HWNE) (1)
【0057】
ここで、応用プログラムを構成するプログラムP
スレッドは、有効実行(P
有効実行)と非有効実行(P
非有効実行)に区分される。スレッドの有効プログレスを示す時間(τ
有効スレッドプログレス)は、スレッドが実行される物理的時間(τ
物理的)からSWNE実行時間(τ
SWNE)とHWNE実行時間(τ
HWNE)を除去すればよい。
【0058】
HWNEに該当する命令語は、共有資源へのアクセスが必要な命令語である。このような命令語の実行サイクルは、外部I/O(Input/Output)またはメモリアクセス遅延によるサイクルを含んでもよい。スレッドの実行中に外部I/O(Input/Output)またはメモリアクセス遅延に消耗したサイクルをスレッド別に累積管理した指標を、メモリプログレスインデックス(MPI:Memory Progress Index)と定義する。
【0059】
スレッドの実行中にシステムのイベントをオペレーティングシステムのカーネルで処理するために消耗するサイクルを、カーネルプログレスインデックス(KPI:Kernel Progress Index)と定義する。カーネルプログレスインデックスは、インタラプト、スレッドコンテキストスイッチ(context switch)、およびマロック(malloc)などのシステム関数コールによるカーネル共有資源のアクセス衝突によって測定される。
【0060】
SWNEおよびHWNEを実行する間、実際の物理的な時間が増加してもEPIは増加しない。したがって、EPI値は、スレッドの実行において絶対的な進行位置を示す指標として使用される。EPIが重要な理由は、実際の応用プログラムを構成するスレッドのプロセッサ占有率ではなく、実際の応用プログラムの進行状態を正確に示すことができるためである。
【0061】
スレッドの実行において、SWNEおよびHWNEは、予め設定された基準に基づいて判断される。予め設定された基準は、現在まで測定された命令語または命令語で構成された関数の実行時間が一定の場合と一定でない場合を考慮して定義される。ただし、予め設定された基準は定義されるSWNEおよびHWNEの一例に過ぎず、これに限定されることはなく、一方の側に係る発明が属する分野において通常の知識を有する者が容易に類推することができる範囲を含んでもよい。
【0062】
下記表1では、SWNEおよびHWNEの一例が分類されている。
【0064】
表1において、ビジーウェイティングは、I/O AccessのためのPolling方式のアクセス形態で、実際のI/Oによるデータ送受信の場合にはSWNEに該当しない。ビジーウェイティングは、I/Oの状態をチェックするために「繰り返し」コードを実行する場合にのみSWNEに該当する。SWNEおよびHWNEは、表1に例示された場合ではなくても、スレッドの機能を実行するにおいて有効でないすべての実行区間を含んでもよい。
【0065】
RPIは、スレッドがプロセッサで実行中に累積したプロセッササイクルの累積値を意味する。また、RPIは、スレッドのプロセッサ占有率を示す指標として使用される。
【0066】
EPIは、スレッドのプロセッササイクル水準でカウントされた有効実行サイクルの累積値を意味する。また、EPIは、スレッドの有効進行状態を示す指標として使用される。
【0067】
MPIは、スレッドの実行中に共有資源アクセス衝突によってストール(Stall)したり消耗したサイクルの累積値を意味する。また、MPIは、共有資源へのアクセスおよび衝突発生程度を示す指標として使用される。
【0068】
KPIは、スレッドの実行中にシステムカーネル実行によって発生する非有効サイクルの累積値を意味する。また、KPIは、システムカーネルで共有する資源へのアクセスおよび衝突発生程度を示す指標として使用される。
【0069】
それぞれの指標を活用することにより、応用プログラムを構成するスレッドの状態が分析される。例えば、EPIとRPIの差を利用することにより、応用プログラムのプロセッサ占有率に対比する実際応用プログラムの進行状態を把握する。
【0070】
EPIは、カーネルが実行される環境から独立的な特性を有する。すなわち、同じ入力に対し、実行環境とは関係なく常に同じ出力を有する指標である。したがって、システムと分離した状況で応用プログラムの実行特性を示す。
【0071】
異機種コンピュータシステムのデバイスで実行されるカーネルは、上述したスレッドに対応する。したがって、一実施形態に係るカーネル実行順序スケジューリング装置は、上述したスレッドのEPI、MPI、KPI、RPIをカーネルに適用することにより、カーネルの実行性能をモニタリングする。
【0072】
より具体的に、異機種コンピュータシステムのデバイスで実行されるカーネルに適用されるEPI、MPI、KPIは、次の意味を有する。EPIは、応用プログラムが実行されるシステムの変化から独立した応用プログラム自体とプロセッサ自体の実行特性を示す指標である。MPIは、システム構成のうちでメモリの構造的特性を反映し、メモリレイテンシ(latency)および衝突(collision)などの実行特性を反映した指標である。KPIは、システムのオペレーティングシステムの特性を反映した指標であって、カーネルの資源使用、同期化、および共有資源割当によるオペレーティングシステムの応答速度などを反映した性能指標である。
【0073】
図3は、一実施形態に係るカーネル実行順序スケジューリング方法が適用されるホストとデバイスで構成された異機種コンピュータ環境システムを示す図である。
図3を参照すれば、ホストは複数のCPUで構成されてもよく、デバイス310は複数のME(Micro Execution unit)で構成される。
【0074】
ホストは、デバイス310でカーネルを実行するために、カーネルを実行するためのコマンド(command)をデバイスに送信する。送信されたコマンドは、コマンドキュー(command queue)にプッシュ(push)され、デバイスによってポップ(pop)されて該当カーネルが実行される。
【0075】
一般的な場合、コマンドキューにプッシュされたコマンドは、FIFO(First In First Out)方式によってポップされ、優先順位を考慮したりレイテンシ(latency)が考慮されない。したがって、高い優先順位のカーネルはコマンドキューに先にプッシュされ、実行されている低い優先順位のカーネルのために処理されず、コマンドキューにペンディング(pending)状態として留まる。
【0076】
優先順位およびレイテンシを考慮したカーネルスケジューリングのためには、コマンドキューにプッシュされたカーネルの優先順位とデッドライン(deadline)を考慮し、コマンドキューでカーネルの実行順序を再構成することによって実現される。デッドラインは、該当カーネルの動作を完了するための制限時間を意味する。
【0077】
デッドライン基盤のカーネル実行順序を再構成するためには、コマンドキューにプッシュされたカーネルの実行時間が分からなければならないが、ここで、上述したEPI、MPI、KPIが使用される。
【0078】
図4は、一実施形態に係るカーネル実行順序スケジューリング装置のブロック図である。
図4を参照すれば、カーネル実行順序スケジューリング装置は、推定部410、制御部430、有効プログレスカウンタ440、メモリプログレスカウンタ450、およびカーネルプログレスカウンタ460を含む。
【0079】
推定部410は、有効プログレスインデックス(EPI:Effective Progress Index)に基づいてカーネルの実行時間を推定する。より具体的には、推定部410は、カーネルの最終有効プログレスインデックス、カーネルが実行される環境の影響を示す最終メモリプログレスインデックス、および最終カーネルプログレスインデックスに基づいてカーネルの実行時間を推定する。
【0080】
最終有効プログレスインデックス、最終メモリプログレスインデックス、および最終カーネルプログレスインデックスの合計がカーネルの実行時間として推定される。
【0081】
制御部430は、推定部410で推定された実行時間およびカーネルの優先順位に基づいてカーネルの実行順序を決定する。
【0082】
推定部410は、プログレスインデックス推定部420、メモリプログレスインデックス推定部411、カーネルプログレスインデックス推定部412、第1変化量推定部413、第2変化量推定部414、メモリ効率推定部415、およびオペレーティングシステム効率推定部416を含んでもよい。
【0083】
プログレスインデックス推定部420は、応用プログラムを実行する過程で繰り返し行われるカーネルのヒストリーに基づいて、有効プログレスインデックス、メモリプログレスインデックス、およびカーネルプログレスインデックスを推定する。
【0084】
応用プログラムが実行されれば、繰り返し行われるカーネルがある。プログレスインデックス推定部420は、カーネルが繰り返し行われる度に、有効プログレスインデックス、メモリプログレスインデックス、およびカーネルプログレスインデックスを推定する。プログレスインデックス推定部420は、繰り返される前の有効プログレスインデックスと繰り返された後の有効プログレスインデックスを比較して両者の相関関係を計算する。プログレスインデックス推定部420は、メモリプログレスインデックスおよびカーネルプログレスインデックスに対しても相関関係を計算する。
【0085】
メモリプログレスインデックス推定部411は、物理プログレスインデックス(RPI)、有効プログレスインデックス(EPI)、カーネルのメモリ効率(ME:Memory Efficiency)、および実行するカーネルに対するメモリ効率の変化量(△ME)に基づいて最終メモリプログレスインデックスを推定する。
【0086】
カーネルプログレスインデックス推定部412は、物理プログレスインデックス(RPI)、有効プログレスインデックス(EPI)、カーネルに対するオペレーティングシステムの効率(KE:Kernel Efficiency)、および実行するカーネルに対するオペレーティングシステムの効率の変化量(△KE)に基づいて最終カーネルプログレスインデックスを推定する。
【0087】
第1変化量推定部413は、単独で実行されるカーネルのメモリ効率および共同で実行されるカーネルのメモリ効率に基づいてメモリ効率の変化量を推定する。
【0088】
第2変化量推定部414は、単独で実行されるカーネルに対するオペレーティングシステムの効率および共同で実行されるカーネルに対するオペレーティングシステムの効率に基づいてオペレーティングシステムの効率の変化量を推定する。
【0089】
メモリ効率推定部415は、カーネルの非有効サイクルおよびメモリプログレスインデックスに基づいてメモリ効率を推定する。EPIとRPIの差を、スレッドの非有効サイクル(T
ne)と定義する。
【0090】
メモリ効率推定部415は、非有効サイクル(T
ne)とMPIを利用してカーネルのメモリ効率(ME)を計算する。このとき、メモリ効率(ME:Memory Efficiency)は、次のように定義する。ME=1−(MPI/T
ne)、MEは、カーネル間に共有するメモリのうち、衝突せずに有効に使用される区間の比率を示す指標として使用される。
【0091】
オペレーティングシステム効率推定部416は、カーネルの非有効サイクルおよびカーネルプログレスインデックスに基づいてオペレーティングシステムの効率を推定する。
【0092】
オペレーティングシステム効率推定部416は、非有効サイクル(T
ne)とKPIを利用してカーネルに対するオペレーティングシステムの効率(KE)を計算する。このとき、カーネルに対するオペレーティングシステムの効率(KE:Kernel Efficiency)は、次のように定義する。KE=1−(KPI/T
ne)、KEは、オペレーティングシステム実行区間のうち、カーネル共有資源で衝突せずに有効に使用される区間の比率を示す指標として使用される。
【0093】
MEおよびKEはシステム依存的な指標であるため、現在実行されているカーネルに示されたシステムの状態を示していると言える。したがって、MEおよびKEを性能予測に反映して現在のシステム状況を反映した指標を生成する。
【0094】
プログレスインデックス推定部420は、有効相関関数計算部421、メモリ相関関数計算部423、およびカーネル相関関数計算部425を含んでもよい。
【0095】
異機種コンピュータ環境システムのように開放型プログラムを使用して作成される応用プログラムでは、デバイスの加速性が利用される。
【0096】
異機種コンピュータ環境システムのホストは、応用プログラムを構成するモジュールのうちで並列加速が可能な部分に対し、「加速に使用されるデータ」と「計算しようとする命令語」の集合であるカーネルを対象デバイスで実行可能なコードにコンパイルした後、対象デバイスで該当カーネルを実行するようにする。
【0097】
該当カーネルは、応用プログラムで繰り返し実行される特徴を有する。カーネルとして処理しなければならない多様なデータ集合が使用される。
【0098】
プログレスインデックス推定部420は、繰り返し実行されるカーネルに対し、EPI、MPI、およびKPIをプロファイリング(profiling)する。プログレスインデックス推定部420は、プロファイリングされたEPI、MPI、およびKPIを、入力データの大きさ(以下「s」と表記)と入力データの並列化レベル(以下「p」と表記)に対する関数にモデリングする。
【0099】
有効相関関数計算部421は、カーネルを構成するデータの大きさおよびデータの並列化レベルに基づいて、初期有効プログレスインデックスと有効プログレスインデックス間の相関関数を計算する。
【0100】
メモリ相関関数計算部423は、カーネルを構成するデータの大きさおよびデータの並列化レベルに基づいて、初期メモリプログレスインデックスとメモリプログレスインデックス間の相関関数を計算する。
【0101】
カーネル相関関数計算部425は、カーネルを構成するデータの大きさおよびデータの並列化レベルに基づいて、初期カーネルプログレスインデックスとカーネルプログレスインデックス間の相関関数を計算する。
【0102】
例えば、t
0時間でのカーネル実行で取得したカーネルの性能指標をKPI
t0、MPI
t0、EPI
t0とすれば、次のカーネル実行による性能指標KPI’、MPI’、EPI’は、以前性能指標との関係において次のように表現される。それぞれの性能指標は指標間の独立的な指標であり、以前指標に対するsとpに対する関数にモデリングされる。
【0103】
KPI’=f
k(s、p)*KPI
t0
MPI’=f
m(s、p)*MPI
t0
EPI’=f
e(s、p)*EPI
t0
【0104】
EPI’は、有効実行サイクルに基づいた性能指標であって、同じ入力に対して決定的な(deterministic)特性を有する。したがって、入力データセットに影響を受ける部分(C
ds)と受けない部分(C
ids)に区分されてもよく、EPI’は次のように表現される。
【0105】
EPI’=C
ids+f’e(s、p)*C
ds
カーネルの実行において、入力データの大きさと並列化レベルによって実際に予想される実行時間をT’pとすれば、EPI’、MPI’、KPI’を利用して次のように計算される。
【0106】
T’p=KPI’+MPI’+EPI’
【0107】
プログレスインデックス推定部420は、応用プログラムが実行されるターゲットシステムのエミュレーションを利用し、sとpにモデリングされるEPI、KPI、MPIを推定する。プログレスインデックス推定部420は、繰り返される前のEPI、KPI、MPIと繰り返された後のEPI、KPI、MPIを比較して相関関数を計算する。
【0108】
プログレスインデックス推定部420は、別途に準備された応用プログラムのランニングコードの実行から、sとpにモデリングされるEPI、KPI、MPIを推定する。また、プログレスインデックス推定部420は、繰り返される前のEPI、KPI、MPIと繰り返された後のEPI、KPI、MPIを比較して相関関数を計算する。
【0109】
プログレスインデックス推定部420は、デバイスでカーネルが繰り返し実行される特性を活用し、実際カーネルの実行途中に入力されたデータセット(s)および並列化レベル(p)に対する値を記録し、記録された値を活用して相関関数を計算する。
【0110】
プログレスインデックス推定部420は、リニア補間(Linear interpolation)によって相関関数を計算する。プログレスインデックス推定部420は、入力データセットの大きさ(s)、並列化レベル(p)の一次関数の形態で表現された相関関数の係数値を計算する。計算された係数値は、ヒストリー基盤の性能予測のために実行カーネルコード別に格納されてもよく、ランタイム実行時に抽出して使用される。
【0111】
デバイスでカーネルが同時に実行されれば、現在実行されているカーネルのKEおよびMEがカーネル実行時間予測に反映される。
【0112】
例えば、カーネルK1、K2、K3それぞれの単独実行で計算されたMPIとKPIを利用し、計算された効率指標をそれぞれME
1、KE
1、ME
2、KE
2、ME
3、KE
3と仮定する。ここで、K1とK2がデバイスで現在実行されており、実行中に推定されたそれぞれのMPIとKPIによって計算された効率指標がそれぞれ‘ME
1、‘KE1、‘ME
2、‘KE
2であるとすれば、K1とK2の共同実行によって変化したそれぞれの効率が計算される。各カーネルに対する効率の変化量は、次のように表現される。
【0113】
△ME
1=ME
1−‘ME1
△KE
1=KE
1−‘KE1
同じ方法によってK2に対するME、KEの変化量が計算される。計算された変化量をカーネルの共同実行可能な場合に対して平均すれば、デバイスで実行されるカーネルに対し、メモリおよびオペレーティングシステムの効率の変化量が計算される。メモリ効率の変化量およびオペレーティングシステム効率の変化量は、次のように表現される。
【0114】
△KE=ΣKEn/n
△ME=ΣMEn/n
△KE、△ME、および相関関数を考慮し、システム状況を反映した最終性能予測指数である最終カーネルプログレスインデックスKPI’sおよび最終メモリプログレスインデックスMPI’sが下記のように計算される。
【0115】
ヒストリー基盤の性能予測によってKPI’、MPI’、およびEPI’が推定される。KPI’、MPI’、およびEPI’を利用してカーネルの実行時間RPI’が推定される。しかし、現在のシステムの特性を示す△KE、△ME値があれば、現在システムの実行性能指標を反映したKPI’s、MPI’sは次のように計算される。
【0116】
KPI’s={1−(KE+△KE)}*(RPI’−EPI’)
MPI’s={1−(ME+△ME)}*(RPI’−EPI’)
【0117】
システムの現在の性能指標を反映したカーネルの最終実行時間T’pは、T’p=KPI’s+MPI’s+EPI’と推定される。EPI’はシステムの特性に影響を受けないため、KPI’sおよびMPI’sと共に使用される。
【0118】
有効プログレスカウンタ440は、有効実行方式によって実行される命令語の実行時間を累積して有効プログレスインデックスを生成する。
【0119】
メモリプログレスカウンタ(Memory Progress Counter、以下「MPC」とする)450は、カーネルが共有メモリにアクセスするのに消耗したサイクルを累積してメモリプログレスインデックス(MPI:Memory Progress Index)を生成する。
【0120】
カーネルプログレスカウンタ(Kernel Progress Counter、以下「KPC」とする)460は、カーネルがプロセッサを占有し、システムカーネル実行に消耗したサイクルを累積してカーネルプログレスインデックス(KPI:Kernel Progress Index)を生成する。
【0121】
システムカーネル実行の例としては、インタラプト、スレッドコンテキストスイッチ(thread context switch)、mallocなどのシステム関数がある。このようなシステム関数のコールによってカーネル共有資源でのアクセス過程で衝突が発生することにより、非有効実行区間が発生する。
【0122】
制御部430は、プリエンプティブスケジューリング部431、ノンプリエンプティブスケジューリング部433、予約スケジューリング部435、およびウィンドウ変更部437を含んでもよい。
【0123】
プリエンプティブスケジューリング部431は、カーネルのスケジューリング方式がプリエンプティブ(preemptive)方式である場合、カーネルのデッドライン(deadline)時間に基づいてカーネルの実行順序をスケジューリングする。プリエンプティブスケジューリング部431は、デッドライン時間が速く到達する順にカーネルの実行順序をスケジューリングする。
【0124】
ノンプリエンプティブスケジューリング部433は、カーネルのスケジューリング方式がノンプリエンプティブ(non−preemptive)方式である場合、カーネルの推定された実行時間に基づいて所定サイズのウィンドウ単位でカーネルの実行順序をスケジューリングする。
【0125】
ノンプリエンプティブスケジューリング部433は、コマンドキュー(command queue)に入力された順序、カーネルの優先順位、およびカーネルの推定された実行時間に基づいて、カーネルの実行が一定の時間間隔のタイムスロットで構成されたウィンドウ内で完了するようにカーネルの実行順序をスケジューリングする。
【0126】
ノンプリエンプティブスケジューリング部433は、カーネルの推定された実行時間に基づいて、ウィンドウ内で実行が完了することができるカーネルが優先的に実行されるようにカーネルの実行順序をスケジューリングする。
【0127】
予約スケジューリング部435は、カーネルのうちで応用プログラムの特性に応じて周期的に実行されるカーネルに対しては、実行周期に該当するウィンドウのタイムスロットを予約し、残りのタイムスロットに他のカーネルの実行順序をスケジューリングする。予約スケジューリング部435は、予約されたタイムスロットでは予約カーネル以外の他のカーネルが実行されないようにスケジューリングする。
【0128】
ウィンドウ変更部437は、ウィンドウ内で残ったタイムスロットがカーネルの推定された実行時間よりも小さい場合に、ウィンドウの大きさをカーネルの推定された実行時間だけ変更する。
【0129】
ウィンドウ変更部437は、ウインドウの大きさの変更を要請したカーネルがコマンドキューに格納されたカーネルのうちで優先順位が最も大きく、要請された変更の大きさが予め設定されたウィンドウ変更範囲に含まれ、前記ウィンドウの大きさ変更要請が予め設定された回数の範囲からなる場合に、ウィンドウの大きさを変更する。
【0130】
図5は、一般的なカーネルの実行方式を示す図である。
図5を参照すれば、コマンドキュー(Command Queue)に入力された順にカーネルK1、K2、K3が実行される。すなわち、FIFO方式によってカーネルが実行される。さらに具体的に詳察すれば、カーネルK1はT
k1中に実行され、デッドライン時間D
k1を満たす。カーネルK2はT
k2まで実行され、デッドライン時間D
k2を満たす。ところが、カーネルK3は、T
k2以後、デッドライン時間D
k3まで残った時間がK3の必要な実行時間よりも短いため、デッドライン時間は満たされない。デッドライン時間は、応用プログラムがエラーなく実行されるために、対応するカーネルが実行されなければならない制限時間を意味する。デッドライン時間を満たすことができなければ、該当カーネルに対応する応用プログラムが実行されなかったり、実行にエラーが発生することがある。
【0131】
図6は、一実施形態に係るカーネル実行順序スケジューリング方式を示す図である。
図6は、デバイスで実行されるカーネルがプリエンプティブ(preemption)可能な場合の一例を示す。
【0132】
カーネルがプリエンプティブ可能な場合とは、カーネルの実行途中、先順位カーネルのために実行中であるカーネルを止めて先順位のカーネルを実行させることが可能な場合を意味する。デバイスは、コマンドキュー(Command queue)にプッシュ(push)されたカーネルのうちで、推定されたカーネルのデッドライン時間に合わせてカーネルが実行されるようにコマンドキューを再構成する。
【0133】
図5と比較すれば、K3のデッドライン時間がK2のデッドライン時間よりも先に到来するため、デバイスはK3がK2よりも先に実行されるようにコマンドキューを再構成する。
【0134】
また、デバイスは、現在実行中であるカーネルの推定された実行時間が完了した後に他のカーネルの実行が開始されても、デッドライン時間を満たすことができれば、現在実行中であるカーネルを対置しなくてもよい。
【0135】
また、デバイスは、再構成によってもデッドライン時間を満たさない場合、優先順位を考慮して先順位のカーネルが先に実行されるようにコマンドキューを再構成する。
【0136】
図7は、一実施形態に係るカーネル実行順序スケジューリング方法に使用されるウィンドウおよびタイムスロットを示す図である。
【0137】
デバイスで実行されるカーネルがプリエンプティブ可能でない場合(non−preemptive)、次のような問題が発生することがある。
【0138】
先ず、コマンドキュー(Command Queue)にプッシュされた低い優先順位のカーネルが、コマンドキューでディスパッチ(dispatch)されて実行が始まった状況で、以後にコマンドキューにプッシュされた高い優先順位のカーネルは、先に実行されたカーネルの実行が終了するまで実行を開始することができない。言い換えれば、デバイスは、実行中であるカーネルの実行を中止して先順位のカーネルを実行させることはできない。
【0139】
デバイスは、カーネル別にデバイスを使用することができる時間に制限を置いてもよい。カーネル実行は、一定の大きさのウィンドウ(Window)単位で管理される。
【0140】
ウィンドウ単位でカーネルの実行を保障することにより、応用プログラムのリアルタイムスケジューリング(realtime schedule)が保障される。ウィンドウは、リアルタイム性を保障する最小単位で使用される。ウィンドウの大きさを調節してプログラムの性能がチューニング(tuning)される。
【0141】
ウィンドウは、一定の時間間隔に区分されたタイムスロット(Time−slot)で構成される。カーネルは、タイムスロットの割り当てを受けてデバイスで実行される。
【0142】
カーネルは、デバイスから応用プログラムの優先順位を考慮し、ウィンドウ内で実行可能なタイムスロットが割り当てられてもよい。カーネルは、ウィンドウ内で割り当てられたタイムスロットだけデバイスで実行されてもよく、実行を開始する時点で現在のウィンドウを逸脱する場合、次のウィンドウで実行が開始される。
【0143】
新たなウィンドウの開始時点で、該当カーネルよりも高い優先順位のカーネルがなければ、割り当てられたタイムスロットだけ実行される。
【0144】
図8は、他の一実施形態に係るカーネル実行順序スケジューリング方式を示す図である。
図8を参照すれば、カーネルK1、K2、およびK3はそれぞれ、T
k1、T
k2、T
k3を基点にコマンドキューにプッシュされる。T
k1をT
0とすれば、K2はK1よりも2スロット後に、K3はK1よりも3スロット後にプッシュされる。
【0145】
カーネルK1、K2、およびK3に割り当てられたタイムスロットはそれぞれ5スロット、6スロット、および4スロットである。T
0時点において、K1は現在ウィンドウ内で5スロットを使用して実行が終了するものと推定された。ここで、推定された5スロットは、
図4の推定部410で推定されるカーネルの実行時間に対応する。K1は、コマンドキューでポップ(pop)されてデバイスで5スロットの間に実行される。
【0146】
しかし、T
k2時間にコマンドキューにプッシュされたカーネルK2は、割り当てられたタイムスロットが6スロットであって、推定された実行時間が5スロットであるにもかかわらず、現在ウィンドウ内で(T
0+W)終了されないため実行されず、コマンドキューにそのまま留まるようになる。
【0147】
K2に続いてコマンドキューにプッシュされたカーネルK3は、K1の実行終了時点であるT
0+5スロット時点において、現在ウィンドウ内で終了可能な3スロットの推定された実行時間を有するため、K1カーネルが終了する時点にK3が実行されるようにスケジューリングされる。K3に割り当てられたタイムスロットは4スロットであるため、K3は推定された実行時間3スロットの間に実行される。
【0148】
新たなウィンドウが開始するT
0+W時点において、K2はコマンドキューでポップされてデバイスで実行される。したがって、ウィンドウ単位でK1、K2、およびK3の実行完了が保障される。
【0149】
図9は、さらに他の一実施形態に係るカーネル実行順序スケジューリング方式を示す図である。
【0150】
カーネルの実行が周期的な特性を有した場合であれば、特定タイムスロットを予約するスケジューリング方式が利用される。応用プログラムの特性を考慮して、応用プログラム水準で実行周期(Cyclic)と予約しようとするスロット数が決定される。カーネル実行順序スケジューリング装置は、実行周期と予約しようとするスロット数に基づいて、予約されたスロットが予約カーネルのために空いているように他のカーネルをスケジューリングする。
【0151】
図9を参照すれば、カーネルK3は、8スロットを周期として実行される。K3が初めて実行されるタイムスロットから8スロット単位で推定された実行時間3スロットの間にタイムスロットが予約される。カーネルK1およびK2は、残りのタイムスロットで実行されるようにスケジューリングされる。
【0152】
図10は、さらに他の一実施形態に係るカーネル実行順序スケジューリング方式を示す図である。
【0153】
ウィンドウの大きさは、カーネルの実行時間によって変更される。ウィンドウ拡張方式は、タイムスロットの活用率を高めることができる。
【0154】
図10を参照すれば、カーネルK2の実行開始可能時点において、現在ウィンドウには3スロットだけが残っている状態であって、K2の終了予想時間である5スロットよりも小さいため、K2は次のウィンドウで実行を開始するようになる。
【0155】
しかし、ウィンドウの拡張が可能であれば、デバイスのスケジューラは、ウィンドウの大きさを実行の完了に必要な2スロットだけ拡張することを要請されてもよく、デバイススケジューラで要請が受諾された場合、デバイスでカーネルの実行が開始される。
【0156】
ウィンドウ拡張要請の受諾可否は、次の条件に基づいて決定される。
【0157】
カーネル実行順序スケジューリング装置は、ウィンドウ拡張が要請された現在カーネルの優先順位よりも高いカーネルがコマンドキューにない場合、拡張スロットがウィンドウ拡張が許容されたスロットの範囲(MAX_WINDW_EXTENSION)内にある場合、ウィンドウ内で既に拡張が発生し、カーネルの実行時間が拡張されたウィンドウを超過して実行されたことがない場合にウィンドウを拡張する。
【0158】
カーネル実行順序スケジューリング装置は、上述した条件を除いた要請に対しては、リアルタイム性保障のために要請を拒否する。最大許容が可能な拡張スロットの個数は、応用プログラムの特性とシステム性能を考慮して決定される。
【0159】
図11は、一実施形態に係るカーネル実行順序スケジューリング方法のフローチャートである。
【0160】
ステップS1110で、カーネル実行順序スケジューリング装置は、カーネルの最終有効プログレスインデックス、カーネルが実行される環境の影響を示す最終メモリプログレスインデックス、および最終カーネルプログレスインデックスに基づいてカーネルの実行時間を推定する。
【0161】
有効プログレスインデックスは、システム環境から独立した特性を有するため、初めに推定された有効プログレスインデックスが最終有効プログレスインデックスとして使用される。
【0162】
カーネル実行順序スケジューリング装置は、物理プログレスインデックス、有効プログレスインデックス、カーネルのメモリ効率、および実行するカーネルに対するメモリ効率の変化量に基づいて最終メモリプログレスインデックスを推定する。
【0163】
カーネル実行順序スケジューリング装置は、物理プログレスインデックス、有効プログレスインデックス、カーネルに対するオペレーティングシステムの効率、および実行するカーネルに対するオペレーティングシステムの効率の変化量に基づいて最終カーネルプログレスインデックスを推定する。
【0164】
ステップS1120で、カーネル実行順序スケジューリング装置は、カーネルの推定された実行時間およびカーネルの優先順位に基づいてカーネルの実行順序を決定する。
【0165】
カーネル実行順序スケジューリング装置は、コマンドキュー(command queue)に入力された順序、カーネルの優先順位、およびカーネルの推定された実行時間に基づいて、カーネルの実行が一定の時間間隔のタイムスロットで構成されたウィンドウ内で完了するようにカーネルの実行順序を決定する。
【0166】
上述した実施形態に係る方法は、多様なコンピュータ手段によって実行されるプログラム命令形態で実現され、コンピュータで読み取り可能な媒体に記録される。前記コンピュータで読み取り可能な媒体は、プログラム命令、データファイル、データ構造などを単独または組み合わせて含んでもよい。前記媒体に記録されるプログラム命令は、本発明のために特別に設計されて構成されたものであってもよく、コンピュータソフトウェア当業者に公示されて使用可能なものであってもよい。
【0167】
上述したように、本発明は限定された実施形態と図面によって説明されたが、本発明が上述した実施形態に限定されることはなく、本発明が属する分野において通常の知識を有する者であれば、このような記載から多様な修正および変形が可能である。
【0168】
したがって、本発明の範囲は、説明された実施形態に限定されて決定されてはならず、添付する特許請求の範囲だけでなく、この特許請求の範囲と均等なものなどによって定められなければならない。