Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
JP7770865B2 - コンパイル装置、生成方法、プログラム及びシステム - Google Patents
[go: Go Back, main page]

JP7770865B2 - コンパイル装置、生成方法、プログラム及びシステム - Google Patents

コンパイル装置、生成方法、プログラム及びシステム

Info

Publication number
JP7770865B2
JP7770865B2 JP2021174381A JP2021174381A JP7770865B2 JP 7770865 B2 JP7770865 B2 JP 7770865B2 JP 2021174381 A JP2021174381 A JP 2021174381A JP 2021174381 A JP2021174381 A JP 2021174381A JP 7770865 B2 JP7770865 B2 JP 7770865B2
Authority
JP
Japan
Prior art keywords
chip
tensor
layer
level
block
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2021174381A
Other languages
English (en)
Other versions
JP2023064233A (ja
JP2023064233A5 (ja
Inventor
誠也 得居
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Preferred Networks Inc
Original Assignee
Preferred Networks Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Preferred Networks Inc filed Critical Preferred Networks Inc
Priority to JP2021174381A priority Critical patent/JP7770865B2/ja
Priority to US18/048,934 priority patent/US12367025B2/en
Publication of JP2023064233A publication Critical patent/JP2023064233A/ja
Priority to US19/242,677 priority patent/US20250315233A1/en
Publication of JP2023064233A5 publication Critical patent/JP2023064233A5/ja
Application granted granted Critical
Publication of JP7770865B2 publication Critical patent/JP7770865B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/10Interfaces, programming languages or software development kits, e.g. for simulating neural networks
    • G06N3/105Shells for specifying net layout
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/0464Convolutional networks [CNN, ConvNet]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Computing Systems (AREA)
  • General Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Artificial Intelligence (AREA)
  • Molecular Biology (AREA)
  • Mathematical Physics (AREA)
  • Neurology (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本開示は、コンパイル装置、生成方法、プログラム及びシステムに関する。
ソースコードを記述する際、ユーザは、テンソルの各要素をメモリ上のいずれの位置に配置するかを指定することができる。
一方で、例えば、深層学習向けのアクセラレータチップは、木構造のトポロジにより接続された複数のメモリ(SRAM:Static Random Access Memory)が分散配置され、SIMD(Single Instruction/Multiple Data)アーキテクチャにより動作する場合がある。このため、当該アクセラレータチップを用いてテンソルの各要素を処理するにあたっては、当該テンソルの各要素を、複数のメモリのうちのいずれのメモリ上のいずれの位置に配置するかが重要となる。
特表2020-517006号公報 特開2007-242017号公報 特開平06-208501号公報
本開示は、木構造のトポロジにより接続された複数のメモリに対するテンソルの各要素の配置を適切に表現できるようにする。
本開示の一態様によるコンパイル装置は、例えば、以下のような構成を有する。即ち、
少なくとも第1階層と第2階層とを有するチップにおいて実行されるマシンコードを生成するコンパイル装置であって、
前記第2階層は前記第1階層よりも上位にあり、前記第1階層は、複数の第1ブロックを有し、
前記コンパイル装置は、
少なくとも1つのメモリと、
少なくとも1つのプロセッサと、を備え、
前記少なくとも1つのプロセッサは、
前記チップにおいて処理されるテンソルを取得し、
少なくとも、前記チップの前記第1階層における分割数に基づいて、前記テンソルの各要素を、前記チップに含まれる前記複数の第1ブロックのうちのいずれか1つの第1ブロックに対応付ける処理を実行し、
前記対応付ける処理に基づいて、前記チップにおいて実行される前記マシンコードを生成し、
前記対応付ける処理において用いられる前記第1階層は、前記チップのハードウェア構成に対応する
データ処理システムのシステム構成及び各装置のハードウェア構成の一例を示す図である。 データ処理システムの各装置の機能構成の一例を示す第1の図である。 アクセラレータチップのハードウェア構成の一例を示す図である。 木構造のトポロジにより接続された複数のメモリの具体例を示す図である。 レイアウトに関する記述の記述方法を示す図である。 レイアウトに関する記述及び割り当て部による処理の具体例を示す第1の図である。 レイアウトに関する記述及び割り当て部による処理の具体例を示す第2の図である。 書き込み部による処理の具体例を示す第1の図である。 書き込み部による処理の具体例を示す第2の図である。 要素値読み出し部による処理の具体例を示す第1の図である。 要素値読み出し部による処理の具体例を示す第2の図である。 ソースコード生成処理の流れを示すフローチャートである。 マシンコード生成処理の流れを示すフローチャートである。 マシンコード実行処理の流れを示すフローチャートである。 データ処理システムの各装置の機能構成の一例を示す第2の図である。
以下、各実施形態について添付の図面を参照しながら説明する。なお、本明細書及び図面において、実質的に同一の機能構成を有する装置については、同一の符号を付することにより重複した説明を省略する。
[第1の実施形態]
<データ処理システムのシステム構成及び各装置のハードウェア構成>
はじめに、第1の実施形態に係るサーバ装置を有するデータ処理システム全体のシステム構成、及び、データ処理システムを構成する各装置のハードウェア構成について説明する。
図1に示すように、データ処理システム100は、サーバ装置110と外部装置160とを有する。また、図1に示すように、サーバ装置110は、コンパイル装置120と、データ処理装置140とを有する。
コンパイル装置120は、一例として、プロセッサ121、主記憶装置122(メモリ)、補助記憶装置123(メモリ)、ネットワークインタフェース124、デバイスインタフェース125を有する。コンパイル装置120は、これらの装置がバス130を介して接続されたコンピュータとして実現されてもよい。
プロセッサ121は、電子回路(処理回路、Processing circuit、Processing circuitry、CPU、GPU、FPGA、又はASIC等)であってもよい。また、プロセッサ121は、専用の処理回路を含む半導体装置等であってもよい。なお、プロセッサ121は、電子論理素子を用いた電子回路に限定されるものではなく、光論理素子を用いた光回路により実現されてもよい。また、プロセッサ121は、量子コンピューティングに基づく演算機能を含むものであってもよい。
プロセッサ121は、コンパイル装置120の内部構成の各装置等から入力された各種データや命令に基づいて各種演算を行い、演算結果や制御信号を各装置等に出力する。プロセッサ121は、OS(Operating System)や、アプリケーション等を実行することにより、コンパイル装置120が備える各装置を制御してもよい。
また、プロセッサ121は、1チップ上に配置された1又は複数の電子回路を指してもよいし、2つ以上のチップあるいは2つ以上のデバイス上に配置された1又は複数の電子回路を指してもよい。複数の電子回路を用いる場合、各電子回路は有線又は無線により通信してもよい。
主記憶装置122は、プロセッサ121が実行する命令及び各種データ等を記憶する記憶装置であり、主記憶装置122に記憶された各種データがプロセッサ121により読み出される。補助記憶装置123は、主記憶装置122以外の記憶装置である。なお、これらの記憶装置は、各種データを格納可能な任意の電子部品を意味するものとし、半導体のメモリでもよい。半導体のメモリは、揮発性メモリ、不揮発性メモリのいずれでもよい。コンパイル装置120において各種データを格納するための記憶装置は、主記憶装置122又は補助記憶装置123により実現されてもよく、プロセッサ121に内蔵される内蔵メモリにより実現されてもよい。
ネットワークインタフェース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)等がある。
デバイスインタフェース125は、外部装置160と直接接続するUSB等のインタフェースである。
外部装置160はコンピュータと接続されている装置である。外部装置160は、一例として、入力装置であってもよい。入力装置は、例えば、キーボード、マウス、又はタッチパネル等の操作装置161であり、取得した情報をコンピュータに与える。
また、外部装置160は、一例として、出力装置であってもよい。出力装置は、例えば、LCD(Liquid Crystal Display)、CRT(Cathode Ray Tube)、PDP(Plasma Display Panel)、又は有機EL(Electro Luminescence)パネル等の表示装置162であってもよい。
データ処理装置140は、各装置として、複数のボード(ボード140_1~140_4)を有する。ボード140_1~140_4は、複数のアクセラレータチップ(例えば、チップ170_1~170_n)を搭載する。
また、図1に示すように、コンパイル装置120の各装置と、データ処理装置140の各装置とは、バス130を介して接続される。なお、図1の例では、データ処理装置140が4枚のボード140_1~140_4を有する場合について示しているが、データ処理装置140が有するボードの枚数は任意である。
チップ170_1~170_nは、例えば、深層学習の学習フェーズに特化した専用のチップである。なお、チップ170_1~170_nの詳細は後述する。
<データ処理システムの各装置の機能構成>
次に、データ処理システム100の各装置(ここでは、サーバ装置110、表示装置162)の機能構成について説明する。図2は、データ処理システムの各装置の機能構成の一例を示す第1の図である。
コンパイル装置120には、ソースコードを生成するための生成プログラムと、マシンコードを生成するためのコンパイラとがインストールされており、当該プログラムが実行されることで、コンパイル装置120は、
・ソースコード記述部211、
・生成部212、
・コンパイル部213、
として機能する。
コンパイル装置120のユーザは、ソースコード記述部211を起動させることで、ソースコードの記述を開始する。図2において、ソースコード230は、表示装置162に表示された、記述中のソースコードの一例であり、本実施形態の場合、ソースコード230には、テンソルに関する記述、レイアウトに関する記述、インデックスに関する記述等が含まれる。なお、記述されたソースコード230は、生成部212に通知される。
生成部212は、ソースコード230に基づいて計算グラフを生成する。計算グラフとは、入力のテンソルから出力のテンソルを生成するまでの計算の流れをグラフに表したもの、あるいは、テンソルの値を更新する計算の流れをグラフに表したものを指す。例えば、ソースコード230が、Python(登録商標)コードにより記述されている場合、計算グラフは、当該ソースコード230を実行し、ONNXの表現形式に変換されることにより生成される。なお、ONNXは、Open Neural Network Exchangeの略称である。
また、生成部212は、ソースコード230に基づいて、レイアウト指示書を生成する。レイアウト指示書とは、ソースコード230に含まれるレイアウトに関する記述に基づいて生成される、テンソルの各要素にアドレスを割り当てる処理を実行するための情報である。ここでいう、"テンソルの各要素にアドレスを割り当てる処理"は、"テンソルの各要素とアドレスとを対応付ける処理"の一例である。"テンソルの各要素とアドレスとを対応付ける処理"には、少なくとも"テンソルの各要素にアドレスを割り当てる処理"又は"アドレスにテンソルの各要素を割り当てる処理"のいずれかが含まれる。
なお、生成部212において生成された計算グラフ及びレイアウト指示書(以下、計算グラフ等と称す)は、コンパイル部213に通知される。
コンパイル部213は、生成部212により通知された計算グラフ等が入力されることでコンパイル処理を行い、マシンコードを生成する。このとき、コンパイル部213は、割り当て部として機能する。具体的には、コンパイル部213は、例えば、レイアウトに関する記述に基づいて生成されたレイアウト指示書のもと、テンソルの各要素に、チップ170_1~170_n内のメモリ(一例として、SRAMでもよい)のいずれかのアドレスを割り当てる。
なお、生成されたマシンコードは、データ格納部214に格納されたデータとともに、データ処理装置140に入力される。
データ処理装置140のボード140_1~140_4は、コンパイル部213により生成されたマシンコードを実行し、データ格納部214に格納されたデータを処理する実行部220として機能する。
このとき、実行部220は、書き込み部251として機能する。書き込み部251は、例えば、テンソルに関する記述に基づいて、テンソルの各要素の値(データ格納部214に格納されたデータ)を、割り当て部241によって割り当てられた、チップ170_1~170_n内のメモリのアドレスに書き込む。
また、実行部220は、要素値読み出し部252として機能する。要素値読み出し部252は、例えば、インデックスに関する記述に基づいて、チップ170_1~170_n内のメモリに書き込まれたテンソルの特定の要素の値を読み出す。
更に、実行部220は、補助書き込み部253として機能する。補助書き込み部253は、例えば、レイアウトに関する記述に基づいて、テンソルの各要素の値を補完する。具体的には、補助書き込み部253は、書き込み先のメモリに応じてテンソルのサイズを調整するよう、足りない要素の値を補完するパディング処理を行う。また、補助書き込み部253は、配列の形状が合致しないテンソル同士の各要素の演算を行う際に、形状を合わせるブロードキャスト処理を行う。
<アクセラレータチップのハードウェア構成>
次に、ボード140_1~140_4等に搭載されるアクセラレータチップ(例えば、チップ170_1~170_n)のハードウェア構成について説明する。図3は、アクセラレータチップのハードウェア構成の一例を示す図である。
チップ170_1(チップ170_1~170_nはいずれも同じハードウェア構成を有するため、ここでは、チップ170_1について説明する)は、例えば、SIMDアーキテクチャにより動作する。SIMDとは、Single Instruction/Multiple Dataの略で、1つの命令を同時に複数のデータに適用し、並列に処理する方式を指す。ただし、チップ170_1は、SIMDアーキテクチャ以外のアーキテクチャにより動作してもよい。
図3に示すように、チップ170_1は、4個の第3階層ブロックを有する。また、各第3階層ブロックは、それぞれ、4個の第2階層ブロックを有する。そして、各第2階層ブロックは、複数の第1階層ブロックと、1個の第2階層ブロックメモリとを有する。
また、各第1階層ブロックは、1個の演算器と、4個の演算ユニットとを有する。なお、4個の演算ユニットは、演算器にデータを供給する。
このように、チップ170_1は、複数の第1階層ブロックが4個の第2階層ブロック及び4個の第3階層ブロックに分散配置されており、これらは木構造のトポロジにより接続されている。このため、チップ170_1内において、複数の第1階層ブロックに含まれるメモリ間の通信コストは一様ではない。例えば、互いに近いメモリ間の通信は、低コストであるのに対して、木構造の階層を遡る必要のあるメモリ間の通信は、高コストである。
<木構造のトポロジ>
次に、木構造のトポロジにより接続された複数のメモリの具体例について説明する。図4は、木構造のトポロジにより接続された複数のメモリの具体例を示す図である。
図4の例に示すように、4個の第3階層ブロックは、木構造のLevelAの階層に属し、互いに接続されている。また、各第3階層ブロックにそれぞれ含まれる4個の第2階層ブロックは、いずれも木構造のLevelBの階層に属し、それぞれ、木構造のLevelAの階層の対応する第3階層ブロックに接続される。
更に、木構造のLevelBの階層に属する各第2階層ブロックにそれぞれ含まれる4個の第1階層ブロックは、いずれも木構造のLevelCの階層に属し、それぞれ、木構造のLevelBの階層の対応する第2階層ブロックに接続される。
ここで、例えば、
・符号401に示すLevelCの第1階層ブロックに含まれるメモリ411に書き込まれた値を、
・符号402に示すLevelCの第1階層ブロックに含まれるメモリ412に、
移動させる場合について考える。
この場合、チップ170_1は、
・木構造の階層をLevelC→LevelB→LevelAまで遡り、
・LevelA内で異なるブロックを跨ぎ、
・木構造の階層をLevelA→LevelB→LevelCまで進む、
といった手順を踏む必要があり、通信コストがかかる。一方で、通信コストを低減させるためには、メモリ411に値を書き込む代わりに、メモリ412の近くのメモリに値を書き込むことが有効である。
つまり、木構造のトポロジにより接続された複数のメモリが分散配置されたチップ170_1の場合、木構造の階層を考慮したメモリにテンソルの各要素の値が書き込まれるよう、テンソルの各要素にメモリのアドレスを適切に割り当てることが重要となる。
本実施形態において、データ処理システム100では、
・テンソルの各要素にメモリのアドレスを適切に割り当てることが可能な記述方法を用いて「レイアウトに関する記述」を行うソースコード記述部211と、
・当該記述方法に従って、テンソルの各要素にアドレスを割り当てるコンパイル部213と、
・割り当てられたアドレスに、テンソルの各要素の値(データ格納部214に格納されたデータ)を書き込む実行部220と、
を提供する。
<レイアウトに関する記述の記述方法>
次に、レイアウトに関する記述の記述方法について説明する。図5は、レイアウトに関する記述の記述方法を示す図である。
図5に示すように、レイアウトに関する記述は、括弧内に、縦方向の配置に関する記述と、横方向の配置に関する記述とを含み、両者がカンマで区切られる。
また、図5に示すように、縦方向の配置に関する記述は、1階層目のLevelに関する記述、2階層目のLevelに関する記述、・・・を含み、更に、最下層のLevelのメモリに関する記述を含む。なお、1階層目のLevelに関する記述とは、例えば、図4のLevelAに関する記述であり、2階層目のLevelに関する記述とは、例えば、図4のLevelBに関する記述である。また、最下層のLevelのメモリに関する記述とは、例えば、図4のLevelCの第1階層ブロックに含まれるメモリに関する記述である。
また、図5に示すように、N階層目(Nは1以上の整数)のLevelに関する記述の記述内容は、「分割数_Level名:ストライド」であり、最下層のLevelのメモリに関する記述の記述内容は、「分割数_メモリのアドレス:ストライド」である。
なお、ここでいう"ストライド"とは、それぞれの階層において、ブロック(最下層の場合にはテンソルの要素)を縦方向に1個(最下層の場合には1要素)進めたときに、ブロック名(最下層の場合にはアドレス)が何個進むかを示す情報である。ただし、ブロック名は、各ブロックを識別可能な識別子(番号、名称等)であってもよい。
例えば、LevelAの階層における4個の第3階層ブロックのブロック名が"A0"~"A3"であったとする。また、1行目の左から、"A0"、"A1"の順で第3階層ブロックが配置され、2行目の左から、"A2"、"A3"の順で第3階層ブロックが配置されていたとする。この場合、ブロック名="A0"の第3階層ブロックを縦方向に1個進めたときに、ブロック名は2個進む("A0"→"A2"、"A1"→"A3"になる)。したがって、かかる配置方向の場合、ストライドは、"2"となる。
また、例えば、LevelCの階層において、テンソルの1行目の要素に割り当てられるメモリ411のアドレスが"0"~"24"、2行目の要素に割り当てられるメモリ411のアドレスが"25"~"49"、・・・であったとする。この場合、テンソルの要素を縦方向に1個進めたときに、アドレスは25個進む("0"→"25"→・・・になる)。したがって、かかるメモリの場合、ストライドは、"25"となる。なお、上記ストライドの説明は一例であり、ストライドは、各階層における縦方向のブロック名の変化を示す情報であれば、他の表現形式であってもよい。
同様に、図5に示すように、横方向の配置に関する記述は、1階層目のLevelに関する記述、2階層目のLevelに関する記述、・・・を含み、更に、最下層のLevelのメモリに関する記述を含む。
また、図5に示すように、N階層目(Nは1以上の整数)のLevelに関する記述の記述内容は、「分割数_Level名:ストライド」であり、最下層のLevelのメモリに関する記述の記述内容は、「分割数_メモリのアドレス:ストライド」である。
なお、ここでいう"ストライド"とは、それぞれの階層において、ブロック(最下層の場合にあってはテンソルの要素)を横方向に1個進めたときに、ブロック名(最下層の場合にあってはアドレス)がいくつ進むかを示す情報である。
例えば、LevelAの階層における4個の第3階層ブロックのブロック名が"A0"~"A3"であったとする。また、1行目の左から、"A0"、"A1"の順で第3階層ブロックが配置され、2行目の左から、"A2"、"A3"の順で第3階層ブロックが配置されていたとする。この場合、ブロック名="A0"の第3階層ブロックを横方向に1個進めたときに、ブロック名は1個進む("A0"→"A1"、"A2"→"A3"になる)。したがって、かかる配置方向の場合、ストライドは、"1"となる。
また、例えば、LevelCの階層において、テンソルの1行目の要素に割り当てられるメモリ411のアドレスが"0"~"24"、2行目の要素に割り当てられるメモリ411のアドレスが"25"~"49"、・・・であったとする。この場合、テンソルの要素を縦方向に1個進めたときに、アドレスは1個進む("0"→"1"→・・・になる)。したがって、かかるメモリの場合、ストライドは、"1"となる。なお、上記ストライドの説明は一例であり、ストライドは、各階層における横方向のブロック名の変化を示す情報であれば、他の表現形式であってもよい。
このように、縦方向の配置に関する記述と横方向の配置に関する記述とに分け、かつ、各階層の分割数、ストライドを指定する記述とすることで、
・表現力の高い記述方法が実現でき、複数のメモリが、木構造の複雑なトポロジにより接続されている場合であっても、複数のメモリに対するテンソルの各要素の配置を適切に表現することができる、
・これにより、テンソルの各要素に適切なアドレスを割り当てることが可能となり、チップ170_1はメモリ間の通信コストを低減させることができる、
・表現力の高い記述方法が実現でき、演算ごとに課せられる制約に対応することができる、
・複数のメモリに対するテンソルの各要素の配置を、ユーザが直感で理解することができるため、ユーザはテンソルの各要素の配置を考慮した演算の最適化や、SIMDの特性を考慮したテンソルの各要素の配置が可能になる、
・テンソル間で各要素の配置を揃えることができるため、SIMDアーキテクチャによる動作において有利となる、
等の利点がある。
<レイアウトに関する記述及び割り当て部による処理の具体例>
(1)具体例1
次に、レイアウトに関する記述の具体例について説明する。図6は、レイアウトに関する記述の具体例を示す第1の図である。なお、図6の例では、説明の簡略化のため、階層数を"2"としている(1階層目=LevelA、2階層目=最下層=LevelB)。
図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))
となる。
ここで、縦方向の配置に関する記述のうち、2_A:2は、
・LevelAにおいて、縦方向の100個の要素を2分割し、50個の要素のかたまりにすること、
・LevelAにおいて、ブロックを縦方向に1個進めると、ブロック名が2個進むこと("A0"→"A2"または"A1"→"A3")、
を表している。
また、縦方向の配置に関する記述のうち、2_B:2は、
・LevelBにおいて、縦方向の50個の要素を2分割し、25個の要素のかたまりにすること、
・LevelBにおいて、ブロックを縦方向に1個進めると、ブロック名が2個進むこと("B0"→"B2"または"B1"→"B3")、
を表している。
また、縦方向の配置に関する記述のうち、25_Addr:25は、
・LevelBのブロックに含まれるメモリにおいて、縦方向の25個の要素を25分割すること、
・LevelBのブロックに含まれるメモリにおいて、テンソルの要素を縦方向に1個進めると、アドレスが25個進むこと(例えば、アドレス"0"→"25"、"1"→"26"、・・・)、
を表している。
一方、横方向の配置に関する記述のうち、2_A:1は、
・LevelAにおいて、横方向の100個の要素を2分割し、50個の要素のかたまりにすること、
・LevelAにおいて、ブロックを横方向に1個進めると、ブロック名が1個進むこと("A0"→"A1"または"A2"→"A3")、
を表している。
また、横方向の配置に関する記述のうち、2_B:1は、
・LevelBにおいて、横方向の50個の要素を2分割し、25個の要素のかたまりにすること、
・LevelBにおいて、ブロックを横方向に1個進めると、ブロック名が1個進むこと("B0"→"B1"または"B2"→"B3")、
を表している。
また、横方向の配置に関する記述のうち、25_Addr:1は、
・LevelBのブロックに含まれるメモリにおいて、横方向の25個の要素を25分割すること、
・LevelBのブロックに含まれるメモリにおいて、テンソルの要素を横方向に1個進めると、アドレスが1個進むこと(例えば、アドレス"0"→"1"、"1"→"2"、・・・)、
を表している。
このように、レイアウトに関する上記記述により、割り当て部241では、100行×100列の各要素に、チップ600のLevelBのブロックに含まれるメモリのアドレスを割り当てることができる。
(2)具体例2
次に、レイアウトに関する記述の他の具体例について説明する。図7は、レイアウトに関する記述の具体例を示す第2の図である。なお、図7の例においても、説明の簡略化のため、階層数を"2"としている(1階層目=LevelA、2階層目=最下層=LevelB)。ただし、図7の例の場合、図6の例とは、ブロックの区切り方が異なっている(図7(a)参照)。
図7(b)に示すように、100行×100列のテンソルXの各要素を、図7(a)のチップ700の最下層のLevelBのブロックに含まれるメモリに割り当てる場合、レイアウトに関する記述は、例えば、
((4_A:1,25_Addr:25),(4_B:1,25_Addr:1))
となる。
ここで、縦方向の配置に関する記述のうち、4_A:1は、
・LevelAにおいて、縦方向の100個の要素を4分割し、25個の要素のかたまりにすること、
・LevelAにおいて、ブロックを縦方向に1個進めると、ブロック名が1個進むこと("A0"→"A1"、"A1"→"A2"、"A2"→"A3")、
を表している。
また、縦方向の配置に関する記述のうち、25_Addr:25は、
・LevelBのブロックに含まれるメモリにおいて、縦方向の25個の要素を25分割すること、
・LevelBのブロックに含まれるメモリにおいて、テンソルの要素を縦方向に1個進めると、アドレスが25個進むこと(例えば、アドレス"0"→"25"、"1"→"26"、・・・)、
を表している。
一方、横方向の配置に関する記述のうち、4_B:1は、
・LevelBにおいて、横方向の100個の要素を4分割し、25個の要素のかたまりにすること、
・LevelBにおいて、ブロックを横方向に1個進めると、ブロック名が1個進むこと("B0"→"B1"、"B1"→"B2"、"B2"→"B3")、
を表している。
また、横方向の配置に関する記述のうち、25_Addr:1は、
・LevelBのブロックに含まれるメモリにおいて、横方向の25個の要素を25分割すること、
・LevelBのブロックに含まれるメモリにおいて、テンソルの要素を横方向に1個進めると、アドレスが1個進むこと(例えば、アドレス"0"→"1"、"1"→"2"、・・・)、
を表している。
このように、レイアウトに関する上記記述により、割り当て部241では、100行×100列の各要素に、チップ700のLevelBのブロックに含まれるメモリのアドレスを割り当てることができる。
<書き込み部による処理の具体例>
(1)具体例1
次に、割り当て部241により割り当てられたアドレス(図6)に従って、テンソルXの各要素の値を、対応するメモリに書き込む処理の具体例について説明する。図8は、書き込み部による処理の具体例を示す第1の図である。
図8において、符号800は、100行×100列のテンソルXの各要素の値(データ格納部214に格納されたデータ)の具体例を示している。また、図8において、符号600'は、チップ600のLevelBのブロックに含まれるメモリに、テンソルXの各要素の値が書き込まれた様子を示している。
例えば、ブロック名="A0"のブロック内の、ブロック名="B0"のブロックに含まれるメモリの、
・アドレス"0"~"24"には、x1_1~x1_25が書き込まれ、
・アドレス"25"~"49"には、x2_1~x2_25が書き込まれ、
・・・
・アドレス"600"~"624"には、x25_1~x25_25が書き込まれる。
また、ブロック名="A0"のブロック内の、ブロック名="B1"のブロックに含まれるメモリの、
・アドレス"0"~"24"には、x1_26~x1_50が書き込まれ、
・アドレス"25"~"49"には、x2_26~x2_50が書き込まれ、
・・・
・アドレス"600"~"624"には、x25_26~x25_50が書き込まれる。
また、ブロック名="A0"のブロック内の、ブロック名="B2"のブロックに含まれるメモリの、
・アドレス"0"~"24"には、x26_1~x26_25が書き込まれ、
・アドレス"25"~"49"には、x27_1~x27_25が書き込まれ、
・・・
・アドレス"600"~"624"には、x50_1~x50_25が書き込まれる。
また、ブロック名="A0"のブロック内の、ブロック名="B3"のブロックに含まれるメモリの、
・アドレス"0"~"24"には、x26_26~x26_50が書き込まれ、
・アドレス"25"~"49"には、x27_26~x27_50が書き込まれ、
・・・
・アドレス"600"~"624"には、x50_26~x50_50が書き込まれる。
以降、同様に、テンソルXの各要素の値がLevelBのブロックに含まれるメモリに書き込まれる。
このように、書き込み部251では、100行×100列の各要素をチップ600のLevelBのブロックに含まれるメモリに書き込むことができる。
(2)具体例2
次に、割り当て部241により割り当てられたアドレス(図7)に従って、テンソルXの各要素の値を、対応するメモリに書き込む処理の具体例について説明する。図9は、書き込み部による処理の具体例を示す第2の図である。
図9において、符号800は、100行×100列のテンソルXの各要素の値(データ格納部214に格納されたデータ)の具体例を示している。また、図9において、符号700'は、チップ700のLevelBのブロックに含まれるメモリに、テンソルXの各要素の値が書き込まれた様子を示している。
例えば、ブロック名="A0"のブロック内の、ブロック名="B0"のブロックに含まれるメモリの、
・アドレス"0"~"24"には、x1_1~x1_25が書き込まれ、
・アドレス"25"~"49"には、x2_1~x2_25が書き込まれ、
・・・
・アドレス"600"~"624"には、x25_1~x25_25が書き込まれる。
また、ブロック名="A0"のブロック内の、ブロック名="B1"のブロックに含まれるメモリの、
・アドレス"0"~"24"には、x1_26~x1_50が書き込まれ、
・アドレス"25"~"49"には、x2_26~x2_50が書き込まれ、
・・・
・アドレス"600"~"624"には、x25_26~x25_50が書き込まれる。
また、ブロック名="A0"のブロック内の、ブロック名="B2"のブロックに含まれるメモリの、
・アドレス"0"~"24"には、x1_51~x1_75が書き込まれ、
・アドレス"25"~"49"には、x2_51~x2_75が書き込まれ、
・・・
・アドレス"600"~"624"には、x25_51~x25_75が書き込まれる。
また、ブロック名="A0"のブロック内の、ブロック名="B3"のブロックに含まれるメモリの、
・アドレス"0"~"24"には、x1_76~x1_100が書き込まれ、
・アドレス"25"~"49"には、x2_76~x2_100が書き込まれ、
・・・
・アドレス"600"~"624"には、x25_76~x25_100が書き込まれる。
以降、同様に、テンソルXの各要素の値がLevelBのブロックに含まれるメモリに書き込まれる。
このように、書き込み部251では、100行×100列の各要素をチップ700のLevelBのブロックに含まれるメモリに書き込むことができる。
<要素値読み出し部による処理の具体例>
次に、要素値読み出し部252による処理の具体例について説明する。上述したように、要素値読み出し部252は、ソースコード230に含まれるインデックスに関する記述に基づいて、メモリに書き込まれたテンソルの特定の要素の値を読み出す。
(1)具体例1
図10は、要素値読み出し部による処理の具体例を示す第1の図である。図10の例は、図8の符号800で示すテンソルXの各要素の値が、図6(b)の「レイアウトに関する記述」のもとで、チップ600に書き込まれた状態(符号600'参照)で、インデックス(91,36)の値を読み出す様子を示している。
図10に示すように、要素値読み出し部252は、縦方向のアドレスを特定するための値(="91")を、LevelAの1ブロックあたりの縦方向の要素数(="50")で除算することで得た商の値に基づき、LevelAの縦方向のブロックを特定する。
図10の例では、商の値が"1"であるため、要素値読み出し部252では、LevelAの縦方向のブロックが1番目のブロック(ブロック名="A2"または"A3")であることを特定する。
続いて、要素値読み出し部252は、余りの値(="41")を、LevelBの1ブロックあたりの縦方向の要素数(="25")で除算することで得た商の値に基づき、LevelBの縦方向のブロックを特定する。
図10の例では、商の値が"1"であるため、要素値読み出し部252では、LevelBの縦方向のブロックが1番目のブロック(ブロック名="B2"または"B3")であることを特定する。
続いて、要素値読み出し部252は、余りの値(="16")から、テンソルの縦方向の位置が、16行目であることを特定する。
同様に、要素値読み出し部252は、横方向のアドレスを特定するための値(="36")を、LevelAの1ブロックあたりの横方向の要素数(="50")で除算することで得た商の値に基づき、LevelAの横方向のブロックを特定する。
図10の例では、商の値が"0"であるため、要素値読み出し部252では、LevelAの横方向のブロックが0番目のブロック(ブロック名="A0"または"A2")であることを特定する。
続いて、要素値読み出し部252は、余りの値(="36")を、LevelBの1ブロックあたりの横方向の要素数(="25")で除算することで得た商の値に基づき、LevelBの横方向のブロックを特定する。
図10の例では、商の値が"1"であるため、要素値読み出し部252では、LevelBの横方向のブロックが1番目のブロック(ブロック名="B1"または"B3")であることを特定する。
続いて、要素値読み出し部252は、余りの値(="11")から、テンソルの横方向の位置が、11列目であることを特定する。
これにより、要素値読み出し部252は、
・LevelAのブロックが、ブロック名="A2"であり、
・LevelBのブロックが、ブロック名="B3"であり、
・メモリのアドレスが、16行目×25+11列目="411番目のアドレス"(符号1000参照)、
であることを特定する。
この結果、要素値読み出し部252では、インデックスに関する記述に基づいて特定したアドレスに書き込まれた値を読み出すことができる。
このように、インデックス(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番目のアドレス"を特定することができる。
上記のように、要素値読み出し部252がインデックス(91,36)を分解することで得られる((1,1,16),(0,1,11))を、本実施形態では、例えば、「分解されたインデックス」と称する。また、上記のように、要素値読み出し部252がインデックス(91,36)から特定したブロック名="A2",ブロック名="B3"、メモリのアドレス="411番目のアドレス"を、本実施形態では、例えば、「階層ごとのインデックス」と称す。
「分解されたインデックス」である((1,1,16),(0,1,11))や、「階層ごとのインデックス」である("A2"、"B3"、"411番目のアドレス")等の表現は、コンパイル部213によるマシンコードの生成過程で利用されてもよい。例えば、同一テンソルに対するレイアウトの変更を実施するマシンコードを生成する際、テンソルの各要素の特定方法として利用されてもよい。
なお、図8の符号800で示すテンソルXの各要素の値がチップ600に書き込まれた場合には、テンソルXを、例えば、3×3行列あるいは5×5行列等の単位で演算を行う状況において、通信コストの低減を実現できる。3×3行列あるいは5×5行列等の単位で演算を行う際に、LevelAにおいて異なるブロックを跨ぐ回数を減らすことができるからである。なお、3×3行列あるいは5×5行列等の単位で行う演算には、例えば、畳み込み処理やプーリング処理等が含まれる。
(2)具体例2
図11は、要素値読み出し部による処理の具体例を示す第2の図である。図11の例は、図9の符号900で示すテンソルXの各要素の値が、図7(b)の「レイアウトに関する記述」のもとで、チップ700に書き込まれた状態(符号700'参照)で、インデックス(91,36)の値を読み出す様子を示している。
図11に示すように、要素値読み出し部252は、縦方向のアドレスを特定するための値(="91")を、LevelAの1ブロックあたりの縦方向の要素数(="25")で除算することで得た商の値に基づき、LevelAの縦方向のブロックを特定する。
図11の例では、商の値が"3"であるため、要素値読み出し部252では、LevelAの縦方向のブロックが3番目のブロック(ブロック名="A3")であることを特定する。
続いて、要素値読み出し部252は、余りの値(="16")から、テンソルの縦方向の位置が、16行目であることを特定する。
同様に、要素値読み出し部252は、横方向のアドレスを特定するための値(="36")を、LevelBの1ブロックあたりの横方向の要素数(="25")で除算することで得た商の値に基づき、LevelBの横方向のブロックを特定する。
図11の例では、商の値が"1"であるため、要素値読み出し部252では、LevelBの横方向のブロックが1番目のブロック(ブロック名="B1")であることを特定する。
続いて、要素値読み出し部252は、余りの値(="11")から、テンソルの横方向の位置が、11列目であることを特定する。
これにより、要素値読み出し部252は、
・LevelAのブロックが、ブロック名="A3"であり、
・LevelBのブロックが、ブロック名="B1"であり、
・メモリのアドレスが、16行目×25+11列目="411番目のアドレス"(符号1100参照)、
であることを特定する。
この結果、要素値読み出し部252では、インデックスに関する記述に基づいて特定したアドレスに書き込まれた値を読み出すことができる。
このように、インデックス(91,36)を、((3,16),(1,11))に分解し、それぞれ、
・LevelAのブロックとして、3×ストライド(="1")=3を、
・LevelBのブロックとして、1×ストライド(="1")=1を、
・メモリのアドレスとして、16×ストライド(="25")+11×ストライド(="1")=411を、
算出することで、LevelAのブロックとして、ブロック名="A3"、LevelBのブロックとして、ブロック名="B1"、メモリのアドレスとして、"411番目のアドレス"を特定することができる。
なお、図9の符号900で示すテンソルXの各要素の値がチップ700に書き込まれた場合には、例えば、テンソルXの行ごとの統計値を算出する状況において、通信コストの低減を実現できる。テンソルXの行ごとの統計値を算出する際に、LevelAにおいて異なるブロックを跨ぐ必要がないからである。
<データ処理システムによるデータ処理の流れ>
次に、データ処理システム100によるデータ処理の流れについて説明する。ここでは、ソースコード記述部211及び生成部212によるソースコード生成処理と、コンパイル部213によるマシンコード生成処理と、実行部220によるマシンコード実行処理とにわけて説明する。
(1)ソースコード生成処理
はじめに、ソースコード記述部211及び生成部212によるソースコード生成処理の流れについて説明する。図12は、ソースコード生成処理の流れを示すフローチャートである。ユーザがソースコード記述部211を起動することで、図12に示すソースコード生成処理を開始する。
ステップS1201において、ユーザは、ソースコードの記述を開始する。これにより、ソースコード記述部211では、ユーザによるソースコードの記述を受け付ける。
ステップS1202において、ユーザは、テンソルに関する記述をしたか否かを判断し、テンソルに関する記述をしたと判断した場合には(ステップS1202においてYESの場合には)、ステップS1203に進む。これにより、ソースコード記述部211では、ユーザによるテンソルに関する記述を受け付ける。
ステップS1203において、ユーザは、レイアウトに関する記述をし、ステップS1204に進む。これにより、ソースコード記述部211では、ユーザによるレイアウトに関する記述を受け付ける。
一方、ステップS1202において、テンソルに関する記述をしていないと判断した場合には(ステップS1202においてNOの場合には)、直接、ステップS1204に進む。
ステップS1204において、ユーザは、ソースコードの記述を終了するか否かを判断する。ステップS1204において、ソースコードの記述を終了しないと判断した場合には(ステップS1204においてNOの場合には)、ステップS1202に戻り、ソースコードの記述を継続する。
一方、ステップS1204において、ソースコードの記述を終了すると判断した場合には(ステップS1204においてYESの場合には)、ステップS1205に進む。
ステップS1205において、ユーザは、生成部212を起動し、計算グラフ等を生成するよう指示する。これにより、生成部212は、ソースコード記述部211よりソースコードを取得し、計算グラフ等を生成する。また、生成部212は、生成した計算グラフ等をコンパイル部213に通知する。
(2)マシンコード生成処理
次に、コンパイル部213によるマシンコード生成処理の流れについて説明する。図13は、マシンコード生成処理の流れを示すフローチャートである。ユーザがコンパイル装置120のコンパイル部213を起動することで、コンパイル部213では、図13に示すマシンコード生成処理を開始する。
ステップS1301において、コンパイル部213は、計算グラフ等に基づいてコンパイル処理を開始する。
ステップS1302において、コンパイル部213は、レイアウトに関する記述があるか否かを判定する。ステップS1302において、レイアウトに関する記述があると判定した場合には(ステップS1302においてYESの場合には)、ステップS1303に進む。
ステップS1303において、コンパイル部213は、レイアウトに関する記述に基づいて、テンソルの各要素に、メモリのアドレスを割り当て、ステップS1304に進む。
一方、ステップS1302において、レイアウトに関する記述がないと判定した場合には(ステップS1302においてNOの場合には)、直接、ステップS1304に進む。
ステップS1304において、計算グラフ等についてコンパイル処理が終了したか否かを判定する。ステップS1304において、コンパイル処理が終了していないと判定した場合には(ステップS1304においてNOの場合には)、ステップS1302に戻り、コンパイル処理を継続する。
一方、ステップS1304において、計算グラフ等についてコンパイル処理が終了したと判定した場合には(ステップS1304においてYESの場合には)、マシンコード生成処理を終了する。
(3)マシンコード実行処理
次に、実行部220によるマシンコード実行処理の流れについて説明する。図14は、マシンコード実行処理の流れを示すフローチャートである。ユーザがデータ格納部214に格納された処理対象のデータを指定して、サーバ装置110の実行部220に実行指示を入力することで、実行部220では、図14に示すマシンコード実行処理を開始する。
ステップS1401において、実行部220は、マシンコードの演算を開始する。
ステップS1402において、実行部220は、割り当てられたメモリのアドレスに、テンソルの各要素の値(データ格納部214に格納された処理対象のデータ)を書き込む。
ステップS1403において、実行部220は、マシンコード1410に含まれる各種処理を順次実行する。例えば、実行部220は、パディング処理を示すコードに応じて、パディング処理を行い、割り当てたメモリを、処理後のテンソルの各要素の値で更新する。また、実行部220は、ブロードキャスト処理を示すコードに応じて、ブロードキャスト処理を行い、割り当てたメモリを、処理後のテンソルの各要素の値で更新する。
マシンコード1410に含まれる各種処理を全て実行すると、あるいは、所定の終了条件が成立すると、実行部220は、マシンコード実行処理を終了する。
<まとめ>
以上の説明から明らかなように、第1の実施形態に係るコンパイル装置120は、
・木構造のトポロジにより接続され、分散配置された複数のメモリを有するアクセラレータチップにおいて実行されるマシンコードを生成する。
・処理対象のテンソルに対する階層ごとの分割数及びストライド(縦方向または横方向)に基づいて、処理対象のテンソルの各要素に、アクセラレータチップが有する複数のメモリ内のアドレスを割り当てる。
これにより、第1の実施形態によれば、木構造のトポロジにより接続された複数のメモリに対するテンソルの各要素の配置を適切に表現できるようになる。
[第2の実施形態]
上記第1の実施形態では、コンパイル装置120が、サーバ装置110内に配されるものとして説明したが、コンパイル装置120は、サーバ装置110とは別体に構成してもよい。また、上記第1の実施形態では、コンパイル部213をコンパイル装置120にて実現するものとして説明したが、コンパイル部213は、例えば、不図示の端末装置において実現されてもよい。あるいは、コンパイル部213は、端末以外の他の外部装置(例えば、他のサーバ装置)にて実現されてもよい。
また、上記第1の実施形態では、コンパイル装置120にて、ソースコード記述部211、生成部212、コンパイル部213を実現するものとして説明した。しかしながら、ソースコード記述部211は、コンパイル装置120が配されたサーバ装置110とネットワークを介して接続された端末装置にて実現されてもよい。あるいは、ソースコード記述部211及び生成部212は、コンパイル装置120が配されたサーバ装置110と通信ネットワーク150を介して接続された端末装置にて実現されてもよい。
図15は、データ処理システムの各装置の機能構成の一例を示す第2の図である。図15の例は、ソースコード記述部211及び生成部212が、端末装置1510にて実現され、端末装置1510に接続された表示装置1520に、ソースコード230が表示された様子を示している。図15の例では、端末装置1510にて生成された計算グラフ等が、コンパイル装置120に送信される。
また、上記第1の実施形態において、計算グラフは、ソースコード230が実行され、ONNXの表現形式に変換されることで生成されるものとして説明したが、計算グラフの生成方法はこれに限定されず、他の方法により計算グラフを生成してもよい。
また、上記第1の実施形態では、ユーザにより入力されたレイアウト記述に基づいて生成部212がレイアウト指示書を生成し、コンパイル部213が、レイアウト指示書に従ってテンソルの各要素に、アドレスを割り当てるものとして説明した。しかしながら、アドレスの割り当て方法はこれに限定されず、例えば、コンパイル部213がレイアウトを選択し、選択したレイアウトに従ってテンソルの各要素にアドレスを割り当てるようにしてもよい。
また、上記第1の実施形態では、例えば、チップ170_1がLevelAの階層に、4個の第3階層ブロックを有し、LevelBの階層に、4個の第2階層ブロックを有するものとして説明した(図3)。しかしながら、各階層のブロック(メモリ)の数及び階層の数(深さ)はこれに限定されず、任意である。
また、上記第1の実施形態では、
・LevelAの階層:第3階層ブロック、
・LevelBの階層:第2階層ブロック、
・LevelCの階層:第1階層ブロック、
としたが、各階層の定義はこれに限定されず、例えば、
・LevelAの階層:チップ、
・LevelBの階層:第3階層ブロック、
・LevelCの階層:第2階層ブロック、
・LevelDの階層:第1階層ブロック、
としてもよいし、
・LevelAの階層:チップ及び第3階層ブロック、
・LevelBの階層:第2階層ブロック、
・LevelCの階層:第1階層ブロック、
としてもよい。
また、「LevelAの階層:チップ及び第3階層ブロック」とする場合において、例えば、1つのボードに、4個のチップが搭載され、各チップが4個の第3階層ブロックを有していたとする。この場合、LevelAの階層については、第3階層ブロックが16個あるかのように、レイアウトに関する記述を行うことができる。
なお、メモリが属する階層は、最下層に限定されず、他の階層に変わってもよい。また、最上位のメモリを束ねる構造(例えば、チップ)、チップを束ねる構造(例えば、ノード)、ノードを束ねる構造といった階層を定義して、上記第1及び第2の実施形態を適用してもよい。
[その他の実施形態]
本明細書(請求項を含む)において、「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)以外の他の要素を加えることも含む。
また、本明細書(請求項を含む)において、「データを入力として/データに基づいて/に従って/に応じて」等の表現(同様な表現を含む)が用いられる場合は、特に断りがない場合、各種データそのものを入力として用いる場合や、各種データに何らかの処理を行ったもの(例えば、ノイズ加算したもの、正規化したもの、各種データの中間表現等)を入力として用いる場合を含む。また「データに基づいて/に従って/に応じて」何らかの結果が得られる旨が記載されている場合、当該データのみに基づいて当該結果が得られる場合を含むとともに、当該データ以外の他のデータ、原因、条件、及び/又は状態等にも影響を受けて当該結果が得られる場合をも含み得る。また、「データを出力する」旨が記載されている場合、特に断りがない場合、各種データそのものを出力として用いる場合や、各種データに何らかの処理を行ったもの(例えば、ノイズ加算したもの、正規化したもの、各種データの中間表現等)を出力とする場合も含む。
また、本明細書(請求項を含む)において、「接続される(connected)」及び「結合される(coupled)」との用語が用いられる場合は、直接的な接続/結合、間接的な接続/結合、電気的(electrically)な接続/結合、通信的(communicatively)な接続/結合、機能的(operatively)な接続/結合、物理的(physically)な接続/結合等のいずれをも含む非限定的な用語として意図される。当該用語は、当該用語が用いられた文脈に応じて適宜解釈されるべきであるが、意図的に或いは当然に排除されるのではない接続/結合形態は、当該用語に含まれるものして非限定的に解釈されるべきである。
また、本明細書(請求項を含む)において、「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)されていればよい。
また、本明細書(請求項を含む)において、含有又は所有を意味する用語(例えば、「含む(comprising/including)」及び「有する(having)」等)が用いられる場合は、当該用語の目的語により示される対象物以外の物を含有又は所有する場合を含む、open-endedな用語として意図される。これらの含有又は所有を意味する用語の目的語が数量を指定しない又は単数を示唆する表現(a又はanを冠詞とする表現)である場合は、当該表現は特定の数に限定されないものとして解釈されるべきである。
また、本明細書(請求項を含む)において、ある箇所において「1つ又は複数(one or more)」又は「少なくとも1つ(at least one)」等の表現が用いられ、他の箇所において数量を指定しない又は単数を示唆する表現(a又はanを冠詞とする表現)が用いられているとしても、後者の表現が「1つ」を意味することを意図しない。一般に、数量を指定しない又は単数を示唆する表現(a又はanを冠詞とする表現)は、必ずしも特定の数に限定されないものとして解釈されるべきである。
また、本明細書において、ある実施例の有する特定の構成について特定の効果(advantage/result)が得られる旨が記載されている場合、別段の理由がない限り、当該構成を有する他の1つ又は複数の実施例についても当該効果が得られると理解されるべきである。但し当該効果の有無は、一般に種々の原因、条件、及び/又は状態等に依存し、当該構成により必ず当該効果が得られるものではないと理解されるべきである。当該効果は、種々の原因、条件、及び/又は状態等が満たされたときに実施例に記載の当該構成により得られるものに過ぎず、当該構成又は類似の構成を規定したクレームに係る発明において、当該効果が必ずしも得られるものではない。
本明細書(請求項を含む)において、「最適化する(optimize)/最適化(optimization)」等の用語が用いられる場合は、グローバルな最適値を求めること、グローバルな最適値の近似値を求めること、ローカルな最適値を求めること、及びローカルな最適値の近似値を求めることを含み、当該用語が用いられた文脈に応じて適宜解釈されるべきである。また、これら最適値の近似値を確率的又はヒューリスティックに求めることを含む。
また、本明細書(請求項を含む)において、複数のハードウェアが所定の処理を行う場合、各ハードウェアが協働して所定の処理を行ってもよいし、一部のハードウェアが所定の処理の全てを行ってもよい。また、一部のハードウェアが所定の処理の一部を行い、別のハードウェアが所定の処理の残りを行ってもよい。本明細書(請求項を含む)において、「1又は複数のハードウェアが第1の処理を行い、前記1又は複数のハードウェアが第2の処理を行う」等の表現が用いられている場合、第1の処理を行うハードウェアと第2の処理を行うハードウェアは同じものであってもよいし、異なるものであってもよい。つまり、第1の処理を行うハードウェア及び第2の処理を行うハードウェアが、前記1又は複数のハードウェアに含まれていればよい。なお、ハードウェアは、電子回路、又は、電子回路を含む装置等を含んでよい。
また、本明細書(請求項を含む)において、複数の記憶装置(メモリ)がデータの記憶を行う場合、複数の記憶装置(メモリ)のうち個々の記憶装置(メモリ)は、データの一部のみを記憶してもよいし、データの全体を記憶してもよい。
以上、本開示の実施形態について詳述したが、本開示は上記した個々の実施形態に限定されるものではない。特許請求の範囲に規定された内容及びその均等物から導き出される本発明の概念的な思想と趣旨を逸脱しない範囲において種々の追加、変更、置き換え、部分的削除等が可能である。例えば、前述した全ての実施形態において、数値又は数式を説明に用いている場合は、一例として示したものであり、これらに限られるものではない。また、実施形態における各動作の順序は、一例として示したものであり、これらに限られるものではない。

Claims (22)

  1. 少なくとも第1階層と第2階層とを有するチップにおいて実行されるマシンコードを生成するコンパイル装置であって、
    前記第2階層は前記第1階層よりも上位にあり、前記第1階層は、複数の第1ブロックを有し、
    前記コンパイル装置は、
    少なくとも1つのメモリと、
    少なくとも1つのプロセッサと、を備え、
    前記少なくとも1つのプロセッサは、
    前記チップにおいて処理されるテンソルを取得し、
    少なくとも、前記チップの前記第1階層における分割数に基づいて、前記テンソルの各要素を、前記チップに含まれる前記複数の第1ブロックのうちのいずれか1つの第1ブロックに対応付ける処理を実行し、
    前記対応付ける処理に基づいて、前記チップにおいて実行される前記マシンコードを生成し、
    前記対応付ける処理において用いられる前記第1階層は、前記チップのハードウェア構成に対応する、
    コンパイル装置。
  2. 前記少なくとも1つのプロセッサは、少なくとも前記第1階層における前記分割数と前記第1階層におけるストライドとに基づいて、前記対応付ける処理を実行する、
    請求項1に記載のコンパイル装置。
  3. 前記複数の第1ブロックは、それぞれ、前記チップに含まれる複数のメモリのうちの少なくとも1つのメモリを備え、
    前記対応付ける処理として、前記少なくとも1つのプロセッサは、少なくとも前記第1階層における前記分割数に基づいて、前記テンソルの各要素を、前記チップに含まれる前記複数のメモリのアドレスに対応付ける処理を実行する、
    請求項1又は請求項2に記載のコンパイル装置。
  4. 前記第1階層における前記分割数は、少なくとも、前記第1階層における縦方向の分割数と横方向の分割数とを含む、
    請求項1乃至請求項3のいずれか1項に記載のコンパイル装置。
  5. 前記第1階層における前記ストライドは、少なくとも、前記第1階層における縦方向のストライドと、横方向のストライドとを含む、
    請求項2に記載のコンパイル装置。
  6. 前記第2階層は、複数の第2ブロックを有し、前記複数の第2ブロックは、それぞれ、前記複数の第1ブロックを有し、
    前記対応付ける処理は、
    前記少なくとも1つのプロセッサが、少なくとも前記チップの前記第2階層における分割数に基づいて、前記テンソルの各要素を、前記チップに含まれる前記複数の第2ブロックのうちのいずれか1つの第2ブロックに対応付ける他の処理を含み、
    前記対応付ける他の処理において用いられる前記第2階層は、前記チップのハードウェア構成に対応する、
    請求項1乃至請求項5のいずれか1項に記載のコンパイル装置。
  7. 前記少なくとも1つのプロセッサは、少なくとも前記第2階層における前記分割数と前記第2階層におけるストライドとに基づいて、前記対応付ける他の処理を実行する、
    請求項6に記載のコンパイル装置。
  8. 前記第1階層における前記分割数及び前記第2階層における前記分割数とは、互いに異なる、
    請求項6又は請求項7に記載のコンパイル装置。
  9. 前記少なくとも1つのプロセッサは、更に、前記チップにおいて処理される計算グラフを取得し、前記テンソルは、前記計算グラフにおいて用いられるテンソルである、
    請求項1乃至請求項8のいずれか1項に記載のコンパイル装置。
  10. 前記少なくとも1つのプロセッサは、更に、ソースコードに基づいて前記計算グラフを生成する、
    請求項9に記載のコンパイル装置。
  11. 前記第1階層における前記分割数は、前記ソースコードに記述される、
    請求項10に記載のコンパイル装置。
  12. 請求項1乃至請求項11のいずれか1項に記載のコンパイル装置が備える前記少なくとも1つのプロセッサが前記マシンコードを生成する、
    生成方法。
  13. 請求項12に記載の生成方法を、コンパイル装置が備える少なくとも1つのプロセッサに実行させる、
    プログラム。
  14. 少なくとも1つのメモリと少なくとも1つのプロセッサとを有するコンパイル装置と、
    少なくとも第1階層と第2階層とを有するチップと、を有するシステムであって、
    前記第2階層は、前記第1階層よりも上位にあり、前記第1階層は、複数の第1ブロックを有し、
    前記少なくとも1つのプロセッサは、
    前記チップにおいて処理されるテンソルを取得し、
    少なくとも、前記チップの前記第1階層における分割数に基づいて、前記テンソルの各要素を、前記チップに含まれる前記複数の第1ブロックのうちのいずれか1つの第1ブロックに対応付ける処理を実行し、
    前記対応付ける処理に基づいて、前記チップにおいて実行されるマシンコードを生成し、
    前記チップは、
    前記コンパイル装置によって前記対応付ける処理が実行されることで生成された前記マシンコードを実行することで、前記テンソルの各要素の値を、前記テンソルの各要素に対応付けられた前記第1ブロックに書き込む処理、または、前記テンソルの各要素に対応付けられた前記第1ブロックから、前記テンソルの各要素の値を読み出す処理、の少なくともいずれかを実行し、
    前記対応付ける処理において用いられる前記第1階層は、前記チップのハードウェア構成に対応する、
    システム。
  15. 前記チップは、前記テンソルの各要素と対応付けられる前記第1ブロックに、前記テンソルの各要素の値を書き込む処理を実行する際、書き込み先のメモリに応じてサイズを調整するパディング処理を実行する、
    請求項1に記載のシステム。
  16. 前記チップは、更に、配列の形状が合致しないテンソル同士の演算を行う際、ブロードキャスト処理を実行する、
    請求項1又は請求項1に記載のシステム。
  17. 前記少なくとも1つのプロセッサは、少なくとも、前記第1階層における前記分割数と前記第1階層におけるストライドとに基づいて、前記対応付ける処理を実行する、
    請求項1乃至請求項1のいずれか1項に記載のシステム。
  18. 前記チップは、更に、複数のメモリを備え、前記複数の第1ブロックは、それぞれ、前記複数のメモリのうちの少なくとも1つのメモリを含み、
    前記対応付ける処理として、前記少なくとも1つのプロセッサは、少なくとも前記第1階層における前記分割数に基づいて、前記テンソルの各要素を、前記チップに含まれる前記複数のメモリのアドレスに対応付ける処理を実行する、
    請求項1乃至請求項1のいずれか1項に記載のシステム。
  19. 前記チップに含まれる前記複数のメモリは、木構造により接続されている、
    請求項1に記載のシステム。
  20. 前記チップの前記第2階層は、複数の第2ブロックを有し、前記第2ブロックは、それぞれ、前記複数の第1ブロックを有し、
    前記対応付ける処理は、
    前記少なくとも1つのプロセッサが、少なくとも前記チップの前記第2階層における分割数に基づいて、前記テンソルの各要素を、前記チップに含まれる前記複数の第2ブロックのうちのいずれか1つの第2ブロックに対応付ける他の処理を含み、
    前記対応付ける他の処理において用いられる前記第2階層は、前記チップのハードウェア構成に対応する、
    請求項1乃至請求項19のいずれか1項に記載のシステム。
  21. 前記複数の第1ブロックは、それぞれ、少なくとも1つの演算器を備える、
    請求項1乃至請求項2のいずれか1項に記載のシステム。
  22. 前記チップは、SIMDアーキテクチャにより動作する、
    請求項1乃至請求項2のいずれか1項に記載のシステム。
JP2021174381A 2021-10-26 2021-10-26 コンパイル装置、生成方法、プログラム及びシステム Active JP7770865B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2021174381A JP7770865B2 (ja) 2021-10-26 2021-10-26 コンパイル装置、生成方法、プログラム及びシステム
US18/048,934 US12367025B2 (en) 2021-10-26 2022-10-24 Compiler, generation method, chip, and execution method
US19/242,677 US20250315233A1 (en) 2021-10-26 2025-06-18 Compiler, system, generation method, and non-transitory computer-readable storage medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2021174381A JP7770865B2 (ja) 2021-10-26 2021-10-26 コンパイル装置、生成方法、プログラム及びシステム

Publications (3)

Publication Number Publication Date
JP2023064233A JP2023064233A (ja) 2023-05-11
JP2023064233A5 JP2023064233A5 (ja) 2025-06-24
JP7770865B2 true JP7770865B2 (ja) 2025-11-17

Family

ID=86057074

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021174381A Active JP7770865B2 (ja) 2021-10-26 2021-10-26 コンパイル装置、生成方法、プログラム及びシステム

Country Status (2)

Country Link
US (2) US12367025B2 (ja)
JP (1) JP7770865B2 (ja)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190392296A1 (en) 2019-06-28 2019-12-26 John Brady Hardware agnostic deep neural network compiler
WO2020227015A1 (en) 2019-05-03 2020-11-12 Google Llc Reshape and broadcast optimizations to avoid unnecessary data movement
WO2021162765A1 (en) 2020-02-14 2021-08-19 Google Llc Direct memory access architecture with multi-level multi-striding
CN113469328A (zh) 2021-06-24 2021-10-01 上海寒武纪信息科技有限公司 执行转数穿过的装置、板卡、方法及可读存储介质

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69132495T2 (de) 1990-03-16 2001-06-13 Texas Instruments Inc., Dallas Verteilter Verarbeitungsspeicher
JP3223530B2 (ja) * 1991-08-20 2001-10-29 富士通株式会社 データ転送命令生成処理方法
US20070208760A1 (en) 2006-03-06 2007-09-06 Reuter James M Data-state-describing data structures
US9779786B1 (en) * 2016-10-26 2017-10-03 Xilinx, Inc. Tensor operations and acceleration
US10387298B2 (en) 2017-04-04 2019-08-20 Hailo Technologies Ltd Artificial neural network incorporating emphasis and focus techniques
US11687341B2 (en) * 2019-08-29 2023-06-27 Intel Corporation Multi-variate strided read operations for accessing matrix operands

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020227015A1 (en) 2019-05-03 2020-11-12 Google Llc Reshape and broadcast optimizations to avoid unnecessary data movement
US20190392296A1 (en) 2019-06-28 2019-12-26 John Brady Hardware agnostic deep neural network compiler
WO2021162765A1 (en) 2020-02-14 2021-08-19 Google Llc Direct memory access architecture with multi-level multi-striding
CN113469328A (zh) 2021-06-24 2021-10-01 上海寒武纪信息科技有限公司 执行转数穿过的装置、板卡、方法及可读存储介质

Also Published As

Publication number Publication date
JP2023064233A (ja) 2023-05-11
US20250315233A1 (en) 2025-10-09
US12367025B2 (en) 2025-07-22
US20230129676A1 (en) 2023-04-27

Similar Documents

Publication Publication Date Title
Gent et al. MINION: A Fast, Scalable, Constraint Solver¹
US12093811B2 (en) Fractal calculating device and method, integrated circuit and board card
Tanase et al. The STAPL parallel container framework
CN112997156B (zh) 用于电子设计自动化操作的计算资源的动态分配
US20220391320A1 (en) Operation device of convolutional neural network, operation method of convolutional neural network and computer program stored in a recording medium to execute the method thereof
Cook et al. GPU based parallel Ising computing for combinatorial optimization problems in VLSI physical design
US11841822B2 (en) Fractal calculating device and method, integrated circuit and board card
US10896373B1 (en) Determining comprehensibility of a graphical model in a graphical modeling environment
US20240411977A1 (en) Dynamic standard cell external pin methodology for routability-driven standard cell design automation
JP7770865B2 (ja) コンパイル装置、生成方法、プログラム及びシステム
KR102657104B1 (ko) 합성곱 연산 장치, 합성곱 연산 방법 및 합성곱 연산 방법을 실행시키도록 기록매체에 저장된 컴퓨터 프로그램
JPH05101141A (ja) 高位合成装置
JP7624056B2 (ja) ニューラルネットワークアクセラレータ用の命令生成方法、装置および電子デバイス
US12592023B2 (en) Intersection testing for ray tracing
US12547330B2 (en) Storage usage
US12436695B1 (en) Re-accessing data
US20260023684A1 (en) Storage usage
US20260023603A1 (en) Storage allocation
US20260104929A1 (en) Operation-specific control data
JP7794539B2 (ja) 命令生成方法、演算処理装置、命令生成装置及びプログラム
US20250181814A1 (en) Differentiable global router
US12499045B1 (en) Efficient data processing
US20260127024A1 (en) Data handling
US20260086782A1 (en) Hardware code generation from multimedia specification documents
WO2026018024A1 (en) Storage usage

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20241015

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20241111

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20250613

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20250709

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20250902

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20250922

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20251007

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20251105

R150 Certificate of patent or registration of utility model

Ref document number: 7770865

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150