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

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

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

特開2023-64233コンパイル装置、生成方法、チップ及び実行方法
<>
  • 特開-コンパイル装置、生成方法、チップ及び実行方法 図1
  • 特開-コンパイル装置、生成方法、チップ及び実行方法 図2
  • 特開-コンパイル装置、生成方法、チップ及び実行方法 図3
  • 特開-コンパイル装置、生成方法、チップ及び実行方法 図4
  • 特開-コンパイル装置、生成方法、チップ及び実行方法 図5
  • 特開-コンパイル装置、生成方法、チップ及び実行方法 図6
  • 特開-コンパイル装置、生成方法、チップ及び実行方法 図7
  • 特開-コンパイル装置、生成方法、チップ及び実行方法 図8
  • 特開-コンパイル装置、生成方法、チップ及び実行方法 図9
  • 特開-コンパイル装置、生成方法、チップ及び実行方法 図10
  • 特開-コンパイル装置、生成方法、チップ及び実行方法 図11
  • 特開-コンパイル装置、生成方法、チップ及び実行方法 図12
  • 特開-コンパイル装置、生成方法、チップ及び実行方法 図13
  • 特開-コンパイル装置、生成方法、チップ及び実行方法 図14
  • 特開-コンパイル装置、生成方法、チップ及び実行方法 図15
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023064233
(43)【公開日】2023-05-11
(54)【発明の名称】コンパイル装置、生成方法、チップ及び実行方法
(51)【国際特許分類】
   G06F 8/41 20180101AFI20230501BHJP
