IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社Preferred Networksの特許一覧

特開2023-63815コンパイラ装置、命令生成方法、プログラム、コンパイル方法及びコンパイラプログラム
<>
  • 特開-コンパイラ装置、命令生成方法、プログラム、コンパイル方法及びコンパイラプログラム 図1
  • 特開-コンパイラ装置、命令生成方法、プログラム、コンパイル方法及びコンパイラプログラム 図2
  • 特開-コンパイラ装置、命令生成方法、プログラム、コンパイル方法及びコンパイラプログラム 図3
  • 特開-コンパイラ装置、命令生成方法、プログラム、コンパイル方法及びコンパイラプログラム 図4
  • 特開-コンパイラ装置、命令生成方法、プログラム、コンパイル方法及びコンパイラプログラム 図5
  • 特開-コンパイラ装置、命令生成方法、プログラム、コンパイル方法及びコンパイラプログラム 図6
  • 特開-コンパイラ装置、命令生成方法、プログラム、コンパイル方法及びコンパイラプログラム 図7
  • 特開-コンパイラ装置、命令生成方法、プログラム、コンパイル方法及びコンパイラプログラム 図8
  • 特開-コンパイラ装置、命令生成方法、プログラム、コンパイル方法及びコンパイラプログラム 図9
  • 特開-コンパイラ装置、命令生成方法、プログラム、コンパイル方法及びコンパイラプログラム 図10
  • 特開-コンパイラ装置、命令生成方法、プログラム、コンパイル方法及びコンパイラプログラム 図11
  • 特開-コンパイラ装置、命令生成方法、プログラム、コンパイル方法及びコンパイラプログラム 図12
  • 特開-コンパイラ装置、命令生成方法、プログラム、コンパイル方法及びコンパイラプログラム 図13
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023063815
(43)【公開日】2023-05-10
(54)【発明の名称】コンパイラ装置、命令生成方法、プログラム、コンパイル方法及びコンパイラプログラム
(51)【国際特許分類】
   G06F 8/41 20180101AFI20230428BHJP
   G06F 9/318 20180101ALI20230428BHJP
