(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024080289
(43)【公開日】2024-06-13
(54)【発明の名称】プログラム制御装置、プログラム制御方法およびプログラム制御プログラム
(51)【国際特許分類】
G06F 9/48 20060101AFI20240606BHJP
【FI】
G06F9/48 300Z
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2022193356
(22)【出願日】2022-12-02
(71)【出願人】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(74)【代理人】
【識別番号】100103090
【弁理士】
【氏名又は名称】岩壁 冬樹
(74)【代理人】
【識別番号】100124501
【弁理士】
【氏名又は名称】塩川 誠人
(72)【発明者】
【氏名】大野 善之
(57)【要約】
【課題】アクセラレータのメモリが不足することなくアクセラレータが複数のプログラムを同時に高速で実行できるプログラム制御装置を提供する。
【解決手段】プログラム制御装置20は、アクセラレータに同時に実行させる複数のプログラムを、プログラムが実行する演算処理を示す中間表現と、演算処理で使用されるデータが要するメモリ量を示すメモリ情報とにそれぞれ変換する変換部21と、変換された複数の中間表現および複数のメモリ情報を基に、アクセラレータが複数のプログラムを同時に実行する際にアクセラレータが使用するメモリの使用量がメモリの閾値以下になるように複数の中間表現の実行順序を決定する決定部22とを備える。
【選択図】
図25
【特許請求の範囲】
【請求項1】
アクセラレータに同時に実行させる複数のプログラムを、プログラムが実行する演算処理を示す中間表現と、前記演算処理で使用されるデータが要するメモリ量を示すメモリ情報とにそれぞれ変換する変換部と、
変換された複数の中間表現および複数のメモリ情報を基に、前記アクセラレータが前記複数のプログラムを同時に実行する際に前記アクセラレータが使用するメモリの使用量が前記メモリの閾値以下になるように前記複数の中間表現の実行順序を決定する決定部とを備える
ことを特徴とするプログラム制御装置。
【請求項2】
決定された実行順序に従って複数の中間表現を実行することによって複数のプログラムを同時に実行するアクセラレータを備える
請求項1記載のプログラム制御装置。
【請求項3】
決定部は、演算処理で使用されるデータをアクセラレータ以外の演算装置が使用するメモリに退避させる処理を複数の中間表現に含める
請求項1記載のプログラム制御装置。
【請求項4】
メモリ情報には、データが使用される演算処理の範囲が含まれる
請求項1から請求項3のうちのいずれか1項に記載のプログラム制御装置。
【請求項5】
アクセラレータに同時に実行させる複数のプログラムを、プログラムが実行する演算処理を示す中間表現と、前記演算処理で使用されるデータが要するメモリ量を示すメモリ情報とにそれぞれ変換し、
変換された複数の中間表現および複数のメモリ情報を基に、前記アクセラレータが前記複数のプログラムを同時に実行する際に前記アクセラレータが使用するメモリの使用量が前記メモリの閾値以下になるように前記複数の中間表現の実行順序を決定する
ことを特徴とするプログラム制御方法。
【請求項6】
アクセラレータが、決定された実行順序に従って複数の中間表現を実行することによって複数のプログラムを同時に実行する
請求項5記載のプログラム制御方法。
【請求項7】
演算処理で使用されるデータをアクセラレータ以外の演算装置が使用するメモリに退避させる処理を複数の中間表現に含める
請求項5または請求項6記載のプログラム制御方法。
【請求項8】
アクセラレータに、
前記アクセラレータに同時に実行させる複数のプログラムを、プログラムが実行する演算処理を示す中間表現と、前記演算処理で使用されるデータが要するメモリ量を示すメモリ情報とにそれぞれ変換する変換処理、および
変換された複数の中間表現および複数のメモリ情報を基に、前記アクセラレータが前記複数のプログラムを同時に実行する際に前記アクセラレータが使用するメモリの使用量が前記メモリの閾値以下になるように前記複数の中間表現の実行順序を決定する決定処理
を実行させるためのプログラム制御プログラム。
【請求項9】
アクセラレータに、
決定された実行順序に従って複数の中間表現を実行させることによって複数のプログラムを同時に実行させる
請求項8記載のプログラム制御プログラム。
【請求項10】
アクセラレータに、
決定処理で、演算処理で使用されるデータを前記アクセラレータ以外の演算装置が使用するメモリに退避させる処理を複数の中間表現に含めさせる
請求項8または請求項9記載のプログラム制御プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラム制御装置、プログラム制御方法およびプログラム制御プログラムに関し、特にGPU(Graphics Processing Unit)による複数のプログラムの同時実行を可能とするプログラム制御装置、プログラム制御方法およびプログラム制御プログラムに関する。
【背景技術】
【0002】
AI(Artificial Intelligence)の開発では、演算装置として主にGPU等のアクセラレータが利用される。アクセラレータの中でもGPUは、より多くの技術分野で利用されることが予想される。
【0003】
価格が高額であり、かつ消費電力の高いGPUを個別に購入および運用するためには、高いコストが求められる。よって、GPUを個別に購入および運用する代わりに、複数のGPUの役割を1つのGPUに集約することが考えられる。上記の理由により、AIの開発において、GPUの「集約化」が行われることが予想される。
【0004】
GPUが搭載されたサーバを集約する場合、GPUに対する仮想化技術や共有技術が重要になる。例えば、1台のGPUに複数のプログラムを実行させることが求められる。
【0005】
図26は、複数のプログラムの実行主体の例を示す説明図である。例えば、
図26に示すプログラムAの右下がり斜線の領域は、GPUがプログラムAの計算を行っている領域である。また、
図26に示すプログラムAの白色の領域は、GPUの代わりにCPU(Central Processing Unit)がプログラムAの計算を行っている領域である。
【0006】
また、
図26に示すプログラムBの右上がり斜線の領域は、GPUがプログラムBの計算を行っている領域である。また、
図26に示すプログラムBの白色の領域は、GPUの代わりにCPUがプログラムBの計算を行っている領域である。
【0007】
図26に示すプログラムA~Bの実行を1台のGPUに集約させる場合、GPUが時分割で用いられると、GPUの使用効率が上がる。すなわち、
図26の下部に示すように、1台のGPUがプログラムA~Bを実行する時間をずらすことによって、GPUの使用効率が上がる。
【0008】
しかし、GPUを時分割で用いる手法には、GPUのメモリが不足するとプログラムが動かなくなるという課題がある。
図27は、複数のプログラムの実行主体の他の例を示す説明図である。
【0009】
図27に示す2つの破線の角丸四角形が表すように、同じタイミングでプログラムA~Bの実行にGPUが使用される場合、GPUのメモリが足りないと、どちらか、または両方のプログラムがエラーで停止する。
図27に示す例であれば、
図27の中央に示す右下がり斜線の領域における計算と、右上がり斜線の領域における計算のどちらか、または両方が停止する。
【0010】
上記の課題を解決する、CPUのメモリとGPUのメモリを単一のメモリとして扱えるようにする技術として、Unified Memoryが挙げられる。Unified Memoryが構成された当初の目的は、CPUとGPUのデータ通信の明示的なプログラム化を省略することである。Unified Memoryが使用されると、GPUは仮想的に大きなメモリを扱うことができる。
【0011】
図28は、Unified Memoryが使用されていない演算装置の構成例を示すブロック図である。
図28に示す演算装置は、CPUと、CPUメモリと、GPUと、GPUメモリとを備える。
図28に示すGPUがGPUメモリ以上の大きさのメモリを確保しようとすると、エラーが発生する。
【0012】
図29は、Unified Memoryが使用されている演算装置の構成例を示すブロック図である。
図29に示す演算装置では、
図28に示す演算装置と異なり、Unified Memoryが使用されている。
【0013】
Unified Memoryが使用されると、CPUからUnified Memory内のデータにアクセスしようとすると自動的にGPUメモリ内のデータがCPUメモリに移動する。また、GPUからUnified Memory内のデータにアクセスしようとすると自動的にCPUメモリ内のデータがGPUメモリに移動する。
【0014】
すなわち、Unified Memoryが使用されると、GPUは、仮想的に大きさがGPUメモリ以上のメモリを扱うことができる。よって、
図27に例示する課題を解決する1つの手法は、Unified Memoryを使用することである。
【0015】
また、特許文献1には、メモリリソースの有効利用を実現することが可能になる情報処理装置が記載されている。
【0016】
また、特許文献2には、アクセラレータを用いるアプリケーションを開発するプログラマのプログラム生産性を向上させることができるアクセラレータ処理実行装置が記載されている。
【0017】
また、特許文献3には、並列処理によりプログラムを実行可能な複数の演算部を有するアクセラレータが、自らの内部の複数の演算部間の分担を決定して、プログラムを実行可能なアクセラレータが記載されている。
【先行技術文献】
【特許文献】
【0018】
【特許文献1】特開2022-022642号公報
【特許文献2】特開2014-229173号公報
【特許文献3】特開2008-165746号公報
【発明の概要】
【発明が解決しようとする課題】
【0019】
Unified Memoryが使用された場合、以下の問題が発生する可能性がある。Unified Memoryのアドレス空間に対するアクセスにおいて仮想メモリ領域(ページ)の奪い合いにより発生するPage Faultが検知されると、CPU-GPU間でデータのコピー処理が実行される。上記の仕組みにより、CPUメモリまたはGPUメモリに自動的にデータが移動する。
【0020】
しかし、Page Faultが頻繁に発生すると、Page Faultが大きなオーバーヘッドになり演算装置の処理速度が低下する可能性がある。すなわち、GPUに複数のプログラムを同時に実行させる場合にUnified Memoryを使用することによってGPUメモリの不足を解消しようとしても、Page Faultが頻繁に発生し、演算装置の処理速度が低下するという問題が生じる。
【0021】
GPUメモリが足りない場合に、GPUメモリのページの奪い合いによりPage Faultが発生して処理速度が低下するという問題を解決できる技術は、特許文献1~3に記載されていない。
【0022】
そこで、本発明は、アクセラレータのメモリが不足することなくアクセラレータが複数のプログラムを同時に高速で実行できるプログラム制御装置、プログラム制御方法およびプログラム制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【0023】
本発明によるプログラム制御装置は、アクセラレータに同時に実行させる複数のプログラムを、プログラムが実行する演算処理を示す中間表現と、演算処理で使用されるデータが要するメモリ量を示すメモリ情報とにそれぞれ変換する変換部と、変換された複数の中間表現および複数のメモリ情報を基に、アクセラレータが複数のプログラムを同時に実行する際にアクセラレータが使用するメモリの使用量がメモリの閾値以下になるように複数の中間表現の実行順序を決定する決定部とを備えることを特徴とする。
【0024】
本発明によるプログラム制御方法は、アクセラレータに同時に実行させる複数のプログラムを、プログラムが実行する演算処理を示す中間表現と、演算処理で使用されるデータが要するメモリ量を示すメモリ情報とにそれぞれ変換し、変換された複数の中間表現および複数のメモリ情報を基に、アクセラレータが複数のプログラムを同時に実行する際にアクセラレータが使用するメモリの使用量がメモリの閾値以下になるように複数の中間表現の実行順序を決定することを特徴とする。
【0025】
本発明によるプログラム制御プログラムは、アクセラレータに、アクセラレータに同時に実行させる複数のプログラムを、プログラムが実行する演算処理を示す中間表現と、演算処理で使用されるデータが要するメモリ量を示すメモリ情報とにそれぞれ変換する変換処理、および変換された複数の中間表現および複数のメモリ情報を基に、アクセラレータが複数のプログラムを同時に実行する際にアクセラレータが使用するメモリの使用量がメモリの閾値以下になるように複数の中間表現の実行順序を決定する決定処理を実行させることを特徴とする。
【発明の効果】
【0026】
本発明によれば、アクセラレータのメモリが不足することなくアクセラレータが複数のプログラムを同時に高速で実行できる。
【図面の簡単な説明】
【0027】
【
図1】本発明の実施形態のプログラム制御装置の構成例を示すブロック図である。
【
図2】本実施形態のプログラム制御装置100によるプログラム制御処理の例を示す説明図である。
【
図3】IR生成部110に入力されるユーザプログラムの例を示す説明図である。
【
図4】IR生成部110に入力されるライブラリプログラムの例を示す説明図である。
【
図5】IR生成部110が参照する利用メモリ情報の例を示す説明図である。
【
図6】IR生成部110が生成する利用メモリ量情報入りIRの例を示す説明図である。
【
図7】IR実行順序決定部130が利用メモリ量情報入りIRを基に見積もるメモリ使用量の例を示す説明図である。
【
図8】IR実行部140がIRを実行する際のGPUメモリの例を示す説明図である。
【
図9】IR実行部140がIRを実行する際のGPUメモリの他の例を示す説明図である。
【
図10】IR実行部140がIRを実行する際のGPUメモリの他の例を示す説明図である。
【
図11】IR生成部120が生成する利用メモリ量情報入りIRの例を示す説明図である。
【
図12】IR実行順序決定部130が利用メモリ量情報入りIRを基に見積もるメモリ使用量の他の例を示す説明図である。
【
図13】IR実行順序決定部130が利用メモリ量情報入りIRを基に見積もるメモリ使用量の他の例を示す説明図である。
【
図14】IR実行順序決定部130が利用メモリ量情報入りIRを基に見積もるメモリ使用量の他の例を示す説明図である。
【
図15】IR実行順序決定部130が利用メモリ量情報入りIRを基に見積もるメモリ使用量の他の例を示す説明図である。
【
図16】IR実行順序決定部130が利用メモリ量情報入りIRを基に見積もるメモリ使用量の他の例を示す説明図である。
【
図17】IR実行部140がIRを実行する際のGPUメモリの他の例を示す説明図である。
【
図18】本実施形態のプログラム制御装置100によるIR実行処理の動作を示すフローチャートである。
【
図19】IR生成部120が生成する利用メモリ量情報入りIRの他の例を示す説明図である。
【
図20】IR実行順序決定部130が利用メモリ量情報入りIRを基に見積もるメモリ使用量の他の例を示す説明図である。
【
図21】IR実行順序決定部130が利用メモリ量情報入りIRを基に見積もるメモリ使用量の他の例を示す説明図である。
【
図22】IR実行順序決定部130が利用メモリ量情報入りIRを基に見積もるメモリ使用量の他の例を示す説明図である。
【
図23】IR実行順序決定部130が利用メモリ量情報入りIRを基に見積もるメモリ使用量の他の例を示す説明図である。
【
図24】本発明によるプログラム制御装置100のハードウェア構成例を示す説明図である。
【
図25】本発明によるプログラム制御装置の概要を示すブロック図である。
【
図26】複数のプログラムの実行主体の例を示す説明図である。
【
図27】複数のプログラムの実行主体の他の例を示す説明図である。
【
図28】Unified Memoryが使用されていない演算装置の構成例を示すブロック図である。
【
図29】Unified Memoryが使用されている演算装置の構成例を示すブロック図である。
【発明を実施するための形態】
【0028】
[構成の説明]
以下、本発明の実施形態を図面を参照して説明する。
図1は、本発明の実施形態のプログラム制御装置の構成例を示すブロック図である。
【0029】
本実施形態のプログラム制御装置100は、プログラムを利用メモリ量情報が保持されたIR(Intermediate Representation:中間表現)に変換し、利用メモリ量情報を基にIRの実行順序を制御することを特徴とする。
【0030】
プログラムの一般的な実行形態には、プログラムをコンパイルしてオブジェクトコードを生成し、生成されたオブジェクトコードを実行する形態や、インタープリタ方式で命令を1つずつ実行する形態がある。
【0031】
また、プログラムの一般的な実行形態には、インタープリタ方式で命令を1つずつIRに変換し、変換されたIRを実行する形態もある。本実施形態のプログラム制御装置100は、プログラムをIRに変換し、変換されたIRを実行するという手法を活用する。
【0032】
図2は、本実施形態のプログラム制御装置100によるプログラム制御処理の例を示す説明図である。
図2に示す例において、プログラム制御装置100は、
図27の中央に示す右下がり斜線の領域における計算を行うプログラムAの部分と、右上がり斜線の領域における計算を行うプログラムBの部分をそれぞれ利用メモリ量情報入りIRに変換する。
【0033】
なお、各利用メモリ量情報入りIRの右の吹き出し内に示すグラフは、各領域で行われる計算の処理の順番を表す計算グラフである。計算グラフの情報は、利用メモリ量情報入りIRに含まれている。
【0034】
例えば、
図2に示す右下がり斜線の領域に対応する計算グラフは、最初に処理1が実行され、処理1の実行結果を基に処理2と処理3が実行され、処理2と処理3の各実行結果を基に処理4が実行され、処理4の実行結果を基に処理5が実行されることを表す。
【0035】
図2に示すように、GPUは、複数のユーザプログラムが変換された利用メモリ量情報入りIRを受け付ける。次いで、GPUは、GPUメモリが不足しないように、各IRの実行順序を制御する。
【0036】
図2に示す例であれば、GPUは、各利用メモリ量情報入りIRを基に、<A1>→<A2>→<A3>→<A4>→<B1>→<B2>→<B3>→<A5>の順に各処理を実行することを決定する。なお、例えば<A1>はプログラムAの処理1を表し、<B1>はプログラムBの処理1を表す。
【0037】
図1に示すプログラム制御装置100は、IR生成部110と、IR生成部120と、IR実行順序決定部130と、IR実行部140とを備える。
【0038】
IR生成部110は、入力されたプログラムAから利用メモリ量情報入りIRを生成する機能を有する。また、IR生成部120は、入力されたプログラムBから利用メモリ量情報入りIRを生成する機能を有する。
【0039】
本実施形態のプログラムA~Bは、それぞれユーザA~Bから入力されたプログラムである。なお、プログラム制御装置100は、IR生成部を3つ以上備えてもよい。
【0040】
IR生成部110およびIR生成部120には、入力として、プログラムが与えられる。与えられるプログラムは、ユーザプログラムとライブラリプログラムに分けられる。
図3は、IR生成部110に入力されるユーザプログラムの例を示す説明図である。また、
図4は、IR生成部110に入力されるライブラリプログラムの例を示す説明図である。
【0041】
また、IR生成部110およびIR生成部120は、利用メモリ量情報入りIRを生成する際、内部的に保持する利用メモリ情報を参照する。
図5は、IR生成部110が参照する利用メモリ情報の例を示す説明図である。
【0042】
IR生成部110およびIR生成部120は、ユーザプログラム、ライブラリプログラム、および利用メモリ情報を基に、プログラムを実行せずに利用メモリ量情報入りIRを生成する。
図6は、IR生成部110が生成する利用メモリ量情報入りIRの例を示す説明図である。
【0043】
図6に示すように、本実施形態の利用メモリ量情報入りIRは、演算内容を示すOperation情報(IR)と、利用メモリ量を示すData情報とで構成される。なお、
図6に示す利用メモリ量情報入りIRは、
図2に示す右下がり斜線の領域における計算を行うプログラムAの部分が変換された利用メモリ量情報入りIRである。
【0044】
例えば、IR生成部110は、
図3に示すユーザプログラムと、
図4に示すライブラリプログラムとを基に、最初に行われる処理1を示す”Operation1”のOperation情報を生成する。また、IR生成部110は、
図3に示すユーザプログラムと、
図5に示す利用メモリ情報とを基に、最初に行われる処理1で利用されるメモリ量を示す”Data1”のData情報を生成する。
【0045】
なお、
図6に示す”Data5”のData情報には、プログラム内の変数の生死情報である”Keep”が含まれている。その理由は、ユーザプログラムの第1レベルのデータ(”Out1”)はIRが実行された後も維持されることが求められるためである。また、関数内のデータ(”Data1”~”Data4”)はIRが実行された後には不要となるため、”Data1”~”Data4”のData情報には、Keep Flagが付与されていない。
【0046】
IR生成部110およびIR生成部120は、生成された利用メモリ量情報入りIRをIR実行順序決定部130に入力する。IR実行順序決定部130は、入力された利用メモリ量情報入りIRを基にメモリ使用量を見積もる。
【0047】
図7は、IR実行順序決定部130が利用メモリ量情報入りIRを基に見積もるメモリ使用量の例を示す説明図である。なお、
図7は、IR実行順序決定部130がIR生成部110から入力された
図6に示す利用メモリ量情報入りIRを基に見積もるメモリ使用量を示す。
【0048】
図7に示すように、IR実行順序決定部130は、”Operation1”のOperation情報と”Data1”のData情報とを基に、計算の処理1(
図7に示す”Op1”)では8GBの入力データ”In1”と8GBの出力データ”Data1”が使用されると分析する。
【0049】
なお、”Data1”のData情報は、”Data1”がサイズが1Gの64ビットの符号付き整数であることを示している。よって、IR実行順序決定部130は、出力データ”Data1”のメモリ使用量が、8 Byte × 1G = 8GBであると見積もる。
【0050】
よって、IR実行順序決定部130は、計算の処理1におけるメモリ使用量の最大値が16GBであると見積もる。なお、
図7に示す”Op1”における各行は、計算の処理1における入力データおよびメモリ使用量、処理の実行時のデータおよびメモリ使用量、出力データおよびメモリ使用量をそれぞれ表す(
図7に示す”Op2”~”Op5”も同様)。また、
図7の右端に示す値は、各データのメモリ使用量の合計である。
【0051】
同様に、IR実行順序決定部130は、計算の処理2~5(
図7に示す”Op2”~”Op5”)における各メモリ使用量の最大値が24GB、32GB、32GB、32GBであるとそれぞれ見積もる。
【0052】
なお、
図7に示す例では、出力データ”In1”は、予めKeep Flagが付与されているデータであるため、”Op1”以降の”Op2”~”Op5”においても利用されずに残り続けている。また、
図7に示す”Op1”における出力データ”Data1”は、”Op1”以降の”Op2”、”Op3”の入力データであるため、
図7に示す”Op1”の終了時点で残っている。
【0053】
また、
図7に示す”Op2”における出力データ”Data1”は”Op2”以降の”Op3”の入力データであるため、また出力データ”Data2”は”Op2”以降の”Op4”の入力データであるため、
図7に示す”Op2”の終了時点でいずれも残っている。
【0054】
また、
図7に示す”Op3”における出力データ”Data1”は、”Op3”以降の”Op4”、”Op5”において利用されないため、
図7に示す”Op3”の終了時点で削除されている。また、
図7に示す”Op3”における出力データ”Data2”、”Data3”は、”Op3”以降の”Op4”の入力データであるため、
図7に示す”Op3”の終了時点でいずれも残っている。
【0055】
同様の理由で、
図7に示す”Op4”では、不要と判断された出力データ”Data2”、”Data3”が、
図7に示す”Op4”の終了時点で削除されている。
【0056】
メモリ使用量を見積もった後、IR実行順序決定部130は、IRをIR実行部140に入力する。IR実行部140は、入力されたIRを実行することによって、各プログラムを実行する機能を有する。
【0057】
図8は、IR実行部140がIRを実行する際のGPUメモリの例を示す説明図である。なお、
図8に示すGPUがIR実行部140に相当する。また、
図8に示すGPUメモリが、IR実行部140のメモリに相当する。
【0058】
図8に示す例では、IR実行部140が
図2に示す破線の角丸四角形内の右下がり斜線の領域における計算を行うプログラムAの部分と、破線の角丸四角形内の右上がり斜線の領域における計算を行うプログラムBの部分とを実行する。
図8の上部に示すように、プログラムAおよびプログラムBには、実行にあたって外部からデータが入力されている。
【0059】
よって、
図8の下部に示すように、GPUメモリには、各プログラムの実行の開始にあたって入力データ”In1”、”InB1”が保存されている。なお、
図8の下部に示すように、入力データ”In1”、”InB1”の各メモリ使用量は、それぞれ8GBである。
【0060】
図9は、IR実行部140がIRを実行する際のGPUメモリの他の例を示す説明図である。
図9の上部は、プログラムAの実行において処理1が計算されていることを示す。なお、プログラムAの処理1が計算された結果は、GPUメモリに保存される(プログラムBも同様)。
【0061】
よって、
図9の下部に示すように、右のGPUメモリには、新たに出力データ”Data1”が保存されている。
図9の下部に示すように、出力データ”Data1”のメモリ使用量は、
図7で見積もられていたように8GBである。
【0062】
図10は、IR実行部140がIRを実行する際のGPUメモリの他の例を示す説明図である。
図10の上部は、プログラムAの実行において処理2が計算されていることを示す。また、
図10の上部は、ユーザAのプログラムの実行中(処理2の計算途中)にユーザBのプログラムの実行が要求されたことを示す。
【0063】
よって、
図10の下部に示すように、右のGPUメモリには、新たに出力データ”Data2”が保存されている。
図10の下部に示すように、出力データ”Data2”のメモリ使用量は、
図7で見積もられていたように8GBである。
【0064】
プログラムBの実行が要求されたことを契機に、IR生成部120は、利用メモリ量情報入りIRを生成する。
図11は、IR生成部120が生成する利用メモリ量情報入りIRの例を示す説明図である。
【0065】
図11に示す利用メモリ量情報入りIRは、
図8に示す破線の角丸四角形内の右下がり斜線の領域における計算を行うプログラムBの部分が変換された利用メモリ量情報入りIRである。
図11に示す利用メモリ量情報入りIRの見方は、
図6に示す利用メモリ量情報入りIRの見方と同様である。
【0066】
利用メモリ量情報入りIRが生成されたことを契機に、IR実行順序決定部130は、メモリ使用量を見積もる。
図12は、IR実行順序決定部130が利用メモリ量情報入りIRを基に見積もるメモリ使用量の他の例を示す説明図である。
【0067】
図12に示すメモリ使用量の見方は、
図7に示すメモリ使用量の見方と同様である。なお、
図12に示す”OpB1”~”OpB3”は、
図10に示すプログラムBの計算の処理1~3をそれぞれ表す。
【0068】
次に、IR実行順序決定部130は、プログラムAの実行待ちの各処理(Operations)に対して、メモリ使用量が閾値を超えないようにプログラムBの各処理(Operations)を追加する。
【0069】
図13は、IR実行順序決定部130が利用メモリ量情報入りIRを基に見積もるメモリ使用量の他の例を示す説明図である。
図13は、
図10の上部に示すプログラムAに対応する。すなわち、
図13に示す下線が付された”Op2”が、実行中の処理である。また、
図13に示す”Op3”~”Op5”が、実行待ちの各処理である。
【0070】
図14は、IR実行順序決定部130が利用メモリ量情報入りIRを基に見積もるメモリ使用量の他の例を示す説明図である。
図14は、
図10の上部に示すプログラムBに対応する。すなわち、
図14に示す下線が付された“開始時”が、プログラムBの現在の段階である。また、
図14に示す”OpB1”~”OpB3”が、追加される各処理である。
【0071】
IR実行順序決定部130は、プログラムAの実行待ちの各処理に対して、プログラムBの各処理を追加する。
図15は、IR実行順序決定部130が利用メモリ量情報入りIRを基に見積もるメモリ使用量の他の例を示す説明図である。
図15に示すメモリ使用量の見方は、
図13に示すメモリ使用量の見方と同様である。
【0072】
図13と異なり、
図15では”Op4”と”Op5”の間が空けられている。IR実行順序決定部130は、
図15に示す空けられた箇所でプログラムBの各処理が実行されるようにプログラムBの各処理を追加する。
【0073】
図16は、IR実行順序決定部130が利用メモリ量情報入りIRを基に見積もるメモリ使用量の他の例を示す説明図である。
図16に示すメモリ使用量の見方は、
図14に示すメモリ使用量の見方と同様である。
【0074】
図16に示すように、IR実行順序決定部130は、プログラムAの”Op4”が終了してから”OpB1”~”OpB3”が実行されるように各処理の実行タイミングを調整している。なお、
図16に示す例では、IR実行順序決定部130は、メモリ使用量が最小になるようにプログラムAの実行待ちの各処理に対してプログラムBの各処理を追加している。
【0075】
また、
図16の右端に示す「合計」は、
図15に示すプログラムAのメモリ使用量と
図16に示すプログラムBのメモリ使用量の合計である。合計の最大値は、”OpB2”の実行中等の40GBである。すなわち、プログラムAのメモリ使用量とプログラムBのメモリ使用量の合計が閾値の40GB以下になるため、プログラムAとプログラムBが同時に実行されても、GPUのメモリが不足することはない。
【0076】
図17は、IR実行部140がIRを実行する際のGPUメモリの他の例を示す説明図である。
図17の上部は、プログラムAの実行において処理3が計算されていることを示す。また、
図17の上部は、プログラムBの各処理が実行待ちであることを示す。
【0077】
よって、
図17の下部に示すように、中央のGPUメモリには、新たに出力データ”Data3”が保存されている。また、右のGPUメモリからは、IRが実行された後に不要となった出力データ”Data1”が削除されている。
図17の下部に示すように、出力データ”Data3”のメモリ使用量は、
図15で見積もられていたように8GBである。
【0078】
従って、IR実行部140は、IR実行順序決定部130が決定した順番でIRを実行することによって、GPUメモリを不足させずに2つのプログラムを同時に実行できる。
【0079】
以上のように、本実施形態のIR生成部110およびIR生成部120は、アクセラレータ(GPU)に同時に実行させる複数のプログラムを、プログラムが実行する演算処理を示す中間表現(Operation情報)と、演算処理で使用されるデータが要するメモリ量を示すメモリ情報(Data情報)とにそれぞれ変換する。
【0080】
また、本実施形態のIR実行順序決定部130は、変換された複数の中間表現および複数のメモリ情報を基に、アクセラレータが複数のプログラムを同時に実行する際にアクセラレータが使用するメモリ(GPUメモリ)の使用量がメモリの閾値以下になるように複数の中間表現の実行順序を決定する。
【0081】
また、本実施形態のプログラム制御装置100は、決定された実行順序に従って複数の中間表現を実行することによって複数のプログラムを同時に実行するアクセラレータ(IR実行部140)を備える。
【0082】
また、本実施形態のメモリ情報には、データが使用される演算処理の範囲(”Keep Flag”が示す内容)が含まれる。
【0083】
[動作の説明]
以下、本実施形態のプログラム制御装置100のIRを実行する動作を
図18を参照して説明する。
図18は、本実施形態のプログラム制御装置100によるIR実行処理の動作を示すフローチャートである。
【0084】
最初に、プログラム制御装置100のIR生成部110に、プログラムAが入力される(ステップS101)。
【0085】
次いで、IR生成部110は、プログラムAから利用メモリ量情報入りIRを生成する(ステップS102)。IR生成部110は、生成された利用メモリ量情報入りIRをIR実行順序決定部130に入力する。
【0086】
また、プログラム制御装置100のIR生成部120に、プログラムBが入力される(ステップS103)。
【0087】
次いで、IR生成部120は、プログラムBから利用メモリ量情報入りIRを生成する(ステップS104)。IR生成部120は、生成された利用メモリ量情報入りIRをIR実行順序決定部130に入力する。
【0088】
次いで、IR実行順序決定部130は、入力された利用メモリ量情報入りIRを基に、プログラムAおよびプログラムBが実行される際のメモリ使用量をそれぞれ見積もる(ステップS105)。
【0089】
次いで、IR実行順序決定部130は、見積もられた各メモリ使用量を基にプログラムAおよびプログラムBのIRの実行順序を決定する(ステップS106)。IR実行順序決定部130は、プログラムAおよびプログラムBのIRを、決定された実行順序と共にIR実行部140に入力する。
【0090】
次いで、IR実行部140は、決定された実行順序に従って、入力されたIRを実行する(ステップS107)。IRを実行した後、プログラム制御装置100は、IR実行処理を終了する。
【0091】
[効果の説明]
本実施形態のIR実行順序決定部130は、IRの実行順序を決定するにあたって、プログラムの実行待ちの各処理に対してメモリ使用量がGPUメモリの閾値を超えないように他のプログラムの処理を追加する。従って、本実施形態のIR実行部140(GPU)は、GPUメモリが不足することなく複数のプログラムを同時に高速で実行できる。
【0092】
<変形例>
本変形例は、メモリ使用量の見積もりの結果、メモリ使用量がGPUメモリのサイズを超える場合に、プログラム制御装置100が必要最低限のデータをCPUメモリに退避させる例である。具体的には、IR実行順序決定部130が、プログラムAの実行待ちの各処理に対して、プログラムBのメモリの使用量が多いために、メモリ使用量が閾値を超えずにプログラムBの各処理を追加できない場合を考える。
【0093】
図19は、IR生成部120が生成する利用メモリ量情報入りIRの他の例を示す説明図である。
図11に示す”DataB1”では”Size : 1G”と指定されているが、
図19に示す”DataB1”では”Size : 2G”と指定されている。
【0094】
すなわち、”DataB1”のData情報は、”DataB1”がサイズが2Gの64ビットの符号付き整数であることを示している。よって、IR実行順序決定部130は、出力データ”DataB1”のメモリ使用量が、8 Byte × 2G = 16GBであると見積もる。
【0095】
図20は、IR実行順序決定部130が利用メモリ量情報入りIRを基に見積もるメモリ使用量の他の例を示す説明図である。
図20では、”DataB1”を使用する”OpB1”、”OpB2”の一部のメモリ使用量が、
図12に示す”OpB1”、”OpB2”のメモリ使用量よりも8GB増加している。
【0096】
図21は、IR実行順序決定部130が利用メモリ量情報入りIRを基に見積もるメモリ使用量の他の例を示す説明図である。
図21は、
図10の上部に示すプログラムBに対応する。
【0097】
図21に示すメモリ使用量の見方は、
図14に示すメモリ使用量の見方と同様である。なお、本変形例において、
図10の上部に示すプログラムAに対応するメモリ使用量は、
図13に示すメモリ使用量である。
【0098】
図13と
図21を参照すると、IR実行順序決定部130は、プログラムAの実行待ちの各処理に対して、メモリ使用量が閾値を超えないようにプログラムBの各処理を追加できない。具体的には、プログラムBの”OpB2”がプログラムAの”Op2”~”Op5”のどこに追加されても、メモリ使用量が閾値の40GBを超える。
【0099】
よって、IR実行順序決定部130は、まず最もメモリ使用量が小さくなる箇所、具体的には”Op4”と”Op5”の間に”OpB2”を追加することを決定する。”OpB2”を追加するために、IR実行順序決定部130は、プログラムAで使用されているデータを退避させる。なお、データを退避させる箇所は、例えばCPUメモリである。
【0100】
退避させることが求められる量は、16+32-40 = 8GBである。よって、IR実行順序決定部130は、”OpB2”が実行される前に”Op4”で使用された”Data4”(8GB)を退避させることを決定する。
【0101】
図22は、IR実行順序決定部130が利用メモリ量情報入りIRを基に見積もるメモリ使用量の他の例を示す説明図である。
図22に示すメモリ使用量の見方は、
図15に示すメモリ使用量の見方と同様である。
【0102】
図15と異なり、
図22では”Op4”と”Op5”の間が空けられ、かつ”Op4”の終了後に”Data4”を退避させる処理が指定されている。また、”Op5”の開始前に”Data4”を復帰させる処理が指定されている。IR実行順序決定部130は、
図22に示す空けられた箇所でプログラムBの各処理が実行されるようにプログラムBの各処理を追加する。
【0103】
図23は、IR実行順序決定部130が利用メモリ量情報入りIRを基に見積もるメモリ使用量の他の例を示す説明図である。
図23に示すメモリ使用量の見方は、
図16に示すメモリ使用量の見方と同様である。
【0104】
図23に示す合計の最大値は、”OpB2”の実行中等の40GBである。すなわち、
図22に示すプログラムAのメモリ使用量と
図23に示すプログラムBのメモリ使用量の合計が閾値の40GB以下になるため、プログラムAとプログラムBが同時に実行されても、GPUのメモリが不足することはない。
【0105】
以上のように、本変形例のIR実行順序決定部130は、演算処理で使用されるデータをアクセラレータ以外の演算装置が使用するメモリに退避させる処理を複数の中間表現に含める。
【0106】
以下、本実施形態のプログラム制御装置100のハードウェア構成の具体例を説明する。
図24は、本発明によるプログラム制御装置100のハードウェア構成例を示す説明図である。
【0107】
図24に示すプログラム制御装置100は、CPU11と、主記憶部12と、通信部13と、補助記憶部14とを含む。また、ユーザが操作するための入力部15や、ユーザに処理結果または処理内容の経過を提示するための出力部16を含む。
【0108】
プログラム制御装置100は、
図24に示すCPU11が各構成要素が有する機能を提供するプログラムを実行することによって、ソフトウェアにより実現される。
【0109】
すなわち、CPU11が補助記憶部14に格納されているプログラムを、主記憶部12にロードして実行し、プログラム制御装置100の動作を制御することによって、各機能がソフトウェアにより実現される。
【0110】
なお、
図24に示すプログラム制御装置100は、CPU11の代わりにDSP(Digital Signal Processor)を含んでもよい。または、
図24に示すプログラム制御装置100は、CPU11とDSPとを併せて含んでもよい。
【0111】
主記憶部12は、データの作業領域やデータの一時退避領域として用いられる。主記憶部12は、例えばRAM(Random Access Memory)である。
【0112】
通信部13は、有線のネットワークまたは無線のネットワーク(情報通信ネットワーク)を介して、周辺機器との間でデータを入力および出力する機能を有する。
【0113】
補助記憶部14は、一時的でない有形の記憶媒体である。一時的でない有形の記憶媒体として、例えば磁気ディスク、光磁気ディスク、CD-ROM(Compact Disk Read Only Memory )、DVD-ROM(Digital Versatile Disk Read Only Memory )、半導体メモリが挙げられる。
【0114】
入力部15は、データや処理命令を入力する機能を有する。入力部15は、例えばキーボード、マウス、タッチパネル等の入力デバイスである。
【0115】
出力部16は、データを出力する機能を有する。出力部16は、例えば液晶ディスプレイ装置等の表示装置、タッチパネル、またはプリンタ等の印刷装置である。
【0116】
また、
図24に示すように、プログラム制御装置100において、各構成要素は、システムバス17に接続されている。
【0117】
プログラム制御装置100において、補助記憶部14は、IR生成部110、IR生成部120、およびIR実行順序決定部130を実現するためのプログラムを記憶している。なお上述したように、IR実行部140は、例えばGPU(図示せず)で実現される。
【0118】
なお、プログラム制御装置100は、例えば内部に
図1に示すような機能を実現するLSI(Large Scale Integration )等のハードウェア部品が含まれる回路が実装されてもよい。
【0119】
また、プログラム制御装置100は、CPU等の素子を用いるコンピュータ機能を含まないハードウェアにより実現されてもよい。例えば、各構成要素の一部または全部は、汎用の回路(circuitry )または専用の回路、プロセッサ等やこれらの組み合わせによって実現されてもよい。これらは、単一のチップ(例えば、上記のLSI)によって構成されてもよいし、バスを介して接続される複数のチップによって構成されてもよい。各構成要素の一部または全部は、上述した回路等とプログラムとの組み合わせによって実現されてもよい。
【0120】
また、プログラム制御装置100の各構成要素の一部または全部は、演算部と記憶部とを備えた1つまたは複数の情報処理装置で構成されていてもよい。
【0121】
各構成要素の一部または全部が複数の情報処理装置や回路等により実現される場合には、複数の情報処理装置や回路等は集中配置されてもよいし、分散配置されてもよい。例えば、情報処理装置や回路等は、クライアントアンドサーバシステム、クラウドコンピューティングシステム等、各々が通信ネットワークを介して接続される形態として実現されてもよい。
【0122】
次に、本発明の概要を説明する。
図25は、本発明によるプログラム制御装置の概要を示すブロック図である。本発明によるプログラム制御装置20は、アクセラレータに同時に実行させる複数のプログラムを、プログラムが実行する演算処理を示す中間表現と、演算処理で使用されるデータが要するメモリ量を示すメモリ情報とにそれぞれ変換する変換部21(例えば、IR生成部110およびIR生成部120)と、変換された複数の中間表現および複数のメモリ情報を基に、アクセラレータが複数のプログラムを同時に実行する際にアクセラレータが使用するメモリの使用量がメモリの閾値以下になるように複数の中間表現の実行順序を決定する決定部22(例えば、IR実行順序決定部130)とを備える。
【0123】
また、プログラム制御装置20は、決定された実行順序に従って複数の中間表現を実行することによって複数のプログラムを同時に実行するアクセラレータ(例えば、IR実行部140)を備えてもよい。
【0124】
そのような構成のプログラム制御装置が利用されると、アクセラレータは、アクセラレータのメモリが不足することなく、複数のプログラムを同時に高速で実行できる。
【0125】
また、決定部22は、演算処理で使用されるデータをアクセラレータ以外の演算装置(例えば、CPU)が使用するメモリに退避させる処理を複数の中間表現に含めてもよい。
【0126】
そのような構成のプログラム制御装置が利用されると、アクセラレータは、アクセラレータのメモリが不足することなく、複数のプログラムを同時に高速で実行できる。
【0127】
また、アクセラレータは、GPU以外の演算素子(演算装置)でもよい。また、メモリ情報には、データが使用される演算処理の範囲が含まれてもよい。
【符号の説明】
【0128】
11 CPU
12 主記憶部
13 通信部
14 補助記憶部
15 入力部
16 出力部
17 システムバス
20、100 プログラム制御装置
21 変換部
22 決定部
110、120 IR生成部
130 IR実行順序決定部
140 IR実行部