(57)【特許請求の範囲】
【請求項１】
少なくとも１つのプロセッシングユニットを含むシステムの動的リソース割り当て方法において、
リソースが割り当られるタスクに関する情報を受信し、前記タスクを少なくとも１つのタスク並列ユニットに分割する段階と；
前記タスク並列ユニット各々の処理予想時間及び前記タスク並列ユニットの相互間の依存性によって前記タスクを任意の多角形形状を有するタスクブロックに設定する段階と；
前記タスクブロックを時間による横軸と少なくとも１つのプロセッシングユニットによる縦軸よりなるリソース割り当て平面に配置し、リソース割り当てる段階と；
リソース割り当て情報によって前記タスクを行う段階と；を含み、
前記タスク並列ユニットは、複数個の前記プロセッシングユニット（Ｐｒｏｃｅｓｓｉｎｇ Ｕｎｉｔ）を利用して並列化処理するために、前記タスクが、前記プロセッシングユニットの数に対応する１つ以上のユニット（Ｕｎｉｔ）に分割されたものであり、
前記タスクブロックの形状は、依存性によって配列された複数個のタスク並列ユニットを含むように設定される
ことを特徴とする動的リソース割り当て方法。
【請求項２】
前記タスクブロック設定段階は、
前記タスクが少なくとも１つのタスク並列ユニットに分割可能な個数に関する情報を受信する段階と；
前記分割されたタスク並列ユニットの処理予想時間情報を受信する段階と；
前記タスク並列ユニット相互間の依存性有無を判断し、前記タスク並列ユニットの処理手順を配列する段階と；
前記処理予想時間及び依存性によって配列されたタスク並列ユニットが占める領域を包括する形状を有するタスクブロックを設定する段階と；をさらに含む
ことを特徴とする請求項１に記載の動的リソース割り当て方法。
【請求項３】
前記タスクブロック設定段階は、
前記タスク並列ユニット相互間の依存性がない場合、前記多角形を矩形または正方形に設定することを特徴とする請求項２に記載の動的リソース割り当て方法。
【請求項４】
前記タスクブロック設定段階は、
前記タスク並列ユニット相互間の依存性がある場合、前記多角形を平行四辺形に設定する
ことを特徴とする請求項２に記載の動的リソース割り当て方法。
【請求項５】
前記リソース割り当て段階は、
前記タスクブロックがあらかじめリソース割り当てられた他のタスクブロックと衝突せず、前記リソース割り当て平面で最も小さい時間値を有する位置でリソースが割り当られる
ことを特徴とする請求項１に記載の動的リソース割り当て方法。
【請求項６】
前記リソース割り当て段階は、
前記リソース割り当て平面で、リソース割り当てるタスクブロックを縦軸の最も上位に位置するプロセッシングユニットに対してあらかじめリソース割り当てられた他のタスクブロックとの衝突発生以前位置に横軸上で移動させる横軸移動段階と；
前記タスクブロックをあらかじめリソース割り当てられた他のタスクブロックと衝突しないプロセッシングユニットまで縦軸上で移動させる縦軸移動段階と；
前記システムを構成するすべてのプロセッシングユニットに対して前記横軸移動段階と縦軸移動段階を実行したかを判断し、未実行時に前記横軸移動段階と縦軸移動段階を繰り返して実行する段階と；
すべてのプロセッシングユニットに対して実行時に、最も小さいサイズの時間値を有する位置に前記タスクブロックをリソース割り当てる段階と；をさらに含む
ことを特徴とする請求項５に記載の動的リソース割り当て方法。
【請求項７】
前記タスク実行段階の後に、
新規タスクブロックに対するリソース割り当て必要時に、前記横軸移動段階と前記縦軸移動段階を繰り返して前記新規タスクブロックを前記リソース割り当て平面でリソース割り当てる段階をさらに含む
ことを特徴とする請求項６に記載の動的リソース割り当て方法。
【請求項８】
前記タスク実行段階の後に、
以前にリソース割り当てられた任意のタスクブロックの処理が前記処理予想時間以前に完了した場合、残りのタスクブロックに対して前記横軸移動段階と前記縦軸移動段階を繰り返して新規タスクブロックを前記リソース割り当て平面でリソース割り当てる段階をさらに含む
ことを特徴とする請求項６に記載の動的リソース割り当て方法。
【請求項９】
前記プロセッシングユニットは、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を構成する少なくとも１つ以上のコア（Ｃｏｒｅ）またはＧＰＵ（Ｇｒａｐｈｉｃ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を構成する少なくとも１つ以上のプロセッシング要素（Ｐｒｏｃｅｓｓｉｎｇ  Ｅｌｅｍｅｎｔ）のうち少なくとも１つ以上を含む
ことを特徴とする請求項１に記載の動的リソース割り当て方法。
【請求項１０】
少なくとも１つのプロセッシングユニットを含むシステムでリソースを動的に割り当てる装置において、
リソースが割り当られるタスクに関する情報を受信し、前記タスクを少なくとも１つのタスク並列ユニットに分割し、前記タスク並列ユニット各々の処理予想時間及び前記タスク並列ユニット相互間の依存性によって前記タスクを任意の多角形形状を有するタスクブロックに設定し、前記タスクブロックを時間による横軸と少なくとも１つのプロセッシングユニットによる縦軸よりなるリソース割り当て平面に配置し、リソース割り当てる動的リソース割り当てブロックと；
リソース割り当て情報によって前記タスクを処理する少なくとも１つのプロセッシングユニットと；を含み、
前記タスク並列ユニットは、複数個の前記プロセッシングユニット（Ｐｒｏｃｅｓｓｉｎｇ Ｕｎｉｔ）を利用して並列化処理するために、前記タスクが、前記プロセッシングユニットの数に対応する１つ以上のユニット（Ｕｎｉｔ）に分割されたものであり、
前記タスクブロックの形状は、依存性によって配列された複数個のタスク並列ユニットを含むように設定される
ことを特徴とする動的リソース割り当て装置。
【請求項１１】
前記動的リソース割り当てブロックは、
前記タスクが少なくとも１つのタスク並列ユニットに分割可能な個数に関する情報と前記分割されたタスク並列ユニットの処理予想時間情報を受信し、前記タスク並列ユニット相互間の依存性有無を判断し、前記タスク並列ユニットの処理手順を配列し、前記処理予想時間及び依存性によって配列されたタスク並列ユニットが占める領域を包括する形状を有するタスクブロックを設定する
ことを特徴とする請求項１０に記載の動的リソース割り当て装置。
【請求項１２】
前記動的リソース割り当てブロックは、
前記タスク並列ユニット相互間の依存性がない場合、前記多角形を矩形または正方形に設定することを特徴とする請求項１１に記載の動的リソース割り当て装置。
【請求項１３】
前記動的リソース割り当てブロックは、
前記タスク並列ユニット相互間の依存性がある場合、前記多角形を平行四辺形に設定する
ことを特徴とする請求項１１に記載の動的リソース割り当て装置。
【請求項１４】
前記動的リソース割り当てブロックは、
前記タスクブロックがあらかじめリソース割り当てられた他のタスクブロックと衝突せず、前記リソース割り当て平面で最も小さい時間値を有する位置でリソース割り当てる
ことを特徴とする請求項１０に記載の動的リソース割り当て装置。
【請求項１５】
前記動的リソース割り当てブロックは、
前記リソース割り当て平面でリソース割り当てるタスクブロックを縦軸の最も上位に位置するプロセッシングユニットに対してあらかじめリソース割り当てられた他のタスクブロックとの衝突発生以前位置に横軸上で移動させ、前記タスクブロックをあらかじめリソース割り当てられた他のタスクブロックと衝突しないプロセッシングユニットまで縦軸上で移動させ、前記システムを構成するすべてのプロセッシングユニットに対して前記横軸移動段階と縦軸移動段階を実行したかを判断し、未実行時に前記横軸移動段階と縦軸移動段階を繰り返して実行し、すべてのプロセッシングユニットに対して実行時に最も小さいサイズの時間値を有する位置に前記タスクブロックをリソース割り当てる
ことを特徴とする請求項１４に記載の動的リソース割り当て装置。
【請求項１６】
前記動的リソース割り当てブロックは、
前記タスク実行後に、新規タスクブロックに対するリソース割り当て必要時に、前記横軸移動及び前記縦軸移動を繰り返して前記新規タスクブロックを前記リソース割り当て平面でリソース割り当てる
ことを特徴とする請求項１５に記載の動的リソース割り当て装置。
【請求項１７】
前記動的リソース割り当てブロックは、
前記タスク実行後に、以前にリソース割り当てられた任意のタスクブロックの処理が前記処理予想時間より前に完了した場合、残りのタスクブロックに対して前記横軸移動と前記縦軸移動を繰り返して新規タスクブロックを前記リソース割り当て平面でリソース割り当てる
ことを特徴とする請求項１５に記載の動的リソース割り当て装置。
【請求項１８】
前記プロセッシングユニットは、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を構成する少なくとも１つ以上のコア（Ｃｏｒｅ）またはＧＰＵ（Ｇｒａｐｈｉｃ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を構成する少なくとも１つ以上のプロセッシング要素（Ｐｒｏｃｅｓｓｉｎｇ  Ｅｌｅｍｅｎｔ）のうち少なくとも１つ以上を含む
ことを特徴とする請求項１０に記載の動的リソース割り当て装置。
【請求項１９】
少なくとも１つのプロセッシングユニットを備えるシステムに対する動的リソース割り当てのための製造物品において、
前記製造物品は、
リソースが割り当られるタスクに関する情報を受信し、前記タスクを少なくとも１つのタスク並列ユニットに分割する段階と；
前記タスク並列ユニット各々の処理予想時間及び前記タスク並列ユニットの相互間の依存性によって前記タスクを任意の多角形形状を有するタスクブロックに設定する段階と；
前記タスクブロックを時間による横軸と少なくとも１つのプロセッシングユニットによる縦軸よりなるリソース割り当て平面に配置し、リソース割り当てる段階と；
リソース割り当て情報によって前記タスクを行う段階と；
を実行するように１つ以上のプログラムを含む機械読み取り可能な媒体を含み、
前記タスク並列ユニットは、複数個の前記プロセッシングユニット（Ｐｒｏｃｅｓｓｉｎｇ Ｕｎｉｔ）を利用して並列化処理するために、前記タスクが、前記プロセッシングユニットの数に対応する１つ以上のユニット（Ｕｎｉｔ）に分割されたものであり、
前記タスクブロックの形状は、依存性によって配列された複数個のタスク並列ユニットを含むように設定される
ことを特徴とする製造物品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッシングユニットの動的リソース割り当てのための方法及び装置に関する。より具体的に、本発明は、タスク単位でブロック化されたタスクブロックをプロセッシングユニットが処理するようにリソースを動的に割り当ててＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）またはＧＰＵ（Ｇｒａｐｈｉｃ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）リソースを同時に効率的に活用する方法及び装置に関する。
【背景技術】
【０００２】
プロセッシングユニット（Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）というのは、ソフトウェアを通じて実行される演算ＩＰ（Ｉｎｔｅｌｌｅｃｔｕａｌ  Ｐｒｏｐｅｒｔｙ）として代表的な例であって、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＧＰＵ（Ｇｒａｐｈｉｃ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＣＧＲＡ（Ｃｏａｒｓｅ−ｇｒａｉｎｅｄ  ｒｅｃｏｎｆｉｇｕｒａｂｌｅ  ａｒｃｈｉｔｅｃｔｕｒｅ）などを挙げることができる。前記ＣＰＵ、ＧＰＵ、ＣＧＲＡに対する概略的な構造が図１及び図２に示される。
【０００３】
図１に示されたように、ＣＰＵは、実際演算を行う少なくとも１つのコア（ｃｏｒｅ）を含むことができ、ＧＰＵも実際演算を行う少なくとも１つのプロセッシング要素（Ｐｒｏｃｅｓｓｉｎｇ  Ｅｌｅｍｅｎｔ、ＰＥ）を含むことができる。
【０００４】
図２では、ＣＧＲＡの構造について示しており、これに関する説明は、下記の通りである。
【０００５】
ＣＧＲＡ（Ｃｏａｒｓｅ−Ｇｒａｉｎｅｄ  Ｒｅｃｏｎｆｉｇｕｒａｂｌｅ  Ａｒｃｈｉｔｅｃｔｕｒｅ）は、プロセッシング要素（ＰＥ）を配列し、各ＰＥ相互間にｉｎｐｕｔ／ｏｕｔｐｕｔを伝達し、有機的にプロセッシングする構造である。ここでは、演算されなければならないデータが移動する経路とそれらが演算されなければならないＦＵ（ＡＬＵ）ロジッグを有機的に調整する。この際、配列されたＨ／Ｗを使用する方法と手順をＳ／Ｗで調整するが、非常に細かい調整ではない、比較的粗粒の調整が行われる。このような理由で、Ｃｏａｒｓｅ−Ｇｒａｉｎｅｄ  Ｒｅｃｏｎｆｉｇｕｒａｂｌｅという名前が命名された。１つのＰＥは、基本的に小さいが、速い演算を担当し、これらを有機的に連結し、さらに大きい演算を行う。図２で、各ＰＥがＭｅｓｈ形態で連結される様子を示している。データは、調整されるＰＥ経路を通じて演算される。１つのＰＥ要素を見れば、隣りＰＥとデータ交換のためのｆｒｏｍ  ｎｅｉｇｈｂｏｒとｔｏ  ｎｅｉｇｈｂｏｒ、外部で入力されるデータであるｒｅｇｉｓｔｅｒ  ｆｉｌｅとこれらを調整するためのｃｏｎｆｉｇ  ｍｅｍｏｒｙ、演算を行うＦＵ（ＡＬＵ）で構成される。
【０００６】
このように、最近、複数個のコアを含むマルチプロセッサやＧＰＵなどが急速に採用されている実情である。特に、ＧＰＵのようなプロセッシングユニットは、数十から数百個に至るプロセッシング要素を含む。
【０００７】
このように、プロセッシングユニットが多くなるにつれて、プロセッシングユニットの性能を最大に発揮するためにリソースを効率的に管理する方法がシステム性能の向上に大きいカギになっている実情である。
【０００８】
ＧＰＵ使用は、一般的にＣＰＵがＧＰＵを呼び出す形式を利用する。ＣＰＵは、特定タスクをＧＰＵで実行するようにするために、ＧＰＵレジスタ（Ｒｅｇｉｓｔｅｒ）を設定（ｓｅｔｔｉｎｇ）し、これを実行させる。最近、ハードウェアスレッド（Ｈａｒｄｗａｒｅ  Ｔｈｒｅａｄ）でＧＰＵ内に様々な動作を同時に実行させる方法が登場している。これを活用すれば、ＧＰＵ内でプロセッシング要素をグループ化し、同時に実行させることができる。このように、システムは、並列性を極大化する方法に進化している。
【０００９】
しかし、従来技術は、相変らずＣＰＵ、ＧＰＵを順次な呼出方法によって使用している。図３では、ＣＰＵがＧＰＵを呼び出して使用する過程を時間の流れによって示している。
【００１０】
図３に示されたように、タスクを処理したＣＰＵは、特定時点でＧＰＵを呼び出す。それでは、ＧＰＵが当該タスクを処理する間に、ＣＰＵは、前記タスクを処理せずに待機する（これは、同一のタスクに対する待機を意味する、ＣＰＵは、全然異なるプログラムを処理することができる）。また、ＧＰＵを呼び出して使用する場合にも、ＧＰＵに含まれたすべてのプロセッシング要素を使用するものではなく、図３に示されたように活性化されたプロセッシング要素のみを使用し、残りのプロセッシング要素は、遊休状態を維持する。すなわち、ＧＰＵのすべてのプロセッシングユニットを活用しない。そし、ＧＰＵが当該タスク処理を終了すれば、ＣＰＵは、前記処理結果を引き継いで以後の処理手続を進行する。
【発明の概要】
【発明が解決しようとする課題】
【００１１】
前述した順次的なリソース使用方法は、ＣＰＵとＧＰＵを同時に活用しないと共に、ＧＰＵに含まれたすべてのプロセッシング要素を活用しないという問題点が存在する。また、ＧＰＵ内でもタスクが分割されず、１つのタスクがすべてのＧＰＵを占有するようになる。この場合、大部分の応用プログラムは、ＧＰＵのすべてのプロセッシング要素を使用しないので、ＧＰＵリソースを浪費するようになり、その結果として、システム全体性能が低下するという問題点がある。
【課題を解決するための手段】
【００１２】
前記問題点を解決するために、本発明の少なくとも１つのプロセッシングユニットを含むシステムの動的リソース割り当て方法は、リソースが割り当られるタスクに関する情報を受信し、前記タスクを少なくとも１つのタスク並列ユニットに分割する段階と、前記タスク並列ユニットの処理予想時間及び相互間の依存性によって前記タスクを任意の多角形形状を有するタスクブロックに設定する段階と、前記タスクブロックを時間による横軸と少なくとも１つのプロセッシングユニットによる縦軸よりなるリソース割り当て平面に配置し、リソース割り当てる段階と、前記リソース割り当て情報によって前記タスクを行う段階とを含むことを特徴とする。
【００１３】
また、前記問題点を解決するために、本発明の少なくとも１つのプロセッシングユニットを含むシステムでリソースを動的に割り当てる装置は、リソースが割り当られるタスクに関する情報を受信し、前記タスクを少なくとも１つのタスク並列ユニットに分割し、前記タスク並列ユニットの処理予想時間及び相互間の依存性によって前記タスクを任意の多角形形状を有するタスクブロックに設定し、前記タスクブロックを時間による横軸と少なくとも１つのプロセッシングユニットによる縦軸よりなるリソース割り当て平面に配置し、リソース割り当てる動的リソース割り当てブロック及び前記リソース割り当て情報によって前記タスクを処理する少なくとも１つのプロセッシングユニットを含むことを特徴とする。
【００１４】
本発明の他の実施例では、少なくとも１つのプロセッシングユニットを備えるシステムに対する動的リソース割り当てのための製造物品を提供し、前記製造物品は、リソースが割り当られるタスクに関する情報を受信し、前記タスクを少なくとも１つのタスク並列ユニットに分割する段階と、前記タスク並列ユニット各々の処理予想時間及び前記タスク並列ユニットの相互間の依存性によって前記タスクを任意の多角形形状を有するタスクブロックに設定する段階と、前記タスクブロックを時間による横軸と少なくとも１つのプロセッシングユニットによる縦軸よりなるリソース割り当て平面に配置し、リソース割り当てる段階と、前記リソース割り当て情報によって前記タスクを行う段階とを実行するように１つ以上のプログラムを含む機械読み取り可能な媒体を含むことを特徴とする。
【００１５】
本発明によれば、システムが備えるＣＰＵとＧＰＵリソースを同時に効率的に使用することができ、システムの全体的な効率を向上させることができる。また、従来、タスクが、システムが備えるすべてのリソースを同時に活用することができないという問題点があったが、本発明によれば、遊休状態のリソースをも使用することができる。
【図面の簡単な説明】
【００１６】
【図１】図１は、ＣＰＵとＧＰＵの概略的な構造を示す図である。
【図２】図２は、ＣＧＲＡの概略的な構造を示す図である。
【図３】図３は、ＣＰＵまたはＧＰＵリソースを利用してタスクを順次的な方法によって処理する過程を示す図である。
【図４】図４は、本発明の実施例による動的リソース割り当てシステムの構造を示す図である。
【図５Ａ】図５Ａは、本発明の実施例による図４のシステムの動的リソース割り当てによって生成されるタスクブロックに対して示す図である。
【図５Ｂ】図５Ｂは、本発明の実施例による図４のシステムの動的リソース割り当てによって生成されるタスクブロックに対して示す図である。
【図６】図６は、本発明の実施例によって動的リソース割り当てブロック４５０がタスクブロックを生成する手順を示す流れ図である。
【図７】図７は、タスクブロックをリソース割り当て平面に配置する原理を示す図である。
【図８】図８は、動的リソース割り当てブロック４５０がタスクブロックをリソース割り当て平面に配置する手順を示す流れ図である。
【図９】図９は、図８の各段階に対応してタスクブロックがリソース割り当て平面で移動する過程を示す流れ図である。
【図１０】図１０は、図４に示される動的リソース割り当てブロック４５０の内部構造を示す図である。
【図１１】図１１は、プロセッシングバンク１０２０を構成するレジスタユニットの内部構造を示す図である。
【図１２】図１２は、プロセッシングバンク１０２０を構成するレジスタユニットの結合構造を示す図である。
【図１３】図１３は、本発明の動的リソース割り当てブロック４５０がタスクブロックに対するリソースを割り当てる全体的な動作手順を示す流れ図である。
【図１４】図１４は、図１３のＳ１３３０段階をより具体的に示す図である。
【図１５】図１５は、本発明のプロセッシングバンク１０２０が図１４の過程を行う手順を具体的に示す流れ図である。
【発明を実施するための形態】
【００１７】
以下、添付の図面を参照して本発明の好ましい実施例を詳しく説明する。この際、添付の図面において同一の構成要素は、できるだけ同一の符号で示していることに留意しなければならない。また、本発明の要旨を不明にすることができる公知機能及び構成に対する詳細な説明は省略する。
【００１８】
本発明は、前述のような問題点を解決するためになされたもので、ＣＰＵまたはＧＰＵリソースを効率的に使用するようにする動的リソース割り当て（Ｄｙｎａｍｉｃ  Ｒｅｓｏｕｒｃｅ  Ａｌｌｏｃａｔｉｏｎ、ＤＲＡ）方法及び装置を提案する。
【００１９】
図４は、本発明の実施例による動的リソース割り当てシステムの構造を示す図である。図４に示されたように、本発明の動的リソース割り当てシステムは、ＣＰＵ ４１０、ＧＰＵ ４２０、ＣＧＲＡ ４３０、メモリ４４０、動的リソース割り当てブロック４５０を含むことができる。
【００２０】
ＣＰＵ ４１０、ＧＰＵ ４２０、ＣＧＲＡ ４３０は、タスクを処理することができるプロセッシングユニットの例示であって、必ずこれに限定されるものではない。特に、ＣＰＵ ４１０は、複数個のコアを含むマルチコア（Ｍｕｌｔｉ−Ｃｏｒｅ）で構成されることができる。また、ＧＰＵ ４２０は、グラフィック処理のみならず、ＣＰＵと並行して高容量タスクを処理することができ、このために、複数個のプロセッシング要素（Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）で構成されることができる。前記ＣＰＵ ４１０、ＧＰＵ ４２０などのプロセッシングユニットは、当該タスク情報を動的リソース割り当てブロック４５０に入力し、前記動的リソース割り当てブロック４５０からリソース割り当て結果を受信し、スケージュリング情報によって前記タスクを処理（実行）する。
【００２１】
一方、ＣＰＵを構成するコア（Ｃｏｒｅ）と、ＧＰＵを構成するプロセッシング要素（Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）は、その構造及び機能は異なっているが、与えられたタスクを行うという側面では、同一のユニットとして見なすことができるので、以下の説明は、プロセッシング要素に統一して記述する。しかし、これは、当該説明が必ずプロセッシング要素にのみ限定されるものではなく、同一の原理がコア、またはコア及びプロセッシング要素などを含むプロセッシングユニットに適用されることができることに留意しなければならない。
【００２２】
メモリ４４０は、動的リソース割り当てシステムの全般的な動作に必要なプログラムなどを格納する。
【００２３】
動的リソース割り当てブロック４５０は、プロセッシング要素によって処理されなければならない任意のタスクをタスクブロックに変換する。ここで、タスクブロック（Ｔａｓｋ  Ｂｌｏｃｋ）とは、プロセッシング要素によって処理されなければならない任意のタスクが複数個のタスク並列ユニット（Ｔａｓｋ  Ｐａｒａｌｌｅｌ  Ｕｎｉｔ）に分割された状態で、前記タスク並列ユニット間の依存性（Ｄｅｐｅｎｄｅｎｃｙ）を考慮して整列された形態を意味する。
【００２４】
また、前記動的リソース割り当てブロック４５０は、プロセッシング要素を並列に配置し、前記タスクブロックを前記プロセッシング要素に対してリソース割り当てる。このために、動的リソース割り当てブロック４５０は、ＣＰＵまたはＧＰＵを構成するプロセッシング要素から活性化状態または遊休状態如何に関する情報を受信することができる。すなわち、動的リソース割り当てブロック４５０は、遊休状態のプロセッシング要素だけに対してリソースを割り当てる。
そして、前記動的リソース割り当てブロック４５０は、タスク処理過程中に、新規タスクに対してリソース割り当てるか、または以前タスクの演算時間に誤差があって早くまたは遅く終了した場合、タスクブロックを再び割り当てる過程を行う。
【００２５】
前記動的リソース割り当てブロック４５０の具体的な構造は、図１０で詳しく記述する。
【００２６】
以下では、図５〜図９を通じて前記動的リソース割り当てブロック４５０がタスクブロックを生成し、リソース割り当てる過程について記述する。
【００２７】
図５は、動的リソース割り当てブロック４５０が生成するタスクブロックに対して示す図である。図５の横軸は、時間であり、縦軸は、タスクを実行するプロセッシング要素である。
【００２８】
前述したように、アプリケーション（または応用プログラム）は、少なくとも１つのタスクを行うように設定されることができ、前記少なくとも１つのタスクは、少なくとも１つのプロセッシング要素によって行われることができる。１つのタスクを複数個のプロセッシングユニットを利用して並列化処理するためには、図５に示されたように、１つのタスクが１つ以上のタスク並列ユニット（Ｔａｓｋ  Ｐａｒａｌｌｅｌ  Ｕｎｉｔ）に分割されなければならない。この場合、１つのタスク並列ユニットと、これを処理するプロセッシング要素は、１対１対応することができる。
【００２９】
もし、１つのタスク並列ユニットが相互間の依存性（ｄｅｐｅｎｄｅｎｃｙ）を有していなければ、すなわちタスク並列ユニットが以前タスク並列ユニットの処理結果を利用する必要がない場合なら、図５の左側に示されたように、タスク並列ユニットは、各々のプロセッシング要素を通じて並列的に同時に処理されることができる。この場合、１つのタスクは、矩形形態のタスクブロックに決定される。
【００３０】
しかし、少なくとも１つのタスク並列ユニットが相互間の依存性を有していれば、すなわち、タスク並列ユニットが以前タスク並列ユニットの処理結果を利用しなければならない場合、タスク並列ユニットの処理手順に時間的な制限が発生するようになる。この場合には、図５の右側に示されたように、１つのタスクは、台形形態のタスクブロックに決定される。動的リソース割り当てブロック４５０がタスクブロックを生成する過程が図６に示される。
【００３１】
図６は、動的リソース割り当てブロック４５０がタスクブロックを生成する手順を示す流れ図である。
【００３２】
まず、動的リソース割り当てブロック４５０は、Ｓ６１０段階で、任意のタスクが少なくとも１つの並列化されたタスク並列ユニットに分割可能な個数に関する情報を受信する。この場合、動的リソース割り当てブロック４５０は、前記情報を運営体制（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ、ＯＳ）またはコンパイラー（Ｃｏｍｐｉｌｅｒ）から受信することができる。分割可能な個数に関する情報は、アプリケーション生成時に、またはコンパイル実行時に計算されることができる情報であり、動的リソース割り当てブロック４５０は、前記情報を受信すれば、各タスク並列ユニットを行うプロセッシング要素を決定することができる。この場合、前述したように、タスク並列ユニットとプロセッシングユニットは、１対１対応する。
【００３３】
これと同時に、動的リソース割り当てブロック４５０は、Ｓ６２０段階で、前記分割されたタスク並列ユニットの演算実行時間に関する情報を前記運営体制またはコンパイラーから受信する。それでは、動的リソース割り当てブロック４５０は、各タスク並列ユニットの長さを決定することができる。前記タスク並列ユニットの長さは、演算実行時間に比例する。既に実行履歴がある場合には、これを活用することができる。
【００３４】
そして、動的リソース割り当てブロック４５０は、Ｓ６３０段階で、各タスク並列ユニットの依存性を測定する。任意のタスク並列ユニットが、以前タスク並列ユニットの演算結果を利用する場合を依存性があると定義することができ、前記依存性によってタスク並列ユニットが実行される手順が配列される。
【００３５】
そして、動的リソース割り当てブロック４５０は、Ｓ６４０段階で、依存性によって配列されたタスク並列ユニットを包括する領域を任意の多角形形状に設定する。この場合、動的リソース割り当てブロック４５０は、タスク並列ユニットの間に依存性がない場合、前記領域を正方形または矩形形状に設定することができる。一方、動的リソース割り当てブロック４５０は、タスク並列ユニットの間に依存性がある場合、前記領域を平行四辺形形状に設定することができる。平行四辺形形状に設定する理由は、演算の速度と効率を高めるためである。この場合、前記平行四辺形の勾配は、タスク並列ユニット間の依存性程度（サイズ）によって可変的に変更されることができる。
【００３６】
図７は、タスクブロックをリソース割り当て平面に配置する原理を示す図である。
【００３７】
以下では、時間の横軸とプロセッシングユニットの縦軸で構成される平面をリソース割り当て平面であると定義する。前述したように、プロセッシングユニットは、ＣＰＵリソース（コア）またはＧＰＵリソース（プロセッシング要素）を含むことができる。そして、前記リソース割り当て平面は、縦軸のプロセッシングユニットが時間によってどのように使用されなければならないかを意味する。
【００３８】
この場合、リソース割り当て平面にタスクブロックを配置すれば、プロセッシング要素の使用個数、タスクの個数、予想演算時間、依存性による勾配（Ｓｌｏｐｅ）によってＯ（ｎ３）の複雑度を有するようになる。
【００３９】
図６の過程を通じて生成されたタスクブロックは、リソース割り当て平面に配置される。この場合、タスクブロックをリソース割り当て平面に配置するという意味は、演算実行のためにタスクブロックを最初配置する場合（図７の〈１〉）、新規タスクブロックを追加的に配置する場合（図７の〈２〉）、以前の演算時間予測が外れてタスクブロックを再配置しなければならない場合（図７の〈３〉）をすべて含むことができる。動的リソース割り当てブロック４５０がタスクブロックをリソース割り当て平面に配置する具体的な過程は、図８及び図９を参照して具体的に記述する。
【００４０】
図８は、動的リソース割り当てブロック４５０がタスクブロックをリソース割り当て平面に配置する手順を示す流れ図である。
【００４１】
一方、図９は、図８の各段階に対応してタスクブロックがリソース割り当て平面で移動する過程を示す流れ図である。
【００４２】
まず、図８で、動的リソース割り当てブロック４５０は、Ｓ８１０段階で、配置するタスクブロックを縦軸の最上位にあるプロセッシング要素（ＰＥ０と仮定）に対して衝突が発生しない位置まで挿入させる。すなわち、タスクブロックを時間軸基準に、以前に配置されたタスクブロックと衝突が発生する直前の最も小さい値の時間を有する位置まで移動させる。前記段階は、図９の”Ｓｔｅｐ  １”に対応する。この場合、前記タスクブロックは、現在位置に対応する座標値（時間、プロセッシング要素番号）を有することができ、これは、以後で記述されるすべての位置でも同一に適用されることができる。
【００４３】
そして、動的リソース割り当てブロック４５０は、Ｓ８２０段階で、前記タスクブロックを縦軸の下方向に、すなわちプロセッシング要素の番号が増加するように移動させる。前記段階は、図９の”Ｓｔｅｐ２”に対応する。図９の”Ｓｔｅｐ  ２”を参照すれば、タスクブロックが縦軸の下方向に移動すれば、以前に配置されたタスクブロックと衝突するようになり、動的リソース割り当てブロック４５０は、前記タスクブロックがこれ以上衝突を起こさない位置まで前記タスクブロックを移動させる。
【００４４】
そして、動的リソース割り当てブロック４５０は、Ｓ８３０段階で、前記タスクブロックをさらに時間軸基準に、以前に配置されたタスクブロックと衝突が発生する直前の最も小さい値の時間を有する位置まで移動させる。前記段階は、図９の”Ｓｔｅｐ  ３”に対応する。
【００４５】
さらに、動的リソース割り当てブロック４５０は、Ｓ８４０段階で、前記タスクブロックを縦軸の下方向に、すなわちプロセッシング要素の番号が増加するように移動させる。前記段階は、図９の”Ｓｔｅｐ４”に対応する。
【００４６】
そして、動的リソース割り当てブロック４５０は、Ｓ８５０段階で、縦軸のすべてのプロセッシング要素に対して前記過程を行ったか否かを判断する。もし、すべてのプロセッシング要素に対して前記過程を行ったものではなければ、動的リソース割り当てブロック４５０は、Ｓ８３０段階に戻って、以下の過程を繰り返して行う。図９を例示すれば、”Ｓｔｅｐ  ４”では、まだすべてのプロセッシング要素に対して前記過程をすべて行ったものではないので、”Ｓｔｅｐ  ５”過程及び”Ｓｔｅｐ  ６”過程をさらに行う。
【００４７】
もし、すべてのプロセッシング要素に対して前記過程を行った場合、動的リソース割り当てブロック４５０は、各段階で記録された座標値のうち、最も小さい時間値（横軸で最も左側に移動した場合）を有する座標値に対応する位置を当該タスクブロックを配置する位置として決定する。
【００４８】
動的リソース割り当てブロック４５０は、前記の過程を通じてタスクブロックをリソース割り当て平面上に配置し、このような過程を通じて、ＣＰＵとＧＰＵリソースを同時に効率的に使用することができ、システムの全体的な効率を向上させることができる。
【００４９】
図１０は、図４に示される動的リソース割り当てブロック４５０の内部構造を示す図である。図１０に示されたように、本発明の動的リソース割り当てブロック４５０は、コントロールユニット１０１０とプロセッシングバンク１０２０を含むことができる。
【００５０】
コントロールユニット１０１０は、タスクブロックを形成し、リソース割り当て平面に配置する一連の過程（図６〜図９の過程）を実行及び制御する。そして、コントロールユニット１０１０は、リソース割り当てが完了すれば、各タスクブロックのリソース割り当て情報を有するようになり、ＣＰＵまたはＧＰＵのようなプロセッシングユニットに演算実行を指示する。前記リソース割り当て情報は、図１０の右上端に示されたように、当該タスクブロックが使用するプロセッシング要素に関する情報（’ＰＥ  Ｓｔａｒｔ’、’ＰＥ  Ｃｏｕｎｔ’）、プロセッシング要素を使う時間情報（’Ｔｉｍｅ  Ｓｔａｒｔ’、’Ｔｉｍｅ  Ｃｏｕｎｔ’）、依存性によって発生した勾配情報（’Ｓｌｏｐｅ’）を含み、各フィールドに対するレジスタに記録される。
【００５１】
また、前記コントロールユニット１０１０は、図１０の右下端のような構造を有するプロセッシングバンク１０２０を利用してリソースを配置する。そして、コントロールユニット１０１０は、前記プロセッシングバンク１０２０を制御するためにタスク選択信号Ｉｓｅｌとレジスタユニット選択信号Ｃｓｅｌを出力する。前記タスク選択信号Ｉｓｅｌは、現在時点でリソース配置するタスクブロックを識別するための信号であり、前記レジスタユニット選択信号Ｃｓｅｌは、同一の時間でタスクブロックをリソース割り当て平面の縦軸に移動させるための信号である。
【００５２】
プロセッシングバンク１０２０の具体的な構造は、図１０の右下端に示された通りであり、時間の横軸及びプロセッシング要素の縦軸で構成される。そして、時間とプロセッシング要素が交差する位置には、レジスタが配置される。
【００５３】
図１０の右上端にあるリソース割り当て情報は、図１０の右下端にある点線のようにマッピングされる。例示して説明すれば、リソース割り当て情報１０３０Ａは、タスクブロック１０３０Ｂに対応する。すなわち、タスクブロック１０３０Ｂは、ＰＥ０から３個のリソース要素を使用し（’ＰＥ  Ｓｔａｒｔ＝０’、’ＰＥ  Ｃｏｕｎｔ＝３’）、作業実行時間は、時間２であり（’Ｔｉｍｅ  Ｓｔａｒｔ＝２’）、勾配は、２の値（’Ｓｌｏｐｅ＝２’）を有することを確認することができる。
【００５４】
一方、プロセッシングバンク１０２０は、実際演算を担当するブロックであり、多くの演算を迅速に実行しなければならないので、主要部分が組合論理回路（Ｃｏｍｂｉｎａｔｉｏｎａｌ  Ｌｏｇｉｃ）で構成されることができる。これに関する説明は、下記の図１１及び図１２を参照して説明する。
【００５５】
図１１は、プロセッシングバンク１０２０を構成するレジスタユニットの内部構造を示す図である。
【００５６】
図１１に示されたように、レジスタユニットは、タスクブロックＩＤを指示する少なくとも１つのＤレジスタ１１１０（図１１では、５個のＤレジスタが例示）と、前記タスクブロックＩＤの’ＯＲ’演算を行う’ＯＲ’ゲート１１２０を含む。前記’ＯＲ’ゲート１１２０は、出力信号Ｕを出力するが、前記出力信号が’１’なら、当該レジスタユニットには、１つのタスクブロックが位置していることを指示し、’０’なら、当該レジスタユニットには、タスクブロックが位置しないことを指示する。
【００５７】
コントロールユニット１０１０から伝達されるタスク選択信号Ｉｓｅｌは、プロセッシングバンク１０２０のマルチフレクサー（ＭｕｌｔｉｐｌｅｘｅｒまたはＭｕｘ）１１３０に入力され、特定タスクブロックＩを選択する。前述した図１１のレジスタユニットが結合して、図１０のプロセッシングバンク１０２０を構成するようになるが、レジスタユニットの具体的な結合構造を図１２に示す。
【００５８】
図１２は、プロセッシングバンク１０２０を構成するレジスタユニットの結合構造を示す図である。図１２で前方に配置されたレジスタ１２１０は、後方に配置されたレジスタ１２２０より時間的に先立って配置されることを意味する。
【００５９】
図９及び図１２を同時に参照すれば、図１２で前方に配置されたレジスタ１２１０は、図９で既にリソースが割り当てられたタスクブロックを構成するようになる。また、図１２で後方に配置されたレジスタ１２２０は、現在配置されるタスクブロックが同一の時間軸上で縦方向の下方に移動するようになる位置を意味する。
【００６０】
図１２で後方に配置されたレジスタ１２２０に入力されたタスク選択信号によって特定タスクブロックＩが選択される。そして、前記レジスタ１２２０は、レジスタユニット選択信号入力によって前方に配置されたすべてのレジスタ１２１０に対して’ＡＮＤ’演算を実行（図９の’Ｓｔｅｐ２’、’Ｓｔｅｐ４’、’Ｓｔｅｐ６’）するようになり、既に割り当てられたタスクブロックと、現在割り当てるタスクブロックが衝突する場合’１’を出力する。前方に配置されたレジスタ１２２０のうちいずれか１つのレジスタに対して衝突が発生すれば、最終出力は、’１’を出力（Ｏｕｔｐｕｔ＝１）するようになり、当該タスクブロックは、そのまま待機する。一方、最終出力が’０’を出力（Ｏｕｔｐｕｔ＝０）する場合、これは、タスクブロックが時間軸上で１タイム（Ｔｉｍｅ）先に前進することができることを意味する。
【００６１】
前述した図１１及び図１２の内容を通じてタスクブロックに対してリソースを割り当てる過程を要約すれば、次の通りである。コントロールユニット１０１０からプロセッシングバンク１０２０にタスク選択信号とレジスタユニット選択信号が入力される。この場合、各タスクブロックは、固有のＩＤを有しており、図１１に示されたように、前記タスク選択信号は、特定タスクブロックＩＤを選択する。レジスタユニット選択信号は、現在時間Ｔｎと以前時間Ｔｎ＋１各々に位置するレジスタを比較するのに使用される。したがって、タスク選択信号とレジスタユニット選択信号を調整し、本発明の動的リソース割り当て過程が行われる。結果的に図１１及び図１２の組合論理回路を通じて”Ｎ（以前時間のレジスタユニット個数）ＸＮ（現在時間のレジスタユニット個数）”の演算を迅速で且つ効率的に行うことができる。
【００６２】
すべてのタスク選択信号及びレジスタユニット選択信号に対して比較過程が行われ、最終出力が”０”なら現在時間Ｔｎ＋１のタスクブロックが以前時間Ｔｎに移動し、この場合、レジスタユニット選択信号が動作するレジスタユニットに移動する。
【００６３】
図１３は、本発明の動的リソース割り当てブロック４５０がタスクブロックに対するリソースを割り当てる全体的な動作手順を示す流れ図である。
【００６４】
まず、動的リソース割り当てブロック４５０は、Ｓ１３１０段階及びＳ１３２０段階で、ＣＰＵ、ＧＰＵを構成するプロセッシング要素から各プロセッシング要素の活性化状態情報を受信する。現在タスクを処理していれば、活性化状態であり、テストを処理していなければ、遊休状態であると定義することができる。
【００６５】
それでは、動的リソース割り当てブロック４５０は、Ｓ１３３０段階で、プロセッシング要素によって処理されなければならない任意のタスクをタスクブロックに変換し、前記タスクブロックを遊休状態のプロセッシング要素に割り当てる。そして、動的リソース割り当てブロック４５０は、Ｓ１３４０段階及びＳ１３５０段階で、リソース割り当て情報を各プロセッシング要素に伝達する。それでは、ＣＰＵまたはＧＰＵの各プロセッシングユニットは、Ｓ１３６０段階及びＳ１３７０段階で、リソース割り当て情報によって当該時間に当該タスクを処理し、これを動的リソース割り当て情報に報告する。
【００６６】
それでは、動的リソース割り当てブロック４５０は、Ｓ１３８０段階で、各プロセッシング要素のタスク処理結果を受信する。そして、動的リソース割り当てブロック４５０は、Ｓ１３９０段階で、すべてのタスクに対する処理を完了したか否かを判断する。すべてのタスクに対する処理が完了した場合なら、当該動作を終了し、完了しない場合なら、最初の開始段階に戻って、以下の段階を繰り返して行う。
【００６７】
図１４は、図１３のＳ１３３０段階をより具体的に示す図である。
【００６８】
前述したように、本発明の実施例による動的リソース割り当てブロック４５０のリソース割り当て方法は、演算実行のためにタスクブロックを最初配置する場合（図７の〈１〉）、新規タスクブロックを追加的に配置する場合（図７の〈２〉）、以前の演算時間予測が外れてタスクブロックを再配置しなければならない場合（図７の〈３〉）にすべて適用されることができる。
【００６９】
Ｓ１４１０段階で、動的リソース割り当てが新規タスク追加を追加するものであるか否かが判断される。新規テストが追加される場合には、Ｓ１４３０段階に進行し、リソース割り当ては、現在時間以後からリソース割り当て作業プロセッシングを進行する。新規タスクを追加するものではない場合、Ｓ１４２０段階に進行し、予測された時間情報にエラーがあるか否かが判断される。予測された時間情報にエラーがある場合、Ｓ１４３０段階に進行し、現在時間以後からリソース割り当て作業プロセッシングを進行する。予測された時間情報にエラーがない場合、図１４の実行は終了する。
【００７０】
図１５は、本発明のプロセッシングバンク１０２０が図１４の過程を行う手順を具体的に示す流れ図である。
【００７１】
すなわち、図１５は、新規タスクブロックが追加されるか、または従来作業実行時間に対する予測時間が外れてさらにリソースを割り当てる場合、プロセッシングバンク１０２０の動作手順を示す流れ図である。
【００７２】
まず、プロセッシングバンク１０２０は、Ｓ１５０５段階で、新規配置すべきタスクブロックＩＤに対して配置が完了したか否かを判断する。もしすべての配置が完了した場合なら、プロセッシングバンク１０２０は、Ｓ１５１０段階に進行し、演算結果をコントロールユニット１０１０に伝達し、Ｓ１５１５段階で、リソース割り当て過程を終了する。
【００７３】
一方、割り当てなければならないタスクブロックが残っている場合、プロセッシングバンク１０２０は、Ｓ１５２０段階に進行し、次のタスクブロックＩＤに対するリソース割り当て（配置）過程を行う。これは、プロセッシングバンク１０２０がコントロールユニット１０１０からタスク選択信号を受信し、次のタスクブロックに対するリソース配置演算を開始する。
【００７４】
このためにプロセッシングバンク１０２０は、コントロールユニット１０１０から受信されるレジスタユニット選択信号を利用してリソース配置演算を行う。すなわち、レジスタユニット選択信号の値が｛１、２、３、４、・・・｝のように増加すれば、リソース配置するタスクブロックがリソースブロック平面で同一時間上で、縦軸を基準に下方に移動する効果を示すようになる。
【００７５】
プロセッシングバンク１０２０は、Ｓ１５２５段階で、すべての時間に対して、レジスタユニット選択信号による演算を行ったかを判断する。もし、すべての演算が行われたものではない場合、Ｓ１５３０段階で、各レジスタユニット選択信号値に対してＴｎとＴｎ＋１演算を行う。すなわち、当該タスクブロックが以前時間に前進配置されることができるかを判断する。Ｓ１５３５段階で、プロセッシングバンク１０２０が前記演算結果が１であると判断した場合には、衝突が発生したことを意味し、この場合には、Ｓ１５４０段階に進行し、レジスタユニット選択信号の値を増加させる。すなわち、タスクブロックをリソース割り当て平面で縦軸を基準に下方に移動させる。これは、図９の”Ｓｔｅｐ  ２”に該当する。
【００７６】
一方、Ｓ１５３５段階で、演算結果が０であると判断した場合には、衝突が発生しなかったことを意味し、この場合、プロセッシングバンク１０２０は、Ｓ１５４５段階に進行し、タスクブロックをＴｎ＋１からＴｎに移動させる。これは、リソース割り当て平面で横軸を基準に左側に移動させる過程であり、図９の”Ｓｔｅｐ  ３”に該当する。
【００７７】
そして、プロセッシングバンク１０２０は、前記過程を繰り返した後、Ｓ１５５５段階で最も左側に移動したタスクブロックに対する座標値である（時間、プロセッシング要素）または（Ｔｎ、レジスタユニット選択信号値）を格納する。
【００７８】
すべてのレジスタユニット選択信号値に対して図１５の演算を行った場合には、図９の”Ｓｔｅｐ  ６”のような状態になり、この場合、プロセッシングバンク１０２０は、Ｓ１５５０段階で、Ｓ１５５５段階を通じて格納されたタスクブロックに対する座標値のうち、最も小さい時間を有する位置を当該タスクブロックのリソース割り当て位置に決定する。
【００７９】
このような本発明によれば、システムが備えるＣＰＵとＧＰＵリソースを同時に効率的に使用することができ、システムの全体的な効率を向上させることができる。
前述した方法を行うための命令語またはコードを含むソフトウェア構成要素（ｃｏｍｐｏｎｅｎｔ）が１つ以上のメモリ（例えば、ＲＯＭまたは除去可能なメモリ）に格納されることができる。
【００８０】
本明細書と図面に開示された本発明の実施例は、本発明の技術内容を容易に説明し、本発明の理解を助けるために特定例を提示したものに過ぎず、本発明の範囲を限定しようとするものではない。ここに開示された実施例以外にも、本発明の技術的思想に基づく他の変形例が実施可能であることは、本発明の属する技術分野における通常の知識を有する者に自明であろう。
【符号の説明】
【００８１】
４１０  ＣＰＵ 
４２０  ＧＰＵ
４３０  ＣＧＲＡ
４４０  メモリ
４５０  動的リソース割り当てブロック
【図２】
0005985484.tif 000002
【図１】
0005985484.tif 000003
【図３】
0005985484.tif 000004
【図４】
0005985484.tif 000005
【図５Ａ】
0005985484.tif 000006
【図５Ｂ】
0005985484.tif 000007
【図６】
0005985484.tif 000008
【図７】
0005985484.tif 000009
【図８】
0005985484.tif 000010
【図９】
0005985484.tif 000011
【図１０】
0005985484.tif 000012
【図１１】
0005985484.tif 000013
【図１２】
0005985484.tif 000014
【図１３】
0005985484.tif 000015
【図１４】
0005985484.tif 000016
【図１５】
0005985484.tif 000017