【FI】
G06F8/41 130
G06F9/318 Z
【審査請求】未請求
【請求項の数】15
【出願形態】OL
(21)【出願番号】P 2021173842
(22)【出願日】2021-10-25
(71)【出願人】
【識別番号】515130201
【氏名又は名称】株式会社Preferred Networks
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(72)【発明者】
【氏名】村井 翔悟
(72)【発明者】
【氏名】浜地 慎一郎
(72)【発明者】
【氏名】立木 泰樹
【テーマコード(参考)】
5B033
5B081
【Fターム(参考)】
5B033BB02
5B081CC24
(57)【要約】
【課題】演算処理装置に実行させる命令をまとめることで、演算処理装置の処理性能を向上する。
【解決手段】コンパイラ装置は、演算処理装置に実行させる命令列を生成するコンパイラ装置であって、第1の処理を実行する第1の命令列と、前記第1の処理後に実行される第2の処理を実行する第2の命令列とを受け、前記第1の命令列に含まれる複数の第1の命令及び前記第2の命令列に含まれる複数の第2の命令のうち、並列に実行可能な第1の命令及び第2の命令をまとめて第3の命令を生成し、前記第3の命令と、前記第3の命令にまとめた第1の命令及び第2の命令を除く第1の命令及び第2の命令とを連結して第3の命令列を生成する。
【選択図】図7
【特許請求の範囲】
【請求項1】
演算処理装置に実行させる命令列を生成するコンパイラ装置であって、
第1の処理を実行する第1の命令列と、前記第1の処理後に実行される第2の処理を実行する第2の命令列とを受け、
前記第1の命令列に含まれる複数の第1の命令及び前記第2の命令列に含まれる複数の第2の命令のうち、並列に実行可能な第1の命令及び第2の命令をまとめて第3の命令を生成し、
前記第3の命令と、前記第3の命令にまとめた第1の命令及び第2の命令を除く第1の命令及び第2の命令とを連結して第3の命令列を生成する
コンパイラ装置。
【請求項2】
階層別のメモリを有する前記演算処理装置であって外部メモリが接続される前記演算処理装置に対する命令列を生成する前記コンパイラ装置は、前記演算処理装置内の隣接する2階層のメモリ間でデータを転送する前記第1の命令、及び、前記演算処理装置と前記外部メモリとの間でデータを転送する前記第2の命令をまとめて第3の命令を生成する
請求項1に記載のコンパイラ装置。
【請求項3】
前記第3の命令列による処理結果が、前記第1の命令列及び前記第2の命令列を順次実行する場合の処理結果と等価となるように前記第3の命令列を生成する
請求項1又は請求項2に記載のコンパイラ装置。
【請求項4】
前記第1の命令列中の着目する第1の命令と、前記第2の命令列中の着目する第2の命令とを第3の命令にまとめた場合に処理結果が、命令をまとめない場合の処理結果と等価になるか否かを判定し、
処理結果が等価になる場合、前記着目する第1の命令と前記着目する第2の命令とをまとめて第3の命令を生成する
請求項3に記載のコンパイラ装置。
【請求項5】
前記第1の命令列による処理と前記第2の命令列による処理との間にデータの依存関係があり、第3の命令列の生成によりデータの依存関係が破綻する場合、前記第3の命令列の生成を抑止する
請求項4に記載のコンパイラ装置。
【請求項6】
前記第3の命令列の実行中に使用するメモリの容量が、前記演算処理装置が使用するメモリ容量を超える場合、前記第3の命令列の生成を抑止する
請求項4又は請求項5に記載のコンパイラ装置。
【請求項7】
前記第3の命令にまとめた第1の命令及び第2の命令の一方は、前記演算処理装置が有する演算器に演算を実行させる演算命令であり、前記第3の命令にまとめた第1の命令及び第2の命令の他方は、前記演算処理装置が有するメモリに対するデータ転送命令である
請求項1乃至請求項6のいずれか1項に記載のコンパイラ装置。
【請求項8】
前記第1の命令列に含まれる第1のデータ転送命令と、前記第2の命令列に含まれる第2のデータ転送命令とをまとめて前記第3の命令を生成する
請求項7に記載のコンパイラ装置。
【請求項9】
前記演算処理装置が使用するメモリは、階層が異なる複数のメモリを含み、
前記データ転送命令は、階層が異なるメモリ間でのデータ転送毎に用意される
請求項7又は請求項8のいずれか1項に記載のコンパイラ装置。
【請求項10】
前記階層が異なる複数のメモリのいずれかは、前記演算処理装置が演算の実行に使用するデータを保持するレジスタを含む
請求項9に記載のコンパイラ装置。
【請求項11】
前記第1の命令と、前記第2の命令と、前記第3の命令と、のそれぞれは、前記演算処理装置が有する異なる種類の処理を並列に実行可能な複数の処理ユニットに対する複数の異なる命令を含む
請求項1ないし請求項10のいずれか1項に記載のコンパイラ装置。
【請求項12】
請求項1ないし請求項11のいずれか1項に記載のコンパイラ装置を用いて前記第3の命令列を生成する命令生成方法。
【請求項13】
請求項1ないし請求項11のいずれか1項に記載のコンパイラ装置を用いて生成される前記第3の命令列を含む、前記演算処理装置によって実行されるプログラム。
【請求項14】
演算処理装置に実行させる命令列を生成するコンパイル方法であって、
第1の処理を実行する第1の命令列と、前記第1の処理後に実行される第2の処理を実行する第2の命令列とを受け、
前記第1の命令列に含まれる複数の第1の命令及び前記第2の命令列に含まれる複数の第2の命令のうち、並列に実行可能な第1の命令及び第2の命令をまとめて第3の命令を生成し、
前記第3の命令と、前記第3の命令にまとめた第1の命令及び第2の命令を除く第1の命令及び第2の命令とを連結して第3の命令列を生成する
コンパイル方法。
【請求項15】
演算処理装置に実行させる命令列を生成するコンパイラプログラムであって、
第1の処理を実行する第1の命令列と、前記第1の処理後に実行される第2の処理を実行する第2の命令列とを受け、
前記第1の命令列に含まれる複数の第1の命令及び前記第2の命令列に含まれる複数の第2の命令のうち、並列に実行可能な第1の命令及び第2の命令をまとめて第3の命令を生成し、
前記第3の命令と、前記第3の命令にまとめた第1の命令及び第2の命令を除く第1の命令及び第2の命令とを連結して第3の命令列を生成する
処理をコンピュータに実行させるコンパイラプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、コンパイラ装置、命令生成方法、プログラム、コンパイル方法及びコンパイラプログラムに関する。
【背景技術】
【0002】
一般に、深層学習は、GPU(Graphics Processing Unit)等の多数のコアを内蔵したプロセッサを使用して実行される。近時、深層学習での計算速度を向上するため、深層学習に特化したプロセッサ(アクセラレータ)が開発されている。
【0003】
深層学習に特化したプロセッサのアーキテクチャ(演算器の数、演算器を含むブロックの数、ブロックの階層数及び命令等)は、GPU等の汎用品のアーキテクチャと異なる場合がある。このため、深層学習に特化したプロセッサを効率よく動作させるためには、プロセッサに実行させる命令を適切に生成するコンパイラ装置が重要である。
【発明の概要】
【発明が解決しようとする課題】
【0004】
本開示では、演算処理装置に実行させる命令をまとめることで、演算処理装置の処理性能を向上する。
【課題を解決するための手段】
【0005】
本発明の実施形態のコンパイラ装置は、演算処理装置に実行させる命令列を生成するコンパイラ装置であって、第1の処理を実行する第1の命令列と、前記第1の処理後に実行される第2の処理を実行する第2の命令列とを受け、前記第1の命令列に含まれる複数の第1の命令及び前記第2の命令列に含まれる複数の第2の命令のうち、並列に実行可能な第1の命令及び第2の命令をまとめて第3の命令を生成し、前記第3の命令と、前記第3の命令にまとめた第1の命令及び第2の命令を除く第1の命令及び第2の命令とを連結して第3の命令列を生成する。
【図面の簡単な説明】
【0006】
図1】本発明の一実施形態におけるコンパイラ装置の一例を示す機能ブロック図である。
図2図1のコンパイラ装置により生成されるプログラムを実行する演算処理装置の一例を示すブロック図である。
図3図2の演算処理装置が搭載されるプロセッサ及びホストを含むシステムの一例を示すブロック図である。
図4図2の演算処理装置の動作の例を示す説明図である。
図5図2の演算処理装置の動作の別の例を示す説明図である。
図6図1の命令マージ部を動作させない場合と動作させた場合とでコンパイラ装置が生成する命令コードによる処理の例を示す説明図である。
図7図1の命令マージ部により命令をマージする例を示す説明図である。
図8】2つの命令をマージする例を示す説明図である。
図9】2つの命令をマージする別の例を示す説明図である。
図10】データの依存関係により命令をマージできない例を示す説明図である。
図11】メモリ不足により命令をマージできない例を示す説明図である。
図12】別の実施形態のコンパイラ装置において2つの命令をマージする例を示す説明図である。
図13図1に示したコンパイラ装置のハードウェア構成の例を示すブロック図である。
【発明を実施するための形態】
【0007】
以下、本発明の実施形態について、図面を参照しながら詳細に説明する。
【0008】
図1は、本発明の一実施形態におけるコンパイラ装置の一例を示す機能ブロック図である。例えば、図1に示すコンパイラ装置10は、サーバ等の情報処理装置(コンピュータ)が内蔵するCPU(Central Processing Unit)等のプロセッサがコンパイラプログラムを実行することにより実現される。そして、コンパイラ装置10は、コンパイラプログラムを実行することにより、図2に示す演算処理装置100が実行する命令コードを生成する。コンパイラ装置10は、計算グラフ生成部11、第1命令コード生成部12、演算グラフ生成部13、第2命令コード生成部14、命令マージ部15及びファイナライズ部16を有する。
【0009】
計算グラフ生成部11は、例えば、深層学習用の汎用のライブラリ(フレームワーク)を使用して生成された学習モデル(例えば、ソースコード)に基づいて計算グラフを生成する。計算グラフとは、畳み込み演算、バッチノーマライゼーション、活性化関数演算などの深層学習でよく使われる計算処理の組み合わせとして学習モデルを表現するとき、計算間にどのような依存関係があるか(ある計算の入力は、どの計算の出力ないしモデル全体の入力から与えられるか、など)を表すものである。第1命令コード生成部12は、計算グラフ生成部11が生成する計算グラフを使用して抽象化レベルの命令コードを生成する。ここで、抽象化レベルの命令コードは、例えば、計算機に搭載されるプロセッサでは実行できない高水準言語で記述されてもよい。
【0010】
第1命令コード生成部12は、学習モデルに基づく計算グラフを抽象化レベルの命令コードを含む1つの命令コード列に変換するのではなく、基本的操作のレベルで処理の実行順を決め、基本的操作毎に命令コードを生成する。ここで、基本的操作は、例えば、畳み込み層又はプーリング層等のレイヤの処理、ReLU(Rectified Linear Unit)関数等の処理又はデータ転送等の処理のいずれかを含む。
【0011】
演算グラフ生成部13は、第1命令コード生成部12が生成する命令コードに基づいて演算グラフを生成する。演算グラフとは、計算グラフの計算処理を演算処理装置100が直接実行できる演算の組み合わせ(例えば、行列積演算、加算演算)で表現するとき、演算間にどのような依存関係があるかを表すものである。第2命令コード生成部14は、演算グラフ生成部13が生成する演算グラフに基づいて、機械語レベルの命令コードを生成する。例えば、第2命令コード生成部14は、ディープニューラルネットワークのレイヤ毎に、複数の命令コードを含む命令コード列を生成する。第2命令コード生成部14は、命令コードを生成するときに、命令コードの実行順を決める命令スケジューリングと、命令コードの実行に使用するメモリ領域の割り当てを決定するメモリアロケーティングを実施してもよい。
【0012】
命令マージ部15は、第2命令コード生成部14が生成する複数の命令コード列に含まれる命令のうち、重複して実行可能な命令を検索し、重複して実行可能な命令をマージするマージ処理を実施する。命令マージ部15は、第2命令コード生成部14が生成する複数の命令コード列に含まれる一部の命令をマージして、機械語レベルの1つの命令コード列を生成する。
【0013】
ファイナライズ部16は、命令マージ部15が生成する命令コード列をファイナライズし、プロセッサにより直接実行可能な機械語の命令コード列を出力する。ファイナライズされた命令コード列は、例えば、プロセッサにより実行される深層学習用のプログラムである。以下の説明では、命令コードは、命令とも称され、命令コード列は、命令列とも称される。
【0014】
図2は、図1のコンパイラ装置10により生成されるプログラムを実行する演算処理装置の一例を示すブロック図である。例えば、図1に示す演算処理装置100は、深層学習を実行するアクセラレータとして機能してもよい。演算処理装置100は、チップの形態でもよく、CSP(Chip Size Package)等のパッケージの形態でもよい。
【0015】
演算処理装置100は、階層化された複数の演算ユニット及び複数のメモリを有する。例えば、演算処理装置100は、所定数の第2階層ブロックBLK2を有する。各第2階層ブロックBLK2は、複数の第1階層ブロックBLK1及び当該複数の第1階層ブロックBLK1に共有されるメモリMEM2を有する。各第1階層ブロックBLK1は、複数の演算ユニットOPU及び当該複数の演算ユニットOPUに共有されるメモリMEM1を有する。このように階層化された演算ユニットOPU、第1階層ブロックBLK1、第2階層ブロックBLK2の各々は、発行された命令に基づいて処理を実行する処理ユニットの一例である。演算処理装置100は、各種のデータ転送命令を実行することで、階層化されたブロック間でデータ転送を効率的に実行可能である。
【0016】
図2に示す例では、演算処理装置100は、4個の第2階層ブロックBLK2を有する。各第2階層ブロックBLK2は、8個の第1階層ブロックBLK1を有する。第1階層ブロックBLK1は、16個の演算ユニットOPUを有する。しかしながら、演算処理装置100が有する第2階層ブロックBLK2の数、各第2階層ブロックBLK2に搭載される第1階層ブロックBLK1の数、及び各第1階層ブロックBLK1に搭載される演算ユニットOPUの数は、図1に限定されない。但し、演算処理装置100に搭載される第2階層ブロックBLK2の数、各第2階層ブロックBLK2に搭載される第1階層ブロックBLK1の数、及び各第1階層ブロックBLK1に搭載される演算ユニットOPUの数は、それぞれ2のn乗個(nは1以上の整数)であることが好ましい。
【0017】
演算ユニットOPUは、第0階層のメモリとしてメモリMEM0を有する。第1階層ブロックBLK1は、第1階層のメモリとしてメモリMEM1を有し、第2階層ブロックBLK2は、第2階層のメモリとしてメモリMEM2を有する。メモリMEM1、MEM2の種類は、特に限定されず、演算処理装置100に求められる性能に応じて適宜選択して良い。例えば、この実施形態では、演算ユニットOPU内のメモリMEM0とメモリMEM1との間でデータを転送する第1データ転送命令、及び、メモリMEM1とメモリMEM2との間でデータを転送する第2データ転送命令が用意されている。すなわち、隣接する2階層のメモリMEM2間でのデータ転送命令が用意されている。また、メモリMEM2と図3に第3階層のメモリとして示されるメモリMEM3(演算処理装置100外のメモリ)との間で、データを転送する第3データ転送命令が用意されている。すなわち、演算処理装置100と演算処理装置100外のメモリMEM3との間でのデータ転送命令が用意されている。このように、演算処理装置100は、互いに隣接する2つのメモリ階層間ごとにデータ転送命令を実行可能である。
【0018】
例えば、演算処理装置100は、第1データ転送命令の実行により、演算処理装置100内の全ての第1階層ブロックBLK1の各々において、演算ユニットOPU内のメモリMEM0とメモリMEM1との間でデータを転送する。演算処理装置100は、第2データ転送命令の実行により、演算処理装置100内の全ての第2階層ブロックBLK2の各々において、メモリMEM1、MEM2間でデータを転送する。演算処理装置100は、第3データ転送命令の実行により、演算処理装置100内の全ての第2階層ブロックBLK2の各々において、メモリMEM2とメモリMEM3(図3)との間でデータを転送する。
【0019】
各データ転送命令は、1つの命令により複数のデータ転送を実行するSIMD(Single Instruction Multiple Data)命令である。なお、上書きしたくないデータの消失を抑止するために、演算処理装置100は、一部の要素間でのデータ転送をマスクする機能を有してもよい。
【0020】
各演算ユニットOPUは、各種演算を実行する演算器EX(図3)を有する。演算器EXは、例えば異なる種類の演算(例えば行列積演算や加算演算)をそれぞれ行う複数の演算要素を含んで良い。
【0021】
演算処理装置100が実行する各種演算命令は、1つの命令により複数の演算を実行するSIMD命令である。そして、この実施形態では、演算処理装置100は、1つの演算命令に基づいて、演算処理装置100内の全ての演算器EXに演算を並列(同時を含む)に実行させることができる。
【0022】
ここで、通常のSIMDプロセッサが実行するSIMD演算の並列度は、SIMDレジスタに割り当てられるレジスタの数に依存する。一方、演算処理装置100によるSIMD演算の並列度は、演算処理装置100内の演算器EXの数に依存する。したがって、演算処理装置100は、巨大なSIMDプロセッサとして動作可能である。
【0023】
異なる階層のデータ転送命令及び演算命令は、リソースが競合しない場合、並列に実行可能である。このため、図1のコンパイラ装置10は、リソースが競合しない複数の命令を含む命令群を生成可能である。コンパイラ装置10が生成する命令群については、図6から図11で説明される。
【0024】
図3は、図2の演算処理装置100が搭載されるプロセッサ及びホストを含むシステムの一例を示すブロック図である。図3に示すプロセッサ200は、相互に接続された複数の演算処理装置100及びメモリMEM3を有する。例えば、プロセッサ200は、複数の演算処理装置100及びメモリMEM3が搭載された電子回路基板の形態を有してもよい。複数の演算処理装置100は、マルチチップパッケージに搭載されてもよい。メモリMEM3の種類は、特に限定されず、演算処理装置100に求められる性能に応じて適宜選択して良い。
【0025】
図3では、プロセッサ200は、4個の演算処理装置100を有するが、演算処理装置100の数は、4個に限定されず、1個以上であればよい。メモリMEM3は、各演算処理装置100に対応して設けられてもよい。複数の演算処理装置100を有するプロセッサ200は、1つの演算処理装置として動作する。
【0026】
各演算処理装置100において、各第2階層ブロックBLK2のメモリMEM2は、メモリMEM3と、第2階層ブロックBLK2内の各第1階層ブロックBLK1のメモリMEM1と、に接続され、データを相互に転送可能である。
【0027】
各第1階層ブロックBLK1のメモリMEM1は、第1階層ブロックBLK1内の各演算ユニットOPU内のメモリMEM0に接続され、データを相互に転送可能である。各メモリMEM1からメモリMEM0には、データ転送命令及び演算命令が転送されてもよい。演算ユニットOPU内の演算器EXは当該演算ユニットOPU内のメモリMEM0を用いて各種演算を行う。
【0028】
ホストメモリHOSTMとメモリMEM3とは、例えば、PCIe(Peripheral Component Interconnect express)インタフェースを介してデータ及び命令等の情報を送受信してもよい。また、ホストメモリHOSTMとメモリMEM3との情報の転送は、DMA(Direct Memory Access)により実行されてもよい。
【0029】
各演算処理装置100は、ホスト300から受信する演算命令に基づいて、演算処理を実行し、ホスト300から受信するデータ転送命令に基づいて、データ転送処理を実行する。ホスト300から演算処理装置100に送信される各種の命令コードを含むプログラムは、図1のコンパイラ装置10により生成され、ホスト300内のホストメモリHOSTMに格納される。
【0030】
図4及び図5は、図2の演算処理装置100の動作の例を示す説明図である。図4及び図5に示す動作は、演算処理装置100がデータ転送命令及び演算命令のうちの複数を並列に実行することで実現される。図4及び図5において、太枠で示す要素は、データ転送又は演算の実行に使用されるリソースを示す。また、太枠で示す要素間を結ぶ矢印は、データの転送方向を示す。
【0031】
なお、メモリMEM2とメモリMEM3との間のデータ転送に掛かるサイクル数は、メモリMEM1とメモリMEM2との間のデータ転送に掛かるサイクル数や、メモリMEM1と演算ユニットOPU内のメモリMEM0との間のデータ転送に係るサイクル数に比べて多い。また、演算器EXによる各種演算の実行サイクルは異なりうる。しかしながら、以下の説明では、データ転送処理及び演算処理の実行サイクルの少なくとも一部のサイクルが重複する場合、処理が並列(同時を含む)に実行されるものとする。
【0032】
図4(A)では、演算器EXは、複数のメモリMEM0にそれぞれ保持されたデータを使用して演算を並列に実行する演算命令を実行する。また、演算処理装置100は、メモリMEM3からメモリMEM2にデータを転送するデータ転送命令を、演算命令と並列に実行する。
【0033】
図4(A)では、使用するリソースが異なる演算命令及びデータ転送命令は、並列に実行可能である。コンパイラ装置10は、図4(A)に示すように、リソースが競合しないと判定した場合、演算命令とデータ転送命令とを並列に実行可能な1つの命令群を生成する。
【0034】
図4(B)では、演算器EXは、複数のメモリMEM0にそれぞれ保持されたデータを使用して演算を並列に実行する演算命令を実行する。また、演算処理装置100は、演算を実行する演算器EXを含む演算ユニットOPU内のメモリMEM0のそれぞれにメモリMEM1からデータを並列に転送する(書き込む)データ転送命令を、演算命令と並列に実行する。なお、ここでは、各メモリMEM0において、上記の演算及びデータ転送に関わるユニット(リソース)は互いに競合しないものとする。
【0035】
図4(B)では、演算に関わるユニットと、データ転送に関わるユニットとは競合しないため、演算命令及びデータ転送命令は、並列に実行可能である。一方、演算に関わるユニットと、データ転送に関わるユニットとが競合する場合、演算命令及びデータ転送命令は、並列に実行できないため、逐次に実行される。
【0036】
コンパイラ装置10は、図4(B)に示すように、リソースが競合しないと判定した場合、演算命令とデータ転送命令とを並列に実行可能な1つの命令群を生成する。一方、コンパイラ装置10は、リソースが競合すると判定した場合、演算命令とデータ転送命令とを逐次に実行する2つの命令群を生成する。
【0037】
図4(C)では、演算器EXは、複数のメモリMEM0にそれぞれ保持されたデータを使用して演算を並列に実行する演算命令を実行する。また、演算処理装置100は、演算を実行する演算器EXを含む演算ユニットOPU内のメモリMEM0からメモリMEM1内の異なる領域にデータを並列に転送するデータ転送命令を、演算命令と並列に実行する。なお、ここでは、各メモリMEM0において、上記の演算およびデータ転送に関わるユニット(リソース)は互いに競合しないものとする。さらに、演算処理装置100は、メモリMEM2からメモリMEM3にデータを転送するデータ転送命令を、演算命令と並列に実行する。
【0038】
図4(C)では、演算器EXでの演算と2つのデータ転送に使用されるリソースは競合しないため、コンパイラ装置10は、1つの演算命令と2つのデータ転送命令とを並列に実行可能な1つの命令群を生成する。一方、コンパイラ装置10は、演算に関わるリソースとメモリMEM1へのデータ転送に関わるリソースとが競合する場合、演算命令を単独で生成し、2つのデータ転送命令を並列に実行可能な1つの命令群を生成する。
【0039】
図5(D)では、演算処理装置100は、演算ユニットOPU内の複数のメモリMEM0からメモリMEM1内にデータを転送するデータ転送命令を実行する。また、演算処理装置100は、メモリMEM2からメモリMEM3にデータを転送するデータ転送命令を、メモリMEM0からメモリMEM1へのデータ転送命令と並列に実行する。
【0040】
図5(D)では、2つのデータ転送は競合しないため、並列に実行可能である。このため、コンパイラ装置10は、2つのデータ転送命令を並列に実行可能な1つの命令群を生成する。なお、2つのデータ転送が競合するか否かは、演算処理装置100のアーキテクチャに依存し、コンパイラ装置10は、このアーキテクチャを考慮して2つのデータ転送が競合するか否かを判定してよい。本実施形態のコンパイラ装置10は、複数のデータ転送命令のデータの転送先が同じ場合、データ転送が競合していると判定する。
【0041】
図5(E)では、演算器EXの第1及び第2の演算要素は、複数のメモリMEM0にそれぞれ保持されたデータを使用して第1及び第2の演算を並列に実行する演算命令を実行する。なお、ここでは、各メモリMEM0および演算器EXにおいて、上記の第1及び第2の演算に関わるユニット(リソース)は互いに競合しないものとする。
【0042】
図5(E)では、第1及び第2の演算に関わるリソースは競合しない。このため、コンパイラ装置10は、第1及び第2の演算要素での第1及び第2の演算を並列に実行可能な1つの命令群を生成する。なお、コンパイラ装置10は、メモリMEM1、メモリMEM2間のデータ転送又はメモリMEM2とメモリMEM3との間のデータ転送を、命令群に含めることが可能である。図5(E)において、コンパイラ装置10は、メモリMEM0が競合すると判定した場合、命令群を生成せずに、第1及び第2の演算要素での第1及び第2の演算をそれぞれ実行する2つの演算命令を逐次生成する。
【0043】
図5(F)では、演算器EXは、メモリMEM0に保持されたデータを使用して演算を実行する演算命令を実行する。また、演算処理装置100は、演算を実行する演算器EXを含む演算ユニットにおいて、メモリMEM0にメモリMEM1からデータを転送するデータ転送命令を、演算命令と並列に実行する。なお、ここでは、各メモリMEM0において、上記の演算およびデータ転送に関わるユニット(リソース)は互いに競合しないものとする。さらに、演算処理装置100は、メモリMEM3からメモリMEM2にデータを転送するデータ転送命令を、上記の演算命令及びデータ転送命令と並列に実行する。
【0044】
図5(F)では、演算器EXによる演算と2つのデータ転送に使用されるリソースは競合しないため、コンパイラ装置10は、1つの演算命令と2つのデータ転送命令とを並列に実行可能な1つの命令群を生成する。コンパイラ装置10がリソースの競合を判定した場合の命令群の生成方法は、図4(C)の説明と同様である。
【0045】
以下、図6から図11では、命令マージ部15による命令をマージする処理の例が説明される。例えば、図6から図11に示す処理は、コンパイラ装置10が実行するコンパイラプログラムによる処理の例と、コンパイラ装置10が実行するコンパイル方法による処理の例とを示す。図6から図11に示す処理によりコンパイラ装置10が命令を生成する方法は、命令生成方法の一例を示す。
【0046】
図6は、図1の命令マージ部15を動作させない場合と動作させた場合とでコンパイラ装置10が生成する命令コードによる処理の例を示す説明図である。コンパイラ装置10が命令マージ部15を動作させて命令コードを生成する方法は、命令生成方法の一例である。ダウンロードDL(DL1、DL2)、アップロードUL、畳み込み演算Conv(Conv1、Conv2、Conv3)、バッチノーマライゼーションBN及びReLU関数の各々は、基本的操作の一例である。演算命令の頻度及びデータ転送命令の頻度を示す矩形は、網掛けの色が濃いほど命令の実行頻度が高いことを示す。
【0047】
図6に示す例では、演算処理装置100は、メモリMEM3からメモリMEM0にデータのダウンロードDL1し、ダウンロードしたデータを使用して畳み込み演算Conv1を実行する(図6(a)、(b))。ダウンロードDL1の処理は、データ転送命令を使用して実行される。畳み込み演算Conv1の処理は、主に演算命令を使用して実行される。
【0048】
次に、演算処理装置100は、例えば、畳み込み演算Conv1により得られたデータをメモリMEM0からメモリMEM3にアップロードULする(図6(c))。アップロードULの処理は、データ転送命令を使用して実行される。
【0049】
また、演算処理装置100は、畳み込み演算Conv1により得られたデータに対してバッチノーマライゼーションBNの処理と、ReLU関数の処理とを順次実行する(図6(d)、(e))。バッチノーマライゼーションBNの処理及びReLU関数の処理は、主に演算命令を使用して実行される。次に、演算処理装置100は、畳み込み演算Conv2を実行する(図6(f))。
【0050】
また、演算処理装置100は、データをメモリMEM3からメモリMEM0にダウンロードDL2する(図6(g))。そして、演算処理装置100は、ダウンロードしたデータを使用して畳み込み演算Conv3を実行する(図6(h))。このように、命令マージ部15を動作させない場合、演算処理装置100は、ディープニューラルネットワークの処理を順次実行する。
【0051】
一方、命令マージ部15を動作させる場合、命令マージ部15は、リソースが競合しない複数の命令を含む1つの命令群を生成することで、複数の基本的操作を並列に実行可能にする。これにより、例えば、ディープニューラルネットワークの訓練に掛かる計算時間を短縮することができ、演算処理装置100の処理性能を向上することができる。
【0052】
例えば、アップロードUL1の処理は、第1の処理の一例であり、バッチノーマライゼーションBNの処理及びReLU関数の処理は、第1の処理後に実行される第2の処理の一例である。この場合、アップロードUL1の処理を実行する命令を含む命令列は、第1の命令を含む第1の命令列の一例である。バッチノーマライゼーションBNの処理を実行する命令を含む命令列及びReLU関数の処理を実行する命令を含む命令列は、第2の命令を含む第2の命令列の一例である。
【0053】
また、ReLU関数の処理及び畳み込み演算Conv2の処理は、第1の処理の一例であり、ダウンロードDL2の処理は、第2の処理の一例である。この場合、ReLU関数の処理及び畳み込み演算Conv2の処理を実行する命令を含む命令列は、第1の命令を含む第1の命令列の一例である。ダウンロードDL2の処理を実行する命令を含む命令列は、第2の命令を含む第2の命令列の一例である。
【0054】
例えば、命令マージ部15は、バッチノーマライゼーションBN及びReLU関数の処理で使用する演算命令と、アップロードULの処理で使用するデータ転送命令のうち、リソースが競合しない命令を少なくとも1つの命令群にまとめる(図6(i))。また、命令マージ部15は、ReLU関数及び畳み込み演算Conv2の処理で使用する演算命令と、ダウンロードDL2の処理で使用するデータ転送命令のうち、リソースが競合しない命令を少なくとも1つの命令群にまとめる(図6(j))。
【0055】
複数の命令がまとめられた命令群は、第3の命令の一例である。命令マージ部15は、複数の命令をまとめ命令群と、命令群にまとめた命令を除く命令とを連結し、図6の破線枠で示す命令列(第3の命令列)を生成する。命令をまとめることにより、例えば、データ転送命令の実行頻度を高くすることができ、データの転送効率を高くすることができる。この結果、演算処理装置100の処理性能を向上することができる。
【0056】
演算命令及びデータ転送命令において競合するリソースはメモリMEM0である。このため、命令マージ部15は、メモリMEM0のリソースが競合しなければ、演算命令とデータ転送命令とをまとめて命令群を生成できる。演算命令とデータ転送命令とによるリソースの競合は、演算命令同士のリソースの競合に比べて発生頻度が低い場合が多い。このため、演算命令とデータ転送命令とをまとめることで、演算命令をまとめる場合に比べて、命令数の圧縮効率を向上することができ、演算処理装置100の処理性能を向上することができる。
【0057】
なお、命令マージ部15は、命令をまとめることで基本的操作の処理結果が変わる場合、命令をまとめることをしない。換言すれば、命令マージ部15は、着目する命令のマージ後の命令列による処理結果が、マージ前の命令列による処理結果と等価になるか否かを判定する。そして、命令マージ部15は、処理結果が等価になる場合、命令をマージして命令群を生成する。これにより、マージ後の命令列を実行する演算処理装置100が正常に動作しない不具合を抑止することができる。
【0058】
例えば、基本的操作の処理結果が変わる例として、データの依存関係が破綻する場合、又は、使用するメモリサイズが不足する場合がある。データの依存関係が破綻する例は、図10で説明され、使用するメモリサイズが不足する例は、図11で説明される。
【0059】
図7は、図1の命令マージ部15により命令をマージする例を示す説明図である。例えば、大文字のアルファベットは、図6のバッチノーマライゼーションBNの処理で使用される命令ISを含む命令列IS1を示す。小文字のアルファベットは、図6のアップロードULの処理で使用される命令ISを含む命令列IS2を示す。命令列IS1は、第1命令列の一例であり、命令列IS1に含まれる命令ISは、第1の命令の一例である。命令列IS2は、第2命令列の一例であり、命令列IS2に含まれる命令ISは、第2の命令の一例である。
【0060】
1つの命令ISは、図8及び図9を用いて後述されるように、互いに異なる種類の処理を並列に実行可能な複数の処理ユニットそれぞれに対する複数の異なる命令を含む。すなわち、1つの命令ISは、第1の処理ユニットに対する命令、第2の処理ユニットに対する命令、・・・第Nの処理ユニットに対する命令を含む。処理ユニットに提供される命令にはNOP(NO OPERATION:何もしない)を含んでよい。複数の処理ユニットは、同時に提供された複数の異なる命令にしたがって、互いに異なる種類の処理(NOP含む)を並列に実行する。
【0061】
命令マージ部15は、命令列IS1、IS2にそれぞれ含まれる命令ISのうち、重ね合わせが可能な命令ISを抽出し、抽出した命令ISをマージすることで命令群IGrを生成する。命令群IGrは、第3命令の一例である。そして、命令マージ部15は、命令ISをマージした命令群IGrとマージしない単独の命令ISとを含む命令列IS3を生成する。命令列IS3は、第3の命令列の一例である。例えば、命令列IS1、IS2、IS3に含まれる命令IS及び命令群IGrは、機械語レベルで記述される。
【0062】
図7に示すように、2つの命令列IS1、IS2において、マージ可能な命令ISの数は限られる。しかしながら、いくつかの命令ISを命令群IGrとしてマージし、並列に実行可能にすることで、図6に示したように、命令ISを逐次的に実行する場合に比べて、命令の実行速度を高くすることができる。
【0063】
図7のかぎ括弧内は、マージ処理の途中の状態を示す。命令列IS1、IS2、IS3の途中に示す太線より手前は、マージ可能な命令ISのマージ処理が実施済みであることを示し、太線より後ろは、マージ処理が未実施であることを示す。破線枠で示す命令G、eは、次にマージされる命令ISを示す。
【0064】
命令マージ部15は、太線で示すように、命令列IS1、IS2のマージ処理をどこまで実施したかを認識しており、次の命令(例えば、G、e)がマージ可能か否かを判定し、マージ可能な場合、命令群IGrを生成する処理を繰り返す。
【0065】
図8及び図9は、2つの命令をマージする例を示す説明図である。例えば、命令1は、図7の命令列IS1の命令ISに対応し、命令2は、図7の命令列IS2の命令ISに対応する。命令1+2は、命令1と命令2とをマージした命令群を示す。命令1及び命令2において、符号-は、実行される命令が存在しないこと(NOP)を示す。すなわち、命令1、命令2、命令1と命令2とがマージされた命令1+2のそれぞれは、図7における命令IS同様に、互いに異なる種類の処理を並列に実行可能な複数の処理ユニットそれぞれに対する複数の異なる命令を含む。図8(A)-図8(C)及び図9(D)-図9(F)は、図4(A)-図4(C)及び図5(D)-図5(F)の動作にそれぞれ対応する。
【0066】
図8(A)において、命令マージ部15は、演算器EXにより第1の演算を実行する演算命令を含む命令1と、メモリMEM3からメモリMEM2にデータを転送するデータ転送命令を含む命令2とに使用するリソースが競合しないため、マージが可能と判定する。このため、命令マージ部15は、演算命令とデータ転送命令とをマージした命令1+2を生成する。
【0067】
図8(B)において、命令マージ部15は、第1の演算を実行する演算命令を含む命令1と、メモリMEM1からプロセッサエレメントPEにデータを転送するデータ転送命令を含む命令2とに使用するリソースが条件付きで競合しないと判定する。リソースが競合しない条件は、例えば、各メモリMEM0において、演算命令の結果が書き込まれるユニットとデータの転送先のユニットとが異なることである。条件を満足する場合、命令マージ部15は、演算命令とデータ転送命令とをマージした命令1+2を生成する。
【0068】
図8(C)において、命令マージ部15は、第1の演算を実行する演算命令を含む命令1と、メモリMEM0からメモリMEM1にデータを転送するデータ転送命令を含む命令2と、メモリMEM2からメモリMEM3にデータを転送するデータ転送命令に使用するリソースが条件付きで競合しないと判定する。リソースが競合しない条件は、各メモリMEM0において、演算命令で使用するユニットとデータ転送に使用するユニットとが異なることである。
【0069】
条件を満足する場合、命令マージ部15は、演算命令と2つのデータ転送命令とをマージした命令1+2を生成する。条件を満足しない場合、命令マージ部15は、単独の演算命令と2つのデータ転送命令とをマージせず、その結果、命令1と命令2とは別々の命令として維持される。ただし、命令1は、他の命令とマージされてもよいし、命令2は、他の命令とマージされてもよい。
【0070】
図9(D)において、命令マージ部15は、メモリMEM0からメモリMEM1にデータを転送するデータ転送命令を含む命令1と、メモリMEM2からメモリMEM3にデータを転送するデータ転送命令を含む命令2とに使用するリソースが競合しないため、マージ可能と判定する。このため、命令マージ部15は、2つのデータ転送命令をマージした命令1+2を生成する。メモリMEM0からメモリMEM1にデータを転送するデータ転送命令は、第1のデータ転送命令の一例であり、メモリMEM2からメモリMEM3にデータを転送するデータ転送命令は、第1のデータ転送命令の一例である。
【0071】
この実施形態では、データ転送命令は、異なるメモリ階層間毎に用意される。このため、図9(D)に示すように、命令マージ部15は、メモリ階層が重ならないデータ転送命令には競合がないと判定できる。この結果、コンパイラ装置10による命令の生成処理を効率よく実行することができる。
【0072】
図9(E)において、命令マージ部15は、演算器EXに第1の演算を実行させる第1演算命令を含む命令1と、演算器EXに第2の演算を実行させる第2演算命令を含む命令2とで使用するリソースが条件付きで競合しないと判定する。リソースが競合しない条件は、演算を実行する演算要素が互いに異なり、かつ、第1及び第2の演算で使用するメモリMEM0内のユニットが互いに異なることである。条件を満足する場合、命令マージ部15は、第1演算命令と第2演算命令とをマージした命令1+2を生成する。
【0073】
図9(F)において、命令マージ部15は、演算器EXに第1の演算を実行させる演算命令を含む命令1と、メモリMEM1からメモリMEM0にデータを転送するデータ転送命令及びメモリMEM3からメモリMEM2にデータを転送するデータ転送命令を含む命令2とに使用するリソースが条件付きで競合しないと判定する。リソースが競合しない条件は、各メモリMEM0において、演算命令で使用するユニットとデータ転送に使用するユニットとが異なることである。
【0074】
条件を満足する場合、命令マージ部15は、演算命令と2つのデータ転送命令とをマージした命令1+2を生成する。条件を満足しない場合、命令マージ部15は、単独の演算命令と、2つのデータ転送命令とをマージせず、その結果、命令1と命令2とは別々の命令として維持される。
【0075】
図10は、データの依存関係により命令をマージできない例を示す説明図である。図10では、値xをメモリMEM0に書き込むレイヤAの処理と、レイヤAの処理でメモリMEM0に書き込まれた値xを読み出すレイヤBの処理とが順次実行されるとする。
【0076】
命令マージ部15は、レイヤAの命令列とレイヤBの命令列とをマージする場合に、メモリMEM0に読み書きされるデータに依存関係があるか否かを判定する。図10の例では、メモリMEM0に読み書きされるデータに依存関係がある。そして、レイヤAの命令列とレイヤBの命令列とをマージする場合、値xがメモリMEM0に書き込まれる前に、メモリMEM0から値xを読み出す処理が実行される。このため、命令マージ部15は、命令列をマージすると正しい処理が実行されないと判定し、命令列のマージを実行しない。
【0077】
このように、命令マージ部15は、命令のマージ対象のレイヤA、Bで共通に使用するメモリMEM0等にデータの依存関係があり、マージ後のデータの読み書きが正しい順序で実行されない場合、命令列のマージを一時的に制限する。すなわち、図7の説明からも理解されるように、同じメモリMEM0へのデータの読み込み命令及び書き込み命令ついて、命令マージ部15は、少なくともレイヤAの命令列の書き込み命令のマージ処理が終わるまで、レイヤBの命令列の読み込み命令のマージ処理を待機する。これにより、データの依存関係の破綻により演算処理装置100が正常に動作しなくなる不具合を抑止することができる。なお命令列のマージを一時的に制限する代わりに、当該レイヤ同士の命令列のマージを放棄し、当該レイヤ同士の命令列のマージを一切しないとしてもよい。
【0078】
図11は、メモリ不足により命令をマージできない例を示す説明図である。なお、以下で説明するメモリ容量の数値は例示である。例えば、レイヤAの命令列とレイヤBの命令列とで、記憶容量が800のメモリを共通に使用して計算処理(計算1-1、1-2、2-1、2-2)が実行されるとする。なお、計算処理に使用するメモリは、メモリMEM0、MEM1、MEM2の内の複数個所に分散されてもよい。
【0079】
計算1-1、2-1に必要なメモリ容量は、それぞれ300であり、計算1-2、2-2に必要なメモリ容量は、それぞれ400である。レイヤAは、計算1-2の実行後、計算1-1、1-2で確保したメモリ容量700を解放する。レイヤBは、計算2-2の実行後、計算2-1、2-2で確保したメモリ容量700を解放する。このようにマージしない場合にはメモリ不足が生じない。
【0080】
命令マージ部15は、レイヤAの命令列とレイヤBの命令列とをマージする場合に、使用するメモリ容量がメモリの記憶容量を超えることなく、レイヤAとレイヤBの計算処理が実行できるか否かを判定する。図11に示す例では、命令列をマージした場合、計算1-1、2-1を実行後、計算1-2、計算2-2にそれぞれ必要なメモリ容量400を確保できず、計算処理が破綻する。
【0081】
命令マージ部15は、命令列のマージによりメモリ容量が不足する場合、命令列のマージを抑止する。これにより、メモリ容量の不足により演算処理装置100が正常に動作しなくなる不具合を抑止することができる。
【0082】
以上、この実施形態では、命令マージ部15は、リソースが競合しない複数の命令を含む1つの命令群を生成することで、複数の基本的操作を並列に実行可能にする。これにより、例えば、ディープニューラルネットワークの訓練に掛かる計算時間を短縮することができ、演算処理装置100の処理性能を向上することができる。
【0083】
命令マージ部15は、着目する命令のマージ後の命令列による処理結果が、マージ前の命令列による処理結果と等価になるか否かを判定する。そして、命令マージ部15は、処理結果が等価になる場合、命令をマージして新たな命令列を生成する。これにより、マージ後の命令列を実行する演算処理装置100が正常に動作しない不具合を抑止することができる。
【0084】
命令マージ部15は、命令のマージ対象のレイヤA、Bで共通に使用するメモリMEM0等にデータの依存関係があり、マージ後のデータの読み書きの順序が正しくない場合、命令列のマージを一時的に制限する。これにより、データの依存関係の破綻により演算処理装置100が正常に動作しなくなる不具合を抑止することができる。
【0085】
命令マージ部15は、命令列のマージによりメモリ容量が不足する場合、命令列のマージを抑止する。これにより、メモリ容量の不足により演算処理装置100が正常に動作しなくなる不具合を抑止することができる。
【0086】
図6で説明したように、演算命令とデータ転送命令とを1つの命令に含める形でまとめることで、演算命令をまとめる場合に比べて、命令数の圧縮効率を向上することができ、演算処理装置100の処理性能を向上することができる。データ転送命令は、異なるメモリ階層間毎に用意される。このため、図9(D)に示すように、命令マージ部15は、メモリ階層が重ならないデータ転送命令には競合がないと判定できる。このため、命令マージ部15は、異なるメモリ階層間でのデータ転送命令の競合を容易に判定でき、コンパイラ装置10による命令の生成処理を効率よく実行することができる。
【0087】
図12は、別の実施形態のコンパイラ装置において2つの命令をマージする例を示す説明図である。図12は、コンパイラ装置による命令生成方法の一例を示す。この実施形態のコンパイラ装置は、図1のコンパイラ装置10の第2命令コード生成部14、命令マージ部15及びファイナライズ部16と同様の機能を有する。すなわち、この実施形態のコンパイラ装置は、第1の命令列に含まれる命令と、第2の命令列に含まれる命令とをマージすることで新たな命令を生成する機能を有する。
【0088】
なお、この実施形態においても第1の命令列に含まれる命令と、第2の命令列に含まれる命令と、これら2つの命令がマージされて生成される新たな命令と、のそれぞれは、互いに異なる種類の処理を並列に実行可能な複数の処理ユニットそれぞれに対する複数の異なる命令を含む。すなわち、命令列に含まれる命令及びマージされて生成される新たな命令は、第1の処理ユニットに対する命令、第2の処理ユニットに対する命令、・・・第Nの処理ユニットに対する命令を含む。処理ユニットに提供される命令にはNOP(NO OPERATION:何もしない)を含むことがある。複数の処理ユニットは、同時に提供された複数の異なる命令にしたがって、互いに異なる種類の処理(NOP含む)を並列に実行する。
【0089】
例えば、図12に示す命令1及び命令2を実行する演算処理装置は、VLIW(Very Long Instruction Word)プロセッサであり、ALU(Arithmetic and Logic Unit)及び2つのFPU(Floating Point Unit)0、FPU1といった互いに異なる種類の処理を実行可能な複数の処理ユニットを有する。なお、図12では、説明を分かりやすくするために、命令1がALU及びFPU0に対する2つの命令とFPU1に対するNOPの命令とを含み、命令2がALU及びFPU0に対するNOPの命令とFPU1に対する1つの命令とを含む例を示すが、命令1及び命令2の各々は、4以上の命令を含んでもよい。
【0090】
命令マージ部15は、整数の加算命令(c<-a+b)と浮動小数点数の加算命令(f<-d+.e)を含む命令1と、浮動小数点数の乗算命令(z<-x*.y)を含む命令2とのリソースが競合するか否かを判定する。命令マージ部15は、命令1と命令2とでリソースが競合しないため、命令1と命令2とをマージ可能であると判定し、命令群(命令1+2)を生成する。
【0091】
この整数の加算命令は、整数レジスタa、bに保持されたデータを加算し、整数レジスタcに格納する。浮動小数点数の加算命令は、浮動小数点数レジスタd、eに保持されたデータを加算し、浮動小数点数レジスタfに格納する。加算符号"+."は、浮動小数点数の加算を示す。浮動小数点数の乗算命令は、浮動小数点数レジスタx、yに保持されたデータを乗算し、浮動小数点数レジスタzに格納する。乗算符号"*."は、浮動小数点数の乗算を示す。
【0092】
以上、この実施形態においても上述した実施形態と同様の効果を得ることができる。例えば、この実施形態では、VLIWプロセッサが実行する少なくとも1つの命令を含む命令1及び命令2をマージし、命令群を生成する。これにより、命令1及び命令2をマージしない場合に比べて、VLIWプロセッサの実行効率を向上することができ、計算時間を短縮することができる。
【0093】
上述の各実施形態では、第1の命令列中の第1の命令と第2の命令列中の第2の命令とを1つの命令に含める形でマージする(まとめる)処理を説明した。しかし、第1の命令列中の第1の命令と第2の命令列中の第2の命令とをまとめる処理は、スーパースカラ型のプロセッサに供給する命令列に対しても適用可能である。スーパースカラ型のプロセッサは、命令列中において前後する2つの命令であって並列に実行可能なものを自動で検出し、これらを並列に実行できる。このようなスーパースカラ型のプロセッサに対して、コンパイラ装置10は、次のように、複数の命令をまとめる処理を実行して良い。コンパイラ装置10は、第1の命令列中の第1の命令と第2の命令列中の第2の命令について、当該第1の命令及び第2の命令を1つの命令列中に前後に並べて配置することでプロセッサが自動で並列実行することが期待されるならば、当該第1の命令及び第2の命令を前後に並べて配置する形で当該第1の命令及び第2の命令がマージされた(まとめる)命令を生成する。この場合、前後に並べて配置された第1及び第2の命令が第3の命令に相当する。この処理により、よりプロセッサが高い並列度で実行可能な命令列を得られることが期待できる。
【0094】
前述した実施形態におけるコンパイラ装置10又はホスト300の一部又は全部は、ハードウェアで構成されていてもよいし、CPU又はGPU等が実行するソフトウェア(プログラム)の情報処理で構成されてもよい。ソフトウェアの情報処理で構成される場合には、前述した実施形態における各装置の少なくとも一部の機能を実現するソフトウェアを、CD-ROM(Compact Disc-Read Only Memory)、USB(Universal Serial Bus)メモリ等の非一時的な記憶媒体(非一時的なコンピュータ可読媒体)に収納し、コンピュータに読み込ませることにより、ソフトウェアの情報処理を実行してもよい。また、通信ネットワークを介して当該ソフトウェアがダウンロードされてもよい。さらに、ソフトウェアの処理の全部又は一部がASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)等の回路に実装されることにより、当該ソフトウェアによる情報処理がハードウェアにより実行されてもよい。
【0095】
ソフトウェアを収納する記憶媒体は、光ディスク等の着脱可能なものでもよいし、ハードディスク、メモリ等の固定型の記憶媒体であってもよい。また、記憶媒体は、コンピュータ内部に備えられてもよいし(主記憶装置、補助記憶装置等)、コンピュータ外部に備えられてもよい。
【0096】
図13は、図1に示したコンパイラ装置10のハードウェア構成の一例を示すブロック図である。図3に示すホスト300のハードウェア構成も、図13に示すコンパイラ装置10のハードウェア構成と同様である。コンパイラ装置10は、一例として、プロセッサ20と、主記憶装置30(メモリ)と、補助記憶装置40(メモリ)と、ネットワークインタフェース50と、デバイスインタフェース60と、を備え、これらがバス70を介して接続されたコンピュータとして実現されてもよい。例えば、プロセッサ20がコンパイラプログラムを実行することで、図6から図12で説明した動作が実行される。
【0097】
コンパイラ装置10は、各構成要素を一つ備えているが、同じ構成要素を複数備えていてもよい。また、図13では、1台のコンパイラ装置10が示されているが、ソフトウェアが複数台のコンパイラ装置10にインストールされて、当該複数台のコンパイラ装置10のそれぞれがソフトウェアの同一の又は異なる一部の処理を実行してもよい。この場合、コンパイラ装置10のそれぞれがネットワークインタフェース50等を介して通信して処理を実行する分散コンピューティングの形態であってもよい。つまり、前述した実施形態におけるコンパイラ装置10は、1又は複数の記憶装置に記憶された命令を1台又は複数台のコンパイラ装置10が実行することで機能を実現するシステムとして構成されてもよい。また、端末から送信された情報をクラウド上に設けられた1台又は複数台のコンパイラ装置10で処理し、この処理結果を端末に送信するような構成であってもよい。
【0098】
図6から図11で説明した動作を実現する各種演算は、1又は複数のプロセッサ20を用いて、又はネットワークを介した複数台のコンピュータを用いて、並列処理で実行されてもよい。また、各種演算が、プロセッサ20内に複数ある演算コアに振り分けられて、並列処理で実行されてもよい。また、本開示の処理、手段等の一部又は全部は、ネットワークを介してコンパイラ装置10と通信可能なクラウド上に設けられたプロセッサ及び記憶装置の少なくとも一方により実現されてもよい。このように、前述した実施形態におけるコンパイラ装置10は、1台又は複数台のコンピュータによる並列コンピューティングの形態であってもよい。
【0099】
プロセッサ20は、少なくともコンピュータの制御又は演算のいずれかを行う電子回路(処理回路、Processing circuit、Processing circuitry、CPU、GPU、FPGA、ASIC等)であってもよい。また、プロセッサ20は、汎用プロセッサ、特定の演算を実行するために設計された専用の処理回路又は汎用プロセッサと専用の処理回路との両方を含む半導体装置のいずれであってもよい。また、プロセッサ20は、光回路を含むものであってもよいし、量子コンピューティングに基づく演算機能を含むものであってもよい。
【0100】
プロセッサ20は、コンパイラ装置10の内部構成の各装置等から入力されたデータやソフトウェアに基づいて演算処理を行ってもよく、演算結果や制御信号を各装置等に出力してもよい。プロセッサ20は、コンパイラ装置10のOS(Operating System)や、アプリケーション等を実行することにより、コンパイラ装置10を構成する各構成要素を制御してもよい。
【0101】
前述した実施形態におけるコンパイラ装置10は、1又は複数のプロセッサ20により実現されてもよい。ここで、プロセッサ20は、1チップ上に配置された1又は複数の電子回路を指してもよいし、2つ以上のチップあるいは2つ以上のデバイス上に配置された1又は複数の電子回路を指してもよい。複数の電子回路を用いる場合、各電子回路は有線又は無線により通信してもよい。
【0102】
主記憶装置30は、プロセッサ20が実行する命令及び各種データ等を記憶してもよく、主記憶装置30に記憶された情報がプロセッサ20により読み出されてもよい。補助記憶装置40は、主記憶装置30以外の記憶装置である。なお、これらの記憶装置は、電子情報を格納可能な任意の電子部品を意味するものとし、半導体のメモリでもよい。半導体のメモリは、揮発性メモリ又は不揮発性メモリのいずれでもよい。前述した実施形態におけるコンパイラ装置10において各種データ等を保存するための記憶装置は、主記憶装置30又は補助記憶装置40により実現されてもよい。
【0103】
前述した実施形態におけるコンパイラ装置10が、少なくとも1つの記憶装置(メモリ)と、この少なくとも1つの記憶装置に接続(結合)される少なくとも1つのプロセッサ20で構成される場合、記憶装置1つに対して、少なくとも1つのプロセッサ20が接続されてもよい。また、プロセッサ20の1つに対して、少なくとも1つの記憶装置が接続されてもよい。また、複数のプロセッサ20のうち少なくとも1つのプロセッサ20が、複数の記憶装置のうち少なくとも1つの記憶装置に接続される構成を含んでもよい。また、複数台のコンパイラ装置10に含まれる記憶装置とプロセッサ20によって、この構成が実現されてもよい。さらに、記憶装置がプロセッサ20と一体になっている構成(例えば、L1キャッシュ、L2キャッシュを含むキャッシュメモリ)を含んでもよい。
【0104】
ネットワークインタフェース50は、無線又は有線により、通信ネットワーク600に接続するためのインタフェースである。ネットワークインタフェース50は、既存の通信規格に適合したもの等、適切なインタフェースを用いればよい。ネットワークインタフェース50により、通信ネットワーク600を介して接続された外部装置710と情報のやり取りが行われてもよい。なお、通信ネットワーク600は、WAN(Wide Area Network)、LAN(Local Area Network)、PAN(Personal Area Network)等の何れか又はそれらの組み合わせであってよく、コンパイラ装置10と外部装置710との間で情報のやり取りが行われるものであればよい。WANの一例としてインターネット等があり、LANの一例としてIEEE802.11やイーサネット(登録商標)等があり、PANの一例としてBluetooth(登録商標)やNFC(Near Field Communication)等がある。
【0105】
デバイスインタフェース60は、外部装置720と直接接続するUSB等のインタフェースである。
【0106】
外部装置710は、コンパイラ装置10と通信ネットワーク600を介して接続されている装置である。外部装置720はコンパイラ装置10と直接接続されいる装置である。
【0107】
外部装置710又は外部装置720は、一例として、入力装置であってもよい。入力装置は、例えば、カメラ、マイクロフォン、モーションキャプチャ、各種センサ、キーボード、マウス、タッチパネル等のデバイスであり、取得した情報をコンパイラ装置10に与える。また、パーソナルコンピュータ、タブレット端末、スマートフォン等の入力部とメモリとプロセッサを備えるデバイスであってもよい。
【0108】
また、外部装置710又は外部装置720は、一例として、出力装置でもよい。出力装置は、例えば、LCD(Liquid Crystal Display)、又は有機EL(Electro Luminescence)パネル等の表示装置であってもよいし、音声等を出力するスピーカ等であってもよい。また、パーソナルコンピュータ、タブレット端末、又はスマートフォン等の出力部とメモリとプロセッサを備えるデバイスであってもよい。
【0109】
また、外部装置710又は外部装置720は、記憶装置(メモリ)であってもよい。例えば、外部装置710はネットワークストレージ等であってもよく、外部装置720はHDD等のストレージであってもよい。
【0110】
また、外部装置710又は外部装置720は、前述した実施形態におけるコンパイラ装置10の構成要素の一部の機能を有する装置でもよい。つまり、コンパイラ装置10は、外部装置710又は外部装置720の処理結果の一部又は全部を送信してもよいし、外部装置710又は外部装置720から処理結果の一部又は全部を受信してもよい。
【0111】
本明細書(請求項を含む)において、「a、b及びcの少なくとも1つ(一方)」又は「a、b又はcの少なくとも1つ(一方)」の表現(同様な表現を含む)が用いられる場合は、a、b、c、a-b、a-c、b-c又はa-b-cのいずれかを含む。また、a-a、a-b-b、a-a-b-b-c-c等のように、いずれかの要素について複数のインスタンスを含んでもよい。さらに、a-b-c-dのようにdを有する等、列挙された要素(a、b及びc)以外の他の要素を加えることも含む。
【0112】
本明細書(請求項を含む)において、「データを入力として/を用いて/データに基づいて/に従って/に応じて」等の表現(同様な表現を含む)が用いられる場合は、特に断りがない場合、データそのものを用いる場合や、データに何らかの処理を行ったもの(例えば、ノイズ加算したもの、正規化したもの、データから抽出した特徴量、データの中間表現等)を用いる場合を含む。また、「データを入力として/を用いて/データに基づいて/に従って/に応じて」何らかの結果が得られる旨が記載されている場合(同様な表現を含む)、特に断りがない場合、当該データのみに基づいて当該結果が得られる場合や、当該データ以外の他のデータ、要因、条件及び/又は状態にも影響を受けて当該結果が得られる場合を含む。また、「データを出力する」旨が記載されている場合(同様な表現を含む)、特に断りがない場合、データそのものを出力として用いる場合や、データに何らかの処理を行ったもの(例えば、ノイズ加算したもの、正規化したもの、データから抽出した特徴量、各種データの中間表現等)を出力として用いる場合を含む。
【0113】
本明細書(請求項を含む)において、「接続される(connected)」及び「結合される(coupled)」との用語が用いられる場合は、直接的な接続/結合、間接的な接続/結合、電気的(electrically)な接続/結合、通信的(communicatively)な接続/結合、機能的(operatively)な接続/結合、物理的(physically)な接続/結合等のいずれをも含む非限定的な用語として意図される。当該用語は、当該用語が用いられた文脈に応じて適宜解釈されるべきであるが、意図的に或いは当然に排除されるのではない接続/結合形態は、当該用語に含まれるものして非限定的に解釈されるべきである。
【0114】
本明細書(請求項を含む)において、「AがBするよう構成される(A configured to B)」との表現が用いられる場合は、要素Aの物理的構造が、動作Bを実行可能な構成を有するとともに、要素Aの恒常的(permanent)又は一時的(temporary)な設定(setting/configuration)が、動作Bを実際に実行するように設定(configured/set)されていることを含んでよい。例えば、要素Aが汎用プロセッサである場合、当該プロセッサが動作Bを実行可能なハードウェア構成を有するとともに、恒常的(permanent)又は一時的(temporary)なプログラム(命令)の設定により、動作Bを実際に実行するように設定(configured)されていればよい。また、要素Aが専用プロセッサ、専用演算回路等である場合、制御用命令及びデータが実際に付属しているか否かとは無関係に、当該プロセッサの回路的構造等が動作Bを実際に実行するように構築(implemented)されていればよい。
【0115】
本明細書(請求項を含む)において、含有又は所有を意味する用語(例えば、「含む(comprising/including)」、「有する(having)」等)が用いられる場合は、当該用語の目的語により示される対象物以外の物を含有又は所有する場合を含む、open-endedな用語として意図される。これらの含有又は所有を意味する用語の目的語が数量を指定しない又は単数を示唆する表現(a又はanを冠詞とする表現)である場合は、当該表現は特定の数に限定されないものとして解釈されるべきである。
【0116】
本明細書(請求項を含む)において、ある箇所において「1つ又は複数(one or more)」、「少なくとも1つ(at least one)」等の表現が用いられ、他の箇所において数量を指定しない又は単数を示唆する表現(a又はanを冠詞とする表現)が用いられているとしても、後者の表現が「1つ」を意味することを意図しない。一般に、数量を指定しない又は単数を示唆する表現(a又はanを冠詞とする表現)は、必ずしも特定の数に限定されないものとして解釈されるべきである。
【0117】
本明細書において、ある実施形態の有する特定の構成について特定の効果(advantage/result)が得られる旨が記載されている場合、別段の理由がない限り、当該構成を有する他の1つ又は複数の実施形態についても当該効果が得られると理解されるべきである。但し、当該効果の有無は、一般に種々の要因、条件及び/又は状態に依存し、当該構成により必ず当該効果が得られるものではないと理解されるべきである。当該効果は、種々の要因、条件及び/又は状態が満たされたときに実施形態に記載の当該構成により得られるものに過ぎず、当該構成又は類似の構成を規定したクレームに係る発明において、当該効果が必ずしも得られるものではない。
【0118】
本明細書(請求項を含む)において、複数のハードウェアが所定の処理を行う場合、各ハードウェアが協働して所定の処理を行ってもよいし、一部のハードウェアが所定の処理の全てを行ってもよい。また、一部のハードウェアが所定の処理の一部を行い、別のハードウェアが所定の処理の残りを行ってもよい。本明細書(請求項を含む)において、「1又は複数のハードウェアが第1の処理を行い、前記1又は複数のハードウェアが第2の処理を行う」等の表現(同様な表現を含む)が用いられている場合、第1の処理を行うハードウェアと第2の処理を行うハードウェアは同じものであってもよいし、異なるものであってもよい。つまり、第1の処理を行うハードウェア及び第2の処理を行うハードウェアが、前記1又は複数のハードウェアに含まれていればよい。なお、ハードウェアは、電子回路、電子回路を含む装置等を含んでよい。
【0119】
本明細書(請求項を含む)において、複数の記憶装置(メモリ)がデータの記憶を行う場合、複数の記憶装置のうち個々の記憶装置は、データの一部のみを記憶してもよいし、データの全体を記憶してもよい。また、複数の記憶装置のうち一部の記憶装置がデータを記憶する構成を含んでもよい。
【0120】
以上、本開示の実施形態について詳述したが、本開示は上記した個々の実施形態に限定されるものではない。特許請求の範囲に規定された内容及びその均等物から導き出される本発明の概念的な思想と趣旨を逸脱しない範囲において、種々の追加、変更、置き換え、部分的削除等が可能である。例えば、前述した実施形態において、数値又は数式を説明に用いている場合、これらは例示的な目的で示されたものであり、本開示の範囲を限定するものではない。また、実施形態で示した各動作の順序も例示的なものであり、本開示の範囲を限定するものではない。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13