(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023064860
(43)【公開日】2023-05-12
(54)【発明の名称】命令生成方法、演算処理装置及び命令生成装置
(51)【国際特許分類】
G06F 9/315 20180101AFI20230502BHJP
G06F 8/41 20180101ALI20230502BHJP
【FI】
G06F9/315 M
G06F8/41 170
【審査請求】未請求
【請求項の数】18
【出願形態】OL
(21)【出願番号】P 2021175277
(22)【出願日】2021-10-27
(71)【出願人】
【識別番号】515130201
【氏名又は名称】株式会社Preferred Networks
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(72)【発明者】
【氏名】西川 剛史
【テーマコード(参考)】
5B033
5B081
【Fターム(参考)】
5B033AA14
5B033DB09
5B081CC21
(57)【要約】
【課題】プロセッサのアーキテクチャに合わせてデータ転送を少ないコストで実行可能なデータ転送命令を生成する。
【解決手段】複数の演算実行部を含む複数の第1ブロックを有する演算処理装置に実行させる命令を生成する命令生成方法は、少なくとも1つのプロセッサによって、少なくとも、転送元が前記演算実行部で転送先が前記演算実行部である複数のデータ転送、又は、転送元が前記第1ブロックで転送先が前記第1ブロックである複数のデータ転送、のいずれかを前記演算処理装置に実行させる少なくとも1つのデータ転送命令を生成する。
【選択図】
図4
【特許請求の範囲】
【請求項1】
複数の演算実行部を含む複数の第1ブロックを有する演算処理装置に実行させる命令を生成する命令生成方法であって、
少なくとも1つのプロセッサによって、少なくとも、転送元が前記演算実行部で転送先が前記演算実行部である複数のデータ転送、又は、転送元が前記第1ブロックで転送先が前記第1ブロックである複数のデータ転送、のいずれかを前記演算処理装置に実行させる少なくとも1つのデータ転送命令を生成する、
命令生成方法。
【請求項2】
前記第1ブロックに含まれる複数の前記演算実行部には、前記第1ブロック内で互いに異なり、複数の前記第1ブロック間で共通する識別子が割り当てられている、
請求項1に記載の命令生成方法。
【請求項3】
前記演算処理装置は、複数の前記第1ブロックを含む複数の第2ブロックを更に備え、
前記少なくとも1つのプロセッサによって、少なくとも、転送元が前記演算実行部で転送先が前記演算実行部である複数のデータ転送、転送元が前記第1ブロックで転送先が前記第1ブロックである複数のデータ転送、転送元が前記第1ブロックで転送先が前記第2ブロックである複数のデータ転送、転送元が前記第2ブロックで転送先が前記第1ブロックである複数のデータ転送、又は、転送元が前記第2ブロックで転送先が前記第2ブロックである複数のデータ転送、のいずれかを前記演算処理装置に実行させる前記少なくとも1つのデータ転送命令を生成する
請求項1又は2に記載の命令生成方法。
【請求項4】
前記第2ブロックに含まれる複数の前記第1ブロックには、前記第2ブロック内で互いに異なり、複数の前記第2ブロック間で共通する識別子が割り当てられており、
複数の前記第2ブロックには、互いに異なる識別子が割り当てられている、
請求項3に記載の命令生成方法。
【請求項5】
生成された前記少なくとも1つのデータ転送命令は、転送先の識別子が互いに同じで、転送元の識別子が互いに同じである複数のデータ転送を前記演算処理装置に実行させる命令である、
請求項1乃至4のいずれか1項に記載の命令生成方法。
【請求項6】
前記識別子は、少なくとも、アドレス又はブロックのいずれかを示す情報である
請求項5に記載の命令生成方法。
【請求項7】
生成された前記少なくとも1つのデータ転送命令は、複数のデータ転送命令の少なくとも一部を無効にする情報を含む
請求項1乃至請求項6のいずれか1項に記載の命令生成方法。
【請求項8】
生成された前記少なくとも1つのデータ転送命令は、少なくとも、データを1つの転送先に転送するユニキャスト命令、又は、データを複数の転送先に転送するマルチキャスト命令のいずれかを含む、
請求項1乃至請求項7のいずれか1項に記載の命令生成方法。
【請求項9】
動的計画法に基づいて前記少なくとも1つのデータ転送命令を生成する
請求項1乃至8のいずれか1項に記載の命令生成方法。
【請求項10】
階層が隣り合う2つのブロック間でのデータ転送の少なくとも一部について、命令数を少なくするマルチキャスト命令の組み合わせと実行順とを動的計画法を使用して決定する、
請求項9に記載の命令生成方法。
【請求項11】
前記マルチキャスト命令の決定後、他のデータ転送命令を決定する、
請求項10に記載の命令生成方法。
【請求項12】
複数の第1ブロックと、複数の前記第1ブロックを含む複数の第2ブロックとを有する演算処理装置に実行させる命令を生成する命令生成方法であって、
階層が隣り合う2つのブロック間でのデータ転送を実行するデータ転送命令の組み合わせと実行順とを動的計画法を用いて決定し、
決定した前記組み合わせと前記実行順とにしたがってデータ転送命令を生成する
命令生成方法。
【請求項13】
前記データ転送命令は、データを複数の転送先に転送する1種類以上のマルチキャスト命令を含む、
請求項12に記載の命令生成方法。
【請求項14】
使用するマルチキャスト命令を実行順が遅い順に動的計画法により探索する、
請求項13に記載の命令生成方法。
【請求項15】
前記演算処理装置に実行させるSIMD命令を生成する、
請求項1乃至14のいずれか1項に記載の命令生成方法。
【請求項16】
複数の演算実行部を含む複数の第1ブロックと、
複数の前記第1ブロックを含む複数の第2ブロックと、を備え、
請求項1乃至15のいずれか1項に記載の命令生成方法によって生成されたデータ転送命令に基づいて、データ転送を実行する、
演算処理装置。
【請求項17】
複数の演算実行部を含む複数の第1ブロックを有する演算処理装置に実行させる命令を生成する命令生成装置であって、
少なくとも1つのプロセッサによって、少なくとも、転送元が前記演算実行部で転送先が前記演算実行部である複数のデータ転送、又は、転送元が前記第1ブロックで転送先が前記第1ブロックである複数のデータ転送、のいずれかを前記演算処理装置に実行させる少なくとも1つのデータ転送命令を生成する、
命令生成装置。
【請求項18】
複数の第1ブロックと、複数の前記第1ブロックを含む複数の第2ブロックとを有する演算処理装置に実行させる命令を生成する命令生成装置であって、
階層が隣り合う2つのブロック間でのデータ転送を実行するデータ転送命令の組み合わせと実行順とを動的計画法を用いて決定し、
決定した前記組み合わせと前記実行順とにしたがってデータ転送命令を生成する、
命令生成装置。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、命令生成方法、演算処理装置及び命令生成装置に関する。
【背景技術】
【0002】
一般に、深層学習は、GPU(Graphics Processing Unit)等の多数のコアを内蔵したプロセッサを使用して実行される。近時、深層学習での計算速度を向上するため、深層学習に特化したプロセッサ(アクセラレータ)が開発されている。深層学習に特化したプロセッサのアーキテクチャ(演算器の数、演算器を含むブロックの数、ブロックの階層数及び命令等)は、GPU等の汎用品のアーキテクチャと異なる場合がある。このため、深層学習に特化したプロセッサを効率よく動作させるためには、プロセッサに実行させる命令を適切に生成するコンパイラ等の命令生成装置が重要である。
【発明の概要】
【発明が解決しようとする課題】
【0003】
本開示では、プロセッサのアーキテクチャに合わせてデータ転送を少ないコストで実行可能なデータ転送命令を生成する。
【課題を解決するための手段】
【0004】
本発明の実施形態の命令生成方法は、複数の演算実行部を含む複数の第1ブロックを有する演算処理装置に実行させる命令を生成する命令生成方法であって、少なくとも1つのプロセッサによって、少なくとも、転送元が前記演算実行部で転送先が前記演算実行部である複数のデータ転送、又は、転送元が前記第1ブロックで転送先が前記第1ブロックである複数のデータ転送、のいずれかを前記演算処理装置に実行させる少なくとも1つのデータ転送命令を生成する。
【図面の簡単な説明】
【0005】
【
図1】本発明の一実施形態における演算処理装置の一例を示すブロック図である。
【
図2】
図1の演算処理装置が搭載されるボード及びホストを含むシステムと、演算処理装置に実行させる命令を生成する情報処理装置との一例を示すブロック図である。
【
図3】データの転送経路に応じたデータ転送の分類の一例を示す説明図である。
【
図4】
図2の情報処理装置により実現されるコンパイラの動作の一例を示すフロー図である。
【
図5】別の実施形態におけるボード及びホストを含むシステムと、演算処理装置に実行させる命令を生成する情報処理装置との一例を示すブロック図である。
【
図6】
図5の演算処理装置が実行可能なデータ転送命令の一例を示す説明図である。
【
図7】
図6のマルチキャスト命令によるデータ転送の一例を示す説明図である。
【
図8】第3階層ブロックBLK3内の8個の第2階層ブロックBLK2間のデータ転送の一例を示す説明図である。
【
図9】
図5の情報処理装置により実現されるコンパイラの動作の一例を示すフロー図である。
【
図10】
図2及び
図5に示したホスト及び情報処理装置のハードウェア構成の例を示すブロック図である。
【発明を実施するための形態】
【0006】
以下、本発明の実施形態について、図面を参照しながら詳細に説明する。
【0007】
図1は、本発明の一実施形態における演算処理装置の一例を示すブロック図である。例えば、
図1に示す演算処理装置100は、深層学習を実行するアクセラレータとして機能してもよい。なお、本願発明は、深層学習に特化したアクセラレータ等のプロセッサに適用されてもよく、深層学習に特化していない他のプロセッサに適用されてもよい。
【0008】
プロセッサの一例である演算処理装置100は、複数の第1階層ブロックBLK1と、複数の第1階層ブロックBLK1を含む複数の第2階層ブロックBLK2と、複数の第2階層ブロックBLK2を含む複数の第3階層ブロックBLK3とを有する。すなわち、演算処理装置100は、所定数の第1階層ブロックBLK1を含み階層化された第2階層ブロックBLK2及び第3階層ブロックBLK3を有する。以下の説明では、第1階層ブロックBLK1、第2階層ブロックBLK2及び第3階層ブロックBLK3が区別なく説明される場合、単にブロックBLKと称される。演算処理装置100は、各種のデータ転送命令を実行することで、階層化されたブロックBLK間でスキャッター、ギャザー、ブロードキャスト、縮約等のデータ転送を効率的に実行可能である。なお、階層数は一例であり、演算処理装置100は4つ以上の階層で構成されてもよい。また、各階層におけるブロックBLKは、少なくともメモリ又は演算器のいずれかを含んでもよく、演算器は行列演算を実行するものであってもよい。
【0009】
演算処理装置100は、チップの形態でもよく、CSP(Chip Size Package)等のパッケージの形態でもよい。第2階層ブロックBLK2は、メモリMEM2を有し、第3階層ブロックBLK3は、メモリMEM3を有する。第1階層ブロックBLK1は、第1ブロックの一例であり、第2階層ブロックBLK2及び第3階層ブロックBLK3は、第2ブロックの一例である。
【0010】
図1に示す例では、演算処理装置100は、4個の第3階層ブロックBLK3を有する。各第3階層ブロックBLK3は、8個の第2階層ブロックBLK2を有する。各第2階層ブロックBLK2は、16個の第1階層ブロックBLK1を有する。しかしながら、演算処理装置100に搭載される第3階層ブロックBLK3の数、各第3階層ブロックBLK3に搭載される第2階層ブロックBLK2の数、及び各第2階層ブロックBLK2に搭載される第1階層ブロックBLK1の数は、
図1に限定されない。但し、演算処理装置100に搭載される第3階層ブロックBLK3の数、各第3階層ブロックBLK3に搭載される第2階層ブロックBLK2の数、及び各第2階層ブロックBLK2に搭載される第1階層ブロックBLK1の数は、それぞれ2のn乗個(nは1以上の整数)であることが好ましい。
【0011】
各第1階層ブロックBLK1は、演算器EX2と複数の演算ユニットOPUとを有する。演算ユニットOPUは、演算器EX2及び演算器EX1(
図2)に実行させるデータを保持するメモリMEM1(
図2)を有し、命令にしたがって演算器EX1、EX2にデータを供給する。例えば、演算器EX1(
図2)は、整数演算器でもよい。演算ユニットOPUは、演算実行部の一例である。例えば、各演算器EX1、EX2は、SIMD(Single Instruction Multiple Data)命令を実行可能である。複数の演算器EX1及び複数の演算器EX2は、それぞれ命令を並列に実行可能なため、各演算処理装置100またはボード200(
図2)は、巨大なSIMD実行マシンとして動作可能である。
【0012】
また、各ブロックBLK内のメモリMEM1、MEM2、MEM3が区別なく説明される場合、単にメモリMEMと称される。第1階層ブロックBLK1に搭載される各演算ユニットOPU内のメモリMEM1(
図2)は、第1階層ブロックBLK1のメモリとして説明される場合がある。
【0013】
図2は、
図1の演算処理装置100が搭載されるボード200及びホスト300を含むシステムと、演算処理装置100に実行させる命令を生成する情報処理装置400との一例を示すブロック図である。
図2に示すボード200は、相互に接続された複数の演算処理装置100及びメモリMEM4を有する。例えば、ボード200は、複数の演算処理装置100及びメモリMEM4が搭載されたボードの形態を有してもよい。また、複数の演算処理装置100は、マルチチップパッケージに搭載されてもよい。この際、複数の演算処理装置100は、放熱性を高めるために、基板上に並べて配置されることが好ましい。
【0014】
図2では、ボード200は、4個の演算処理装置100を有するが、演算処理装置100の数は、4個に限定されず、1個以上であればよい。メモリMEM4は、4個の演算処理装置100に共通に設けられているが、各演算処理装置100に対応して設けられてもよい。複数の演算処理装置100を有するボード200は、1つの演算処理装置として動作する。ボード200が複数の演算処理装置100を有する場合、各演算処理装置100又はボード200は、最上位の第2ブロックとして機能されてもよい。
【0015】
各演算処理装置100において、各第3階層ブロックBLK3のメモリMEM3は、メモリMEM4と、第3階層ブロックBLK3内の各第2階層ブロックBLK2のメモリMEM2に接続され、データを相互に転送可能である。また、メモリMEM4から各メモリMEM3と、各メモリMEM3から各メモリMEM2には、それぞれデータ転送命令及び演算命令が転送されてもよい。
【0016】
各メモリMEM2は、第2階層ブロックBLK2内の各演算ユニットOPUに搭載されるメモリMEM1に接続され、データを相互に転送可能である。各メモリMEM2からメモリMEM1には、データ転送命令及び演算命令が転送されてもよい。各第1階層ブロックBLK1及び各演算ユニットOPUは、レジスタを有してもよい。
【0017】
メモリMEM4は、ホスト300に搭載されるホストメモリHOSTMとの間でデータを相互に転送可能である。ホストメモリHOSTMからメモリMEM4には、データ転送命令及び演算命令が転送されてもよい。なお、
図2に示すデータの転送経路とは別に、メモリMEM4から各メモリMEM3、各メモリMEM3から各メモリMEM2、及び各メモリMEM2から各メモリMEM1にデータ転送命令及び演算命令を転送する転送経路(不図示)が設けられてもよい。
【0018】
ホストメモリHOSTMとメモリMEM4とは、例えば、PCIe(Peripheral Component Interconnect express)インタフェースを介してデータ及び命令等の情報を送受信してもよい。また、ホストメモリHOSTMとメモリMEM4との情報の転送は、DMA(Direct Memory Access)により実行されてもよい。
【0019】
ボード200の各演算処理装置100は、ホスト300から受信する命令(データ転送命令及び演算命令)に基づいて、ホスト300から受信するデータを使用して演算処理を実行する。ホスト300から演算処理装置100に送信される各種の命令は、情報処理装置400により生成され、情報処理装置400からホスト300に転送され、ホストメモリHOSTMに格納される。情報処理装置400は、例えば、サーバでもよい。
【0020】
情報処理装置400は、内蔵するCPU(Central Processing Unit)等のプロセッサが実行するプログラムにより、演算処理装置100が実行する命令列を生成するコンパイラ500(コードジェネレータ)として機能する。例えば、情報処理装置400のプロセッサは、情報処理装置400に搭載されるメモリに格納された命令生成プログラムを実行することで命令生成方法を実行し、命令列を生成する。情報処理装置400は、命令生成装置の一例である。情報処理装置400とホスト300との間の破線の矢印は、コンパイラ500が生成した命令列がホスト300に転送されることを示す。なお、命令列の転送は、ネットワークを介して行われてもよい。
【0021】
例えば、コンパイラ500は、ボード200に深層学習を実行させる命令(命令コード)を生成する。この際、例えば、コンパイラ500は、深層学習用の汎用のライブラリ(フレームワーク)を使用して生成された学習モデルに基づいて、ボード200に深層学習を効率的に実行させる命令列を生成する。例えば、コンパイラ500は、データの転送元から転送先への移動を指示するクエリの列を、同時に処理可能な複数のクエリにまとめ、まとめた複数のクエリ毎に1つ又は複数のデータ転送命令を示す命令コード等を生成する。これにより、ボード200による深層学習の計算速度の向上が可能になり、深層学習に掛かる計算時間の短縮が可能になる。特に限定されないが、例えば、命令コードは、アセンブリ言語による記述をアセンブルすることで得られる機械語でもよい。
【0022】
図3は、データの転送経路に応じたデータ転送の分類の一例を示す説明図である。
図2のコンパイラ500が生成するデータ転送命令は、隣接する階層のブロックBLK間でデータを移動させる命令を含む。
図3に示す矢印は、データ転送命令によるデータ転送の経路を示す。例えば、1本の矢印で示すデータ転送は、1つ又は複数のデータ転送命令により実現される。
図3に示す黒丸は、データ転送時にデータがメモリMEMを経由することを示す。
図3に示す演算処理装置100の平面図において、第2階層ブロックBLK2の1つの16個の第1階層ブロックBLK1に示した数値は、第1階層ブロックBLK1の識別子を示す。数値を示していない他の第2階層ブロックBLK2の16個の第1階層ブロックBLK1にも、同じ識別子が割り当てられる。なお、第1階層ブロックBLK1の識別子は、鏡面対称で割り当てられてもよい。
【0023】
また、図示を省略するが、各第1階層ブロックBLK1内の4個の演算ユニットOPUにも
図1に示したように0番から3番までの識別子が順次割り当てられる。各第3階層ブロックBLK3内の8個の第2階層ブロックBLK2にも0番から7番までの識別子が順次割り当てられる。各演算処理装置100内の4個の第3階層ブロックBLK3にも0番から3番までの識別子が順次割り当てられる。さらに、ボード200内の4個の演算処理装置100にも0番から3番までの識別子が順次割り当てられる。
【0024】
なお、各要素に割り当てられる識別子は、一例であり、各要素を識別可能な識別子であれば番号に限定されない。例えば、識別子として、各要素の位置を識別可能なアドレスが使用されてよい。アドレスは、メモリのアドレスであってもよい。また、識別子として、レジスタの番号が使用されてもよい。
【0025】
データ転送命令により実行されるデータ転送として、第1階層ブロックBLK1内での演算ユニットOPU間のデータ転送がある。また、データ転送命令により実行されるデータ転送として、第2階層ブロックBLK2内での第1階層ブロックBLK1間のデータ転送、及び第3階層ブロックBLK3内での第2階層ブロックBLK2間のデータ転送がある。さらに、データ転送命令により実行されるデータ転送として、演算処理装置100内での第3階層ブロックBLK3間のデータ転送がある。
【0026】
これらデータ転送を組み合わせることで、分類1から分類4に示すデータ転送が実現される。なお、分類1から分類4のデータ転送は一例である。例えば、ブロックの階層数が増える場合、分類数も増える。また、
図3では、説明を分かりやすくするために、分類1から分類4の各々に対応して1つのデータ転送が示されるが、実際には、各演算処理装置100は、分類毎に複数のデータ転送を実行可能である。分類1から分類4のデータ転送の各々は、演算ユニットOPU間又は第1階層ブロックBLK1間において、任意のアドレスが割り当てられるメモリMEMのデータを別のアドレスが割り当てられるメモリMEMに移動させる1つのクエリに対応する。分類1は、第1階層ブロックBLK1内での演算ユニットOPU(メモリMEM1またはレジスタ)間のデータ転送であり、データは、メモリMEM2、MEM3、MEM4を経由しない。
【0027】
分類2は、第2階層ブロックBLK2内での第1階層ブロックBLK1間のデータ転送であり、データを経由させるブロックBLKの階層数は、1つ(第2階層ブロックBLK2)である。分類3は、第3階層ブロックBLK3内での異なる第2階層ブロックBLK2に属する第1階層ブロックBLK1間のデータ転送であり、データを経由させるブロックBLKの階層数は、2つ(第2階層ブロックBLK2及び第3階層ブロックBLK3)である。
【0028】
分類4は、演算処理装置100内での異なる第3階層ブロックBLK3に属する第1階層ブロックBLK1間のデータ転送であり、データを経由させるブロックBLKの階層数は、3つ(第2階層ブロックBLK2、第3階層ブロックBLK3及び演算処理装置100(メモリMEM4))である。なお、ボード200内の4個の演算処理装置100の各々は、他の3個の演算処理装置100とは独立に、分類1から分類4のデータ転送を実行可能である。
【0029】
例えば、コンパイラ500は、データの転送元の識別子が互いに同じであり、かつ、データの転送先の識別子が互いに同じである複数のデータ転送を共通に実行する少なくとも1つのデータ転送命令を生成可能である。例えば、データ転送命令は、分類1から分類4のデータ転送の各々について生成されてもよい。データ転送命令を分類毎に生成することで、同じような経路を通るデータの転送を容易にまとめることができ、複数のデータ転送を共通に実行する少なくとも1つのデータ転送命令を容易に生成することができる。なお、データ転送命令は、分類2から分類4に含まれるデータ転送経路のうちの一部のデータ転送経路でのデータ転送に対して生成されてもよい。
【0030】
また、コンパイラ500は、データ転送命令の各々において、一部のデータの転送先(メモリMEM1、MEM2、MEM3、MEM4またはレジスタ等の記憶部)への格納を無効にするマスク情報(オプション情報)をデータ転送命令に付加してもよい。これにより、マスク情報により指定される転送先へのデータの書き込みを抑止することができる。換言すれば、1つのデータ転送命令で実行可能な複数のデータ転送のうち、任意のデータの転送先への書き込みを実行することができる。なお、マスク情報によるデータ転送のマスク(無効化)は、データの転送元からの読み出しをマスク(無効化)することで実行されてもよい。
【0031】
例えば、分類1において、演算処理装置100の512個の第1階層ブロックBLK1の各々での一対の演算ユニットOPU間のデータ転送は、少なくとも1つのデータ転送命令により実行可能である。分類1に含まれる複数のデータ転送は、データの転送元の演算ユニットOPUの識別子が互いに同じで、かつ、データの転送先の演算ユニットOPUの識別子が互いに同じ場合、共通する少なくとも1つのデータ転送命令により実行可能である。ここで、分類1での識別子の同一性は、演算ユニットOPUに付与された識別子だけでなく、演算ユニットOPU内のレジスタの識別子又はメモリMEM1の識別子を用いて判断してもよい。
【0032】
なお、分類1のデータ転送を実行するデータ転送命令は、データの転送先の演算ユニットOPUへのデータの格納を、データ転送命令に付加するマスク情報によりマスクすることができる。これにより、データの転送元を示すアドレスとデータの転送先を示すアドレスとがテータ転送命令で指定される場合にも、任意の演算ユニットOPU間のデータ転送を実行することができる。例えば、分類1のデータ転送の各々は、1つの転送元から1つの転送先にデータを転送するユニキャスト命令により実行されてもよい。
【0033】
分類2において、演算処理装置100の32個の第2階層ブロックBLK2の各々での1つの第1階層ブロックBLK1から別の第1階層ブロックBLK1へのデータ転送は、少なくとも1つのデータ転送命令により実行可能である。例えば、分類2において、データの転送元の識別子が互いに同じで、データの転送先の識別子が互いに同じデータ転送は、共通する少なくとも1つのデータ転送命令(例えば、マルチキャスト命令)により実行可能である。例えば、分類2のデータ転送の各々は、ユニキャスト命令により実行されてもよく、ユニキャスト命令とマルチキャスト命令とを組み合わせて実行されてもよい。
【0034】
分類2において、転送元の識別子の同一性は、データの転送元の演算ユニットOPU及び第1階層ブロックBLK1のそれぞれの識別子が互いに同じ場合に判断されてもよい。同様に、分類2において、データの転送先の識別子の同一性は、データの転送元の演算ユニットOPU及び第1階層ブロックBLK1のそれぞれの識別子が互いに同じ場合に判断されてもよい。ここで、分類2での識別子の同一性は、上記に加えて演算ユニットOPU内のレジスタの識別子、メモリMEM1の識別子、又はメモリMEM2の識別子を用いて判断してもよい。
【0035】
分類3において、第1階層ブロックBLK1と第2階層ブロックBLK2との間でのデータ転送は、少なくとも1つのデータ転送命令(例えば、ユニキャスト命令)により実行可能である。また、分類3において、演算処理装置100の4個の第3階層ブロックBLK3の各々での第2階層ブロックBLK2間のデータ転送は、少なくとも1つのデータ転送命令(例えば、マルチキャスト命令)により実行可能である。例えば、マルチキャスト命令は、転送元の数及び転送先の数に応じて、複数種の命令が用意されている。ユニキャスト命令及びマルチキャスト命令等の命令については、
図6及び
図7でも説明される。例えば、分類3において、データの転送元の識別子が互いに同じで、データの転送先の識別子が互いに同じデータ転送は、共通する少なくとも1つのデータ転送命令により実行可能である。
【0036】
分類3において、第1階層ブロックBLK1と第2階層ブロックBLK2との間でのデータ転送の転送元の識別子の同一性は、データの転送元の演算ユニットOPU、第1階層ブロックBLK1及び第2階層ブロックBLK2のそれぞれの識別子が互いに同じ場合に判断されてもよい。同様に、分類3において、第1階層ブロックBLK1と第2階層ブロックBLK2との間でのデータ転送の転送先の識別子の同一性は、データの転送先の演算ユニットOPU、第1階層ブロックBLK1及び第2階層ブロックBLK2のそれぞれの識別子が互いに同じ場合に判断されてもよい。
【0037】
また、分類3において、第2階層ブロックBLK2間のデータ転送の転送元の識別子の同一性は、データの転送元の第2階層ブロックBLK2の識別子が互いに同じ場合に判断されてもよい。同様に、分類3において、第2階層ブロックBLK2間のデータ転送の転送先の識別子の同一性は、データの転送先の第2階層ブロックBLK2の識別子が互いに同じ場合に判断されてもよい。ここで、分類3での識別子の同一性は、演算ユニットOPU内のレジスタの識別子、メモリMEM1の識別子、メモリMEM2の識別子、又はメモリMEM3の識別子を用いて判断してもよい。
【0038】
分類4において、第1階層ブロックBLK1と第2階層ブロックBLK2との間でのデータ転送は、分類3と同様に、少なくとも1つのデータ転送命令(例えば、ユニキャスト命令)により実行可能である。分類4において、第2階層ブロックBLK2と第3階層ブロックBLK3との間でのデータ転送は、少なくとも1つのデータ転送命令(例えば、ユニキャスト命令)により実行可能である。また、分類4において、演算処理装置100内での異なる第3階層ブロックBLK3間でのデータ転送は、少なくとも1つのデータ転送命令(例えば、マルチキャスト命令)により実行可能である。
【0039】
分類4において、第1階層ブロックBLK1と第2階層ブロックBLK2との間でのデータ転送の転送元の識別子の同一性は、分類3と同様に、データの転送元の演算ユニットOPU、第1階層ブロックBLK1及び第2階層ブロックBLK2のそれぞれの識別子が互いに同じ場合に判断されてもよい。同様に、分類4において、第1階層ブロックBLK1と第2階層ブロックBLK2との間でのデータ転送の転送先の識別子の同一性は、データの転送先の演算ユニットOPU、第1階層ブロックBLK1及び第2階層ブロックBLK2のそれぞれの識別子が互いに同じ場合に判断されてもよい。
【0040】
分類4において、第2階層ブロックBLK2と第3階層ブロックBLK3との間でのデータ転送の転送元の識別子の同一性は、第2階層ブロックBLK2及び第3階層ブロックBLK3のそれぞれの識別子が互いに同じ場合に判断されてもよい。同様に、分類4において、第2階層ブロックBLK2と第3階層ブロックBLK3との間でのデータ転送の転送先の識別子の同一性は、第2階層ブロックBLK2及び第3階層ブロックBLK3のそれぞれの識別子が互いに同じ場合に判断されてもよい。
【0041】
また、分類4において、第3階層ブロックBLK3間のデータ転送の転送元の識別子の同一性は、データの転送元の第3階層ブロックBLK3の識別子が互いに同じ場合に判断されてもよい。同様に、分類4において、第3階層ブロックBLK3間のデータ転送の転送先の識別子の同一性は、データの転送先の第3階層ブロックBLK3の識別子が互いに同じ場合に判断されてもよい。ここで、分類4での識別子の同一性は、演算ユニットOPU内のレジスタの識別子、メモリMEM1の識別子、メモリMEM2の識別子、又はメモリMEM3の識別子を用いて判断してもよい。
【0042】
分類2から分類4のデータ転送で転送されるデータは、演算ユニットOPUから出力され、他の演算ユニットOPUに入力される。このため、分類1で説明したように、データの転送先の演算ユニットOPUへのデータの格納をマスクすることで、分類毎に1つのデータ転送命令により実行されるデータ転送の一部を無効にすることができる。
【0043】
なお、データ転送は、分類分けをせずに実行してもよい。例えば、
図3に示す分類2、分類3及び分類4のデータ転送では、データの転送元の第1階層ブロックBLK1の識別子が"4"である。なお、識別子は、第1階層ブロックBLK1内のレジスタの番号等を含む識別子でもよい。この場合、第1階層ブロックBLK1から第2階層ブロックBLK2(メモリMEM2)へのデータ転送は、1つのデータ転送命令により実行してもよい。また、
図3に示す分類3及び分類4のデータ転送では、データの転送先の第1階層ブロックBLK1の識別子が"11"である。なお、識別子は、第1階層ブロックBLK1内のレジスタの番号等を含む識別子でもよい。この場合、第2階層ブロックBLK2(メモリMEM2)から第1階層ブロックBLK1へのデータ転送は、1つのデータ転送命令により実行してもよい。このように、分類に依らず、転送元と転送先の識別子が同じである複数のデータ転送命令を、共通する少なくとも1つのデータ転送命令により実行してもよい。
【0044】
図4は、
図2のコンパイラ500の動作の一例を示すフロー図である。すなわち、
図4に示すフローは、情報処理装置400のCPU等が命令生成プログラムを実行することにより実現されるコンパイラ500による命令生成方法の一例を示す。
【0045】
まず、ステップS10において、コンパイラ500は、ボード200に深層学習を実行させる複数のクエリを外部から順次入力する。次に、ステップS20において、コンパイラ500は、入力したクエリの各々を分類1から分類4のいずれかに分類する。次に、ステップS30において、コンパイラ500は、入力した全てのクエリを分類した場合、ステップS40を実行し、分類していないクエリが残っている場合、ステップS20に戻る。
【0046】
ステップS40において、コンパイラ500は、分類毎に1つのデータ転送命令で実行可能なデータ転送をグループに分ける。すなわち、グループは、1つのデータ転送命令に対応する。これにより、複数のデータを並列に転送できる共通のデータ転送命令をグループ毎に少なくとも1つ生成することが可能になる。この際、コンパイラ500は、分類毎に、
図3に示した階層が隣り合うブロックBLK間でのデータ転送を少なくとも1つのグループに分ける。例えば、分類3では、コンパイラ500は、第1階層ブロックBLK1と第2階層ブロックBLK2間でのデータ転送と、第2階層ブロックBLK2及び第3階層ブロックBLK3との間でのデータ転送のそれぞれにおいて、データ転送を少なくとも1つのグループに分ける。
【0047】
次に、ステップS50において、コンパイラ500は、ステップS40で分けたデータ転送のグループ毎にデータ転送命令を生成する。例えば、コンパイラ500がグループ毎に生成するデータ転送命令は、データを1つの転送先に転送する複数種のユニキャスト命令のいずれか、又は、データを複数の転送先に転送する複数種のマルチキャスト命令のいずれかを含む。コンパイラ500は、グループ毎に生成したユニキャスト命令又はマルチキャスト命令を組み合わせることで、例えば、階層が隣り合うブロックBLK間でのデータ転送を最小限のデータ転送命令の数により実行することができる。
【0048】
なお、例えば、階層が隣り合う2つのブロックBLK間でのデータ転送を複数種のマルチキャスト命令を使用して実行可能な場合、コンパイラ500は、ブロックBLK間でのデータ転送の少なくとも一部について、命令数が少ないマルチキャスト命令の組み合わせと実行順とを、動的計画法を使用して決定してもよい。ここで、動的計画法は対象となる問題を再帰的に複数の部分問題に分割し、分割した部分問題の計算結果を再利用しながら解いていく手法を含む。また、階層が隣り合う2つのブロックBLK間でのデータ転送に複数種のユニキャスト命令の少なくともいずれかを使用して実行可能な場合、コンパイラ500は、複数種のマルチキャスト命令の後に実行されるユニキャスト命令を生成する。なお、演算処理装置100は、コンパイラ500により生成され、ホスト300から送信されるデータ転送命令を、コンパイラ500が生成した順に実行する。
【0049】
次に、ステップS60において、コンパイラ500は、全てのクエリから命令を生成した場合、ステップS70を実行し、命令を生成していないクエリが残っている場合、ステップS50に戻る。ステップS70において、コンパイラ500は、ステップS50で生成した命令を生成順に出力し、
図4に示す動作を終了する。
【0050】
以上、この実施形態では、コンパイラ500は、複数のクエリに含まれるデータ転送のうち、複数のデータ転送を並列に実行する少なくとも1つのデータ転送命令を、データを経由させるブロックBLKの階層数に応じた分類毎に生成できる。これにより、演算ユニットOPUを含むブロックBLKが階層化された演算処理装置100において、従来より少ない数のデータ転送命令により、多量のデータをブロックBLK間で移動することができる。すなわち、コンパイラ500は、ボード200および演算処理装置100のアーキテクチャに合わせて、データ転送を従来より少ないコストで実行可能なデータ転送命令を生成することができる。この結果、演算処理装置100又はボード200による深層学習に掛かる計算時間を短縮することができる。
【0051】
例えば、
図3に示す分類3のデータ転送において、演算処理装置100は、第1階層ブロックBLK1から第2階層ブロックBLK2への複数のデータ転送及び第2階層ブロックBLK2から第1階層ブロックBLK1への複数のデータ転送のそれぞれを最小限の命令数で実行可能になる。また、分類3のデータ転送において、演算処理装置100は、第3階層ブロックBLK3を経由する第2階層ブロックBLK2間の複数のデータ転送を最小限の命令数で実行できる。
【0052】
一方、例えば、分類3のデータ転送において、クエリをまとめずに第3階層ブロックBLK3内の2つの第1階層ブロックBLK1間でデータ転送を実行する場合、各データ転送は、4つのデータ転送命令を使用して実行される。4つのデータ転送命令は、第1階層ブロックBLK1から第2階層ブロックBLK2、第2階層ブロックBLK2から第3階層ブロックBLK3、第3階層ブロックBLK3から第2階層ブロックBLK2及び第2階層ブロックBLK2から第1階層ブロックBLK1にデータを転送する命令である。この場合、各第3階層ブロックBLK3での分類3のデータ転送に4命令が必要になる。
【0053】
各演算処理装置100は、4個の第3階層ブロックBLK3を有し、ボード200は、16個の第3階層ブロックBLK3を有する。したがって、クエリをまとめずに分類3のデータ転送を実行する場合、各演算処理装置100では、16命令が必要になり、4個の演算処理装置100を有するボード200では、64命令が必要になる。この実施形態では、各演算処理装置100およびボード200は、グループ毎に少なくとも1つの共通のデータ転送命令を使用して、データ転送命令毎に複数のデータ転送を並列に実行できる。この際、各演算処理装置100は、第1階層ブロックBLK1及び第2階層ブロックBLK2、第2階層ブロックBLK2の各々にSIMDタイプのデータ転送命令を発行してもよい。この場合、第1階層ブロックBLK1及び第2階層ブロックBLK2、第2階層ブロックBLK2の各々に個別のデータ転送命令を発行する場合に比べて、少ない命令数で多数のデータ転送を並列に実行することができる。例えば、ボード200全体で分類3のデータ転送を4命令で実行することができる。これは、ボード200全体で分類3のデータ転送を64命令で実行する場合のほぼ6%である。なお、1つのデータ転送命令で実行される複数のデータ転送の一部を、マスク情報を使用してマスク(無効化)してもよい。
【0054】
図5は、別の実施形態におけるボード200及びホスト300を含むシステムと、演算処理装置100に実行させる命令を生成する情報処理装置400との一例を示すブロック図である。ボード200及びホスト300を含むシステムの構成は、
図2と同様である。情報処理装置400は、内蔵するCPU等のプロセッサが実行するプログラムにより、演算処理装置100が実行する命令列を生成するコンパイラ500A(コードジェネレータ)として機能する。
【0055】
図2と同様に、コンパイラ500Aは、ボード200に深層学習を実行させる命令(命令コード)を生成する。この際、コンパイラ500Aは、ボード200に実行させる複数のデータ転送命令の一部を、動的計画法を使用して決定する。例えば、コンパイラ500Aは、階層が隣り合う2つのブロックBLK間でのデータ転送の少なくとも一部について、命令数を少なくするマルチキャスト命令の組み合わせと実行順とを動的計画法を使用して決定する。動的計画法を使用することで、データ転送の規模の増加により指数関数的に増えるデータ転送命令の組み合わせの中から不要な組み合わせを排除できるため、データ転送命令の数を最小にする組み合わせを許容される時間内で決定することが可能になる。また、動的計画法を使用することで、命令数の少ないデータ転送命令の組み合わせを見つけることができるため、ボード200による深層学習の計算速度の向上が可能になり、深層学習に掛かる計算時間の短縮が可能になる。
【0056】
図6は、
図5の演算処理装置100が実行可能なデータ転送命令の一例を示す説明図である。
図6では、第2階層ブロックBLK2と第1階層ブロックBLK1との間のデータ転送命令と、第3階層ブロックBLK3を介した第2階層ブロックBLK2間のデータ転送命令と、第2階層ブロックBLK2、第3階層ブロックBLK3間のデータ転送命令とが例示される。なお、演算処理装置100が実行可能なデータ転送命令は、
図6に示されるものに限定されない。例えば、第2階層ブロックBLK2と第1階層ブロックBLK1との間のデータ転送命令は、第2階層ブロックBLK2に供給され、第2階層ブロックBLK2、第3階層ブロックBLK3間のデータ転送命令は、第3階層ブロックBLK3に供給される。
【0057】
第2階層ブロックBLK2と第1階層ブロックBLK1との間のデータ転送命令は、ユニキャスト命令を含む。ユニキャスト命令では、各第2階層ブロックBLK2において、メモリMEM2内又はメモリMEM1内のデータが移動される。ブロードキャスト命令では、各第2階層ブロックBLK2において、メモリMEM2内のデータが第2階層ブロックBLK2内の16個の第1階層ブロックBLK1内のメモリMEM1に移動される。なお、データの移動は、データのコピーを示し、データが上書きされない限り、元のデータは残る。
【0058】
第2階層ブロックBLK2間のデータ転送命令は、3種類のマルチキャスト命令を含む。第2階層ブロックBLK2間のデータ転送命令では、第3階層ブロックBLK3を経由してデータが移動される。マルチキャスト命令によるデータの移動については、
図4で説明される。第2階層ブロックBLK2、第3階層ブロックBLK3間のデータ転送命令は、ユニキャスト命令を含む。第3階層ブロックBLK3から第2階層ブロックBLK2にデータを移動するユニキャスト命令では、各第3階層ブロックBLK3において、第3階層ブロックBLK3のメモリMEM3から第2階層ブロックBLK2のメモリMEM2にデータが移動される。第2階層ブロックBLK2から第3階層ブロックBLK3にデータを移動するユニキャスト命令では、各第3階層ブロックBLK3において、第2階層ブロックBLK2のメモリMEM2から第3階層ブロックBLK3のメモリMEM3にデータが移動される。
【0059】
上述した実施形態と同様に、
図6に示す各命令は、移動元アドレス、移動先アドレス又は相対アドレスを使用して、複数の第1階層ブロックBLK1、複数の第2階層ブロックBLK2又は複数の第3階層ブロックBLK3でデータを並列に移動可能である。このため、演算処理装置100は、
図3に示す命令の1つを実行することで、多量のデータを並列に移動することができる。
【0060】
図7は、
図6のマルチキャスト命令によるデータ転送の一例を示す説明図である。
図7においても、各第3階層ブロックBLK3が8個の第2階層ブロックBLK2を有し、各第2階層ブロックBLK2が16個の第1階層ブロックBLK1を有する場合の例が示される。"r"は、各第3階層ブロックBLK3内の8個の第2階層ブロックBLK2の識別子を示す。"p"は、第2階層ブロックBLK2内のメモリMEM2においてデータの転送元のアドレスを示す。"q"は、第2階層ブロックBLK2内のメモリMEM2においてデータの転送先のアドレスを示す。
図7では、説明を簡単にするため、"p"、"q"のそれぞれは、値が固定されるとする。また、
図7では、"r"が"1"である場合の動作の例が示される。
【0061】
マルチキャスト命令"1 to 7"では、r番目の第2階層ブロックBLK2のメモリMEM2のアドレスpにあるデータが、r番目以外の7個の第2階層ブロックBLK2のメモリMEM2のアドレスqに移動される。マルチキャスト命令"1 to 7"は、8個の第2階層ブロックBLK2においてデータの移動元(="r")が8通りあるため、8種類のデータ転送が可能である。
【0062】
マルチキャスト命令"2 to 6"では、r番目の第2階層ブロックBLK2のメモリMEM2のアドレスpにあるデータが、0番目から3番目(但し、r番目を除く)の第2階層ブロックBLK2のメモリMEM2のアドレスqに移動される。また、4+r番目の第2階層ブロックBLK2のメモリMEM2のアドレスpにあるデータが、4番目から7番目(但し、4+r番目を除く)の第2階層ブロックBLK2のメモリMEM2のアドレスqに移動される。マルチキャスト命令"2 to 6"は、4個の第2階層ブロックBLK2毎にデータの移動元(="r")が4通りあるため、4種類のデータ転送が可能である。
【0063】
マルチキャスト命令"4 to 4"では、r番目、2+r番目、4+r番目、6+r番目の第2階層ブロックBLK2のメモリMEM2のアドレスpにあるデータが、それぞれ1-r番目、3-r番目、5-r番目、7-r番目の第2階層ブロックBLK2のメモリMEM2のアドレスqに移動される。マルチキャスト命令"4 to 4"は、2個の第2階層ブロックBLK2毎にデータの移動元(="r")が2通りあるため、2種類のデータ転送が可能である。このため、
図7に示す3種類のマルチキャスト命令により、14種類(8+4+2)のデータ転送が可能である。換言すれば、この実施形態では、演算処理装置100は、第2階層ブロックBLK2、第3階層ブロックBLK3間のデータ転送に、14種類のマルチキャスト命令を使用できる。
【0064】
図8は、第3階層ブロックBLK3内の8個の第2階層ブロックBLK2間のデータ転送の一例を示す説明図である。以下では、マルチキャスト命令"2 to 6"、"4 to 4"をこの順で実行することで、命令数が最小になることが動的計画法の一種である単一始点最短経路問題により決定されているとして、状態(A)を状態(D)にする例が説明される。状態(D)は、状態(A)における第2階層ブロックBLK2(1)-BLK2(7)のメモリMEM2のデータS1-S7が、第2階層ブロックBLK2(0)-BLK(6)のメモリMEM2にそれぞれ移動された状態である。
【0065】
まず、演算処理装置100は、状態(A)においてマルチキャスト命令"2 to 6"を実行する。これにより、第2階層ブロックBLK2(2)(k=2)のデータS2は、第2階層ブロックBLK2(0)、BLK2(1)、BLK2(3)に移動され、第2階層ブロックBLK2(6)(4+k=6)のデータS6は、第2階層ブロックBLK2(4)、BLK2(5)、BLK2(7)に移動され、状態(B)になる。なお、各マルチキャスト命令では、第2階層ブロックBLK2のメモリMEM2内のデータは、メモリMEM3を経由して他の第2階層ブロックBLK2のメモリMEM2に転送される。
【0066】
次に、演算処理装置100は、状態(B)においてマルチキャスト命令"4 to 4"を実行する。これにより、第2階層ブロックBLK2(1)(k=1)のデータS1は、第2階層ブロックBLK2(0)に移動され、第2階層ブロックBLK2(3)のデータS3は、第2階層ブロックBLK2(2)に移動される。第2階層ブロックBLK2(5)のデータS5は、第2階層ブロックBLK2(4)に移動され、第2階層ブロックBLK2(7)のデータS7は、第2階層ブロックBLK2(6)に移動され、状態(C)になる。
【0067】
次に、演算処理装置100は、全てのマルチキャスト命令の実行後の状態(C)においてユニキャスト命令を実行する。これにより、第2階層ブロックBLK2(4)のデータS4は、第2階層ブロックBLK2(3)に移動され、状態(D)になり、目的のデータ転送が完了する。なお、状態(C)から状態(D)では、データS4を第3階層ブロックBLK3のメモリMEM3に転送するユニキャスト命令と、データS4をメモリMEM3から第2階層ブロックBLK2(3)に転送するユニキャスト命令とが実行される。これにより、2つのマルチキャスト命令と2つのユニキャスト命令とにより、
図7に示すデータ転送を実行することができる。
【0068】
以下では、
図8に示す状態の変化を一般化する例が説明される。例えば、第2階層ブロックBLK2(0)-BLK2(7)のアドレスsrcにあるデータをそれぞれS0,S1,...,S7とする。アドレスsrcは、転送元アドレスである。上述したように、マルチキャスト命令とユニキャスト命令とを組み合わせて、最小の命令数で第2階層ブロックBLK2(0)-BLK2(7)のアドレスdst(srcと異なるアドレス)にデータD0,D1,...,D7が配置される。アドレスdstは、転送先アドレスである。ここで、"データD0,...,D7∈{データS0,...,S7,Wild}"である。Wildは何が配置されてもよく、目的がないデータを表す。例えば、"D0,...,D7=S1,...,S7,Wild"である。
【0069】
次に、動的計画法の一種である単一始点最短経路問題によるスケジューリングが説明される。ユニキャスト命令は、データ転送の最後の調整に使用されるため、最後のデータ転送で使用される。すなわち、所定数の複数種のマルチキャスト命令の列が実行された後、所定数のユニキャスト命令の列が実行される。以下では、まず、おおよその考え方が説明された後に、単一始点最短経路問題への帰着が説明される。
【0070】
マルチキャスト命令の列によって変化する状態は、組(x0,x1,...,x7)で表されるとする。但し、各組の状態は、x0,...,x7∈{o,x,-}とする。"xk=o"(kは0-7のいずれか)は、k番目の第2階層ブロックBLK2(k)のアドレスdstがマルチキャスト命令の列によって更新され、Dkが配置されていることを表わす。"xk=x"は、k番目の第2階層ブロックBLK2(k)のアドレスdstがマルチキャスト命令の列によって更新され、Dkが配置されていないことを表わす。"xk=-"は、k番目の第2階層ブロックBLK2(k)のアドレスdstがマルチキャスト命令の列によって更新されないことを表す。
【0071】
単一始点最短経路問題では、最適なマルチキャスト命令の列を基本的に全パターン探索するが、ここでは、コンパイラ500Aは、後で使う命令から順に決めていく。実際の命令の実行順では、例えば、
図7に示すように、マルチキャスト命令"2 to 6@2"(k=2)とマルチキャスト命令"4 to 4@1"(k=1)とがこの順に使用される。しかしながら、コンパイラ500Aは、動的計画法を使用する場合、まず、マルチキャスト命令"4 to 4@1"によってどのような状態に変化するかを検討する。例えば、状態"s0=(-,-,…,-)"から"S1,-,S3,-,S5,-,S7,-"に変化するため、状態"s1=(o,-,o,-,o,-,o,-)"になる。
【0072】
次に、コンパイラ500Aは、マルチキャスト命令"2 to 6@2"をマルチキャスト命令"4 to 4@1"の前に挿入することを検討する。すると、"S1,S2,S3,S2,S5,S6,S7,S6"となるため、状態"s2=(o,o,o,x,o,o,o,x)となる。このように、複数種のマルチキャスト命令のいずれを先頭側に挿入しても、"o"及び"x"は変化せず、"-"のみが変化する。
【0073】
次に、単一始点最短経路問題への帰着が検討される。まず、各状態に対応する頂点が用意される。V(s)は、状態sに対応する頂点を表すこととする。初期状態を"s0=(-,-,…,-)"とし、初期状態からの単一始点最短経路問題に帰着することを考える。遷移は、1つのマルチキャスト命令を先頭に挿入することによって行われる。
【0074】
正確には、各頂点V(s)及び各マルチキャスト命令m(mは14種類のマルチキャスト命令のいずれか)について、V(s)からV(s')へコスト1の辺が張られる。ここで、"s'"は、"s0"から"s"に変化させるためのマルチキャスト命令の列の先頭にマルチキャスト命令mを挿入し、初期状態に対してマルチキャスト命令mから順に実行した結果の状態を表す。例えば、上述の例で"s=s1"、"m=Multicast 2 to 6@2"のとき、"s'=s2"である。また、"s0"から"s"に変化させるためのマルチキャスト列は、どれを取っても同じ"s'"になるはずである。
【0075】
コンパイラ500Aは、これによって構築された重み付き有向グラフの"s0"からの単一始点最短経路問題を解くことで、あり得る全ての状態sにするための最適なマルチキャスト命令の列を得ることができる。この後、コンパイラ500Aは、各"s"について、"(s0からsにするためのマルチキャスト命令数)+(sから(o,...,o)にするためのユニキャスト命令数)"が最小となるものを取得する。"sから(o,...,o)にするためのユニキャスト命令数"は、"(sのうちoでないものの数)×2"に等しくなる。
【0076】
以下、計算量と最適化について説明される。"o"と"x"は、同一視することができる。"x"は、最後にその個数に2倍されたコストが足されるため、辺のコストを+2すればよい。状態数が多いように見えるが、"o"と"x"の同一視により、マルチキャスト命令の性質上、15状態しかないことが示される。15状態は、第2階層ブロックBLK2の数に比例する。
【0077】
さらに、自己ループを除くと"-"が減る遷移しかなく、閉路がないため、直線的に計算することができる。この結果、計算量をさらに削減することができる。マルチキャスト命令の種類数が第2階層ブロックBLK2の個数に比例するとすれば、時間計算量は、"(第2階層ブロックBLK2の個数)^2"に比例する。
【0078】
図9は、
図5の情報処理装置400により実現されるコンパイラ500Aの動作の一例を示すフロー図である。すなわち、
図9に示すフローは、情報処理装置400のCPU等が命令生成プログラムを実行することにより実現されるコンパイラ500Aによる命令生成方法の一例を示す。
図4と同様の動作については、同じ符号を付し、詳細な説明は省略する。
【0079】
ステップS10、S20、S30、S40、S60、S70の処理は、
図4と同様である。ステップS40の後、ステップS42において、コンパイラ500Aは、グループ分けしたデータ転送のうち、階層が隣り合う2つのブロックBLK間でのデータ転送を実行するデータ転送命令がマルチキャスト命令を含むか否かを判定する。コンパイラ500Aは、マルチキャスト命令を含む場合、ステップS44を実行し、マルチキャスト命令を含まない場合、ステップS46を実行する。
【0080】
ステップS44において、コンパイラ500Aは、上述したように、動的計画法を使用して、ブロックBLK間でのデータ転送の少なくとも一部について、複数種のマルチキャスト命令の組み合わせと実行順を決定し、さらにマルチキャスト命令の後に実行するユニキャスト命令を決定する。コンパイラ500Aは、ステップS44の後、ステップS46を実行する。
【0081】
そして、ステップS46において、コンパイラ500Aは、マルチキャスト命令を含まないデータ転送については、ステップS40で分けたデータ転送のグループ毎にデータ転送命令を生成する。また、ステップS46において、コンパイラ500Aは、マルチキャスト命令を含むデータ転送については、ステップS44で決定したマルチキャスト命令とユニキャスト命令とを生成する。そして、コンパイラ500Aは、ステップ46の処理の後、ステップS60及びステップS70を実行し、
図9に示す動作を終了する。
【0082】
以上、この実施形態においても、上述した実施形態と同様に、コンパイラ500Aは、複数のクエリに含まれるデータ転送のうち、複数のデータ転送を並列に実行する少なくとも1つのデータ転送命令を、データを経由させるブロックの階層数に応じた分類毎に生成できる。これにより、演算ユニットOPUを含むブロックBLKが階層化された演算処理装置100において、従来より少ない数のデータ転送命令により、多量のデータをブロックBLK間で移動することができる。この結果、演算処理装置100又はボード200による深層学習に掛かる計算時間を短縮することができる。
【0083】
さらに、この実施形態では、コンパイラ500Aは、動的計画法を使用して、階層が隣り合う2つのブロックBLK間でのデータ転送を少ない命令数で実行させるデータ転送命令の組み合わせと実行順とを決定し、決定にしたがってデータ転送命令を生成する。これにより、コンパイラ500Aは、命令数が多くなる命令列の探索を打ち切ることができるため、探索空間を徐々に小さくすることができる。この結果、コンパイラ500Aでの計算量を最小限にして、命令数の少ない適切なデータ転送命令の組み合わせを見つけることができる。
【0084】
また、動的計画法において、使用するマルチキャスト命令を実行順が遅い順に探索することで、実行順が早いマルチキャスト命令により転送されたデータが、実行順が遅いマルチキャスト命令により書き換えられることを抑制することができる。これにより、マルチキャスト命令による無駄なデータ転送を抑制することができ、コンパイラ500Aは、命令数の少ない適切なマルチキャスト命令の組み合わせを生成できる。
【0085】
また、コンパイラ500Aは、マルチキャスト命令に比べてデータ転送の自由度が高く、かつ、データ転送効率が低いユニキャスト命令を、使用するマルチキャスト命令が決定した後に決定する。これにより、コンパイラ500Aは、データ転送効率が低いユニキャスト命令の使用数を最小限にすることができ、階層が隣接するブロックBLK間でのデータ転送に使用する命令数を最小限にすることができる。
【0086】
なお、この実施形態では、第3階層ブロックBLK3内での異なる第2階層ブロックBLK2に属する第1階層ブロックBLK1間のデータ転送(分類3)について、動的計画法を使用して、実行する命令数を最小限にする例が説明された。しかしながら、動的計画法により探索する適切な命令列は、分類3のデータ転送に限定されず、分類1、分類2又は分類4のデータ転送に使用する命令列でもよい。また、探索により決定する命令列は、マルチキャスト命令に限定されず、ユニキャスト命令以外の他の特殊な命令でもよい。ここで、特殊な命令は、例えば、複数個所にデータを並列に転送する命令である。
【0087】
前述した実施形態におけるホスト300又は情報処理装置400の一部又は全部は、ハードウェアで構成されていてもよいし、CPU又はGPU等が実行するソフトウェア(プログラム)の情報処理で構成されてもよい。ソフトウェアの情報処理で構成される場合には、前述した実施形態における各装置の少なくとも一部の機能を実現するソフトウェアを、CD-ROM(Compact Disc-Read Only Memory)、USB(Universal Serial Bus)メモリ等の非一時的な記憶媒体(非一時的なコンピュータ可読媒体)に収納し、コンピュータに読み込ませることにより、ソフトウェアの情報処理を実行してもよい。また、通信ネットワークを介して当該ソフトウェアがダウンロードされてもよい。さらに、ソフトウェアの処理の全部又は一部がASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)等の回路に実装されることにより、当該ソフトウェアによる情報処理がハードウェアにより実行されてもよい。
【0088】
ソフトウェアを収納する記憶媒体は、光ディスク等の着脱可能なものでもよいし、ハードディスク、メモリ等の固定型の記憶媒体であってもよい。また、記憶媒体は、コンピュータ内部に備えられてもよいし(主記憶装置、補助記憶装置等)、コンピュータ外部に備えられてもよい。
【0089】
図10は、
図2及び
図5に示したホスト300及び情報処理装置400のハードウェア構成の一例を示すブロック図である。情報処理装置400は、一例として、プロセッサ20と、主記憶装置30(例えば、DRAM等のメモリ)と、補助記憶装置40(メモリ)と、ネットワークインタフェース50と、デバイスインタフェース60と、を備え、これらがバス70を介して接続されたコンピュータとして実現されてもよい。例えば、プロセッサ20が命令生成プログラムを実行することで、
図4又は
図9で説明した動作が実行される。
【0090】
情報処理装置400は、各構成要素を一つ備えているが、同じ構成要素を複数備えていてもよい。また、
図10では、1台の情報処理装置400が示されているが、ソフトウェアが複数台の情報処理装置400にインストールされて、当該複数台の情報処理装置400のそれぞれがソフトウェアの同一の又は異なる一部の処理を実行してもよい。この場合、情報処理装置400のそれぞれがネットワークインタフェース50等を介して通信して処理を実行する分散コンピューティングの形態であってもよい。つまり、前述した実施形態における情報処理装置400は、1又は複数の記憶装置に記憶された命令を1台又は複数台の情報処理装置400が実行することで機能を実現するシステムとして構成されてもよい。また、端末から送信された情報をクラウド上に設けられた1台又は複数台の情報処理装置400で処理し、この処理結果を端末に送信するような構成であってもよい。
【0091】
図4のフローで説明した動作及び
図9のフローで説明した動作は、1又は複数のプロセッサ20を用いて、又はネットワークを介した複数台のコンピュータを用いて、並列処理で実行されてもよい。また、各種演算が、プロセッサ20内に複数ある演算コアに振り分けられて、並列処理で実行されてもよい。また、本開示の処理、手段等の一部又は全部は、ネットワークを介して情報処理装置400と通信可能なクラウド上に設けられたプロセッサ及び記憶装置の少なくとも一方により実現されてもよい。このように、前述した実施形態における情報処理装置400は、1台又は複数台のコンピュータによる並列コンピューティングの形態であってもよい。
【0092】
プロセッサ20は、少なくともコンピュータの制御又は演算のいずれかを行う電子回路(処理回路、Processing circuit、Processing circuitry、CPU、GPU、FPGA、ASIC等)であってもよい。また、プロセッサ20は、汎用プロセッサ、特定の演算を実行するために設計された専用の処理回路又は汎用プロセッサと専用の処理回路との両方を含む半導体装置のいずれであってもよい。また、プロセッサ20は、光回路を含むものであってもよいし、量子コンピューティングに基づく演算機能を含むものであってもよい。
【0093】
プロセッサ20は、情報処理装置400の内部構成の各装置等から入力されたデータやソフトウェアに基づいて演算処理を行ってもよく、演算結果や制御信号を各装置等に出力してもよい。プロセッサ20は、情報処理装置400のOS(Operating System)や、アプリケーション等を実行することにより、情報処理装置400を構成する各構成要素を制御してもよい。
【0094】
前述した実施形態における情報処理装置400は、1又は複数のプロセッサ20により実現されてもよい。ここで、プロセッサ20は、1チップ上に配置された1又は複数の電子回路を指してもよいし、2つ以上のチップあるいは2つ以上のデバイス上に配置された1又は複数の電子回路を指してもよい。複数の電子回路を用いる場合、各電子回路は有線又は無線により通信してもよい。
【0095】
主記憶装置30は、プロセッサ20が実行する命令及び各種データ等を記憶してもよく、主記憶装置30に記憶された情報がプロセッサ20により読み出されてもよい。補助記憶装置40は、主記憶装置30以外の記憶装置である。なお、これらの記憶装置は、電子情報を格納可能な任意の電子部品を意味するものとし、半導体のメモリでもよい。半導体のメモリは、揮発性メモリ又は不揮発性メモリのいずれでもよい。前述した実施形態における情報処理装置400において各種データ等を保存するための記憶装置は、主記憶装置30又は補助記憶装置40により実現されてもよく、プロセッサ20に内蔵メモリにより実現されてもよい。
【0096】
前述した実施形態における情報処理装置400が、少なくとも1つの記憶装置(メモリ)と、この少なくとも1つの記憶装置に接続(結合)される少なくとも1つのプロセッサで構成される場合、記憶装置1つに対して、少なくともプロセッサ20が接続されてもよい。また、プロセッサ1つに対して、少なくとも1つの記憶装置が接続されてもよい。また、複数のプロセッサのうち少なくとも1つのプロセッサが、複数の記憶装置のうち少なくとも1つの記憶装置に接続される構成を含んでもよい。また、複数台の情報処理装置400に含まれる記憶装置とプロセッサによって、この構成が実現されてもよい。さらに、記憶装置がプロセッサと一体になっている構成(例えば、L1キャッシュ、L2キャッシュを含むキャッシュメモリ)を含んでもよい。
【0097】
ネットワークインタフェース50は、無線又は有線により、通信ネットワーク600に接続するためのインタフェースである。通信ネットワーク600は、既存の通信規格に適合したもの等、適切なインタフェースを用いればよい。ネットワークインタフェース50により、通信ネットワーク600を介して接続された外部装置710と情報のやり取りが行われてもよい。なお、通信ネットワーク600は、WAN(Wide Area Network)、LAN(Local Area Network)、PAN(Personal Area Network)等の何れか又はそれらの組み合わせであってよく、情報処理装置400と外部装置710との間で情報のやり取りが行われるものであればよい。WANの一例としてインターネット等があり、LANの一例としてIEEE802.11やイーサネット(登録商標)等があり、PANの一例としてBluetooth(登録商標)やNFC(Near Field Communication)等がある。
【0098】
デバイスインタフェース60は、外部装置720と直接接続するUSB等のインタフェースである。
【0099】
外部装置710は、情報処理装置400とネットワークを介して接続されている装置である。外部装置720は、情報処理装置400と直接接続されている装置である。
【0100】
外部装置710又は外部装置720は、一例として、入力装置であってもよい。入力装置は、例えば、カメラ、マイクロフォン、モーションキャプチャ、各種センサ、キーボード、マウス、タッチパネル等のデバイスであり、取得した情報を情報処理装置400に与える。また、外部装置710又は外部装置720は、パーソナルコンピュータ、タブレット端末、スマートフォン等の入力部とメモリとプロセッサを備えるデバイスであってもよい。
【0101】
また、外部装置710又は外部装置720は、一例として、出力装置でもよい。出力装置は、例えば、LCD(Liquid Crystal Display)、有機EL(Electro Luminescence)パネル等の表示装置であってもよいし、音声等を出力するスピーカ等であってもよい。また、パーソナルコンピュータ、タブレット端末又はスマートフォン等の出力部とメモリとプロセッサを備えるデバイスであってもよい。
【0102】
また、外部装置710又は外部装置720は、記憶装置(メモリ)であってもよい。例えば、外部装置710はネットワークストレージ等であってもよく、外部装置720はHDD等のストレージであってもよい。
【0103】
また、外部装置710又は外部装置720は、前述した実施形態における情報処理装置400の構成要素の一部の機能を有する装置でもよい。つまり、情報処理装置400は、外部装置710又は外部装置720に処理結果の一部又は全部を送信してもよいし、外部装置710又は外部装置720から処理結果の一部又は全部を受信してもよい。
【0104】
本明細書(請求項を含む)において、「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)以外の他の要素を加えることも含む。
【0105】
本明細書(請求項を含む)において、「データを入力として/を用いて/データに基づいて/に従って/に応じて」等の表現(同様な表現を含む)が用いられる場合は、特に断りがない場合、データそのものを用いる場合や、データに何らかの処理を行ったもの(例えば、ノイズ加算したもの、正規化したもの、データから抽出した特徴量、データの中間表現等)を用いる場合を含む。また、「データを入力として/を用いて/データに基づいて/に従って/に応じて」何らかの結果が得られる旨が記載されている場合(同様な表現を含む)、特に断りがない場合、当該データのみに基づいて当該結果が得られる場合や、当該データ以外の他のデータ、要因、条件及び/又は状態にも影響を受けて当該結果が得られる場合を含む。また、「データを出力する」旨が記載されている場合(同様な表現を含む)、特に断りがない場合、データそのものを出力として用いる場合や、データに何らかの処理を行ったもの(例えば、ノイズ加算したもの、正規化したもの、データから抽出した特徴量、各種データの中間表現等)を出力として用いる場合を含む。
【0106】
本明細書(請求項を含む)において、「接続される(connected)」及び「結合される(coupled)」との用語が用いられる場合は、直接的な接続/結合、間接的な接続/結合、電気的(electrically)な接続/結合、通信的(communicatively)な接続/結合、機能的(operatively)な接続/結合、物理的(physically)な接続/結合等のいずれをも含む非限定的な用語として意図される。当該用語は、当該用語が用いられた文脈に応じて適宜解釈されるべきであるが、意図的に或いは当然に排除されるのではない接続/結合形態は、当該用語に含まれるものして非限定的に解釈されるべきである。
【0107】
本明細書(請求項を含む)において、「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)されていればよい。
【0108】
本明細書(請求項を含む)において、含有又は所有を意味する用語(例えば、「含む(comprising/including)」、「有する(having)」等)が用いられる場合は、当該用語の目的語により示される対象物以外の物を含有又は所有する場合を含む、open-endedな用語として意図される。これらの含有又は所有を意味する用語の目的語が数量を指定しない又は単数を示唆する表現(a又はanを冠詞とする表現)である場合は、当該表現は特定の数に限定されないものとして解釈されるべきである。
【0109】
本明細書(請求項を含む)において、ある箇所において「1つ又は複数(one or more)」、「少なくとも1つ(at least one)」等の表現が用いられ、他の箇所において数量を指定しない又は単数を示唆する表現(a又はanを冠詞とする表現)が用いられているとしても、後者の表現が「1つ」を意味することを意図しない。一般に、数量を指定しない又は単数を示唆する表現(a又はanを冠詞とする表現)は、必ずしも特定の数に限定されないものとして解釈されるべきである。
【0110】
本明細書において、ある実施形態の有する特定の構成について特定の効果(advantage/result)が得られる旨が記載されている場合、別段の理由がない限り、当該構成を有する他の1つ又は複数の実施形態についても当該効果が得られると理解されるべきである。但し、当該効果の有無は、一般に種々の要因、条件及び/又は状態に依存し、当該構成により必ず当該効果が得られるものではないと理解されるべきである。当該効果は、種々の要因、条件及び/又は状態が満たされたときに実施形態に記載の当該構成により得られるものに過ぎず、当該構成又は類似の構成を規定したクレームに係る発明において、当該効果が必ずしも得られるものではない。
【0111】
本明細書(請求項を含む)において、「最大化する(maximize)/最大化(maximization)」等の用語が用いられる場合は、グローバルな最大値を求めること、グローバルな最大値の近似値を求めること、ローカルな最大値を求めること、及びローカルな最大値の近似値を求めることを含み、当該用語が用いられた文脈に応じて適宜解釈されるべきである。また、これら最大値の近似値を確率的又はヒューリスティックに求めることを含む。同様に、「最小化する(minimize)/最小化(minimization)」等の用語が用いられる場合は、グローバルな最小値を求めること、グローバルな最小値の近似値を求めること、ローカルな最小値を求めること、及びローカルな最小値の近似値を求めることを含み、当該用語が用いられた文脈に応じて適宜解釈されるべきである。また、これら最小値の近似値を確率的又はヒューリスティックに求めることを含む。同様に、「最適化する(optimize)/最適化(optimization)」等の用語が用いられる場合は、グローバルな最適値を求めること、グローバルな最適値の近似値を求めること、ローカルな最適値を求めること、及びローカルな最適値の近似値を求めることを含み、当該用語が用いられた文脈に応じて適宜解釈されるべきである。また、これら最適値の近似値を確率的又はヒューリスティックに求めることを含む。
【0112】
本明細書(請求項を含む)において、複数のハードウェアが所定の処理を行う場合、各ハードウェアが協働して所定の処理を行ってもよいし、一部のハードウェアが所定の処理の全てを行ってもよい。また、一部のハードウェアが所定の処理の一部を行い、別のハードウェアが所定の処理の残りを行ってもよい。本明細書(請求項を含む)において、「1又は複数のハードウェアが第1の処理を行い、前記1又は複数のハードウェアが第2の処理を行う」等の表現(同様な表現を含む)が用いられている場合、第1の処理を行うハードウェアと第2の処理を行うハードウェアは同じものであってもよいし、異なるものであってもよい。つまり、第1の処理を行うハードウェア及び第2の処理を行うハードウェアが、前記1又は複数のハードウェアに含まれていればよい。なお、ハードウェアは、電子回路、電子回路を含む装置等を含んでよい。
【0113】
本明細書(請求項を含む)において、複数の記憶装置(メモリ)がデータの記憶を行う場合、複数の記憶装置のうち個々の記憶装置は、データの一部のみを記憶してもよいし、データの全体を記憶してもよい。また、複数の記憶装置のうち一部の記憶装置がデータを記憶する構成を含んでもよい。
【0114】
以上、本開示の実施形態について詳述したが、本開示は上記した個々の実施形態に限定されるものではない。特許請求の範囲に規定された内容及びその均等物から導き出される本発明の概念的な思想と趣旨を逸脱しない範囲において、種々の追加、変更、置き換え、部分的削除等が可能である。例えば、前述した実施形態において、数値又は数式を説明に用いている場合、これらは例示的な目的で示されたものであり、本開示の範囲を限定するものではない。また、実施形態で示した各動作の順序も例示的なものであり、本開示の範囲を限定するものではない。
【符号の説明】
【0115】
20 プロセッサ
30 主記憶装置
40 補助記憶装置
50 ネットワークインタフェース
60 デバイスインタフェース
70 バス
100 演算処理装置
200 ボード
300 ホスト
400 情報処理装置
500、500A コンパイラ
600 通信ネットワーク
710、720 外部装置
BLK1 第1階層ブロック
BLK2 第2階層ブロック
BLK3 第3階層ブロック
EX1、EX2 演算器
HOSTM ホストメモリ
MEM1、MEM2、MEM3、MEM4 メモリ
OPU 演算ユニット