(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022127619
(43)【公開日】2022-08-31
(54)【発明の名称】ハードウェアアクセラレートされた命令の使用
(51)【国際特許分類】
G06F 15/82 20060101AFI20220824BHJP
G06N 99/00 20190101ALI20220824BHJP
【FI】
G06F15/82 620Z
G06N99/00 180
【審査請求】未請求
【請求項の数】15
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2022023568
(22)【出願日】2022-02-18
(31)【優先権主張番号】10 2021 201 597.2
(32)【優先日】2021-02-19
(33)【優先権主張国・地域又は機関】DE
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.BLUETOOTH
2.ZIGBEE
(71)【出願人】
【識別番号】390023711
【氏名又は名称】ローベルト ボツシユ ゲゼルシヤフト ミツト ベシユレンクテル ハフツング
【氏名又は名称原語表記】ROBERT BOSCH GMBH
【住所又は居所原語表記】Stuttgart, Germany
(74)【代理人】
【識別番号】100114890
【弁理士】
【氏名又は名称】アインゼル・フェリックス=ラインハルト
(74)【代理人】
【識別番号】100098501
【弁理士】
【氏名又は名称】森田 拓
(74)【代理人】
【識別番号】100116403
【弁理士】
【氏名又は名称】前川 純一
(74)【代理人】
【識別番号】100134315
【弁理士】
【氏名又は名称】永島 秀郎
(74)【代理人】
【識別番号】100162880
【弁理士】
【氏名又は名称】上島 類
(72)【発明者】
【氏名】デニス ゼバスティアン リーバー
(57)【要約】
【課題】本発明は、制約充足問題を解くことによって、プロセッサシステムのハードウェアアクセラレートされた命令を使用して計算を実施するコンピュータ実施方法(600)に関する。
【解決手段】制約充足問題に対する解は、計算におけるハードウェアアクセラレートされた命令の可能な呼出しを表す。制約充足問題は、計算データフローグラフのノードを命令データフローグラフのノードに割り当てる。制約充足問題は、計算データフローグラフの割り当てられたノードが、命令データフローグラフと同等のデータフローを有することを強制する制約と、計算データフローグラフのどのノードを、ハードウェアアクセラレートされた命令の入力に割り当てることができるかを制限する制約とを含み、制限は、ハードウェアアクセラレートされた命令及び/又はそのプログラミングインタフェースによって課される。
【選択図】
図3
【特許請求の範囲】
【請求項1】
プロセッサシステムのハードウェアアクセラレートされた命令を使用して計算を実施するコンピュータ実施方法(600)であって、
・当該方法(600)は、計算データを取得すること(610)を含み、前記計算データは、計算を表す計算データフローグラフを定義し、前記計算データフローグラフのノードは、前記計算の入力又は演算を表し、
・当該方法(600)は、命令データを取得すること(620)を含み、前記命令データは、ハードウェアアクセラレートされた命令を表す命令データフローグラフを定義し、前記命令データフローグラフのノードは、前記ハードウェアアクセラレートされた命令の入力又は演算を表し、
・当該方法(600)は、前記計算データ及び前記命令データに基づいて制約充足問題を定義すること(630)を含み、前記制約充足問題に対する解は、前記計算における前記ハードウェアアクセラレートされた命令の可能な呼出しを表し、前記制約充足問題は、前記計算データフローグラフのノードを前記命令データフローグラフのノードに割り当て、前記制約充足問題は、少なくとも、
・前記計算データフローグラフの割り当てられた前記ノードが、前記命令データフローグラフと同等のデータフローを有することを強制する1つ又は複数の制約、
・前記計算データフローグラフのどのノードを、前記ハードウェアアクセラレートされた命令の入力に割り当てることができるかを制限する1つ又は複数の制約を含み、前記制限は、前記ハードウェアアクセラレートされた命令及び/又はそのプログラミングインタフェースによって課され、
・当該方法(600)は、前記計算における前記ハードウェアアクセラレートされた命令の可能な呼出しを決定するために前記制約充足問題を解くこと(640)と、前記可能な呼出しを定義するデータを出力すること(650)とを含む、
方法(600)。
【請求項2】
当該方法(600)は、前記計算を実施する機械実行可能命令を生成することをさらに含み、
前記命令は、前記決定された可能な呼出しに従って前記ハードウェアアクセラレートされた命令を呼び出す、
請求項1に記載の方法(600)。
【請求項3】
前記計算の演算、及び/又は、前記ハードウェアアクセラレートされた命令の演算は、スカラ演算である、
請求項1又は2に記載の方法(600)。
【請求項4】
前記ハードウェアアクセラレートされた命令は、行列乗算、畳み込み、ドット積、行列ベクトル積、累積和、プーリング、及び、アダマール積のうちの1つ又は複数を実施する、
請求項3に記載の方法(600)。
【請求項5】
前記計算は、ニューラルネットワーク層の畳み込み、行列乗算、及び、プーリング演算のうちの1つ又は複数を適用することを含む、
請求項4に記載の方法(600)。
【請求項6】
前記命令データフローグラフは、前記ハードウェアアクセラレートされた命令の出力の部分集合のみに関するノードを含み、
当該方法は、前記可能な呼出しから、前記ハードウェアアクセラレートされた命令のさらなる出力の、前記計算の演算へのマッピングを推論することさらに含む、
請求項1乃至5のいずれか一項に記載の方法(600)。
【請求項7】
前記計算データは、前記計算データフローグラフのノードの集合をシンボル的に定義する多面体表現を含み、
前記制約充足問題を解くことは、
前記ノードの集合のうちの1つのノードを取得するために前記多面体表現をインスタンス化することと、
取得した前記ノードに、前記命令データフローグラフのノードをマッピングすることと
を含む、請求項1乃至6のいずれか一項に記載の方法(600)。
【請求項8】
当該方法は、前記ハードウェアアクセラレートされた命令の入力が、許可されたメモリレイアウト及び/又は許可されたメモリアクセスパターンを有することを強制するための1つ又は複数の制約を定義することを含む、
請求項1乃至7のいずれか一項に記載の方法(600)。
【請求項9】
当該方法は、前記ハードウェアアクセラレートされた命令の相互並列化可能な演算のペアが、前記計算の相互並列化可能な演算のペアにマッピングされることを強制するための1つ又は複数の制約を定義することを含む、
請求項1乃至8のいずれか一項に記載の方法(600)。
【請求項10】
前記命令データフローグラフのノードは、可換縮約演算を表し、
当該方法は、前記ノードが前記計算データフローグラフの対応するノードにマッピングされることを強制するための1つ又は複数の制約を定義することを含む、
請求項1乃至9のいずれか一項に記載の方法(600)。
【請求項11】
当該方法は、前記ハードウェアアクセラレートされた命令の演算を、前記計算に影響を与えないダミー演算にマッピングすることを許可するために、前記制約充足問題を定義することを含む、
請求項1乃至10のいずれか一項に記載の方法(600)。
【請求項12】
当該方法は、前記ハードウェアアクセラレートされた命令の入力が超直方体を形成することを強制する1つ又は複数の制約を、前記制約充足問題に含めることを含む、
請求項1乃至11のいずれか一項に記載の方法(600)。
【請求項13】
当該方法は、
前記制約充足問題に対する複数の解を決定することと、
前記複数の解の性能を評価することと、
前記性能の評価に基づいて前記複数の解から1つの解を選択することと
を含む、請求項1乃至12のいずれか一項に記載の方法(600)。
【請求項14】
プロセッサシステムのハードウェアアクセラレートされた命令を使用して計算を実施するためのシステム(100)であって、
・当該システムは、計算データ(030)及び命令データ(040)にアクセスするためのデータインタフェース(120)を含み、
前記計算データは、計算を表す計算データフローグラフを定義し、前記計算データフローグラフのノードは、前記計算の入力又は演算を表し、
前記命令データは、ハードウェアアクセラレートされた命令を表す命令データフローグラフを定義し、前記命令データフローグラフのノードは、前記ハードウェアアクセラレートされた命令の入力又は演算を表し、
・当該システムは、プロセッサシステム(140)を含み、
・前記プロセッサシステム(140)は、前記計算データ及び前記命令データを取得するように構成されており、
・前記プロセッサシステム(140)は、前記計算データ及び前記命令データに基づいて制約充足問題を定義するように構成されており、前記制約充足問題に対する解は、前記計算における前記ハードウェアアクセラレートされた命令の可能な呼出しを表し、前記制約充足問題は、前記計算データフローグラフのノードを前記命令データフローグラフのノードに割り当て、前記制約充足問題は、少なくとも、
・前記計算データフローグラフの割り当てられた前記ノードが、前記命令データフローグラフと同等のデータフローを有することを強制する1つ又は複数の制約、
・前記計算データフローグラフのどのノードを、前記ハードウェアアクセラレートされた命令の入力に割り当てることができるかを制限する1つ又は複数の制約を含み、前記制限は、前記ハードウェアアクセラレートされた命令及び/又はそのプログラミングインタフェースによって課され、
・前記プロセッサシステム(140)は、前記計算における前記ハードウェアアクセラレートされた命令の可能な呼出しを決定するために前記制約充足問題を解くように、かつ、前記可能な呼出しを定義するデータを出力するように構成されている、
システム(100)。
【請求項15】
一時的又は非一時的なデータ(710)を含むコンピュータ可読媒体(700)であって、
・前記一時的又は非一時的なデータ(710)は、プロセッサシステムによって実行された場合に、前記プロセッサシステムに請求項1乃至13のいずれか一項に記載のコンピュータ実施方法を実施させるための命令を表し、及び/又は、
・前記一時的又は非一時的なデータ(710)は、ハードウェアアクセラレートされた命令を支援するプロセッサシステムによって実行された場合に、前記プロセッサシステムに計算を実施させるための命令を表し、前記命令は、請求項1乃至13のいずれか一項に記載のコンピュータ実施方法を使用して決定された可能な呼出しに従って前記ハードウェアアクセラレートされた命令を呼び出すためのものである、
コンピュータ可読媒体(700)。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プロセッサシステムのハードウェアアクセラレートされた命令を使用して計算を実施するコンピュータ実施方法と、対応するシステムとに関する。本発明はさらに、上記の方法を実施するための命令を含む、及び/又は、ハードウェアアクセラレートされた命令を使用して計算を実施するための命令を含む、コンピュータ可読媒体に関する。
【背景技術】
【0002】
発明の背景
収集及び処理されるデータの量が増えるにつれて、大型の計算を効率的に実施することがますます重要になってきている。大量のデータを処理する必要性が特に普及している1つの分野は、機械学習である。例えば、ディープニューラルネットワーク(DNN)のようなニューラルネットワークの評価だけでなく、特に、訓練もまた、多数の行列乗算、畳み込み、ドット積、及び、類似の演算の評価を含む。特定の用途に適合させられた大規模かつ継続的に進化する種々のDNNアーキテクチャが存在する。
【0003】
このような計算を高速化するために、ますます多くの専用化されたハードウェアが利用可能になりつつある。そのようなハードウェアは、行列乗算又は畳み込みのような特定の命令を効率的に実施するように最適化されたハードウェアアクセラレータを含む。従って、そのようなハードウェアアクセラレートされた命令を使用することにより、特に、リソース制約された設定において計算をより効率的に実施することが可能となる。
【0004】
ハードウェアアクセラレートされた命令を利用するためには、高級プログラミング言語におけるコードを、ハードウェアアクセラレートされた命令を呼び出す機械実行可能命令に変換するコンパイラ技術を提供することが重要である。実施されるべき計算と、これらの計算を実施するハードウェアアーキテクチャとの両方が継続的に進化しているので、このことが特に重要である。しかしながら、ハードウェアアクセラレートされた命令が最も効果的に利用されるように、ニューラルネットワーク層の評価に関連する計算などの計算をどのように実施すべきかを自動的に決定することは、複雑なタスクである。このタスクが非常に複雑である理由の1つは、ハードウェアアクセラレートされた命令が、多次元の入力配列及び出力配列にわたって数百又は数千の並列及びシーケンシャルな演算を含むことがある複雑なデータフローを有する可能性があることである。
【0005】
M. Sotoudehら著の文献“ISA Mapper: A Compute and Hardware Agnostic Deep Learning Compiler”(https://arxiv.org/abs/1810.09958から入手可能であり、参照により本明細書に援用される)においては、行列乗算命令を含む命令集合に対してコード生成を実施するための技術が提示されている。深層学習計算のカーネル及びハードウェアの能力は、演算子のループレベル表現で機能する中間表現によって記述される。ハードウェアシステム上において計算を実施することができる可能な手法を決定するために、命令マッピングが適用される。この命令マッピングにおいては、多数の「IR変換」が計算に適用され、その後、「決定論的マッパ(deterministic mapper)」が、この変換された計算をループレベルでハードウェア命令にマッピングすることを試みる。スケジューラは、特定のマッピングを選択する。マッピング及びスケジュールの大規模な検索空間を管理するために、ヒューリスティクス、コストモデル、及び、場合によっては機械学習が使用される。
【先行技術文献】
【非特許文献】
【0006】
【非特許文献1】“ISA Mapper: A Compute and Hardware Agnostic Deep Learning Compiler”、M. Sotoudehら著(https://arxiv.org/abs/1810.09958から入手可能)
【発明の概要】
【発明が解決しようとする課題】
【0007】
発明の概要
ハードウェアアクセラレートされた命令を使用して計算を実施するための既存の技術の1つの欠点は、演算子のループレベル表現を使用することにより、ループ及びテンソルの順序付け又はアクセス関数表記のような暗示的な実装決定が導入されることである。例えば、演算子におけるステンシルに関するテンソルアクセス関数は、x*stride+wであるものとしてよく、その一方で、アクセラレータは、アクセス関数i+kを有する命令を提供することができる。ストライド=1である場合には、整合が可能であるが、一般的に、例えばパターン整合法によってこのような整合を自動的に確立することは困難である。従って、可能な実装を見逃す可能性がある。
【0008】
また、既存の技術が、IR変換の明示的に指定された集合に依存することも不利である。埋め込みにつながる変換の特定のシーケンスを直接的に検出することは困難である。最終的に、このことは、多くの異なる実装候補を生成しなければならない非決定論的な検索プロセスにつながる可能性がある。また、より多くの変換が追加されるほど、検索空間がより大きくなり、解の数に関するリターンが減少する。従って、最適な実装を発見するために必要とされる探索と、合理的な時間量で解を発見するために必要とされる検索空間の制限との間に対立関係が存在する。さらに、変換の大規模な集合が使用される場合であっても、実装のサブクラスが、利用することができない変換の背後に隠されている可能性が残る。
【0009】
これらの欠点に起因して、既存の技術は、ハードウェアアクセラレートされた命令を最も効果的に利用する計算の実装を発見することができない可能性がある。いくつかの場合には、既存の技術は、ハードウェアアクセラレートされた命令を計算においてどのように使用することができるかを全く発見することができない可能性さえある。従って、ハードウェアアクセラレートされた命令を使用した計算の、より可能な実装を発見することができる技術を有することが望ましい。また、そのような実装をより効率的に発見することができる技術を有することも望ましい。
【課題を解決するための手段】
【0010】
本発明の第1の態様によれば、請求項1及び14によってそれぞれ規定されているように、プロセッサシステムのハードウェアアクセラレートされた命令を使用して計算を実施するためのコンピュータ実施方法及び対応するシステムが提供される。本発明の他の態様によれば、請求項15によって規定されているように、コンピュータ可読媒体が提供される。
【0011】
種々の手段は、プロセッサシステムのハードウェアアクセラレートされた命令を使用して計算を実施することに向けられている。ハードウェアアクセラレートされた命令を使用して計算を実施することとは、計算における命令の可能な呼出しを発見することを意味し、即ち、計算のうちの、命令の呼出しによって実施することができる部分を発見することを意味する。計算を実施し、例えば、計算を実行可能コードにコンパイルするために、決定された可能な呼出しに従ってハードウェアアクセラレートされた命令を呼び出すような機械実行可能命令を、決定された呼出しを使用して自動的に生成することができるが、このことは、必須ではない。例えば、計算を手動で実施する際に使用するために、このような実装がそもそも可能であるかどうかを判定するために、又は、実際のコンパイルを実施する他のシステムによって使用するために、可能な呼出しを発見すること自体が既に有用である。
【0012】
計算と、ハードウェアアクセラレートされた命令とを、それぞれのデータフローグラフによって表すことができる。データフローグラフのノードは、計算又は命令の入力及び演算を表すことができ、エッジは、ノード間のデータフロー関係を表し、例えば、演算の着信エッジは、演算が作用する値を表すために使用可能である。ハードウェアアクセラレートされた命令は、典型的には、固定のデータフローを有する所定の演算を実施し、例えば、命令データフローグラフは、固定可能である。演算とは、典型的には、スカラ演算、例えば個々の数値要素又は非数値要素に適用される演算である。
【0013】
興味深いことに、本発明者らは、計算におけるハードウェアアクセラレートされた命令の可能な呼出しを決定するという問題が、計算データフローグラフのノードを命令データフローグラフのノードに割り当てる制約充足問題として表現可能であることを認識した。従って、制約充足問題の解は、計算データフローグラフのノード、例えば計算の演算又は入力を命令データフローグラフのノード、例えばハードウェアアクセラレートされた命令の演算又は入力に割り当てることができる。このような割り当ては、本明細書においては、計算データフローグラフへの命令データフローグラフの「マッピング」とも称される。効果的には、計算を変換して、その後、その計算をハードウェア命令にマッピングすることによるトップダウンのアプローチで可能な呼出しを発見するのではなく、制約充足問題の解を発見することによって命令から計算へのマッピングを漸進的に構築することができるボトムアップのアプローチが提案される。
【0014】
制約充足問題は、この制約充足問題に対する解が、計算におけるハードウェアアクセラレートされた命令の可能な呼出しを表すように定義可能である。このために、制約充足問題は、データフロー制約及び入力制約と称される少なくとも2つの種類の制約を含み得る。
【0015】
データフロー制約は、計算データフローグラフのうちの、命令データフローグラフのノードに割り当てられたノードが、命令データフローグラフと同等のデータフローを有することを強制することができる。例えば、ハードウェアアクセラレートされた命令は、計算のうちの、ハードウェアアクセラレートされた命令の機能に対応する部分にマッピングされる。特に、命令データフローグラフによって示されるデータフロー関係に従って、命令データフローグラフの入力がマッピングされた計算の値に基づいて、命令データフローグラフの演算を実施することにより、これらの演算がマッピングされた計算データフローの演算を実施するのと同等の計算結果をもたらすことができる。これを強制する1つの手法は、命令データフローグラフがマッピングされる計算データフローグラフのサブグラフが、命令データフローグラフ自体と同型であることを強制することであるが、ただし、この要求を緩和することが可能である。
【0016】
しかしながら、本発明者らが認識したように、命令データフローグラフから計算データフローグラフへのマッピングが、ハードウェアアクセラレートされた命令の可能な呼出しを表すようにするためには、多くの場合、データフロー制約を使用するだけでは十分ではない。なぜなら、ハードウェアアクセラレートされた命令及び/又はそのプログラミングインタフェースは、通常、命令を適用することができる計算の値に関して追加的な制限を課しているからである。例えば、ハードウェアアクセラレートされた命令は、この命令の入力が、特定のメモリレイアウトに従って編成されること、及び/又は、特定のアクセスパターンに従ってアクセスされることを要求することがある。そのような要求を表すために、制約充足問題は、計算データフローグラフのどのノードを、ハードウェアアクセラレートされた命令の入力に割り当てることができるかを制限する1つ又は複数の入力制約も含み得る。これにより、可能な呼出しを、ハードウェアアクセラレートされた命令、及び/又は、そのプログラミングインタフェースによって課される制限に適合した呼出しにすることができる。
【0017】
興味深いことに、可能な呼出しを制約充足問題に関して定義することにより、可能な呼出しを、制約充足問題を解くことによって決定することが可能となる。これに関する技術自体は、公知である。データフロー及び入力制約は、呼出しが可能であることを保証することができる。最初に、完全な計算に変換を適用して、その後、変換された計算がハードウェアアクセラレートされた命令を使用して実施可能である場合には、それを試す必要はない。これは、非効率であり得る。その代わりに、ハードウェアアクセラレートされた命令の呼出しを表すマッピングを、制約ソルバによって漸進的に構築することができ、制約は、解が可能な呼出しであることを保証する。また、完了することが非常に困難又は不可能であろう、コード変換の明示的な集合を定義する必要もなくなる。
【0018】
マッピングは、例えばループレベルとは対照的に演算レベルで実施され、制約を充足するあらゆるマッピングを制約ソルバによって発見することができるので、ループ順序付け、メモリレイアウト及びメモリアクセス関数のような暗示的な実装決定を回避することができる。特に、呼出しは、所定の変換の集合に基づいて公知のアプローチによって提供されるものよりもフレキシブルなメモリレイアウトによって決定可能である。ベンチマークにおける実験は、このようなフレキシビリティの実際の増加により、公知の技術よりも良好な性能を有する呼出しを発見することができることを示している。従って、ハードウェアアクセラレートされた命令の広範囲の可能な呼出しを発見することが可能となり、このことをより効率的な、例えば計算的により低労力の手法によって実行することが可能となる。ハードウェアアクセラレートされた命令のこれらのさらに効果的な呼出しを発見することが可能となり、又は、これまでは実行可能ではなかった計算に対しても呼出しを発見することさえ可能となる。
【0019】
可能な呼出しを発見するために制約ソルバを使用するさらなる利点は、可能な呼出しが充足しなければならない要求を、有益であると考えられる選好から分離することができることである。特に、制約ソルバによって適用される変数選択戦略及び/又は値選択戦略を適合させることによって、制約の解決中に、解が有効であるということが何を意味するのかに影響を与えることなく、解空間にわたる制御を行うことができる。制約ソルバを制御することにより、最初に特定の解を発見するように制約ソルバをガイドすることができる。従って、決定される可能な呼出しの品質を改善することができ、解空間の一部を廃棄することなく、潜在的な解の一部を試すために効果的に提案することによって、制約ソルバの効率をさらに改善することができる。即ち、提案が解につながらなかった場合にも、制約ソルバは、他の可能な解を考慮し続けることができる。
【0020】
任意選択的に、計算を実施する機械実行可能命令を生成することができる。これらの命令は、決定された可能な呼出しに従ってハードウェアアクセラレートされた命令を呼び出すことができる。このようにして、ハードウェアアクセラレートされた命令を利用した計算の効率的な実装を得ることができる。従って、計算を機械実行可能命令にコンパイルする方法を提供することができる。
【0021】
任意選択的に、計算データフローグラフ及び命令データフローグラフは、スカラ演算を表すノードを含み得る。例えば、スカラ演算は、固定数の1つ又は複数の別個の値(通常は1つ又は2つ)に作用して、固定数の1つ又は複数の別個の値(通常は1つ)を出力することができる。従って、制約充足問題は、ループレベルにおける動作とは対照的に、スカラ演算をスカラ演算にマッピングすることができる。いくつかの実施形態によれば、グラフのそれぞれのノードは、スカラ演算を表すことができるが、ただし、他の箇所で説明される可換縮約演算は例外であり得る。他の箇所においても説明されるように、スカラレベルでマッピングを実施することにより、そうでなければどの呼出しを発見することができるかを制限する可能性のあった暗示的なモデル化仮定が最小化され、より良好な性能を有する呼出しを識別することが可能となる。
【0022】
任意選択的に、ハードウェアアクセラレートされた命令は、行列乗算、畳み込み、ドット積、行列ベクトル積、累積和、プーリング、及び、アダマール積のうちの1つ又は複数を実施することができる。これらは、大型の計算において繰り返し実行される一般的な演算であり、そのためにハードウェアアクセラレーションを利用することができるので、これらの演算を最適化することが特に重要である。
【0023】
一般的に、計算とは、ハードウェアアクセラレートされた命令によって実施可能であることが期待される演算を含む計算である。例えば、計算は、ハードウェアアクセラレートされた命令の適用に対して潜在的に適しているとして手動で選択される、ニューラルネットワーク評価における畳み込み演算子の適用のような、比較的大型の計算のうちのサブ計算であるものとしてよい。データフローに関して、計算において命令を呼び出すことができる多くの異なる手法が存在するものとしてよいが、これらの手法の一部だけが、ハードウェアアクセラレートされた命令、及び/又は、そのプログラミングインタフェースによって課される制限を遵守することができ、これらの可能な呼出しは、性能に関して大幅に異なる可能性がある。従って、可能な呼出しを自動的に発見及び/又は列挙することが可能であることが重要である。
【0024】
任意選択的に、命令データフローグラフは、ハードウェアアクセラレートされた命令の出力の部分集合のみに関するノードを含み得る。ハードウェアアクセラレートされた命令の他の出力も、これらの他の出力を計算するために使用される演算も除外することができ、これにより、制約充足問題を解くのがより効率的になる。次いで、決定された可能な呼出しに基づいて、この決定された可能な呼出しを、命令によって実施される完全な計算まで一般化することができる。例えば、行列乗算命令の場合には、完全な行列乗算の入力及び出力に外挿するために、単一の出力要素の計算のデータフローグラフで十分であり得る。出力のうちの、ハードウェアアクセラレートされた命令の全ての入力を使用する部分集合を選択することができ、これにより、可能な呼出しが全ての入力をマッピングするようになり、これによって、外挿が容易になり、又は、計算への命令入力のマッピングを外挿することもできる。
【0025】
任意選択的に、計算は、ニューラルネットワーク評価に適用される計算であるものとしてよい。例えば計算は、例えば、ニューラルネットワーク層の入力に適用される畳み込み、行列乗算、及び/又は、プーリング演算を含み得る。計算は、ニューラルネットワーク層の入力のそれぞれのノードに接触することができる。ニューラルネットワーク評価は、ニューラルネットワークの訓練中及び使用中の両方において行われる演算であり、行列乗算のようなハードウェアアクセラレーションに適した演算を繰り返し適用することを含み、従って、特に重要な最適化ターゲットである。さらに、データフローに関して、これらの演算を適用することができる多くの手法が存在する。特に、ニューラルネットワークの訓練が効果的であるためには、典型的には、大規模なデータ集合に対してニューラルネットワークを訓練する必要があるが、その一方で、ニューラルネットワークの評価は、リソース制約された環境において行われることが多い。どちらのケースにおいても、最適化が特に重要である。さらに、ニューラルネットワーク層及びアクセラレーションハードウェアの多種多様で継続的な開発を考慮すると、新しい種類のニューラルネットワーク層の及び/又は新しいハードウェアターゲットのための実装が得られることが特に重要である。
【0026】
任意選択的に、計算の少なくとも一部を多面体表現によって指定することができる。多面体表現は、計算データフローグラフのノードの集合をシンボル的に定義することができる。制約充足問題を解く際には、このノードの集合のうちの具体的なノードを取得するために多面体表現をインスタンス化することができ、次いで、この取得したノードに、命令データフローグラフのノードをマッピングすることができる。
【0027】
多面体表現自体は、ループに基づくプログラムをコンパクトに表す手法として公知である。興味深いことに、発明者らは、ループに基づくプログラムのループをモデル化することに加えて、多面体表現を使用して、データフローをモデル化することもできることを認識した。多面体表現を相互に直接的に変換することによって呼出しを決定することは望ましくない。なぜなら、例えば、表現は、ループ又はテンソル次元の順序付けのようなモデル化仮定を表しているからであり、そのようにするためには、表現の明示的な変換を定義することが必要になる場合があり、他の箇所で説明される関連する欠点が伴うからである。興味深いことに、命令データフローグラフがマッピングされるべき計算データフローグラフの多面体表現を使用することにより、これらの欠点が回避される。
【0028】
本技術と組み合わせて、多面体表現を使用して、計算データフローグラフの多面体の集合をシンボル的に定義することができる。しかしながら、興味深いことに、命令データフローグラフと計算データフローグラフとの間のマッピングは、ノードの集合、例えば演算の集合に関して実施されるのではなく、依然として個々のノード、例えば個々の演算に関して実施可能である。多面体表記(polyhedral notation)によって、完全な計算データフローグラフが格納される必要性を回避することができる。即ち、命令データフローグラフからマッピングされる個々の要素のみをインスタンス化すればよい。多くの場合、これによって、計算及びメモリの複雑性が大幅に低減される。
【0029】
多面体表現(polyhedral representation)は、典型的には、計算データフローグラフを表すためには使用されず、又は、少なくとも、計算データフローグラフの多面体表現は、制約解決中には使用されない。計算データフローグラフの多面体ノードは、典型的には、制約充足問題の変数として個々に格納される。
【0030】
任意選択的に、ハードウェアアクセラレートされた命令の入力が、許可されたメモリレイアウト及び/又はメモリアクセスパターンを有することを強制するための1つ又は複数の入力制約を定義することができる。一般的に、ハードウェアアクセラレートされた命令及び/又はそのプログラミングインタフェースは、命令が適用される入力が、特定の配列に従ってメモリに格納されることを強制することができ、例えば、入力がメモリの連続ブロックを形成すること、メモリアドレスが特定の手法により整列されること等を強制することができる。これらは、どの入力にハードウェアアクセラレートされた命令を適用することができるかを制限するメモリレイアウト要求の例である。これらの要求を、それらが遵守されていることを保証するための入力制約として表すことができる。同様に、ハードウェアアクセラレートされた命令は、どの命令を適用することができるかに従って、例えば、入力が所与のストライド、所与のステンシルパターン等に従ってアクセスされるかどうかに従って、アクセスパターンの所与の集合を支援することができる。このようにして、ハードウェアアクセラレートされた命令をどの入力に適用することができるかをさらに制限することができる。
【0031】
例えば、命令及び/又はそのプログラミングインタフェースによって課される命令を表すために、ハードウェアアクセラレートされた命令の中間結果及び出力に関連するメモリレイアウト及び/又はメモリアクセスパターンの制限を、制約の集合に含めることも可能である。
【0032】
任意選択的に、ハードウェアアクセラレートされた命令の相互並列化可能な演算のペアが、計算の相互並列化可能な演算のペアにマッピングされることを強制するための1つ又は複数の制約を定義することができる。例えば、データフローグラフに対する並列化可能性を示すための特別な種類のエッジを含めることによって、ペアを相互並列化可能であるとしてマーキングすることができる。演算のペアを相互並列化可能であるとして明示的にマーキングすること、及び、このことをマッピングにおいて強制することは必須ではないが、そのようにすることは、制約解決の性能にとって有益である。なぜなら、相互並列化可能な演算が相互並列化可能な演算にマッピングされないような潜在的な割り当てを、解決プロセスが直接的に排除することを可能にするからである。
【0033】
興味深いことに、発明者らは、全てが相互並列化可能であるような命令データフローグラフの演算の集合に関して、それぞれの別個のペアに対して並列化可能性制約を含める必要がないことを認識した。ペアの部分集合のみに対して制約を含めることにより、ソルバの性能が改善される。なぜなら、ソルバの効率は、一般的に制約の数にスケーリングされ、また、部分集合は、ソルバが割り当てを排除するのを支援するからである。さらに、推移性によって、命令データフローグラフのペアの集合に対して並列化可能性制約を強制することは、推移閉包におけるそれぞれのペアに対する並列化可能性制約も充足されることを暗示することができる。計算データフローグラフにおいて、相互並列可能な演算の集合におけるそれぞれの演算のペアごとに並列化可能性を示すことができ、これにより、どの割り当てを行うことができるかを不必要に制限しないようにすることができる。計算データフローグラフにおいては、特に、例えば多面体表現の使用に起因してこのグラフが解決中に完全にインスタンス化されない場合、このことによって性能の低下をより少なくすることができる。
【0034】
任意選択的に、命令データフローグラフのノードは、可換縮約演算を表すことができる。例えば、可換縮約演算のためのノード、例えば和又は積は、この演算がノードの全ての着信エッジに適用されることを表すことができる。このようなノードを使用することにより、行列乗算又は畳み込みのような一般的なハードウェアアクセラレーション演算を指定するために必要とされるノード及びエッジの数を、計算又は命令の表現としてのデータフローグラフの正確性に影響を与えることなく大幅に低減することができる。これにより、よりフレキシブルなマッピングも可能となる。なぜなら、グラフは、要素を低減する必要がある特定の順序を指定しないからである。可換縮約演算は、例えば3つ以上の着信エッジを有するノードによって暗示的に定義可能であるが、可換縮約演算を表すものとしてノードを明示的にマーキングすることが好ましい。例えば、このマーキングは、グラフ内に自己エッジを含めることによって実施可能である。このような明示的なマーキングによって、可換縮約演算のためのマッピングを制約ソルバが決定することを、より効率的にすることができる。
【0035】
データフロー制約は、命令データフローグラフの可換縮約演算を表すノードが、計算データフローグラフの対応するノードにマッピングされることを強制することができる。対応するノードは、計算の可換縮約演算を表すノード、例えば、可換縮約演算が作用するそれぞれの要素のための着信エッジを有するノードであるものとしてよい。しかしながら、このことは、必須ではない。また、命令データフローグラフにおいて、縮約演算全体のうちの個々の縮約を別個に表すことも可能である。そのような場合には、命令データフローグラフのノードを、個々の縮約を表すノードにマッピングすることができる。これにより、可換縮約演算のための別個のモデル化労力が必要とされなくなるので、計算のモデル化をより簡単にすることができる。
【0036】
任意選択的に、制約充足問題を解く際には、命令データフローグラフを通して後方に伝播する変数選択戦略を使用することができる。実際には、データフロー及び入力制約によって定義される制約充足問題の種類に関して、この変数選択戦略を使用することが最も伝播する可能性を有しており、従って、解の発見において一般的に最も効率的であることが観察された。このことは、特に、ニューラルネットワーク層評価の計算に当てはまることが判明した。
【0037】
任意選択的に、ハードウェアアクセラレートされた命令の演算を、計算に影響を与えないダミー演算、例えば、同等の計算結果をもたらすダミー演算にマッピングすることを許可するために、制約充足問題を定義することができる。制約充足問題を解くことは、ノードをダミー演算にマッピングすることを含み得るものであり、例えば、ノードを、計算データフローグラフに含まれていない演算にマッピングすることができ、又は、複数のノードを、計算データフローグラフの同一のノードにマッピングすることができる。ダミー演算を許可することによって、可能な呼出しを発見する際におけるフレキシビリティが増加する。特に、ハードウェアアクセラレート命令を、そうでなければこの命令によって実行することができなかったワークロードに対して適用することが可能となる。例えば、計算の関連する部分を、ハードウェアアクセラレートされた命令よりも小さくすることができ、例えば、命令データフローグラフのノードの部分集合だけを、計算データフローグラフのノードにマッピングすることができる。例えば、命令は、4つの要素の和を計算することができ、その一方で、計算は、3つの要素の和しか必要としない。計算に影響を与えないダミー演算を含めることによって、例えば、命令によって実施される演算のための中立元、例えば加算の場合には0であり、又は、乗算の場合には1を追加することによって、計算の関連する部分を、依然としてハードウェアアクセラレートされた命令によって実行することができる。
【0038】
任意選択的に、ハードウェアアクセラレートされた命令の入力が超直方体を形成することを強制する1つ又は複数の制約を、制約充足問題に含めることができる。この制約によって、制約ソルバは、例えば、命令データフローノードへのほんのわずかな回数の割り当ての後には既に、検索空間の大部分を迅速に除外することが可能となる。これによって、検索の効率が大幅に改善され、しかも、残余の計算のための呼出しを取得するためにより簡単に一般化することができる規則的な解が提供されることが保証される。多くの実際の用途においては、ハードウェアアクセラレートされた命令の典型的な呼出しは、超直方体形状の入力を有するので、そのような場合におけるこれらの制限により、良好な性能を有する呼出しが見逃されるという結果が生じることはなくなる。
【0039】
任意選択的に、制約充足問題に対する複数の解を決定することができる。次いで、これらの複数の解の性能を評価することができ、この性能の評価に基づいて複数の解から1つの解を選択することができる。制約ソルバは、制約を充足する可能な呼出しを発見することができるが、典型的には、発見された解を性能に関して最適化するわけではない(ただし、本明細書においても説明されるように、特定の解を優先するように制約ソルバを構成することができる)。しかしながら、制約充足問題に対する複数の解を出力するように又は全ての可能な解を列挙するように、制約ソルバを構成するものとしてもよい。これらの複数の解の性能を評価することにより、所望の性能を有する解を選択することができる。種々の戦略を採用することができ、例えば、固定数の解を決定することが可能であり、又は、解を発見するために固定の時間量を使用することが可能であり、その後、発見された解を評価することが可能であり、又は、望ましい性能を有する解が発見されるまで若しくはさらなる改善が特定の期間内に見出せなくなるまで、解を繰り返し決定及び評価することなどが可能である。
【0040】
本発明の上述した実施形態、実装、及び/又は、任意選択肢の態様のうちの2つ以上を、有用であると思われる任意の手法により組み合わせてもよいことは、当業者によって理解されるであろう。
【0041】
対応するコンピュータ実施方法の説明された修正形態及び変形形態に対応する、任意のシステム及び/又は任意のコンピュータ可読媒体の修正形態及び変形形態を、当業者によって本明細書に基づいて実施することができる。
【0042】
本発明のこれらの態様及びその他の態様は、以下の説明において例として説明される実施形態と、添付の図面とから明らかになるであろうし、また、これらを参照しながら解明されるであろう。
【図面の簡単な説明】
【0043】
【
図1】計算を実施するためのシステムを示す図である。
【
図2】ハードウェアアクセラレートされた命令を使用して計算を実施するためのシステムを示す図である。
【
図3】計算をどのように実施すべきかについての詳細な例を示す図である。
【
図4a】データフローグラフの詳細な例を示す図である。
【
図4b】データフローグラフを定義する多面体表現の詳細な例を示す図である。
【
図5a】超直方体制約を適用する詳細な例を示す図である。
【
図5b】超直方体制約を適用する詳細な例を示す図である。
【
図5c】超直方体制約を適用する詳細な例を示す図である。
【
図5d】超直方体制約を適用する詳細な例を示す図である。
【
図6】計算を実施するコンピュータ実施方法を示す図である。
【
図7】データを含むコンピュータ可読媒体を示す図である。
【0044】
各図面は、純粋に概略的なものであり、縮尺通りに図示されているわけではないことに留意すべきである。図面において既に説明済みの要素に対応する要素は、同一の参照符号を有する場合がある。
【発明を実施するための形態】
【0045】
実施形態の詳細な説明
図1は、プロセッサシステムのハードウェアアクセラレートされた命令を使用して計算を実施するためのシステム100を示す。例えば、計算は、
図2のシステム200のプロセッサシステム240を使用して実施可能であり、例えば、システム100は、プロセッサシステム240によって実行可能な命令を生成することができ、又は、少なくとも、プロセッサシステム240上において計算を実施するために使用可能な、プロセッサシステム240によって支援されるハードウェアアクセラレートされた命令の呼出しを決定することができる。システム100とシステム200とを組み合わせることができ、例えば、システム100のプロセッサシステム140(後述する)は、ハードウェアアクセラレートされた命令を支援することができる。
【0046】
システム100は、計算データ030及び命令データ040にアクセスするためのデータインタフェースを含み得る。計算データ030は、計算を表す計算データフローグラフを定義することができる。計算データフローグラフのノードは、計算の入力又は演算を表すことができる。命令データ040は、ハードウェアアクセラレートされた命令を表す命令データフローグラフを定義することができる。命令データフローグラフのノードは、ハードウェアアクセラレートされた命令の入力又は演算を表すことができる。
【0047】
命令データフローグラフは、少なくとも16個、少なくとも32個又は少なくとも128個のノードを有することができる。ノードの数は、最大で2048個又は最大で4096個であるものとしてよい。計算データフローグラフは、典型的には命令データフローグラフよりも、例えば、26=64倍、210=1024倍、又は、212=4096倍、より多数のノードを有する。命令データフローグラフのノードの数は、例えば、少なくとも216=65536個、232=4294967296個、又は、248個であるものとしてよい。
【0048】
例えば、
図1にも図示されているように、データインタフェースは、データストレージ021からのデータ030,040にアクセスすることができるデータストレージインタフェース120によって構成可能である。例えば、データストレージインタフェース120は、メモリインタフェース、又は、永続的なストレージインタフェース、例えばハードディスク又はSSDインタフェースであるものとしてよいが、Bluetooth、Zigbee若しくはWi-Fiインタフェースのようなパーソナルの、ローカルの若しくはワイドエリアのネットワークインタフェース、又は、イーサネット、又は、光ファイバインタフェースであるものとしてもよい。データストレージ021は、ハードドライブ又はSSDのようなシステム100の内部データストレージであるものとしてよいが、外部データストレージ、例えばネットワークアクセス可能なデータストレージであるものとしてもよい。いくつかの実施形態においては、データ030,040には、種々のデータストレージから、例えばデータストレージインタフェース120の種々のサブシステムを介してそれぞれアクセスすることができる。それぞれのサブシステムは、データストレージインタフェース120に関して上述したような種類のものであってよい。
【0049】
データインタフェース、例えばデータストレージインタフェース120は、ハードウェアアクセラレートされた命令の決定された可能な呼出しにアクセスするためのものであってもよいし、又は、図面に示されているように、機械実行可能命令050にアクセスするためのものであってもよく、機械実行可能命令050は、決定された可能な呼出しに従ってハードウェアアクセラレートされた命令を呼び出すことにより、計算を実施する。これらの命令050は、計算を実施するプロセッサシステム、例えば
図2のプロセッサシステム240によって使用するためのものであってよい。
【0050】
システム100は、プロセッササブシステム140をさらに含み得るものであり、プロセッササブシステム140は、システム100の動作中に、計算データ030及び命令データ040を取得するように構成可能である。
【0051】
プロセッササブシステム140は、計算データ及び命令データに基づいて制約充足問題を定義するようにさらに構成可能である。制約充足問題は、変数の集合と、ドメインの集合と、制約の集合とによって定義可能である。制約充足問題を「定義する」とは、制約充足問題に関する情報を、この制約充足問題が制約ソルバによって解かれることを可能にする形態で提供することを意味する。例えば、変数の集合、ドメインの集合、及び/又は、制約の集合を明示的かつ個別に格納する必要はなく、例えば、これらの集合を暗示的に定義することができ、及び/又は、公知のように遅延評価する(evaluated lazily)ことができる。さらに、制約充足問題の一部又は全部を、計算データ030及び/又は命令データ040の形態で提供することができ、例えば、命令データ040は、命令データフローグラフのノードの集合と、それによって制約充足問題の変数の集合とを含み得るものであり、又は、そうでなければ定義し得るものである。
【0052】
制約充足問題に対する解は、計算におけるハードウェアアクセラレートされた命令の可能な呼出しを表すことができる。制約充足問題は、計算データフローグラフのノードを命令データフローグラフのノードに割り当てることができる。制約充足問題は、計算データフローグラフの割り当てられたノードが、命令データフローグラフと同等のデータフローを有することを強制する1つ又は複数のデータフロー制約を含み得る。制約充足問題は、計算データフローグラフのどのノードを、ハードウェアアクセラレートされた命令の入力に割り当てることができるかを制限する1つ又は複数の入力制約をさらに含み得る。後者の制限は、ハードウェアアクセラレートされた命令及び/又はそのプログラミングインタフェースによって課されることができる。制約の定義は、例えば、計算データ030及び/又は命令データ040に基づいて自動的に制約を定義することによって行われるものとしてもよいし、手動における制約の定義を受信することによって行われるものとしてもよいし、又は、上記の2つの組合せによって行われるものとしてもよい。
【0053】
プロセッササブシステム140は、計算におけるハードウェアアクセラレートされた命令の可能な呼出しを決定するために制約充足問題を解くようにさらに構成可能である。プロセッササブシステムは、可能な呼出しを定義するデータを出力するようにさらに構成可能である。
【0054】
システム100は、可能な呼出しを定義するデータ、例えば、制約充足問題に対する解、又は、解から導出される機械実行可能命令050を定義するデータを出力するための出力インタフェースをさらに含み得るものである。例えば、
図1にも図示されているように、出力インタフェースは、データインタフェース120によって構成可能であり、前述のインタフェースは、これらの実施形態においては入力/出力(「IO」)インタフェースであり、この入力/出力(「IO」)インタフェースを介してデータストレージ021にデータを格納することができる。いくつかの実施形態によれば、出力インタフェースは、データストレージインタフェース120とは別個のものであってよいが、一般的に、データストレージインタフェース120に関して上述したような種類のものであってもよい。出力インタフェースは、任意の他の種類の出力インタフェースであるものとしてもよく、例えばネットワークインタフェースであるものとしてもよい。
【0055】
図2は、ハードウェアアクセラレートされた命令を使用して計算を実施するためのシステム200を示す。
【0056】
システム200は、計算を実施するための命令050にアクセスするためのデータインタフェース220を含み得る。例えば、命令050は、
図1のシステム100によって生成可能であり、又は、システム100によって決定された可能な呼出しに基づいて生成可能である。例えば、
図2にも図示されているように、データインタフェースは、データストレージ022からの命令050にアクセスすることができるデータストレージインタフェース220によって構成可能である。一般的に、データインタフェース220及びデータストレージ022は、データインタフェース120及びデータストレージ201に関して
図1を参照しながら説明したものと同様の種類のものであってよい。
【0057】
システム200は、プロセッササブシステム240をさらに含み得る。プロセッササブシステム240は、ハードウェアアクセラレートされた命令を支援することができる。一般的に、ハードウェアアクセラレートされた命令とは、専用タスクを実施するプロセッササブシステム240によって支援される命令のことである。専用タスクは、スカラ加算、スカラ乗算、ビット演算等のような基本CPU命令ではない。その代わりに、ハードウェアアクセラレートされた命令の単一の呼出しは、これらの基本命令のいくつかを実行することに対応することができるが、ハードウェアアクセラレートされた命令の実行は、典型的にはより高速である。ハードウェアアクセラレートされた命令を実行することにより、計算の性能を改善することができ、例えば、その結果、レイテンシの低減及び/又はスループットの増加をもたらすことができる。
【0058】
ハードウェアアクセラレートされた命令は、典型的には複数の、例えば、少なくとも4個、少なくとも16個又は少なくとも64個のスカラ入力(例えば、整数又は浮動小数点のような数値)を有する。ハードウェアアクセラレートされた命令は、単一の出力(例えば、整数又は浮動小数点のような数値)を有することができるが、複数の、例えば、少なくとも4個、少なくとも16個又は少なくとも64個のこのような出力を有することもできる。ハードウェアアクセラレートされた命令は、所定数Nの基本CPU命令に対応することができる。例えば、基本CPU命令は、命令データフローグラフのノードに対応することができる。従って、Nを、命令データフローグラフのノードの数と等しくすることができ、又は、命令データフローグラフが命令の一部だけをモデル化している場合には、Nをより大きくすることができる。例えば、Nは、少なくとも212=4096、少なくとも216=65536、又は、少なくとも224=16777216であるものとしてよい。
【0059】
一般的に、プロセッササブシステム240は、単一の中央処理ユニット(CPU)によって具現化可能であるが、このようなCPU及び/又は他の種類の処理ユニットの組合せ又はシステムによっても具現化可能である。ハードウェアアクセラレートされた命令を、プロセッサシステム240によって種々の手法により支援することができる。いくつかの実施形態においては、ハードウェアアクセラレートされた命令は、プロセッササブシステム240のCPUの命令であり、例えば、ハードウェアアクセラレートされた命令は、オンチップで実装可能である。いくつかの実施形態においては、図面に示されているように、ハードウェアアクセラレートされた命令を、CPUとは別個のハードウェアアクセラレータ241、例えば専用化された処理ユニットによって実行することができる。ハードウェアアクセラレータ241は、例えば、コプロセッサ、特定用途向け命令セットプロセッサ(ASIP)、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、複合プログラマブルロジック装置(CPLD)、又は、任意の他の種類のプログラマブルロジックであるものとしてよい。例えば、ハードウェアアクセラレータ241は、T. Moreauら著の“A Hardware-Software Blueprint for Flexible Deep Learning Specialization”(https://arxiv.org/abs/1807.04188において入手可能であり、参照により本明細書に援用される)において論じられるようなVTAアクセラレータであるものとしてよい。
【0060】
命令050は、ハードウェアアクセラレートされた命令を呼び出すことができる。プロセッササブシステム240は、例えばハードウェアアクセラレータ241を呼び出すことにより、命令050に従ってハードウェアアクセラレートされた命令を呼び出すことを含む計算を実施するように構成可能である。決定された可能な呼出しが使用されるので、計算の効率を改善することができる。
【0061】
任意選択的に、計算は、訓練された機械学習モデル、例えば深層ニューラルネットワークの適用の一部であるものとしてよい。プロセッササブシステム240は、例えば、画像センサ、ライダセンサ、レーダセンサ、圧力センサ及び封じ込め温度センサ等のようなセンサからセンサインタフェースを介して機械学習モデルへの入力を取得するように構成可能である。プロセッササブシステム240は、機械学習モデルを入力に適用して出力を取得するように構成可能である。出力に基づいて制御データを導出し、アクチュエータインタフェースを介して、例えば、電気的、液圧的、空圧的、熱的、磁気的、及び/又は、機械的なアクチュエータのようなアクチュエータに供給することができる。例えば、システム200は、ロボット、自動運転車等を制御するために使用可能である。
【0062】
一般的に、限定するものではないが
図1のシステム100及び
図2のシステム200を含む、本明細書に記載されているそれぞれのシステムは、ワークステーション又はサーバのような単一の装置若しくは機器として、又は、単一の装置若しくは機器の形態において具現化可能である。装置は、組込装置であるものとしてよい。装置又は機器は、適当なソフトウェアを実行する1つ又は複数のマイクロプロセッサを含み得る。
図2のプロセッサシステム240に関して挙げられた例は、
図1のプロセッサシステム140にも適用される。プロセッサシステムによって実行されるソフトウェアは、対応するメモリに、例えば、RAMのような揮発性メモリに、又は、フラッシュのような不揮発性メモリに、ダウンロード及び/又は格納しておくことができる。一般的に、それぞれのシステム100,200のそれぞれの機能ユニットは、回路の形態で実装可能である。別段の記載がない限り、一般的に、
図1のシステム100に関するものと同様の考察及び実装の任意選択肢をシステム200に適用するものとしてよいことが理解されるであろう。
【0063】
図4aは、データフローグラフの詳細であるが非限定的な例を示す。データフローは、計算を細分して得られる演算と、これらの演算の間のデータフロー関係とに鑑みて計算を表現したものである。特に、グラフは、ノード及びエッジを含み得る。ノードは、計算の入力及び演算を表すことができる。エッジは、ノード間のデータフロー関係を表すことができる。このエッジは、(本明細書においてはシーケンシャル型のエッジと称される)入力/出力の関係を含むが、任意選択的に、他の種類の関係を含むものとしてもよい。グラフには、これらのノード及びエッジとは別に、他のノード及びエッジを設けるものとしてもよい。データフローグラフは、典型的には有向であり、例えば少なくとも1つの有向エッジを含む。データフローグラフは、接続されたグラフであるものとしてよいが、このことは、厳密には必要ではない。
【0064】
例示する目的で、図面は、以下の計算
【数1】
のデータフローグラフを示す。例えば、この計算は、4×4行列乗算の1つの出力要素の計算として実施される。この例は、例えば、計算データフローグラフ若しくは命令データフローグラフとして又はそれらの一部として使用可能である。円は、グラフのノードを表す。矢印は、グラフのエッジを表す。
【0065】
データフローグラフの1つ又は複数のノードは、計算の入力を表すことができる。これらのノードは、本明細書においてはデータノードとも称される。典型的には、データノードは、シーケンシャル型の発信エッジ(outgoing edge)のみを有し、例えば、如何なる種類の着信エッジ(incoming edge)も、他の種類の発信エッジも有さない。図面は、グラフによって表される計算のそれぞれの入力x1,x2,x3,及びx4に対応するデータノード411,412,413,及び414と、それぞれの入力y1,y2,y3,y4に対応するデータノード421,422,423,及び424とを示す。図面は、定数値0に対応するさらなる入力ノード461を示す。
【0066】
データフローグラフの1つ又は複数のノードは、計算の演算を表すことができる。これらのノードは、本明細書においては演算ノードとも称される。演算ノードは、この演算ノードがどの演算を実施するかに従ってラベル付け可能である。データフローグラフは、任意の種類の演算を表すために使用可能ではあるが、本明細書における演算は、典型的にはスカラ演算であり、例えば、固定数の数値(例えば、スカラ加算、スカラ乗算、スカラ除算、否定)、又は、固定数の非数値(例えば、ビット単位のAND、ビット単位のXOR、ビット単位のNOT等)に対して実施される演算である。例えばスカラ値は、例えば、最大256ビット、最大128ビット、最大64ビット又は最大32ビットの、メモリにおける固定されたサイズの表現を有する値であるものとしてよい。
【0067】
典型的には、演算ノードは、演算によって消費されるデータに対応する1つ又は複数のシーケンシャルな着信エッジを有する。例えば、図面は、入力x1,411と入力y1,421とのスカラ乗算を表す演算ノード431、入力x2,412と入力y2,422とのスカラ乗算を表す演算ノード432、入力x3,413と入力y3,423とのスカラ乗算を表す演算ノード433、及び、入力x4,414と入力y4,424とのスカラ乗算を表す演算ノード434を示す。この例のように、演算は、可換演算であるものとしてよく、この場合には、演算の入力の順序は、典型的には明示的に表されない。ただし、例えば、非可換演算の場合には、シーケンシャルな着信エッジをラベル付けすることによって入力の順序を表すことも可能である。
【0068】
興味深いことに、加算又は乗算のような可換縮約演算を表すために演算ノードを使用することができる。例えば、ノード441は、ノード441の着信ノードと、演算ノード431~434と、演算の初期化値を表すノード461との加算を表す。初期化値のためのノードの追加は、任意選択肢であり、例えば、演算の中立元、例えばゼロ又は1に等しいことが明示的に指定されていない限り、初期化値を仮定することができる。演算の初期化値を、等しい計算の初期化値にマッピングすることができる。この演算を表すために単一のノード441を使用することは、いくつかの利点を有する。例えば、値431,432を加算する、この結果に値433を加算する、及び、この結果に値434を加算するといった演算を別個にペアごとに適用するために別個のノードを含む必要性が、これによって軽減される。これによって効率が向上し、また、例えば、最初に値433及び434を加算し、次いで値432を加算し、次いで値431を加算することによって合計を決定することを禁じることにより、特定の順序で加算を実施することをデータフローグラフが強制することも阻止される。可換縮約演算を表すノードは、命令データフローグラフ、計算データフローグラフ、又は、その両方において使用可能である。
【0069】
この例において示されているように、グラフにおいて、可換縮約演算を表すものとしてノードを明示的にマーキングすることができる。この例においては、このマーキングは、ノード441に自己エッジ451を追加することによって実施される。例えば、可換縮約演算を表すものとしてノードをラベル付けすることによる、他のマーキング手法も可能である。このようなマーキングは、例えば、どのノードに可換縮約演算をマッピングすべきかを選択する際に、制約ソルバが可換縮約演算のためのマッピングを決定することをより効率的にし、制約ソルバが、例えば演算の入力のマッピングを試みる場合よりも簡単に、自己エッジを有していないノードを放棄することが可能となり得るという利点を有する。
【0070】
可換縮約ノードが、命令データフローグラフでは使用されるが、計算データフローグラフでは使用されない場合には、可換縮約演算をマーキングするために自己エッジを使用することが特に便利である。例えば、命令データフローグラフの可換縮約ノードAを、計算データフローグラフの対応するノードBにマッピングする場合には、縮約演算の後続する適用の間にある計算データフローグラフの対応するエッジに、自己エッジをマッピングすることができる。このような対応するエッジの存在を強制することにより、2つのグラフ間のマッピングを検出することがより簡単になる。
【0071】
演算ノードは、演算の結果を使用する他の演算への1つ又は複数のシーケンシャルな発信エッジを生成することができる。他の演算へのシーケンシャルな発信エッジを有していないノード(ただし、自身へと発信する自己エッジは可能である)は、グラフによって表される計算の出力を表すことができる。例えば、ノード441は、出力を表すことができる。このようにして、データフローグラフにおいて出力を、結果的に生じる演算と等しくすることができる。例えばラベル付けによって、出力を明示的にマーキングすることも可能である。出力ノードに、例えば、出力の形状及び/又はデータ型を表す追加的な情報をラベル付けすることができ、この追加的な情報を、計算と命令との間の整合のために使用することができる。
【0072】
任意選択的に、データフローグラフの演算のペアを、相互並列化可能であるとしてマーキングすることができる。このマーキングは、例えば、ノードのペア(この図面には図示せず)の間にエッジを追加することによって実施可能である。そのようなエッジは、本明細書においては空間エッジと称される。特に、計算のそれぞれ異なる部分において、例えば、それぞれ異なる出力要素のためにそれぞれ同様の演算を実行するノード間に、空間エッジを追加することができる。本明細書において説明されるように、制約ソルバが相互並列化可能な演算を相互並列化可能な演算にマッピングすることを支援するために、空間エッジを再度使用することができる。
【0073】
相互並列化可能な演算の集合に対して、エッジの集合のうちの部分集合のみを含むことによって空間エッジの数の低減、ひいては効率の改善を達成することができる。例えば、空間エッジによって完全に接続されたk個のノードの集合を有する代わりに、同様に接続されたコンポーネントを維持しながら接続をプルーニングすることによって、エッジの数を低減することができる。例えば、1つの内部ノードが空間エッジによってk-1枚の葉に接続されているようなスター型の構成を選択することができる。推移性によって、並列化可能性情報を維持することができる。
【0074】
数学的には、本明細書において使用されるようなデータフローグラフは、例えば、G=(N,E,l)として定義されるラベル付けされた有向グラフとして定式化可能であり、ここで、Nは、ノードの集合であり、有向エッジの集合は、E⊆N×Nであり、l()は、集合LN∪LEからラベルを割り当てる関数である。LN={{Operation},{Data}}は、例えば、テンソル形状、データ型及び/又は算術演算を保持する、ノードラベルクラスの集合である。LE={Spatial,Sequential}は、エッジラベルの集合である。
【0075】
種々の態様において、計算を表すために、計算データフローグラフと称されるデータフローグラフを使用することができる。命令を表すために、命令データフローグラフと称されるデータフローグラフを使用することができる。これらのデータフローグラフは、例えば、計算又は命令の全ての入力及び出力と、どのようにして出力が入力に後続するかをモデル化するノードとを含む、計算又は命令の完全な入力挙動/出力挙動を表すことができる。場合によっては、計算及び/又は命令の部分集合のみをモデル化することも可能である。例えば、命令データフローグラフは、この命令データフローグラフの出力の部分集合の計算のために使用される演算及び/又は入力のみを表すことができ、残余の入力、演算及び/又は出力は、他の箇所においても説明されるように外挿によって決定される。
【0076】
グラフの演算を、計算又はハードウェアアクセラレートされた命令によって明示的に実施する必要もなく、例えば、加算及び乗算は、命令データフローグラフにおいて別個にモデル化可能であるが、その一方で、これらは、乗算及び加算の組合せによってハードウェアによって実施される。従って、命令又は計算の中間結果を表すノードは、必ずしも、命令中又は計算中におけるある時点において明示的に計算又は格納されている値に対応するとは限らない。しかしながら、入力及び出力は、典型的には実装において明示的に計算される。
【0077】
種々の態様において、データフローグラフ、例えば計算データフローグラフ又は命令データフローグラフを定義するデータが使用される。データフローグラフを「定義する」とは、ノード及びエッジの集合がデータから導出可能であることを意味し、又は、少なくとも、ノード又はエッジが与えられた場合にそのノード又はエッジがグラフに属するかどうかを特定することが可能であることを意味する。特に、データ自体が、個々のノード及びエッジに対応する明示的なデータ項目を含む必要はない。例えば、
図4bに関しても論じられるように、ノード及びエッジの集合をシンボル的に定義することも可能であり、又は、エッジを暗示的に定義するものとしてもよく、例えば、ある特定の種類のエッジの存在を、そのエッジを有していないノードのペアを与えることにより、データによって定義することなどが可能である。種々の選択肢が可能である。
【0078】
図3は、ハードウェアアクセラレートされた命令を使用して計算をどのように実施すべきかについての詳細であるが非限定的な例を示す。
【0079】
図面には、ハードウェアアクセラレートされた命令、換言すればハードウェアアクセラレートされた命令が実行する機能又は計算を表す、命令データフローグラフ(DFG)IDG,330が示されている。例えば、命令DFG IDGは、
図4aに関して説明したものであってよい。特に、グラフIDGのノードは、ハードウェアアクセラレートされた命令の入力及び演算を表すことができる。
【0080】
図面には、例えば
図4aのようなハードウェアアクセラレートされた命令を使用して実施されるべき計算を表す、計算DFG CDG,340も示されている。グラフCDGのノードは、計算の入力及び演算を表すことができる。命令データフローグラフIDGと、計算データフローグラフCDGとは、それぞれ異なっており、例えば共通のノード又はエッジを有していない。
【0081】
命令DFG及び計算DFGは、それぞれ命令データ及び計算データ(図示せず)によって表すことができる2つの別個のグラフである。上述したように、このデータは、グラフのノード及びエッジを暗示的又は明示的に定義することができ、例えば、ノード及びエッジを列挙することを可能にし、又は、少なくとも、ノード及びエッジの集合の帰属関係をテストすることを可能にする。グラフIDG,CDGは、一般的に、演算の同様の集合にわたって定義されており、例えば、同等の粒度を有する。これにより、2つのグラフの演算同士を相互にマッピングすることがより簡単かつ効率的になる。
【0082】
定義演算Def,355において、命令DFG IDGと計算DFG CDGとを使用して、制約充足問題CSP,360を定義することができる。この問題CSPに対する解は、計算におけるハードウェアアクセラレートされた命令の可能な呼出しを表すことができる。
【0083】
公知のように、制約充足問題CSPは、典型的には、変数VARSの集合361と、それぞれの変数に対するそれぞれのドメインDOMSの集合362と、制約CONSの集合363とによって定義される。数学的には、制約満足問題CSPを、トリプル(X,D,C)によって表すことができ、ここで、
・X={xj|0≦j≦n}は、変数の集合であり、この変数の集合に関して値を発見することが問題である。
・D={dj|0≦j≦n}は、値ドメインの集合であり、この値ドメインからそれぞれの変数に値を割り当てることができる。割り当てAsn(dj,xj):xj=vは、xjがとるべき値v∈djを選択することができる。これにより、ドメインdjからのみ値を取得するように、変数xjを制限することができる。
・C={ci|0≦i≦m}は、制約の集合である。制約ciは、変数の部分集合gx⊂Xにわたって形成可能であり、gd⊂Dを有する全ての割り当てAsn(gd,gx)が有効であるかどうかを評価する。制約充足問題CSPに対する解は、全ての変数に値を割り当てる割り当てであるものとしてよく、この場合、制約Cの連言に違反する割り当ては存在しない。
【0084】
制約充足問題CSPは、計算データフローグラフCDGのノードを命令データフローグラフIDGのノードにマッピングすることによって、計算におけるハードウェアアクセラレートされた命令の可能な呼出しを発見するという問題を表すことができる。変数VARSの集合は、命令データフローグラフのそれぞれのノードのための変数を含み得る。計算データフローグラフのそれぞれのノードは、変数のうちの少なくとも1つに関するドメインDOMに含まれるものとしてよい。制約CONSの集合は、データフロー制約及び入力制約を含み得る。制約の数は、例えば、命令データフローグラフのノードの数の少なくとも10倍、少なくとも100倍、又は、少なくとも1倍、2倍若しくは5倍であるものとしてよい。
【0085】
このようにして、計算への命令の埋め込みを、スカラレベルで効果的に記述することができる。興味深いことに、命令におけるノードと計算におけるノードとの間の全ての潜在的な割り当てを、グラフのノード間のマッピングとして表すことができ、従って、この定式化を使用して、埋め込み問題に対する全ての可能な解を捕捉することができる。整合問題自体は、テンソルのループ順序付け若しくはメモリレイアウト、又は、アクセス関数のような暗示的な実装の決定には拘束されない。これにより、こうした決定を説明するために検索において変換を行う必要性が排除される。その代わりに、そのような変換は、埋め込みの結果から導出可能である。
【0086】
特に、命令DFG IDGのそれぞれのノードに関する変数VARSの集合に、変数を含めることができ、例えば、X={x|∀x∈Ni}である。従って、ハードウェアアクセラレートされた命令における全てのスカラ演算及びデータ要素を、変数によって表すことができる。ドメインDOMSの集合は、D={d|d⊆Sd}として定義可能である。ここで、Sdは、計算DFG CDGの全てのノードを含み得るものであり、又は、全てのノードの集合のうちの部分集合を含み得るものであり、例えば、ノードdと同様の演算を有する全てのノードの部分集合等を含み得るものである。しかしながら、この後者の制限を、制約によって課すことも可能である。ドメインは、例えば、ダミー演算又はダミー入力に対応する追加的な値を含み得るものである。
【0087】
変数VARS及びドメインDOMSが与えられると、制約CONSの集合を使用して、ハードウェアアクセラレートされた命令の可能な呼出しを表すために割り当てが充足することのできる条件を表すことができる。
【0088】
制約CONSによって強制することができる重要な態様は、命令データフローグラフIDGのノードのデータフローが、これらに割り当てられた計算データフローグラフCDGのノードのデータフローと同等であるということである。例えば、計算データフローグラフのうちの、割り当てられたノードによって与えられた部分を取得して、この部分を命令データフローグラフのノードによって置き換えることにより、結果的に、同等の出力を有する計算のデータフローグラフをもたらすことができる。この同等性を強制する制約を、データフロー制約と称することができる。
【0089】
特に、データフロー制約は、命令データフローグラフIDGが、制約充足問題CSPに対する解によって誘導される計算データフローグラフCDGのサブグラフと同型であることを強制することができる。この場合には、計算データフローグラフのうちのマッピングされたサブグラフを命令データフローグラフによって置き換えることにより、結果的に、ノード間の接続と、ノードのラベル付けとに関して同一となっているグラフをもたらすことができる。しかしながら、厳密な同型性は、本明細書に記載されるいくつかの手法によって緩和可能である。
【0090】
同等性を強制するために、命令データフローグラフのエッジに関して、そのデータフローを表す1つ又は複数の制約をデータフロー制約に含めることができる。数学的な表記では、命令DFG Gi=(Ni,Ei,li)と、計算DFG Go=(No,Eo,lo)とが与えられると、制約充足問題CSPに対する解が、例えば、∀(s,t)∈Ei⇒(f(s),f(t))∈EoのようにGiに整合していて、かつ、例えば、∀s∈Ni:li(s)≡lo(f(s))のようにラベル付けを維持するような、Goにおけるノード及びエッジの別個の部分集合を記述する単射関数f:Gi→Goを表すことを、データフロー制約によって要求することができる。計算データフローグラフのそれぞれのノードが解の中に1回しか存在しないことを要求することによって、単射性を強制することができる。このことを強制する大域的な“AllDiff”制約を、データフロー制約に含めることができる。
【0091】
例えば、データフローをモデル化するために、以下の擬似コードを使用することができる:
【表1】
【0092】
データフロー制約は、ハードウェアアクセラレートされた命令の相互並列化可能な演算のペアが、計算の相互並列化可能な演算のペアにマッピングされることを強制することができる。この例においては、このことは、それぞれのデータフローグラフIDG,CDGに空間型のエッジを含めることと、命令データフローの空間エッジが計算データフローグラフの空間エッジにマッピングされることを強制することとによって行われる。上述したように、それぞれのペアに対する制約を相互並列化可能な演算の集合に含めることにより、結果的に、多数の制約がもたらされる可能性がある。これを回避するために、ペアワイズ制約の推移性の特性を活用することができる。相互並列化性を、集合内のそれぞれのペアに対して強制する代わりに、ペアの部分集合に対してのみ強制することができる。特に、部分集合が依然として推移閉包として全体集合を有する場合には、その全体集合に関して並列化可能性を暗示することができる。例えば、命令DFGにおける任意の第1のノードを選択することができ、この第1のノードが有する全ての並列ノードに制約を追加することができる。第1のノードに対して並列な全てのノードに値が割り当てられると、割り当てられたものに対して並列なノードのみを含むように、第1のノードのドメインをプルーニングすることができる。このことは、第1のノードに対して並列な全ての他のノードに伝播することができる。従って、同数の値を効率的にプルーニングすることができる。
【0093】
制約充足問題CSPを解く際には、変数VARSに、各自のそれぞれのドメインDOMSからの値を割り当てることができる。解く間に、計算データフローグラフCDGのノードを、命令データフローグラフIDGのノードのための可能な値として選択することができる。制約ソルバは、いわゆる伝播アルゴリズムを適用することができ、この伝播アルゴリズムは、変数に値を割り当てることを試み、この割り当てが制約CONSによって許可されるかどうか、及び/又は、この割り当てが制約に従って他の変数VARSへの割り当てを強制するかどうかをチェックする。以下に、データフロー制約を強制するための伝播アルゴリズムの例を示す。値が割り当てられていて、かつ、他のノードtへのエッジを有するノードsが与えられると、この例のアルゴリズムは、sへの割り当てが正しいかどうか、及び、他方のノードtにどのような正しい値を割り当てることができるかをチェックする:
【表2】
【0094】
この例においては、伝播関数は、Tにおけるノード間の関係に基づいて値を直接的にフィルタリングする。伝播関数は、関係を評価し(“evaluate_relation”)、接続が存在しない相手側ノードのドメインから値を削除する(“t.intersect”)。ペア間の関係が機能的である場合、伝播関数は、解を直接的に割り当てることができる(“if t.size==1”)。これが当てはまらない場合においても、提示された伝播は、ドメインを包含するために十分に強力であり、このことは、即ち、この制約に対する有効な解のみがドメインに残存し、さらなる伝播は不要であることを意味する。残余のドメイン値は、各自の変数にわたる他の制約に関して評価される。伝播によって空のドメインがもたらされた場合には、割り当てが失敗する。
【0095】
命令データフローグラフIDGのノードs及びtの両方に値が割り当てられると、制約は、計算データフローグラフCDGにおいてペアを接続しているエッジが存在することを検証することによって正しさをチェックすることができ、例えば、Asn((s,t),(d_s,d_t))∈Eoである。特に、このことは、可換縮約演算を表す命令データフローグラフIDGの自己エッジが、計算データフローグラフCDGの自己エッジにマッピングされることを強制することを含み得る。
【0096】
データフロー制約が厳密な同型性を強制する必要はない。種々の緩和を採用することができる。例えば、命令データフローグラフIDGのソース演算を、計算データフローグラフCDGの同一のターゲット演算にマッピングすることを要求する代わりに、ソース演算が、ターゲット演算の一般化であること、例えば、少なくともターゲット演算によって要求される精度を有する演算、又は、ソース演算によってインスタンス化することができる演算の一般化であることを要求するだけで十分であり得る。他の箇所においても説明されるように、命令データフローグラフの可換縮約演算を、この可換縮約演算の単一の縮約を表す計算データフローグラフのノードにマッピングすることを可能にするために、緩和を採用することができる。厳密な同型性を強制しない他の例は、他の箇所においても説明されるように、ダミー演算を使用することである。
【0097】
本発明者らが認識したように、計算におけるハードウェアアクセラレートされた命令の可能な呼出しを構成するものは何であるかを定義するために、多くの場合、データフロー制約によってデータフローの同等性を定義するだけでは不十分である。即ち、図面に示されているように、ハードウェアアクセラレートされた命令及び/又はそのプログラミングインタフェースは、可能な呼出しに対してハードウェア制限HWRの集合320を課すことができる。制約充足問題CSPを定義することDefは、これらのハードウェア制限を表す1つ又は複数の制約CONSを定義することを含み得る。ハードウェア制限HWRを、種々の手法により表すことができ、例えば、制約として表すこと、制約充足問題を定義する際における制約がインスタンス化される元となるテンプレートとして表すこと、命令データフローグラフ及び/又は計算データフローグラフに基づいて制約を暗示的に定義するコードとして表すことなどが可能である。
【0098】
特に、ハードウェア制限は、計算データフローグラフCDGのどのノードをハードウェアアクセラレートされた命令の入力に、例えば、命令データフローグラフIDGの入力ノードに割り当てることができるかを制限する1つ又は複数の入力制約を課すことができる。そのような制約は、例えば、入力が、許可されたメモリレイアウト及び/又は許可されたアクセスパターンを有することを強制することができる。例えば、出力が、他の計算において使用されるべき場合、又は、現在の計算のうちの、特定のメモリレイアウトを要求する他の部分において使用されるべき場合には、ハードウェアアクセラレートされた命令の出力に対しても、同様の制約を加えることができる。命令によって課される制限とは別に、他の所望の特徴を有する呼出し、例えば、入力配列の第1の要素を使用する呼出しなどを取得するための制限を含むことも可能である。これにより、完全な計算のためのコードを生成するために、発見された呼出しを一般化することがより簡単になり得る。一般的に、制約CONSの適当な集合は、少なくともハードウェアターゲットと、利用可能なコード生成方法とに依存することができる。
【0099】
例えば、制約CONSは、以下のうちの1つ又は複数を含み得る:
・許可されたメモリアクセスパターンへの入力を制限すること。例えば、入力アクセスパターンを、ステンシル計算に制限することができ、又は、規則的なストライド及び/又はオフセットを有するアクセスパターンに制限することができる。伝播は、このような次元における値をゼロに拘束することができ、これにより、これらのアクセスパターンが存在する計算において検索空間の大部分を除去することができる。
・マッピング命令入力を、計算における特定の軸に制限すること。
・適用されるべき命令を、計算における特定の値に制限すること。例えば、命令における第1の出力を、計算における第1の出力要素に制限することにより、それらの点の周囲の値に検索を固定することができる。
【0100】
興味深いことに、追加的な制約を含めることにより、解空間をさらに特定的にすることができ、その一方で、制約を緩和することは、実装戦略を探索するためのツールとして機能することができる。制約解決は、プログラムの定式化における表現力を提供し、カスタマイズ可能な伝播及び検索アルゴリズムを有するので有益である。
【0101】
ハードウェアアクセラレートされた命令の演算を、計算に影響を与えないダミー演算にマッピングすることが可能となるように、制約充足問題CSPを定義することができる。効果的には、計算への命令の「不完全な」(例えば、非同型の)埋め込みを取得することができる。これにより、そうでなければ不可能であった呼出しを発見することが可能となる。例えば、命令によって計算される計算を、より小さいサブ問題に均等に分割することができない場合がある。ダミー演算を許可することによって、そのような状況においても、ハードウェアアクセラレートされた命令を使用することが可能となる。例えば、16×16行列乗算のためにハードウェアアクセラレートされた命令を用いて8×8行列乗算を実行することができる。この命令は、入力テンソル及び出力テンソルをパディングすることによって使用可能である。即ち、その場合、形状を命令に整合させることができ、命令を使用することができる。制約充足問題において、重複する/複製された計算を許可又は制約すること、重複する/複製されたメモリアクセスを許可又は制約すること、及び、計算へのダミー値の挿入を許可又は制約すること、の任意の組合せによってダミー演算を許可することができる。典型的には、ダミーの値として、計算の結果に影響が与えられないように、演算の中立元、例えば0(例えば、加算の場合)又は1(例えば、乗算の場合)が含まれている。これらの値を、それぞれの変数のドメインDOMに加えることができる。
【0102】
制約充足問題CSPをより容易にし、それによって、より効率的に解けるようにするために、制約条件CONSの集合に制約条件を含めることも可能である。例えば、命令データフローグラフIDGのうちの同一のドメインを有する変数のグループ、例えば命令の出力演算を記述する全ての変数のグループにプルーニング制約を適用することによって、変数のグループのドメインサイズを低減することができる。例えば、ドメインd
mの範囲は、ベクトル(e
0,・・・,e
m)によって記述可能であり、例えば、d
m=(4,4,4)は、辺長4の立方体を表すことができる。従って、立方体における座標を、0≦i<4、0≦j<4、0≦k<4を有する(i,j,k)として記述することができる。従って、上限e
*を設定することによって、例えばe
i=2を設定することによって、ドメインの範囲を制御することができる。例えば、以下の単項プルーニング制約を使用して、gにおける全ての変数に対して、m次元のドメインd
m=(e
0,・・・,e
m)⊂S内の全ての次元のサイズを、
【数2】
によって閾値設定することができ、ここで、#gは、このグループに割り当てられた変数の数であり、e
iは、1つの次元のサイズである。変数のグループに対するドメインの座標を、任意の他の閾値に、例えば命令の次元の長さに制限することも可能である。プルーニング制約は、検索空間を低減させる低オーバヘッド制約である。
【0103】
従って、制約充足問題CSPは、計算データフローグラフのノードを命令データフローグラフのノードに割り当てることができる。いくつかの実施形態においては、計算DFGのノードが、命令DFGのそれぞれのノードに割り当てられる。いくつかの実施形態においては、命令データフローグラフのそれぞれのノードに、計算データフローグラフのノード、又は、ダミー入力若しくはダミー演算を表すノードのいずれかが割り当てられる。いくつかの実施形態においては、命令DFGのそれぞれのノードに、それぞれ異なる値が割り当てられ、例えば、計算DFGのそれぞれのノードを、最大1回だけ割り当てることができる。
【0104】
図面には、演算Solve,365も示されており、この演算Solve,365は、制約充足問題CSPを取得し、この制約充足問題CSPを解いて、存在する場合には、計算におけるハードウェアアクセラレートされた命令の可能な呼出しINV,370を決定する。呼出しINVは、計算データフローグラフCDGのノードを、計算データフローグラフCDGのノードにマッピングすることができ、このことは、命令データフローグラフIDGのノードb,c,dから計算データフローグラフCDGのノードB,C,Dに向かう破線の矢印によって図面に示されている。呼出しINVのいくつかの望ましい特性が、この例によって示されている。図示のように、命令データフローグラフIDGのそれぞれのノードを、計算データフローグラフCDGのノードにマッピングすることができる。しかしながら、計算データフローグラフは、典型的には、追加的なノード、この例においてはノードA及びEを有している。命令データフローグラフIDGのそれぞれのノード間のエッジの存在は、それらのノードがマッピングされている計算データフローグラフCDGのそれぞれのノード間のエッジの存在を暗示することができるが、追加的なエッジ、例えばこの例においては、ノードAとノードCとの間のエッジ、及び、ノードDとノードEとの間のエッジが存在するものとしてよい。しかしながら、命令データフローグラフの非入力ノード、例えばノードdは、典型的には、計算データフローグラフのうちの、同数及び/又は同種の着信エッジを有するノード、例えばノードDにマッピングされる。
【0105】
解決演算Solveを実行するために、種々の制約プログラミング技術が文献において公知であり、本明細書に適用することができる。興味深いことに、問題に対する解を発見するために制約ソルバによって使用されるアルゴリズムは、多くの場合、カスタマイズ可能である。これによって、解が有効であるかどうかを何が意味するかを変更することなく、解空間の制御、例えば特定の解の優先順位付けの制御が可能となる。特に、多くの既存の制約ソルバSolveは、伝播アルゴリズム、変数選択戦略、及び/又は、値選択戦略のカスタマイズを可能にする。
【0106】
伝播関数を使用して、有効な解の一部になることができないドメインDOMSからの値を削除することができる。伝播関数は、ドメインから値を削除するが追加しないという意味で、単調フィルタリングアルゴリズムであるものとしてよい。伝播関数は、典型的には、それぞれの制約CONSごとに特有である。伝播関数は、ドメインDOMSと、同様の制約下における他の変数の割り当てとに基づいて、ドメインからどの値を削除すべきかを推論することができる。解を発見するために、ソルバSolveは、検索アルゴリズムを使用して、系統的に割り当てを実行し、それらの割り当てを、ドメインDOMSを通して伝播させることができる。データフロー制約を強制するための伝播アルゴリズムの例は、本明細書の他の箇所に記載されている。
【0107】
ソルバSolveは、多くの場合、所与の問題における全ての可能な解を発見するために、バックトラッキングに基づく検索アルゴリズムを使用する。このことは、変数VARSの集合からのどの変数x∈Xに次に値が割り当てられるかを決定する変数選択戦略を含み得る。値選択戦略は、どのような順序で変数のドメインを検索すべきかを決定することができ、例えば、Asn(d,x)の特定の実装としてみなすことができる。変数選択及び値選択は、解までの時間に影響を与え、解が出力される順序にも影響を与える。従って、値選択戦略及び変数選択戦略を最適化することによって、解決の効率と、決定された解の品質との両方に影響を与えることができる。
【0108】
変数選択戦略においては、命令データフローグラフを通して後方に伝播する戦略を使用することが好ましい。最初に出力を選択することができ、次いで、解決は、グラフを逆向きに通って進行することができる。この戦略は、例えばニューラルネットワーク層評価の関連する計算にとって最も伝播する可能性を有することが判明した。
【0109】
値戦略のための1つの例は、辞書式検索を使用することである。多くの場合、ハードウェアアクセラレートされた命令の入力データの構造に関する追加的な情報に基づいて、値選択戦略を最適化することができる。例えば、多くの場合、ハードウェアアクセラレートされた命令は、多次元入力を有することができ、命令を適用することができる値も、多次元を有することができる。このような場合には、値選択戦略としてポートフォリオ検索戦略を使用することができる。このような検索においては、値が変数に割り当てられる順序をそれぞれ提供する複数のいわゆる資産が並行して検索される。それぞれ異なる資産は、ハードウェアアクセラレートされた命令の次元と、可能な入力値の次元との間のそれぞれ異なるマッピングに対応することができる。資産は、各自のそれぞれの次元マッピングに従って割り当てを優先順位付けすることができる。これらの複数の異なる資産を並行して検索することができ、結果的に、広範囲の計算にわたって検索期間が安定化することとなる。
【0110】
興味深いことに、ポートフォリオ検索戦略を使用する場合には、命令のどの次元を計算のどの次元にマッピングすることができるかを制限することによって、可能な資産の数を制限することができる。このことは、手元の命令及び計算に依存しており、例えば、手動における注釈付けによって実行可能である。例えば、命令及び演算の次元は、例えば行列乗算の場合、縮約次元と非縮約次元とに区分可能である。ポートフォリオ検索戦略においては、その場合、演算の縮約次元を計算の縮約次元のみにマッピングすることができ、非縮約次元についても同様である。このようにして、資産の数を顕著に制限することができ、これによって、性能を改善することができる。例えば、(I,J,K)にわたる行列乗算は、2つの空間次元(I,J)と1つの縮約次元(K)とを有する。値選択戦略は、計算における次元と、行列乗算の次元との間に直接的に埋め込むことを試みることができる。資産においては、検索により、選択された3つの次元を優先順位付けすることができる。nsが空間次元の数であり、nkが計算における縮約の数である場合、資産の数は、{(ns!)/(ns-2)!}・{(nk!)/(nk-1)!}であり得る。このことは、そうでなければ生じる可能性があった(ns+nk+1)!の可能なドメイン順列と比較して、顕著な縮約である。資産内においては、例えば値選択戦略として辞書式検索を適用することができる。
【0111】
ソルバSolveがこれらの初期ポートフォリオにおいて解を発見することに失敗した場合には、検索空間に対する制約を緩和することができ、より広範囲の解空間によって検索を繰り返すことができる。
【0112】
一般的に(かつ、上述したようにポートフォリオ検索を使用する場合に、検索を繰り返すことに代えて又はこれに加えて)、ソルバSolveが制約充足問題CSPに対する解を発見することに失敗した場合には、例えば、解が発見されるまで、又は、これ以上適当な緩和を利用することができなくなるまで、制約充足問題CSPを緩和して、解決Solveを繰り返すことができる。例えば、ダミー演算を許可するために制約充足問題を緩和すること、特定の入力が使用されることを強制する制約を緩和することなどが可能である。そのような緩和は、さほど最適でない解をもたらす可能性があり、例えば、ハードウェアアクセラレートされた命令によって処理することができる正しい形状のデータを取得するために、演算のうちの最適化される演算が少なくなり又はより多くの前処理が必要とされることとなるが、これらの緩和を実施することにより、ハードウェアアクセラレートされた命令を、そのような理想的とは言えない状況にも適用可能にすることが可能となる。
【0113】
図面には、任意選択肢のコンパイル演算Comp,345も示されており、このコンパイル演算Comp,345は、決定された呼出しINVを使用して、計算を実施する機械実行可能命令INSTR,350を生成することができる。命令INSTRは、決定された可能な呼出しINVに従ってハードウェアアクセラレートされた命令を呼び出すことができる。例えば、呼出しINVを使用して、コンパイル可能なコードを生成することができ、このコンパイル可能なコードは、その後、命令INSTRを取得するためにコンパイルされる。特定のハードウェアアクセラレートされた命令に対して呼出しコンパイルINVからコードを生成するために使用される規則は、典型的には、提供されているコード生成インタフェースに依存している。一般的に、プログラミングインタフェースがどのようにしてハードウェアアクセラレータ命令が呼び出されることを可能にするかに従って、十分な入力制約を制約充足問題CSPに含めることにより、命令INSTRへの呼出しINVの変換を、比較的率直に実施することができる。
【0114】
いくつかの実施形態によれば、命令データフローグラフは、ハードウェアアクセラレートされた命令の出力の部分集合のみに関するノードを含み得る。機械実行可能命令INSTRを生成するために、呼出しINVを使用して、ハードウェアアクセラレートされた命令の残余の出力の一部又は全部の、計算の演算へのマッピングを推論することができる。従って、可能な呼出しINVのマッピングによって示されるものよりも大きい計算の部分に、ハードウェアアクセラレートされた命令を適用することができる。例えば、行列乗算においては、出力要素の計算は、入力ノードの集合をその近隣と共有するが、中間結果は共有しない。従って、呼出しINVは、1つの出力要素のみに関してマッピングを提供することができ、その後、このマッピングを、計算の完全な行列乗算を実施するために使用することによって一般化することができる。
【0115】
興味深いことに、命令INSTRを生成することは、ハードウェアアクセラレートされた命令のさらなる呼出しを取得するために、決定された呼出しINVを一般化することも含み得る。畳み込みのようなニューラルネットワークのワークロードを含む多くの実際の計算においては、決定された単一の呼出しINVから複数の呼出しによる計算の実施を外挿することが可能である。このために、決定された可能な呼出しINVから1つ又は複数の特徴を抽出することができ、これらの特徴に基づいて、決定された呼出しINVを一般化することができる。例えば、このようにして、ハードウェアアクセラレートされた命令の呼出しによって計算Compを完全に実施することができる。
【0116】
例えば、畳み込みの場合には、命令データフローグラフIDGの入力値及び出力値に関連する計算データフローグラフCDGの変数を評価して、命令のどの次元がワークロード内のどの次元に整合するか、及び、タイリング係数が何であるかを計算することができる。このことから、完全な畳み込みを実施するための命令INSTRを実施することができる。例えば、整合された次元を、発見された係数によってタイリングして、最も内側の次元になるように移動させることができる。これらのタイリング及び並べ替えは、埋め込みのために固定可能である。他のループ及びテンソル次元は、さらなる性能最適化のために依然として変換可能であるものとしてよく、例えば、ループのタイリング、並べ替え、融合等を適用することができる。このようなさらなる性能最適化は、AutoTVM又は同様のツールを使用して自動的に決定可能である。ハードウェアアクセラレートされた命令の呼出しが埋め込まれた命令INSTRを、例えば、TVMのVTAプログラミングツールフローによって生成することができる。
【0117】
任意選択肢の評価演算Eval,355も示されている。多くの場合、制約ソルバSolveは、制約充足問題CSPを解く複数の呼出しINVを決定することができ、例えば、制約充足問題CSPに対する全ての可能な解を列挙することができる。評価演算Evalにおいては、複数のそのような呼出しの性能を評価することができ、この性能の評価に基づいて複数の解から1つの解を選択することができる。評価は、決定された機械実行可能命令INSTRに基づいて、例えば、命令を実行又はシミュレートして性能を測定することによって実行可能であり、又は、(典型的にはハードウェア特有である)コスト関数を、最初に命令INSTRを決定することなく呼出しINVに対して直接的に計算することによって実行可能である。
【0118】
一般的に、本明細書において説明される技術は、種々の種類の計算と、種々の種類のハードウェアアクセラレートされた命令とに適用可能である。ハードウェアアクセラレートされた命令は、行列乗算、畳み込み、ドット積、行列ベクトル積、累積和、プーリング、及び、アダマール積のうちの1つ又は複数を実施することができる。計算は、例えば、ニューラルネットワーク層の畳み込み演算子、乗算、又は、プーリング演算の評価を含み得る。
【0119】
典型的には、少なくともハードウェア制限HWRは、ターゲットハードウェアに依存しており、その一方で、計算データフローグラフCDGは、実施されるべき計算に依存している。従って、例えば、同一の命令データフローグラフIDGと、同一のハードウェア制限HWRとを使用して、提示されたアプローチを複数の異なる計算データフローグラフCDGに適用することにより、複数の計算のための実装形態を画定することが可能であり、同一の計算データフローグラフCDGと、複数の異なるハードウェア制限HWR及び/又は命令データフローグラフIDGとを使用して、提示されたアプローチを適用することにより、同等の計算の複数の実装形態を画定することが可能である。
【0120】
図4bは、データフローグラフを定義する多面体表現の詳細であるが非限定的な例を示す。種々の実施形態において、計算データフローグラフ又はその一部を、多面体表現によって表すことができる。
【0121】
例えば、
図3に関連して論じられるように、計算データフローグラフのノードが命令データフローグラフのノードに割り当てられる制約充足問題を解くことによって、計算におけるハードウェアアクセラレートされた命令の可能な呼出しを決定することができる。多くの実際の場合、計算データフローグラフのノードの数は、極めて多数であるものとしてよく、例えば、少なくとも1024個、少なくとも4096個又は少なくとも104876個のノードである。しかしながら、興味深いことに、本発明者らは、計算データフローグラフ又はその少なくとも一部を格納するために多面体表現を使用することによって、計算データフローグラフの全てのノード及び/又はエッジのリストを明示的に決定及び格納することを回避することができることを認識した。これにより、制約ソルバの性能が改善される。
【0122】
一般的に、多面体表現においては、データフローグラフのノードの集合がシンボル的に表され、例えば、どのノードが集合内にあるかを明示的に列挙することなく記述する表現が使用される。エッジの集合、例えばノードの集合の着信エッジ及び/又は発信エッジをシンボル的に表すこともできる。制約充足問題を解く際には、多面体表現をインスタンス化することによって、例えば、本明細書において説明される値選択戦略に従ってノードを選択することによって、ノードの集合からの特定のノードを取得することができる。次いで、命令データフローグラフのノードを、このインスタンス化されたノードにマッピングすることができる。
【0123】
一例として、図面は、多面体表現を使用してデータフローグラフをグラフィカルに表す。
図4aの場合のように、4×4行列乗算は、例えば、テンソル式T:A
i,j=Σ
kX
i,k・Y
k,jにより表される。この計算を、ループネストとして表すことができ、即ち、Iにiを入れ、Jにjを入れ、又は、Kにkを入れると、A[i][j]+=X[i][k]*Y[k][j]となる。
【0124】
入力テンソルを、これらの入力テンソルの形状の集合によって記述することができる。例えば、図面には、データフローグラフの入力ノードの集合の多面体表現x,410が示されている。この集合は、例えば、
図4aのノード411~414を含む集合に対応しており、以下の集合
X={(i,k)|0≦i<I,0≦k<K}
によって記述可能である。
図4aのノード421~424を含む、データフローグラフの入力ノードのさらなる集合の多面体表現y,420も示されている。この集合は、
Y={(k,j)|0≦k<K,0≦j<J}
のように記述可能である。
【0125】
行列乗算計算のスカラ乗算演算を、例えば、
図4aの乗算431~434を含む多面体表現*,430によって表すことができる。行列乗算計算のスカラ加算演算を、例えば
図4aの加算441を含む多面体表現+,440によって表すことができる。スカラ乗算とスカラ加算とを、共に1つの集合
S={(i,j,k,n)│0≦i<I,0≦j<J,0≦k<K,0≦n<#T}
によって表すことができる。I,J,Kは、ドメイン境界である。Sは、オリジナルのテンソル表現Tのうちのどの要素が選択されるか、例えば、この場合には、ノードが加算を表しているのか乗算を表しているのかを記述する追加的な次元も含む。
【0126】
データフローグラフのノードの集合は、多面体表現によって定義される集合の和集合、例えば、No≡S∪X∪Yとして形成可能である。
【0127】
データフローグラフのノード間のエッジの集合も、多面体表現によって定義可能である。多面体表現は、2つのドメイン間の二項関係に対応することができる。
【数3】
の関係が存在する場合には、2つのインスタンス(s1,s2)∈Sの間にエッジ、例えばデータフローが存在する。
【0128】
例えば、
図4bにおいては、ノード410,420,430,440のそれぞれの集合の間のエッジを、以下の関係:
R1:*→+={i,j,k,n→i’,j’,k’,n’│i’=i,j’=j’,k’=k,n=n
*,n’=n
+};
R2:+→+’={i,j,k,n→i’,j’,k’,n’│i’=i’,j’=j,k’=k+1,n’=n=n
+};
A
X:X→*={i,k→i’,j’,k’,n’│i’=i,k’=k,n’=n
*};
A
Y:Y→*={j,k→k’,j’,i’,n’|j’=j,k’=k,n’=n
*}
によって定義することができる。
【0129】
上述の例においては、関係R1は、乗算と加算とが同一のループ反復内において行われるが、テンソル式Tにおける乗算及び加算の位置によって順序付けられるということを指定する。R2は、反復次元kにおいてシーケンシャルに行われる2つの加算演算として解釈可能である。AX及びAYは、アクセス関数自体を符号化し、かつ、どのノードによってアクセスが実施されるかを、この場合にはTにおける乗算を符号化する。全ての関係の和集合は、データフローグラフGoのエッジを記述することができ、具体的には例えば、Eo≡R1∪R2∪AX∪AYである。
【0130】
この例においては、ノード440の集合と、対応する関係R2とを使用して可換縮約演算、この例においては加算が表される。
図4aに関して論じられるように、命令データフローグラフにおいては、そのような可換縮約演算を、単一のノード、例えば
図4aのノード441によって表すことができる。このような場合には、命令データフローグラフのノード441は、計算データフローグラフのノード440の集合に効果的に対応することができる。効果的には、関係R1は、ノード441の着信する非自己エッジに対応することができ、その一方で、関係R2は、自己エッジに対応することができる。この場合には、ノード441がノード440の集合内の任意のノードにマッピングされることを許可するために、制約充足問題を構成することができる。ノード440の集合のノードへの可換縮約演算のマッピングに対処するために、縮約の順序を制御する項を緩和することができ、例えば、縮約の如何なる順序付けをも決定しないように、R1及びR2におけるk’に関する項を緩和することができる。この緩和により、効果的には、集合440のそれぞれのノードを、可換縮約ノードとみなすことができる。興味深いことに、この緩和によってグラフ内のエッジの数が大幅に増加するが、計算データフローグラフを完全にインスタンス化する必要がないので、多面体表現を使用して効率的にグラフを実装することが可能となる。あるいは、多面体表現を使用した場合にも、可換縮約演算を単一のノードとして表すことが可能となる。
【0131】
データフローグラフのノード及び/又はエッジのラベルを、例えば、集合に対する共通のラベルとして、又は、シンボル的に定義された別個のラベルとして、設けることができる。ラベルは、入力又は出力の種類、演算の種類等を示すことができる。例えば、ノード410は、“OutType:int8”としてラベル付け可能であり、ノード420は、“OutType:int8”としてラベル付け可能であり、ノード430は、“InType:int8;OutType:f32;Op:mul”としてラベル付け可能であり、ノード440は、“InType:f32;OutType:f32;Op:add”としてラベル付け可能である。
【0132】
相互並列化可能な演算のペアを、多面体表記(polyhedral notation)の形態により示すこともできる。例えば、
図4aに関しても論じられるように、相互並列化可能な演算のペアを、空間エッジによって示すことができる。このようなエッジの集合も、多面体表現(polyhedral representation)の形態により表すことができる。
【0133】
エッジの集合を記述する関係に関して、いくつかのケースが生じる可能性がある。関係の一部又は全部が、対称でない場合がある。この例における関係*→Xのような1つ又は複数の関係は、全射的かつ機能的であるものとしてよく、例えば、乗算は、Xにおいて自身が消費する厳密に1つのテンソル要素にマッピングすることができる。例えば、関係X→*のような1つ又は複数の逆関係は、非機能的であるものとしてよく、例えば、Xにおける入力要素は、複数の乗算によって使用可能であるが、それらの全てではない。このことは、AX及びAYの関係によって観察可能である。なぜなら、AX及びAYの関係は、それぞれi’又はj’に関する特性を有する項を含まないからである。Xにおける1つの特定の入力値に対し、この関係は、この値を使用する全ての乗算の部分集合を記述することができる。
【0134】
一般的に、多面体表現によって定義されるデータフローグラフの演算の集合Sを、インスタンス集合と称することができ、要素は、動的実行インスタンスと称される。集合Sは、整数タプルの集合によって記述可能であり、整数タプルは、動的実行インスタンス、例えばノードを記述する。例えば、整数タプルの集合を記述するために、以下の表記:
{(e0,・・・,en)|τ0,・・・,τn}
を使用することができる。
【0135】
例えば、それぞれの項τjは、それぞれのタプルメンバejの固定された下限及び/又は上限を提供することができる。従って、全てのτ項の連言によって完全な集合を定義することができる。制約充足問題のドメインは、例えばノードの種類によって定義された、整数タプルの集合のうちの部分集合として定義可能である。入力ノードの場合には、ドメインを、それぞれのテンソルの形状におけるタプルの集合によって記述することができる。演算ノードの場合には、ドメインは、演算を表すタプルの集合又はそれらの部分集合であるものとしてよい。
【0136】
インスタンスのペア間の二項関係の和集合、例えばグラフのシーケンシャルなエッジは、データ依存関係Dと称されることもある。ソース集合からターゲット集合への要素間の関係を、
ssource→starget={(e0,・・・,en)→(e’0,・・・,e’n)|Φ0,・・・,Φm}
のように表記することができ、ここで、項Φkは、関係における条件を記述している。ターゲットタプル内の要素は、e’と表記可能である。関係条件Φkは、ターゲット集合内の要素e’にマッピングされるソース要素eを記述するために使用可能である。全てのΦ項の連言により、関係ドメイン全体を記述することができる。
【0137】
多面体表現の使用は、畳み込み、行列乗算又はプーリング演算のようなニューラルネットワーク層評価の一部である計算にとって特に有益である。このような計算は、典型的には、コンパイル時において既知である境界を有するテンソル、例えばn次元の配列にわたって演算する。典型的には、種々の出力要素は、同様の手法により計算されるが、入力値のスライスは異なっている。計算は、典型的には、条件文を有さない深いループネストも含み、高度に構造化されている。これにより、特に、多面体表現を使用して計算を表すことが効率的になる。
【0138】
興味深いことに、本明細書において説明されるような制約充足問題において多面体表現を使用しても、一般性の損失は生じない。計算への命令のマッピングは、依然として個々のノードのレベルで、例えばスカラレベルで行われる。制約ソルバは、集合がどのように記述されるかに関係なく、例えば次元の順序に関係なく、記述されたノードの集合からの任意の計算データフローグラフノードを命令データフローグラフノードに割り当てることができる。このことは、多面体表現に明示的な変換が適用され、集合の記述方法に克服困難なモデル化仮定が含まれるような、他のアプローチとは異なっている。
【0139】
図5a乃至
図5dは、超直方体制約を適用することについての詳細であるが非限定的な例を示す。種々の設定において、規則的な形状を形成するために、ハードウェアアクセラレートされた命令の入力を制限することが有益である。これにより、より効率的なメモリアクセスを有する実装をもたらすことが可能となり、及び/又は、そのために、ハードウェアアクセラレートされた命令が入力に対して呼び出されることを可能にするための、効率的なメモリレイアウト変換を利用することが可能となる。特に、この例は、入力が超直方体を形成することを強制するために、超直方体制約をどのように使用することができるかを示している。
【0140】
本明細書においては、超直方体(hyper-rectangle)という用語は、一般的に、任意の数の次元n>0、例えば、n=1,n=2,n=3,又はn≧4を有する長方形を指すために使用される。例えば、0≦δi≦Δiの場合に、点の集合(x1+・・・+xn)+δ1・(s1,0,・・・,0)+δ2・(0,s2,0,・・・,0)+・・・を形成する正方格子として、超直方体上に点を配置することができ、ここで、siは、それぞれ別個に1に固定することができる、例えば、設定することができる又は動的に決定することができるストライドである。
【0141】
例えば、ニューラルネットワーク評価において生じる計算のためには、超直方体の使用が適している。なぜなら、このような計算は、典型的には(しばしば大きい)テンソル、例えばn次元の配列を含むからである。効率的なメモリアクセスのために、かつ、例えば、テンソル次元の転置又はタイリングのようなメモリレイアウトの変換の使用によって、ハードウェアアクセラレートされた命令を効率的に呼び出すことを可能にするために、超直方体の形状は、特に有益である。解の入力値に割り当てられた変数が超直方体を形成すること、例えば、テンソル空間のベクトル基底に整列された超直方体を形成することを保証するために、制約を使用することができる。他の利点は、超直方体を形成することに入力を制約することにより、命令データフローグラフの入力ノードへの潜在的な割り当てを、制約ソルバによって比較的簡単に除去することが可能になり、これにより、制約解決の効率を大幅に改善することができることにある。
【0142】
超直方体制約は、例えばハードウェアアクセラレートされた命令の入力に対応する、点V=(v0,・・・,vn)の順序付けられたタプルから、多数の次元n>0を有する超直方体の形状を整合して伝播させるように構成可能である。制約は、これまでに計算の値が割り当てられた入力点の集合と、Vにおける点の総数とから、境界ボックスを推論するように構成可能である。境界ボックスの外側にある値を、ハードウェアアクセラレートされた命令の残余の入力点のための可能な値として除去することができる。従って、典型的には、わずかな回数の割り当ての後には既に、ドメインの大部分を排除することが可能である。例えば、テンソルの1つの軸に沿って2つの点だけを選択した後、この次元を、bound=#V・|v0-v1|のサイズに拘束することができる。
【0143】
長方形は、点の集合Vの線形反復を実施することによって計算可能であり、この線形反復は、点が任意の数の次元を有する長方形を作成するかどうかを推論することを反復的に試みることを含む。特に、点が辞書順における格子を記述する場合には、反復は、以下のステップのうちの1つを実施することを含み得る。基本のステップは、最も内側の次元の1つの要素から次の要素への移動を表すことができる。次元ジャンプは、最も内側の次元の次の線への移動、例えば、空間を斜めに通る移動を表すことができる。格子構造を強制するために、次元ジャンプが発生する前に、基本のステップが同一であり、かつ、固定の回数だけ繰り返されることを要求することができる。次元ジャンプは、長方形に新しい次元を追加することができる。次元[n
0,・・・,n
m]∈Recの場合には、0≦k≦mである次元ジャンプn
kが、
【数4】
回だけ発生することを要求することができる。次元ジャンプは、ベクトルjmp=v
a-v
a+1によって定義された形状を有することができ、これが、v
o=(v
0-v
a)+v
bと同等であることを要求することができ、ここで、v
0は、Vにおける第1の点であり、v
bは、整数の係数によってスケーリングされたテンソルの基底ベクトルのうちの1つである。v
bをベクトル基底の要素となるように制限することにより、角部に直角が存在すること、及び、長方形が座標軸に平行に整列されることとを保証することができる。
【0144】
図5a乃至
図5dは、点の集合に対して格子構造を強制する超直方体制約を強制する例を示す。図面は、制約をどのように強制して伝播させることができるかの例を示す。図面において、黒丸のドット512,522,532は、ドメイン値を表しており、×印511,521,531,541は、16個の変数のうちの1つのための選択を表しており、白丸のドット533,543は、伝播によって除去された値を表している。
【0145】
この例においては、最初の4つのステップでは、まだ伝播が不可能である可能性がある(
図5a乃至
図5b)。なぜなら、x軸に沿った次元のサイズ8は、変数の総数16よりも小さいからである、しかしながら、5番目の値が選択されると、ドメインから値を除去することができる。この例においては、x>3を有する値(y,x)を除去することができる。なぜなら、これは、最も内側の次元のサイズであり、全ての外側の次元に対して同等でなければならないからである。5番目の変数に対して選択された値(1,0)から、伝播関数は、y次元への拡張が、
【数5】
程度の大きさであり得ることを推論することができる。この例においては、これは、d
y=(16/4)・1=4である。従って、点533を除去することができる(
図5c)。残余の点は、
図5dに示されるようにマッピングされる。
【0146】
興味深いことに、点Vの集合にわたる反復によって超直方体制約を実施することにより、得られた制約は、命令とワークロードとの間の相対的な次元順序に対して透明になることができる。その結果、ワークロードにおける任意の次元を、例えば転置演算を実施する必要なしに命令における任意の次元にマッピングすることができる。興味深いことに、マッピングを使用して、ハードウェアアクセラレートされた命令を呼び出すコードを生成する際にどのようなメモリ変換、例えば転置、タイリング、融合等を使用すべきかを導出することができる。
【0147】
次に、超直方体制約の実装の詳細な例を提供する。このアルゴリズムは、部分的に割り当てられた長方形に対しても機能する。推論中に発見された情報を直接的に使用して、未解決の割り当てによって形成することができる可能な限り最大の長方形である境界ボックスを計算することにより、残余の値のドメインを伝播させることができる。
【0148】
アルゴリズムは、最初のステップを確認することによって開始し、座標軸に平行に整列されていなければ失敗を返す。次に、アルゴリズムは、それぞれのテンソル次元が1回だけ使用されるように、実施済みのステップをベクトル基底から除去する。次いで、残余の点が反復され、全てのステップが表にされる。live_tblは、実行中のステップを記録する。d
kへの次元ジャンプが発生すると、d
k-1に対して実施されたステップの数がdim_tableに記録される。発生している全てのステップは、既に記録されているかどうかがチェックされる。既に発生している場合、counters_validは、そのステップが正しい時間に発生したかどうかをチェックして、内側の次元の全てのカウンタをリセットする。
図5の例においては、y次元のそれぞれのステップのためにx次元の4つのステップが存在しなければならない。yステップが発生すると、xのためのカウンタがリセットされる。
【表3】
【0149】
ここで、ハードウェアアクセラレートされた行列乗算(GEMM)命令を提供するVTAハードウェアアクセラレータのためのコードを生成するために検討した技術が適用されるという実験の詳細を提供する。ハードウェアは、256kbの重みバッファと、128kbのデータバッファと、int8入力を消費してfloat32結果を生成するGEMMコアとを有するZynqUltrascale+FPGA上においてインスタンス化される。GEMMユニットは、(x,y,z)=(1,16,16)の場合の
【数6】
を計算する。この結果を、例えば、活性化演算及び量子化演算のためにベクトルスカラユニットによって処理することができる。行列オペランドBが転置されていることに注目されたい。ハードウェアは、行列オペランドの独立したメモリアクセスのためのロード/格納ユニットを有する。このロード/格納ユニットは、メモリに連続的に格納されている完全な2Dオペランド行列をロード及び格納することができる。この実験は、Baidu社のDeepBench推論ベンチマークからの計算を使用している。
【0150】
提示された技術に従って生成されたコードは、TVMのconv2d参照実装と比較され、TVMは、畳み込みにおいてGEMMユニットの3つの軸x,y,zを、バッチn=xの次元と、出力チャネルoc=yの次元と、入力チャネルic=zの次元と静的にマッピングする。TVMの畳み込み実装は、NCHW(N=バッチサイズ、C=チャネル、H=高さ、W=幅)メモリレイアウトを予期している。
【0151】
実験においては、TVMの機械学習コンパイラフレームワークを使用して、機械実行可能命令が生成された。TMVがハードウェアによってアクセラレートすることができる演算子に遭遇すると、指定された展開戦略によって実装が処理される。戦略は、ハードウェアターゲットに対して最適化されたTVMのIRにおいて演算子を実装する。VTAのためのTVMのコード生成ツールフローは、VTAの戦略にTVMのアプローチを組み込むことによって使用可能である。命令DFG Giは、ハードウェアコンフィギュレーションに基づいて生成される。これに基づいて、制約充足問題が上述したように定義される。Giのノードは、変数であり、演算子の動的インスタンスの集合がドメインを形成する。
【0152】
ある1つの実験において、制約ソルバを使用して、参照実装と同様の可能な呼出しが決定された。このために、以下の制約、即ち、
・GEMM命令のデータフローを整合させるためのデータフロー制約、
・転置演算及び再成形演算に基づいてより簡単なメモリ変換を可能にし、入力要素及び出力要素が座標に平行に整列された形状へとマッピングされることを保証するための超直方体制約、
・同一の命令呼出しにおいて同一の動的実行インスタンスが複数回出現することを阻止するためのallDiff制約、
・全ての入力テンソル及び出力テンソルの最初の整合がそれぞれのドメインの原点に固定されることを強制する固定原点制約、
・入力及び出力テンソルに対して任意の次元におけるストライドを許可しない密度制約、
・命令に整合するアクセスパターンを有していて、例えばストライド又はステンシルパターンを有していないワークロード次元における整合のみを許可するためのメモリアクセス制約
が使用された。
【0153】
計算が与えられると、制約ソルバを使用して、命令Giのそれぞれの演算及びデータ要素が計算Goのノードにどのようにマッピングされるかを記述する可能な呼出しを取得することができる。畳み込みのようなDNNワークロードの規則性に起因して、ハードウェアアクセラレートされた命令を繰り返し呼び出す実装に、発見された呼出しを外挿することが可能である。解では、入力値及び出力値に関連する変数が評価されて、命令のどの次元がワークロード内のどの次元に整合するか、及び、タイリング係数が何であるかが計算される。この情報によって、コードを生成することが可能となる。整合された次元は、発見された係数によってタイリングされて、最も内側の次元になるように移動される。これらのタイリング及び並べ替えは、埋め込みのために固定される。他のループ及びテンソル次元は、さらなる性能最適化のために自由に変換可能である。これらの最適化は、ループのタイリング、並べ替え又は融合を含む。AutoTVMを使用して、それぞれのconv2d層のための最良の最適化パラメータが自動的に決定された。埋め込まれた命令を有するコードが、TVMのVTAプログラミングツールフローによって生成された。
【0154】
専門家が作成した参照実装と同様の構造及び性能を有する実装を自動的に生成することができることが、実験により実証された。興味深いことに、一部のベンチマーク計算においては、決定された可能な呼出しに基づいて生成されたコードは、参照実装と比較して顕著な高速化を実現した。即ち、一部のベンチマーク計算においては、参照実装は、その静的な埋め込み戦略に起因して非常に低いハードウェア利用率を達成する。これらの計算においては、最大で×2.49倍の高速化が達成され、個々の演算子においては、×238にもなる改善が観察された。従って、これらのシナリオにおいては、決定された呼出しに従って自動的に生成されたコードにより、顕著な性能改善がもたらされた。
【0155】
他の実験においては、提示された技術を使用して、DNNの計算テンソルレイアウトが動的に変更された。制約充足問題に対する解は、どの次元が必要であるか、ひいては、どの次元が自由であるかを示し、コード生成中に自由な次元のメモリレイアウトが変更されることを可能にする。この実験においては、制約ソルバを使用して、NHWC(N=バッチサイズ、H=高さ、W=幅、C=チャネル)レイアウトに従って可能な呼出しが生成された。多くの場合、このことは、参照実装によって使用されるNCHWレイアウトと比較して性能を改善することが判明した。
【0156】
さらなる実験においては、以前の実験と比較してメモリアクセス制約が緩和された。これにより、制約充足問題に対する解の数が増加する。上述したように、上記の実験には、参照実装と同様の解を取得するための制約が含まれていた。一部のベンチマーク計算においては、これらの制約の結果、ic/z<1であるので、ic次元においてゼロパディングを実施する必要性が生じ、その結果、利用率が低下し、テンソルが大きくなった。興味深いことに、これらの制約を緩和することによって、より少ないパディングしか必要としない又はパディングを必要としない可能な呼出しを決定することが可能となり、ひいては、性能の改善を提供することが可能となることが判明した。特に、フィルタステンシルに含まれる、畳み込みの複数の次元におけるマッピングを可能にする緩和が適用された。制約を緩和するということは、計算を実施するためのコードを生成する際に、より多くの異なるケースを処理する必要があるが、それでもなお実現可能であるということを意味する。特に、コード生成は、複数のテンソル次元を1つに融合することと、ステンシル計算のデータアクセスを線形化することとを支援するように適合させられた。後者は、W[h+kh]のようなステンシルによって作成されたアクセスパターンを明示的にメモリ内において複製することを含む。展開された次元の新しいフットプリントは、h’=h/stride*khであるが、その一方で、結果を計算する演算の総数は、同等のままである。作成されるオーバヘッドを最小化するために、埋め込みに必要なステンシル次元だけが展開された。VTAのためのコードを生成するために、元々の次元の偶数の除数であるテンソル分解係数が使用された。如何なるパディングも伴わない実装が不可能である場合には、必要に応じて縮約次元が、命令サイズの次の偶数の除数に自動的に加えられた。
【0157】
特に、メモリレイアウト変換が、リレー関数を用いて実施された。ステンシルを展開する演算子は、“relay.take()”、即ち、どの値を複製すべきかを決定するインデックスリストを取得するギャザー関数を使用する。なぜなら、リレーにおいては直接的なim2col演算子を利用することができないからである。
【0158】
本技術に従って生成された実装の性能が、推論及びメモリ変換の性能と、データフットプリントとに関して評価された。パディングを伴うTVMの参照実装と比較して、多くの場合、メモリフットプリント、演算子の性能、及び/又は、全体的な性能を改善することが可能である。いくつかの場合には、これにはトレードオフが含まれ、どの性能パラメータが最適化されているかに従って種々の最適な実装を発見することができる。特に、多くの場合、パディングによって制御される効果的なハードウェア利用は、特に、ic=1である層において、性能を改善するための重要な要因であった。即ち、ic<zである場合には、入力画像におけるic/z・(h・w)要素のみが結果に有意に寄与し、効果的なハードウェア利用率を抑制し、本技術を特に有利なものにする。生成された呼出しが特に良好に実施された他の状況は、パディングによってアクセラレータの重みバッファの容量を超える重みテンソルが生成されてしまうような状況である。提示された技術によって生成された実装は、これを回避することができ、このことは、アクセラレータが完全な重みテンソルをオンチップバッファに保持することができるという効果を有することができる。このような場合には、特に顕著な性能高速化が観察された。
【0159】
図6は、プロセッサシステムのハードウェアアクセラレートされた命令を使用して計算を実施するコンピュータ実施方法600のブロック図を示す。方法600は、
図1のシステム100の演算に対応することができる。しかしながら、これに限定するものではなく、従って、方法600を他のシステム、他の装置又は他の機器を使用して実施するものとしてもよい。
【0160】
方法600は、「計算データを取得する」という表題の演算において、計算データを取得すること610を含み得る。計算データは、計算を表す計算データフローグラフを定義することができる。計算データフローグラフのノードは、計算の入力又は演算を表す。
【0161】
方法600は、「命令データを取得する」という表題の演算において、命令データを取得すること620を含み得る。命令データは、ハードウェアアクセラレートされた命令を表す命令データフローグラフを定義することができる。命令データフローグラフのノードは、ハードウェアアクセラレートされた命令の入力又は演算を表すことができる。
【0162】
方法600は、「命令を定義する->CSPを計算する」という表題の演算において、計算データ及び命令データに基づいて制約充足問題を定義すること630を含み得る。制約充足問題に対する解は、計算におけるハードウェアアクセラレートされた命令の可能な呼出しを表すことができる。制約充足問題は、計算データフローグラフのノードを命令データフローグラフのノードに割り当てることができる。制約充足問題は、計算データフローグラフの割り当てられたノードが、命令データフローグラフと同等のデータフローを有することを強制する1つ又は複数のデータフロー制約を含み得る。制約充足問題は、計算データフローグラフのどのノードを、ハードウェアアクセラレートされた命令の入力に割り当てることができるかを制限する1つ又は複数の入力制約をさらに含み得る。これらの制限は、ハードウェアアクセラレートされた命令及び/又はそのプログラミングインタフェースによって課されることができる。制約充足問題は、追加的な制約を含み得る。
【0163】
方法600は、「呼出しを決定するためにCSPを解く」という表題の演算において、計算におけるハードウェアアクセラレートされた命令の可能な呼出しを決定するために制約充足問題を解くこと640を含み得る。方法600は、「呼出しを出力する」という表題の演算において、可能な呼出しを定義するデータを出力すること650を含み得る。
【0164】
一般的に、
図6の方法600の演算が、任意の適当な順序により、例えば、連続的に、同時に、又は、それらの組合せにより、該当する場合には、例えば、入力/出力の関係によって必要とされる特定の順序を条件として実施されるものとしてよいことが理解されるであろう。
【0165】
本方法は、コンピュータ上において、コンピュータ実施方法として、専用のハードウェアとして、又は、両方の組合せとして実施されるものとしてよい。
図7にも示されているように、コンピュータのための命令、例えば実行可能コードは、例えば、一連の機械可読物理マーク710の形態で、及び/又は、種々の電気的な、例えば磁気的若しくは光学的な特性又は値を有する一連の要素として、コンピュータ可読媒体700上に格納されるものとしてよい。実行可能コードは、一時的又は非一時的に格納されるものとしてよい。コンピュータ可読媒体の例には、メモリ装置、光学記憶装置、集積回路、サーバ、オンラインソフトウェア等が含まれる。
図7は、光学ディスク700を示す。
【0166】
あるいは、コンピュータ可読媒体700は、一時的又は非一時的なデータ710を含み得るものであり、この一時的又は非一時的なデータ710は、ハードウェアアクセラレートされた命令を支援するプロセッサシステムによって、例えば
図2のシステム200によって実行された場合に、プロセッサシステムに計算を実施させるための命令を表し、この命令は、本明細書において説明されるように決定された可能な呼出しに従ってハードウェアアクセラレートされた命令を呼び出すためのものである。
【0167】
さらに、ハードウェアアクセラレートされた命令を支援するプロセッサシステムにより、決定された可能な呼出しに従ってハードウェアアクセラレートされた命令を呼び出すための命令を実行することを含む、コンピュータ実施方法が企図されている。
【0168】
例、実施形態、又は、任意選択肢の特徴は、限定するものではないと記載されているかどうかにかかわらず、特許請求される本発明を限定するものとして理解されるべきではない。
【0169】
上述した実施形態が、本発明を限定するものではなく例示するものであること、また、添付の特許請求の範囲から逸脱することなく当業者が多数の代替的な実施形態を設計可能であることに留意すべきである。特許請求の範囲においては、括弧内の如何なる参照符号も、特許請求の範囲を制限するものとして解釈されるべきではない。「含む」という動詞及びその活用形の使用は、特許請求の範囲に記載されている以外の要素又は段階の存在を排除するわけではない。要素に先行する冠詞“a”又は“an”は、そのような要素が複数存在することを排除するわけではない。要素のリスト又はグループに先行する場合の「少なくとも1つ」のような表現は、そのリスト又はグループからの要素の全て又は任意の部分集合の選択を表す。例えば、「A、B及びCのうちの少なくとも1つ」という表現は、Aのみ、Bのみ、Cのみ、A及びBの両方、A及びCの両方、B及びCの両方、又は、A、B及びCの全てを含むものとして理解されるべきである。本発明は、いくつかの別個の要素を含むハードウェアによって、かつ、適当にプログラミングされたコンピュータによって実装されるものとしてよい。いくつかの手段を列挙している装置クレームにおいては、これらの手段のうちのいくつかを、同一のハードウェアアイテムによって具現化するものとしてよい。複数の特定の手段が相互に異なる従属請求項に挙げられているという単なる事実は、それらの手段の組合せを有利に使用することができないということを表すわけではない。
【外国語明細書】