【FI】
G06F8/41 130
【審査請求】未請求
【請求項の数】12
【出願形態】OL
(21)【出願番号】P 2021174381
(22)【出願日】2021-10-26
(71)【出願人】
【識別番号】515130201
【氏名又は名称】株式会社Preferred Networks
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(72)【発明者】
【氏名】得居 誠也
【テーマコード(参考)】
5B081
【Fターム(参考)】
5B081CC28
(57)【要約】
【課題】木構造のトポロジにより接続された複数のメモリに対するテンソルの各要素の配置を適切に表現できるようにする。
【解決手段】木構造のトポロジにより接続され、分散配置された複数のメモリを有するチップにおいて実行されるマシンコードを生成するコンパイル装置であって、1又は複数のメモリと、1又は複数のプロセッサと、を備え、前記1又は複数のプロセッサは、処理対象のテンソルに対する前記木構造の所定の階層における分割数及びストライドに基づいて、前記処理対象のテンソルの各要素と、前記チップが有する前記複数のメモリ内のアドレスとを対応付けること、を実行する。
【選択図】図2
【特許請求の範囲】
【請求項1】
木構造のトポロジにより接続され、分散配置された複数のメモリを有するチップにおいて実行されるマシンコードを生成するコンパイル装置であって、
1又は複数のメモリと、
1又は複数のプロセッサと、を備え、
前記1又は複数のプロセッサは、
処理対象のテンソルに対する前記木構造の所定の階層における分割数及びストライドに基づいて、前記処理対象のテンソルの各要素と、前記チップが有する前記複数のメモリ内のアドレスとを対応付けること、
を実行するコンパイル装置。
【請求項2】
前記対応付けることには、
前記処理対象のテンソルを、前記木構造の階層ごとの分割数に従って分割し、分割した後の各要素が、各階層のいずれのブロックに属するかを各階層におけるストライドに従って特定すること、
が含まれる、請求項1に記載のコンパイル装置。
【請求項3】
前記対応付けることには、
最下層において特定されたブロックに属する各要素に、対応するメモリ内のアドレスを、最下層のストライドに従って対応付けること、
が含まれる、請求項2に記載のコンパイル装置。
【請求項4】
前記所定の階層の分割数は、縦方向の分割数と横方向の分割数とを含み、前記所定の階層のストライドは、縦方向のストライドと横方向のストライドとを含む、請求項1乃至3のいずれか1項に記載のコンパイル装置。
【請求項5】
前記処理対象のテンソルに対する前記木構造の所定の階層における分割数及びストライドは、ソースコードに記述されている、請求項1乃至4のいずれか1項に記載のコンパイル装置。
【請求項6】
前記ソースコードには、前記処理対象のテンソルに対して、2以上の階層における分割数及びストライドが記述されている、請求項5に記載のコンパイル装置。
【請求項7】
前記1又は複数のプロセッサは、ソースコードの記述に基づいて、前記木構造の所定の階層における分割数及びストライドを生成する、請求項1乃至4のいずれか1項に記載のコンパイル装置。
【請求項8】
請求項1乃至7のいずれか1項に記載のコンパイル装置を用いて、前記チップにおいて実行されるマシンコードを生成する生成方法。
【請求項9】
木構造のトポロジにより接続され、分散配置された複数のメモリを有するチップであって、
処理対象のテンソルに対する前記木構造の所定の階層における分割数及びストライドに基づいて、前記処理対象のテンソルの各要素に、前記チップが有する前記複数のメモリ内のアドレスが対応付けられたマシンコードを実行し、少なくとも、前記処理対象のテンソルの各要素の値を、各要素に対応付けられたアドレスに書き込む処理、又は、前記処理対象のテンソルの各要素の値を、各要素に対応付けられたアドレスから読み出す処理、のいずれかを行う、
チップ。
【請求項10】
前記処理対象のテンソルの各要素の値を、各要素に対応付けられたアドレスに書き込む際、書き込み先のメモリに応じてサイズを調整するパディング処理を行う、請求項9に記載のチップ。
【請求項11】
配列の形状が合致しないテンソル同士の演算を行う際、ブロードキャスト処理を行う、請求項9又は10に記載のチップ。
【請求項12】
木構造のトポロジにより接続され、分散配置された複数のメモリを有するチップによる、マシンコードの実行方法であって、
処理対象のテンソルに対する前記木構造の所定の階層における分割数及びストライドに基づいて、前記処理対象のテンソルの各要素に、前記チップが有する前記複数のメモリ内のアドレスが対応付けられたマシンコードを実行し、少なくとも、前記処理対象のテンソルの各要素の値を、各要素に対応付けられたアドレスに書き込む処理、又は、前記処理対象のテンソルの各要素の値を、各要素に対応付けられたアドレスから読み出す処理のいずれかを行う、
実行方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、コンパイル装置、生成方法、チップ及び実行方法に関する。
【背景技術】
【0002】
ソースコードを記述する際、ユーザは、テンソルの各要素をメモリ上のいずれの位置に配置するかを指定することができる。
【0003】
一方で、例えば、深層学習向けのアクセラレータチップは、木構造のトポロジにより接続された複数のメモリ(SRAM:Static Random Access Memory)が分散配置され、SIMD(Single Instruction/Multiple Data)アーキテクチャにより動作する場合がある。このため、当該アクセラレータチップを用いてテンソルの各要素を処理するにあたっては、当該テンソルの各要素を、複数のメモリのうちのいずれのメモリ上のいずれの位置に配置するかが重要となる。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特表2020-517006号公報
【特許文献2】特開2007-242017号公報
【特許文献3】特開平06-208501号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
本開示は、木構造のトポロジにより接続された複数のメモリに対するテンソルの各要素の配置を適切に表現できるようにする。
【課題を解決するための手段】
【0006】
本開示の一態様によるコンパイル装置は、例えば、以下のような構成を有する。即ち、
木構造のトポロジにより接続され、分散配置された複数のメモリを有するチップにおいて実行されるマシンコードを生成するコンパイル装置であって、
1又は複数のメモリと、
1又は複数のプロセッサと、を備え、
前記1又は複数のプロセッサは、
処理対象のテンソルに対する前記木構造の所定の階層における分割数及びストライドに基づいて、前記処理対象のテンソルの各要素と、前記チップが有する前記複数のメモリ内のアドレスとを対応付けることを実行する。
【図面の簡単な説明】
【0007】
図1】データ処理システムのシステム構成及び各装置のハードウェア構成の一例を示す図である。
図2】データ処理システムの各装置の機能構成の一例を示す第1の図である。
図3】アクセラレータチップのハードウェア構成の一例を示す図である。
図4】木構造のトポロジにより接続された複数のメモリの具体例を示す図である。
図5】レイアウトに関する記述の記述方法を示す図である。
図6】レイアウトに関する記述及び割り当て部による処理の具体例を示す第1の図である。
図7】レイアウトに関する記述及び割り当て部による処理の具体例を示す第2の図である。
図8】書き込み部による処理の具体例を示す第1の図である。
図9】書き込み部による処理の具体例を示す第2の図である。
図10】要素値読み出し部による処理の具体例を示す第1の図である。
図11】要素値読み出し部による処理の具体例を示す第2の図である。
図12】ソースコード生成処理の流れを示すフローチャートである。
図13】マシンコード生成処理の流れを示すフローチャートである。
図14】マシンコード実行処理の流れを示すフローチャートである。
図15】データ処理システムの各装置の機能構成の一例を示す第2の図である。
【発明を実施するための形態】
【0008】
以下、各実施形態について添付の図面を参照しながら説明する。なお、本明細書及び図面において、実質的に同一の機能構成を有する装置については、同一の符号を付することにより重複した説明を省略する。
【0009】
[第1の実施形態]
<データ処理システムのシステム構成及び各装置のハードウェア構成>
はじめに、第1の実施形態に係るサーバ装置を有するデータ処理システム全体のシステム構成、及び、データ処理システムを構成する各装置のハードウェア構成について説明する。
【0010】
図1に示すように、データ処理システム100は、サーバ装置110と外部装置160とを有する。また、図1に示すように、サーバ装置110は、コンパイル装置120と、データ処理装置140とを有する。
【0011】
コンパイル装置120は、一例として、プロセッサ121、主記憶装置122(メモリ)、補助記憶装置123(メモリ)、ネットワークインタフェース124、デバイスインタフェース125を有する。コンパイル装置120は、これらの装置がバス130を介して接続されたコンピュータとして実現されてもよい。
【0012】
プロセッサ121は、電子回路(処理回路、Processing circuit、Processing circuitry、CPU、GPU、FPGA、又はASIC等)であってもよい。また、プロセッサ121は、専用の処理回路を含む半導体装置等であってもよい。なお、プロセッサ121は、電子論理素子を用いた電子回路に限定されるものではなく、光論理素子を用いた光回路により実現されてもよい。また、プロセッサ121は、量子コンピューティングに基づく演算機能を含むものであってもよい。
【0013】
プロセッサ121は、コンパイル装置120の内部構成の各装置等から入力された各種データや命令に基づいて各種演算を行い、演算結果や制御信号を各装置等に出力する。プロセッサ121は、OS(Operating System)や、アプリケーション等を実行することにより、コンパイル装置120が備える各装置を制御してもよい。
【0014】
また、プロセッサ121は、1チップ上に配置された1又は複数の電子回路を指してもよいし、2つ以上のチップあるいは2つ以上のデバイス上に配置された1又は複数の電子回路を指してもよい。複数の電子回路を用いる場合、各電子回路は有線又は無線により通信してもよい。
【0015】
主記憶装置122は、プロセッサ121が実行する命令及び各種データ等を記憶する記憶装置であり、主記憶装置122に記憶された各種データがプロセッサ121により読み出される。補助記憶装置123は、主記憶装置122以外の記憶装置である。なお、これらの記憶装置は、各種データを格納可能な任意の電子部品を意味するものとし、半導体のメモリでもよい。半導体のメモリは、揮発性メモリ、不揮発性メモリのいずれでもよい。コンパイル装置120において各種データを格納するための記憶装置は、主記憶装置122又は補助記憶装置123により実現されてもよく、プロセッサ121に内蔵される内蔵メモリにより実現されてもよい。
【0016】
ネットワークインタフェース124は、無線又は有線により、通信ネットワーク150に接続するためのインタフェースである。ネットワークインタフェース124には、既存の通信規格に適合したもの等、適切なインタフェースが用いられる。なお、通信ネットワーク150は、WAN(Wide Area Network)、LAN(Local Area Network)、PAN(Personal Area Network)等のいずれか、又は、それらの組み合わせであってもよい。WANの一例としてインタネット等があり、LANの一例としてIEEE802.11やイーサネット等があり、PANの一例としてBluetooth(登録商標が)やNFC(Near Field Communication)等がある。
【0017】
デバイスインタフェース125は、外部装置160と直接接続するUSB等のインタフェースである。
【0018】
外部装置160はコンピュータと接続されている装置である。外部装置160は、一例として、入力装置であってもよい。入力装置は、例えば、キーボード、マウス、又はタッチパネル等の操作装置161であり、取得した情報をコンピュータに与える。
【0019】
また、外部装置160は、一例として、出力装置であってもよい。出力装置は、例えば、LCD(Liquid Crystal Display)、CRT(Cathode Ray Tube)、PDP(Plasma Display Panel)、又は有機EL(Electro Luminescence)パネル等の表示装置162であってもよい。
【0020】
データ処理装置140は、各装置として、複数のボード(ボード140_1~140_4)を有する。ボード140_1~140_4は、複数のアクセラレータチップ(例えば、チップ170_1~170_n)を搭載する。
【0021】
また、図1に示すように、コンパイル装置120の各装置と、データ処理装置140の各装置とは、バス130を介して接続される。なお、図1の例では、データ処理装置140が4枚のボード140_1~140_4を有する場合について示しているが、データ処理装置140が有するボードの枚数は任意である。
【0022】
チップ170_1~170_nは、例えば、深層学習の学習フェーズに特化した専用のチップである。なお、チップ170_1~170_nの詳細は後述する。
【0023】
<データ処理システムの各装置の機能構成>
次に、データ処理システム100の各装置(ここでは、サーバ装置110、表示装置162)の機能構成について説明する。図2は、データ処理システムの各装置の機能構成の一例を示す第1の図である。
【0024】
コンパイル装置120には、ソースコードを生成するための生成プログラムと、マシンコードを生成するためのコンパイラとがインストールされており、当該プログラムが実行されることで、コンパイル装置120は、
・ソースコード記述部211、
・生成部212、
・コンパイル部213、
として機能する。
【0025】
コンパイル装置120のユーザは、ソースコード記述部211を起動させることで、ソースコードの記述を開始する。図2において、ソースコード230は、表示装置162に表示された、記述中のソースコードの一例であり、本実施形態の場合、ソースコード230には、テンソルに関する記述、レイアウトに関する記述、インデックスに関する記述等が含まれる。なお、記述されたソースコード230は、生成部212に通知される。
【0026】
生成部212は、ソースコード230に基づいて計算グラフを生成する。計算グラフとは、入力のテンソルから出力のテンソルを生成するまでの計算の流れをグラフに表したもの、あるいは、テンソルの値を更新する計算の流れをグラフに表したものを指す。例えば、ソースコード230が、Python(登録商標)コードにより記述されている場合、計算グラフは、当該ソースコード230を実行し、ONNXの表現形式に変換されることにより生成される。なお、ONNXは、Open Neural Network Exchangeの略称である。
【0027】
また、生成部212は、ソースコード230に基づいて、レイアウト指示書を生成する。レイアウト指示書とは、ソースコード230に含まれるレイアウトに関する記述に基づいて生成される、テンソルの各要素にアドレスを割り当てる処理を実行するための情報である。ここでいう、"テンソルの各要素にアドレスを割り当てる処理"は、"テンソルの各要素とアドレスとを対応付ける処理"の一例である。"テンソルの各要素とアドレスとを対応付ける処理"には、少なくとも"テンソルの各要素にアドレスを割り当てる処理"又は"アドレスにテンソルの各要素を割り当てる処理"のいずれかが含まれる。
【0028】
なお、生成部212において生成された計算グラフ及びレイアウト指示書(以下、計算グラフ等と称す)は、コンパイル部213に通知される。
【0029】
コンパイル部213は、生成部212により通知された計算グラフ等が入力されることでコンパイル処理を行い、マシンコードを生成する。このとき、コンパイル部213は、割り当て部として機能する。具体的には、コンパイル部213は、例えば、レイアウトに関する記述に基づいて生成されたレイアウト指示書のもと、テンソルの各要素に、チップ170_1~170_n内のメモリ(一例として、SRAMでもよい)のいずれかのアドレスを割り当てる。
【0030】
なお、生成されたマシンコードは、データ格納部214に格納されたデータとともに、データ処理装置140に入力される。
【0031】
データ処理装置140のボード140_1~140_4は、コンパイル部213により生成されたマシンコードを実行し、データ格納部214に格納されたデータを処理する実行部220として機能する。
【0032】
このとき、実行部220は、書き込み部251として機能する。書き込み部251は、例えば、テンソルに関する記述に基づいて、テンソルの各要素の値(データ格納部214に格納されたデータ)を、割り当て部241によって割り当てられた、チップ170_1~170_n内のメモリのアドレスに書き込む。
【0033】
また、実行部220は、要素値読み出し部252として機能する。要素値読み出し部252は、例えば、インデックスに関する記述に基づいて、チップ170_1~170_n内のメモリに書き込まれたテンソルの特定の要素の値を読み出す。
【0034】
更に、実行部220は、補助書き込み部253として機能する。補助書き込み部253は、例えば、レイアウトに関する記述に基づいて、テンソルの各要素の値を補完する。具体的には、補助書き込み部253は、書き込み先のメモリに応じてテンソルのサイズを調整するよう、足りない要素の値を補完するパディング処理を行う。また、補助書き込み部253は、配列の形状が合致しないテンソル同士の各要素の演算を行う際に、形状を合わせるブロードキャスト処理を行う。
【0035】
<アクセラレータチップのハードウェア構成>
次に、ボード140_1~140_4等に搭載されるアクセラレータチップ(例えば、チップ170_1~170_n)のハードウェア構成について説明する。図3は、アクセラレータチップのハードウェア構成の一例を示す図である。
【0036】
チップ170_1(チップ170_1~170_nはいずれも同じハードウェア構成を有するため、ここでは、チップ170_1について説明する)は、例えば、SIMDアーキテクチャにより動作する。SIMDとは、Single Instruction/Multiple Dataの略で、1つの命令を同時に複数のデータに適用し、並列に処理する方式を指す。ただし、チップ170_1は、SIMDアーキテクチャ以外のアーキテクチャにより動作してもよい。
【0037】
図3に示すように、チップ170_1は、4個の第3階層ブロックを有する。また、各第3階層ブロックは、それぞれ、4個の第2階層ブロックを有する。そして、各第2階層ブロックは、複数の第1階層ブロックと、1個の第2階層ブロックメモリとを有する。
【0038】
また、各第1階層ブロックは、1個の演算器と、4個の演算ユニットとを有する。なお、4個の演算ユニットは、演算器にデータを供給する。
【0039】
このように、チップ170_1は、複数の第1階層ブロックが4個の第2階層ブロック及び4個の第3階層ブロックに分散配置されており、これらは木構造のトポロジにより接続されている。このため、チップ170_1内において、複数の第1階層ブロックに含まれるメモリ間の通信コストは一様ではない。例えば、互いに近いメモリ間の通信は、低コストであるのに対して、木構造の階層を遡る必要のあるメモリ間の通信は、高コストである。
【0040】
<木構造のトポロジ>
次に、木構造のトポロジにより接続された複数のメモリの具体例について説明する。図4は、木構造のトポロジにより接続された複数のメモリの具体例を示す図である。
【0041】
図4の例に示すように、4個の第3階層ブロックは、木構造のLevelAの階層に属し、互いに接続されている。また、各第3階層ブロックにそれぞれ含まれる4個の第2階層ブロックは、いずれも木構造のLevelBの階層に属し、それぞれ、木構造のLevelAの階層の対応する第3階層ブロックに接続される。
【0042】
更に、木構造のLevelBの階層に属する各第2階層ブロックにそれぞれ含まれる4個の第1階層ブロックは、いずれも木構造のLevelCの階層に属し、それぞれ、木構造のLevelBの階層の対応する第2階層ブロックに接続される。
【0043】
ここで、例えば、
・符号401に示すLevelCの第1階層ブロックに含まれるメモリ411に書き込まれた値を、
・符号402に示すLevelCの第1階層ブロックに含まれるメモリ412に、
移動させる場合について考える。
【0044】
この場合、チップ170_1は、
・木構造の階層をLevelC→LevelB→LevelAまで遡り、
・LevelA内で異なるブロックを跨ぎ、
・木構造の階層をLevelA→LevelB→LevelCまで進む、
といった手順を踏む必要があり、通信コストがかかる。一方で、通信コストを低減させるためには、メモリ411に値を書き込む代わりに、メモリ412の近くのメモリに値を書き込むことが有効である。
【0045】
つまり、木構造のトポロジにより接続された複数のメモリが分散配置されたチップ170_1の場合、木構造の階層を考慮したメモリにテンソルの各要素の値が書き込まれるよう、テンソルの各要素にメモリのアドレスを適切に割り当てることが重要となる。
【0046】
本実施形態において、データ処理システム100では、
・テンソルの各要素にメモリのアドレスを適切に割り当てることが可能な記述方法を用いて「レイアウトに関する記述」を行うソースコード記述部211と、
・当該記述方法に従って、テンソルの各要素にアドレスを割り当てるコンパイル部213と、
・割り当てられたアドレスに、テンソルの各要素の値(データ格納部214に格納されたデータ)を書き込む実行部220と、
を提供する。
【0047】
<レイアウトに関する記述の記述方法>
次に、レイアウトに関する記述の記述方法について説明する。図5は、レイアウトに関する記述の記述方法を示す図である。
【0048】
図5に示すように、レイアウトに関する記述は、括弧内に、縦方向の配置に関する記述と、横方向の配置に関する記述とを含み、両者がカンマで区切られる。
【0049】
また、図5に示すように、縦方向の配置に関する記述は、1階層目のLevelに関する記述、2階層目のLevelに関する記述、・・・を含み、更に、最下層のLevelのメモリに関する記述を含む。なお、1階層目のLevelに関する記述とは、例えば、図4のLevelAに関する記述であり、2階層目のLevelに関する記述とは、例えば、図4のLevelBに関する記述である。また、最下層のLevelのメモリに関する記述とは、例えば、図4のLevelCの第1階層ブロックに含まれるメモリに関する記述である。
【0050】
また、図5に示すように、N階層目(Nは1以上の整数)のLevelに関する記述の記述内容は、「分割数_Level名:ストライド」であり、最下層のLevelのメモリに関する記述の記述内容は、「分割数_メモリのアドレス:ストライド」である。
【0051】
なお、ここでいう"ストライド"とは、それぞれの階層において、ブロック(最下層の場合にはテンソルの要素)を縦方向に1個(最下層の場合には1要素)進めたときに、ブロック名(最下層の場合にはアドレス)が何個進むかを示す情報である。ただし、ブロック名は、各ブロックを識別可能な識別子(番号、名称等)であってもよい。
【0052】
例えば、LevelAの階層における4個の第3階層ブロックのブロック名が"A0"~"A3"であったとする。また、1行目の左から、"A0"、"A1"の順で第3階層ブロックが配置され、2行目の左から、"A2"、"A3"の順で第3階層ブロックが配置されていたとする。この場合、ブロック名="A0"の第3階層ブロックを縦方向に1個進めたときに、ブロック名は2個進む("A0"→"A2"、"A1"→"A3"になる)。したがって、かかる配置方向の場合、ストライドは、"2"となる。
【0053】
また、例えば、LevelCの階層において、テンソルの1行目の要素に割り当てられるメモリ411のアドレスが"0"~"24"、2行目の要素に割り当てられるメモリ411のアドレスが"25"~"49"、・・・であったとする。この場合、テンソルの要素を縦方向に1個進めたときに、アドレスは25個進む("0"→"25"→・・・になる)。したがって、かかるメモリの場合、ストライドは、"25"となる。なお、上記ストライドの説明は一例であり、ストライドは、各階層における縦方向のブロック名の変化を示す情報であれば、他の表現形式であってもよい。
【0054】
同様に、図5に示すように、横方向の配置に関する記述は、1階層目のLevelに関する記述、2階層目のLevelに関する記述、・・・を含み、更に、最下層のLevelのメモリに関する記述を含む。
【0055】
また、図5に示すように、N階層目(Nは1以上の整数)のLevelに関する記述の記述内容は、「分割数_Level名:ストライド」であり、最下層のLevelのメモリに関する記述の記述内容は、「分割数_メモリのアドレス:ストライド」である。
【0056】
なお、ここでいう"ストライド"とは、それぞれの階層において、ブロック(最下層の場合にあってはテンソルの要素)を横方向に1個進めたときに、ブロック名(最下層の場合にあってはアドレス)がいくつ進むかを示す情報である。
【0057】
例えば、LevelAの階層における4個の第3階層ブロックのブロック名が"A0"~"A3"であったとする。また、1行目の左から、"A0"、"A1"の順で第3階層ブロックが配置され、2行目の左から、"A2"、"A3"の順で第3階層ブロックが配置されていたとする。この場合、ブロック名="A0"の第3階層ブロックを横方向に1個進めたときに、ブロック名は1個進む("A0"→"A1"、"A2"→"A3"になる)。したがって、かかる配置方向の場合、ストライドは、"1"となる。
【0058】
また、例えば、LevelCの階層において、テンソルの1行目の要素に割り当てられるメモリ411のアドレスが"0"~"24"、2行目の要素に割り当てられるメモリ411のアドレスが"25"~"49"、・・・であったとする。この場合、テンソルの要素を縦方向に1個進めたときに、アドレスは1個進む("0"→"1"→・・・になる)。したがって、かかるメモリの場合、ストライドは、"1"となる。なお、上記ストライドの説明は一例であり、ストライドは、各階層における横方向のブロック名の変化を示す情報であれば、他の表現形式であってもよい。
【0059】
このように、縦方向の配置に関する記述と横方向の配置に関する記述とに分け、かつ、各階層の分割数、ストライドを指定する記述とすることで、
・表現力の高い記述方法が実現でき、複数のメモリが、木構造の複雑なトポロジにより接続されている場合であっても、複数のメモリに対するテンソルの各要素の配置を適切に表現することができる、
・これにより、テンソルの各要素に適切なアドレスを割り当てることが可能となり、チップ170_1はメモリ間の通信コストを低減させることができる、
・表現力の高い記述方法が実現でき、演算ごとに課せられる制約に対応することができる、
・複数のメモリに対するテンソルの各要素の配置を、ユーザが直感で理解することができるため、ユーザはテンソルの各要素の配置を考慮した演算の最適化や、SIMDの特性を考慮したテンソルの各要素の配置が可能になる、
・テンソル間で各要素の配置を揃えることができるため、SIMDアーキテクチャによる動作において有利となる、
等の利点がある。
【0060】
<レイアウトに関する記述及び割り当て部による処理の具体例>
(1)具体例1
次に、レイアウトに関する記述の具体例について説明する。図6は、レイアウトに関する記述の具体例を示す第1の図である。なお、図6の例では、説明の簡略化のため、階層数を"2"としている(1階層目=LevelA、2階層目=最下層=LevelB)。
【0061】
図6(b)に示すように、100行×100列のテンソルXの各要素を、図6(a)のチップ600の最下層のLevelBのブロックに含まれるメモリに割り当てる場合、レイアウトに関する記述は、例えば、
((2_A:2,2_B:2,25_Addr:25),(2_A:1,2_B:1,25_Addr:1))
となる。
【0062】
ここで、縦方向の配置に関する記述のうち、2_A:2は、
・LevelAにおいて、縦方向の100個の要素を2分割し、50個の要素のかたまりにすること、
・LevelAにおいて、ブロックを縦方向に1個進めると、ブロック名が2個進むこと("A0"→"A2"または"A1"→"A3")、
を表している。
【0063】
また、縦方向の配置に関する記述のうち、2_B:2は、
・LevelBにおいて、縦方向の50個の要素を2分割し、25個の要素のかたまりにすること、
・LevelBにおいて、ブロックを縦方向に1個進めると、ブロック名が2個進むこと("B0"→"B2"または"B1"→"B3")、
を表している。
【0064】
また、縦方向の配置に関する記述のうち、25_Addr:25は、
・LevelBのブロックに含まれるメモリにおいて、縦方向の25個の要素を25分割すること、
・LevelBのブロックに含まれるメモリにおいて、テンソルの要素を縦方向に1個進めると、アドレスが25個進むこと(例えば、アドレス"0"→"25"、"1"→"26"、・・・)、
を表している。
【0065】
一方、横方向の配置に関する記述のうち、2_A:1は、
・LevelAにおいて、横方向の100個の要素を2分割し、50個の要素のかたまりにすること、
・LevelAにおいて、ブロックを横方向に1個進めると、ブロック名が1個進むこと("A0"→"A1"または"A2"→"A3")、
を表している。
【0066】
また、横方向の配置に関する記述のうち、2_B:1は、
・LevelBにおいて、横方向の50個の要素を2分割し、25個の要素のかたまりにすること、
・LevelBにおいて、ブロックを横方向に1個進めると、ブロック名が1個進むこと("B0"→"B1"または"B2"→"B3")、
を表している。
【0067】
また、横方向の配置に関する記述のうち、25_Addr:1は、
・LevelBのブロックに含まれるメモリにおいて、横方向の25個の要素を25分割すること、
・LevelBのブロックに含まれるメモリにおいて、テンソルの要素を横方向に1個進めると、アドレスが1個進むこと(例えば、アドレス"0"→"1"、"1"→"2"、・・・)、
を表している。
【0068】
このように、レイアウトに関する上記記述により、割り当て部241では、100行×100列の各要素に、チップ600のLevelBのブロックに含まれるメモリのアドレスを割り当てることができる。
【0069】
(2)具体例2
次に、レイアウトに関する記述の他の具体例について説明する。図7は、レイアウトに関する記述の具体例を示す第2の図である。なお、図7の例においても、説明の簡略化のため、階層数を"2"としている(1階層目=LevelA、2階層目=最下層=LevelB)。ただし、図7の例の場合、図6の例とは、ブロックの区切り方が異なっている(図7(a)参照)。
【0070】
図7(b)に示すように、100行×100列のテンソルXの各要素を、図7(a)のチップ700の最下層のLevelBのブロックに含まれるメモリに割り当てる場合、レイアウトに関する記述は、例えば、
((4_A:1,25_Addr:25),(4_B:1,25_Addr:1))
となる。
【0071】
ここで、縦方向の配置に関する記述のうち、4_A:1は、
・LevelAにおいて、縦方向の100個の要素を4分割し、25個の要素のかたまりにすること、
・LevelAにおいて、ブロックを縦方向に1個進めると、ブロック名が1個進むこと("A0"→"A1"、"A1"→"A2"、"A2"→"A3")、
を表している。
【0072】
また、縦方向の配置に関する記述のうち、25_Addr:25は、
・LevelBのブロックに含まれるメモリにおいて、縦方向の25個の要素を25分割すること、
・LevelBのブロックに含まれるメモリにおいて、テンソルの要素を縦方向に1個進めると、アドレスが25個進むこと(例えば、アドレス"0"→"25"、"1"→"26"、・・・)、
を表している。
【0073】
一方、横方向の配置に関する記述のうち、4_B:1は、
・LevelBにおいて、横方向の100個の要素を4分割し、25個の要素のかたまりにすること、
・LevelBにおいて、ブロックを横方向に1個進めると、ブロック名が1個進むこと("B0"→"B1"、"B1"→"B2"、"B2"→"B3")、
を表している。
【0074】
また、横方向の配置に関する記述のうち、25_Addr:1は、
・LevelBのブロックに含まれるメモリにおいて、横方向の25個の要素を25分割すること、
・LevelBのブロックに含まれるメモリにおいて、テンソルの要素を横方向に1個進めると、アドレスが1個進むこと(例えば、アドレス"0"→"1"、"1"→"2"、・・・)、
を表している。
【0075】
このように、レイアウトに関する上記記述により、割り当て部241では、100行×100列の各要素に、チップ700のLevelBのブロックに含まれるメモリのアドレスを割り当てることができる。
【0076】
<書き込み部による処理の具体例>
(1)具体例1
次に、割り当て部241により割り当てられたアドレス(図6)に従って、テンソルXの各要素の値を、対応するメモリに書き込む処理の具体例について説明する。図8は、書き込み部による処理の具体例を示す第1の図である。
【0077】
図8において、符号800は、100行×100列のテンソルXの各要素の値(データ格納部214に格納されたデータ)の具体例を示している。また、図8において、符号600'は、チップ600のLevelBのブロックに含まれるメモリに、テンソルXの各要素の値が書き込まれた様子を示している。
【0078】
例えば、ブロック名="A0"のブロック内の、ブロック名="B0"のブロックに含まれるメモリの、
・アドレス"0"~"24"には、x1_1~x1_25が書き込まれ、
・アドレス"25"~"49"には、x2_1~x2_25が書き込まれ、
・・・
・アドレス"600"~"624"には、x25_1~x25_25が書き込まれる。
【0079】
また、ブロック名="A0"のブロック内の、ブロック名="B1"のブロックに含まれるメモリの、
・アドレス"0"~"24"には、x1_26~x1_50が書き込まれ、
・アドレス"25"~"49"には、x2_26~x2_50が書き込まれ、
・・・
・アドレス"600"~"624"には、x25_26~x25_50が書き込まれる。
【0080】
また、ブロック名="A0"のブロック内の、ブロック名="B2"のブロックに含まれるメモリの、
・アドレス"0"~"24"には、x26_1~x26_25が書き込まれ、
・アドレス"25"~"49"には、x27_1~x27_25が書き込まれ、
・・・
・アドレス"600"~"624"には、x50_1~x50_25が書き込まれる。
【0081】
また、ブロック名="A0"のブロック内の、ブロック名="B3"のブロックに含まれるメモリの、
・アドレス"0"~"24"には、x26_26~x26_50が書き込まれ、
・アドレス"25"~"49"には、x27_26~x27_50が書き込まれ、
・・・
・アドレス"600"~"624"には、x50_26~x50_50が書き込まれる。
【0082】
以降、同様に、テンソルXの各要素の値がLevelBのブロックに含まれるメモリに書き込まれる。
【0083】
このように、書き込み部251では、100行×100列の各要素をチップ600のLevelBのブロックに含まれるメモリに書き込むことができる。
【0084】
(2)具体例2
次に、割り当て部241により割り当てられたアドレス(図7)に従って、テンソルXの各要素の値を、対応するメモリに書き込む処理の具体例について説明する。図9は、書き込み部による処理の具体例を示す第2の図である。
【0085】
図9において、符号800は、100行×100列のテンソルXの各要素の値(データ格納部214に格納されたデータ)の具体例を示している。また、図9において、符号700'は、チップ700のLevelBのブロックに含まれるメモリに、テンソルXの各要素の値が書き込まれた様子を示している。
【0086】
例えば、ブロック名="A0"のブロック内の、ブロック名="B0"のブロックに含まれるメモリの、
・アドレス"0"~"24"には、x1_1~x1_25が書き込まれ、
・アドレス"25"~"49"には、x2_1~x2_25が書き込まれ、
・・・
・アドレス"600"~"624"には、x25_1~x25_25が書き込まれる。
【0087】
また、ブロック名="A0"のブロック内の、ブロック名="B1"のブロックに含まれるメモリの、
・アドレス"0"~"24"には、x1_26~x1_50が書き込まれ、
・アドレス"25"~"49"には、x2_26~x2_50が書き込まれ、
・・・
・アドレス"600"~"624"には、x25_26~x25_50が書き込まれる。
【0088】
また、ブロック名="A0"のブロック内の、ブロック名="B2"のブロックに含まれるメモリの、
・アドレス"0"~"24"には、x1_51~x1_75が書き込まれ、
・アドレス"25"~"49"には、x2_51~x2_75が書き込まれ、
・・・
・アドレス"600"~"624"には、x25_51~x25_75が書き込まれる。
【0089】
また、ブロック名="A0"のブロック内の、ブロック名="B3"のブロックに含まれるメモリの、
・アドレス"0"~"24"には、x1_76~x1_100が書き込まれ、
・アドレス"25"~"49"には、x2_76~x2_100が書き込まれ、
・・・
・アドレス"600"~"624"には、x25_76~x25_100が書き込まれる。
【0090】
以降、同様に、テンソルXの各要素の値がLevelBのブロックに含まれるメモリに書き込まれる。
【0091】
このように、書き込み部251では、100行×100列の各要素をチップ700のLevelBのブロックに含まれるメモリに書き込むことができる。
【0092】
<要素値読み出し部による処理の具体例>
次に、要素値読み出し部252による処理の具体例について説明する。上述したように、要素値読み出し部252は、ソースコード230に含まれるインデックスに関する記述に基づいて、メモリに書き込まれたテンソルの特定の要素の値を読み出す。
【0093】
(1)具体例1
図10は、要素値読み出し部による処理の具体例を示す第1の図である。図10の例は、図8の符号800で示すテンソルXの各要素の値が、図6(b)の「レイアウトに関する記述」のもとで、チップ600に書き込まれた状態(符号600'参照)で、インデックス(91,36)の値を読み出す様子を示している。
【0094】
図10に示すように、要素値読み出し部252は、縦方向のアドレスを特定するための値(="91")を、LevelAの1ブロックあたりの縦方向の要素数(="50")で除算することで得た商の値に基づき、LevelAの縦方向のブロックを特定する。
【0095】
図10の例では、商の値が"1"であるため、要素値読み出し部252では、LevelAの縦方向のブロックが1番目のブロック(ブロック名="A2"または"A3")であることを特定する。
【0096】
続いて、要素値読み出し部252は、余りの値(="41")を、LevelBの1ブロックあたりの縦方向の要素数(="25")で除算することで得た商の値に基づき、LevelBの縦方向のブロックを特定する。
【0097】
図10の例では、商の値が"1"であるため、要素値読み出し部252では、LevelBの縦方向のブロックが1番目のブロック(ブロック名="B2"または"B3")であることを特定する。
【0098】
続いて、要素値読み出し部252は、余りの値(="16")から、テンソルの縦方向の位置が、16行目であることを特定する。
【0099】
同様に、要素値読み出し部252は、横方向のアドレスを特定するための値(="36")を、LevelAの1ブロックあたりの横方向の要素数(="50")で除算することで得た商の値に基づき、LevelAの横方向のブロックを特定する。
【0100】
図10の例では、商の値が"0"であるため、要素値読み出し部252では、LevelAの横方向のブロックが0番目のブロック(ブロック名="A0"または"A2")であることを特定する。
【0101】
続いて、要素値読み出し部252は、余りの値(="36")を、LevelBの1ブロックあたりの横方向の要素数(="25")で除算することで得た商の値に基づき、LevelBの横方向のブロックを特定する。
【0102】
図10の例では、商の値が"1"であるため、要素値読み出し部252では、LevelBの横方向のブロックが1番目のブロック(ブロック名="B1"または"B3")であることを特定する。
【0103】
続いて、要素値読み出し部252は、余りの値(="11")から、テンソルの横方向の位置が、11列目であることを特定する。
【0104】
これにより、要素値読み出し部252は、
・LevelAのブロックが、ブロック名="A2"であり、
・LevelBのブロックが、ブロック名="B3"であり、
・メモリのアドレスが、16行目×25+11列目="411番目のアドレス"(符号1000参照)、
であることを特定する。
【0105】
この結果、要素値読み出し部252では、インデックスに関する記述に基づいて特定したアドレスに書き込まれた値を読み出すことができる。
【0106】
このように、インデックス(91,36)を、((1,1,16),(0,1,11))に分解し、それぞれ、
・LevelAのブロックとして、1×ストライド(="2")+0×ストライド(="1")=2を、
・LevelBのブロックとして、1×ストライド(="2")+1×ストライド(="1")=3を、
・メモリのアドレスとして、16×ストライド(="25")+11×ストライド(="1")=411を、
算出することで、LevelAのブロックとして、ブロック名="A2"、LevelBのブロックとして、ブロック名="B3"、メモリのアドレスとして、"411番目のアドレス"を特定することができる。
【0107】
上記のように、要素値読み出し部252がインデックス(91,36)を分解することで得られる((1,1,16),(0,1,11))を、本実施形態では、例えば、「分解されたインデックス」と称する。また、上記のように、要素値読み出し部252がインデックス(91,36)から特定したブロック名="A2",ブロック名="B3"、メモリのアドレス="411番目のアドレス"を、本実施形態では、例えば、「階層ごとのインデックス」と称す。
【0108】
「分解されたインデックス」である((1,1,16),(0,1,11))や、「階層ごとのインデックス」である("A2"、"B3"、"411番目のアドレス")等の表現は、コンパイル部213によるマシンコードの生成過程で利用されてもよい。例えば、同一テンソルに対するレイアウトの変更を実施するマシンコードを生成する際、テンソルの各要素の特定方法として利用されてもよい。
【0109】
なお、図8の符号800で示すテンソルXの各要素の値がチップ600に書き込まれた場合には、テンソルXを、例えば、3×3行列あるいは5×5行列等の単位で演算を行う状況において、通信コストの低減を実現できる。3×3行列あるいは5×5行列等の単位で演算を行う際に、LevelAにおいて異なるブロックを跨ぐ回数を減らすことができるからである。なお、3×3行列あるいは5×5行列等の単位で行う演算には、例えば、畳み込み処理やプーリング処理等が含まれる。
【0110】
(2)具体例2
図11は、要素値読み出し部による処理の具体例を示す第2の図である。図11の例は、図9の符号900で示すテンソルXの各要素の値が、図7(b)の「レイアウトに関する記述」のもとで、チップ700に書き込まれた状態(符号700'参照)で、インデックス(91,36)の値を読み出す様子を示している。
【0111】
図11に示すように、要素値読み出し部252は、縦方向のアドレスを特定するための値(="91")を、LevelAの1ブロックあたりの縦方向の要素数(="25")で除算することで得た商の値に基づき、LevelAの縦方向のブロックを特定する。
【0112】
図11の例では、商の値が"3"であるため、要素値読み出し部252では、LevelAの縦方向のブロックが3番目のブロック(ブロック名="A3")であることを特定する。
【0113】
続いて、要素値読み出し部252は、余りの値(="16")から、テンソルの縦方向の位置が、16行目であることを特定する。
【0114】
同様に、要素値読み出し部252は、横方向のアドレスを特定するための値(="36")を、LevelBの1ブロックあたりの横方向の要素数(="25")で除算することで得た商の値に基づき、LevelBの横方向のブロックを特定する。
【0115】
図11の例では、商の値が"1"であるため、要素値読み出し部252では、LevelBの横方向のブロックが1番目のブロック(ブロック名="B1")であることを特定する。
【0116】
続いて、要素値読み出し部252は、余りの値(="11")から、テンソルの横方向の位置が、11列目であることを特定する。
【0117】
これにより、要素値読み出し部252は、
・LevelAのブロックが、ブロック名="A3"であり、
・LevelBのブロックが、ブロック名="B1"であり、
・メモリのアドレスが、16行目×25+11列目="411番目のアドレス"(符号1100参照)、
であることを特定する。
【0118】
この結果、要素値読み出し部252では、インデックスに関する記述に基づいて特定したアドレスに書き込まれた値を読み出すことができる。
【0119】
このように、インデックス(91,36)を、((3,16),(1,11))に分解し、それぞれ、
・LevelAのブロックとして、3×ストライド(="1")=3を、
・LevelBのブロックとして、1×ストライド(="1")=1を、
・メモリのアドレスとして、16×ストライド(="25")+11×ストライド(="1")=411を、
算出することで、LevelAのブロックとして、ブロック名="A3"、LevelBのブロックとして、ブロック名="B1"、メモリのアドレスとして、"411番目のアドレス"を特定することができる。
【0120】
なお、図9の符号900で示すテンソルXの各要素の値がチップ700に書き込まれた場合には、例えば、テンソルXの行ごとの統計値を算出する状況において、通信コストの低減を実現できる。テンソルXの行ごとの統計値を算出する際に、LevelAにおいて異なるブロックを跨ぐ必要がないからである。
【0121】
<データ処理システムによるデータ処理の流れ>
次に、データ処理システム100によるデータ処理の流れについて説明する。ここでは、ソースコード記述部211及び生成部212によるソースコード生成処理と、コンパイル部213によるマシンコード生成処理と、実行部220によるマシンコード実行処理とにわけて説明する。
【0122】
(1)ソースコード生成処理
はじめに、ソースコード記述部211及び生成部212によるソースコード生成処理の流れについて説明する。図12は、ソースコード生成処理の流れを示すフローチャートである。ユーザがソースコード記述部211を起動することで、図12に示すソースコード生成処理を開始する。
【0123】
ステップS1201において、ユーザは、ソースコードの記述を開始する。これにより、ソースコード記述部211では、ユーザによるソースコードの記述を受け付ける。
【0124】
ステップS1202において、ユーザは、テンソルに関する記述をしたか否かを判断し、テンソルに関する記述をしたと判断した場合には(ステップS1202においてYESの場合には)、ステップS1203に進む。これにより、ソースコード記述部211では、ユーザによるテンソルに関する記述を受け付ける。
【0125】
ステップS1203において、ユーザは、レイアウトに関する記述をし、ステップS1204に進む。これにより、ソースコード記述部211では、ユーザによるレイアウトに関する記述を受け付ける。
【0126】
一方、ステップS1202において、テンソルに関する記述をしていないと判断した場合には(ステップS1202においてNOの場合には)、直接、ステップS1204に進む。
【0127】
ステップS1204において、ユーザは、ソースコードの記述を終了するか否かを判断する。ステップS1204において、ソースコードの記述を終了しないと判断した場合には(ステップS1204においてNOの場合には)、ステップS1202に戻り、ソースコードの記述を継続する。
【0128】
一方、ステップS1204において、ソースコードの記述を終了すると判断した場合には(ステップS1204においてYESの場合には)、ステップS1205に進む。
【0129】
ステップS1205において、ユーザは、生成部212を起動し、計算グラフ等を生成するよう指示する。これにより、生成部212は、ソースコード記述部211よりソースコードを取得し、計算グラフ等を生成する。また、生成部212は、生成した計算グラフ等をコンパイル部213に通知する。
【0130】
(2)マシンコード生成処理
次に、コンパイル部213によるマシンコード生成処理の流れについて説明する。図13は、マシンコード生成処理の流れを示すフローチャートである。ユーザがコンパイル装置120のコンパイル部213を起動することで、コンパイル部213では、図13に示すマシンコード生成処理を開始する。
【0131】
ステップS1301において、コンパイル部213は、計算グラフ等に基づいてコンパイル処理を開始する。
【0132】
ステップS1302において、コンパイル部213は、レイアウトに関する記述があるか否かを判定する。ステップS1302において、レイアウトに関する記述があると判定した場合には(ステップS1302においてYESの場合には)、ステップS1303に進む。
【0133】
ステップS1303において、コンパイル部213は、レイアウトに関する記述に基づいて、テンソルの各要素に、メモリのアドレスを割り当て、ステップS1304に進む。
【0134】
一方、ステップS1302において、レイアウトに関する記述がないと判定した場合には(ステップS1302においてNOの場合には)、直接、ステップS1304に進む。
【0135】
ステップS1304において、計算グラフ等についてコンパイル処理が終了したか否かを判定する。ステップS1304において、コンパイル処理が終了していないと判定した場合には(ステップS1304においてNOの場合には)、ステップS1302に戻り、コンパイル処理を継続する。
【0136】
一方、ステップS1304において、計算グラフ等についてコンパイル処理が終了したと判定した場合には(ステップS1304においてYESの場合には)、マシンコード生成処理を終了する。
【0137】
(3)マシンコード実行処理
次に、実行部220によるマシンコード実行処理の流れについて説明する。図14は、マシンコード実行処理の流れを示すフローチャートである。ユーザがデータ格納部214に格納された処理対象のデータを指定して、サーバ装置110の実行部220に実行指示を入力することで、実行部220では、図14に示すマシンコード実行処理を開始する。
【0138】
ステップS1401において、実行部220は、マシンコードの演算を開始する。
【0139】
ステップS1402において、実行部220は、割り当てられたメモリのアドレスに、テンソルの各要素の値(データ格納部214に格納された処理対象のデータ)を書き込む。
【0140】
ステップS1403において、実行部220は、マシンコード1410に含まれる各種処理を順次実行する。例えば、実行部220は、パディング処理を示すコードに応じて、パディング処理を行い、割り当てたメモリを、処理後のテンソルの各要素の値で更新する。また、実行部220は、ブロードキャスト処理を示すコードに応じて、ブロードキャスト処理を行い、割り当てたメモリを、処理後のテンソルの各要素の値で更新する。
【0141】
マシンコード1410に含まれる各種処理を全て実行すると、あるいは、所定の終了条件が成立すると、実行部220は、マシンコード実行処理を終了する。
【0142】
<まとめ>
以上の説明から明らかなように、第1の実施形態に係るコンパイル装置120は、
・木構造のトポロジにより接続され、分散配置された複数のメモリを有するアクセラレータチップにおいて実行されるマシンコードを生成する。
・処理対象のテンソルに対する階層ごとの分割数及びストライド(縦方向または横方向)に基づいて、処理対象のテンソルの各要素に、アクセラレータチップが有する複数のメモリ内のアドレスを割り当てる。
【0143】
これにより、第1の実施形態によれば、木構造のトポロジにより接続された複数のメモリに対するテンソルの各要素の配置を適切に表現できるようになる。
【0144】
[第2の実施形態]
上記第1の実施形態では、コンパイル装置120が、サーバ装置110内に配されるものとして説明したが、コンパイル装置120は、サーバ装置110とは別体に構成してもよい。また、上記第1の実施形態では、コンパイル部213をコンパイル装置120にて実現するものとして説明したが、コンパイル部213は、例えば、不図示の端末装置において実現されてもよい。あるいは、コンパイル部213は、端末以外の他の外部装置(例えば、他のサーバ装置)にて実現されてもよい。
【0145】
また、上記第1の実施形態では、コンパイル装置120にて、ソースコード記述部211、生成部212、コンパイル部213を実現するものとして説明した。しかしながら、ソースコード記述部211は、コンパイル装置120が配されたサーバ装置110とネットワークを介して接続された端末装置にて実現されてもよい。あるいは、ソースコード記述部211及び生成部212は、コンパイル装置120が配されたサーバ装置110と通信ネットワーク150を介して接続された端末装置にて実現されてもよい。
【0146】
図15は、データ処理システムの各装置の機能構成の一例を示す第2の図である。図15の例は、ソースコード記述部211及び生成部212が、端末装置1510にて実現され、端末装置1510に接続された表示装置1520に、ソースコード230が表示された様子を示している。図15の例では、端末装置1510にて生成された計算グラフ等が、コンパイル装置120に送信される。
【0147】
また、上記第1の実施形態において、計算グラフは、ソースコード230が実行され、ONNXの表現形式に変換されることで生成されるものとして説明したが、計算グラフの生成方法はこれに限定されず、他の方法により計算グラフを生成してもよい。
【0148】
また、上記第1の実施形態では、ユーザにより入力されたレイアウト記述に基づいて生成部212がレイアウト指示書を生成し、コンパイル部213が、レイアウト指示書に従ってテンソルの各要素に、アドレスを割り当てるものとして説明した。しかしながら、アドレスの割り当て方法はこれに限定されず、例えば、コンパイル部213がレイアウトを選択し、選択したレイアウトに従ってテンソルの各要素にアドレスを割り当てるようにしてもよい。
【0149】
また、上記第1の実施形態では、例えば、チップ170_1がLevelAの階層に、4個の第3階層ブロックを有し、LevelBの階層に、4個の第2階層ブロックを有するものとして説明した(図3)。しかしながら、各階層のブロック(メモリ)の数及び階層の数(深さ)はこれに限定されず、任意である。
【0150】
また、上記第1の実施形態では、
・LevelAの階層:第3階層ブロック、
・LevelBの階層:第2階層ブロック、
・LevelCの階層:第1階層ブロック、
としたが、各階層の定義はこれに限定されず、例えば、
・LevelAの階層:チップ、
・LevelBの階層:第3階層ブロック、
・LevelCの階層:第2階層ブロック、
・LevelDの階層:第1階層ブロック、
としてもよいし、
・LevelAの階層:チップ及び第3階層ブロック、
・LevelBの階層:第2階層ブロック、
・LevelCの階層:第1階層ブロック、
としてもよい。
【0151】
また、「LevelAの階層:チップ及び第3階層ブロック」とする場合において、例えば、1つのボードに、4個のチップが搭載され、各チップが4個の第3階層ブロックを有していたとする。この場合、LevelAの階層については、第3階層ブロックが16個あるかのように、レイアウトに関する記述を行うことができる。
【0152】
なお、メモリが属する階層は、最下層に限定されず、他の階層に変わってもよい。また、最上位のメモリを束ねる構造(例えば、チップ)、チップを束ねる構造(例えば、ノード)、ノードを束ねる構造といった階層を定義して、上記第1及び第2の実施形態を適用してもよい。
【0153】
[その他の実施形態]
本明細書(請求項を含む)において、「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)以外の他の要素を加えることも含む。
【0154】
また、本明細書(請求項を含む)において、「データを入力として/データに基づいて/に従って/に応じて」等の表現(同様な表現を含む)が用いられる場合は、特に断りがない場合、各種データそのものを入力として用いる場合や、各種データに何らかの処理を行ったもの(例えば、ノイズ加算したもの、正規化したもの、各種データの中間表現等)を入力として用いる場合を含む。また「データに基づいて/に従って/に応じて」何らかの結果が得られる旨が記載されている場合、当該データのみに基づいて当該結果が得られる場合を含むとともに、当該データ以外の他のデータ、原因、条件、及び/又は状態等にも影響を受けて当該結果が得られる場合をも含み得る。また、「データを出力する」旨が記載されている場合、特に断りがない場合、各種データそのものを出力として用いる場合や、各種データに何らかの処理を行ったもの(例えば、ノイズ加算したもの、正規化したもの、各種データの中間表現等)を出力とする場合も含む。
【0155】
また、本明細書(請求項を含む)において、「接続される(connected)」及び「結合される(coupled)」との用語が用いられる場合は、直接的な接続/結合、間接的な接続/結合、電気的(electrically)な接続/結合、通信的(communicatively)な接続/結合、機能的(operatively)な接続/結合、物理的(physically)な接続/結合等のいずれをも含む非限定的な用語として意図される。当該用語は、当該用語が用いられた文脈に応じて適宜解釈されるべきであるが、意図的に或いは当然に排除されるのではない接続/結合形態は、当該用語に含まれるものして非限定的に解釈されるべきである。
【0156】
また、本明細書(請求項を含む)において、「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)されていればよい。
【0157】
また、本明細書(請求項を含む)において、含有又は所有を意味する用語(例えば、「含む(comprising/including)」及び「有する(having)」等)が用いられる場合は、当該用語の目的語により示される対象物以外の物を含有又は所有する場合を含む、open-endedな用語として意図される。これらの含有又は所有を意味する用語の目的語が数量を指定しない又は単数を示唆する表現(a又はanを冠詞とする表現)である場合は、当該表現は特定の数に限定されないものとして解釈されるべきである。
【0158】
また、本明細書(請求項を含む)において、ある箇所において「1つ又は複数(one or more)」又は「少なくとも1つ(at least one)」等の表現が用いられ、他の箇所において数量を指定しない又は単数を示唆する表現(a又はanを冠詞とする表現)が用いられているとしても、後者の表現が「1つ」を意味することを意図しない。一般に、数量を指定しない又は単数を示唆する表現(a又はanを冠詞とする表現)は、必ずしも特定の数に限定されないものとして解釈されるべきである。
【0159】
また、本明細書において、ある実施例の有する特定の構成について特定の効果(advantage/result)が得られる旨が記載されている場合、別段の理由がない限り、当該構成を有する他の1つ又は複数の実施例についても当該効果が得られると理解されるべきである。但し当該効果の有無は、一般に種々の原因、条件、及び/又は状態等に依存し、当該構成により必ず当該効果が得られるものではないと理解されるべきである。当該効果は、種々の原因、条件、及び/又は状態等が満たされたときに実施例に記載の当該構成により得られるものに過ぎず、当該構成又は類似の構成を規定したクレームに係る発明において、当該効果が必ずしも得られるものではない。
【0160】
本明細書(請求項を含む)において、「最適化する(optimize)/最適化(optimization)」等の用語が用いられる場合は、グローバルな最適値を求めること、グローバルな最適値の近似値を求めること、ローカルな最適値を求めること、及びローカルな最適値の近似値を求めることを含み、当該用語が用いられた文脈に応じて適宜解釈されるべきである。また、これら最適値の近似値を確率的又はヒューリスティックに求めることを含む。
【0161】
また、本明細書(請求項を含む)において、複数のハードウェアが所定の処理を行う場合、各ハードウェアが協働して所定の処理を行ってもよいし、一部のハードウェアが所定の処理の全てを行ってもよい。また、一部のハードウェアが所定の処理の一部を行い、別のハードウェアが所定の処理の残りを行ってもよい。本明細書(請求項を含む)において、「1又は複数のハードウェアが第1の処理を行い、前記1又は複数のハードウェアが第2の処理を行う」等の表現が用いられている場合、第1の処理を行うハードウェアと第2の処理を行うハードウェアは同じものであってもよいし、異なるものであってもよい。つまり、第1の処理を行うハードウェア及び第2の処理を行うハードウェアが、前記1又は複数のハードウェアに含まれていればよい。なお、ハードウェアは、電子回路、又は、電子回路を含む装置等を含んでよい。
【0162】
また、本明細書(請求項を含む)において、複数の記憶装置(メモリ)がデータの記憶を行う場合、複数の記憶装置(メモリ)のうち個々の記憶装置(メモリ)は、データの一部のみを記憶してもよいし、データの全体を記憶してもよい。
【0163】
以上、本開示の実施形態について詳述したが、本開示は上記した個々の実施形態に限定されるものではない。特許請求の範囲に規定された内容及びその均等物から導き出される本発明の概念的な思想と趣旨を逸脱しない範囲において種々の追加、変更、置き換え、部分的削除等が可能である。例えば、前述した全ての実施形態において、数値又は数式を説明に用いている場合は、一例として示したものであり、これらに限られるものではない。また、実施形態における各動作の順序は、一例として示したものであり、これらに限られるものではない。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15