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

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

▶ グーグル インコーポレイテッドの特許一覧

<>
  • 特許-ベクトル縮小プロセッサ 図1
  • 特許-ベクトル縮小プロセッサ 図2
  • 特許-ベクトル縮小プロセッサ 図3
  • 特許-ベクトル縮小プロセッサ 図4
  • 特許-ベクトル縮小プロセッサ 図5
  • 特許-ベクトル縮小プロセッサ 図6
  • 特許-ベクトル縮小プロセッサ 図7A
  • 特許-ベクトル縮小プロセッサ 図7B
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-05-08
(45)【発行日】2024-05-16
(54)【発明の名称】ベクトル縮小プロセッサ
(51)【国際特許分類】
   G06F 17/16 20060101AFI20240509BHJP
【FI】
G06F17/16 Z
【請求項の数】 20
【外国語出願】
(21)【出願番号】P 2023058509
(22)【出願日】2023-03-31
(62)【分割の表示】P 2022063377の分割
【原出願日】2017-12-13
(65)【公開番号】P2023085414
(43)【公開日】2023-06-20
【審査請求日】2023-04-14
(31)【優先権主張番号】15/477,791
(32)【優先日】2017-04-03
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】トーソン,グレゴリー・マイケル
(72)【発明者】
【氏名】フェルプス,アンドリュー・エバレット
(72)【発明者】
【氏名】テマム,オリビエ
【審査官】漆原 孝治
(56)【参考文献】
【文献】特表2007-533009(JP,A)
【文献】特開平08-077142(JP,A)
【文献】特開2004-013185(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/16
(57)【特許請求の範囲】
【請求項1】
システムであって、
1つ以上の入力ベクトルに対してベクトル縮小演算を実行するように構成されたベクトル縮小ユニットを備え、前記ベクトル縮小ユニットは複数のセルを含み、前記複数のセルのうちの少なくとも1つのセルは、
入力ベクトルに含まれる複数の入力要素のうちの入力要素を受け、
前記少なくとも1つのセルに先行するセルによって実行されるベクトル縮小演算の出力または前記少なくとも1つのセルに先行する前記セルからの初期化値のいずれかである一時縮小要素を受け、
前記複数のセルの各々に対するそれぞれの制御要素を含む制御ベクトルに含まれる複数の制御要素のうちの制御要素を受けるように構成され、各それぞれの制御要素は、対応するセルによって生成されたベクトル縮小演算の結果を出力回路に出力するか、または前記対応するセルによって生成されたベクトル縮小演算の前記結果を前記複数のセルのうちの別のセルに与えるかを、前記対応するセルに示し、前記少なくとも1つのセルはさらに、
前記入力要素と前記一時縮小要素とを使用し前記制御要素に基づいて前記ベクトル縮小演算を実行することにより、出力要素を生成し、
前記結果を前記出力回路に出力しないように示す前記制御要素に応答して、前記出力要素を前記複数のセルのうちの別のセルに与えるように、構成され、前記出力要素は、前記別のセルに対する新たな一時縮小要素である、システム。
【請求項2】
前記それぞれの制御要素は、前記入力要素が前記入力ベクトルにおいて最後の入力要素であるか否かを示すように構成され、前記対応するセルは、前記入力要素が前記入力ベクトルにおいて最後の入力要素ではないことを前記それぞれの制御要素が示していることに応じて、前記出力要素を前記別のセルに与えるように構成される、請求項1に記載のシステム。
【請求項3】
前記対応するセルはさらに、前記入力要素が前記入力ベクトルにおいて最後の入力要素であることを前記それぞれの制御要素が示していることに応じて、前記それぞれの出力要素を前記出力回路に与えるように構成される、請求項2に記載のシステム。
【請求項4】
前記入力ベクトルの前記入力要素を格納するように構成された入力ベクトルレジスタと、
前記一時縮小要素を格納するように構成された一時縮小要素レジスタと、
前記制御ベクトルの前記制御要素を格納するように構成された制御ベクトルレジスタとをさらに備える、請求項1~3のいずれか1項に記載のシステム。
【請求項5】
前記ベクトル縮小演算は、最大値ベクトル縮小演算を含み、前記最大値ベクトル縮小演算を実行することは、前記出力要素として、前記入力要素および前記一時縮小要素の最大値を求めることを含む、請求項1~4のいずれか1項に記載のシステム。
【請求項6】
前記ベクトル縮小演算は、最小値ベクトル縮小演算を含み、前記最小値ベクトル縮小演算を実行することは、前記出力要素として、前記入力要素および前記一時縮小要素の最小値を求めることを含む、請求項1~5のいずれか1項に記載のシステム。
【請求項7】
前記ベクトル縮小演算は、合計ベクトル縮小演算を含み、前記合計ベクトル縮小演算を実行することは、前記出力要素として、前記入力要素および前記一時縮小要素の合計を求めることを含む、請求項1~6のいずれか1項に記載のシステム。
【請求項8】
前記ベクトル縮小演算は、積ベクトル縮小演算を含み、前記積ベクトル縮小演算を実行することは、前記出力要素として、前記入力要素および前記一時縮小要素の積を求めることを含む、請求項1~7のいずれか1項に記載のシステム。
【請求項9】
前記ベクトル縮小演算は、平均ベクトル縮小演算を含み、前記平均ベクトル縮小演算を実行することは、前記出力要素として、前記入力要素および前記一時縮小要素の平均を求めることを含む、請求項1~8のいずれか1項に記載のシステム。
【請求項10】
前記ベクトル縮小演算は、最大インデックスベクトル縮小演算を含み、前記最大インデックスベクトル縮小演算を実行することは、
前記入力ベクトルにおける前記入力要素の位置に対応する第1のインデックスを求めることと、
前記一時縮小要素に対応する第2のインデックスを示すデータを受けることと、
前記入力要素および前記一時縮小要素の最大値を求めることと、
前記最大値に基づいて、前記出力要素として、前記最大値に対応付けられる前記第1のインデックスまたは前記第2のインデックスのいずれかを生成することとを含む、請求項1~9のいずれか1項に記載のシステム。
【請求項11】
前記ベクトル縮小演算は、最小インデックスベクトル縮小演算を含み、前記最小インデックスベクトル縮小演算を実行することは、
前記入力ベクトルにおける前記入力要素の位置に対応する第1のインデックスを求めることと、
前記一時縮小要素に対応する第2のインデックスを示すデータを受けることと、
前記入力要素および前記一時縮小要素の最小値を求めることと、
前記最小値に基づいて、前記出力要素として、前記最小値に対応付けられる前記第1のインデックスまたは前記第2のインデックスのいずれかを生成することとを含む、請求項1~10のいずれか1項に記載のシステム。
【請求項12】
前記初期化値は、null値、正の無限、または負の無限のうちの少なくとも1つを含む、請求項1~11のいずれか1項に記載のシステム。
【請求項13】
複数のセルのうちの少なくとも1つのセルにおいてベクトル縮小演算を実行する方法であって、前記方法は、
入力ベクトルに含まれる複数の入力要素のうちの入力要素を受けるステップと、
前記少なくとも1つのセルに先行するセルによって実行されるベクトル縮小演算の出力または前記少なくとも1つのセルに先行する前記セルからの初期化値のいずれかである一時縮小要素を受けるステップと、
前記複数のセルの各々に対するそれぞれの制御要素を含む制御ベクトルに含まれる複数の制御要素のうちの制御要素を受けるステップとを含み、各それぞれの制御要素は、対応するセルによって生成されたベクトル縮小演算の結果を出力回路に出力するか、または前記対応するセルによって生成されたベクトル縮小演算の前記結果を前記複数のセルのうちの別のセルに与えるかを、前記対応するセルに示し、前記方法はさらに、
前記入力要素と前記一時縮小要素とを使用し前記制御要素に基づいて前記ベクトル縮小演算を実行することにより、出力要素を生成するステップと、
前記結果を前記出力回路に出力しないように示す前記制御要素に応答して、前記出力要素を前記複数のセルのうちの別のセルに与えるステップとを含み、前記出力要素は、前記別のセルに対する新たな一時縮小要素である、方法。
【請求項14】
前記それぞれの制御要素は、前記入力要素が前記入力ベクトルにおいて最後の入力要素であるか否かを示すように構成され、前記対応するセルは、前記入力要素が前記入力ベクトルにおいて最後の入力要素ではないことを前記制御要素が示していることに応じて、前記出力要素を前記別のセルに与えるように構成される、請求項13に記載の方法。
【請求項15】
前記対応するセルはさらに、前記入力要素が前記入力ベクトルにおいて最後の入力要素であることを前記それぞれの制御要素が示していることに応じて、前記それぞれの出力要素を前記出力回路に与えるように構成されている、請求項14に記載の方法。
【請求項16】
前記入力ベクトルの前記入力要素を格納するように構成された入力ベクトルレジスタと、
前記一時縮小要素を格納するように構成された一時縮小要素レジスタと、
前記制御ベクトルの前記制御要素を格納するように構成された制御ベクトルレジスタとをさらに備える、請求項13~15のいずれか1項に記載の方法。
【請求項17】
前記ベクトル縮小演算は、最大値ベクトル縮小演算、最小値ベクトル縮小演算、合計ベクトル縮小演算、積ベクトル縮小演算、または平均ベクトル縮小演算のうちの、少なくとも1つを含み、
前記最大値ベクトル縮小演算を実行することは、前記出力要素として、前記入力要素および前記一時縮小要素の最大値を求めることを含み、
前記最小値ベクトル縮小演算を実行することは、前記出力要素として、前記入力要素および前記一時縮小要素の最小値を求めることを含み、
前記合計ベクトル縮小演算を実行することは、前記出力要素として、前記入力要素および前記一時縮小要素の合計を求めることを含み、
前記積ベクトル縮小演算を実行することは、前記出力要素として、前記入力要素および前記一時縮小要素の積を求めることを含み、
前記平均ベクトル縮小演算を実行することは、前記出力要素として、前記入力要素および前記一時縮小要素の平均を求めることを含む、請求項13~16のいずれか1項に記載の方法。
【請求項18】
前記ベクトル縮小演算は、最大インデックスベクトル縮小演算を含み、前記最大インデックスベクトル縮小演算を実行することは、
前記入力ベクトルにおける前記入力要素の位置に対応する第1のインデックスを求めることと、
前記一時縮小要素に対応する第2のインデックスを示すデータを受けることと、
前記入力要素および前記一時縮小要素の最大値を求めることと、
前記最大値に基づいて、前記出力要素として、前記最大値に対応付けられる前記第1のインデックスまたは前記第2のインデックスのいずれかを生成することとを含む、請求項13~17のいずれか1項に記載の方法。
【請求項19】
前記ベクトル縮小演算は、最小インデックスベクトル縮小演算を含み、前記最小インデックスベクトル縮小演算を実行することは、
前記入力ベクトルにおける前記入力要素の位置に対応する第1のインデックスを求めることと、
前記一時縮小要素に対応する第2のインデックスを示すデータを受けることと、
前記入力要素および前記一時縮小要素の最小値を求めることと、
前記最小値に基づいて、前記出力要素として、前記最小値に対応付けられる前記第1のインデックスまたは前記第2のインデックスのいずれかを生成することとを含む、請求項13~18のいずれか1項に記載の方法。
【請求項20】
前記初期化値は、null値、正の無限、または負の無限のうちの少なくとも1つを含む、請求項13~19のいずれか1項に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
背景
本明細書は、ハードウェアにおけるベクトル縮小の実行に関する。
【背景技術】
【0002】
一般的に、ベクトル縮小は、入力ベクトルの要素に対して実行されて、スカラー出力、または入力ベクトルよりも次元が小さい出力ベクトルを生成する演算である。たとえば、合計ベクトル縮小演算は、入力ベクトルの要素の合計に等しいスカラー出力を生成することができる。いくつかの例では、入力ベクトルの複数のセグメントに対してそれぞれのベクトル縮小演算を実行することができる。セグメント化ベクトル縮小演算は、各要素が入力ベクトルのセグメントを縮小したものである出力ベクトルを生成する。たとえば、セグメント化合計ベクトル縮小演算は、各要素が入力ベクトルのセグメントの要素の合計である出力ベクトルを生成することができる。
【発明の概要】
【課題を解決するための手段】
【0003】
概要
概して、本明細書はベクトル縮小を計算する専用ハードウェア回路について説明する。
【0004】
概して、本明細書に記載の主題の1つの革新的な側面は、複数の要素からなる入力ベクトルを縮小するように構成されたベクトル縮小回路において実現することができる。ベクトル縮小回路は複数のセルを備える。入力ベクトルの指定された第1の要素を受ける指定された第1のセル以外の上記複数のセルの各々は、入力ベクトルの特定の要素を受け、複数のセルのうちの別のセルから一時縮小要素を受け、特定の要素と一時縮小要素とを用いて縮小演算を実行し、特定の要素と一時縮小要素とを用いて縮小演算を実行した結果を、新たな一時縮小要素として与えるように、構成されている。ベクトル縮小回路は、入力ベクトルの最後の要素を用いて縮小演算を実行した結果に相当する新たな一時縮小要素を、入力ベクトルを縮小したものとして出力するために与えるように構成された、出力回路を備える。
【0005】
実装形態は任意で以下の特徴のうちの1つ以上を含み得る。いくつかの実装形態において、縮小演算は最大値縮小演算であり、特定の要素と一時縮小要素とを用いて縮小演算を実行することは、特定の要素と一時縮小要素とを比較することと、少なくとも比較に基づき、特定の要素と一時縮小要素とを用いて縮小演算を実行した結果として、特定の要素と一時縮小要素とのうちで最大のものを判断することとを含む。縮小演算は最大値縮小演算であり、特定の要素と一時縮小要素とを用いて縮小演算を実行することは、特定の要素と一時縮小要素とを比較することと、少なくとも比較に基づき、特定の要素と一時縮小要素とを用いて縮小演算を実行した結果として、特定の要素と一時縮小要素とのうちで最大のものを判断することとを含む。
【0006】
実装形態はまた、任意で以下の特徴のうちの1つ以上を含み得る。いくつかの実装形態において、縮小演算は合計縮小演算であり、特定の要素と記一時縮小要素とを用いて縮小演算を実行することは、特定の要素と一時縮小要素とを用いて縮小演算を実行した結果として、特定の要素と一時縮小要素との合計を求めることを含む。縮小演算は積縮小演算であり、特定の要素と一時縮小要素とを用いて縮小演算を実行することは、特定の要素と一時縮小要素とを用いて縮小演算を実行した結果として、特定の要素と一時縮小要素との積を求めることを含む。
【0007】
実装形態はまた、任意で以下の特徴のうちの1つ以上を含み得る。いくつかの実装形態において、縮小演算は最大インデックス演算であり、特定の要素と一時縮小要素とを用いて縮小演算を実行することは、一時縮小要素に対応するインデックスを示すデータを受けることと、特定の要素と一時縮小要素とを比較することと、少なくとも比較に基づいて、特定の要素と一時縮小要素とのうちで最大のものを判断することと、少なくとも判断に基づき、特定の要素と一時縮小要素とを用いて縮小演算を実行した結果として、特定の要素に対応するインデックスまたは一時縮小要素に対応するインデックスのうちの一方を、識別することとを含む。
【0008】
実装形態はまた、任意で以下の特徴のうちの1つ以上を含み得る。いくつかの実装形態において、縮小演算は最小インデックス演算であり、特定の要素と一時縮小要素とを用いて縮小演算を実行することは、一時縮小要素に対応するインデックスを示すデータを受けることと、特定の要素と一時縮小要素とを比較することと、少なくとも比較に基づいて、特定の要素と一時縮小要素とのうちで最小のものを判断することと、少なくとも判断に基づき、特定の要素と一時縮小要素とを用いて縮小演算を実行した結果として、特定の要素に対応するインデックスまたは一時縮小要素に対応するインデックスのうちの一方を、識別することとを含む。
【0009】
実装形態はまた、任意で以下の特徴のうちの1つ以上を含み得る。いくつかの実装形態において、入力ベクトルの特定の要素を、要素のスタッガード入力として受ける。入力ベクトルは、複数の要素からなる複数のセグメントを含むものとして識別される。入力ベクトルの特定の要素は、入力ベクトルの特定のセグメントの指定された最後の要素であり、入力ベクトルの指定された第1の要素を受ける指定された第1のセル以外の複数のセルの各々は、出力回路に対し、入力ベクトルの特定のセグメントを縮小したものとして、入力ベクトルの特定のセグメントの指定された最後の要素と一時縮小要素とを用いて縮小演算を実行した結果を与えるように構成される。入力ベクトルの特定のセグメントの指定された最後の要素と一時縮小要素とを用いて縮小演算を実行した結果を、新たな一時縮小要素として与えることは、複数のセルのうちの別のセルに、新たな一時縮小要素として、プレースホルダー信号を与えることを含む。出力回路は、入力ベクトルを縮小したものとして出力するために、複数の要素を与えるように構成され、複数の要素の各々は、入力ベクトルのセグメントの指定された最後の要素を用いて縮小演算を実行した結果に相当する新たな一時縮小要素である。出力回路は、入力ベクトルを縮小したものとして出力するために、複数の要素を含む出力ベクトルを与えるように構成されている。
【0010】
実装形態はまた、任意で以下の特徴のうちの1つ以上を含み得る。いくつかの実装形態において、ベクトル縮小回路は、複数の要素からなる制御ベクトルを受けるように構成された制御レジスタを備え、要素からなる制御ベクトルは、入力ベクトルの要素からなる複数のセグメントを指定する。特定の要素と一時縮小要素とを用いて縮小演算を実行した結果を、新たな一時縮小要素として与えることは、特定の要素に対応する制御ベクトルの特定の要素を受けることと、少なくとも制御ベクトルの特定の要素に基づいて、特定の要素は入力ベクトルの特定のセグメントの最後の要素として指定されると判断することと、少なくとも判断に基づいて、出力回路に対し、入力ベクトルの特定のセグメントの最後の要素として指定された特定の要素と、一時縮小要素とを用いて縮小演算を実行した結果を、入力ベクトルの特定のセグメントを縮小したものとして与えることとを含む。
【0011】
実装形態はまた、任意で以下の特徴のうちの1つ以上を含み得る。いくつかの実装形態において、特定の要素と一時縮小要素とを用いて縮小演算を実行した結果を、新たな一時縮小要素として与えることは、特定の要素に対応する制御ベクトルの特定の要素を受けることと、少なくとも制御ベクトルの特定の要素に基づいて、特定の要素は入力ベクトルの
特定のセグメントの最後の要素として指定されると判断することと、少なくとも判断に基づいて、複数のセルのうちの別のセルに対し、プレースホルダー信号を与えることとを含む。特定の要素と一時縮小要素とを用いて縮小演算を実行した結果を、新たな一時縮小要素として与えることは、特定の要素に対応する制御ベクトルの特定の要素を受けることと、少なくとも制御ベクトルの特定の要素に基づいて、特定の要素は入力ベクトルの特定のセグメントの最後の要素として指定されないと判断することと、少なくとも判断に基づいて、複数のセルのうちの別のセルに対し、入力ベクトルの特定のセグメントの最後の要素として指定されない特定の要素と、一時縮小要素とを用いて縮小演算を実行した結果を、新たな一時縮小要素として与えることとを含む。
【0012】
実装形態はまた、任意で以下の特徴のうちの1つ以上を含み得る。いくつかの実装形態において、出力回路は、ベクトルまたは行列の置換を計算するように構成された置換回路に対し、入力ベクトルを縮小したものを与える。複数のセルの各々は、特定の要素と一時縮小要素とを用いて実行する縮小演算のタイプを指定する制御信号を受けるように構成されている。一時縮小要素は、入力ベクトルの特定の要素に先行する前記入力ベクトルの要素に対して指定された縮小演算を実行した結果に相当する。
【0013】
本願に記載の主題の特定の実施形態は、以下の利点のうちの1つ以上を得るために実現することができる。ベクトル縮小は、専用ハードウェア回路によりハードウェアで実行することができる。専用ハードウェア回路は、汎用プロセッサ(たとえばGPUまたはCPU)よりも少ないサイクルでベクトル縮小を実行することができる。加えて、専用ハードウェア回路を用いてハードウェアでベクトル縮小を計算することにより、ベクトル縮小を、ホストコンピュータにデータを送り返すことなく、すなわち、計算の少なくとも一部をオフチップまたはソフトウェアで実行することなく、実行することが可能である。結果として、専用ハードウェア回路よりも多い汎用プロセッサ(たとえばGPUまたはCPU)サイクル数の実行を要する高コストの計算となり得るオフチップまたはソフトウェアでのベクトル縮小計算において生じる処理遅延は、回避される。
【0014】
ベクトル縮小を計算するように特別に設計されたハードウェア回路を用いることにより、一般的な行列もしくはベクトル処理ハードウェア回路においてベクトル縮小を実行するシステムよりも、たとえば、さらに行列畳み込みもしくはその他の行列-ベクトル計算を実行するように構成されているシステムよりも、または、たとえばベクトル縮小および行列転置計算双方を実行するように構成されている、別の専用ハードウェア回路においてベクトル縮小を実行するシステムよりも、高い効率で処理を行うことが可能である。専用ハードウェア回路上でベクトル縮小演算を実現することにより、他の行列-ベクトル計算機能または効率に配慮することなくベクトル縮小を効率的に処理し、かつ、その他の行列またはベクトル処理回路をその他の行列またはベクトル計算を実行するために確保することにより、ハードウェアにおける行列-ベクトル計算の効率を包括的に高める設計が、可能である。
【0015】
本明細書の主題の1つ以上の実施形態の詳細が添付の図面および以下の説明に記載される。この主題のその他の特徴、側面、および利点は、この説明、図面、および請求項から明らかになるであろう。
【図面の簡単な説明】
【0016】
図1】行列-ベクトル処理システムの一例を示す図である。
図2】ベクトル縮小ユニットを含む行列-ベクトル処理システムの一例を示す図である。
図3】行列-ベクトル処理システム内のベクトル縮小ユニットのアーキテクチャの一例を示す図である。
図4】行列-ベクトル処理システム内のベクトル縮小ユニットのアーキテクチャの一例を示す図である。
図5】行列-ベクトル処理システム内のベクトル縮小ユニットのセルのアーキテクチャの一例を示す図である。
図6】行列-ベクトル処理システムにおいてベクトル縮小を実行する方法の一例のフロー図である。
図7A】行列-ベクトル処理システム内のベクトル縮小ユニットを用いるベクトル縮小の一例を示す図である。
図7B】行列-ベクトル処理システム内のベクトル縮小ユニットを用いるベクトル縮小の一例を示す図である。
【発明を実施するための形態】
【0017】
各種図面における同様の参照番号および名称は同様の要素を示す。
詳細な説明
ベクトル縮小は、複数の要素からなる入力ベクトルに対して実行されることにより、スカラーである出力、または入力ベクトルよりも小さいすなわち低次元の複数の要素からなるベクトルである出力を生成するための、演算である。たとえば、合計ベクトル縮小演算は、入力ベクトルの要素の合計であるスカラー出力を生成する。別の例として、最大値または最小値ベクトル縮小演算はそれぞれ、入力ベクトルの要素のうちの最大または入力ベクトルの要素のうちの最小である、スカラー出力を生成する。同様に、最大インデックスまたは最小インデックスベクトル縮小演算はそれぞれ、入力ベクトルの最大値または入力ベクトルの最小値の、入力ベクトルのインデックスを示す出力を生成する。その他のベクトル縮小演算が可能であり、たとえば、入力ベクトルの要素の積に相当するスカラー出力を生成する積ベクトル縮小演算、入力ベクトルの要素の算術平均に相当するスカラー出力を生成する平均ベクトル縮小演算などである。
【0018】
いくつかの実装形態において、入力ベクトルをセグメント化してもよく、入力ベクトルのセグメントのうちの1つ以上に対してそれぞれのベクトル縮小演算を実行してもよい。入力ベクトルの複数のセグメント各々に対して対応するベクトル縮小演算を実行することにより、出力ベクトルを生成する。出力ベクトルの各要素は、入力ベクトルの対応するセグメントに対してベクトル縮小演算を実行した結果に相当する。たとえば、3つのセグメントに分割した入力ベクトルに対して実行したベクトル縮小演算の出力は、3つの要素からなる出力ベクトルであり、この出力ベクトルの各要素は、入力ベクトルのそれぞれのセグメントに対してベクトル縮小演算を適用した結果である。
【0019】
ベクトル縮小は、線形代数計算においておよびその他実世界の応用例のためのデータ解析において頻繁に計算される。たとえば、ベクトル縮小は、たとえば機械学習プロセスの一部として、ニューラルネットワークを訓練するときに計算することができる。これらの例において、ベクトル縮小は、ニューラルネットワークを訓練するときに勾配を逆伝搬させるために使用することができる。また、ベクトル縮小は、ニューラルネットワークの層の出力に対して実行することもできる。ベクトル縮小の結果は、ニューラルネットワークの別の層に対する入力として与えることができる、または、ニューラルネットワークからの出力として与えることができる。ベクトル縮小のその他の応用例は、デジタルオーディオまたはビデオデコードにおけるマルチメディア処理を含む。アナログおよびデジタル送信、レーダ、ならびにソナーの分野等における信号処理も、ベクトル縮小技術を頻繁に利用することにより、たとえば受信もしくは送信信号における最大または最小を特定する。
【0020】
いくつかの実装形態において、入力行列をベクトルに分解してもよく、ベクトル縮小を入力行列のベクトルに個別に適用してもよい。たとえば、行列として表された、たとえば行列の要素が画像の画素に対応する画像を、ベクトルに分解することができる。平均ベク
トル縮小演算のようなベクトル縮小演算を、入力行列のベクトルに適用することにより、たとえば画像の平滑化を行うことまたは画像の画素サイズを減じることができる。
【0021】
本明細書では、入力ベクトルに対してベクトル縮小演算を実行する専用ハードウェア回路について説明する。この専用ハードウェア回路は、入力ベクトルを縮小したものに相当するスカラーまたはベクトル出力を生成することができる。
【0022】
図1は一例としての行列-ベクトル処理システム100を示す。行列-ベクトル処理システム100は、下記のシステム、コンポーネント、および技術を実現することができる1つ以上の場所において1つ以上のコンピュータとして実現されるシステムの一例である。
【0023】
行列-ベクトル処理システム100は、専用ハードウェア回路110を用いてベクトルまたは行列計算を実行するシステムである。専用ハードウェア回路110は、ハードウェアにおいてベクトル縮小を計算するように構成されたベクトル縮小ユニット120を含む、ベクトルまたは行列計算を実行するための集積回路である。一例としての専用ハードウェア回路110については、図2を参照しながらより詳細に説明する。
【0024】
行列-ベクトル処理システム100は、専用ハードウェア回路110上でベクトルまたは行列計算を実行することを求める要求を受け、このベクトルまたは行列計算を実行するように専用ハードウェア回路110を制御し、専用ハードウェア回路110が生成したベクトルまたは行列計算の結果を出力する。たとえば、行列-ベクトル処理システム100は、入力ベクトルに対してベクトル縮小を実行することを求める要求を受けることができ、それに応じて、ベクトル縮小を計算し入力行列に対するベクトル縮小の計算結果を出力するように専用ハードウェア回路110を制御することができる。専用ハードウェア回路110は、ベクトル縮小に加えて他の計算を実行できるものであってもよい。たとえば、専用ハードウェア回路110はまた、たとえばニューラルネットワークの層を処理するために、ベクトルもしくは行列畳み込み、ベクトルもしくは行列算術、ベクトルもしくは行列転置、または、その他のベクトルもしくは行列計算のための、回路またはその他のハードウェアコンポーネントを含み得る。このように、専用ハードウェア回路110は、専用ハードウェア回路110の他のコンポーネントを用いるより大きな計算の実行の一部としてベクトル縮小を計算することができる。
【0025】
専用ハードウェア回路110上で行列またはベクトル計算を実現するために、行列-ベクトル処理システム100は行列-ベクトル処理エンジン150を含む。行列-ベクトル処理エンジン150は、1つ以上の物理的な場所において1つ以上のコンピュータ上の1つ以上のコンピュータプログラムとして実現することができる。
【0026】
行列-ベクトル処理エンジン150は、要求に応じてベクトルまたは行列計算を実行するよう専用ハードウェア回路110を制御するために、命令を生成する、制御信号を与える、またはデータを導くことができる。たとえば、行列-ベクトル処理システム100は、入力ベクトルまたは行列に関数を適用することを求める要求を受けてもよく、行列-ベクトル処理エンジン150は、専用ハードウェア回路110上で入力ベクトルまたは行列に上記関数を適用するのに必要な計算を実行するための特定の命令または制御信号を決定することができる。行列-ベクトル処理エンジン150はまた、たとえば必要な計算を実行するために専用ハードウェア回路110が使用できる入力ベクトルまたは行列に対応するデータを導くこともできる。
【0027】
行列-ベクトル処理エンジン150は、ベクトルまたは行列要求を実現するのに必要な計算を決定すると、この必要な計算を実行するよう専用ハードウェア回路110を制御す
る。たとえば、行列-ベクトル処理エンジン150は、入力ベクトルまたは行列のような、ベクトルまたは行列計算を実行するためのデータを、専用ハードウェア回路110に導いてもよい。行列-ベクトル処理エンジン150は、専用ハードウェア回路110が行列-ベクトル処理エンジン150から受けたデータに対して必要な計算を実行するよう専用ハードウェア回路110を制御するための命令または制御信号を、専用ハードウェア回路110に送信してもよい。
【0028】
たとえば、行列-ベクトル処理システム100は、ベクトルまたは行列計算の実行を求める要求を受けることができる。要求される計算は、比較的単純な、たとえば単純な線形代数計算の実行を求める要求、または、より複雑な関数、たとえばニューラルネットワークを訓練するために勾配を逆伝搬させるための関数である場合がある。要求される計算は、1つ以上のベクトル縮小のような、1つ以上の演算を求める場合がある。この要求はまた、計算を実行する対象である1つ以上のベクトルまたは行列、すなわち、関数を適用する1つ以上の入力ベクトルまたは行列を、特定するまたは含む場合がある。行列-ベクトル処理エンジン150は、この要求を受けることができ、入力ベクトルまたは行列に対して計算を実行するための制御信号または命令を生成することができる。行列-ベクトル処理エンジン150はさらに、入力ベクトルまたは行列を専用ハードウェア回路110に導くことができる。
【0029】
たとえば、ベクトル縮小を、たとえばより大きな計算の一部として計算するために、行列-ベクトル処理エンジン150は、受けた入力ベクトルを、または入力行列をそのベクトル成分に分割することによって得られた複数のベクトルを、専用ハードウェア回路110に与えてもよい。行列-ベクトル処理エンジン150はまた、ベクトル縮小ユニット120上でベクトル縮小を開始するための制御信号またはベクトル縮小を実行するためのパラメータを、専用ハードウェア回路110に与えてもよい。ベクトル縮小ユニット120は、専用ハードウェア回路110に与えられた、1つまたは複数の入力ベクトルと、制御信号とを受けることができる。ベクトル縮小ユニット120は、制御信号を受けたことに応じてベクトル縮小を実行することができ、ベクトル縮小を実行した結果を出力することができる。ベクトル縮小ユニット120が生成した結果を、要求された計算を実行するために専用ハードウェア回路110が実行する他の演算において使用する場合もある。専用ハードウェア回路110は要求された計算の結果を提供することができ、行列-ベクトル処理システム100は要求に応じてこの結果を返すことができる。
【0030】
図2は、ベクトル縮小を実行することが可能な、一例としての専用ハードウェア回路200を示す。いくつかの実装形態において、回路200は、図示されていないが、その他のベクトルまたは行列計算を実行するための追加のコンポーネントを含み得る。その他のベクトルまたは行列を実行するための追加のコンポーネントも、図2に示されるコンポーネントのうちの1つ以上を利用することができる。
【0031】
回路200はホストインターフェイス202を含む。ホストインターフェイス202は、ベクトル縮小を含むベクトルまたは行列計算を実行するための制御信号、命令、または引数を受けることができる。引数は、たとえば、ベクトル縮小を実行する対象である1つ以上のベクトルを含み得る。ホストインターフェイス202が受ける命令または制御信号は、回路200がベクトル縮小を実行できるよう、受けた引数を格納する場所を示す命令を含むことができる、または、要求されたベクトル縮小に関連するパラメータを含み得る、または、その他の情報、たとえばベクトル縮小の出力を格納するためのメモリ場所を含み得る。ホストインターフェイス202が受ける制御信号は、ベクトル縮小計算を開始するよう回路200を制御することもできる。
【0032】
いくつかの実装形態において、ホストインターフェイス202は命令をシーケンサ20
6に与えることができ、シーケンサ206は、この命令を、ベクトル縮小を実行するよう回路200を制御するローレベル制御信号に変換する。たとえば、シーケンサ206が生成する制御信号は、回路200内のデータフローを管理することができる、たとえば、入力ベクトルをどこに格納すべきであるか、または、そうでなければデータを回路200を通してどのように導くべきであるかを、管理することができる。シーケンサ206は、回路200上でベクトル縮小計算を開始することを求める命令を受けることができ、ベクトル縮小計算を開始するようベクトル縮小ユニット212を制御するための制御信号を生成することができる。
【0033】
シーケンサ206は、制御信号をメモリ208およびベクトル縮小ユニット212に送ることができる。いくつかの実装形態において、シーケンサ206はまた、制御信号をダイレクトメモリアクセスエンジン204に送る。いくつかの実装形態において、シーケンサ206は制御信号を生成するプロセッサである。シーケンサ206は、制御信号を適切なときに回路200の適切なコンポーネントに送るために制御信号を調整することができる。いくつかの例において、シーケンサ206は、回路200の外部から、たとえば図1のベクトル-行列処理エンジン150から送られてきた制御信号を、ホストインターフェイス202から受け、よってシーケンサ206が制御信号を生成することを求められない場合がある。このような例において、シーケンサ206は、受けた制御信号を適切なときに回路200のコンポーネントに送ればよい。加えて、回路200に制御信号が与えられる場合、シーケンサ206は、回路200の任意選択のコンポーネントであってもよい、すなわち、回路200の外部のコンポーネント、たとえば行列-ベクトル処理エンジン150が制御信号を適切なときに与えて、ベクトル縮小の実行のための演算を含む演算を実行するように回路200を制御すればよい。
【0034】
ホストインターフェイス202は、引数たとえば入力ベクトルを、ダイレクトメモリアクセスエンジン204に送ることができる。ダイレクトメモリアクセスエンジン204はこの引数をメモリ208に格納することができる。
【0035】
メモリ208は、ダイナミックメモリ、たとえばダイナミックランダムアクセスメモリ(DRAM)であってもよく、またはスタティックメモリ、たとえばスタティックランダムアクセスメモリ(SRAM)であってもよい。いくつかの実装形態において、メモリ208をメモリバッファとして用いてもよい。メモリ208は、回路200上にあってもよくまたは回路200の外部にあってもよい。これは、回路200に入力された引数たとえばベクトルを、または、ベクトル縮小を実行するためのパラメータを格納することができる。メモリ208はまた、ベクトル縮小ユニット212の出力、すなわち入力ベクトルに対してベクトル縮小を実行した結果を格納することもできる。いくつかの実装形態において、ダイレクトメモリアクセスエンジン204は、メモリ208からの読出しを行うことができる。たとえば、ダイレクトメモリアクセスエンジン204は、メモリ208からの読出しを行うことにより、回路200から、入力ベクトルに対するベクトル縮小の実行結果を返すことができる。
【0036】
ベクトル縮小ユニット212は、メモリ208の引数にアクセスすることができる。たとえば、ダイレクトメモリアクセスエンジン204がメモリ208に入力ベクトルを格納した後に、入力ベクトルをベクトル縮小ユニット212に与えるまたはベクトル縮小ユニット212がアクセスできるようにして、ベクトル縮小ユニット212が入力ベクトルに対するベクトル縮小のための演算を実行できるようにしてもよい。
【0037】
ベクトル縮小ユニット212は、ベクトル縮小を計算するための回路である。いくつかの実装形態において、ベクトル縮小ユニット212は、受けた引数たとえば入力ベクトルと、ベクトル縮小のタイプを指定する情報たとえばベクトル縮小が合計ベクトル縮小であ
るべきか最大値もしくは最小値ベクトル縮小であるべきか等を指定する情報とに基づいて、ベクトル縮小を計算するように設計される。ベクトル縮小のタイプを指定する情報は、その他の情報たとえばセグメント化ベクトル縮小を実行するための情報を含み得る。いくつかの実装形態において、ベクトル縮小ユニット212は、ベクトル縮小ユニット212がベクトル縮小を実行するために引数すなわち入力ベクトルのみが必要となるような、予め定められたベクトル縮小演算を実行するように構成されてもよい。たとえば、ベクトル縮小ユニット212は、入力ベクトルの予め定められた要素に対し、合計ベクトル縮小演算またはセグメントベクトル縮小のみを実行するように構成されてもよい。この情報を受けた後に、ベクトル縮小ユニット212は、ベクトル縮小ユニット212において必要な入力すなわち入力ベクトルとベクトル縮小パラメータとを受けたらベクトル縮小がさもなければ自動化されるよう、追加の制御信号または入力を受けることなくベクトル縮小を実行してもよい。このような実装形態において、ベクトル縮小演算が一旦開始されると、ベクトル縮小ユニット212は受けた情報に基づいて、オフチップからの追加情報を要求することなく、ベクトル縮小全体を実行することができる。いくつかの実装形態において、ベクトル縮小演算を、ベクトル縮小ユニット212が必要な情報を受けたことに応じて、トリガしてもよい、すなわち開始信号またはその他のトリガは不要である。その他の実装形態では、開始信号またはその他の信号が、ベクトル縮小演算を実行するようベクトル縮小ユニット212をトリガしてもよい。
【0038】
一般的に、ベクトル縮小を計算するために、ベクトル縮小ユニット212は、実行するベクトル縮小演算のタイプを示す、たとえば、合計ベクトル縮小、最大もしくは最小値ベクトル縮小、または最大もしくは最小インデックスベクトル縮小を示す制御信号を受ける。たとえば、ベクトル縮小ユニット212は、制御信号をシーケンサ206から受けることができる。入力ベクトルを、たとえばメモリ208から、スタッガード(staggered)
データストリームとして受ける。ベクトル縮小ユニット212は、入力ベクトルの要素に対し、制御信号が示すベクトル縮小演算を実行する。たとえば、ベクトル縮小ユニット212は、入力ベクトルの各要素を受けるとベクトル縮小演算を実行してもよい。これに代えて、ベクトル縮小エンジン212は、入力ベクトルのすべての要素を受けてもよく、または入力ベクトルの要素の一部を受けてもよく、上記入力ベクトルの要素または入力ベクトルの一部に対してこれを受けた後にベクトル縮小演算を実行してもよい。いくつかの例において、ベクトル縮小演算の結果は、たとえば合計ベクトル縮小の場合、ベクトル縮小演算を適用する入力ベクトルの要素の順序に依存しない。このような例において、ベクトル縮小ユニット212は、入力ベクトルの要素に対し、入力ベクトルにおける要素の配列順序と異なる順序で、または、ベクトル縮小ユニット212がこれらの要素を受けた順序と異なる順序で、ベクトル縮小演算を実行すると判断してもよい。ベクトル縮小演算が入力ベクトルのすべての要素に適用された後に、ベクトル縮小ユニット212は、ベクトル縮小の結果を、たとえばメモリ208に、または専用ハードウェア回路200の別のコンポーネントに出力することができる。
【0039】
ベクトル縮小ユニット212への入力はスタッガード入力である可能性があるので、場合によっては、ベクトル縮小ユニット212は複数の入力ベクトルに対してたとえばパイプライン方式でベクトル縮小を同時に実行することができる。すなわち、ベクトル縮小ユニット212において第1の入力ベクトルに対しベクトル縮小演算が実行されている間に、ベクトル縮小ユニット212は第2の入力ベクトルに対するベクトル縮小演算の実行を開始してもよい。加えて、いくつかの例において、行列が引数として回路200に与えられてもよい。入力行列を、たとえば、ともに入力行列を形成する行または列ベクトルを取得することにより、ベクトルに分解してもよい。ベクトル縮小ユニット212は、入力行列を形成するベクトルに対してベクトル縮小演算を実行することにより、ベクトル縮小結果のベクトルを生成することができる。結果のベクトルは、ベクトル縮小ユニット212の出力として、たとえば回路200の別のコンポーネントに、与えられてもよい。
【0040】
図3は、ベクトル縮小ユニット300のアーキテクチャの一例を示す。ベクトル縮小ユニット300は、行列-ベクトル処理システムの専用ハードウェア回路に、たとえば専用ハードウェア回路200のベクトル縮小ユニット212として含まれていてもよい。
【0041】
ベクトル縮小ユニット300の値ローダ310は、1つまたは複数の入力ベクトルに対応するデータを受ける。値ローダ310は各々、たとえば専用ハードウェア回路200のメモリ208から受けた、データのレーンに対応する。実際、データの各レーン、したがって各値ローダ310は、入力ベクトルまたは行列の異なる列または行に対応する。よって、図3においては値ローダ[0]~[3]のみを含みしたがって4×1以下のベクトルの縮小を可能にするものとして示されているが、その他の実装形態においてベクトル縮小ユニット300は多数の値ローダ310を含んでいてもよい。たとえば、128レーンのデータとして送信される128×128要素行列または128×1ベクトルに対して演算するように構成された専用ハードウェア回路は、対応する128の値ローダ310を含み得る。
【0042】
値ローダ310は、入力ベクトルに対応するデータをスタッガード状態で受けることができる。本明細書で使用されるスタッガードデータとは、複数のレーンにおいてオフセットを伴って送信されるデータであり、よって、各レーンのデータストリームは、別のレーンのデータストリームよりも数サイクル遅れている。たとえば、値ローダ[0]に対応する第1のレーンのデータストリームは、値ローダ[1]に対応する第2のレーンのデータストリームよりも1サイクル進んでいてもよい。これは、たとえば値ローダ310各々が受ける各レーンのデータストリームが整列しているフラットなデータとは異なる。たとえば、複数のレーンで送信される要素からなるベクトルを値ローダ310が同一のクロックサイクルで受けることになる。
【0043】
一般的に、ベクトル縮小ユニット300および、ベクトル縮小ユニット300を含む専用ハードウェア回路のその他のコンポーネントは、スタッガードのデータに対し、特定の演算を並列に実行することにより、より効率的に計算を実行することができるであろう。たとえば、図4および図7A図7Bに関してより詳細に示すように、スタッガードデータに対する処理により、ベクトル縮小ユニット300または行列転置もしくは行列畳み込みを実行するためのその他のコンポーネントは、特定の演算を並列に実行すること、または、連続する入力ベクトルまたは行列の処理を最適化することができる。たとえば、複数の入力ベクトルに対応するスタッガードデータに対する処理により、ベクトル縮小ユニット300は、複数の入力ベクトルに対するベクトル縮小演算を、同一のサイクル中に実行することができる。図4により詳細に示されるように、ベクトル縮小ユニット300は、スタッガードデータを、異なる入力ベクトルの要素が同一のサイクル中にベクトル縮小ユニット300に与えられるように、受けることができる。ベクトル縮小ユニット300は次に、1つのサイクル中に異なる入力ベクトルの縮小を計算するための演算を実行することができる。
【0044】
値ローダ310は、入力ベクトルに対応するデータを受け、このデータを入力レジスタ320に与える。特定の値ローダ310が受けたデータが入力ベクトルの要素または別の入力ベクトルの要素に対応していない場合、この値ローダ310は当該データを無視または破棄することができる。これらの場合において、入力レジスタ320は、この値ローダ310からデータを受けない可能性がある、またはnull、正、もしくは負の無限値を受ける可能性がある、またはこの値ローダ310から受けた要素が入力ベクトルの要素を含まないことを示すその他のデータを受ける可能性がある。たとえば、値ローダ310が3×1入力ベクトルを受けた場合、値ローダ[3]が受けた値は、入力ベクトルの要素に対応していないことを理由に、無視または破棄される可能性がある。しかしながら、値ロ
ーダ[3]が受けた値が、前の入力ベクトル、たとえばその第1の要素を3×1入力ベクトルの第1の要素よりも前に受けた4×1入力ベクトルに対応する場合、値ローダ[3]が受けた値は入力レジスタ320に与えることができる。
【0045】
いくつかの実装形態において、ベクトル縮小ユニット300は、縮小ユニット300がベクトル入力データを処理している間にのみベクトル縮小演算を実行するように構成されている。たとえば、ベクトル縮小演算を、入力ベクトルの第1の要素を受けたときにトリガしてもよい。これにより、回路の効率を、たとえば消費電力の削減によって改善することができ、別の入力ベクトルの要素に対応しない入力ベクトルの第1の要素の前に入力レジスタ320が受けたその他のデータが、入力ベクトルに対するベクトル縮小の実行結果に影響を与えないことを、保証することができる。たとえば、値ローダ310はスタッガードデータを受けるので、値ローダ[0]において入力ベクトルの第1の要素を受けたときにベクトル縮小演算がトリガされる場合、先行するサイクル中に受けたどのデータも入力ベクトルの縮小結果に影響を与えない。入力レジスタ320は、入力ベクトルに対応するデータを受けて格納する。たとえば、値ローダ310が入力ベクトルの要素を受けてこれらの要素を入力レジスタ320に送ると、これらの要素は入力レジスタに格納される。入力レジスタ320は、値ローダ310からデータを受けるために、値ローダ310の数以上の要素を含み得る。値ローダ310から受けるデータはスタッガードであるので、入力レジスタ320は、どの時点でも入力ベクトルの要素をすべて含むことはなく、むしろ、典型的には入力ベクトルの1つの要素のみを含む。加えて、データはスタッガードであるので、ベクトル縮小ユニット300が連続する入力ベクトルを受けた場合、入力レジスタ320は複数の入力ベクトルの要素を同時に含む可能性がある。
【0046】
ベクトル縮小ユニット300の計算ユニット330は、入力レジスタ320に格納されている要素を受けるかまたはこの要素にアクセスする。計算ユニット330は、各々が入力レジスタ320の要素にまたは特定の値ローダ310に対応する複数のセルを含み得る。たとえば、ベクトル縮小ユニット300が4つの値ローダ310を含む場合計算ユニット330はベクトル縮小演算を実行するために4つのセルを含み得る。
【0047】
計算ユニット330はまた、ベクトル縮小制御信号305と、制御レジスタ315からのデータとを受ける。ベクトル縮小制御信号305は、計算ユニット330が実行すべきベクトル縮小演算の特定のタイプを指定することができる。たとえば、ベクトル縮小制御信号305は、合計ベクトル縮小演算、最大値縮小演算、最小ベクトル縮小演算、最大インデックスベクトル縮小演算、最小インデックスベクトル縮小演算、積ベクトル縮小演算、平均ベクトル縮小演算、または、別のベクトル縮小演算を指定することができる。ベクトル縮小ユニット300は、ベクトル縮小制御信号305を、専用ハードウェア回路200のシーケンサ206から、行列-ベクトル処理システム100の行列-ベクトル処理エンジン150から、または別のソースから、受けることができる。
【0048】
制御レジスタ315は、制御ベクトルを受けて格納することができる。制御ベクトルは、受けた入力ベクトルに対して計算ユニット330がセグメント化ベクトル縮小を実行すべきか否かおよび如何にして実行すべきかを指定する。図4に関してより詳細に説明するように、制御ベクトルは、計算ユニット330のセルに制御信号として与えることができる要素を含む。これらの要素は、計算ユニット330の各セルが、このセル内で実行されたベクトル縮小演算の結果を計算ユニット330の別のセルに与えるべきであるのか、または、このセル内で実行されたベクトル縮小演算の結果を入力ベクトルのセグメントを縮小したものとして出力すべきであるのかを、示すことができる。言い換えると、制御ベクトルの各要素は、制御信号として対応するセルに与えることができ、入力ベクトルのセグメントのエンドポイントをこのセルが処理しているか否かを示す。
【0049】
ベクトル縮小演算の結果が、1つのセルから別のセルに与えられるとき、そのセルにおいてはセグメント化ベクトル縮小は発生しない。よって、たとえば、すべてのセルが、または最後のセルを除くすべてのセルが各々、そのセル内で実行されたベクトル縮小演算の結果を計算ユニット330の別のセルに与えるようにセルを制御する制御信号を受ける場合、ベクトル縮小制御信号305が示すベクトル縮小演算を、入力ベクトルの要素すべてに適用する。したがって、計算ユニット330の出力、たとえば計算ユニット330の最後のセルの出力は、入力ベクトル全体を縮小して1つの結果を生成する非セグメント化ベクトル縮小演算の結果である。
【0050】
計算ユニット330の特定のセルがベクトル縮小演算の結果を別のセルに与えないとき、すなわちセグメント化ベクトル縮小演算が発生しないとき、null、すなわちゼロ、または正もしくは負の無限等のプレースホルダー信号が、この特定のセルから計算ユニット330の別のセルに与えられてもよい。この結果は、特定のセルが受けた入力ベクトルの要素において生じるセグメント化縮小である。なぜなら、特定のセルが実行するベクトル縮小演算の結果は、この特定のセルが受ける入力ベクトルの要素を含めてこの要素までの入力ベクトルの要素に対してセグメント化ベクトル縮小を実行した結果として、出力されるからである。nullまたは正もしくは負の無限は、特定のセルから計算ユニット330の別のセルに与えられるので、入力ベクトルの残りの要素に対する新たなベクトル縮小計算を効果的に開始させることにより、入力ベクトルの残りの要素に対するセグメント化ベクトル縮小の第2の部分を生成する。
【0051】
計算ユニット330のセルは縮小演算を実行して入力ベクトル縮小の結果を生成する。各セルは入力ベクトルの特定の要素を処理することができる。そうするために、図4でより詳細に説明するように、セルは一時縮小要素を受ける。一時縮小要素は、計算ユニット330の先行するセルが実行したベクトル縮小演算の結果であるか、または、プレースホルダー信号もしくは初期化値、たとえばnullまたは正もしくは負の無限である。このセルはまた、入力ベクトルの特定の要素を受け、上記一時縮小要素と入力ベクトルの特定の要素とを用いて、ベクトル縮小制御信号305が指定するベクトル縮小演算を実行する。セグメント化縮小演算が要求されない場合、セルは、計算ユニット330の次のセルに、指定されたベクトル縮小演算の実行結果を与える。セグメント化縮小演算が要求された場合、セルは、プレースホルダー、たとえばnullまたは正もしくは負の無限を次のセルに与える。このセルはまた、上記入力ベクトルの特定の要素を含むこの要素までの入力ベクトルの要素に対するセグメント化ベクトル縮小の実行結果に対応する、指定されたベクトル縮小演算の実行結果を出力する。セグメント化ベクトル縮小演算が要求されない場合、入力ベクトルのすべての要素に対してベクトル縮小演算を実行した結果に相当する、入力ベクトルの最後の要素を用いて指定されたベクトル縮小演算を実行した結果を、出力のために提供してもよい。
【0052】
計算ユニット330が実行したベクトル縮小プロセスの出力を、値出力340が受ける。値出力340は、出力を受けてこれらの出力をスタッガード状に書き込むことができる。計算ユニット330のセルのうちのいずれもベクトル縮小の結果を提供するように構成できるので、ベクトル縮小ユニット300は、計算ユニット330のセルに対応する値出力[0]~[3]を含む。たとえば、計算ユニット330の第2のセルが、そのセルにおいてセグメント化ベクトル縮小をこのセルが実行すべきであることを示す信号を、制御レジスタ315から受けた場合計算ユニット330の第2のセルは、出力を値出力[1]に与えることができる。セグメント化ベクトル縮小が指示されなかった場合は、ベクトル縮小の結果を、出力のために、値出力[3]に対応する、計算ユニット330の最後のセルに、与えることができる。いくつかの例において、たった1つの値出力340が必要な場合があり、たとえば、計算ユニット330のセルからの出力はすべて、同一の値出力340に与えられる。セグメント化ベクトル縮小演算が要求された場合、値出力ベクトル縮小
ユニット300は結果のベクトルを出力することができ、このベクトルの各要素は、入力ベクトルのセグメントを縮小したものである。値出力340は、出力ベクトルの要素をレジスタ、たとえば出力レジスタに与えることができ、セグメント化入力ベクトル縮小の結果は、たとえばベクトル縮小ユニット330から出力されるスタッガード出力ベクトルとして、出力用にベクトルフォーマットで一緒に与えることができる。
【0053】
値出力340は、計算ユニット330からベクトル縮小結果を受け、専用ハードウェア回路のメモリ、たとえば、メモリ208に、専用ハードウェア回路の別のコンポーネント、たとえば行列もしくはベクトル置換(permute)ユニットに、または、オフチップの場
所に、たとえば行列-ベクトル処理エンジン150または行列-ベクトル処理システム100の外部の別の目的地に、出力することができる。
【0054】
図4は、ベクトル縮小ユニットの計算ユニットの、一例としてのアーキテクチャ400を示す。アーキテクチャ400は、たとえば図2のメモリ208と同様のメモリ410と、たとえば図3のベクトル縮小制御信号305と同様のベクトル縮小制御信号405と、たとえば図3の制御レジスタ315と同様の制御レジスタ415と、たとえば図3の値出力340と同様の値出力440とを含む。このアーキテクチャはまた、図3の計算ユニット330のセルに対応するセル430を含む。図4に示されるセルは直列接続されている、すなわちセル[0]はセル[1]に接続され、セル[1]はセル[2]に接続されるといったように直列接続されているが、その他の実装形態においてセル430は他の順序で接続されていてもよく、たとえば、セル[1]が、セル[0]以外のセルからデータを受け、データをセル[2]以外のセルに与えてもよい。
【0055】
セル430の各々は、メモリ410から、スタッガードデータのレーンを受ける。ある例において、セル430は、図4には示されていないが、図3の値ローダ310と同様の値入力から、データを受けることができる。たとえば、チャート450は、4つのセル[0]~[3]に対応する4つのレーン各々にデータが如何にしてスタッガード状に書き込まれるかを示すことができる。したがって、サイクル0においてセル[0]は入力ベクトル[0]の第1の要素を受けることができ、サイクル1においてセル[0]は入力ベクトル[1]の第1の要素を受けることができセル[1]は入力ベクトル[0]の第2の要素を受けることができ、以降同様に続く。
【0056】
各セル430はまた、実行すべきベクトル縮小演算を指定するベクトル縮小制御信号405を受ける。図4に示されるように、同一のベクトル縮小制御信号405をセル430各々に与えることができる。しかしながら、その他の実装形態において、異なるベクトル縮小制御信号を、セル430の各々にまたはそのサブセットに与えることができる。異なるベクトル縮小制御信号を異なるセル430に与えることにより、アーキテクチャ400が異なるタイプのベクトル縮小演算を同時に実行できるようにすることができる。たとえば、制御信号をセル430に与えることにより、第1の入力ベクトルに対する合計ベクトル縮小と第2の入力ベクトルに対する最大値ベクトル縮小とをセル430に実行させることができる。入力ベクトルがスタッガード状に入力されることにより、これらの異なるベクトル縮小演算をセル430が同時に実行できるようにしてもよい。同様に、セグメント化ベクトル縮小演算を実行する場合、入力ベクトルの第1のセグメントに対して第1のタイプのベクトル縮小演算、たとえば合計ベクトル縮小を実行し、入力ベクトルの第2のセグメントに対して第2のタイプのベクトル縮小演算、たとえば最大値ベクトル縮小演算を実行してもよい。いくつかの実装形態において、セル430は、1つのタイプのベクトル縮小演算を実行するように、または、入力ベクトルごとに同一の要素位置でベクトル縮小演算をセグメント化するように、構成される。これらの実装形態において、ベクトル縮小制御信号405または制御レジスタ415は、アーキテクチャ400の任意のコンポーネントであってもよい。
【0057】
また、各セル430は、アーキテクチャ400においてセグメント化ベクトル縮小を制御するための制御信号として作用する、制御レジスタ415に格納された制御ベクトルの要素を受ける。制御レジスタ415は、制御信号のベクトルを受けることができる、または、制御レジスタ415の特定の要素に格納する個々の制御信号を受けることができる。各制御信号は、セル430によって解釈される値を指定することにより、セル430がセグメント化ベクトル縮小演算をセル430において実行すべきかまたは非セグメント化ベクトル縮小演算をセル430において実行すべきかを、示すことができる。
【0058】
たとえば、セル430が制御レジスタ415から受けた値ゼロは、セル430がセグメント化ベクトル縮小演算をセル430において実行してはならないこと、すなわちセル430は入力ベクトルのセグメントのエンドポイントとして扱われるべき入力ベクトルの要素を受けていないことを、示すことができる。非セグメント化ベクトル縮小演算を実行するために、セル430は、初期化値またはプレースホルダー信号、たとえば、nullまたは正もしくは負の無限、または、前のセル430からの前のベクトル縮小演算の結果に対応する、図4において<値>として示されている一時縮小要素を受けることができる。セル430はまた、たとえば最大インデックスもしくは最小インデックスベクトル縮小演算の実行に使用する、スタッガード入力データのレーンに対応する特定のセル430を示す、図4において<インデックス>として示されているインデックスを、受けることができる。いくつかの実装形態において、インデックスはメモリ場所、たとえば入力ベクトルが格納されていたまたは格納されているメモリ208内の場所であってもよい。セル430はまた、メモリ410から入力ベクトルの要素を受ける。セル430は、ベクトル縮小制御信号405によって指定されたベクトル縮小演算を実行し、このベクトル縮小演算の結果と、任意でベクトル縮小演算から得られたインデックスとを、アーキテクチャ400の次のセル430に与える。任意で、セル430はまた、これらの結果を値出力440に与えることができる。次のセル430は、ベクトル縮小演算の結果をセル430から受けることができ、この結果を、次のセル430で、たとえば次のサイクルで実行するベクトル縮小演算において使用することができる。
【0059】
これに代えて、セル430が値1を受けた場合、セル430は、セグメント化ベクトル縮小演算を実行し、受けた入力ベクトルの要素を入力ベクトルのセグメントのエンドポイントとして扱うことができる。そうするために、セル430は、セル430において実行したベクトル縮小演算の結果を、受けた要素で終わる入力ベクトルのセグメントに対してベクトル縮小演算を実行した結果として、出力する。セグメント化ベクトル縮小演算を実行するために、セル430は、初期化値または前のセル430からの前のベクトル縮小演算の結果に対応する、一時縮小要素を受けることができる。セル430はまた、前のセル430からインデックスを受けることもできる。セル430はまた、メモリ410から入力ベクトルの要素を受ける。セル430は、ベクトル縮小制御信号405によって指定されたベクトル縮小演算を実行する。しかしながら、セル430は、結果をアーキテクチャ400の次のセル430に与えるのではなく、この結果をセグメント化ベクトル縮小演算の結果として値出力440のみに与える。セル430は、次のセル430に対し、nullまたは正もしくは負の無限を、すなわち次のセル430で開始すべき次のベクトル縮小のための初期化値またはプレースホルダー信号として、送る。
【0060】
たとえば、セル[1]は、セル[0]から、ベクトル縮小制御信号によって指定されたベクトル縮小演算をセル[0]が実行した結果に対応する、一時縮小要素を、受けることができる。セル[0]が実行したベクトル縮小演算の結果は、入力ベクトル[0]の第1の要素である可能性がある。たとえば、ベクトル縮小制御信号405が合計ベクトル縮小演算を指定した場合、セル[0]からセル[1]に出力される結果は、入力ベクトル[0]の第1の要素であろう。セル[1]はまた、入力ベクトル[0]の第2の要素を受けて
もよい。そうすると、セル[1]は、ベクトル縮小制御信号405が指定したベクトル縮小演算、たとえば合計ベクトル縮小演算を実行して結果を生成することができる。たとえば、指定されたベクトル縮小演算が合計ベクトル縮小演算である場合、結果は入力ベクトル[0]の第1の要素および第2の要素の合計である。
【0061】
制御レジスタ415の[1]位置から受けた制御信号に基づいて、セル[1]は、この結果をセル[2]にまたは値出力[1]にまたはこれら双方に与えることができる。たとえば、制御信号が、セル[1]に対し非セグメント化ベクトル縮小演算を指定する値ゼロである場合、セル[1]は、結果をセル[2]に与えることができ、任意でこの結果を値出力[1]にも与えて、たとえばベクトル縮小演算の中間結果を出力することができる。制御信号が、セル[1]に対しセグメント化ベクトル縮小演算を指定する値1である場合、セル[1]は、結果を値出力[1]に出力することにより、セグメント化ベクトル縮小演算の結果、たとえば入力ベクトル[0]の最初の2つの要素の合計を、出力する。しかしながら、セル[1]は、この結果を一時縮小要素としてセル[2]に出力しない。むしろ、セル[1]は、nullまたは正もしくは負の無限をセル[2]に与え、セル[2]は受けたこの値を一時縮小要素として使用する。よって、セル[2]が入力ベクトル[0]の第3の要素をメモリ410から受ける場合、セル[2]が実行するベクトル縮小演算は、入力ベクトル[0]の第2のセグメントに対する第2のベクトル縮小演算に対して実行される第1の演算であろう。ベクトル縮小演算の結果、すなわちセグメント化ベクトル縮小演算が実行された場合の結果は、値出力440に出力され、専用ハードウェア回路200のまたは行列-ベクトル処理システム100の他のコンポーネントに、与えることができる。
【0062】
ベクトル縮小制御信号405が示すベクトル縮小演算が最小インデックスベクトル縮小演算または最大インデックスベクトル縮小演算を指定している場合、セル430の各々は、スタッガード入力データの1レーンに対応する特定のセル430を示すインデックスを提供することができる。いくつかの例において、このようなインデックスは常に、ベクトル縮小演算が実行されるとセル430から出力されてもよいが、ベクトル縮小制御信号405が最大または最小インデックスベクトル縮小演算を指定しない限りは使用できるデータではないであろう。ベクトル縮小制御信号405がこれらのベクトル縮小演算のうちの1つを指定する場合、セル430の<値>出力および<インデックス>出力双方が、出力を正確に求めるのに必要であろう。たとえば、最大インデックスベクトル縮小演算が指定された場合、セル[0]はセル[1]に対し、セル[0]が一時縮小要素として受けた入力ベクトル[0]の第1の要素の値と、入力データの第1のレーンが現在最大値の要素を有するインデックスであることを示すインデックス[0]とを出力することができる。セル[1]はこの値をセル[0]から受け、セル[0]からのこの値を入力ベクトル[0]の第2の要素の値と比較することができる。入力ベクトル[0]の第2の要素の値が入力ベクトル[0]の第1の要素の値よりも大きい場合、セル[1]はセル[2]に、入力ベクトル[0]の第2の値を一時縮小要素として出力することができ、インデックス[1]をセル[2]に出力して、入力データの第2のレーンは現在最大値の要素を有するインデックスであることを示すことができる。このプロセスは、制御ベクトルがセグメント化ベクトル縮小演算を指定するのかまたは非セグメント化ベクトル縮小演算を指定するのかに応じて、各セル430において繰り返すことができる。ベクトル縮小演算の完了後、セル430は、一時縮小要素すなわち値を出力するのではなくインデックス値を値出力440に出力する。
【0063】
いくつかの例において、システムが使用する初期化要素は、ベクトル縮小制御信号405が指定するベクトル縮小演算によって決まり得る。たとえば、合計ベクトル縮小演算が指定された場合は、null値を初期化値として使用することができる。積ベクトル縮小演算が指定された場合は、単位値1を初期化値として使用することができる。最大値ベク
トル縮小演算または最大インデックスベクトル縮小演算が指定された場合は、負の無限を初期化要素として使用することができる。最小値ベクトル縮小演算または最小インデックスベクトル縮小演算が指定された場合は、正の無限を初期化要素として使用することができる。いくつかの例において、特定のベクトル縮小演算に使用する初期化値は、外部のベクトル縮小ユニット400から、たとえばベクトル縮小制御信号405と同様の第2の信号として受けた信号によって示されるまたは与えられる。その他の実装形態において、セル430は、ベクトル縮小制御信号405が指定するベクトル縮小演算に基づいて初期化要素を決定することが可能であってもよい。たとえば、セル430は、合計ベクトル縮小演算を指定する信号をセル430が受けたことに基づいて、初期化要素としてnullを使用すべきであると判断することができる。
【0064】
図5は、ベクトル縮小ユニットのセルの、一例としてのアーキテクチャ500を示す。たとえば、図4のセル430の各々は、アーキテクチャ500と同様のアーキテクチャを有していてもよい。
【0065】
この一例としてのアーキテクチャ500は、一時縮小要素を受ける一時縮小要素レジスタ502を含む。一時縮小要素は、別のセルから、たとえば図4のセル430のうちの別のセルから受けることができる。いくつかの例において、一時縮小要素レジスタ502は、たとえばnull、正の無限、または負の無限の値に初期化することができる。たとえば、ベクトル縮小ユニット400のセル[0]は、前のセルが実行したベクトル縮小演算の結果を受けないので、その一時縮小要素レジスタ502がゼロに初期化される場合がある。アーキテクチャ500はまた、入力ベクトルの要素を受ける入力ベクトル要素レジスタ504を含む。たとえば、ベクトル縮小ユニット400のセル[0]の入力ベクトル要素レジスタ504は、入力ベクトル[0]の第1の要素を受けて格納することができ、ベクトル縮小ユニット400のセル[1]の入力ベクトル要素レジスタ504は、入力ベクトル[0]の第2の要素を受けて格納することができ、以降同様に続く。
【0066】
一時縮小要素はマルチプレクサ508に与えることができ、入力ベクトルの要素はマルチプレクサ510に与えることができる。各マルチプレクサ508、510を、ベクトル縮小制御信号505によって制御してもよく、ベクトル縮小制御信号505は、それぞれの要素を特定の計算回路512、514、516に与えるようにマルチプレクサ508、510を制御するための選択信号として作用する。
【0067】
たとえば、ベクトル縮小制御信号505は、最大値ベクトル縮小演算または最小値ベクトル縮小演算が実行される予定であることを示すことができ、この信号505に応じて、マルチプレクサ508、510は一時縮小要素と入力ベクトル要素とを、要素を比較することによってこれらの要素の最小または最大を求めるように構成された比較回路512に与えることができる。同様に、ベクトル縮小制御信号505が、合計ベクトル縮小演算が実行される予定であることを示す場合、マルチプレクサ508、510は、この信号505を受けそれに応じて一時縮小要素と入力ベクトル要素とを、要素を合計するように構成された合計回路514に与えることができる。ベクトル縮小制御信号50が、積ベクトル縮小演算が実行される予定であることを示す場合、マルチプレクサ508、510は、一時縮小要素と入力ベクトル要素とを、要素の積を計算するように構成された乗算回路516に与えることができる。その他の計算回路、たとえばインデックス識別回路、算術平均を計算するための回路、またはそれ以外の計算回路も、アーキテクチャ500に含まれていてもよい。
【0068】
いくつかの実装形態において、セルは、1つのタイプのベクトル縮小演算を実行するように構成されてもよい。このような実装形態では、1つの計算回路、たとえば、比較回路512、合計回路514、または乗算回路516のうちの1つのみが、含まれていてもよ
い。加えて、このような実装形態において、特定のタイプのベクトル縮小演算を実行するようアーキテクチャ500に命令するためのベクトル縮小制御信号505は不要であろう。よって、ベクトル縮小制御信号505およびマルチプレクサ508、510は任意であってもよい。
【0069】
計算回路512、514、516で実行された計算の結果は、結果レジスタ520に出力される。結果レジスタ520は、制御信号515も受ける。制御信号515は、アーキテクチャ500を有する特定のセルに対応する図4の制御レジスタ415の要素であってもよい。たとえば、アーキテクチャ500がベクトル縮小ユニット400のセル[1]に対応する場合、制御信号515は、制御レジスタ415の[1]位置の要素に対応する信号であってもよい。
【0070】
結果レジスタ520は、制御信号515に基づいて、結果を1つ以上のコンポーネントに出力する。制御信号515が、セグメント化ベクトル縮小演算は行われない予定であることを示す、たとえば制御信号515がゼロである場合、結果レジスタ520は、計算回路512、514、516から受けた結果を、次のセルに、たとえば、次のセルの一時縮小要素レジスタで受けられるように、与えることができる。任意で、セグメント化ベクトル縮小演算が行われない予定である場合、結果レジスタ520は、結果を、たとえば図4の値出力440のうちの1つである、値出力にも出力することができる。
【0071】
制御信号515が、セグメント化ベクトル縮小演算が行われる予定であることを示す場合、結果レジスタ520は、計算回路512、514、516から受けた結果を、たとえば図4の値出力440である、値出力に与えることができる。結果レジスタは、次のセルにも、たとえば、次のセルの一時縮小要素レジスタにも、アーキテクチャ500に対応付けられたセルにおいて入力ベクトルのベクトル縮小をセグメント化するために、null、正の無限、または負の無限の値を、与えることができる。
【0072】
その他のセルアーキテクチャも可能である。いくつかの実装形態において、計算回路512、514、516のコンポーネントを直列に配置してもよい。たとえば、比較回路512は一時縮小要素と入力ベクトル要素とを受けてもよい。比較回路512の出力は合計回路514の入力として与えてもよく、合計回路514の出力は乗算回路516の入力として与えてもよく、乗算回路516の出力を結果レジスタ520に与えてもよい。このような実装形態において、ベクトル縮小制御信号505は、計算回路512、514、516の各コンポーネントを起動または作動停止状態にして、データに対し、ベクトル縮小演算のうちの1つのみが、計算回路512、514、516のコンポーネントを通過するときに実行されるようにしてもよい。このようなアーキテクチャは、ベクトル縮小制御信号505を同様に解釈するために計算回路512、514、516のコンポーネントを必要とするであろうが、マルチプレクサ508、510の必要性を低減するであろう。その他のアーキテクチャも本明細書の範囲に含まれる。
【0073】
図6は、入力ベクトルに対してベクトル縮小を実行するための、一例としてのプロセス600である。いくつかの例において、入力ベクトルは入力行列のベクトルであってもよい。一般的に、プロセス600は、専用ハードウェア回路、たとえば図1のベクトル縮小ユニット120を備える専用ハードウェア回路110を含む1つ以上のコンピュータからなるシステムによって実行することができる。
【0074】
入力ベクトルを縮小したものを生成するために、本システムは一連の動作(602~608)を実行する。たとえば、専用ハードウェア回路は複数のセルを含み得るものであり、入力ベクトルの指定された第1の要素を受ける指定された第1のセル以外、これら複数のセルの各々は、入力ベクトルの特定の要素に対して動作(602~608)を実行する
ことによってベクトル縮小を計算するように構成されている。いくつかの実装形態において、入力ベクトルの指定された第1の要素を受ける指定された第1のセルは、前のセルの出力を受けないので、動作(602~608)を実行しない。よって、指定された第1のセルは、入力ベクトルの、最初に指定された第1の要素を、システムにおける次のセルに与えるだけである。その他のセルの各々は、前のセルの出力を受け、一連の動作(602~608)を実行することによって、次のセルに与えられる、自身の出力を生成する。入力ベクトルの最後の要素に対応する、システムの最後のセルの出力は、指定されたベクトル縮小演算の実行結果である。
【0075】
セルは入力ベクトルの特定の要素を受ける(602)。たとえば、回路の特定のセルは、入力ベクトルの特定の要素を受けることができる。いくつかの実装形態において、第1のレジスタ、たとえば入力レジスタが、入力ベクトルの要素を受けるように構成されていてもよい。この入力ベクトルの要素を入力レジスタに与えるデータストリームをスタッガードにすることで、入力ベクトルに対応するデータを遅延させながら複数のレーンで受けるようにしてもよい。たとえば、サイクルごとに入力ベクトルの次の要素を入力レジスタで受けるように、データをスタッガードにしてもよい。入力レジスタが受けた入力ベクトルの特定の要素は、回路の特定のセルに与えられる。
【0076】
セルは、複数のセルのうちの別のセルから、一時縮小要素を受ける(604)。一時縮小要素は、入力ベクトルの特定の要素に先行する入力ベクトルの要素に対して縮小演算を実行した結果に相当し得る。たとえば、回路の特定のセルは、受けた入力ベクトルの特定の要素に先行する入力ベクトルの要素に対して縮小演算を実行した結果に相当する一時縮小要素を受けることができる。一時縮小要素は、回路の1つ以上のセルのうちの別のセルから受けることができ、たとえば、前のセルの出力であってもよい。セルは、このセルが入力ベクトルの特定の要素を受けるクロックサイクルと同一のクロックサイクル中に、または、このセルが入力ベクトルの特定の要素を受けるクロックサイクルよりも前のもしくは後のクロックサイクル中に、一時縮小要素を受けることができる。一例として、回路は、図4の入力ベクトル[0]に対してベクトル縮小演算を実行することができる。そうするために、入力ベクトル[0]の要素の各々は、対応するセル430で処理される。すなわち、入力ベクトル[0]の第1の要素はセル[0]で処理され、入力ベクトル[0]の第2の要素はセル[1]で処理され、以降同様である。このような例において、セル[2]が受ける一時縮小要素は、入力ベクトルの第1および第2の要素、すなわち、セル[2]が受ける入力ベクトルの第3の要素に先行する入力ベクトルの要素、に対して縮小演算を実行した結果に相当する。
【0077】
セルは、特定の要素と一時縮小要素とを用いて縮小演算を実行する(606)。たとえば、回路の特定のセルは、入力ベクトルの特定の要素と、この特定の要素に先行する入力ベクトルの要素に対し指定されたベクトル縮小演算を実行した結果に相当する一時縮小要素とを受けた後に、受けたデータに対し、制御信号によって指定されたベクトル縮小演算を実行することができる。再び図4の例を参照して、セル[2]は、入力ベクトル[0]の第3の要素と、一時縮小要素としてのセル[1]の出力とを受けた後に、これらの要素に対し、指定されたベクトル縮小演算を実行することができる。たとえば、指定されたベクトル縮小演算が合計ベクトル縮小演算である場合、セル[2]は、入力ベクトル[0]の第3の要素と、セル[1]の出力との合計を計算すればよい。
【0078】
いくつかの実装形態において、システムの特定のセルは、入力ベクトルの特定の要素と一時縮小要素とを用いて実行するベクトル縮小演算を指定する制御信号を受けることができる。いくつかの実装形態において、この制御信号は、複数のセル各々に対して同一であってもよい、すなわち、回路が受けた1つの制御信号がセル各々に与えられる。その他の実装形態において、回路の各セルは異なる制御信号を受けてもよい。これにより、回路の
互いに異なるセルが、それぞれ異なるベクトル縮小演算を同時に実行することができる。これは、セグメント化ベクトル縮小演算が入力ベクトルに対して実行される場合と同様である。このような実装形態において、セルに与えられる制御信号を、回路が、たとえばレジスタにおいてベクトルとして受けてもよく、このベクトルの各要素は制御信号として対応するセルに与えることができる。ベクトル縮小演算のタイプは、たとえば、合計ベクトル縮小演算、最大値ベクトル縮小演算、最小値ベクトル縮小演算、最大インデックスベクトル縮小演算、最小インデックスベクトル縮小演算、平均ベクトル縮小演算、積ベクトル縮小演算、または、その他任意のベクトル縮小演算であってもよい。
【0079】
セルは、指定された縮小演算を特定の要素と一時縮小要素とを用いて実行した結果を、新たな一時縮小要素として与える(608)。たとえば、回路の特定のセルは、指定された縮小演算を特定の要素と一時縮小要素とを用いて実行した結果を、新たな一時縮小要素として、複数のセルのうちの別のセルに与えることができる。再び図4の例を参照して、セル[2]は、入力ベクトル[0]の第3の要素とセル[1]から受けた一時縮小要素とに対し指定されたベクトル縮小演算を実行した後に、この指定されたベクトル縮小演算の結果を、回路のセル[3]に出力することができる。これに代えて、特定のセルが、入力ベクトルの最後の要素に対してベクトル縮小演算を実行したセルである場合、得られた一時縮小要素は、入力ベクトルに対してベクトル縮小を実行した結果に相当する出力として、与えることができる。
【0080】
システムは、入力ベクトルの最後の要素を用いて縮小演算を実行した結果に相当する新たな一時縮小要素を、入力ベクトルを縮小したものとして出力するために与える(610)。たとえば、ベクトル縮小回路は、入力ベクトルの最後の要素を用いてベクトル縮小演算を実行した結果を与えるための、出力回路、たとえば値出力440のような1つ以上の値出力を、含み得る。回路の各セルは、入力ベクトルのある要素と、入力ベクトルのこの特定の要素に先行する入力ベクトルの要素に対し指定されたベクトル縮小演算を実行した結果に相当する一時縮小要素とを用いて、ベクトル縮小演算を実行するので、入力ベクトルの最後の要素を用いる指定されたベクトル縮小演算の結果は、入力ベクトルのすべての要素に対して指定されたベクトル縮小演算を実行した結果であろう。したがって、この結果は、入力ベクトルを縮小したものに相当する。たとえば、アーキテクチャ400のセル[3]は、指定されたベクトル縮小演算を、第4の、すなわち最後の、入力ベクトル[0]の要素と、セル[2]の出力、すなわち先行するセルが出力した一時縮小要素とに対して実行することができる。セル[3]が実行したベクトル縮小演算の結果は、この入力ベクトル全体に対するベクトル縮小演算の結果となる。したがって、この結果を、たとえば値出力[3]に、入力ベクトルを縮小したものとして出力するために与えることができる。いくつかの実装形態において、たとえばベクトル縮小演算を入力ベクトルの複数のセグメントに対して実行する場合、入力ベクトルの最後の要素に対してベクトル縮小を実行した結果は、別のセルに与えることができる。これらの実装形態において、入力ベクトルセグメントの最後の要素に対してベクトル縮小を実行した結果は、この結果を新たな一時縮小要素として次のセルに与えるクロックサイクルと同一のクロックサイクル中に出力のために与えることができる、または、この結果を新たな一時縮小要素として次のセルに与えるときのクロックサイクルの前もしくは後のクロックサイクルにおいて出力のために与えることができる。
【0081】
まるで回路の1つ以上のセルがデータを順次受けて与えるかのように、たとえばセル[0]と入力ベクトル[0]の第1の要素で始まりセル[3]と入力ベクトル[0]の最後の要素で終わるかのように説明したが、その他の実装形態において、セルは入力ベクトルに対して異なる順序で演算を行ってもよい。これらの実装形態において、セルは、入力ベクトルの異なる要素に対して演算を行ってもよい、または、セルは、あるシーケンスにおいてこのセルの直前または直後のセルではない他のセルから/に、データを受ける/与え
てもよい。たとえば、図4のアーキテクチャ400において、セル[1]の出力を一時縮小要素としてセル[3]に与えてもよく、セル[3]の出力を一時縮小要素としてセル[2]に与えてもよい。これらの実装形態において、入力ベクトルの要素を処理する最後のセルの出力は、この入力ベクトルの縮小結果であろう。
【0082】
図7A図7Bは、行列-ベクトルプロセッサにおけるベクトル縮小の実行の一例を示す。いくつかの実装形態において、図7A図7Bの例は、ベクトル縮小ユニット120を含む専用ハードウェア回路110を特徴とする図1の行列-ベクトル処理システム100によって実行することができる。図7A図7Bに示される例では、合計ベクトル縮小演算が2つの入力ベクトルに対して実行される。第1の入力ベクトルはベクトル[1234]であり、第2の入力ベクトルはベクトル[5678]である。第1の入力ベクトルに対して実行される合計ベクトル縮小演算はセグメント化ベクトル縮小演算であり、この第1の入力ベクトルに対するベクトル縮小演算の結果は、第1の入力ベクトルの要素[12]と[34]との合計に相当する2要素ベクトルである。第2の入力ベクトルに対して実行される合計ベクトル縮小演算はセグメント化ベクトル縮小演算ではなく、この第2の入力ベクトルに対するベクトル縮小演算の結果は、第2の入力ベクトルの要素[5678]の合計に相当するスカラーとなる。
【0083】
図7A図7Bに示されるフレーム各々において、メモリ208を実現するために使用し得るたとえばDRAMまたはSRAMであるメモリ710は、スタッガードメモリとしてアクセスまたは読み出されてもよい。したがって、各フレームにおいて、スタッガードメモリの読み出しを実行し、入力ベクトルの要素を入力レジスタ720で受ける。入力レジスタ720は、たとえば図3の入力レジスタ320に対応していてもよい。入力レジスタ720は、受けた入力ベクトルの要素を、縮小ユニットセル730、たとえば図4のセル430に与える。図7A図7Bのフレームの各々は、縮小ユニットセル(前)730aにおいて、ベクトル縮小演算が実行される前の縮小ユニットセル730を示し、縮小ユニットセル(後)730bにおいて、ベクトル縮小演算が実行された後の縮小ユニットセル730を示す。また、図7A図7Bのフレームは制御レジスタ740を示し、ベクトル縮小ユニットを、セグメント化または非セグメント化ベクトル縮小演算を実行するように制御するための、制御レジスタ740の内容は、図4の制御レジスタ415の内容に相当する。入力ベクトルを縮小したものは、たとえば図4の値出力440と同様の、出力750に出力される。
【0084】
簡単に説明すると、図7Aに示されるフレーム(a)において、値1を有する第1の入力ベクトルの第1の要素がメモリ710から読み出されこれを入力レジスタ720で受ける。730aに示されるようにセル730はnullに初期化されているが、その他の実装形態においてセル730は正の無限、負の無限、または別の値に初期化されてもよい。制御レジスタ740は、第1の入力ベクトルのセグメント化ベクトル縮小演算を実現するための要素からなるベクトルを既に受けている。この要素からなるベクトルは[0101]であり制御レジスタ740に与えられ、要素からなるベクトルの各要素は、対応するセル730の制御信号である。制御レジスタ740の[0]位置はゼロである、すなわち、非セグメント化ベクトル縮小演算が実行されることを示しているので、セル730は、第1の入力ベクトルの第1の要素を受け、これとセル730内の現在の値とを合計し、その結果を次のセル730に与える。したがって、第1のセル730は、演算(Null)+1=1を実行し、フレーム(a)の730bに示されるように1を次のセル730に送る。730bに示されるように、第1のセルの内容はnullに初期化されてもよい。
【0085】
フレーム(b)において、入力レジスタ720は、値2を有する第1の入力ベクトルの第2の要素と、値5を有する第2の入力ベクトルの第1の要素とを受ける。第2のセル730の縮小ユニットは、現在格納している値と受けた第1の入力ベクトルの第2の要素と
を合計する、すなわち、演算(1)+2=3を実行する。第2のセル730に対する制御レジスタ740の要素は1である、すなわちセグメント化ベクトル縮小演算の実行を指定しているので、第2のセル730は、結果として得られた合計を、第2の出力750に出力する。加えて、第2のセル730はゼロを第3のセル730に出力する。いくつかの例において、第2のセル730は、第3のセル730に対し、異なる値、たとえば、null、正の無限または負の無限を出力してもよい。いくつかの例において、出力750は1つの出力であってもよく、たとえば、セル730はすべて同一の出力750に接続されてもよい。
【0086】
加えて、第1のセル730は、第2の入力ベクトルの第1の要素を受け、加算(Null)+5=5を実行し、その結果を記憶のために第2のセル730に出力する。よって、第2のセル730はフレーム(b)の730bに値5を格納する。図示のように、第1のセル730は、null、または別の値に再初期化されてもよい。
【0087】
フレーム(c)において、入力レジスタ720は、第1の入力ベクトルの第3の要素と、第2の入力ベクトルの第2の要素とを受ける。また、第1の入力ベクトルに対してセグメント化ベクトル縮小演算が実行されたので、制御レジスタ740は更新されて第2の入力ベクトルの非セグメント化ベクトル縮小演算のための要素を含む。したがって、制御レジスタ740の最後の要素のみが1であり、第2の入力ベクトルに対して1つの縮小出力のみが生成される。第3のセル730は、フレーム(c)の730aに示されるように値ゼロを格納し、値3を有する第1の入力ベクトルの第3の要素を受け、演算(0)+3=3を実行し、730bに示されるように、その結果を最後のセル730に格納する。第2のセル730は、730aに、値5を格納し、値6を有する第2の入力ベクトルの第2の要素を受け、演算(5)+6=11を実行し、730bに示されるように、その結果を第3のセル730に格納する。
【0088】
フレーム(d)において、入力レジスタ720の最後の要素は、値4を有する第1の入力ベクトルの最後の要素と、値7を有する第2の入力ベクトルの第3の要素とを受ける。最後のセル730は、第1の入力ベクトルの最後の要素を受け、これと最後のセル730に格納されている値との合計を計算し、すなわち演算(3)+4=7を実行し、1を格納する制御レジスタ740に基づいて、その結果を最後の出力750に出力する。第3のセル730は、第2の入力ベクトルの第3の要素を受け、これと第3のセル730に格納されている値との合計を計算し、すなわち演算(11)+7=18を実行し、その結果を、フレーム(d)の730bに示されるように最後のセル730に格納する。
【0089】
フレーム(e)において、入力レジスタ720は、値8を有する第2の入力ベクトルの最後の要素を受ける。この値は、最後のセル730に現在格納されている値に加算される、すなわち演算(18)+8=26が実行される。縮小ユニットの最後のセル730に対応する制御レジスタ740の最後の要素が1であるので、その結果は最後の出力750に出力される。したがって、入力ベクトル双方の合計ベクトル縮小が出力される。要素はセル730から読み出され、たとえば前のセル730の出力で置換されないので、セル730の内容はnullまたは別の値に再初期化されてもよい。
【0090】
本明細書に記載の主題の実施形態および機能的動作は、デジタル電子回路において、有形的に実現されたコンピュータソフトウェアまたはファームウェアにおいて、本明細書に開示されている構造およびその構造的均等物を含むコンピュータハードウェアにおいて、または、これらのうちの1つ以上を組み合わせたものにおいて、実現することができる。本明細書に記載の主題の実施形態は、1つ以上のコンピュータプログラムとして、すなわち、データ処理装置によって実行されるまたはデータ処理装置の動作を制御するための有形の非一時的なプログラムキャリア上で符号化されたコンピュータプログラム命令の1つ
以上のモジュールとして、実現することができる。これに代えてまたはこれに加えて、プログラム命令は、データ処理装置による実行のために適切な受信装置に送信される情報を符号化するために生成された、人為的に生成された伝搬信号、たとえばマシンによって生成された電気、光、または電磁信号上で符号化することができる。コンピュータ記憶媒体は、マシン読取可能記憶媒体、マシン読取可能記憶基盤、ランダムもしくはシリアルアクセスメモリデバイス、または、これらのうちの1つ以上を組み合わせたものであってもよい。
【0091】
「データ処理装置」という用語は、例としてプログラマブルプロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを含む、データ処理用のすべての種類の装置、デバイス、およびマシンを包含する。この装置は、専用論理回路たとえばFPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)を含み得る。この装置はまた、ハードウェアに加えて、当該コンピュータプログラムのために実行環境を作成するコード、たとえばプロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはこれらのうちの1つ以上の組み合わせを構成するコードを含み得る。
【0092】
コンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、モジュール、ソフトウェアモジュール、スクリプト、またはコードと呼ぶ、またはそういうものとして説明することもできる)は、コンパイルもしくはインタプリタ言語、または宣言型もしくは手続型言語を含む、任意のプログラミング言語形態で記述することができ、また、スタンドアロンプログラムとしてまたはモジュールとして、コンポーネント、サブルーチン、または計算環境で使用するのに適したその他のユニットを含む、任意の形態でデプロイすることができる。コンピュータプログラムはファイルシステム内のファイルに対応していてもよいがそうでなくてもよい。プログラムは、その他のプログラムまたはデータを保持する、たとえばマークアップ言語文書に保存されている1つ以上のスクリプトを保持するファイルの一部に、または当該プログラム専用の1つのファイルに、または連携している複数のファイル、たとえば1つ以上のモジュール、サブプログラム、またはコードの一部を保存する複数のファイルに、格納することができる。コンピュータプログラムは、1つの場所にある、または複数の場所に分散しており通信ネットワークによって相互接続されている、1つのコンピュータまたは複数のコンピュータ上で実行するためにデプロイすることができる。
【0093】
本明細書に記載のプロセスおよび論理フローは、入力データに対して作用し出力を生成することによって機能を果たすために1つ以上のコンピュータプログラムを実行する1つ以上のプログラマブルコンピュータによって実行することができる。プロセスおよび論理フローは、専用ロジック回路たとえばFPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)によって実行されてもよく、装置は、専用ロジック回路たとえばFPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)として実現されてもよい。
【0094】
コンピュータプログラムの実行に適したコンピュータは、一例として、汎用もしくは専用マイクロプロセッサまたはこれら双方に基づいていてもよく、または、その他任意の種類の中央処理装置に基づいていてもよい。一般的に、中央処理装置は、命令およびデータを、読み取り専用メモリまたはランダムアクセスメモリまたはこれら双方から受ける。コンピュータの必須要素は、命令を実施または実行するための中央処理装置と、命令およびデータを格納するための1つ以上のメモリデバイスとである。一般的に、コンピュータは、データを格納するための1つ以上の大量記憶装置たとえば磁気、光磁気ディスク、または光ディスクを含む、または、上記大量記憶装置からデータを受ける、これにデータを転送する、またはこれら双方のために、上記大量記憶装置に作動的に結合される。しかしな
がら、コンピュータはこのようなデバイスを有していなくてもよい。加えて、コンピュータは別のデバイスに、たとえば、例を挙げると、携帯電話、携帯情報端末(PDA)、モバイルオーディオまたはビデオプレーヤー、ゲーム機、グローバルポジショニングシステム(GPS)受信機、またはポータブル記憶装置たとえばユニバーサル・シリアル・バス(USB)フラッシュデバイスに、埋め込まれていてもよい。
【0095】
コンピュータプログラム命令およびデータを格納するのに適したコンピュータ読取可能媒体は、すべての形態の不揮発性メモリ、媒体およびメモリデバイスを含み、これは、一例として、半導体メモリデバイスたとえばEPROM、EEPROM、およびフラッシュメモリデバイス、磁気ディスクたとえば内部ハードディスクまたはリムーバブルディスク、光磁気ディスク、ならびにCD ROMおよびDVD-ROMディスクを含む。プロセッサおよびメモリに、専用論理回路を補充してもよく、専用論理回路にプロセッサおよびメモリが組み込まれていてもよい。
【0096】
ユーザとのやり取りにおける送信のために、本明細書に記載の主題の実施形態は、ユーザに対して情報を表示するためのディスプレイデバイスたとえばCRT(陰極線管)またはLCD(液晶ディスプレイ)モニタと、ユーザがコンピュータに入力を送ることができるようにするためのキーボードおよびポインティングデバイスたとえばマウスまたはトラックボールとを有するコンピュータ上で実現することができる。その他の種類のデバイスを用いてユーザとのやり取りにおける送信が行われるようにしてもよい。たとえば、ユーザに与えられるフィードバックは、任意の形態の感覚フィードバックたとえば視覚フィードバック、聴覚フィードバック、または触覚フィードバックであってもよく、ユーザからの入力は、音響、音声、または触覚入力を含む任意の形態で受けることができる。加えて、コンピュータは、ユーザとの対話を、ユーザが使用するデバイスに文書を送信するかまたはこのデバイスから文書を受信することによって、たとえば、ウェブブラウザから受信した要求に応じてユーザのクライアントデバイス上のウェブブラウザにウェブページを送信することによって、実現してもよい。
【0097】
本明細書に記載の主題の実施形態は、たとえばデータサーバとしてバックエンドコンポーネントを含む計算システム、または、ミドルウェアコンポーネントたとえばアプリケーションサーバを含む計算システム、または、フロントエンドコンポーネント、たとえば、本明細書に記載の主題を実現したものとユーザとのやり取りを可能にするためのグラフィカルユーザインターフェイスもしくはウェブブラウザを有するクライアントコンピュータを含む計算システム、または、このようなバックエンド、ミドルウェア、またはフロントエンドコンポーネントのうちの1つ以上の任意の組み合わせを含む計算システムにおいて、実現することができる。当該システムのコンポーネントは、デジタルデータ通信の形態または媒体たとえば通信ネットワークによって相互接続することができる。通信ネットワークの例は、ローカルエリアネットワーク(「LAN」)およびワイドエリアネットワーク(「WAN」)、たとえばインターネットを含む。
【0098】
計算システムはクライアントとサーバとを含み得る。クライアントとサーバは、通常は互いに離れており、通信ネットワークを通してやり取りするのが一般的である。クライアントとサーバとの関係は、それぞれのコンピュータ上で実行されクライアントとサーバとの関係を有するコンピュータプログラムによって発生する。
【0099】
本明細書には実装の具体的詳細事項が多く含まれているが、これらは、どの発明の範囲またはクレームし得るものの範囲の限定としても解釈されてはならないものであって、むしろ、特定の発明の特定の実施形態に固有であり得る特徴の説明として解釈されるべきものである。本明細書において、別々の実施形態という観点で記載されている特定の特徴は、1つの実施形態において組み合わせ実現することも可能である。逆に、1つの実施形態
という観点から記載されている各種特徴を、複数の実施形態において別々に、または任意の適切な下位の組み合わせとして実現することも可能である。加えて、上記特徴は、特定の組み合わせで機能するものとして記載され最初にそういうものとしてクレームされている場合があるが、クレームされている組み合わせに含まれる1つ以上の特徴は、場合によってはこの組み合わせから省略することができ、クレームされている組み合わせは下位の組み合わせまたは下位の組み合わせの変形に関するものである場合がある。
【0100】
同様に、動作は図面において特定の順序で示されているが、これは、このような動作が、示されている特定の順序もしくは連続した順序で実行されることを要する、または、示されているすべての動作が所望の結果を得るために実行されることを要する、と理解されてはならない。特定の状況ではマルチタスキングおよび並列処理が好都合である場合がある。加えて、上記実施形態における各種システムモジュールおよびコンポーネントの分離は、すべての実施形態においてこのような分離を要するものと理解されてはならない。記載されているプログラムコンポーネントおよびシステムは一般的に、1つのソフトウェアプロダクトに統合できる、または、パッケージングして複数のソフトウェアプロダクトにできることが、理解されるはずである。
【0101】
当該主題の具体的な実施形態は上に述べた通りである。その他の実施形態は以下の請求項の範囲に含まれる。たとえば、請求項に記載の動作は、異なる順序で実行されてそれでもなお所望の結果を得ることができる。一例として、添付の図面に記載されているプロセスは、必ずしも示されている通りの特定の順序または連続した順序によって所望の結果を得ることを要している訳ではない。特定の実装例において、マルチタスキングおよび並列処理が好都合である場合がある。
図1
図2
図3
図4
図5
図6
図7A
図7B