(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-02-25
(45)【発行日】2025-03-05
(54)【発明の名称】スパースSIMDクロスレーン処理ユニット
(51)【国際特許分類】
G06F 9/38 20180101AFI20250226BHJP
G06F 15/80 20060101ALN20250226BHJP
【FI】
G06F9/38 370A
G06F9/38 370C
G06F9/38 310G
G06F9/38 310J
G06F15/80
(21)【出願番号】P 2023572877
(86)(22)【出願日】2022-11-04
(86)【国際出願番号】 US2022048919
(87)【国際公開番号】W WO2023086271
(87)【国際公開日】2023-05-19
【審査請求日】2023-12-07
(32)【優先日】2021-11-15
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2022-10-25
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ナガラジャン,ラフル
(72)【発明者】
【氏名】スブラマニアン,スビナイ
(72)【発明者】
【氏名】ジェイコブ,アーピス・チャッコ
【審査官】坂庭 剛史
(56)【参考文献】
【文献】米国特許出願公開第2021/0109761(US,A1)
【文献】米国特許出願公開第2019/0004814(US,A1)
【文献】国際公開第2006/106342(WO,A2)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/38
G06F 15/80
(57)【特許請求の範囲】
【請求項1】
ハードウェア回路であって、
各々のステージは、クロスバーおよび2つ以上のセルを含む、複数のステージと、
それぞれのデータを上流の入力部から下流の送信先へ前記複数のステージの複数のセルおよび複数のクロスバーを介してストリーミングする複数のデータ処理レーンとを備え、
前記ハードウェア回路は、
前記複数のデータ処理レーンに沿って前記上流の入力部から入力データを受信し、第1のオペレーションを実行するための第1の命令を受信し、
前記第1の命令を受信することに応答して、各々のステージのために、
前記ステージのそれぞれの処理セルにそれぞれの第2の命令を送信し、各々のセルは、それぞれのデータ処理レーンからの入力を受信することに応答してそれぞれの第2のオペレーションを実行するように構成されており、
前記ステージのためのそれぞれのクロスバーにそれぞれの第3の命令を送信するように構成されており、前記クロスバーは、前記複数のデータ処理レーンに沿って前記ステージの各々のセルから次のステージのセルへの出力を置換するように構成されており、
前記複数のデータ処理レーンおよびそれぞれの第2のオペレーションを実行するように構成された前記複数のセルに沿って、受信された前記入力データを処理することによって前記第1のオペレーションを実行するように構成されている、ハードウェア回路。
【請求項2】
各々のセルは、前記セルを通過するそれぞれのデータ処理レーンからのそれぞれの第1の入力オペランドと、前記セルの上流のステージのそれぞれのクロスバーからのそれぞれの第2の入力オペランドとを受信するように構成されている、請求項1に記載のハードウェア回路。
【請求項3】
前記複数のデータ処理レーンのデータの前記下流の送信先は、ベクタ処理ユニットであり、前記ベクタ処理ユニットは、前記ハードウェア回路の出力データに単一命令複数データベクタオペレーションを実行するように構成されている、請求項1に記載のハードウェア回路。
【請求項4】
前記セルの各々は、1つまたは複数の受信された命令に応答して複数の所定のプリミティブ操作のうちの1つまたは複数を実行するように構成されており、
前記ハードウェア回路は、複数の制御セルをさらに備え、
前記それぞれの第2の命令を前記それぞれの処理セルへ送信する際に、前記ハードウェア回路は、各々の制御セルによって、前記第1の命令によって指定された前記第1のオペレーションに基づいて各々の処理セルへのそれぞれの制御信号を生成および送信するように構成されている、請求項1に記載のハードウェア回路。
【請求項5】
各々の制御セルによって前記それぞれの制御信号を生成および送信する際に、前記ハードウェア回路は、前記処理セルが存在する前記ステージまたは前記処理セルを通過する前記データ処理レーンのうちの少なくとも1つに基づいて、各々の処理セルに、それぞれの算術演算、比較演算およびバイパス演算のうちの1つを実行させるためのそれぞれの制御信号を生成するように構成されている、請求項4に記載のハードウェア回路。
【請求項6】
前記複数のセルおよび複数のクロスバーは、前記複数のステージおよび複数のデータ処理レーンを横断して、接続されたセルの処理ネットワークを形成しており、前記接続されたセルの処理ネットワークは、前記入力データを受信し、前記入力データに前記第1のオペレーションを実行することに従ってそれぞれの出力データを生成するように構成されている、請求項4に記載のハードウェア回路。
【請求項7】
前記接続されたセルの処理ネットワークは、組み合わされたベクタソートおよび重複カウントオペレーションを実行するように構成されており、前記組み合わされた
ベクタソートおよび重複カウントオペレーションは、
前記処理ネットワークにより要素の入力ベクタを受信することと、
前記処理ネットワークにより出力として、前記入力ベクタにおける重複要素のソートされた出力ベクタおよびカウントを指定するデータを生成することと、を備える、請求項6に記載のハードウェア回路。
【請求項8】
前記入力データは、スパースベクタデータを含み、前記それぞれの第2の命令および前記それぞれの第3の命令を送信した後、前記ハードウェア回路は、ベクタスキャン、ベクタ和、ベクタソートまたはベクタ重複カウントのうちの1つを実行するように構成されている、請求項1に記載のハードウェア回路。
【請求項9】
システムであって、
各々のステージは、クロスバーおよび2つ以上のセルを含む、複数のステージと、それぞれのデータを上流の入力部から下流の送信先へ前記複数のステージの複数のセルおよび複数のクロスバーを介してストリーミングする複数のデータ処理レーンと
を備えるハードウェア回路を備え、
前記ハードウェア回路は、
前記複数のデータ処理レーンに沿って前記上流の入力部から入力データを受信し、第1のオペレーションを実行するための第1の命令を受信し、
前記第1の命令を受信することに応答して、各々のステージのために、
前記ステージのそれぞれの処理セルにそれぞれの第2の命令を送信し、各々のセルは、それぞれのデータ処理レーンからの入力を受信することに応答してそれぞれの第2のオペレーションを実行するように構成されており、
前記ステージのためのそれぞれのクロスバーにそれぞれの第3の命令を送信するように構成されており、前記クロスバーは、前記複数のデータ処理レーンに沿って前記ステージの各々のセルから次のステージのセルへの出力を置換するように構成されており、
前記複数のデータ処理レーンおよびそれぞれの第2のオペレーションを実行するように構成された前記複数のセルに沿って、受信された前記入力データを処理することによって前記第1のオペレーションを実行するように構成されている、システム。
【請求項10】
各々のセルは、前記セルを通過するそれぞれのデータ処理レーンからのそれぞれの第1の入力オペランドと、前記セルの上流のステージのそれぞれのクロスバーからのそれぞれの第2の入力オペランドとを受信するように構成されている、請求項9に記載のシステム。
【請求項11】
前記複数のデータ処理レーンのデータの前記下流の送信先は、ベクタ処理ユニットであり、前記ベクタ処理ユニットは、前記ハードウェア回路の出力データに単一命令複数データベクタオペレーションを実行するように構成されている、請求項9に記載のシステム。
【請求項12】
前記セルの各々は、1つまたは複数の受信された命令に応答して複数の所定のプリミティブ操作のうちの1つまたは複数を実行するように構成されており、
前記ハードウェア回路は、複数の制御セルをさらに備え、
前記それぞれの第2の命令を前記それぞれの処理セルへ送信する際に、前記ハードウェア回路は、各々の制御セルによって、前記第1の命令によって指定された前記第1のオペレーションに基づいて各々の処理セルへのそれぞれの制御信号を生成および送信するように構成されている、請求項9に記載のシステム。
【請求項13】
各々の制御セルによって前記それぞれの制御信号を生成および送信する際に、前記ハードウェア回路は、前記処理セルが存在する前記ステージまたは前記処理セルを通過する前記データ処理レーンのうちの少なくとも1つに基づいて、各々の処理セルに、それぞれの算術演算、比較演算およびバイパス演算のうちの1つを実行させるためのそれぞれの制御信号を生成するように構成されている、請求項12に記載のシステム。
【請求項14】
前記複数のセルおよび複数のクロスバーは、前記複数のステージおよび複数のデータ処理レーンを横断して、接続されたセルの処理ネットワークを形成しており、前記接続されたセルの処理ネットワークは、前記入力データを受信し、前記入力データに前記第1のオペレーションを実行することに従ってそれぞれの出力データを生成するように構成されている、請求項12に記載のシステム。
【請求項15】
前記接続されたセルの処理ネットワークは、組み合わされたベクタソートおよび重複カウントオペレーションを実行するように構成されており、前記組み合わされた
ベクタソートおよび重複カウントオペレーションは、
前記処理ネットワークにより要素の入力ベクタを受信することと、
前記処理ネットワークにより出力として、前記入力ベクタにおける重複要素のソートされた出力ベクタおよびカウントを指定するデータを生成することと、を備える、請求項14に記載のシステム。
【請求項16】
前記入力データは、スパースベクタデータを含み、前記それぞれの第2の命令および前記それぞれの第3の命令を送信した後、前記ハードウェア回路は、ベクタスキャン、ベクタ和、ベクタソートまたはベクタ重複カウントのうちの1つを実行するように構成されている、請求項9に記載のシステム。
【請求項17】
コンピュータが実行する方法であって、
各々のステージは、クロスバーおよび2つ以上のセルを含む、複数のステージと、それぞれのデータを上流の入力部から下流の送信先へ前記複数のステージの複数のセルおよび複数のクロスバーを介してストリーミングする複数のデータ処理レーンとを備える、ハードウェア回路が、前記複数のデータ処理レーンに沿って前記上流の入力部から入力データおよび第1のオペレーションを実行するための第1の命令を受信することと、
前記第1の命令を受信することに応答して、各々のステージのために、
前記ハードウェア回路により、前記ステージのそれぞれの処理セルにそれぞれの第2の命令を送信することと、各々のセルは、それぞれのデータ処理レーンからの入力を受信することに応答してそれぞれの第2のオペレーションを実行するように構成されており、
前記ハードウェア回路により、前記ステージのためのそれぞれのクロスバーにそれぞれの第3の命令を送信することと、前記クロスバーは、前記複数のデータ処理レーンに沿って前記ステージの各々のセルから次のステージのセルへの出力を置換するように構成されており、
前記ハードウェア回路により、前記複数のデータ処理レーンおよびそれぞれの第2のオペレーションを実行するように構成された前記複数のセルに沿って、受信された前記入力データを処理することによって第1のオペレーションを実行することとを備える、方法。
【請求項18】
各々のセルは、前記セルを通過するそれぞれのデータ処理レーンからのそれぞれの第1の入力オペランドと、前記セルの上流のステージのそれぞれのクロスバーからのそれぞれの第2の入力オペランドとを受信するように構成されている、請求項17に記載の方法。
【請求項19】
前記複数のデータ処理レーンのデータの前記下流の送信先は、ベクタ処理ユニットであり、前記ベクタ処理ユニットは、前記ハードウェア回路の出力データに単一命令複数データベクタオペレーションを実行するように構成されている、請求項17に記載の方法。
【請求項20】
前記セルの各々は、1つまたは複数の受信された命令に応答して複数の所定のプリミティブ操作のうちの1つまたは複数を実行するように構成されており、
前記ハードウェア回路は、複数の制御セルをさらに備え、
前記それぞれの第2の命令を前記それぞれの処理セルへ送信することは、各々の制御セルが、前記第1の命令によって指定された前記第1のオペレーションに基づいて各々の処理セルへのそれぞれの制御信号を生成および送信することを備える、請求項17に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本願は、2021年11月15日に出願された米国仮特許出願第63/279,262号の出願日の利益を主張する、2022年10月25日に出願された米国特許出願第17/972,663号の継続出願であり、その開示は、参照により本明細書に組み込まれる。
【背景技術】
【0002】
背景
単一命令複数データ(SIMD)処理ユニットは、入力の各々について同じオペレーションを実行することによる複数のデータ入力の並列処理のための1つのタイプの処理ユニットである。SIMD処理ユニットによって高速化されるオペレーションは、SIMD処理ユニットの設計時点で予め決定される。SIMD処理ユニットは、以下の計算プリミティブを頻繁に使用することができるスパース計算を伴うことができる:重複カウント/ヒストグラム;ソート;固有化;スキャン/セグメント化されたスキャン;および/またはパーティショニング。スパース計算において良好な性能を得るために、これらのプリミティブは、コンポーザブル形式でSIMDアーキテクチャ上に並列化されるべきである。現在の技術水準は、このような並列化を提供することができない。
【発明の概要】
【発明が解決しようとする課題】
【0003】
簡単な概要
開示の態様は、プロセッサの複数のデータ処理レーンを横断して単一命令複数データ(SIMD)データ依存オペレーションを実行するためのクロスレーン処理ユニット(XPU)を対象とする。各々のデータ依存オペレーションのための特定オペレーション向け回路を物理的に製造するのではなく、XPUは、個々のオペレーションを実行するように処理セルを構成し、XPUにおいて積層されたネットワークとしてクロスバーを配置することによって、入力信号に応答して異なるオペレーションを実行するように構成することができる。開示の態様は、XPUにおける同じ積層されたネットワーク構成を再利用することによって、ベクタにおける固有値および非固有値の重複カウントも実行しながら入力ベクタにおける固有値を識別することを提供する。各々の処理セルは、複数のデータ処理レーンを横断してデータを受信および処理することができる。本明細書に記載されたXPUは、入力ベクタにおける固有値をソート、例えば、識別しかつ入力ベクタにおける重複値をカウントするためにハードウェアが別々に構成される必要性を排除する。XPUは、ハードウェア回路の一部として実行することができ、スパースベクタまたは行列などのスパースデータ構造の高速化された処理と共に、密行列などの密なデータ構造の計算を補足する。
【0004】
開示の態様は、ハードウェア回路を提供する。ハードウェア回路は、複数のステージを含み、各々のステージは、クロスバーおよび2つ以上のセルを含む。ハードウェア回路は、それぞれのデータを上流の入力部から下流の送信先へ複数のステージの複数のセルおよび複数のクロスバーを介してストリーミングする複数のデータ処理レーンをさらに含む。ハードウェア回路は、複数のデータ処理レーンに沿って上流の入力部から入力データを受信し、第1のオペレーションを実行するための第1の命令を受信するように構成されている。第1の命令を受信することに応答して、各々のステージのために、ハードウェア回路は、そのステージのそれぞれの処理セルにそれぞれの第2の命令を送信するようにさらに構成されており、各々のセルは、それぞれのデータ処理レーンからの入力を受信することに応答してそれぞれの第2のオペレーションを実行するように構成されており、ハードウェア回路は、そのステージのためのそれぞれのクロスバーにそれぞれの第3の命令を送信するようにさらに構成されており、クロスバーは、複数のデータ処理レーンに沿ってそのステージの各々のセルから次のステージのセルへの出力を置換するように構成されている。ハードウェア回路は、また、複数のデータ処理レーンおよびそれぞれの第2のオペレーションを実行するように構成された複数のセルに沿って、受信された入力データを処理することによって第1のオペレーションを実行するように構成されている。
【0005】
一例において、各々のセルは、セルを通過するそれぞれのデータ処理レーンからのそれぞれの第1の入力オペランドと、セルの上流のステージのそれぞれのクロスバーからのそれぞれの第2の入力オペランドとを受信するように構成されている。別の例において、複数のデータ処理レーンのデータの下流の送信先は、ベクタ処理ユニットであり、ベクタ処理ユニットは、ハードウェア回路の出力データに単一命令複数データベクタオペレーションを実行するように構成されている。
【0006】
さらに別の例において、セルの各々は、1つまたは複数の受信された命令に応答して複数の所定のプリミティブ操作のうちの1つまたは複数を実行するように構成されている。ハードウェア回路は、複数の制御セルをさらに含む。それぞれの第2の命令をそれぞれの処理セルへ送信する際に、ハードウェア回路は、各々の制御セルによって、第1の命令によって指定された第1のオペレーションに基づいて各々の処理セルへのそれぞれの制御信号を生成および送信するように構成されている。さらに別の例において、各々の制御セルによってそれぞれの制御信号を生成および送信する際に、ハードウェア回路は、処理セルが存在するステージまたは処理セルを通過するデータ処理レーンのうちの少なくとも1つに基づいて、各々の処理セルに、それぞれの算術演算、比較演算およびバイパス演算のうちの1つを実行させるためのそれぞれの制御信号を生成するように構成されている。さらに別の例において、複数のセルおよび複数のクロスバーは、複数のステージおよび複数のデータ処理レーンを横断して、接続されたセルの処理ネットワークを形成しており、接続されたセルの処理ネットワークは、入力データを受信し、入力データに第1のオペレーションを実行することに従ってそれぞれの出力データを生成するように構成されている。さらに別の例において、接続されたセルの処理ネットワークは、組み合わされたベクタソートおよび重複カウントオペレーションを実行するように構成されている。組み合わされたオペレーションは、処理ネットワークが、要素の入力ベクタを受信するステップと、処理ネットワークが、出力として、入力ベクタにおける重複要素のソートされた出力ベクタおよびカウントを指定するデータを生成するステップと、を含む。
【0007】
さらに別の例において、入力データは、スパースベクタデータを含み、それぞれの第2の命令およびそれぞれの第3の命令を送信した後、ハードウェア回路は、ベクタスキャン、ベクタ和、ベクタソートまたはベクタ重複カウントのうちの1つを実行するように構成されている。
【0008】
開示の別の態様は、ハードウェア回路を含むシステムを提供し、ハードウェア回路は、複数のステージを含み、各々のステージは、クロスバーおよび2つ以上のセルを含み、ハードウェア回路は、それぞれのデータを上流の入力部から下流の送信先へ複数のステージの複数のセルおよび複数のクロスバーを介してストリーミングする複数のデータ処理レーンを含む。ハードウェア回路は、複数のデータ処理レーンに沿って上流の入力部から入力データを受信し、第1のオペレーションを実行するための第1の命令を受信するように構成されている。ハードウェア回路は、第1の命令を受信することに応答して、各々のステージのために、そのステージのそれぞれの処理セルにそれぞれの第2の命令を送信するようにさらに構成されており、各々のセルは、それぞれのデータ処理レーンからの入力を受信することに応答してそれぞれの第2のオペレーションを実行し、そのステージのためのそれぞれのクロスバーにそれぞれの第3の命令を送信するように構成されており、クロスバーは、複数のデータ処理レーンに沿ってそのステージの各々のセルから次のステージのセルへの出力を置換するように構成されている。ハードウェア回路は、また、複数のデータ処理レーンおよびそれぞれの第2のオペレーションを実行するように構成された複数のセルに沿って、受信された入力データを処理することによって第1のオペレーションを実行するように構成されている。
【0009】
一例において、各々のセルは、セルを通過するそれぞれのデータ処理レーンからのそれぞれの第1の入力オペランドと、セルの上流のステージのそれぞれのクロスバーからのそれぞれの第2の入力オペランドとを受信するように構成されている。別の例において、複数のデータ処理レーンのデータの下流の送信先は、ベクタ処理ユニットであり、ベクタ処理ユニットは、ハードウェア回路の出力データに単一命令複数データベクタオペレーションを実行するように構成されている。
【0010】
さらに別の例において、セルの各々は、1つまたは複数の受信された命令に応答して複数の所定のプリミティブ操作のうちの1つまたは複数を実行するように構成されている。ハードウェア回路は、複数の制御セルをさらに含む。それぞれの第2の命令をそれぞれの処理セルへ送信する際に、ハードウェア回路は、各々の制御セルによって、第1の命令によって指定された第1のオペレーションに基づいて各々の処理セルへのそれぞれの制御信号を生成および送信するように構成されている。さらに別の例において、各々の制御セルによってそれぞれの制御信号を生成および送信する際に、ハードウェア回路は、処理セルが存在するステージまたは処理セルを通過するデータ処理レーンのうちの少なくとも1つに基づいて、各々の処理セルに、それぞれの算術演算、比較演算およびバイパス演算のうちの1つを実行させるためのそれぞれの制御信号を生成するように構成されている。さらに別の例において、複数のセルおよび複数のクロスバーは、複数のステージおよび複数のデータ処理レーンを横断して、接続されたセルの処理ネットワークを形成しており、接続されたセルの処理ネットワークは、入力データを受信し、入力データに第1のオペレーションを実行することに従ってそれぞれの出力データを生成するように構成されている。さらに別の例において、接続されたセルの処理ネットワークは、組み合わされたベクタソートおよび重複カウントオペレーションを実行するように構成されており、組み合わされたオペレーションは、処理ネットワークが、要素の入力ベクタを受信するステップと、処理ネットワークが、出力として、入力ベクタにおける重複要素のソートされた出力ベクタおよびカウントを指定するデータを生成するステップと、を含む。
【0011】
さらに別の例において、入力データは、スパースベクタデータを含み、それぞれの第2の命令およびそれぞれの第3の命令を送信した後、ハードウェア回路は、ベクタスキャン、ベクタ和、ベクタソートまたはベクタ重複カウントのうちの1つを実行するように構成されている。
【0012】
開示のさらに別の態様は、コンピュータが実行する方法を提供する。方法は、複数のステージを含み、各々のステージは、クロスバーおよび2つ以上のセルを含み、それぞれのデータを上流の入力部から下流の送信先へ複数のステージの複数のセルおよび複数のクロスバーを介してストリーミングする複数のデータ処理レーンを含む、ハードウェア回路が、複数のデータ処理レーンに沿って上流の入力部から入力データおよび第1のオペレーションを実行するための第1の命令を受信するステップを含む。方法は、さらに、第1の命令を受信することに応答して、各々のステージのために、ハードウェア回路が、そのステージのそれぞれの処理セルにそれぞれの第2の命令を送信するステップを含み、各々のセルは、それぞれのデータ処理レーンからの入力を受信することに応答してそれぞれの第2のオペレーションを実行するように構成されており、方法は、ハードウェア回路が、そのステージのためのそれぞれのクロスバーにそれぞれの第3の命令を送信するステップを含み、クロスバーは、複数のデータ処理レーンに沿ってそのステージの各々のセルから次のステージのセルへの出力を置換するように構成されている。方法は、また、ハードウェア回路が、複数のデータ処理レーンおよびそれぞれの第2のオペレーションを実行するように構成された複数のセルに沿って、受信された入力データを処理することによって第1のオペレーションを実行するステップを含む。
【0013】
一例において、各々のセルは、セルを通過するそれぞれのデータ処理レーンからのそれぞれの第1の入力オペランドと、セルの上流のステージのそれぞれのクロスバーからのそれぞれの第2の入力オペランドとを受信するように構成されている。別の例において、複数のデータ処理レーンのデータの下流の送信先は、ベクタ処理ユニットであり、ベクタ処理ユニットは、ハードウェア回路の出力データに単一命令複数データベクタオペレーションを実行するように構成されている。
【0014】
さらに別の例において、セルの各々は、1つまたは複数の受信された命令に応答して複数の所定のプリミティブ操作のうちの1つまたは複数を実行するように構成されている。ハードウェア回路は、複数の制御セルをさらに含む。それぞれの第2の命令をそれぞれの処理セルへ送信するステップは、各々の制御セルによって、第1の命令によって指定された第1のオペレーションに基づいて各々の処理セルへのそれぞれの制御信号を生成および送信するステップを含む。
【図面の簡単な説明】
【0015】
【
図1】開示の態様によるクロスレーン処理ユニット(XPU)を実行する例示的なハードウェア回路のブロック図である。
【
図2】開示の態様によるXPUを実行する例示的なタイルのブロック図である。
【
図3】開示の態様による例示的なXPUのブロック図である。
【
図4】開示の態様による例示的なXPU処理セルおよび対応する制御セルのブロック図である。
【
図5】開示の態様によるXPUによって実行されるベクタスキャンオペレーションのための例示的なXPU構成のブロック図である。
【
図6】開示の態様によるXPUによって実行されるベクタソートおよびベクタ重複カウントオペレーションのための例示的なXPU構成のブロック図である。
【
図7】開示の態様による奇偶マージネットワークおよび値シャッフルネットワークを含むように構成された例示的なXPUのブロック図である。
【
図8A】開示の態様による組み合わされたマージソートおよび重複カウントを実行するための奇偶マージソートネットワークの例示的なXPU構成の流れ図である。
【
図8B】開示の態様によるXPUの奇偶マージネットワーク800の例示的なステージ1を示す図である。
【
図8C】開示の態様によるXPUの奇偶マージネットワークの例示的なステージ2を示す図である。
【
図8D】開示の態様によるXPUの奇偶マージネットワークの例示的なステージ3を示す図である。
【
図8E】開示の態様によるXPUの奇偶マージネットワークの例示的なステージ4を示す図である。
【
図8F】開示の態様によるXPUの奇偶マージネットワークの例示的なステージ5を示す図である。
【
図8G】開示の態様によるXPUの奇偶マージネットワークの例示的なステージ6を示す図である。
【
図8H】開示の態様によるXPUの奇偶マージネットワークの例示的な値シャッフルネットワークを示す図である。
【
図9】開示の態様によるXPUにおける合成オペレーションを実行するための例示的なプロセスのフローチャートである。
【
図10】開示の態様によるXPUへの入力ベクタのための重複カウントをソートおよび生成するための例示的なプロセスのフローチャートである。
【
図11】開示の態様によるハードウェア回路を実行するための例示的な環境のブロック図である。
【発明を実施するための形態】
【0016】
詳細な説明
概略
開示の態様は、プロセッサの複数のデータ処理レーンを横断してデータ依存オペレーションを実行するためのクロスレーン処理ユニット(XPU)を対象とする。各々のデータ依存オペレーションのための物理的に製造された特定オペレーション向け回路を実行するのではなく、XPUは、処理セルによって実行される個々のオペレーションを構成し、XPUにおいて積層されたネットワークとしてクロスバーを配置することにより、入力信号に応答して異なるオペレーションを実行するように構成することができる。XPUは、複数のSIMDデータ処理レーンの値を横断して操作する。XPUは、SIMD並列処理のために構成されたコプロセッサの一部として実行することができる。XPUを実行するコプロセッサは、データ依存オペレーションを実行するように構成することができる。
【0017】
「入力依存オペレーション」とも呼ばれるデータ依存オペレーションは、オペレーションを実行するための計算作業の量が前もって知られておらず、データの性質に依存するオペレーションである。計算作業は、例えば、データ依存オペレーションを実行するために必要とされるオペレーションまたは処理サイクルの数において測定することができる。例示的なデータ依存オペレーションは、ベクタソーティングのためのオペレーション、入力ベクタにおいて固有値を識別するためのオペレーション、ベクタ内の重複値をカウントするためのオペレーション、および変化する長さのベクタの形状またはサイズを操作するためのオペレーションを含む。少なくとも、異なる入力において同じタイプのオペレーションを実行するためのランダムメモリアクセスパターンにおける違いにより、データ依存オペレーションは不規則である。その結果、データ依存オペレーションは、その形状または程度またはスパース性などの入力データの性質に基づいて計算作業が変化しないその他のタイプのオペレーションとは逆に、性能を最適化することが困難である。
【0018】
データ依存オペレーションは、スパースデータにおいて実行されるオペレーションを含む。データ構造のスパース性は、その非空要素対空要素の比の尺度である。データ構造に応じて、空要素はゼロ、要素のための値の不在を示す予約語であってよいか、または入力としてのデータ構造によって実行されるオペレーションに有意ではなく寄与すると見なされるほど小さい値を有してよい。データ構造は、それが、非空要素よりも多くの空要素を有するならばスパースである。幾つかのデータ構造は、多かれ少なかれ他よりもスパースであることができる。
【0019】
開示の態様は、処理パイプラインにおいて下流のコプロセッサへデータを送る前にまずスパースデータを処理するためのXPUが、XPUを有さずに前に可能であるよりも効率的な計算のためのより広い作業負荷を可能にすることを提供する。
【0020】
XPUは、様々なデータ依存オペレーションをハンドリングすることができるので、処理パイプラインおよび対応するプロセッサは、既存のSIMDアーキテクチャにおいて処理するための予め定義する入力データの制限なしに設計することができる。XPUなしでは、既存のSIMDアーキテクチャは、特徴のスパース集合から機械学習モデルへの埋め込み生成など、データ依存オペレーションを効率的に高速化することはできない。
【0021】
例示的なデータ依存オペレーションは、入力訓練例のための埋め込みを生成することを含む。埋め込みは、埋め込みよりも高い次元性を有するベクタまたは入力からマッピングされた幾つかのその他のデータ構造であることができる。埋め込み生成は、パイプラインに従って処理される作業負荷の一部として実行することができる。他の例として、XPUは、ベクタスキャッタまたは収集オペレーション、セグメント合計を実行してよい、および/またはスパース特徴量テンソルをパーティショニングしてよい。本明細書に記載されたXPUは、SIMD並列処理パラダイムに従って構築されるベクタ処理ユニットなど、プロセッサの他の構成要素または接続された構成要素への相補的な処理ユニットであることができる。1つまたは複数のXPUは、より大きなプロセッサのそれぞれのプロセッサコアにおいて接続することができ、それ自体は、ニューラルネットワークを訓練するなど、所定の作業負荷の性能を高速化するためのその他の構成要素を含んでよい。
【0022】
さらに、XPUは、所定のタイプのデータ依存オペレーションを実行することに限定されず、したがって、プロセッサは、複数の異なるパイプラインのためのその他のタイプの処理ユニットを補足するためにXPUを含むように設計することができる。XPUは、作業負荷ごとに構成することができるので、特殊化された回路がスパースデータの計算のための相補的なユニットとしてプロセッサ上に物理的に製造されるその他のアプローチに対して、XPUの物理的フットプリントが減じられる。XPUの機能性は、ホストプロセッサの既存の命令セットに対する命令セットまたは拡張子の使用を介して拡張することもでき、パイプラインデータが変化を受け取るときに異なるデータ依存オペレーションの適応性をさらに改善する。命令は、XPUの個々の処理セルおよびクロスバーを構成するための命令を翻訳することに責任を負うXPUの構成要素への信号として提供することができる。XPUは、XPUを実行するハードウェア回路のための対応するコンパイラによってコンパイルされたプログラムを使用して構成することができる。
【0023】
XPUは、個々の処理セルのネットワークを含み、各々のセルは、処理セルの間のクロスバー接続を介して1つまたは複数のデータ処理レーンを通過するデータを処理する。各々のデータ処理レーンは、処理中にデータを一時的に記憶するための1つまたは複数のレジスタを含むことができる。各々の処理セルは、オペランドの複数のセットにおいて1つまたは複数のプリミティブ操作を実行するように構成されている。オペランドの第1のセットは、処理セルによって共有されるプロセッサのデータ処理レーンからの入力として提供される。オペランドの第2のセットは、XPUの複数のデータ処理レーンを横断してデータ伝送を調整するように構成されたクロスバーから提供される。
【0024】
XPUは、多数のパイプラインステージに分割することができ、各々のステージは、クロスバーと、1つまたは複数の処理セルと、各々の処理セルのための対応する制御セルとを含む。ステージの数は、例えば、XPUが現在の作業負荷のために実行するように構成されている合成オペレーションに基づいて変化することができる。
【0025】
XPUは、処理要素およびクロスバーの積層されたネットワークのパイプラインステージを横断して複数のプリミティブ操作を実行することによって合成オペレーションを実行する。合成オペレーションは、出力を生成するためにXPUによって入力に実行されるオペレーションである。プリミティブ操作は、XPUの個々の処理セルが実行するように構成されているオペレーションであり、これらは、XPUによって実行されると、XPUに合成オペレーションを実行させる。合成オペレーションを実行することは、他の合成オペレーションを実行することを必要とする場合がある。例えば、ベクタソートを実行するために、XPUは、プレフィックス和、複数のプリミティブ操作から成る別のオペレーションを実行してよい。例示的なプリミティブ操作は、比較、算術、または入力データをバイパスするためのオペレーションを含む。XPUは、XPUのための複数のパイプラインステージのうちの1つに従って配置された複数の個々の処理セルおよびクロスバーの各々を構成することによって合成オペレーションを実行する。
【0026】
XPUの各々のステージにおいて実行されるプリミティブ操作は、プログラムで定義することができ、作業負荷ごとに変化してよい。処理セルが実行するように構成されたプリミティブ操作は、処理セルのためのそれぞれの制御セルによって受信される1つまたは複数の制御信号または命令によって決定される。処理セルによって実行される正確なプリミティブ操作は、例えば、XPUが実行するように現在構成されている合成オペレーションに依存することができる。その他の例において、XPUの異なるレーンまたは異なるステージにおける処理セルは、1つまたは複数の所定のプリミティブ操作を常に実行するように構成することができる。XPUが出力を生成した後、出力は、複数のデータ処理レーンに沿って、XPUを実行するプロセッサの別の処理ユニットまたはメモリユニットへ送られることができる。
【0027】
開示の態様は、入力ベクタを受信し、同じ積層されたネットワーク構成を使用して、ベクタにおける両方の固有値および各々の値のための重複の数を決定するように構成されたXPUを提供する。XPUは、ベクタソートを実行することができ、これは、キーによってソートされた、入力ベクタのキー-値タプルのインプレースの安定したソートである。ベクタ重複カウントは、入力ベクタのキー-値タプルの値のランニング重複カウントを戻す。ソートされたリストおよび重複カウントは、入力ベクタから非固有値を除去するために使用することができる。XPUは、本明細書に記載されているように、処理セルおよびクロスバーの同じ構成に従ってベクタソートおよび重複カウントの両方を実行するように構成されている。少なくとも、XPUは、固有値を識別するためにベクタソートを実行することと、与えられた入力ベクタのためのベクタ重複カウントを生成することとの間に再構成されなくてよいので、同じ構成を使用することによって、XPUは、両方の合成オペレーションをより効率的に実行することができる。XPUが実行するように構成されているその他の合成オペレーションは、スキャン、セグメント化されたスキャン、並列-プレフィックス和、ベクタパーティション、ベクタヒストグラム、ベクタコンパクト、ベクタ置換、ベクタ減少、ベクタシフト-インサート、ベクタ収集、ベクタスキャッタなどを含む。
【0028】
開示の態様は、以下の技術的利点を提供することができる。XPUを実行するハードウェア回路は、効率的に並列化可能ではない埋め込みクラス作業負荷およびその他のデータ依存オペレーションのためのよりフレキシブルでかつプログラム可能なハードウェアを提供することができる。XPUは、所定のオペレーションのみを効率的に実行するためにXPUが固定されることを要求することなく、作業負荷ごとに異なるクラスのデータ依存オペレーションのための高速化パスを提供する。本明細書に記載のようなプログラム可能なユニットを提供することによって、実行ハードウェア回路は、異なる作業負荷の要求に確実に適応することができ、並列化可能なデータ独立SIMDオペレーションを補足するが、これは、さもなければ、データ依存オペレーションを要求する作業負荷にとって非効率または非効果的であり得る。
【0029】
特定用途向け集積回路などのハードウェア回路は、スケールで作業負荷をさらに調整および分配するために異なる量のXPUで設計することができる。本明細書に記載されたXPUは、また、同じ構成を使用して、複数のオペレーションの効率的な実行を可能にし、処理時間および構成時間をさらに短縮する。例えば、XPUは、これらのオペレーションを高速化するためのXPUの別々の構成および/または特殊回路の別々のインスタンスの代わりに、ベクタソーティングおよびベクタ重複カウンティングの両方を実行するように構成することができる。
【0030】
例示的なシステム
図1は、開示の態様による、クロスレーン処理ユニット(XPU)101A~101Fを実行するハードウェア回路101のブロック図である。ハードウェア回路101は、コプロセッサ103、コプロセッサ104、高帯域幅メモリ107およびオンチップインターコネクト108を含むことができる。コプロセッサ103は1つまたは複数のタイル102A~102Fを含むことができ、各々のタイルはそれぞれのXPU101A~101Fを実行する。コプロセッサ103は、タイル102A~102Fを横断して入力および出力データをコーディネートするように構成されたタイルシーケンサ106を含むことができる。
【0031】
コプロセッサ103は、XPU102A~102Fを使用してデータ依存オペレーションを実行するために構成されている。
図2~
図4を参照して本明細書においてより詳細に説明されているように、XPU102A~102Fは、一連のデータ処理レーンに接続されており、各々のレーンはXPU102A~102Fを通じてデータをストリーミングする。ストリームデータは、オンチップメモリ105から検索されることができ、オンチップメモリ105は、メインメモリ、キャッシュ、または永続記憶装置、例えば、ソリッドステートまたはハードディスク記憶装置を含む、様々な異なるメモリデバイスのうちのいずれかであることができる。ストリームデータは、コプロセッサ104、コプロセッサ103および104のうちの一方または両方にサービスする高帯域幅メモリ107、ならびに/またはオンチップインターコネクト108を介してハードウェア回路101に接続された別のデータソースから検索されることもできる。
【0032】
コプロセッサ104は、行列-行列積、行列-ベクタ積などの、あるオペレーションの高速化のために構成することができる。幾つかの例において、コプロセッサ104は、ハードウェア回路101の残りとは異なるデバイス上にあり、オンチップインターコネクト108を介してハードウェア回路にデータを通信する。オンチップインターコネクト108は、様々な通信規格のうちのいずれか、例えば、PCIeに従ってデータバスまたはあらゆる形式のインターコネクトであることができる。
【0033】
ハードウェア回路101への例示的な入力は、テンソル表現入力データおよび/またはハードウェア回路101を使用して実行される機械学習モデルのモデルパラメータである。テンソルは、異なる次元の様々なその他の共通データ構造タイプを一般化するデータ構造である。テンソルは、ゼロまたはそれよりも多い要素を含むことができ、この要素は、整数、浮動小数点値、ブール値などの1つまたは複数の異なるデータタイプであることができる。各々のデータタイプ内で、データタイプは、所定のレベルの精度、例えば、8ビット、16ビット、または32ビットの整数または浮動小数点値に従ってパラメータ化することができる。テンソルの次元は、その「階数」と呼ばれる。階数ゼロのテンソルは、単一の要素であり、スカラーとも呼ばれる。階数1のテンソルは、ベクタとも呼ばれる。階数2のテンソルは、行列とも呼ばれる。ベクタおよび行列は、異なる階数を有するとも呼ぶことができる。例えば、階数2のベクタは行列と等価である。非ゼロ階数のテンソルは、1階数低いテンソルの集合として記述することができる。例えば、階数1のベクタは、スカラー値の集合であり、階数2の行列は、階数1のベクタの集合である。
【0034】
ハードウェア回路101は、少なくとも部分的にニューラルネットワークを訓練するための処理パイプラインを実行してよい。ニューラルネットワークは、受信された入力のための出力を予測するための非線形オペレーションの1つまたは複数の層を含む機械学習モデルである。入力層および出力層に加え、幾つかのニューラルネットワークは、1つまたは複数の隠れ層を含む。各々の隠れ層の出力は、ニューラルネットワークの別の隠れ層または出力層への入力であることができる。ニューラルネットワークの各々の層は、その層のための1つまたは複数のモデルパラメータのための値に従って、受信された入力からそれぞれの出力を生成することができる。モデルパラメータは、ニューラルネットワークに正確な出力を生成させるために訓練アルゴリズムを介して決定される重みまたはバイアスであることができる。特徴量は、機械学習モデルによって受信される入力例の測定可能なプロパティである。特徴量値は、それぞれの特徴量のための値であり、整数値であることができる。
【0035】
パイプラインは、入力訓練例のための埋め込みを生成することを含んでよい。埋め込みは、より少ないデータを用いて入力訓練例の特徴量を表すことができ、より効率的な処理を可能にする。異なる入力訓練例のための特徴量テンソルは、異なる程度のスパース性を有し、これは、対応する埋め込みを生成するために必要とされる計算作業の量に影響する。ハードウェア回路101は、訓練入力例を表す特徴量値のテンソルを受信し、特徴量テンソルよりも低い階数を有するテンソルとして埋め込みを生成するように構成することができる。
【0036】
埋め込みを生成するために、コプロセッサ103は、XPU102A~102Fにおける効率的なスパースデータ計算のための様々なデータ依存オペレーションを実行するように構成されている。これらのオペレーションは、スパースベクタをソートまたは合計すること、入力ベクタの内容を要約するためのオペレーション、およびスパース行列を1つのスパース行列記憶フォーマットから別のものに変換するためのオペレーションを含む。
【0037】
データ依存オペレーションの性能を高速化するための物理的な所定の回路の代わりに、XPU102A~102Fは、様々な異なるデータ依存オペレーションを実行するように構成、例えば、プログラムすることができる。コプロセッサ103は、依然として相補的なコプロセッサ104に非常に効率的かつ並列化可能なオペレーションを実行させながら、スパースデータを処理する一般化されたサポートを可能にする。
【0038】
ハードウェア回路101は、様々な異なるタイプの処理ユニットのうちのいずれか、例えば、中央処理装置(CPU)、グラフィックスプロセシングユニット(GPU)、フィールドプログラマブルゲートアレイ(FPGA)、またはテンソルプロセシングユニット(TPU)などの特定用途向け集積回路(ASIC)であることができる。ハードウェア回路101は、コンピューティングデバイス上で実行されることができ、コンピューティングデバイス自体は、
図11を参照して本明細書において説明されているように、1つまたは複数のデバイスのシステムの一部であってよい。
【0039】
図2は、XPU101を実行する例示的なタイル102のブロック図である。XPU101はクロスレーン制御装置210に結合されている。クロスレーン制御装置210は、XPU101上のクロスレーン命令を許容するための制御の別々のスレッドを提供する。本明細書に記載されているように、XPUは、例えば1つまたは複数の制御信号を介して第1の命令を受信することができ、この第1の命令は、1つまたは複数の第2および第3の命令に変換され、第1の命令によって指定された合成オペレーションを実行するために、それぞれXPU101の処理セルおよびクロスバーへ提供されることができる。XPU101への命令は、制御信号上で搬送されることができ、この制御信号において、XPU101の処理セルおよびクロスバーは、対応するプリミティブ操作を実行するために解釈するように構成されている。例示的な命令は、命令セットアーキテクチャ(ISA)のオペコードであることができる。
【0040】
タイル102は、
図1を参照して説明されているように、オンチップインターコネクト108およびオンチップメモリ105からデータを受信することができる。XPUは、命令インターフェース224、例えば、タイルシーケンサ106からスカラーコア212またはスカラーコア220を介して命令を受信することもできる。タイル102のスキャッタ/ギャザー制御装置222は、受信データを受信し、どのデータがメモリ206においてメモリスケジューラ214を通過させられるかを制御することができる。メモリスケジューラ214は、データがどのように評価され、メモリ206から検索されるかを調整する。メモリ206は、タイル102にプライベートであり、他のタイルなど、タイル102に接続された他の構成要素によってアクセス不能である。アービタ204は、例えば、クロック-サイクルトゥクロック-サイクル式に、VPU202A~202Hのいずれがメモリ206にアクセスするかを管理するように構成されている。タイル102は、タイル102によって実行されるタスクのタスクキュー208を維持することができる。タイル102は、タイル102をそれぞれハードウェア回路101およびメモリ206のその他のタイルと同期化するためにタイル同期化フラグ218および/またはメモリフラグ216のレジスタを維持することもできる。
【0041】
ベクタ処理ユニット(VPU)202A~202Hは、XPU101とVPU202A~202Hとの間の実線によって示されているデータ処理レーンを介してXPU101に接続されている。XPU101とVPU202A~202Hとの間の破線は制御信号を表し、制御信号は、受信制御信号に対応する合成オペレーションを実行するようにXPU101を構成するためにXPU101における制御セルによって受信されることができる。ベクタ処理ユニットは、入力ベクタにおける効率的なオペレーションのために構成されている。一度にタイル102によって処理されるベクタの長さは、タイルによって実行されるVPUの数または幅に依存することができる。例えば、8つのVPU202A~202Hは、8ワイドである。VPU202A~202Hは、同じデータ処理レーンに沿ってデータを処理することができる。VPU202A~202Hは、メモリ206からの受信ベクタの要素についてスカラーオペレーションを実行するように構成することができる。VPU202A~202Hは、XPU101からデータを受信することができ、XPU101は、本明細書に説明されているように、各々のVPU202A~202Hによって実行されるように単にレーンに沿ってではなく、データ処理レーンを横断してデータを処理することができる。
【0042】
図3は、例示的なXPU300のブロック図である。XPU300は、処理セル301~309、クロスバー203~310および制御セル350を含む。制御セル350は、
図3のブロック図において斜線のブロックによって表されている。データは、データ処理レーン300A~300Hに沿って下から上へ流れ、ステージ1において始まり、ステージ6において終了する。ステージ1は、処理セル301およびクロスバー302を含む。ステージ2は、処理セル303およびクロスバー304を含む。ステージ3は、処理セル305およびクロスバー306を含む。ステージ4は、処理セル307およびクロスバー308を含む。ステージ5は、処理セル309およびクロスバー310を含む。ステージ6は、処理セル311およびクロスバー312を含む。異なる例において、XPUは、より多いまたはより少ないステージを含むことができる。XPUは、クロスバー399も含むことができる。
【0043】
説明のために、より早期のステージは、より後のステージに対して「上流」と考えられ、より後のステージは、より早期のステージに対して「下流」と考えられる。例えば、ステージ1はステージ5の上流にあり、ステージ4はステージ3の下流にある。
【0044】
XPUの各々のステージにおけるクロスバーは、クロスバーの現在の構成に従ってそれぞれのレーンから異なる他の処理レーンへ異なる入力値を置換するために構成されたあらゆるタイプの回路であることができる。クロスバーは、クロスバーと同じステージにおける各々の処理セルのための制御セルから1つまたは複数の制御信号を受信することができる。クロスバーは、固定されたパターンに従って同じステージにおける各々の処理セルから入力値を置換するように構成されている。パターンは、XPUが現在実行するように構成されている合成オペレーションに依存し、必ずしもクロスバーに全ての処理セル出力を置換させるわけではない。言い換えれば、幾つかの処理セル出力は、クロスバーをバイパスし、同じ処理レーンに沿って次のステージへ進んでよい。
【0045】
処理セルを構成するために、XPU300の各々の処理セルは、処理セルが存在するそれぞれの処理レーンに沿って1つまたは複数の制御信号を受信するように構成されているそれぞれの制御セル350を有する。
図4を参照してより詳細に説明されているように、処理セルは、様々な異なるプリミティブ操作を実行し、受信される制御信号または命令に従ってこれらのオペレーションを実行するための回路と共に構成されている。制御セルは、例えば、その対応する処理セルがどのプリミティブ操作を実行するかを決定するために制御セルによって解釈可能な1つまたは複数の信号として、データ処理レーンに沿って命令を受信する。制御セルは、制御信号を処理セルへ転送するか、または受信命令または信号を処理し、処理セルが、指定されたプリミティブ操作の実行を有効化または無効化するために受信するように構成された生成された制御信号を転送することができる。
【0046】
処理セルは、処理セルのためのそれぞれの処理レーンから受信される入力データをバイパスするように構成することもできる。バイパスされる場合、受信された入力は、修正なく、処理セルから、処理セルと同じステージにおけるクロスバーへ送られる。バイパスする処理セルによって前のステージのクロスバーから受信される入力は、ゼロに結び付けられるかまたは無視することができる。バイパスする処理セルの実際の挙動は、セルが存在するパイプラインステージ、および/または処理セルが存在する処理レーンに依存することができる。
図4は、比較演算、算術演算および/またはバイパスプリミティブ操作を実行するように構成された例示的な処理セルを示す。
【0047】
XPU300は、XPU300を実行するそのプロセッサが適用および実行するように構成されている、命令セットアーキテクチャの一部または命令セットアーキテクチャへの拡張子として定義される命令を受信するように構成することができる。命令は、XPUおよび個々の処理セルがそれぞれ対応するオペレーションとして実行するように構成されている異なる合成オペレーションおよび/またはプリミティブ操作を指定することができる。制御セル350は、命令セットの一部または拡張子として定義された命令を表すデータを受信するようにおよび/または対応する処理セルを構成するために命令を制御信号に変換するように構成されている。例えば、制御セル350は、XPU300を実行するプロセッサまたはハードウェア回路に対応する命令セットの、XPUが実行するように構成されているオペレーションのためのオペコード、符号語として信号を受信することができる。XPU300が、ベクタソーティングまたはベクタ重複カウンティングなどの合成オペレーションを実行するための命令を受信すると、XPU300は、XPUに命令された合成オペレーションを実行させる所定のそれぞれのプリミティブ操作を実行するように各々の処理セルを構成することができる。
【0048】
XPUによって実行されるオペレーションは、クロックサイクルによって同期化することができる。例えば、各々のステージにおいて処理セルによって実行されるオペレーションは、1つまたは複数のサイクルにおいて実行することができる。例えば、各々のステージにおけるオペレーションは、単一のサイクルにおいて実行することができる。XPUによって実行される異なる合成オペレーションは、実行するために異なる量のクロックサイクルを採用することができる。例えば、ベクタソーティングは、6つのサイクルにおけるXPU、4つのサイクルにおけるベクタプレフィックス合計、および2つのサイクルにおけるベクタコンパクトによって実行することができる。
【0049】
図4に関してより詳細に説明されているように、処理セルは、浮動小数点値および符号付きまたは符号なし整数を含む、異なるタイプのオペランドの間の加算など、算術演算を実行するために構成することができる。加算などの算術演算は、
図5を参照して本明細書に説明されているように、スキャニングオペレーションのためにXPUによって実行される合成オペレーションの一部を形成していてよい。
【0050】
例示的な命令は、XPUをリセットし、XPUによって実行されるクロック同期ならびに合成オペレーションおよびプリミティブ操作についての情報を検索するための命令を含む。その他の命令は、各々の処理レーンからオペランド、マスク値および/またはセグメントマーカのうちの1つまたは複数を検索するための命令を含む。命令は、XPUによってサポートされる様々な異なる合成オペレーションの各々を指定する制御情報と共にXPUによって記憶されているデータ構造にアクセスするための命令を含むことができる。さらに別の例において、命令は、XPUにデータを様々なレジスタ、ラッチまたはフリップフロップにプッシュさせ、前述の内容が有効であるかどうかを決定するための命令を含むことができる。プッシュされるデータは、例えば、合成オペレーションを実行することの一部として処理される値、および/またはマスク値を含むことができる。
【0051】
構成されたXPU300は、特定の合成オペレーションを実行するための処理ネットワークを実行すると言われる。例えば、XPU300は、以下のように構成することができる48のXPUセルを含む。すなわち、18のセルは算術演算のために構成することができ、38のセルは入力値を比較するために構成されており(1つのセルは、算術演算および比較演算の両方のために構成されていてよい)、10のセルは入力をバイパスするように構成されている。新たな命令に応答して、XPU300は、異なる合成オペレーションを実行するために、新たな処理ネットワークと共にそれ自体を再構成することができる。
【0052】
XPUは、命令セットまたは拡張子において異なる命令として指定することができる、様々な異なる操作モードにおいて操作するように構成することができる。異なる操作モードは、ソートし、重複をカウントし、固有値を識別し、スキャンし、データをパーティショニングし、および/またはXPUへ入力されるデータにおける固有値を識別するための、異なる合成オペレーションを含むことができる。さらに命令は、例えば、ソーティングまたはスキャニングのための符号なし整数比較、または浮動小数点加算を実行するための比較または算術演算のタイプを指定するオペランドを含むことができる。合成オペレーションを実行するための命令に対するその他のオペランドは、どの処理レーンから合成オペレーションの出力がXPU300から出現するかを指定することを含む。受信されるその他のオペランドは、例えば、データ処理レーンを横断してXPU300によって受信されるデータの複数のセグメントの各々をソートするために、入力データのセグメントにおいて合成オペレーションを実行するためのセグメントマーカを含むことができる。
【0053】
ベクタソートおよび/またはベクタ重複カウントを実行する場合、XPU300は、奇偶マージネットワークおよび値シャッフルネットワークを含むように構成されている。例示的なネットワーク構成は、示されており、
図4~
図8Gを参照して説明されている。ネットワーク構成は、XPUの1つまたは複数のステージを含み、各々のステージのそれぞれのセルおよびクロスバーは、1つまたは複数のプリミティブ操作を実行するように構成されている。ベクタをソートした後、XPU300は、入力ベクタにおける非固有値を識別および除去することができ、固有値、例えば、処理された入力ベクタにおいて一度だけ出現する値のみを残す。
【0054】
XPU300は、レジスタファイル360Aおよび360Bを含むことができる。レジスタファイル360Aおよび360Bは、異なるステージ間のデータ処理レーン300A~300Hに結合され、データを記憶および検索するために使用することができる。例えば、幾つかのデータは、ステージ4における処理セル307の後にレジスタファイル360Bに記憶されてよいのに対し、XPU300によって出力されたデータはレジスタファイル360Aに記憶される。
【0055】
図4は、例示的なXPU処理セル400および対応する制御セル499のブロック図である。処理セル400は、制御信号に基づいて、本明細書に記載されているような多数のプリミティブ操作を実行するように構成することができる。制御信号は、XPUをプログラムするための命令セットの一部を形成するオペコードを表すことができる。
【0056】
XPU処理セル400は、XPU処理セルの可能な回路実行の一例である。異なる例において、XPU処理セル400は、異なるプリミティブ操作を実行するように構成された回路を実行するためのより多いまたはより少ない構成要素を含むことができる。幾つかの例において、XPU処理セル400は、プリミティブ操作のサブセットのためにのみ構成された回路を含んでよい。その他の例において、XPU処理セルは、順次または並列にプリミティブ操作の全てを実行するように構成された回路を含んでよい。
【0057】
各々の処理セルは、値の入力タプルを受信することもできる。パスされた値は、整数もしくは浮動小数点値などの個々の値、または整数もしくは浮動小数点値のタプルもしくはリストなどの値のグループであることができる。
【0058】
ソース入力は、x_source_1 402およびy_source_1 402、集合的に「ソース入力」を含む。ソース入力は、本明細書に記載されているように、XPUによって処理されるベクタの要素を含むことができる。ソース入力は、32ビット浮動小数点加算器(FP32 ADD)403、32ビット符号付き整数加算器(S32 ADD)404、32ビット浮動小数点比較器(FP32 405)、および32ビット符号付き整数比較器(U32 CMP)406のうちの1つまたは複数を通過することができる。加算器403、404は、ソース入力の合計を計算し、出力合計をマルチプレクサ407へ送ることができる。比較器405、406は、入力値を比較し、最大/最小値を出力として比較セレクタ492へ送る。
【0059】
比較セレクタ492は、比較器405、406の出力、およびマスク値x_mask444およびy_mask446を受信することができる。マスク値は、処理セル400によって受信された幾つかまたは全ての入力をマスキングするために、本明細書に記載された所定の合成オペレーションの一部として使用することができる。
【0060】
比較セレクタ492は、入力を選択し、入力をselection_output472としてマルチプレクサ制御装置440へ送る。比較セレクタ492は、比較器(CMP426)から出力を受信することもできる。比較器426は、レーン識別子x_lane_id422およびy_lane_id424を受信し、両者のうち大きい方を決定するためにレーン識別子を比較することができる。比較器426は、その出力をマルチプレクサ472、476、478および/または480へ送ることもできる。比較器426からの出力は、xレーンのためのレーン識別子がyレーンのためのレーン識別子よりも大きいかどうかを示すブール値(x_lane_id_greater_y_lane_id490と呼ばれる)であることができる。selection_output472は、
図8Aを参照して本明細書に記載されているように、比較セレクタ492の構成に基づいて決定することができる。
【0061】
マルチプレクサ407は、加算器403、404の合計、および/またはソース入力401、402を直接受信することができる(例えば、処理セル400がバイパスを実行するために構成されている場合)。マルチプレクサ407の出力は、レジスタ408に記憶され、出力として、y_source_1_out484としての処理セルへ送られることができる。マルチプレクサ407は、「x」データがソースされる出力レーン識別子を、out_lane_id_pre488として受信することもできる。
【0062】
マルチプレクサ472および476は、x_dup_count414およびy_dup_count416として、重複カウントを表す値を受信することができる。
図8Aを参照して本明細書に記載されているように、処理セル400は、例えば入力ベクタをソートしながら、入力ベクタの値の重複カウントを計算するように構成することができる。インクリメント値x_increment418およびy_increment420も、マルチプレクサ478および480によって受信されることができ、開示の態様に従ってかつ
図8Aを参照して本明細書に記載されたように、奇偶マージネットワークと共に重複カウントを実行する一部として使用される値である。
【0063】
値430、432、434および436は、レーンカウント計算機428へ送られる。レーンカウント計算機428は、入力レーンのより大きなレーンカウントを表す値(larger_lane_count430)、入力レーンのより小さなレーンカウントのための値(smaller_lane_count432)、インクリメント値418、420の大きい方の値(larger_lane_incr434)、およびインクリメント値418および420のうちの小さい方(smaller_lane_incr436)を使用して、入力データ処理レーンxおよびyを横断して重複値のカウントを計算することができる。レーンカウント計算機428の例示的な実行は、
図8Aおよび「MAX」セルを参照して本明細書に記載されている。
【0064】
XPU処理セル400は、処理セル400と同じステージのクロスバーへ送信される、複数の出力を生成することができる。レジスタ482は、出力値(y_source_2_out486)、例えば、処理レーンyからのバイパスされた入力値を保持することができる。マスク値444、446は、ロジカルOR回路442を通過することができ、その出力はレジスタ487に記憶することができる。処理セルは、y_mask_out482として処理セルのためのマスク値を出力することができる。
【0065】
マルチプレクサ448は、デフォルト値0、およびレーンカウント計算機438からのsmaller_lane_count432を受信し、インクリメント値(y_incr_out458)を出力することができる。マルチプレクサ448への出力は、レジスタ454に記憶することができる。マルチプレクサ452は、デフォルト値0、および重複カウント414、416を受信し、処理セル400のためのカウント値(y_count_out460)を出力することができる。マルチプレクサ452への出力は、レジスタ454に記憶することができる。マルチプレクサ456は、レーン識別子422および424を受信し、レーン識別子(y_lane_id_out462)を出力することができる。マルチプレクサ456への出力は、レジスタ458に記憶することができる。
【0066】
図4における破線は、処理セル400および制御セル499を通過した制御信号を示す。制御セル499は、例えばオペコード428として、命令を受信することができる。制御セル499は、命令を、例えば制御信号として、マルチプレクサ制御装置440およびレーンカウント計算機438へ送信する。マルチプレクサ制御装置440は、受信された命令に基づいて、マルチプレクサ407、448、452および456へ信号を送信するように構成されている。レーンカウント計算機438の出力も、制御セル499からの受信信号に基づく。制御セル499によってXPUセル400へ送信された命令は、XPUセル400のステージおよびレーンに依存することができる。
【0067】
マルチプレクサ407、448、452および456の各々は、マルチプレクサ制御装置440から、例えば、制御信号として受信された命令に従って構成することができる。受信された信号に応じて、マルチプレクサ407、448、452および456は、受信された入力とは異なる値を出力する。
【0068】
処理セル400に命令を送信することに加え、制御セル499は、オペコード428を下流へ(opcode_out468として)送り、制御セル499と同じステージにおける下流のクロスバーへ命令を(xbar_ctrl_out470として)送信することもできる。クロスバーへ送信された命令により、クロスバーは、受信された入力を固定パターンに従って置換することができる。XPUの各々の制御セルは、異なるオペコードを受信し、本明細書に記載されているように1つまたは複数のプリミティブ操作を実行するために対応する処理セルを構成してよい。構成された処理セルおよびクロスバーは、合成オペレーションを実行するための処理ネットワークを形成し、その例は、
図5および
図6を参照して本明細書に提供されている。
【0069】
レジスタが
図4に記載されているが、幾つかの例において、処理セル400は、例えばマルチプレクサまたは算術もしくは比較回路から、データを一時的に記憶するための様々な回路のいずれかを使用することができる。レジスタは、1つまたは複数のフリップフロップまたはラッチを含むことができる。
【0070】
例示的な方法
ベクタスキャンおよびベクタセグメント化スキャン
図5は、開示の態様による、XPUによって実行されるベクタスキャンオペレーションのための例示的なXPU構成500のブロック図である。ベクタスキャンは、入力ベクタにおける要素のローリングサムである。構成500を使用して構成されているときのXPUは、ベクタを出力することができ、このベクタにおいて、各々の要素は、要素の指数までの入力ベクタにおける要素のローリングサムである。例えば、出力ベクタの第1の要素は、入力ベクタの第1の要素と等しい。出力ベクタの第2の要素は、入力ベクタの第1の要素と入力ベクタの第2の要素との合計と等しい。出力ベクタの第3の要素は、入力ベクタの第1、第2および第3の要素の合計と等しい、などである。
【0071】
構成500は、ベクタスキャンに加え、ベクタセグメント化スキャンのためにも使用することができる。構成500は、ベクタのセグメントを決定するためにマスクビットのセットを受信する。XPUセルは、マスクビットを受信し、XPUセルが、マスクビットを受け取っているそれぞれのXPUセルの値と同じセグメントにおいて入力要素を受信するかどうかに応じて、下流のXPUセルへデータをバイパスまたは変換するように構成されている。
【0072】
構成500は、前のステージの異なるレーンからの、
図4に示されているような出力タプル、例えば、y_source_1_out、y_mask_out、y_incr_out、y_count_outおよびy_lane_id_outを、現在のレーンにおける入力タプル、例えば、x_source_1、x_mask、x_incr、x_countおよびx_lane_idに置換するクロスバーを示す。
図5において、点線は、処理レーン500A~500Hをストリーミングされるデータを表す。実線は、構成500におけるステージ間でデータがどのように置換されるかを表す。構成500は、4サイクル構成である。5以上のクロスバーを有するXPUにおいて実行される場合、構成500の一部として使用されないステージにおけるクロスバーは、各々のレーンを通じてデータをバイパスするように構成することができる。
【0073】
ステージ505において始まり、レーン500Aにおける入力要素はバイパスされ、レーン500A~500Gにおける各々の要素はそれぞれのセル501B~501Hへ送られる。セル501Aは、入力要素をレーン500Aから次のステージへバイパスする。セル501B~501Hは、シフトされたレーンからの入力要素と、各々のそれぞれのセルが存在するレーンの入力要素とを合計する。各々のセル501A~501Hの出力は下流へ送られる。
【0074】
ステージ510において、レーン500A~500Eの入力要素は、クロスバー505Aから、入力要素のレーンから2つ離れたそれぞれのレーンへ置換される。セル502Aおよび502Bは、次のステージの下流の受信された入力をバイパスする。セル502C~502Gは、それらのそれぞれのレーンの入力要素を、それぞれの置換された入力要素と合計する。セル502A~502Hの各々の出力は下流へ送られる。
【0075】
ステージ515において、セル503A~503Cは、それらの入力を、各々のセルのそれぞれのレーンにおけるレジスタ523へバイパスする。セル503D~503Hは、シフトされた入力を、クロスバー510Aから、およびそれぞれのレーンに対して3つ離れたレーンから受信する。セル503D~503Hは、それらのそれぞれのレーンの入力要素と、受信されたシフトされた入力との合計を生成する。セル503A~503Hの各々の出力は、下流へレジスタ523内に送られ、その後、XPUの出力ベクタの一部として送られる。
【0076】
ステージ520において、ステージ515からの出力データは、XPUの下流の出力として送られる前に、レジスタファイル523に一時的に記憶することができる。
【0077】
ベクタソートおよびベクタ重複カウント
図6は、開示の態様による、XPUによって実行されるベクタソートおよびベクタ重複カウントオペレーションのための例示的なXPU構成600のブロック図である。構成600は、6つのステージ605~630を有する。
【0078】
ベクタソートを実行するために、XPUは、キーと値とのタプルを受信することができる。例示的な入力は:
キー={5, 5, 10, 1, 512, 8, 1023, 650}
値 ={a, b, c, d, e, f, g, h}
であることができる。
【0079】
上記の例示的な入力によってベクタソートを実行するためにXPUによって出力される例は:
キー={1, 5, 5, 8, 10, 512, 650, 1023}
値 ={d, a, b, f, c, e, h, g}
である。結合のイベントにおいて、より大きい数のVPUレーンからソースされたキーは、結合された値のうちの大きい方として選択される。例えば、レーン0と1との間の結合のイベントにおいて、レーン1からのキーは、より大きな数のVPUレーンから来ているものとして選択される。
【0080】
ベクタ重複カウントを実行するために、XPUは、値のベクタを受信し、出力として、各々の要素が、独特の値がその要素までに入力ベクタに出現する回数に対応するベクタを生成することができる。
【0081】
例示的な入力は:
値={10, 5, 10, 5, 10, 5, 5, 10}
であることができる。
【0082】
例示的な出力は:
カウント={1, 1, 2, 2, 3, 3, 4, 4}
であることができる。
【0083】
図7および
図8A~
図8Hを参照してより詳細に記載されているように、各々のステージにおいて、処理セルは、MINまたはMAXセルとして構成されており、奇偶マージソートネットワークおよび値シャッフルネットワークの一部を形成している。構成600は、6ステージ構成である。構成を実行するXPUが、7以上のクロスバーを有する場合、残りのクロスバーは、入力要素をバイパスするように設定することができる。開示の態様によれば、同じXPU構成600は、各々のベクタのための重複要素のカウントを生成しながらベクタ要素をソートすることを可能にする。ベクタソーティングおよび重複カウンティングのために構成されたXPUのセルおよびクロスバーを横断するデータのストリーミングは、
図7および
図8A~
図8Hを参照して記載されている。
【0084】
結果として生じる出力ベクタは、値の一意でないインスタンスを除去するためにさらに処理されることができる。重複カウントおよびソートされたリストが与えられている場合、XPUは、リストを通じて反復し、一意でない値を除去することができ、これにより、以下のような例示的な出力を生成する:
固有値={1,2,3,4}
XPU構成600は、ソーティングおよび重複カウンティングの両方を可能にするので、XPUは、入力ベクタに存在する各々の値の単一のインスタンスのみを含む「一意にされた」出力ベクタをさらに生成することができる。
【0085】
図7は、奇偶マージネットワーク705および値シャッフルネットワーク710を含むように構成された例示的なXPU700のブロック図である。キーおよび値のタプルは、VPUレーン700A~700Nを通過し、奇偶マージネットワーク705に入り、そこでキーがソートされる。XPU700は、8つのデータ処理レーンを含むが、その他の例において、XPU700は、より少ないまたはより多いデータ処理レーン、例えば、2のべき乗に等しい複数のデータ処理レーンを有してよい。これらの例において、奇偶マージネットワーク705および値シャッフルネットワーク710は、一般性の損失なく、対応して拡張または凝縮される。
【0086】
値は、ソートされたネットワーク705を通る点線によって示された、ソートされたネットワーク705におけるキーと共に移動するのではなく、代わりに、それらの対応するキーと共に再配置されるために値シャッフルネットワーク710へ直接通過する。入力ベクタの要素は、キー-値タプルとして記述されているが、整数値、浮動小数点値などの、比較することができるあらゆるタイプのデータをXPUへの入力として受信することができることが理解される。
【0087】
幾つかの例において、バッチャーの奇偶マージソートを奇偶マージネットワーク705において実行することができる。
図8Aを参照して本明細書に記載されているように、奇偶マージネットワークは、入力キー-値タプルを処理しかつキーによってタプルをソートするための複数のステージを含むことができる。
【0088】
タプルがキーによってソートされた後、値シャッフルネットワーク710は、値を、それらの関連するキーに対応するレーンにシャッフルする。値シャッフルネットワーク710は、8×8 32ビットクロスバーであることができる。クロスバーへの入力は、32ビット値およびレーン識別子である。値シャッフルネットワーク710は、レーン識別子に応じて、複数のモードをサポートすることができる。例えば、値シャッフルネットワーク710は、ソースレーン識別子が提供されるときに、対応するソースレーンから32ビット値をルーティングするように構成されている。別のモードにおいて、送信先レーン識別子は、32ビット値を適切な出力レーンにルーティングするために使用される。ベクタソーティングのために、本明細書に記載されているように、ベクタ重複カウンティングにある間、値シャッフルネットワーク710はソースレーン識別子モードに設定されることができ、値シャッフルネットワーク710は送信先レーン識別子モードに設定される。ベクタ重複カウンティングのために、値シャッフルネットワーク710は、それらの対応する値を有するカウント値をシャッフルする。オペレーションモードは、XPUの制御セルによって提供される1つまたは複数の信号搬送命令として指定されることができる。
【0089】
図8Aは、組み合わされたマージソートおよび重複カウントを実行するための奇偶マージソートネットワーク705の例示的なXPU構成800の流れ図である。例示的なXPUは、0~7にラベル付けされた8つの処理レーンを有する。奇偶マージソートネットワーク705は6つのステージを有する。6つのステージは、ステージ1 801A(1×1奇偶マージ)、ステージ2 801B(2×2マージ)、ステージ3 801C(2×2奇偶マージ)、ステージ4 801D(マージフェーズ1)、ステージ5 801E(マージフェーズ2)、およびステージ6(奇偶マージ)である(それぞれ、「ステージ1」、「ステージ2」、「ステージ3」、「ステージ4」、「ステージ5」および「ステージ6」)。
【0090】
各々のステージにおいて、XPUの処理セルは、2つの入力オペランドの最小値を決定し、より小さなオペランドが受信されたデータ処理レーンのレーン識別子を有するより小さなオペランドを戻すために、プリミティブ操作を実行するように構成されている。
図8A~
図8Hに示された各々の矢印において、XPUは、入力オペランドを比較するために構成された処理セルを含む。2つの入力オペランドの最小値を決定するために構成された処理セルはMINセルと呼ばれるのに対し、2つの入力オペランドの最大値を決定するために構成された処理セル(while a processing cell)。
【0091】
MINセルの例示的な疑似コード実行が、表1に示されている。この例およびその他の例のために、疑似コードは、
図4を参照して示されかつ記載された変数および入力/出力値を参照してよい。
【0092】
【0093】
表1に示したように、xおよびyは、それぞれレーン識別子x_lane_idおよびy_lane_idを有する対応するレーンを通過した値である。例えば、ステージ1において、レーン0は、値xを通過させることができ、レーン1は、値yを通過させることができる。表1のライン1において、変数x_less_than_y_orderedは、ブール値である。変数は、2つの条件下で真である。第1に、値xおよびyが互いに等しく、x値を有するレーンのためのレーン識別子が、y値を有するレーンのためのレーン識別子よりも大きくないとき、変数は真である。この条件は、より低いレーン識別子を有するレーンを比較される値の最小値として設定することによって、xがyと等しいときの均衡を破るために設定される。第2に、値xが値yよりも小さい場合、変数は真である。変数x_less_than_y_orderedが真であるならば、次いで、ライン3~5において、MINセルは、xをx,yの最小値として出力し、x_lane_idレーン識別子も出力する。それ以外は、ライン7~9に示したように、MINセルは、yおよびy_lane_idを出力する。
【0094】
処理セルは、2つの入力オペランドの最大値を決定するためのプリミティブ操作を実行するように構成されることもでき、MAXセルと呼ばれる。両方のプリミティブ操作において、一方のオペランドは、それぞれの処理セルのためのデータ処理レーンから来るのに対し、第2のオペランドは、別のデータ処理レーンからのクロスバーを介して提供される。
【0095】
MAXセルの例示的な疑似コード実行が、表2に示されている:
【0096】
【0097】
表2のライン1において、値xが値yと等しく、値xに対応するレーンのためのレーン識別子が、値yに対応するレーンのためのレーン識別子よりも大きいとき、または値xが値yよりも大きいとき、変数x_greater_than_y_orderedは、真であるブール値である。MAXセルは、x_greater_than_y_orderedが真であるとき、xおよびレーン識別子x_lane_idを出力し、そうでなければyおよびレーン識別子y_lane_idを出力する。第1の条件は、値xが値yと等しい場合のタイブレーカである。
【0098】
入力要素のための重複カウントも取得するために奇偶マージソートネットワークを構成するために、様々なステージにおけるMAXセルは、本明細書に記載のように構成されている。重複カウントを実行するためのMAXセルへの修正は、実質的に、タイミングおよびロジックの複雑さを追加せず、幾つかの例において、XPUによって処理される現在の作業負荷に基づいて有効化または無効化されることができる。ベクタソートおよび重複カウントオペレーションをXPUの同じ構成の一部として組み合わせることによって、XPUは、別々に構成されたハードウェアなしにおよび/またはオペレーション間にXPUを再構成することなしに、両方のオペレーションのための値をより効率的に取得することができる。MAXセルは、MAXセルが、奇数要素および偶数要素が比較およびソートされる奇偶マージステージの一部であるか、または奇数要素が偶数要素とは別に比較される奇-奇/偶-偶マージの一部であるかに応じて、異なるオペレーションを実行する。以下の説明において、「値」という用語は、一般的にソートされる要素を指すために使用されている。
図8B~
図8Hを参照して示されかつ記載されているように、ソートされる値は、キー-値対のタプルのキーであることができる。
【0099】
1×1 奇偶マージステージ1において、隣接する要素は、ステージ1における4つの破線のボックスによって示された、長さ2の4つのソートされたリストを形成するために比較される。2×2 奇-奇/偶-偶マージステージ2において、隣接するソートされたリストの奇数要素が比較される。ステージ2における2つの破線のボックスによって示された、隣接するソートされたリストの偶数要素も比較される。ステージ3は、各々のi番目の要素がi+1番目の要素とマージされる2×2奇偶マージステージである。ステージ4および5は、4×4奇-奇/偶-偶マージのフェーズ1および2である。ステージ4において、隣接するソートされたリストの奇数要素の第1のセットが比較される。偶数要素の第1のセットも比較される。ステージ5において、隣接するソートされたリストの奇数要素の第2のセットが比較される。偶数要素の第2のセットも比較される。ステージ6は、i番目の要素がi+1番目の要素でソートされる4×4奇偶マージフェーズである。ステージ6の出力は、長さ8の1つのソートされたリストである。ソーティングの後、キーによってソートされたタプルは、XPUによって計算されたカウントをそれらの対応するキーにシャッフルするために、値シャッフルネットワークを通過する。各々のステージは、
図8B~
図8Hを参照してより詳細に記載されている。
【0100】
ステージ1において、XPUは、レーン0、1、2、3、4、5、6および7における値を比較する。
図8Aのステージ1における破線のブロックは、XPUが、隣接するレーンの対の値をソートした後の、4つのソートされたリストを表す。より小さい数のレーンにおける値が、より大きい数のレーンにおける値よりも大きい場合、XPUは、レーン間で値を交換する。出力レーンlの場合、カウントC
lは、レーンlにおける値と同じ値を有するレーンのセットを通過する値の合計である。レーンのセットS
lは、その識別子が、現在のレーン以下であるレーンを含む。例えば、レーン5のためのセットS
lは、レーン1~4を含んでよいが、レーン6を含まなくてよい。
【0101】
重複カウントを計算するために、ステージ1におけるMAXセルは、上側のレーンのカウントを、下側のレーンのカウントよりも1つ多く設定するように構成することができる。上側および下側のレーンは、そのカウントが増加させられる値をソースするVPUレーンに基づいて決定されることができる。奇偶マージステージにおいてソートおよび重複カウントを実行するための例示的な疑似コード実行が、以下の表3に示されている:
【0102】
【0103】
表3において、MAXセルは、ライン1に従って、変数x_greater_than_y_orderedのブール値を決定する。ライン3~ライン9に従って、MAXセルはまず、それぞれ値xおよびyをストリーミングするレーンについてx_lane_id識別子がy_lane_idよりも大きいかどうかを決定する。変数x_lane_id_greater_than_y_lane_idが真であるならば、MAXセルは、値xをストリーミングするレーンのカウント変数x_countに対してcount_large変数を設定し、値yをストリーミングするレーンのカウント変数y_countに対してcount_small変数を設定する。それ以外は、ライン7~ライン9に示されているように、変数count_largeがy_countに設定され、変数count_smallがx_countに設定される。
【0104】
ライン11によれば、MAXセルは、変数count_largeのための値を増加させる。ライン13~ライン21によれば、変数x_greater_than_y_orderedのための値に基づいて、入力値xおよびyが等しい場合はいつでも、増加したcount_large変数が出力され(ライン16、21)、またはそれ以外は、2つの値のうちの大きい方のそれぞれのカウントが出力される。例えば、述語x_equal_yがライン16において真ではなく、x_greater_than_y_orderedが真であるならば、ライン16におけるout_count=x_countが出力される。同様に、述語x_equal_yがライン16において真ではなく、x_greater_than_y_orderedが真ではないならば、ライン16におけるout_count=y_countが出力される。
【0105】
ステージ2は、2×2奇-奇/偶-偶マージステージである。ステージ1からの4つのソートされたリストからの隣接するソートされたリストの奇数要素は、比較され、必要であれば交換される。
図8Aに示したように、レーン0の値はレーン2の値と比較され、レーン1の値はレーン3と比較され、レーン4の値はレーン6と比較され、レーン5の値はレーン7と比較される。
【0106】
奇-奇/偶-偶ステージにおいて、偶数レーンl(例えば、レーン0、レーン2、レーン4など)のためのカウントClは、レーンのセットSlにおける値の合計である。レーンのセットは、レーンlと同じ値Vfを有するレーンであると定義され、偶数レーンにおいて現在のレーン以下である。
【0107】
2×2奇-奇/偶-偶マージステージにおいてレーンlのための重複カウントを計算するために、MAXセルは、比較されるレーンにおける等しい値のカウントを付加し、合計を上側のレーンに割り当てる。下側および上側のレーンは、カウントされている値をソースしたレーンに基づいて決定される。
【0108】
ステージ3は、2×2奇偶マージステージである。このステージにおけるXPUは、前のステージからの2つのリストをマージし、レーン1および2における値と、レーン5および6における値とを比較する。2×2奇偶マージステージにおいてソートおよび重複カウントを実行するための例示的な疑似コード実行は、以下の表4に示されている。
【0109】
【0110】
表4において、変数count_largeは、比較されるレーンxおよびyからのカウントの合計である。入力値xおよびyが等しいとき(ライン16、21)はいつでも、MAXセルはcount_large変数を出力し、またはそれ以外は、2つの値の大きい方のそれぞれのカウントを出力する。例えば、述語x_equal_yがライン16において真ではなく、x_greater_than_y_orderedが真であるならば、ライン16におけるout_count=x_countが出力される。同様に、述語x_equal_yがライン16において真ではなく、x_greater_than_y_orderedが真でないならば、out_count=y_countが出力される。
【0111】
ステージ4は、4×4奇偶マージステージのための第1のフェーズである。出力レーンのセットは、偶数レーンのセットおよび奇数レーンのセットを含むと記述することができる。第1のフェーズは、2×2奇-奇/偶-偶マージソートに関して本明細書に記載されたように、入力ソートされたリストをマージすることと同様である。
【0112】
ステージ5は、4×4奇偶マージのための第2のフェーズである。例えば、
図8Aに示したように、ソートおよびマージされる偶数レーンは、レーン{2,4}であり、ソートおよびマージされる奇数レーンは、{3,5}である。MAXセルは、さもなければ4×4奇偶マージ中に出力レーンに不注意に付加される場合がある複数の重複カウントを管理およびハンドリングするように構成されている。レーン2における重複カウントは、レーン6からのC
6またはレーン2からのC
2であることができる(なぜならば、レーン2および6はフェーズ1の間に比較されるからである)。レーン4における重複カウントは、レーン0からのC
0、レーン4からのC
4、またはC
4+C
0であることができる。フェーズ2において、レーン{2,4}がマージされるとき、可能な出力組合せは:
【0113】
【0114】
フェーズ1において4×4奇-奇/偶-偶マージステージにおいて重複カウントを実行するための例示的な疑似コード実行が、表5に示されている:
【0115】
【0116】
実行は、例えば、表4に示したように2×2マージと同様であるが、上述のCm値にラッチされたout_incrによって表された値を有する。out_incr値は、フェーズ2において4×4奇-奇/偶-偶マージステージの最終重複カウントを修正するために使用される。
【0117】
4×4奇-奇/偶-偶マージステージにおいて重複カウントを実行するための例示的な疑似コード実行は、以下にフェーズ2に示されており、表6に示されている:
【0118】
【0119】
ライン3~13において、より大きなインクリメント値incr_largeは、より大きなレーンのインクリメント値に設定され、より小さなインクリメント値incr_smallは、より小さなレーンのインクリメント値に設定される。ライン15~18において、より大きなレーンのカウントcount_largeは、前のステージ1からの潜在的な追加された重複値を補償するために調整される。
【0120】
ステージ6において、4×4奇偶マージである。ステージ3における2×2奇偶マージと同様に、i番目とi+1番目の要素が比較され、マージされる。出力は、長さ8の1つのソートされたリストである。
【0121】
ステージ6の後、値シャッフルネットワークは、構成されたXPUにおいて実行された合成オペレーションに基づいて値をシャッフルする。ベクタソートオペレーションの場合、ソースレーンモードにおける値シャッフルネットワークは、対応するソートされたキーがソーティングの後にどこで終了したかに基づいて、値をそれらの元のレーンから適切な送信先レーンへルーティングする。重複カウントオペレーションの場合、送信先レーンモードにおける値シャッフルネットワークは、対応するカウントされた値がソーティング後にどこで終了したかに基づいて、各々のレーンのカウントを元のレーンから適切な送信先レーンへルーティングする。
【0122】
幾つかの例において、XPUは、それぞれ最小値または最大値のための入力をスキャンするための浮動小数点MIN/MAXスキャンを実行するように構成することができる。XPUは、例えば、最大または最小インデックスを識別するように、処理レーンを横断して、受信されたタプルのインデックスをスキャンするために構成することもできる。オペレーションをスキャンするための合成オペレーションを実行することの一部として、処理セルは、例えば32ビット浮動小数点値などの浮動小数点値の間、または符号なし整数の間の比較を実行するように構成することができる。比較のためのプリミティブ操作は、本明細書に記載されているように、重複値をソートまたはカウントするなど、その他の合成オペレーションのために使用されてもよい。
【0123】
図8B~
図8Gは、例示的な入力におけるマージソートネットワーク800Aの各々のステージを示す。記述のためにソートされた例示的なキーは:
キー ={5, 6, 7, 6, 5, 5, 5, 5}
レーン識別子={0, 1, 2, 3, 4, 5, 6, 7}
である。各々のそれぞれのキーをストリーミングするレーンのためのレーン識別子は、参照のために提供されている。
【0124】
図8Bは、XPUの奇偶マージネットワーク800の例示的なステージ1 801Aを示す。ステージ1 801Aにおいて、隣接するデータ処理セルからのキーは、それぞれのMINセルおよびMAXセルによって処理される。例えば、ステージ1において、レーン0におけるMINセルは、レーン0および1における最小値を決定し、レーン1におけるMAXセルは、レーン0および1におけるキーの最大値を決定する。ステージ1におけるクロスバーは、レーン1におけるキーをMINセルに、レーン0におけるキーをMAXセルに提供するように構成されている。ステージ1の出力は、各々が長さ2の、キーの4つのソートされたリストである。例によれば、レーン2および3は、それらのスワップされたキーを有する。レーンのその他の対、すなわち、レーン0および1、レーン4および5、ならびにレーン6および7のためのキーは、そのレーンのためのそれぞれのキーが既にソートされているので、スワップなしにステージ1を通過する。レーン5および7におけるカウントは増加させられる(同じキーを有するそれぞれの比較されるレーンのより高いレーン)。
【0125】
図8Cは、開示の態様による、XPUの奇偶マージネットワークの例示的なステージ2 800Cを示す。第2のステージにおいて、隣接するリストはマージされ、ステージ1からのソートされたリストの奇数位置におけるキーが比較される。ソートされたリストの偶数位置におけるキーは、同様に比較される。ステージ2において、例えば、レーン0および1における処理セルはMINセルであるのに対し、レーン2および3における処理セルはMAXセルである。全てキー5を有する比較される対(4,6)(5,7)のより高いレーンとして、レーン6および7のための重複カウントが増加させられる。
【0126】
図8Dは、開示の態様による、XPUの奇偶マージネットワークの例示的なステージ3を示す。第3のステージにおいて、各々のソートされたリストの中間レーン、すなわち、レーン(1,3)および(5,6)における残りのキーが比較される。6=6であるので、レーン3のための重複カウントが増加させられ、5=5であるので、レーン6のための重複カウントが増加させられる。
【0127】
図8Eは、開示の態様による、XPUの奇偶マージネットワークの例示的なステージ4を示す。第4のステージは、4×4偶-偶/奇-奇マージのフェーズ1である。必要に応じて、レーン0,4;1,5;2,6;および3,7が比較およびスワップされる。レーン4のための重複カウントが増加させられる(レーン1は5の値を有し、レーン4は5の値を有していた)。レーン4のためのインクリメント値も1に設定される(より大きなレーン4のカウント)。この例において、全ての比較される対がスワップされる。
【0128】
図8Fは、開示の態様による、XPUの奇偶マージネットワークの例示的なステージ5を示す。レーン6および4からの値が比較(およびスワップ)され、レーン7および1からの値も比較(およびスワップ)される。レーン4および6は、ソートされたリストの同じ半分に属するので、レーン6におけるカウントは1だけ増加させられる。
【0129】
図8Gは、開示の態様による、XPUの奇偶マージネットワークの例示的なステージ6を示す。レーン5および4からの値が比較およびスワップされる。レーン6および7からの値が比較され、レーン1および3からの値が比較される。レーン4、7および3のためのカウントが増加させられる。
【0130】
図8Hは、開示の態様による、XPUの奇偶マージネットワークの例示的な値シャッフルネットワークを示す。シャフリングの後、カウントは、昇順に出力される:{1,1,1,2,2,3,4,5}。
【0131】
その他の例示的な合成オペレーション
ベクタソートおよび重複カウントに加え、XPUは、本明細書に記載された様々なその他のオペレーションを実行するためのセルおよびクロスバーの処理ネットワークと共に構成することができる。オペレーションは、例えば、ベクタパーティション、ベクタヒストグラム、ベクタ置換、ベクタシフトインサート、ベクタギャザー、およびベクタスキャッタを含む。
【0132】
ベクタパーティション
XPUは、複数のビンを定義する値の範囲に従って、要素ごとに入力ベクタをパーティショニングするように構成することができる。XPUは、入力要素を、その値が入力要素以上である最も小さいビンにパーティショニングする。XPUは、圧縮行格納方式(CRS)からコーディネートリスト(COO)フォーマットへなど、入力スパース行列を1つのフォーマットから別のフォーマットへ変換するための合成オペレーションの一部として、例えば本明細書に記載されているように、ベクタパーティションを実行することができる。
【0133】
各々のデータ処理レーンにおいて、それぞれの処理セルは、パーティショニングされる、符号なし整数などの入力値を受信する。入力値は、ベクタまたはその他のデータ構造の要素であることができる。処理セルは、ビン値および入力値のためのマスク値のタプルも受信する。入力値およびビンタプルの要素の各々は、32ビット符号なし整数などの同じデータタイプである。ビンタプルは、ゼロのインデクシングを使用するXPUの実行においてはゼロ、またはそれ以外は1のインデックスを有するタプルの第1の要素でインデックスされている。第2のビン要素は、1(または2)のインデックスを有し、第3のビン要素は、2(または3)のインデックスを有する、などである。
【0134】
ビンタプルの場合、bin[y]は、インデックスyにおけるタプルの要素である。幾つかの例において、マスク値は、入力値のためのマスクである。その他の例において、マスクビットは、代わりに、1つまたは複数のマスクビットのタプルであり、マスクタプルにおける各々のビットのインデックスは、入力ビンタプルにおけるそれぞれのビン要素に対応する。例えば、要素mask[i]がゼロと等しいならば、同じインデックスiにおけるビン要素bin[i]がマスクされ、XPUによって入力として処理されない。
【0135】
ベクタパーティションへの出力は、入力値がそれにパーティショニングされるビン値のインデックスであるパーティション識別子である。パーティション識別子は、ビン値のタプルによって定義された範囲に基づく。パーティションインデックスは、ゼロから、XPUのためのデータ処理レーンの数よりも1少ない数までの値を有することができる(または、パーティション識別子が、ゼロでインデックスされている代わりに1でインデックスされている場合には、1から、データ処理レーンの数までの値を有することができる)。
【0136】
入力ベクタのインデックスiにおける与えられた要素values[i]の場合、パーティション識別子は最低値kであり、これにより、ビン要素bin[k]は、values[i]における入力ベクタの要素以下であり、これは、ビン要素bin[k+1]よりも小さい。これらの例において、ビンタプルの最後のビン要素は、入力値およびビン要素のためのデータタイプの最大値に設定される。例えば、XPUが、32ビット符号なし整数要素のベクタにおいてベクタパーティションを実行する場合、ビンタプルの最後のビン要素は、32ビット符号なし整数の最高値を表すINT_MAXに設定される。
【0137】
values[i]における要素がビン要素の範囲にない場合、結果として生じるパーティション識別子は、XPUによって出力として送信されるときにマスクされる。また、ビンタプルが、単調に増加する整数要素を含まない場合、入力要素のためのパーティション識別子は定義されていない。言い換えれば、ビンタプルは、厳密に増加する要素のシーケンスを含まなければならない。
【0138】
XPUへの入力の例示的なセットは、以下のとおりであることができる:
値 ={5, 7, 10, 1, 512, 8, 1023, 0}
マスク={0, 1, 0, 0, 1, 1, 1, 1}
ビン ={0, 7, 256, 1024, 1, 0, 0, 1}
この例において、マスク値は入力値に対応し、ビン値には対応しない。8レーンのXPUの各々のレーンが、例えば入力ベクタからそれぞれの入力要素、およびその対応するマスクビットを受信することができる。出力されるパーティション識別子は:
パーティション識別子:{0, 1, 1, 0, 2, 1, 2, 0}
である。
【0139】
マスク値に基づいて、入力値7、512、8および1023のみがパーティショニングされる。さらに、0、7、256および1024のみが、厳密に増加する整数値のシーケンスであるので、ビンタプルにおいて指定された4つのビンが存在する。マスクされた値は、ゼロのパーティション識別子を有する。残りの入力値のうち、7は、パーティション識別子1にマップされる(なぜならば、第1のビンである0が、7以下であるが、7は7未満ではないからである)。これらの例において、bin[-1]は、入力値およびビン要素のためのデータタイプの最小の負の値として定義される。例えば、ビンタプルの第1のビン要素は、XPUが32ビット符号なし整数要素のベクタにおいてベクタパーティションを実行するとき、32ビット符号なし整数に負の1を乗じたものの最低値を表す-INT_MAXに設定される。
【0140】
幾つかの例において、value[i]における値のためのパーティション識別子を決定する際にXPUによって適用されるルールは、最低値kであり、これにより、ビン要素bin[k-1]はvalues[i]未満であり、values[i]はbin[k]以下である。
【0141】
ベクタヒストグラム
XPUは、ベクタ内の入力値の発生回数をカウントするように構成することができる。XPUによる出力は、それらの発生のカウントと共に、一意の要素のリストである。XPUへの入力は、マスクされていない値の発生回数のみをカウントする、各々の入力値のためのマスクビットも含む。
【0142】
XPUへの例示的な入力は、以下のとおりであることができる:
値 ={0, 0, 1, 0, 2, 1, 2, 100}
マスク={0, 0, 0, 0, 0, 0, 0, 1}
この例において、値100はマスクされており、ベクタヒストグラムオペレーションにおいてXPUによって考慮されない。
【0143】
XPUによる例示的な出力は、以下のとおりであることができる:
値 ={0, 1, 2, 0, 0, 0, 0, 0}
カウント={3, 2, 2, 0, 0, 0, 0, 0}
マスク ={0, 0, 0, 1, 1, 1, 1, 1}
値は、まず、固有値、すなわち0、1および2によって出力される。カウント値のリストにおける各々の要素は、各々の固有値のカウント、すなわち、入力における3つのゼロ、2つの1および2つの2に対応する。最後に、XPUは、入力において前にマスクされたまたは固有値を含んでいない残りの出力ベクタ要素のためのマスクも出力する。入力ベクタは前もってソートされており、これにより、カウント値のリストの各々の要素は、最小から最大へ(またはソートに応じて、その逆に)対応する固有値をマッチさせることができる。
【0144】
ベクタコンパクト
XPUは、入力オフセットにおいて開始する入力ベクタのマスクされた要素を除去し、除去された要素の出力ベクタを戻すように構成することができる。各々のデータ処理レーンにおいて、それぞれの処理セルは、入力値およびその値のためのマスクビット、ならびにオフセットを受信する。入力値がマスクされていない場合、入力値は処理セルによってバイパスされる。
【0145】
XPUへの入力の例示的なセットは、以下のとおりであることができる:
値 ={0, 1, 2, 3, 4, 5, 6, 7}
マスク ={1, 0, 1, 0, 1, 0, 0, 1}
オフセット=5
受信された値から、値0、2、4、7は、除去のためにマスクされる。オフセットは5であり、したがって、XPUによる例示的な出力は、以下のとおりであることができる:
値 ={7, 1, 3, 5, 6, 0, 2, 4}
マスク={0, 1, 1, 1, 1, 0, 0, 0}
オフセットは5であるが、入力値における5番目の要素はマスクされていないので、XPUは、第1のマスクされた値である7への入力値を通して継続する。次いで、XPUは、出力ベクタにおいて、入力ベクタの前もってマスクされていない値を含む。これらの値は今ではマスクされている。出力ベクタの残りの値は、入力ベクタにおける出現の順序における、入力ベクタのマスクされた値である。
【0146】
ベクタ減少
XPUは、入力ベクタの各々の要素を合計し、合計を戻すまたは入力ベクタにおける最大値または最小値の要素を戻すことなどによって、入力ベクタを減少させるように構成することができる。例えば、XPUは、ベクタの各々の要素を合計することによって入力ベクタを減少させることができる。データ処理レーンの総数よりも大きいベクタの場合、XPUは、レーンの総数までのサイズの入力ベクタの各々のセグメントの要素を合計するための累計を維持することができる。
【0147】
ベクタ置換
XPUは、提供されたパターンに従って入力ベクタを置換するように構成することができる。入力ベクタは、例えば所定の形状の入力を要求するニューラルネットワークレイヤへの入力として提供されるために、再形成されることができる。XPUは、XPUのためのデータ処理レーンの数と同じ大きさだけベクタを置換することができる。データ処理レーンの総数よりも大きいベクタは、レーンの総数まで、より小さなセグメントに置換されることができる。
【0148】
ベクタシフトインサート
XPUは、v0およびv1と呼ばれる、オペランドとしての2つのベクタ、およびスカラーオフセット値を受信するように構成することができる。スカラーオフセットは、ベクタv0およびv1が結合されているならば、第3のベクタv3における開始点を定義する。出力は、ベクタv3におけるオフセットにおいて第1の値において開始する、XPUにおけるデータ処理要素の数と同じだけ長いベクタの選択である。オフセットは、ゼロと、データ処理要素の数よりも1少ない数との間の整数値であることができる。
【0149】
XPUへの入力の例示的なセットは、以下のとおりであることができる:
ベクタ v0 ={1, 2, 3, 4, 5, 6, 7, 8}
ベクタ v1 ={a, b, c, d, e, f, g, h}
スカラーオフセット値=6
この例において、ベクタv1は、XPUが両方の入力ベクタからベクタシフトインサートへの出力ベクタをどのように生成することができるかを例示するための文字を含む。ベクタシフトインサートを実行することからの選択されたベクタは:
選択されたベクタ={7, 8, a, b, c, d, e, f}
である。
【0150】
オフセット6におけるベクタv0における第1の要素は7であるので、選択されたベクタの最初の2つの要素は、7および8である。次いで、ベクタv0において終了しかつベクタv1を通じて継続する次の7つの要素が選択される。
【0151】
図9は、XPUにおいて合成オペレーションを実行するための例示的なプロセス900のフローチャートである。ハードウェア回路は、複数のステージを含むXPUと共に構成することができる。各々のステージは、クロスバーおよび2つ以上の処理セルを含むことができる。複数のデータ処理レーンは、それぞれのデータを上流の入力部から下流の送信先へストリーミングする。そのステージのセルおよびクロスバーを通る(Through)。
【0152】
ブロック910によれば、ハードウェアは、データ処理レーンに沿って上流の入力部からの入力データおよび第1のオペレーションを実行するための第1の命令を受信する。上流の入力部は、プロセッサまたはメモリデバイスであることができ、そこから、ハードウェア回路のXPUにおいて処理するためのデータが送信される。第1のオペレーションは、ベクタスキャン、ベクタセグメント化スキャン、ベクタソート、ベクタ重複カウントなどの合成オペレーションである。第1の命令は、合成オペレーションを表す制御信号であることができる。
【0153】
ブロック920によれば、第1の命令を受信することに応答して、各々のステージのために、ハードウェア回路は、それぞれのそのステージのそれぞれの処理セルに第2の命令を送信し、各々のセルは、それぞれのデータ処理レーンから入力を受信することに応答してそれぞれの第2のオペレーションを実行するように構成されている。第2のオペレーションは、処理セルによって実行されるプリミティブ操作である。
図3および
図4を参照して本明細書に記載されているように、命令は、各々の処理セルに対応するそれぞれの制御セルから受信されることができる。
【0154】
ブロック930によれば、第1の命令を受信することに応答して、各々のステージのために、ハードウェア回路は、各々のステージのためのそれぞれのクロスバーにそれぞれの第3の命令を送信する。
【0155】
ブロック940によれば、ハードウェア回路は、複数のデータ処理レーンおよびそれぞれの第2のオペレーションを実行するように構成された複数のセルに沿って受信された入力データを処理することによって第1のオペレーションを実行する。
図5および
図6を参照して示されかつ記載されている構成500~600などにおいて、セルおよびクロスバーは、第1のオペレーションを実行するための処理ネットワークを形成する。
【0156】
図10は、開示の態様による、XPUへの入力ベクタのための重複カウントをソートおよび生成するための例示的なプロセス1000のフローチャートである。
【0157】
ブロック1010によれば、ハードウェア回路は、処理セルおよびクロスバーの処理ネットワークを形成するためにクロスレーン処理ユニットを構成する。例えば、
図8A~
図8Hを参照して本明細書に記載されているように、ハードウェア回路は、ベクタソートおよび重複カウント処理ネットワークを生成するために、
図9を参照して本明細書に記載されているように命令を受信することができる。
【0158】
ブロック1020によれば、ハードウェア回路は、要素の入力ベクタを受信する。ブロック1030によれば、ハードウェア回路は、ソートされた出力ベクタ、および入力ベクタにおける重複要素のカウントを指定するデータを生成する。ソートされた出力ベクタおよび重複カウントを指定するデータの例示的な生成は、
図8A~
図8Hを参照して本明細書に記載されている。
【0159】
例示的なコンピューティング環境
図11は、ハードウェア回路101を実行するための例示的な環境1100のブロック図である。ハードウェア回路101は、サーバコンピューティングデバイス1115など、1つまたは複数のロケーションにおいて1つまたは複数のプロセッサを有するデバイスにおいて実行することができる。ユーザコンピューティングデバイス1112およびサーバコンピューティングデバイス1115は、ネットワーク1160上で1つまたは複数のストレージデバイス1130に通信可能に結合されることができる。ストレージデバイス1130は、揮発性および不揮発性メモリの組合せであることができ、コンピューティングデバイス1112、1115と同じまたは異なる物理的ロケーションにあることができる。例えば、ストレージデバイス1130は、ハードドライブ、ソリッドステートドライブ、テープドライブ、光学式ストレージ、メモリカード、ROM、RAM、DVD、CD-ROM、書き込み可能、および読み出し専用メモリなど、情報を記憶することができるあらゆるタイプの非一時的コンピュータ可読媒体を含むことができる。
【0160】
サーバコンピューティングデバイス1115は、1つまたは複数のプロセッサ1113およびメモリ1114を含むことができる。メモリ1114は、プロセッサ1113によって実行することができる命令1121を含む、プロセッサ1113によってアクセス可能な情報を記憶することができる。メモリ1114は、プロセッサ1113によって検索、操作または記憶することができるデータ1123も含むことができる。メモリ1114は、揮発性および不揮発性メモリなど、プロセッサ1113によってアクセス可能な情報を記憶することができる1つのタイプの非一時的コンピュータ可読媒体であることができる。プロセッサ1113は、1つまたは複数の中央処理装置(CPU)、グラフィック処理ユニット(GPU)、フィールドプログラマブルゲートアレイ(FPGA)、および/またはテンソルプロセシングユニット(TPU)などの特定用途向け集積回路(ASIC)を含むことができる。プロセッサ1113は、
図1を参照して本明細書に記載されている、ハードウェア回路の一部として実行されるコプロセッサを含むことができる。
【0161】
命令1121は、1つまたは複数の命令を含むことができ、命令は、プロセッサ1113によって実行されると1つまたは複数のプロセッサに、命令によって定義された作用を実行させる。命令1121は、プロセッサ1113による直接処理のためのオブジェクトコードフォーマット、またはオンデマンドで解釈されるもしくは前もってコンパイルされる独立したソースコードモジュールの解釈可能なスクリプトもしくは集合を含むその他のフォーマットで記憶することができる。命令1121は、本開示の態様と一致するハードウェア回路101のXPUを構成するための命令を含むことができる。サーバコンピューティングデバイス1115および/またはユーザコンピューティングデバイス1112は、回路のXPUを構成するための制御信号としてハードウェア回路101に命令を生成および送信するためのコンパイラまたはその他のプログラムを実行することができる。
【0162】
データ1123は、命令1121に従ってプロセッサ1113によって検索、記憶または修正することができる。データ1123は、複数の異なるフィールドおよびレコードを有するテーブルとして、またはJSON、YAML、プロトまたはXMLドキュメントとして、リレーショナルデータベースまたは非リレーショナルデータベースにおいて、コンピュータレジスタに記憶することができる。データ1123は、これらに限定されないが、バイナリ値、ASCIIまたはUnicodeなどのコンピュータ可読フォーマットでフォーマットすることもできる。さらに、データ1123は、数字、記述テキスト、プロプライエタリコード、ポインタ、その他のネットワークロケーションを含むその他のメモリに記憶されたデータへの参照、関連するデータを計算するための機能によって使用される情報など、関連する情報を識別するのに十分な情報を含むことができる。
【0163】
ユーザコンピューティングデバイス1112は、1つまたは複数のプロセッサ1116、メモリ1117、命令1118およびデータ1119を有する、サーバコンピューティングデバイス115と同様に構成することもできる。ユーザコンピューティングデバイス1112は、ユーザ出力1126およびユーザ入力1124を含むこともできる。ユーザ入力1124は、キーボード、マウス、機械的アクチュエータ、ソフトアクチュエータ、タッチスクリーン、マイクロフォンおよびセンサなど、ユーザからの入力を受信するためのあらゆる適切なメカニズムまたは技術を含むことができる。
【0164】
サーバコンピューティングデバイス1115は、ユーザコンピューティングデバイス1112にデータを送信するように構成することができ、ユーザコンピューティングデバイス1112は、受信されたデータの少なくとも一部をユーザ出力1126の一部として実行されるディスプレイに表示するように構成することができる。ユーザ出力1126は、ユーザコンピューティングデバイス1112とサーバコンピューティングデバイス1115との間のインターフェースを表示するために使用することもできる。ユーザ出力1126は、代替的または追加的に、1つもしくは複数のスピーカ、トランスデューサもしくはその他のオーディオ出力、触覚インターフェース、またはユーザコンピューティングデバイス1112のプラットフォームユーザに非視覚的および非聴覚的情報を提供するその他の触覚フィードバックを含むことができる。
【0165】
図11は、コンピューティングデバイス1115、1112内にあるものとしてプロセッサ1113、1116およびメモリ1114、1117を示しているが、プロセッサ1113、1116およびメモリ1114、1117を含む、本明細書に記載された構成要素は、同じコンピューティングデバイス内ではなく、異なる物理的ロケーションにおいて動作することができる複数のプロセッサおよびメモリを含むことができる。例えば、命令1121、1118およびデータ1123、1119のうちの幾つかは、読み出し専用コンピュータチップ内のリムーバブルSDおよびその他に記憶することができる。命令およびデータのうちの幾つかまたは全ては、プロセッサ1113、1116から物理的に離れた、ただし依然としてアクセス可能なロケーションに記憶することができる。同様に、プロセッサ1113、1116は、同時および/または順次動作を実行することができるプロセッサの集合を含むことができる。コンピューティングデバイス1115、1112は各々、タイミング情報を提供する1つまたは複数の内部クロックを含むことができ、タイミング情報は、コンピューティングデバイス1115、1112によって実行されるオペレーションおよびプログラムのための時間測定のために使用することができる。
【0166】
サーバコンピューティングデバイス1115は、ユーザコンピューティングデバイス1112からのデータを処理するためのリクエストを受信するように構成することができる。例えば、環境1100は、様々なユーザインターフェースおよび/またはプラットフォームサービスを露出させるAPIを介して、様々なサービスをユーザに提供するように構成されたコンピューティングプラットフォームの一部であることができる。1つまたは複数のサービスは、機械学習フレームワーク、または指定されたタスクおよび訓練データに従ってニューラルネットワークもしくはその他の機械学習モデルを生成するためのツールのセットであることができる。ユーザコンピューティングデバイス1112は、ハードウェア回路101のXPUが実行するように構成されるべき作業負荷または合成オペレーションのタイプを指定するデータを受信および送信してよい。ユーザコンピューティングデバイス1112は、命令を直接ハードウェア回路101に送信するまたは本明細書に記載されているようにサーバコンピューティングデバイス1115にハードウェア回路101への制御信号として命令を生成および送信させることができる。
【0167】
デバイス1112、1115は、ネットワーク1160上で直接または間接通信を行うことができる。デバイス1115、1112は、情報を送受信するための開始コネクションを受け入れてよいリスニングソケットをセットアップすることができる。ネットワーク1160自体は、インターネット、ワールドワイドウェブ、イントラネット、仮想プライベートネットワーク、ワイドエリアネットワーク、ローカルネットワーク、および1つまたは複数の企業に所有権がある通信プロトコルを使用するプライベートネットワークを含む様々な構成およびプロトコルを含むことができる。ネットワーク1160は、様々な短距離および長距離接続をサポートすることができる。短距離および長距離接続は、2.402GHz~2.480GHz(一般的にBluetooth(登録商標)規格に関連する)、2.4GHzおよび5GHz(一般的にWi-Fi(登録商標)通信プロトコルに関連する)などの、異なる帯域幅にわたって、または、ワイヤレスブロードバンド通信のためのLTE(登録商標)規格などの、様々な通信規格によって、行うことができる。ネットワーク1160は、追加的または代替的に、様々なタイプのイーサネット接続上を含む、デバイス1112、1115間の有線接続もサポートすることができる。
【0168】
単一のサーバコンピューティングデバイス1115およびユーザコンピューティングデバイス1112が
図11に示されているが、開示の態様は、順次処理または並列処理のためのパラダイムにおいて、または複数のデバイスの分散型ネットワーク上を含む、コンピューティングデバイスの様々な異なる構成および量に従って実行することができることが理解される。幾つかの実行において、開示の態様は、単一のデバイスまたはそのあらゆる組合せにおいて実行することができる。
【0169】
前記のことを考慮して、開示の態様は、プロセッサの複数のデータ処理レーンを横断してデータ依存オペレーションを実行するためのクロスレーン処理ユニット(XPU)を対象とする。各々のデータ依存オペレーションのための特定オペレーション向け回路を実行するのではなく、XPUは、XPUにおいて積層されたネットワークとして配置された処理セルおよびクロスバーによって実行される個々のオペレーションを構成する入力信号に応答して異なるオペレーションを実行するように構成することができる。各々の処理セルは、複数のデータ処理レーンを横断してデータを受信および処理することができる。開示の態様は、重複カウントを実行するためにベクタソートネットワークを使用するようにXPUを構成することを含み、ソーティングおよび重複カウンティングのためにXPUを別々に構成する必要性を排除する。
【0170】
本開示の態様は、デジタル回路において、コンピュータ可読記憶媒体において、1つまたは複数のコンピュータプログラムとして、または前述のうちの1つまたは複数の組合せとして実行することができる。コンピュータ可読記憶媒体は、例えば、クラウドコンピューティングプラットフォームによって実行可能かつ有形記憶デバイスに記憶された1つまたは複数の命令として、非一時的であることができる。
【0171】
本明細書において、「ように構成されている」という用語は、コンピュータシステム、ハードウェアおよびハードウェア回路、またはコンピュータプログラム、エンジンもしくはモジュールの一部に関連した異なる文脈において使用されている。システムが1つまたは複数のオペレーションを実行するように構成されていると言ったとき、これは、システムが、動作時に、システムに1つまたは複数のオペレーションを実行させるシステムにインストールされた適切なソフトウェア、ファームウェア、および/またはハードウェアを有することを意味する。幾つかのハードウェアが1つまたは複数のオペレーションを実行するように構成されていると言ったとき、これは、ハードウェアが、動作時に、入力を受信し、入力に従って1つまたは複数のオペレーションに対応する出力を生成する1つまたは複数の回路を含むことを意味する。コンピュータプログラム、エンジンまたはモジュールが1つまたは複数のオペレーションを実行するように構成されていると言ったとき、これは、コンピュータプログラムが、1つまたは複数のコンピュータによって実行されると、1つまたは複数のコンピュータに1つまたは複数のオペレーションを実行させる1つまたは複数のプログラム命令を含むことを意味する。
【0172】
図面に示されかつ特許請求の範囲に列挙されたオペレーションが特定の順序で示されているが、オペレーションは、示されているものとは異なる順序で実行することができ、幾つかのオペレーションは、省略する、2回以上実行する、および/または他のオペレーションと並列で実行することができることが理解される。さらに、異なるオペレーションを実行するために構成された異なるシステム構成要素の分離は、構成要素が分離されることを要求するものと理解されるべきではない。記載された構成要素、モジュール、プログラムおよびエンジンは、単一のシステムとして統合することができ、または複数のシステムの一部であることができる。
【0173】
特に明記しない限り、前述の代替的な例は相互に排他的ではなく、独特の利点を達成するために様々な組合せにおいて実行されてよい。上記に記載された特徴のこれらの変形およびその他の変形ならびに組合せは、特許請求の範囲によって定義された主題から逸脱することなく利用することができるので、例の前述の説明は、特許請求の範囲によって定義された主題の限定ではなく、例示として解釈されるべきである。加えて、本明細書に記載された例の提供、ならびに「など」、「含む」などと表された語句は、特許請求の範囲の主題を特定の例に限定するものと解釈されるべきではない。むしろ、例は、多くの可能な実行のうちの1つのみを例示することが意図されている。さらに、異なる図面における同じ参照番号は、同じまたは類似の要素を識別することができる。
【0174】
本明細書における実質的にあらゆる複数形および/または単数形の用語の使用、例えば、(「要素」という用語は、あらゆるシステム、構成要素、データ等の代わりである)「ある/その要素」、「1つまたは複数の要素」、「多数の要素」、「複数の要素」、「少なくとも1つの要素」等に関して、当業者は、記載されている文脈および/または用途にとって適切であるならば、複数形から単数形におよび/または単数形から複数形に変換することができる。様々な単数形/複数形の置換は、明確にするためにかつ明示的に示されていない限り限定されることなく、本明細書に明示的に示されている場合がある。