(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023180315
(43)【公開日】2023-12-21
(54)【発明の名称】変換プログラムおよび変換処理方法
(51)【国際特許分類】
G06F 8/60 20180101AFI20231214BHJP
G06F 8/51 20180101ALI20231214BHJP
G06F 9/50 20060101ALI20231214BHJP
【FI】
G06F8/60
G06F8/51
G06F9/50 150E
G06F9/50 150C
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2022093497
(22)【出願日】2022-06-09
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】弁理士法人扶桑国際特許事務所
(72)【発明者】
【氏名】児玉 宏喜
(72)【発明者】
【氏名】吉川 隆英
【テーマコード(参考)】
5B081
5B376
【Fターム(参考)】
5B081CC32
5B376AB29
5B376BC36
(57)【要約】 (修正有)
【課題】適切なアクセラレータに処理を割り当てる変換プログラム及び変換処理方法を提供する。
【解決手段】管理サーバ、ノード、NW装置、ストレージ装置、メモリ装置、FPGA装置及びGPU装置を有する情報処理システムにおいて、アプリケーションのソースコードのコンパイルを行うコンピュータである管理サーバ100は、ソースプログラムを複数のプログラムブロックに分割するプログラム分割部121と、複数のプログラムブロック夫々による複数のアクセラレータ夫々へのアクセス回数の分析の結果を取得する分析部122と、分析の結果に基づいて、複数のプログラムブロックのうちの第1プログラムブロックと、複数のアクセラレータから、第1プログラムブロックの配置先となるアクセラレータを選択する配置先決定部123と、第1プログラムブロックを配置先のアクセラレータで動作するハードウェアロジックに変換するロジック変換部124と、を含む。
【選択図】
図5
【特許請求の範囲】
【請求項1】
コンピュータに、
ソースプログラムを複数のプログラムブロックに分割し、
前記複数のプログラムブロックそれぞれによる複数のアクセラレータそれぞれへのアクセス回数の分析の結果に基づいて、前記複数のプログラムブロックのうちの第1プログラムブロックと、前記複数のアクセラレータのうちの、前記第1プログラムブロックの配置先のアクセラレータとを選択し、
前記第1プログラムブロックを前記配置先のアクセラレータで動作するハードウェアロジックに変換する、
処理を実行させる変換プログラム。
【請求項2】
前記配置先のアクセラレータの選択では、前記複数のアクセラレータのうち、前記第1プログラムブロックによるアクセス回数が最も多いアクセラレータを前記配置先のアクセラレータとして選択する、
処理を前記コンピュータに実行させる請求項1記載の変換プログラム。
【請求項3】
前記複数のアクセラレータは、メモリ装置に設けられる第1アクセラレータを含み、
前記配置先のアクセラレータの選択では、前記第1プログラムブロックによるアクセス回数が同じである2以上のアクセラレータが前記第1アクセラレータを含む場合、前記第1アクセラレータを優先的に前記配置先のアクセラレータとして選択する、
処理を前記コンピュータに実行させる請求項1記載の変換プログラム。
【請求項4】
前記分析では、前記複数のプログラムブロックに含まれる、前記複数のアクセラレータそれぞれに対応する関数の呼び出し回数に基づいて、前記アクセス回数を取得する、
処理を前記コンピュータに実行させる請求項1記載の変換プログラム。
【請求項5】
前記第1プログラムブロックの選択では、前記複数のアクセラレータのうちの少なくとも1つのアクセラレータへのアクセス回数が1以上であるプログラムブロックを、前記第1プログラムブロックとして選択する、
処理を前記コンピュータに実行させる請求項1記載の変換プログラム。
【請求項6】
前記第1プログラムブロックの選択では、複数の前記第1プログラムブロックを選択し、
前記配置先のアクセラレータの選択では、前記第1プログラムブロックごとに、前記配置先のアクセラレータを選択する、
処理を前記コンピュータに実行させる請求項1記載の変換プログラム。
【請求項7】
前記複数のアクセラレータを有するシステムにおいて前記複数のプログラムブロックの少なくとも一部の処理を前記複数のアクセラレータの少なくとも一部に実行させる場合の前記システムの性能を示す指標値を、前記複数のプログラムブロックの実行順序の分析の結果と前記ハードウェアロジックとに基づき、前記複数のプログラムブロックの分割の粒度を示す複数の分割単位それぞれに対して取得し、
前記分割単位ごとに取得した前記指標値に基づいて、前記複数の分割単位のうちの何れかの前記分割単位を選択する、
処理を前記コンピュータに実行させる請求項1記載の変換プログラム。
【請求項8】
前記指標値の取得では、前記ソースプログラムに対応する演算の実行に要する計算時間および消費電力を取得する、
処理を前記コンピュータに実行させる請求項7記載の変換プログラム。
【請求項9】
前記ハードウェアロジックに基づいて、前記複数のアクセラレータを有するシステムにより前記ソースプログラムに対応する演算を実行させる実行可能ファイルを生成する、
処理を前記コンピュータに実行させる請求項1記載の変換プログラム。
【請求項10】
コンピュータが、
ソースプログラムを複数のプログラムブロックに分割し、
前記複数のプログラムブロックそれぞれによる複数のアクセラレータそれぞれへのアクセス回数の分析の結果に基づいて、前記複数のプログラムブロックのうちの第1プログラムブロックと、前記複数のアクセラレータのうちの、前記第1プログラムブロックの配置先のアクセラレータとを選択し、
前記第1プログラムブロックを前記配置先のアクセラレータで動作するハードウェアロジックに変換する、
変換処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は変換プログラムおよび変換処理方法に関する。
【背景技術】
【0002】
異種の演算器が混在するヘテロジニアスな環境を有するコンピュータシステムが利用されている。ヘテロジニアスな環境では、例えばCPU(Central Processing Unit)の処理をアクセラレータにオフロードすることで計算性能の向上が図られることがある。アクセラレータには、例えばFPGA(Field Programmable Gate Array)やGPU(Graphics Processing Unit)などが用いられる。
【0003】
また、CやC++などの高級言語で記述されたソースプログラムをアクセラレータのロジックに変換する技術は、高位合成と呼ばれる。例えば、集積回路に外部メモリを付加したハードウェアに最適なハードウェア記述言語を自動的に生成する高位合成装置の提案がある。また、高位合成におけるループ展開数と回路並列数の最適な組み合わせを決定するパラメータ最適化装置の提案がある。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2021-2185号公報
【特許文献2】特開2019-215697号公報
【特許文献3】米国特許出願公開第2020/0225922号明細書
【特許文献4】米国特許第8739102号明細書
【特許文献5】米国特許出願公開第2021/0116882号明細書
【発明の概要】
【発明が解決しようとする課題】
【0005】
CPUを含むノードに複数のアクセラレータが接続されており、CPUの処理のオフロード先として複数のアクセラレータを利用可能であることがある。例えば、ノードに接続される外部のストレージ装置、メモリ装置およびネットワーク装置などの種々の装置に各アクセラレータが搭載されることもある。この場合、ソースプログラムのどの部分をどのアクセラレータに配置するかを適切に決定する仕組みが問題になる。
【0006】
1つの側面では、本発明は、適切なアクセラレータに処理を割り当てることを目的とする。
【課題を解決するための手段】
【0007】
1つの態様では、変換プログラムが提供される。この変換プログラムは、コンピュータに、ソースプログラムを複数のプログラムブロックに分割し、複数のプログラムブロックそれぞれによる複数のアクセラレータそれぞれへのアクセス回数の分析の結果に基づいて、複数のプログラムブロックのうちの第1プログラムブロックと、複数のアクセラレータのうちの、第1プログラムブロックの配置先のアクセラレータとを選択し、第1プログラムブロックを配置先のアクセラレータで動作するハードウェアロジックに変換する、処理を実行させる。
【0008】
また、1つの態様では、変換処理方法が提供される。
【発明の効果】
【0009】
1つの側面では、適切なアクセラレータに処理を割り当てることができる。
【図面の簡単な説明】
【0010】
【
図1】第1の実施の形態の情報処理装置を説明する図である。
【
図2】第2の実施の形態の情報処理システムの例を示す図である。
【
図3】管理サーバのハードウェア例を示す図である。
【
図4】情報処理システムのハードウェア例を示す図である。
【
図8】プログラムブロック間のインターラクションの例を示す図である。
【
図9】インターラクション数テーブルの例を示す図である。
【
図10】管理サーバの処理例を示すフローチャートである。
【
図11】配置先アクセラレータの選択例を示すフローチャートである。
【
図12】ロジック変換の例を示すフローチャートである。
【発明を実施するための形態】
【0011】
以下、本実施の形態について図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
【0012】
図1は、第1の実施の形態の情報処理装置を説明する図である。
情報処理装置10は、ネットワークを介して情報処理システム20に接続される。情報処理システム20は、ノード21およびアクセラレータ22,23,24を有する。ノード21は、アクセラレータ22,23,24に接続される。ノード21は、CPUやRAMを有する。アクセラレータ22,23,24は、例えばFPGA、GPU、TPU(Tensor Processing Unit)およびDPU(Data Processing Unit)などで実現される。情報処理システム20は、アクセラレータ22,23,24それぞれと接続される個別のRAMを有してもよい。また、情報処理装置10は、情報処理システム20に含まれてもよい。
【0013】
アクセラレータ22,23,24は、それぞれ異なる種類のデバイスに搭載され得る。アクセラレータ22,23,24が搭載されるデバイスには、例えば共有ストレージ、共有メモリ、ネットワーク(NW:NetWork)装置、FPGA装置およびGPU装置などがある。
【0014】
共有ストレージは、情報処理システム20における、ノード21を含む複数のノードで共有される外付けのストレージを提供する。共有メモリは、当該複数のノードで共有される外付けのメモリを提供する。NW装置は、ノード間の通信を中継する。FPGA装置は、ノード21に外付けのFPGAを提供する。GPU装置は、ノード21に外付けのGPUを提供する。
【0015】
アクセラレータ22,23,24は、共有ストレージやNW装置などのデバイスの所定の機能を実行するとともに、ノード21が有するCPUの処理のオフロード先としても利用可能である。このようなアクセラレータの一例として、NW装置における、FPGAなどで実現されるスマートNIC(Network Interface Card)がある。
【0016】
例えば、アクセラレータ22は、共有ストレージに搭載されてもよい。アクセラレータ23は、共有メモリに搭載されてもよい。アクセラレータ24はNW装置に搭載されてもよい。また、アクセラレータ22,23,24は、FPGA装置やGPU装置に搭載されてもよい。
【0017】
なお、ノード21とアクセラレータ22,23,24とは、例えばCXL(Compute Express Link、登録商標)などのインターコネクトや、イーサネット(登録商標)およびInfinibandなどのネットワークを介して接続されてもよい。以下の説明において、アクセラレータ22の識別子はXである。アクセラレータ23の識別子はYである。アクセラレータ24の識別子はZである。
【0018】
情報処理装置10は、C言語やC++などの高級言語で記述されたソースプログラム30をコンパイルして、情報処理システム20に実行させる実行可能ファイルを生成する。情報処理システム20では、ノード21が有するCPU、および、アクセラレータ22,23,24の少なくとも一部により演算が実行される。情報処理システム20のように、複数の種類の演算器が混在する環境は、ヘテロジニアスな環境と言われる。
【0019】
情報処理装置10は、記憶部11および処理部12を有する。記憶部11は、RAM(Random Access Memory)などの揮発性記憶装置でもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性記憶装置でもよい。記憶部11は、ソースプログラム30や、処理部12の処理に用いられるデータを記憶する。
【0020】
処理部12は、CPU、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、FPGAなどを含み得る。処理部12はプログラムを実行するプロセッサでもよい。「プロセッサ」には、複数のプロセッサの集合(マルチプロセッサ)が含まれ得る。
【0021】
処理部12は、コンパイルの際、ソースプログラム30の少なくとも一部の記述を何れかのアクセラレータで動作するハードウェアロジックに変換し、当該記述に係る処理を、ノード21から該当のアクセラレータへオフロード可能にする。ソースプログラム30の記述からアクセラレータで動作するハードウェアロジックへの変換には、高位合成の技術が用いられる。高位合成は、粗粒度再構成可能アーキテクチャ(CGRA:Coarse-Grained Reconfigurable Architecture)に基づいて行われてもよい。高位合成を行うツール、すなわち、高位合成ツールには、例えば、Vivado(登録商標) HLSやインテル(登録商標)HLSコンパイラなどがある。HLSはHigh-Level Synthesisの略である。
【0022】
まず、処理部12は、ソースプログラム30を複数のプログラムブロックに分割する。プログラムブロックは、関数の集合である。例えば、処理部12は、各プログラムブロックに含まれる関数の数が同程度になるようにソースプログラム30を、予め与えられる所定数のプログラムブロックに分割する。処理部12は、各プログラムブロックに含まれるコード行数が同程度になるように、ソースプログラム30を所定数のプログラムブロックに分割してもよい。例えば、複数のプログラムブロックは、プログラムブロック31,32,…を含む。プログラムブロック31の識別子はAである。プログラムブロック32の識別子はBである。
【0023】
処理部12は、複数のプログラムブロックそれぞれによる複数のアクセラレータそれぞれへのアクセス回数を分析する。各プログラムブロックからアクセラレータへのアクセス回数は、例えば、当該プログラムブロックによる該当のアクセラレータの呼び出し回数(コール数)に相当する。
【0024】
アクセラレータの呼び出し回数は、プログラムブロックに含まれる関数のうち、当該アクセラレータが搭載されるデバイスの種類に対応する所定の関数の呼び出し回数をカウントすることで得られる。C言語を例に挙げると、デバイスの種類に応じた所定の関数には次のものがある。共有ストレージでは、例えばftputc関数、ftputs関数およびftprintf関数などである。共有メモリでは、例えばmmap関数などである。NW装置では、例えばioctl関数、socket関数およびconnect関数などである。GPU装置では、例えばcuda(登録商標)などである。FPGA装置では、例えばfftw関数やGROMACSのgmx_fftライブラリ関数などである。
【0025】
例えば、処理部12は、プログラムブロック31について、アクセラレータ22へのアクセス回数「1」、その他のアクセラレータへのアクセス回数「0」を得る。また、処理部12は、プログラムブロック32について、アクセラレータ23へのアクセス回数「1」、アクセラレータ24へのアクセス回数「2」、その他のアクセラレータへのアクセス回数「0」を得る。
【0026】
処理部12は、アクセス回数の分析の結果に基づいて、複数のプログラムブロックのうちの第1プログラムブロックを選択する。例えば、処理部12は、少なくとも1つのアクセラレータへのアクセス回数が1以上であるプログラムブロックを、第1プログラムブロックとして選択する。また、処理部12は、複数のアクセラレータのうちの、第1プログラムブロックの配置先のアクセラレータを選択する。例えば、処理部12は、各プログラムブロックについて、当該プログラムブロックからのアクセス回数が最も多いアクセラレータを、当該プログラムブロックの配置先のアクセラレータとする。
【0027】
例えば、プログラムブロック31は、アクセラレータ22へのアクセス回数が最も多い。よって、処理部12は、プログラムブロック31の配置先をアクセラレータ22とする。また、例えば、プログラムブロック32は、アクセラレータ24へのアクセス回数が最も多い。よって、処理部12は、プログラムブロック32の配置先をアクセラレータ24とする。他のプログラムブロックも同様に配置先のアクセラレータが決定される。なお、何れのアクセラレータにもアクセスしないプログラムブロックは、何れのアクセラレータにも配置されず、ノード21に割り当てられる。また、あるプログラムブロックについて、最多のアクセス回数となるアクセラレータが2つ以上存在する場合、処理部12は、当該2つ以上のアクセラレータのうち、共有メモリなどのデータ保持用のデバイスに搭載されたアクセラレータを優先的に選択してもよい。
【0028】
テーブル40は、各プログラムブロックの配置先のアクセラレータを示す。例えば、テーブル40は、識別子Aのプログラムブロック31の配置先が識別子Xに対応するアクセラレータ22であることを示す。また、テーブル40は、識別子Bのプログラムブロック32の配置先が識別子Zに対応するアクセラレータ24であることを示す。プログラムブロック31,32は何れも第1プログラムブロックの一例である。
【0029】
処理部12は、第1プログラムブロックを、配置先のアクセラレータで動作するハードウェアロジックに変換する。処理部12は、ハードウェアロジックへの変換には、該当のアクセラレータに対応する既存の高位合成ツールを用いることができる。また、ハードウェアロジックは、例えばGPUなどの特定のハードウェアに特化したロジックでもよい。
【0030】
例えば、処理部12は、テーブル40に基づいて、プログラムブロック31を、アクセラレータ22で動作するロジック51に変換する。ロジック51の識別子「A-X」は、ロジック51が、プログラムブロック31をアクセラレータ22で動作するハードウェアロジックに変換されたものであることを示す。また、処理部12は、テーブル40に基づいて、プログラムブロック32を、アクセラレータ24で動作するロジック52に変換する。ロジック52の識別子「B-Z」は、ロジック52が、プログラムブロック32をアクセラレータ24で動作するハードウェアロジックに変換されたものであることを示す。
【0031】
処理部12は、ソースプログラム30の一部に対応する処理が、ノード21からアクセラレータにオフロードされるようにする。すなわち、処理部12は、ソースプログラム30を基にノード21で実行されるメインアプリケーションのコンパイルと、アクセラレータにオフロードするプログラムブロックの高位合成とを行う。そして、処理部12は、当該アクセラレータと連携するメインアプリケーションの実行可能プログラムと、合成されたハードウェアロジック情報(例えば、FPGAの回路情報など)とを含む実行可能ファイルを生成する。
【0032】
処理部12は、生成した実行可能ファイルをノード21に実行させる。すると、ノード21は、ハードウェアロジック情報により該当のアクセラレータのコンフィギュレーションを行い、メインアプリケーションによりアクセラレータと連携して処理を実行する。
【0033】
以上説明したように情報処理装置10によれば、ソースプログラムが複数のプログラムブロックに分割される。複数のプログラムブロックそれぞれによる複数のアクセラレータそれぞれへのアクセス回数の分析の結果が取得される。当該アクセス回数の分析の結果に基づいて、複数のプログラムブロックのうちの第1プログラムブロックと、複数のアクセラレータのうちの、第1プログラムブロックの配置先のアクセラレータとが選択される。第1プログラムブロックが配置先のアクセラレータで動作するハードウェアロジックに変換される。
【0034】
これにより、情報処理装置10は、適切なアクセラレータに処理を割り当てることができる。具体的には、情報処理装置10は、ソースプログラム30の各プログラムブロックを、当該プログラムブロックにおいてアクセス回数が多いアクセラレータに優先的に配置する。このため、当該プログラムブロックに係る処理の実行時のノード21のCPUとアクセラレータとの間のデータ転送が低減される。その結果、当該データ転送に係るオーバーヘッドが削減される。こうして、情報処理装置10は、情報処理システム20における処理性能の向上を図れる。
【0035】
なお、処理部12は、プログラムブロック31,32,…に対応するロジック51,52,…の動作をシミュレートした結果を用いて、ソースプログラム30に対応する処理の実行に要する計算時間や消費電力などの性能指標を求めてもよい。そして、処理部12は、ソースプログラム30を別の分割単位で分割した場合に対しても同様に各アクセラレータへのプログラムブロックの配置をやり直してハードウェアロジックを生成し、性能指標を求める。処理部12は、こうして幾つかの分割単位での分割を試し、性能指標が最も良い分割単位を選択してソースプログラム30をコンパイルしてもよい。これにより、情報処理装置10は、ソースプログラム30に対応する処理を実行する情報処理システム20の処理性能の一層の向上を図れる。
【0036】
[第2の実施の形態]
次に、第2の実施の形態を説明する。
図2は、第2の実施の形態の情報処理システムの例を示す図である。
【0037】
第2の実施の形態の情報処理システムは、管理サーバ100、ノード200、NW装置300、ストレージ装置400、メモリ装置500、FPGA装置600およびGPU装置700を有する。管理サーバ100およびノード200は、NW装置300に接続される。ストレージ装置400、メモリ装置500、FPGA装置600およびGPU装置700は、ノード200に接続される。ノード200とストレージ装置400、メモリ装置500、FPGA装置600およびGPU装置700とを接続するインタフェースには、例えばCXLが用いられる。
【0038】
管理サーバ100は、アプリケーションのソースコードのコンパイルを行うコンピュータである。ソースコードは、C言語やC++などの高級言語で記述される。ソースコードは、ソースプログラムと言われてもよい。管理サーバ100は、コンパイルにより生成した実行可能ファイルをノード200に実行させる。ノード200には、複数のアクセラレータが接続される。アクセラレータは、例えばFPGA、GPU、TPUおよびDPUなどにより実現される。アクセラレータは、ハードウェアアクセラレータと言われてもよい。管理サーバ100は、ノード200が複数のアクセラレータと連携してアプリケーションを実行するように、一部の処理をアクセラレータにオフロードさせる。管理サーバ100は、ソースコードの記述を、アクセラレータのロジックに変換するために、高位合成の技術を用いる。高位合成は、CGRAに基づいて行われてもよい。
【0039】
ノード200は、複数のアクセラレータと連携してアプリケーションを実行するコンピュータである。ノード200は、NW装置300、ストレージ装置400、メモリ装置500、FPGA装置600およびGPU装置700それぞれに搭載されているアクセラレータにアプリケーションの処理の一部をオフロードする。
【0040】
NW装置300は、管理サーバ100とノード200との通信を中継する通信装置である。NW装置300は、例えばFPGAで実現されるNWアクセラレータを有する。NWアクセラレータは、スマートNICと言われるものでもよい。なお、
図2では図示が省略されているが、NW装置300には、ノード200を含む複数のノードや、他のNW装置が接続されてもよい。
【0041】
ストレージ装置400は、ノード200に外付けされる外部ストレージである。ストレージ装置400は、ノード200を含む複数のノードにより共有される共有ストレージを有する。ストレージ装置400は、例えばFPGAで実現されるストレージアクセラレータを有する。
【0042】
メモリ装置500は、ノード200に外付けされる外部メモリである。メモリ装置500は、ノード200を含む複数のノードにより共有される共有メモリを有する。メモリ装置500は、例えばFPGAで実現されるメモリアクセラレータを有する。
【0043】
FPGA装置600は、ノード200に外付けされる演算装置である。FPGA装置600は、ノード200により利用可能なアクセラレータとしてFPGAを備える。
GPU装置700は、ノード200に外付けされる演算装置である。GPU装置700は、ノード200により利用可能なアクセラレータとしてGPUを備える。
【0044】
このように、第2の実施の形態の情報処理システムは、ヘテロジニアスな環境、あるいは、ヘテロジニアスなネットワークを有する。
図3は、管理サーバのハードウェア例を示す図である。
【0045】
管理サーバ100は、CPU101、RAM102、HDD103、GPU104、入力インタフェース105、媒体リーダ106およびNIC107を有する。なお、CPU101は、第1の実施の形態の処理部12の一例である。RAM102またはHDD103は、第1の実施の形態の記憶部11の一例である。
【0046】
CPU101は、プログラムの命令を実行するプロセッサである。CPU101は、HDD103に記憶されたプログラムやデータの少なくとも一部をRAM102にロードし、プログラムを実行する。なお、CPU101は複数のプロセッサコアを含んでもよい。また、管理サーバ100は複数のプロセッサを有してもよい。以下で説明する処理は複数のプロセッサまたはプロセッサコアを用いて並列に実行されてもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【0047】
RAM102は、CPU101が実行するプログラムやCPU101が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、管理サーバ100は、RAM以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【0048】
HDD103は、OS(Operating System)やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、管理サーバ100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【0049】
GPU104は、CPU101からの命令に従って、管理サーバ100に接続されたディスプレイ61に画像を出力する。ディスプレイ61としては、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、プラズマディスプレイ、有機EL(OEL:Organic Electro-Luminescence)ディスプレイなど、任意の種類のディスプレイを用いることができる。
【0050】
入力インタフェース105は、管理サーバ100に接続された入力デバイス62から入力信号を取得し、CPU101に出力する。入力デバイス62としては、マウス、タッチパネル、タッチパッド、トラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、管理サーバ100に、複数の種類の入力デバイスが接続されていてもよい。
【0051】
媒体リーダ106は、記録媒体63に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体63として、例えば、磁気ディスク、光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)やHDDが含まれる。光ディスクには、CD(Compact Disc)やDVD(Digital Versatile Disc)が含まれる。
【0052】
媒体リーダ106は、例えば、記録媒体63から読み取ったプログラムやデータを、RAM102やHDD103などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、CPU101によって実行される。なお、記録媒体63は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体63やHDD103を、コンピュータ読み取り可能な記録媒体と言うことがある。
【0053】
NIC107は、NW装置300に接続され、NW装置300を介してノード200を含む他のコンピュータと通信を行うインタフェースである。NIC107は、例えば、NW装置300とケーブルで接続される。
【0054】
図4は、情報処理システムのハードウェア例を示す図である。
ノード200は、CPU201、メモリ202、ストレージ203およびCXLスイッチ204を有する。CPU201は、ノード200のプロセッサである。CPU201は、メモリ202に記憶されたプログラムを実行する。メモリ202は、ノード200の主記憶装置である。メモリ202は、CPU201が実行するプログラムを記憶する。メモリ202は例えばDRAM(Dynamic RAM)などのRAMである。以下に示されるメモリも同様である。
【0055】
ストレージ203は、ノード200の補助記憶装置である。例えば、ストレージ203は、管理サーバ100により生成された、アプリケーションの実行可能ファイルを記憶する。CPU201は、ストレージ203に記憶された実行可能ファイルをメモリ202にロードして実行する。
【0056】
CXLスイッチ204は、ノード200と、ストレージ装置400、メモリ装置500、FPGA装置600およびGPU装置700それぞれとを接続するインターコネクトである。
【0057】
NW装置300は、NWアクセラレータ301およびスイッチ302を有する。NWアクセラレータ301は、ノード200の処理のオフロード先として利用可能なアクセラレータである。NWアクセラレータ301は、例えばFPGAにより実現される。スイッチ302は、レイヤ3やレイヤ2のプロトコルに基づいて、受信したデータの転送先の決定や、決定した転送先へのデータの送信を行う。例えば、レイヤ3のプロトコルにはIP(Internet Protocol)がある。レイヤ2のプロトコルにはイーサネットがある。なお、図示を省略しているが、NW装置300は、NWアクセラレータ301が処理するデータを保持するメモリを有する。
【0058】
ストレージ装置400は、ストレージアクセラレータ401および共有ストレージ402を有する。ストレージアクセラレータ401は、ノード200の処理のオフロード先として利用可能なアクセラレータである。ストレージアクセラレータ401は、例えばFPGAにより実現される。共有ストレージ402は、ノード200を含む複数のノードにより共有されるストレージである。共有ストレージ402は、例えば、HDDやSSDなどにより実現される。なお、図示を省略しているが、ストレージ装置400は、ストレージアクセラレータ401が処理するデータを保持するメモリを有する。
【0059】
メモリ装置500は、メモリアクセラレータ501および共有メモリ502を有する。メモリアクセラレータ501は、ノード200の処理のオフロード先として利用可能なアクセラレータである。メモリアクセラレータ501は、例えばFPGAにより実現される。共有メモリ502は、ノード200を含む複数のノードにより共有されるメモリである。共有メモリ502の少なくとも一部の記憶領域は、メモリアクセラレータ501が処理するデータを保持するために用いられてもよい。
【0060】
例えば、ストレージ装置400やメモリ装置500は、図示を省略している他のノードと、CXLのインタフェースにより接続されてもよい。
FPGA装置600は、FPGA601およびメモリ602を有する。FPGA601は、ノード200の処理のオフロード先として利用可能なアクセラレータである。メモリ602は、FPGA601が処理するデータを保持する。
【0061】
GPU装置700は、GPU701およびメモリ702を有する。GPU701は、ノード200の処理のオフロード先として利用可能なアクセラレータである。メモリ702は、GPU701が処理するデータを保持する。
【0062】
図5は、管理サーバの機能例を示す図である。
管理サーバ100は、記憶部110および制御部120を有する。記憶部110には、RAM102やHDD103の記憶領域が用いられる。制御部120は、RAM102に記憶されたプログラムがCPU101により実行されることで実現される。
【0063】
記憶部110は、ノード200に実行させるアプリケーションのソースコードを記憶する。また、記憶部110は、制御部120がソースコードをコンパイルした結果である実行可能ファイルを記憶する。
【0064】
制御部120は、ソースコードのコンパイルを行う。制御部120は、ソースコードに係る一部の処理を、ノード200に接続された何れかのアクセラレータにオフロードするように実行可能ファイルを生成する。制御部120は、プログラム分割部121、分析部122、配置先決定部123、ロジック変換部124、性能評価部125およびコンパイル処理部126を有する。
【0065】
プログラム分割部121は、ソースコードを複数のプログラムブロックに分割する。プログラムブロックの区切りは関数の区切りとなる。プログラムブロックは、タスクブロックと言われてもよい。1つのプログラムブロックには、1以上の関数が属する。また、分割単位は、1つのプログラムブロック当たりに含めるメイン関数の数やコードの容量(行数)により定められる。分割単位として、複数パターンが予め用意される。
【0066】
例えば、メイン関数の数で分割単位を分類する場合、分割単位の粒度として次の3種類が予め定められる。粒度大では、メイン関数の数が20個以上程度である。粒度中では、メイン関数の数が5~20個程度である。粒度小では、メイン関数の数が5個未満程度である。
【0067】
また、例えば、コードの容量で分割単位を分類する場合、分割単位の粒度として次の3種類が予め定められる。粒度大では、行数が1000行以上程度である。粒度中では、行数が500~1000行程度である。粒度小では、行数が500行未満程度である。
【0068】
分析部122は、プログラムブロック間のインターラクション、および、プログラムブロックとアクセラレータとのインターラクションを分析する。プログラムブロック間のインターラクションは、各プログラムブロックの実行時における他のプログラムブロックとの前後関係や他のプログラムブロックとの並列実行の可否を示す。
【0069】
プログラムブロックとアクセラレータとのインターラクションは、プログラムブロックからアクセラレータへのアクセスを示す。分析部122は、プログラムブロックとアクセラレータとのインターラクション数をカウントする。具体的には、分析部122は、プログラムブロックに含まれる所定の関数により、該当のアクセラレータが呼び出される回数(コール数)を、該当のプログラムブロックと該当のアクセラレータとのインターラクション数としてカウントする。分析部122は、プログラムブロックとアクセラレータとの組ごとに、インターラクション数を取得する。
【0070】
プログラムブロックとアクセラレータとのインターラクション数が1以上の場合、当該プログラムブロックは、当該アクセラレータとのインターラクションをもつと言える。プログラムブロックとアクセラレータとのインターラクション数が0の場合、当該プログラムブロックは、当該アクセラレータとのインターラクションをもたないと言える。
【0071】
配置先決定部123は、分析部122によってプログラムブロックとアクセラレータとの組ごとに取得されたインターラクション数に基づいて、該当のプログラムブロックの配置先のアクセラレータを決定する。具体的には、あるプログラムブロックが単一のアクセラレータとのインターラクションしかもたない場合、配置先決定部123は、当該プログラムブロックを、該当のアクセラレータの配置先とする。あるプログラムブロックが複数のアクセラレータとのインターラクションをもつ場合、配置先決定部123は、インターラクション数が最多のアクセラレータを、該当のプログラムブロックの配置先とする。あるプログラムブロックが何れのアクセラレータともインターラクションをもたない場合、配置先決定部123は、該当のプログラムブロックをノード200のCPU201に割り当てる。
【0072】
ロジック変換部124は、各プログラムブロックを、配置先決定部123により決定された配置先のアクセラレータで動作するハードウェアロジックに変換する。ロジック変換部124によるロジック変換には、既存の高位合成ツールを利用することができる。既存の高位合成ツールには、例えばVivado HLSやインテルHLSコンパイラなどがある。
【0073】
性能評価部125は、ロジック変換部124により生成されたハードウェアロジックを用いた動作シミュレーションの結果から得られるプログラムブロックごとの性能情報に基づいて、アプリケーションの実行時の性能を評価する。性能評価部125は、複数パターンの分割単位でソースコードを分割した結果に対して、アプリケーションの実行時の性能を評価し、最も良い性能を得られる分割単位を選択する。
【0074】
コンパイル処理部126は、性能評価部125により選択された分割単位でソースコードを分割した場合において各プログラムブロックが配置先のアクセラレータにオフロードされるようにソースコードをコンパイルし、実行可能ファイルを生成する。
【0075】
制御部120は、粒度大、粒度中、粒度小などの複数パターンの分割単位での分割を試し、性能指標が最も良い分割単位を選択してソースコードをコンパイルする。
図6は、ソースコードの例を示す図である。
【0076】
ソースコード111は、記憶部110に記憶される。ソースコード111は、ノード200に実行させるアプリケーションのソースコードをC言語で記述したものである。ソースコード111の各行には、便宜的な行番号が付されている。ソースコード111の例では、1行目~6行目の構造体gmx_many_fftの定義が1つ目のメイン関数の区切りとなる。また、その次の8行目~18行目の関数gmx_fft_init_many_1dの定義が2つ目のメイン関数の区切りとなる。2つ目のメイン関数の区切りにおける8行目の記述は、fft関数のコールに相当する。
【0077】
図7は、ループの記述例を示す図である。
コード111cは、ソースコード111に含まれ得るループの記述例を示す。コード111cは、行列a,bの行列積cの記述例である。a,b,cは、何れもn行n列の正方行列である。コード111cは、for文により繰り返し実行されるループ記述を含む。こうしたループ記述に係る計算は、例えばFPGAなどのアクセラレータが得意とするものであり、アクセラレータにオフロードすることで、効率的に処理可能になる。
【0078】
図8は、プログラムブロック間のインターラクションの例を示す図である。
ソースコード111は、プログラム分割部121により複数のプログラムブロックに分割される。複数のプログラムブロックは、プログラムブロックA,B,C,…を含む。分析部122は、プログラムブロック間のインターラクションとして、プログラムブロックA,B,C,…の順序関係を取得する。例えば、分析部122は、既存の技術を用いて各プログラムブロックに含まれる変数の依存関係などを分析することで、当該順序関係を得ることができる。
【0079】
例えば、シーケンス71は、プログラムブロックAの次にプログラムブロックBが続き、プログラムブロックBの次にプログラムブロックCが続くというように、プログラムブロックA,B,Cを、この順序で直列に実行する場合を示す。また、シーケンス72は、プログラムブロックAの次にプログラムブロックB,Cを並列に実行可能である場合を示す。プログラムブロック間のインターラクションの分析結果は、ソースコード111に対応する計算の実行に要する時間(計算時間)の評価に用いられる。
【0080】
図9は、インターラクション数テーブルの例を示す図である。
インターラクション数テーブル112は、プログラムブロックとアクセラレータとのインターラクション数の分析結果を保持するテーブルである。インターラクション数テーブル112は、分析部122により生成され、記憶部110に格納される。インターラクション数テーブル112は、プログラムブロックID(IDentifier)、ストレージインターラクション数、NWインターラクション数、メモリインターラクション数、FPGAインターラクション数およびGPUインターラクション数の項目を含む。
【0081】
プログラムブロックIDの項目には、プログラムブロックIDが登録される。プログラムブロックIDは、プログラムブロックの識別情報である。
ストレージインターラクション数の項目には、ストレージインターラクション数が登録される。ストレージインターラクション数は、該当のプログラムブロックに基づく、ノード200からストレージ装置400へのコール数に相当する。
【0082】
NWインターラクション数の項目には、NWインターラクション数が登録される。NWインターラクション数は、該当のプログラムブロックに基づく、ノード200からNW装置300へのコール数に相当する。
【0083】
メモリインターラクション数の項目には、メモリインターラクション数が登録される。メモリインターラクション数は、該当のプログラムブロックに基づく、ノード200からメモリ装置500へのコール数に相当する。
【0084】
FPGAインターラクション数の項目には、FPGAインターラクション数が登録される。FPGAインターラクション数は、該当のプログラムブロックに基づく、ノード200からFPGA装置600へのコール数に相当する。
【0085】
GPUインターラクション数の項目には、GPUインターラクション数が登録される。GPUインターラクション数は、該当のプログラムブロックに基づく、ノード200からGPU装置700へのコール数に相当する。
【0086】
あるデバイスに対するインターラクション数は、該当のプログラムブロックから当該デバイスに搭載されたアクセラレータへのアクセス数を示す。例えば、分析部122は、該当のプログラムブロックに含まれる、当該デバイスに対応する所定の関数の呼び出しの回数(コール数)をカウントすることで、当該デバイスに対するインターラクション数を得る。
【0087】
C言語を例に挙げると、デバイスの種類に応じた所定の関数、すなわち、当該デバイスに搭載されたアクセラレータに対応する所定の関数には次のものがある。共有ストレージ(ストレージ装置400)では、例えばftputc関数、ftputs関数およびftprintf関数などのファイルへの書き込みを行う関数である。共有メモリ(メモリ装置500)では、例えばmmap関数などである。NW装置300では、例えばioctl関数、socket関数およびconnect関数などである。GPU装置700では、例えばcudaなどである。FPGA装置600では、例えばフーリエ変換の関数であるfftw関数やGROMACSのgmx_fftライブラリ関数などである。FPGAが得意とする計算の関数には、その他にも
図7で例示した行列積、乗算、積和演算、バレルシフタ、複素数演算および三角関数演算を行うものなどがある。なお、FPGAが得意とする計算の関数は、環境やアプリケーションによって異なるため、これらだけとは限らず他の関数でもよい。
【0088】
例えば、インターラクション数テーブル112は、プログラムブロックID「A」、ストレージインターラクション数「4」、NWインターラクション数「0」、メモリインターラクション数「0」、FPGAインターラクション数「0」、GPUインターラクション数「0」のレコードを有する。このレコードは、プログラムブロックAのストレージインターラクション数が4、NWインターラクション数が0、メモリインターラクション数が0、FPGAインターラクション数が0、GPUインターラクション数が0であることを示す。インターラクション数テーブル112は、プログラムブロックB,Cを含む他のプログラムブロックのレコードも有する。
【0089】
次に、管理サーバ100による処理手順を説明する。
図10は、管理サーバの処理例を示すフローチャートである。
(S10)プログラム分割部121は、所定の分割単位により、ソースコード111を複数のプログラムブロックに分割する。複数のプログラムブロックは、例えばプログラムブロックA,B,C,…を含む。ここで、プログラム分割部121は、ステップS10を実行するたびに、分割単位を粒度大、粒度中、粒度小のように変更する。前述のように、分割単位の各粒度は、1つのプログラムブロックに含めるメイン関数の数やコードの行数などに基づいて予め定められる。
【0090】
(S11)分析部122は、ステップS10で得られたプログラムブロック間のインターラクションを分析する。具体的には、
図8で例示したように、分析部122は、各プログラムブロックの前後関係や、並列実行可能性を分析する。
【0091】
(S12)分析部122は、各プログラムブロックのアクセラレータに対するインターラクションを分析する。具体的には、分析部122は、プログラムブロックの記述に基づいて、アクセラレータが搭載されたデバイスに対応する所定の関数のコール回数を、インターラクション数として取得し、インターラクション数テーブル112に記録する。
【0092】
(S13)配置先決定部123は、分析部122の分析結果であるインターラクション数テーブル112に基づいて、プログラムブロックを配置するアクセラレータを決定する。配置先決定部123による処理の詳細は後述される。
【0093】
(S14)ロジック変換部124は、ロジック変換を行う。具体的には、ロジック変換部124は、既存の高位合成ツールを用いて、プログラムブロックを、配置先のアクセラレータで動作するロジックに変換する。ロジック変換部124の処理の詳細は後述される。また、ロジック変換部124は、変換後のロジックの動作シミュレーションを行い、各プログラムブロックに対応する演算に要する計算時間や消費電力を取得する。
【0094】
(S15)性能評価部125は、ステップS14で得られた計算時間や消費電力を基に、ソースコード111に対応するアプリケーション全体の実行に要する計算時間および消費電力を計算する。例えば、性能評価部125は、ステップS11で分析したプログラムブロック間のインターラクションの分析結果と、各アクセラレータでの各プログラムブロックの計算時間とに基づいてアプリケーション全体の計算時間を算出し得る。具体的には、性能評価部125は、ソースコード111のうち各プログラムブロックの実行順序が直列である箇所については、各プログラムブロックに対応する計算時間を足し合わせる。また、性能評価部125は、ソースコード111のうち2以上のプログラムブロックを並列実行可能な箇所については、当該2以上のプログラムブロックのうちの最も長い計算時間とする。更に、性能評価部125は、各アクセラレータの消費電力およびCPU201の消費電力を合計することで、全体の消費電力を計算する。なお、性能評価部125は、ソースコード111のうちCPU201に割り当てる部分についても、当該部分に対する静的解析、シミュレーションまたは機械学習モデルなどの既存技術を用いて計算時間や消費電力を評価することができる。
【0095】
(S16)性能評価部125は、予め用意された全ての分割単位で性能評価済であるか否かを判定する。全ての分割単位で性能評価済である場合、ステップS17に処理が進む。全ての分割単位で性能評価を行っていない場合、ステップS10に処理が進む。ステップS10では、プログラム分割部121により未処理の分割単位でソースコード111が分割されて以降の手順が実行される。
【0096】
(S17)コンパイル処理部126は、性能評価部125による性能評価の結果が最良である分割単位での各プログラムブロックのアクセラレータ配置を採用してソースコード111のコンパイルを行う。コンパイル処理部126は、ソースコード111に基づいて、実行可能ファイルを生成する。実行可能ファイルは、各アクセラレータと連携した演算をCPU201に実行させる実行可能プログラムと、各アクセラレータを設定するためのハードウェアロジック情報とを含む。ハードウェアロジック情報は、例えば、該当のアクセラレータの回路の設定に用いられる情報である。例えば、ハードウェアロジック情報は、FPGAなどのRTL(Register Transfer Level)記述でもよい。ハードウェアロジック情報は、GPUなどの特定のハードウェアに特化したロジックを示す情報でもよい。そして、管理サーバ100の処理が終了する。
【0097】
なお、ステップS17における性能評価の結果が最良である分割単位の選択基準では、例えば、計算時間および消費電力の両方が最小であるものが最も優先して選択される。計算時間および消費電力の両方が最小であるものがない場合、例えば、計算時間および消費電力のうちの優先する方が最小のものが優先して選択される。ただし、当該選択基準は一例であり、他の選択基準が用いられてもよい。
【0098】
例えば、管理サーバ100は、生成した実行可能ファイルをノード200のCPU201に実行させる。すると、CPU201は、実行可能ファイルに含まれるハードウェアロジック情報により該当のアクセラレータのコンフィギュレーションを行い、当該アクセラレータと連携してアプリケーションの処理を実行する。
【0099】
図11は、配置先アクセラレータの選択例を示すフローチャートである。
配置先アクセラレータの選択はステップS13に相当する。
(S20)配置先決定部123は、インターラクション数テーブル112に基づいて、各プログラムブロックのインターラクション数を取得する。配置先決定部123は、インターラクション数テーブル112に記録されているインターラクション数が全て0でないプログラムブロックを抽出し、当該プログラムブロックごとに、下記のステップS21以降の手順を実行する。
【0100】
(S21)配置先決定部123は、同一プログラムブロックで複数のインターラクション種類があるか否かを判定する。同一プログラムブロックで複数のインターラクション種類がある場合、ステップS22に処理が進む。同一プログラムブロックで複数のインターラクション種類がない場合、ステップS23に処理が進む。ここで、複数のインターラクション種類がある場合とは、インターラクション数テーブル112において、該当のプログラムブロックに対し、インターラクション数が1以上の項目が複数存在する場合に相当する。複数のインターラクション種類がない場合とは、インターラクション数テーブル112において、該当のプログラムブロックに対し、インターラクション数が1以上の項目が1つだけの場合に相当する。
【0101】
(S22)配置先決定部123は、インターラクション数を比較して、インターラクション数が最も多いアクセラレータに該当のプログラムブロックを配置すると決定する。なお、配置先決定部123は、同数の場合、すなわち、最多のインターラクション数となる複数のアクセラレータがある場合、読み出しデータに近い方のアクセラレータに該当のプログラムブロックを配置すると決定する。例えば、配置先決定部123は、NWインターラクション数とメモリインターラクション数とが最多で同数の場合、データに近いメモリアクセラレータ501を優先して配置先に選択する。そして、配置先決定部123は、該当のプログラムブロックに対する処理を終了する。
【0102】
(S23)配置先決定部123は、インターラクション数が1以上である該当のアクセラレータに、プログラムブロックを配置すると決定する。そして、配置先決定部123は、該当のプログラムブロックに対する処理を終了する。
【0103】
なお、配置先決定部123は、インターラクション数テーブル112に記録されているインターラクション数が全て0であるプログラムブロックを、ノード200のCPU201に割り当てる。
【0104】
図12は、ロジック変換の例を示すフローチャートである。
ロジック変換はステップS14に相当する。ロジック変換はアクセラレータごとに行われる。
【0105】
(S30)ロジック変換部124は、該当のアクセラレータを配置先とするプログラムブロックに対してループの抽出を行う。
(S31)ロジック変換部124は、アクセラレータにおけるPE(Processing Element)の再構成を行ことで、該当のプログラムブロックを当該アクセラレータで動作するハードウェアロジックに変換する。例えば、ステップS30で抽出されたループなどの記述がハードウェアロジックに変換される。ロジック変換部124は、当該ハードウェアロジックを示すハードウェアロジック情報を生成する。
【0106】
ロジック変換部124は、プログラムブロックの記述からハードウェアロジックへの変換を、既存の高位合成ツールを用いて行える。
(S32)ロジック変換部124は、ステップS31で生成したハードウェアロジック情報に基づいてアクセラレータの動作のシミュレーションを行い、性能を算出する。ステップS32では、ロジック変換部124は、性能として、例えばプログラムブロックに対応するハードウェアロジックごとの計算時間を求める。
【0107】
(S33)ロジック変換部124は、計算時間が最短であるか否かを判定する。計算時間が最短である場合、ステップS34に処理が進む。計算時間が最短でない場合、ステップS31に処理が進み、PEの再構成からやり直しとなる。ステップS33の計算時間は、該当のアクセラレータにおける総計算時間である。なお、あるアクセラレータに対してステップS33を最初に実行する場合は比較対象の計算時間がないため、ロジック変換部124は、ステップS33の判定を行わずに、ステップS34に処理を進める。
【0108】
(S34)ロジック変換部124は、該当のアクセラレータにおける消費電力を算出する。例えば、ロジック変換部124は、アクセラレータの消費電力のカタログ値と、当該アクセラレータにおける総計算時間とを基に、消費電力を算出してもよい。また、ロジック変換部124は、ハードウェアロジック情報の入力に対して消費電力を出力する機械学習モデルを用いて、消費電力を算出してもよい。例えば、消費電力の初期値については、消費電力のカタログ値に基づいて算出されてもよく、稼働ログにより修正、学習しながら消費電力のデータが蓄積されてもよい。
【0109】
(S35)ロジック変換部124は、消費電力が最小であるか否かを判定する。消費電力が最小である場合、該当のアクセラレータに対するロジック変換が終了する。消費電力が最小でない場合、ステップS31に処理が進み、PEの再構成からやり直しとなる。なお、あるアクセラレータに対してステップS35を最初に実行する場合は比較対象の消費電力がないため、ロジック変換部124は、ステップS35の判定を行わずに、ステップS31に処理を進める。
【0110】
なお、ステップS31~S35の手順を所定回数繰り返しても最終的なハードウェアロジックの変換結果を得られない場合もある。この場合、ロジック変換部124は、例えば、計算時間および消費電力が何れも目標値より良い変換結果のうち、計算時間および消費電力の優先する方が最も良い変換結果を、最終的な変換結果としてもよい。
【0111】
管理サーバ100による処理手順の説明は以上となる。
ところで、アプリケーションを記述するプログラムをアクセラレータのロジックに変換する技術は高位合成(CGRA)と呼ばれる。CGRAでは、関数の繰り返し数(ループ抽出)や、マイクロアーキテクチャ的な配線の最適化の検討などが行われる。一般的にCGRAの再構成は、その粒度(分割単位)を関数単位などを小さくすることによって、その関数の繰り返しとマイクロアーキテクチャを考慮して配置する。これにより、例えばCPUだけで行っていた処理の繰り返し処理部分がアクセラレータに配置され、マイクロアーキテクチャ的な効率化によって計算速度の向上やエネルギー効率の向上が図られる。また、例えばCGRAの再構成をコンパイル中に行うJust in Time高位合成では、コンパイル時間の短縮やループのマッピングによる性能向上がなされている。
【0112】
しかしながら、ヘテロジニアスな環境においては、CGRA対象のアクセラレータは様々な位置に配置されている。例えば、FPGAやGPUといったアクセラレータはノード200のチップ内だけにとどまらず、インターコネクトを介した外部のストレージ近傍、ネットワーク近傍など様々な位置に置かれている。このため、既存の高位合成の技術だけでは、特定のアクセラレータについて局所的に最適化できても全体最適化は難しいといった問題がある。
【0113】
このように、再構成の粒度を細かくした場合、コンパイルのし易さや、局所的な最適化は達成されるが、全体として最適化されていない場合がある。これは、コア近傍、メモリ近傍、ネットワーク近傍、ストレージ近傍といったように、アクセラレータ(CGRAの対象)の場所が散在し、それぞれのインターラクションが影響するためである。
【0114】
そこで、管理サーバ100は、プログラムブロックにおける各アクセラレータとのインターラクションとを考慮して、インターラクションの多いアクセラレータに優先して合成することによって、局所的な最適化だけでなく、全体最適化を図れる。すなわち、複数のアクセラレータを含む系(システム)全体で最適化したCGRA変換ができる。
【0115】
具体的には、管理サーバ100は、ソースコード111の各プログラムブロックを、当該プログラムブロックにおいてアクセス回数が多いアクセラレータに優先的に配置する。このため、当該プログラムブロックに係る処理の実行時のCPU201とアクセラレータとの間のデータ転送が低減される。その結果、当該データ転送に係るオーバーヘッドが削減される。こうして、管理サーバ100は、ノード200およびアクセラレータの連携によるアプリケーション実行時の処理性能の向上を図れる。
【0116】
また、管理サーバ100は、計算時間や消費電力を考慮して最適な分割単位を選択することで、システム全体での消費電力を低減しながら、最適な実行速度でプログラムを実行できるようになる。
【0117】
以上説明したように、管理サーバ100は次の処理を実行する。
制御部120は、ソースプログラムを複数のプログラムブロックに分割する。制御部120は、複数のプログラムブロックそれぞれによる複数のアクセラレータそれぞれへのアクセス回数の分析の結果を取得する。制御部120は、当該分析の結果に基づいて、複数のプログラムブロックのうちの第1プログラムブロックと、複数のアクセラレータのうちの、第1プログラムブロックの配置先のアクセラレータとを選択する。制御部120は、第1プログラムブロックを配置先のアクセラレータで動作するハードウェアロジックに変換する。
【0118】
これにより、管理サーバ100は、適切なアクセラレータに処理を割り当てることができる。例えば、アクセラレータに配置したプログラムブロックに係る処理の実行時のCPU201とアクセラレータとの間のデータ転送が低減される。その結果、当該データ転送に係るオーバーヘッドが削減される。こうして、管理サーバ100は、ノード200およびアクセラレータの連携によるアプリケーション実行時の処理性能の向上を図れる。なお、ソースコード111は、ソースプログラムの一例である。ストレージインターラクション数、NWインターラクション数、メモリインターラクション数、FPGAインターラクション数およびGPUインターラクション数は、複数のアクセラレータそれぞれへのアクセス回数の一例である。
【0119】
また、制御部120は、配置先のアクセラレータの選択では、複数のアクセラレータのうち、第1プログラムブロックによるアクセス回数が最も多いアクセラレータを配置先のアクセラレータとして選択してもよい。これにより、管理サーバ100は、アクセラレータに配置したプログラムブロックに係る処理の実行時のCPU201とアクセラレータとの間のデータ転送を効率的に低減できる。
【0120】
また、複数のアクセラレータは、メモリ装置500に設けられる第1アクセラレータを含んでもよい。制御部120は、配置先のアクセラレータの選択では、第1プログラムブロックによるアクセス回数が同じである2以上のアクセラレータが第1アクセラレータを含む場合、第1アクセラレータを優先的に配置先のアクセラレータとして選択してもよい。これにより、管理サーバ100は、アクセラレータに配置したプログラムブロックに係る処理の実行時のCPU201とアクセラレータとの間のデータ転送を効率的に低減できる。なお、メモリアクセラレータ501は、第1アクセラレータの一例である。
【0121】
また、制御部120は、複数のプログラムブロックそれぞれによる複数のアクセラレータそれぞれへのアクセス回数の分析を行ってもよい。制御部120は、当該分析では複数のプログラムブロックに含まれる、複数のアクセラレータそれぞれに対応する関数の呼び出し回数に基づいて、アクセス回数を取得してもよい。これにより、管理サーバ100は、複数のプログラムブロックそれぞれによる複数のアクセラレータそれぞれへのアクセス回数を効率的に取得できる。
【0122】
なお、複数のアクセラレータそれぞれに対応する関数は、当該アクセラレータが搭載されるデバイス、または、デバイスの種類に応じた関数でもよい。NW装置300、ストレージ装置400、メモリ装置500、FPGA装置600およびGPU装置700は、アクセラレータが搭載されるデバイスの一例である。すなわち、複数のアクセラレータそれぞれは、NW装置300、ストレージ装置400、メモリ装置500、FPGA装置600およびGPU装置700の何れかに搭載されてもよい。
【0123】
また、制御部120は、第1プログラムブロックの選択では、複数のアクセラレータのうちの少なくとも1つのアクセラレータへのアクセス回数が1以上であるプログラムブロックを、第1プログラムブロックとして選択してもよい。これにより、管理サーバ100は、何れかのアクセラレータに割り当てるプログラムブロックを適切に特定できる。
【0124】
また、制御部120は、第1プログラムブロックの選択では、複数の第1プログラムブロックを選択してもよい。制御部120は、配置先のアクセラレータの選択では、第1プログラムブロックごとに、配置先のアクセラレータを選択してもよい。これにより、管理サーバ100は、適切なアクセラレータに処理を割り当てることができる。
【0125】
また、制御部120は、複数の分割単位それぞれを用いてソースプログラムを複数のプログラムブロックに分割してもよい。制御部120は、複数のアクセラレータを有するシステムにおいて、複数のプログラムブロックの少なくとも一部の処理を、複数のアクセラレータの少なくとも一部に実行させる場合のシステムの性能を示す指標値を分割単位ごとに取得してもよい。制御部120は、分割単位ごとの指標値に基づいて、複数の分割単位のうちの何れかの分割単位を選択してもよい。
【0126】
より具体的には、制御部120は、当該システムの性能を示す当該指標値を、複数のプログラムブロックの実行順序の分析の結果とハードウェアロジックとに基づき、複数のプログラムブロックの分割の粒度を示す複数の分割単位それぞれに対して取得してもよい。そして、制御部120は、分割単位ごとに取得した当該指標値に基づいて、複数の分割単位のうちの何れかの分割単位を選択してもよい。
【0127】
これにより、管理サーバ100は、システム全体としての一層の性能向上を図りながら、プログラムを実行可能にできる。情報処理システム20や第2の実施の形態の情報処理システムは、上記システムの一例である。複数のプログラムブロックの実行順序の分析の結果は、プログラムブロック間の実行時における前後関係や2以上のプログラムブロックの並列実行可能性などの情報を含んでもよい。
【0128】
また、制御部120は、システムの性能を示す指標値の取得では、ソースプログラムに対応する演算の実行に要する計算時間および消費電力を取得してもよい。これにより、管理サーバ100は、システム全体での演算の実行速度の高速化および消費電力の低減を図りながら、適切なアクセラレータに処理を割り当てることができる。
【0129】
また、制御部120は、プログラムブロックを変換することで得られたハードウェアロジックに基づいて、複数のアクセラレータを有するシステムによりソースプログラムに対応する演算を実行させる実行可能ファイルを生成してもよい。これにより、管理サーバ100は、当該システムに実行可能ファイルを実行させることで、当該システムによりアクセラレータを用いて効率的に演算を実行させることができる。
【0130】
なお、第1の実施の形態の情報処理は、処理部12にプログラムを実行させることで実現できる。また、第2の実施の形態の情報処理は、CPU101にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体113に記録できる。
【0131】
例えば、プログラムを記録した記録媒体113を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体113に記録されたプログラムまたは他のコンピュータから受信したプログラムを、RAM102やHDD103などの記憶装置に格納し(インストールし)、当該記憶装置からプログラムを読み込んで実行してもよい。
【符号の説明】
【0132】
10 情報処理装置
11 記憶部
12 処理部
20 情報処理システム
21 ノード
22,23,24 アクセラレータ
30 ソースプログラム
31,32 プログラムブロック
40 テーブル
51,52 ロジック