(57)【要約】  複数の要素からなる入力ベクトルを縮小するように構成されたベクトル縮小回路は、複数のセルを備える。入力ベクトルの指定された第１の要素を受ける指定された第１のセル以外の複数のセルの各々は、入力ベクトルの特定の要素を受け、１以上のセルのうちの別のセルから一時縮小要素を受け、特定の要素と一時縮小要素とを用いて縮小演算を実行し、特定の要素と一時縮小要素とを用いて縮小演算を実行した結果を、新たな一時縮小要素として与えるように構成されている。ベクトル縮小回路はさらに、入力ベクトルの最後の要素を用いて縮小演算を実行した結果に相当する新たな一時縮小要素を、入力ベクトルを縮小したものとして出力するために与えるように構成された、出力回路を備える。
2020513120.tif 000002
【特許請求の範囲】
【請求項１】
複数の要素からなる入力ベクトルを縮小するように構成されたベクトル縮小回路であって、前記ベクトル縮小回路は、
複数のセルを備え、前記入力ベクトルの指定された第１の要素を受ける指定された第１のセル以外の前記複数のセルの各々は、
前記入力ベクトルの特定の要素を受け、
前記複数のセルのうちの別のセルから一時縮小要素を受け、
前記特定の要素と前記一時縮小要素とを用いて縮小演算を実行し、
前記特定の要素と前記一時縮小要素とを用いて前記縮小演算を実行した結果を、新たな一時縮小要素として与える
ように構成されており、前記ベクトル縮小回路はさらに、
前記入力ベクトルの最後の要素を用いて前記縮小演算を実行した結果に相当する新たな一時縮小要素を、前記入力ベクトルを縮小したものとして出力するために与えるように構成された、出力回路を備える、ベクトル縮小回路。
【請求項２】
前記縮小演算は最大値縮小演算であり、
前記特定の要素と前記一時縮小要素とを用いて縮小演算を実行することは、
前記特定の要素と前記一時縮小要素とを比較することと、
少なくとも前記比較に基づき、前記特定の要素と前記一時縮小要素とを用いて縮小演算を実行した結果として、前記特定の要素と前記一時縮小要素とのうちで最大のものを判断することとを含む、請求項１に記載のベクトル縮小回路。
【請求項３】
前記縮小演算は最小値縮小演算であり、
前記特定の要素と前記一時縮小要素とを用いて縮小演算を実行することは、
前記特定の要素と前記一時縮小要素とを比較することと、
少なくとも前記比較に基づき、前記特定の要素と前記一時縮小要素とを用いて縮小演算を実行した結果として、前記特定の要素と前記一時縮小要素とのうちで最小のものを判断することとを含む、請求項１に記載のベクトル縮小回路。
【請求項４】
前記縮小演算は合計縮小演算であり、
前記特定の要素と前記一時縮小要素とを用いて縮小演算を実行することは、
前記特定の要素と前記一時縮小要素とを用いて縮小演算を実行した結果として、前記特定の要素と前記一時縮小要素との合計を求めることを含む、請求項１に記載のベクトル縮小回路。
【請求項５】
前記縮小演算は積縮小演算であり、
前記特定の要素と前記一時縮小要素とを用いて縮小演算を実行することは、
前記特定の要素と前記一時縮小要素とを用いて縮小演算を実行した結果として、前記特定の要素と前記一時縮小要素との積を求めることを含む、請求項１に記載のベクトル縮小回路。
【請求項６】
前記縮小演算は最大インデックス演算であり、
前記特定の要素と前記一時縮小要素とを用いて縮小演算を実行することは、
前記一時縮小要素に対応するインデックスを示すデータを受けることと、
前記特定の要素と前記一時縮小要素とを比較することと、
少なくとも前記比較に基づいて、前記特定の要素と前記一時縮小要素とのうちで最大のものを判断することと、
少なくとも前記判断に基づき、前記特定の要素と前記一時縮小要素とを用いて縮小演算を実行した結果として、前記特定の要素に対応するインデックスまたは前記一時縮小要素に対応する前記インデックスのうちの一方を、識別することとを含む、請求項１に記載のベクトル縮小回路。
【請求項７】
前記縮小演算は最小インデックス演算であり、
前記特定の要素と前記一時縮小要素とを用いて縮小演算を実行することは、
前記一時縮小要素に対応するインデックスを示すデータを受けることと、
前記特定の要素と前記一時縮小要素とを比較することと、
少なくとも前記比較に基づいて、前記特定の要素と前記一時縮小要素とのうちで最小のものを判断することと、
少なくとも前記判断に基づき、前記特定の要素と前記一時縮小要素とを用いて縮小演算を実行した結果として、前記特定の要素に対応するインデックスまたは前記一時縮小要素に対応する前記インデックスのうちの一方を、識別することとを含む、請求項１に記載のベクトル縮小回路。
【請求項８】
前記入力ベクトルの特定の要素を、要素のスタッガード入力として受ける、請求項１に記載のベクトル縮小回路。
【請求項９】
前記入力ベクトルは、複数の要素からなる複数のセグメントを含むものとして識別される、請求項１に記載のベクトル縮小回路。
【請求項１０】
前記入力ベクトルの特定の要素は、前記入力ベクトルの特定のセグメントの指定された最後の要素であり、
前記入力ベクトルの指定された第１の要素を受ける指定された第１のセル以外の前記複数のセルの各々は、前記出力回路に対し、前記入力ベクトルの特定のセグメントを縮小したものとして、前記入力ベクトルの特定のセグメントの指定された最後の要素と前記一時縮小要素とを用いて縮小演算を実行した結果を与えるように構成される、請求項９に記載のベクトル縮小回路。
【請求項１１】
前記入力ベクトルの特定のセグメントの指定された最後の要素と前記一時縮小要素とを用いて前記縮小演算を実行した結果を、新たな一時縮小要素として与えることは、前記複数のセルのうちの別のセルに、前記新たな一時縮小要素として、プレースホルダー信号を与えることを含む、請求項１０に記載のベクトル縮小回路。
【請求項１２】
前記出力回路は、前記入力ベクトルを縮小したものとして出力するために、複数の要素を与えるように構成され、前記複数の要素の各々は、前記入力ベクトルのセグメントの指定された最後の要素を用いて前記縮小演算を実行した結果に相当する新たな一時縮小要素である、請求項９に記載のベクトル縮小回路。
【請求項１３】
前記出力回路は、前記入力ベクトルを縮小したものとして出力するために、前記複数の要素を含む出力ベクトルを与えるように構成されている、請求項１２に記載のベクトル縮小回路。
【請求項１４】
複数の要素からなる制御ベクトルを受けるように構成された制御レジスタを備え、前記要素からなる制御ベクトルは、前記入力ベクトルの要素からなる複数のセグメントを指定する、請求項９に記載のベクトル縮小回路。
【請求項１５】
前記特定の要素と前記一時縮小要素とを用いて前記縮小演算を実行した結果を、新たな一時縮小要素として与えることは、
前記特定の要素に対応する前記制御ベクトルの特定の要素を受けることと、
少なくとも前記制御ベクトルの特定の要素に基づいて、前記特定の要素は前記入力ベクトルの特定のセグメントの最後の要素として指定されると判断することと、
少なくとも前記判断に基づいて、前記出力回路に対し、前記入力ベクトルの特定のセグメントの最後の要素として指定された特定の要素と、前記一時縮小要素とを用いて前記縮小演算を実行した結果を、前記入力ベクトルの特定のセグメントを縮小したものとして与えることとを含む、請求項１４に記載のベクトル縮小回路。
【請求項１６】
前記特定の要素と前記一時縮小要素とを用いて前記縮小演算を実行した結果を、新たな一時縮小要素として与えることは、
前記特定の要素に対応する前記制御ベクトルの特定の要素を受けることと、
少なくとも前記制御ベクトルの特定の要素に基づいて、前記特定の要素は前記入力ベクトルの特定のセグメントの最後の要素として指定されると判断することと、
少なくとも前記判断に基づいて、前記複数のセルのうちの別のセルに対し、プレースホルダー信号を与えることとを含む、請求項１４に記載のベクトル縮小回路。
【請求項１７】
前記特定の要素と前記一時縮小要素とを用いて前記縮小演算を実行した結果を、新たな一時縮小要素として与えることは、
前記特定の要素に対応する前記制御ベクトルの特定の要素を受けることと、
少なくとも前記制御ベクトルの特定の要素に基づいて、前記特定の要素は前記入力ベクトルの特定のセグメントの最後の要素として指定されないと判断することと、
少なくとも前記判断に基づいて、前記複数のセルのうちの別のセルに対し、前記入力ベクトルの特定のセグメントの最後の要素として指定されない特定の要素と、前記一時縮小要素とを用いて前記縮小演算を実行した結果を、新たな一時縮小要素として与えることとを含む、請求項１４に記載のベクトル縮小回路。
【請求項１８】
前記出力回路は、ベクトルまたは行列の置換を計算するように構成された置換回路に対し、前記入力ベクトルを縮小したものを与える、請求項１に記載のベクトル縮小回路。
【請求項１９】
前記複数のセルの各々は、前記特定の要素と前記一時縮小要素とを用いて実行する前記縮小演算のタイプを指定する制御信号を受けるように構成されている、請求項１に記載のベクトル縮小回路。
【請求項２０】
前記一時縮小要素は、前記入力ベクトルの前記特定の要素に先行する前記入力ベクトルの要素に対して指定された縮小演算を実行した結果に相当する、請求項１に記載のベクトル縮小回路。
【請求項２１】
前記複数のセルの各々は、
前記入力ベクトルの特定の要素を受けるように構成された入力ベクトル要素レジスタと、
前記複数のセルのうちの別のセルから一時縮小要素を受けるように構成された一時縮小要素レジスタと、
前記入力ベクトルの特定の要素と一時縮小要素とを用いて縮小演算を実行するように構成された計算回路と、
前記入力ベクトルの特定の要素と一時縮小要素とを用いて縮小演算を実行した結果を新たな一時縮小要素として与えるように構成された結果レジスタとを含む、請求項１に記載のベクトル縮小回路。
【請求項２２】
前記計算回路は、比較回路、合計回路、および乗算回路のうちの少なくとも１つを含む、請求項２１に記載のベクトル縮小回路。
【発明の詳細な説明】
【技術分野】
【０００１】
背景
本明細書は、ハードウェアにおけるベクトル縮小の実行に関する。
【背景技術】
【０００２】
一般的に、ベクトル縮小は、入力ベクトルの要素に対して実行されて、スカラー出力、または入力ベクトルよりも次元が小さい出力ベクトルを生成する演算である。たとえば、合計ベクトル縮小演算は、入力ベクトルの要素の合計に等しいスカラー出力を生成することができる。いくつかの例では、入力ベクトルの複数のセグメントに対してそれぞれのベクトル縮小演算を実行することができる。セグメント化ベクトル縮小演算は、各要素が入力ベクトルのセグメントを縮小したものである出力ベクトルを生成する。たとえば、セグメント化合計ベクトル縮小演算は、各要素が入力ベクトルのセグメントの要素の合計である出力ベクトルを生成することができる。
【発明の概要】
【課題を解決するための手段】
【０００３】
概要
概して、本明細書はベクトル縮小を計算する専用ハードウェア回路について説明する。
【０００４】
概して、本明細書に記載の主題の１つの革新的な側面は、複数の要素からなる入力ベクトルを縮小するように構成されたベクトル縮小回路において実現することができる。ベクトル縮小回路は複数のセルを備える。入力ベクトルの指定された第１の要素を受ける指定された第１のセル以外の上記複数のセルの各々は、入力ベクトルの特定の要素を受け、複数のセルのうちの別のセルから一時縮小要素を受け、特定の要素と一時縮小要素とを用いて縮小演算を実行し、特定の要素と一時縮小要素とを用いて縮小演算を実行した結果を、新たな一時縮小要素として与えるように、構成されている。ベクトル縮小回路は、入力ベクトルの最後の要素を用いて縮小演算を実行した結果に相当する新たな一時縮小要素を、入力ベクトルを縮小したものとして出力するために与えるように構成された、出力回路を備える。
【０００５】
実装形態は任意で以下の特徴のうちの１つ以上を含み得る。いくつかの実装形態において、縮小演算は最大値縮小演算であり、特定の要素と一時縮小要素とを用いて縮小演算を実行することは、特定の要素と一時縮小要素とを比較することと、少なくとも比較に基づき、特定の要素と一時縮小要素とを用いて縮小演算を実行した結果として、特定の要素と一時縮小要素とのうちで最大のものを判断することとを含む。縮小演算は最大値縮小演算であり、特定の要素と一時縮小要素とを用いて縮小演算を実行することは、特定の要素と一時縮小要素とを比較することと、少なくとも比較に基づき、特定の要素と一時縮小要素とを用いて縮小演算を実行した結果として、特定の要素と一時縮小要素とのうちで最大のものを判断することとを含む。
【０００６】
実装形態はまた、任意で以下の特徴のうちの１つ以上を含み得る。いくつかの実装形態において、縮小演算は合計縮小演算であり、特定の要素と記一時縮小要素とを用いて縮小演算を実行することは、特定の要素と一時縮小要素とを用いて縮小演算を実行した結果として、特定の要素と一時縮小要素との合計を求めることを含む。縮小演算は積縮小演算であり、特定の要素と一時縮小要素とを用いて縮小演算を実行することは、特定の要素と一時縮小要素とを用いて縮小演算を実行した結果として、特定の要素と一時縮小要素との積を求めることを含む。
【０００７】
実装形態はまた、任意で以下の特徴のうちの１つ以上を含み得る。いくつかの実装形態において、縮小演算は最大インデックス演算であり、特定の要素と一時縮小要素とを用いて縮小演算を実行することは、一時縮小要素に対応するインデックスを示すデータを受けることと、特定の要素と一時縮小要素とを比較することと、少なくとも比較に基づいて、特定の要素と一時縮小要素とのうちで最大のものを判断することと、少なくとも判断に基づき、特定の要素と一時縮小要素とを用いて縮小演算を実行した結果として、特定の要素に対応するインデックスまたは一時縮小要素に対応するインデックスのうちの一方を、識別することとを含む。
【０００８】
実装形態はまた、任意で以下の特徴のうちの１つ以上を含み得る。いくつかの実装形態において、縮小演算は最小インデックス演算であり、特定の要素と一時縮小要素とを用いて縮小演算を実行することは、一時縮小要素に対応するインデックスを示すデータを受けることと、特定の要素と一時縮小要素とを比較することと、少なくとも比較に基づいて、特定の要素と一時縮小要素とのうちで最小のものを判断することと、少なくとも判断に基づき、特定の要素と一時縮小要素とを用いて縮小演算を実行した結果として、特定の要素に対応するインデックスまたは一時縮小要素に対応するインデックスのうちの一方を、識別することとを含む。
【０００９】
実装形態はまた、任意で以下の特徴のうちの１つ以上を含み得る。いくつかの実装形態において、入力ベクトルの特定の要素を、要素のスタッガード入力として受ける。入力ベクトルは、複数の要素からなる複数のセグメントを含むものとして識別される。入力ベクトルの特定の要素は、入力ベクトルの特定のセグメントの指定された最後の要素であり、入力ベクトルの指定された第１の要素を受ける指定された第１のセル以外の複数のセルの各々は、出力回路に対し、入力ベクトルの特定のセグメントを縮小したものとして、入力ベクトルの特定のセグメントの指定された最後の要素と一時縮小要素とを用いて縮小演算を実行した結果を与えるように構成される。入力ベクトルの特定のセグメントの指定された最後の要素と一時縮小要素とを用いて縮小演算を実行した結果を、新たな一時縮小要素として与えることは、複数のセルのうちの別のセルに、新たな一時縮小要素として、プレースホルダー信号を与えることを含む。出力回路は、入力ベクトルを縮小したものとして出力するために、複数の要素を与えるように構成され、複数の要素の各々は、入力ベクトルのセグメントの指定された最後の要素を用いて縮小演算を実行した結果に相当する新たな一時縮小要素である。出力回路は、入力ベクトルを縮小したものとして出力するために、複数の要素を含む出力ベクトルを与えるように構成されている。
【００１０】
実装形態はまた、任意で以下の特徴のうちの１つ以上を含み得る。いくつかの実装形態において、ベクトル縮小回路は、複数の要素からなる制御ベクトルを受けるように構成された制御レジスタを備え、要素からなる制御ベクトルは、入力ベクトルの要素からなる複数のセグメントを指定する。特定の要素と一時縮小要素とを用いて縮小演算を実行した結果を、新たな一時縮小要素として与えることは、特定の要素に対応する制御ベクトルの特定の要素を受けることと、少なくとも制御ベクトルの特定の要素に基づいて、特定の要素は入力ベクトルの特定のセグメントの最後の要素として指定されると判断することと、少なくとも判断に基づいて、出力回路に対し、入力ベクトルの特定のセグメントの最後の要素として指定された特定の要素と、一時縮小要素とを用いて縮小演算を実行した結果を、入力ベクトルの特定のセグメントを縮小したものとして与えることとを含む。
【００１１】
実装形態はまた、任意で以下の特徴のうちの１つ以上を含み得る。いくつかの実装形態において、特定の要素と一時縮小要素とを用いて縮小演算を実行した結果を、新たな一時縮小要素として与えることは、特定の要素に対応する制御ベクトルの特定の要素を受けることと、少なくとも制御ベクトルの特定の要素に基づいて、特定の要素は入力ベクトルの特定のセグメントの最後の要素として指定されると判断することと、少なくとも判断に基づいて、複数のセルのうちの別のセルに対し、プレースホルダー信号を与えることとを含む。特定の要素と一時縮小要素とを用いて縮小演算を実行した結果を、新たな一時縮小要素として与えることは、特定の要素に対応する制御ベクトルの特定の要素を受けることと、少なくとも制御ベクトルの特定の要素に基づいて、特定の要素は入力ベクトルの特定のセグメントの最後の要素として指定されないと判断することと、少なくとも判断に基づいて、複数のセルのうちの別のセルに対し、入力ベクトルの特定のセグメントの最後の要素として指定されない特定の要素と、一時縮小要素とを用いて縮小演算を実行した結果を、新たな一時縮小要素として与えることとを含む。
【００１２】
実装形態はまた、任意で以下の特徴のうちの１つ以上を含み得る。いくつかの実装形態において、出力回路は、ベクトルまたは行列の置換を計算するように構成された置換回路に対し、入力ベクトルを縮小したものを与える。複数のセルの各々は、特定の要素と一時縮小要素とを用いて実行する縮小演算のタイプを指定する制御信号を受けるように構成されている。一時縮小要素は、入力ベクトルの特定の要素に先行する前記入力ベクトルの要素に対して指定された縮小演算を実行した結果に相当する。
【００１３】
本願に記載の主題の特定の実施形態は、以下の利点のうちの１つ以上を得るために実現することができる。ベクトル縮小は、専用ハードウェア回路によりハードウェアで実行することができる。専用ハードウェア回路は、汎用プロセッサ（たとえばＧＰＵまたはＣＰＵ）よりも少ないサイクルでベクトル縮小を実行することができる。加えて、専用ハードウェア回路を用いてハードウェアでベクトル縮小を計算することにより、ベクトル縮小を、ホストコンピュータにデータを送り返すことなく、すなわち、計算の少なくとも一部をオフチップまたはソフトウェアで実行することなく、実行することが可能である。結果として、専用ハードウェア回路よりも多い汎用プロセッサ（たとえばＧＰＵまたはＣＰＵ）サイクル数の実行を要する高コストの計算となり得るオフチップまたはソフトウェアでのベクトル縮小計算において生じる処理遅延は、回避される。
【００１４】
ベクトル縮小を計算するように特別に設計されたハードウェア回路を用いることにより、一般的な行列もしくはベクトル処理ハードウェア回路においてベクトル縮小を実行するシステムよりも、たとえば、さらに行列畳み込みもしくはその他の行列−ベクトル計算を実行するように構成されているシステムよりも、または、たとえばベクトル縮小および行列転置計算双方を実行するように構成されている、別の専用ハードウェア回路においてベクトル縮小を実行するシステムよりも、高い効率で処理を行うことが可能である。専用ハードウェア回路上でベクトル縮小演算を実現することにより、他の行列−ベクトル計算機能または効率に配慮することなくベクトル縮小を効率的に処理し、かつ、その他の行列またはベクトル処理回路をその他の行列またはベクトル計算を実行するために確保することにより、ハードウェアにおける行列−ベクトル計算の効率を包括的に高める設計が、可能である。
【００１５】
本明細書の主題の１つ以上の実施形態の詳細が添付の図面および以下の説明に記載される。この主題のその他の特徴、側面、および利点は、この説明、図面、および請求項から明らかになるであろう。
【図面の簡単な説明】
【００１６】
【図１】行列−ベクトル処理システムの一例を示す図である。
【図２】ベクトル縮小ユニットを含む行列−ベクトル処理システムの一例を示す図である。
【図３】行列−ベクトル処理システム内のベクトル縮小ユニットのアーキテクチャの一例を示す図である。
【図４】行列−ベクトル処理システム内のベクトル縮小ユニットのアーキテクチャの一例を示す図である。
【図５】行列−ベクトル処理システム内のベクトル縮小ユニットのセルのアーキテクチャの一例を示す図である。
【図６】行列−ベクトル処理システムにおいてベクトル縮小を実行する方法の一例のフロー図である。
【図７Ａ】行列−ベクトル処理システム内のベクトル縮小ユニットを用いるベクトル縮小の一例を示す図である。
【図７Ｂ】行列−ベクトル処理システム内のベクトル縮小ユニットを用いるベクトル縮小の一例を示す図である。
【発明を実施するための形態】
【００１７】
各種図面における同様の参照番号および名称は同様の要素を示す。
詳細な説明
ベクトル縮小は、複数の要素からなる入力ベクトルに対して実行されることにより、スカラーである出力、または入力ベクトルよりも小さいすなわち低次元の複数の要素からなるベクトルである出力を生成するための、演算である。たとえば、合計ベクトル縮小演算は、入力ベクトルの要素の合計であるスカラー出力を生成する。別の例として、最大値または最小値ベクトル縮小演算はそれぞれ、入力ベクトルの要素のうちの最大または入力ベクトルの要素のうちの最小である、スカラー出力を生成する。同様に、最大インデックスまたは最小インデックスベクトル縮小演算はそれぞれ、入力ベクトルの最大値または入力ベクトルの最小値の、入力ベクトルのインデックスを示す出力を生成する。その他のベクトル縮小演算が可能であり、たとえば、入力ベクトルの要素の積に相当するスカラー出力を生成する積ベクトル縮小演算、入力ベクトルの要素の算術平均に相当するスカラー出力を生成する平均ベクトル縮小演算などである。
【００１８】
いくつかの実装形態において、入力ベクトルをセグメント化してもよく、入力ベクトルのセグメントのうちの１つ以上に対してそれぞれのベクトル縮小演算を実行してもよい。入力ベクトルの複数のセグメント各々に対して対応するベクトル縮小演算を実行することにより、出力ベクトルを生成する。出力ベクトルの各要素は、入力ベクトルの対応するセグメントに対してベクトル縮小演算を実行した結果に相当する。たとえば、３つのセグメントに分割した入力ベクトルに対して実行したベクトル縮小演算の出力は、３つの要素からなる出力ベクトルであり、この出力ベクトルの各要素は、入力ベクトルのそれぞれのセグメントに対してベクトル縮小演算を適用した結果である。
【００１９】
ベクトル縮小は、線形代数計算においておよびその他実世界の応用例のためのデータ解析において頻繁に計算される。たとえば、ベクトル縮小は、たとえば機械学習プロセスの一部として、ニューラルネットワークを訓練するときに計算することができる。これらの例において、ベクトル縮小は、ニューラルネットワークを訓練するときに勾配を逆伝搬させるために使用することができる。また、ベクトル縮小は、ニューラルネットワークの層の出力に対して実行することもできる。ベクトル縮小の結果は、ニューラルネットワークの別の層に対する入力として与えることができる、または、ニューラルネットワークからの出力として与えることができる。ベクトル縮小のその他の応用例は、デジタルオーディオまたはビデオデコードにおけるマルチメディア処理を含む。アナログおよびデジタル送信、レーダ、ならびにソナーの分野等における信号処理も、ベクトル縮小技術を頻繁に利用することにより、たとえば受信もしくは送信信号における最大または最小を特定する。
【００２０】
いくつかの実装形態において、入力行列をベクトルに分解してもよく、ベクトル縮小を入力行列のベクトルに個別に適用してもよい。たとえば、行列として表された、たとえば行列の要素が画像の画素に対応する画像を、ベクトルに分解することができる。平均ベクトル縮小演算のようなベクトル縮小演算を、入力行列のベクトルに適用することにより、たとえば画像の平滑化を行うことまたは画像の画素サイズを減じることができる。
【００２１】
本明細書では、入力ベクトルに対してベクトル縮小演算を実行する専用ハードウェア回路について説明する。この専用ハードウェア回路は、入力ベクトルを縮小したものに相当するスカラーまたはベクトル出力を生成することができる。
【００２２】
図１は一例としての行列−ベクトル処理システム１００を示す。行列−ベクトル処理システム１００は、下記のシステム、コンポーネント、および技術を実現することができる１つ以上の場所において１つ以上のコンピュータとして実現されるシステムの一例である。
【００２３】
行列−ベクトル処理システム１００は、専用ハードウェア回路１１０を用いてベクトルまたは行列計算を実行するシステムである。専用ハードウェア回路１１０は、ハードウェアにおいてベクトル縮小を計算するように構成されたベクトル縮小ユニット１２０を含む、ベクトルまたは行列計算を実行するための集積回路である。一例としての専用ハードウェア回路１１０については、図２を参照しながらより詳細に説明する。
【００２４】
行列−ベクトル処理システム１００は、専用ハードウェア回路１１０上でベクトルまたは行列計算を実行することを求める要求を受け、このベクトルまたは行列計算を実行するように専用ハードウェア回路１１０を制御し、専用ハードウェア回路１１０が生成したベクトルまたは行列計算の結果を出力する。たとえば、行列−ベクトル処理システム１００は、入力ベクトルに対してベクトル縮小を実行することを求める要求を受けることができ、それに応じて、ベクトル縮小を計算し入力行列に対するベクトル縮小の計算結果を出力するように専用ハードウェア回路１１０を制御することができる。専用ハードウェア回路１１０は、ベクトル縮小に加えて他の計算を実行できるものであってもよい。たとえば、専用ハードウェア回路１１０はまた、たとえばニューラルネットワークの層を処理するために、ベクトルもしくは行列畳み込み、ベクトルもしくは行列算術、ベクトルもしくは行列転置、または、その他のベクトルもしくは行列計算のための、回路またはその他のハードウェアコンポーネントを含み得る。このように、専用ハードウェア回路１１０は、専用ハードウェア回路１１０の他のコンポーネントを用いるより大きな計算の実行の一部としてベクトル縮小を計算することができる。
【００２５】
専用ハードウェア回路１１０上で行列またはベクトル計算を実現するために、行列−ベクトル処理システム１００は行列−ベクトル処理エンジン１５０を含む。行列−ベクトル処理エンジン１５０は、１つ以上の物理的な場所において１つ以上のコンピュータ上の１つ以上のコンピュータプログラムとして実現することができる。
【００２６】
行列−ベクトル処理エンジン１５０は、要求に応じてベクトルまたは行列計算を実行するよう専用ハードウェア回路１１０を制御するために、命令を生成する、制御信号を与える、またはデータを導くことができる。たとえば、行列−ベクトル処理システム１００は、入力ベクトルまたは行列に関数を適用することを求める要求を受けてもよく、行列−ベクトル処理エンジン１５０は、専用ハードウェア回路１１０上で入力ベクトルまたは行列に上記関数を適用するのに必要な計算を実行するための特定の命令または制御信号を決定することができる。行列−ベクトル処理エンジン１５０はまた、たとえば必要な計算を実行するために専用ハードウェア回路１１０が使用できる入力ベクトルまたは行列に対応するデータを導くこともできる。
【００２７】
行列−ベクトル処理エンジン１５０は、ベクトルまたは行列要求を実現するのに必要な計算を決定すると、この必要な計算を実行するよう専用ハードウェア回路１１０を制御する。たとえば、行列−ベクトル処理エンジン１５０は、入力ベクトルまたは行列のような、ベクトルまたは行列計算を実行するためのデータを、専用ハードウェア回路１１０に導いてもよい。行列−ベクトル処理エンジン１５０は、専用ハードウェア回路１１０が行列−ベクトル処理エンジン１５０から受けたデータに対して必要な計算を実行するよう専用ハードウェア回路１１０を制御するための命令または制御信号を、専用ハードウェア回路１１０に送信してもよい。
【００２８】
たとえば、行列−ベクトル処理システム１００は、ベクトルまたは行列計算の実行を求める要求を受けることができる。要求される計算は、比較的単純な、たとえば単純な線形代数計算の実行を求める要求、または、より複雑な関数、たとえばニューラルネットワークを訓練するために勾配を逆伝搬させるための関数である場合がある。要求される計算は、１つ以上のベクトル縮小のような、１つ以上の演算を求める場合がある。この要求はまた、計算を実行する対象である１つ以上のベクトルまたは行列、すなわち、関数を適用する１つ以上の入力ベクトルまたは行列を、特定するまたは含む場合がある。行列−ベクトル処理エンジン１５０は、この要求を受けることができ、入力ベクトルまたは行列に対して計算を実行するための制御信号または命令を生成することができる。行列−ベクトル処理エンジン１５０はさらに、入力ベクトルまたは行列を専用ハードウェア回路１１０に導くことができる。
【００２９】
たとえば、ベクトル縮小を、たとえばより大きな計算の一部として計算するために、行列−ベクトル処理エンジン１５０は、受けた入力ベクトルを、または入力行列をそのベクトル成分に分割することによって得られた複数のベクトルを、専用ハードウェア回路１１０に与えてもよい。行列−ベクトル処理エンジン１５０はまた、ベクトル縮小ユニット１２０上でベクトル縮小を開始するための制御信号またはベクトル縮小を実行するためのパラメータを、専用ハードウェア回路１１０に与えてもよい。ベクトル縮小ユニット１２０は、専用ハードウェア回路１１０に与えられた、１つまたは複数の入力ベクトルと、制御信号とを受けることができる。ベクトル縮小ユニット１２０は、制御信号を受けたことに応じてベクトル縮小を実行することができ、ベクトル縮小を実行した結果を出力することができる。ベクトル縮小ユニット１２０が生成した結果を、要求された計算を実行するために専用ハードウェア回路１１０が実行する他の演算において使用する場合もある。専用ハードウェア回路１１０は要求された計算の結果を提供することができ、行列−ベクトル処理システム１００は要求に応じてこの結果を返すことができる。
【００３０】
図２は、ベクトル縮小を実行することが可能な、一例としての専用ハードウェア回路２００を示す。いくつかの実装形態において、回路２００は、図示されていないが、その他のベクトルまたは行列計算を実行するための追加のコンポーネントを含み得る。その他のベクトルまたは行列を実行するための追加のコンポーネントも、図２に示されるコンポーネントのうちの１つ以上を利用することができる。
【００３１】
回路２００はホストインターフェイス２０２を含む。ホストインターフェイス２０２は、ベクトル縮小を含むベクトルまたは行列計算を実行するための制御信号、命令、または引数を受けることができる。引数は、たとえば、ベクトル縮小を実行する対象である１つ以上のベクトルを含み得る。ホストインターフェイス２０２が受ける命令または制御信号は、回路２００がベクトル縮小を実行できるよう、受けた引数を格納する場所を示す命令を含むことができる、または、要求されたベクトル縮小に関連するパラメータを含み得る、または、その他の情報、たとえばベクトル縮小の出力を格納するためのメモリ場所を含み得る。ホストインターフェイス２０２が受ける制御信号は、ベクトル縮小計算を開始するよう回路２００を制御することもできる。
【００３２】
いくつかの実装形態において、ホストインターフェイス２０２は命令をシーケンサ２０６に与えることができ、シーケンサ２０６は、この命令を、ベクトル縮小を実行するよう回路２００を制御するローレベル制御信号に変換する。たとえば、シーケンサ２０６が生成する制御信号は、回路２００内のデータフローを管理することができる、たとえば、入力ベクトルをどこに格納すべきであるか、または、そうでなければデータを回路２００を通してどのように導くべきであるかを、管理することができる。シーケンサ２０６は、回路２００上でベクトル縮小計算を開始することを求める命令を受けることができ、ベクトル縮小計算を開始するようベクトル縮小ユニット２１２を制御するための制御信号を生成することができる。
【００３３】
シーケンサ２０６は、制御信号をメモリ２０８およびベクトル縮小ユニット２１２に送ることができる。いくつかの実装形態において、シーケンサ２０６はまた、制御信号をダイレクトメモリアクセスエンジン２０４に送る。いくつかの実装形態において、シーケンサ２０６は制御信号を生成するプロセッサである。シーケンサ２０６は、制御信号を適切なときに回路２００の適切なコンポーネントに送るために制御信号を調整することができる。いくつかの例において、シーケンサ２０６は、回路２００の外部から、たとえば図１のベクトル−行列処理エンジン１５０から送られてきた制御信号を、ホストインターフェイス２０２から受け、よってシーケンサ２０６が制御信号を生成することを求められない場合がある。このような例において、シーケンサ２０６は、受けた制御信号を適切なときに回路２００のコンポーネントに送ればよい。加えて、回路２００に制御信号が与えられる場合、シーケンサ２０６は、回路２００の任意選択のコンポーネントであってもよい、すなわち、回路２００の外部のコンポーネント、たとえば行列−ベクトル処理エンジン１５０が制御信号を適切なときに与えて、ベクトル縮小の実行のための演算を含む演算を実行するように回路２００を制御すればよい。
【００３４】
ホストインターフェイス２０２は、引数たとえば入力ベクトルを、ダイレクトメモリアクセスエンジン２０４に送ることができる。ダイレクトメモリアクセスエンジン２０４はこの引数をメモリ２０８に格納することができる。
【００３５】
メモリ２０８は、ダイナミックメモリ、たとえばダイナミックランダムアクセスメモリ（ＤＲＡＭ）であってもよく、またはスタティックメモリ、たとえばスタティックランダムアクセスメモリ（ＳＲＡＭ）であってもよい。いくつかの実装形態において、メモリ２０８をメモリバッファとして用いてもよい。メモリ２０８は、回路２００上にあってもよくまたは回路２００の外部にあってもよい。これは、回路２００に入力された引数たとえばベクトルを、または、ベクトル縮小を実行するためのパラメータを格納することができる。メモリ２０８はまた、ベクトル縮小ユニット２１２の出力、すなわち入力ベクトルに対してベクトル縮小を実行した結果を格納することもできる。いくつかの実装形態において、ダイレクトメモリアクセスエンジン２０４は、メモリ２０８からの読出しを行うことができる。たとえば、ダイレクトメモリアクセスエンジン２０４は、メモリ２０８からの読出しを行うことにより、回路２００から、入力ベクトルに対するベクトル縮小の実行結果を返すことができる。
【００３６】
ベクトル縮小ユニット２１２は、メモリ２０８の引数にアクセスすることができる。たとえば、ダイレクトメモリアクセスエンジン２０４がメモリ２０８に入力ベクトルを格納した後に、入力ベクトルをベクトル縮小ユニット２１２に与えるまたはベクトル縮小ユニット２１２がアクセスできるようにして、ベクトル縮小ユニット２１２が入力ベクトルに対するベクトル縮小のための演算を実行できるようにしてもよい。
【００３７】
ベクトル縮小ユニット２１２は、ベクトル縮小を計算するための回路である。いくつかの実装形態において、ベクトル縮小ユニット２１２は、受けた引数たとえば入力ベクトルと、ベクトル縮小のタイプを指定する情報たとえばベクトル縮小が合計ベクトル縮小であるべきか最大値もしくは最小値ベクトル縮小であるべきか等を指定する情報とに基づいて、ベクトル縮小を計算するように設計される。ベクトル縮小のタイプを指定する情報は、その他の情報たとえばセグメント化ベクトル縮小を実行するための情報を含み得る。いくつかの実装形態において、ベクトル縮小ユニット２１２は、ベクトル縮小ユニット２１２がベクトル縮小を実行するために引数すなわち入力ベクトルのみが必要となるような、予め定められたベクトル縮小演算を実行するように構成されてもよい。たとえば、ベクトル縮小ユニット２１２は、入力ベクトルの予め定められた要素に対し、合計ベクトル縮小演算またはセグメントベクトル縮小のみを実行するように構成されてもよい。この情報を受けた後に、ベクトル縮小ユニット２１２は、ベクトル縮小ユニット２１２において必要な入力すなわち入力ベクトルとベクトル縮小パラメータとを受けたらベクトル縮小がさもなければ自動化されるよう、追加の制御信号または入力を受けることなくベクトル縮小を実行してもよい。このような実装形態において、ベクトル縮小演算が一旦開始されると、ベクトル縮小ユニット２１２は受けた情報に基づいて、オフチップからの追加情報を要求することなく、ベクトル縮小全体を実行することができる。いくつかの実装形態において、ベクトル縮小演算を、ベクトル縮小ユニット２１２が必要な情報を受けたことに応じて、トリガしてもよい、すなわち開始信号またはその他のトリガは不要である。その他の実装形態では、開始信号またはその他の信号が、ベクトル縮小演算を実行するようベクトル縮小ユニット２１２をトリガしてもよい。
【００３８】
一般的に、ベクトル縮小を計算するために、ベクトル縮小ユニット２１２は、実行するベクトル縮小演算のタイプを示す、たとえば、合計ベクトル縮小、最大もしくは最小値ベクトル縮小、または最大もしくは最小インデックスベクトル縮小を示す制御信号を受ける。たとえば、ベクトル縮小ユニット２１２は、制御信号をシーケンサ２０６から受けることができる。入力ベクトルを、たとえばメモリ２０８から、スタッガード（staggered）データストリームとして受ける。ベクトル縮小ユニット２１２は、入力ベクトルの要素に対し、制御信号が示すベクトル縮小演算を実行する。たとえば、ベクトル縮小ユニット２１２は、入力ベクトルの各要素を受けるとベクトル縮小演算を実行してもよい。これに代えて、ベクトル縮小エンジン２１２は、入力ベクトルのすべての要素を受けてもよく、または入力ベクトルの要素の一部を受けてもよく、上記入力ベクトルの要素または入力ベクトルの一部に対してこれを受けた後にベクトル縮小演算を実行してもよい。いくつかの例において、ベクトル縮小演算の結果は、たとえば合計ベクトル縮小の場合、ベクトル縮小演算を適用する入力ベクトルの要素の順序に依存しない。このような例において、ベクトル縮小ユニット２１２は、入力ベクトルの要素に対し、入力ベクトルにおける要素の配列順序と異なる順序で、または、ベクトル縮小ユニット２１２がこれらの要素を受けた順序と異なる順序で、ベクトル縮小演算を実行すると判断してもよい。ベクトル縮小演算が入力ベクトルのすべての要素に適用された後に、ベクトル縮小ユニット２１２は、ベクトル縮小の結果を、たとえばメモリ２０８に、または専用ハードウェア回路２００の別のコンポーネントに出力することができる。
【００３９】
ベクトル縮小ユニット２１２への入力はスタッガード入力である可能性があるので、場合によっては、ベクトル縮小ユニット２１２は複数の入力ベクトルに対してたとえばパイプライン方式でベクトル縮小を同時に実行することができる。すなわち、ベクトル縮小ユニット２１２において第１の入力ベクトルに対しベクトル縮小演算が実行されている間に、ベクトル縮小ユニット２１２は第２の入力ベクトルに対するベクトル縮小演算の実行を開始してもよい。加えて、いくつかの例において、行列が引数として回路２００に与えられてもよい。入力行列を、たとえば、ともに入力行列を形成する行または列ベクトルを取得することにより、ベクトルに分解してもよい。ベクトル縮小ユニット２１２は、入力行列を形成するベクトルに対してベクトル縮小演算を実行することにより、ベクトル縮小結果のベクトルを生成することができる。結果のベクトルは、ベクトル縮小ユニット２１２の出力として、たとえば回路２００の別のコンポーネントに、与えられてもよい。
【００４０】
図３は、ベクトル縮小ユニット３００のアーキテクチャの一例を示す。ベクトル縮小ユニット３００は、行列−ベクトル処理システムの専用ハードウェア回路に、たとえば専用ハードウェア回路２００のベクトル縮小ユニット２１２として含まれていてもよい。
【００４１】
ベクトル縮小ユニット３００の値ローダ３１０は、１つまたは複数の入力ベクトルに対応するデータを受ける。値ローダ３１０は各々、たとえば専用ハードウェア回路２００のメモリ２０８から受けた、データのレーンに対応する。実際、データの各レーン、したがって各値ローダ３１０は、入力ベクトルまたは行列の異なる列または行に対応する。よって、図３においては値ローダ［０］〜［３］のみを含みしたがって４×１以下のベクトルの縮小を可能にするものとして示されているが、その他の実装形態においてベクトル縮小ユニット３００は多数の値ローダ３１０を含んでいてもよい。たとえば、１２８レーンのデータとして送信される１２８×１２８要素行列または１２８×１ベクトルに対して演算するように構成された専用ハードウェア回路は、対応する１２８の値ローダ３１０を含み得る。
【００４２】
値ローダ３１０は、入力ベクトルに対応するデータをスタッガード状態で受けることができる。本明細書で使用されるスタッガードデータとは、複数のレーンにおいてオフセットを伴って送信されるデータであり、よって、各レーンのデータストリームは、別のレーンのデータストリームよりも数サイクル遅れている。たとえば、値ローダ［０］に対応する第１のレーンのデータストリームは、値ローダ［１］に対応する第２のレーンのデータストリームよりも１サイクル進んでいてもよい。これは、たとえば値ローダ３１０各々が受ける各レーンのデータストリームが整列しているフラットなデータとは異なる。たとえば、複数のレーンで送信される要素からなるベクトルを値ローダ３１０が同一のクロックサイクルで受けることになる。
【００４３】
一般的に、ベクトル縮小ユニット３００および、ベクトル縮小ユニット３００を含む専用ハードウェア回路のその他のコンポーネントは、スタッガードのデータに対し、特定の演算を並列に実行することにより、より効率的に計算を実行することができるであろう。たとえば、図４および図７Ａ〜図７Ｂに関してより詳細に示すように、スタッガードデータに対する処理により、ベクトル縮小ユニット３００または行列転置もしくは行列畳み込みを実行するためのその他のコンポーネントは、特定の演算を並列に実行すること、または、連続する入力ベクトルまたは行列の処理を最適化することができる。たとえば、複数の入力ベクトルに対応するスタッガードデータに対する処理により、ベクトル縮小ユニット３００は、複数の入力ベクトルに対するベクトル縮小演算を、同一のサイクル中に実行することができる。図４により詳細に示されるように、ベクトル縮小ユニット３００は、スタッガードデータを、異なる入力ベクトルの要素が同一のサイクル中にベクトル縮小ユニット３００に与えられるように、受けることができる。ベクトル縮小ユニット３００は次に、１つのサイクル中に異なる入力ベクトルの縮小を計算するための演算を実行することができる。
【００４４】
値ローダ３１０は、入力ベクトルに対応するデータを受け、このデータを入力レジスタ３２０に与える。特定の値ローダ３１０が受けたデータが入力ベクトルの要素または別の入力ベクトルの要素に対応していない場合、この値ローダ３１０は当該データを無視または破棄することができる。これらの場合において、入力レジスタ３２０は、この値ローダ３１０からデータを受けない可能性がある、またはｎｕｌｌ、正、もしくは負の無限値を受ける可能性がある、またはこの値ローダ３１０から受けた要素が入力ベクトルの要素を含まないことを示すその他のデータを受ける可能性がある。たとえば、値ローダ３１０が３×１入力ベクトルを受けた場合、値ローダ［３］が受けた値は、入力ベクトルの要素に対応していないことを理由に、無視または破棄される可能性がある。しかしながら、値ローダ［３］が受けた値が、前の入力ベクトル、たとえばその第１の要素を３×１入力ベクトルの第１の要素よりも前に受けた４×１入力ベクトルに対応する場合、値ローダ［３］が受けた値は入力レジスタ３２０に与えることができる。
【００４５】
いくつかの実装形態において、ベクトル縮小ユニット３００は、縮小ユニット３００がベクトル入力データを処理している間にのみベクトル縮小演算を実行するように構成されている。たとえば、ベクトル縮小演算を、入力ベクトルの第１の要素を受けたときにトリガしてもよい。これにより、回路の効率を、たとえば消費電力の削減によって改善することができ、別の入力ベクトルの要素に対応しない入力ベクトルの第１の要素の前に入力レジスタ３２０が受けたその他のデータが、入力ベクトルに対するベクトル縮小の実行結果に影響を与えないことを、保証することができる。たとえば、値ローダ３１０はスタッガードデータを受けるので、値ローダ［０］において入力ベクトルの第１の要素を受けたときにベクトル縮小演算がトリガされる場合、先行するサイクル中に受けたどのデータも入力ベクトルの縮小結果に影響を与えない。入力レジスタ３２０は、入力ベクトルに対応するデータを受けて格納する。たとえば、値ローダ３１０が入力ベクトルの要素を受けてこれらの要素を入力レジスタ３２０に送ると、これらの要素は入力レジスタに格納される。入力レジスタ３２０は、値ローダ３１０からデータを受けるために、値ローダ３１０の数以上の要素を含み得る。値ローダ３１０から受けるデータはスタッガードであるので、入力レジスタ３２０は、どの時点でも入力ベクトルの要素をすべて含むことはなく、むしろ、典型的には入力ベクトルの１つの要素のみを含む。加えて、データはスタッガードであるので、ベクトル縮小ユニット３００が連続する入力ベクトルを受けた場合、入力レジスタ３２０は複数の入力ベクトルの要素を同時に含む可能性がある。
【００４６】
ベクトル縮小ユニット３００の計算ユニット３３０は、入力レジスタ３２０に格納されている要素を受けるかまたはこの要素にアクセスする。計算ユニット３３０は、各々が入力レジスタ３２０の要素にまたは特定の値ローダ３１０に対応する複数のセルを含み得る。たとえば、ベクトル縮小ユニット３００が４つの値ローダ３１０を含む場合計算ユニット３３０はベクトル縮小演算を実行するために４つのセルを含み得る。
【００４７】
計算ユニット３３０はまた、ベクトル縮小制御信号３０５と、制御レジスタ３１５からのデータとを受ける。ベクトル縮小制御信号３０５は、計算ユニット３３０が実行すべきベクトル縮小演算の特定のタイプを指定することができる。たとえば、ベクトル縮小制御信号３０５は、合計ベクトル縮小演算、最大値縮小演算、最小ベクトル縮小演算、最大インデックスベクトル縮小演算、最小インデックスベクトル縮小演算、積ベクトル縮小演算、平均ベクトル縮小演算、または、別のベクトル縮小演算を指定することができる。ベクトル縮小ユニット３００は、ベクトル縮小制御信号３０５を、専用ハードウェア回路２００のシーケンサ２０６から、行列−ベクトル処理システム１００の行列−ベクトル処理エンジン１５０から、または別のソースから、受けることができる。
【００４８】
制御レジスタ３１５は、制御ベクトルを受けて格納することができる。制御ベクトルは、受けた入力ベクトルに対して計算ユニット３３０がセグメント化ベクトル縮小を実行すべきか否かおよび如何にして実行すべきかを指定する。図４に関してより詳細に説明するように、制御ベクトルは、計算ユニット３３０のセルに制御信号として与えることができる要素を含む。これらの要素は、計算ユニット３３０の各セルが、このセル内で実行されたベクトル縮小演算の結果を計算ユニット３３０の別のセルに与えるべきであるのか、または、このセル内で実行されたベクトル縮小演算の結果を入力ベクトルのセグメントを縮小したものとして出力すべきであるのかを、示すことができる。言い換えると、制御ベクトルの各要素は、制御信号として対応するセルに与えることができ、入力ベクトルのセグメントのエンドポイントをこのセルが処理しているか否かを示す。
【００４９】
ベクトル縮小演算の結果が、１つのセルから別のセルに与えられるとき、そのセルにおいてはセグメント化ベクトル縮小は発生しない。よって、たとえば、すべてのセルが、または最後のセルを除くすべてのセルが各々、そのセル内で実行されたベクトル縮小演算の結果を計算ユニット３３０の別のセルに与えるようにセルを制御する制御信号を受ける場合、ベクトル縮小制御信号３０５が示すベクトル縮小演算を、入力ベクトルの要素すべてに適用する。したがって、計算ユニット３３０の出力、たとえば計算ユニット３３０の最後のセルの出力は、入力ベクトル全体を縮小して１つの結果を生成する非セグメント化ベクトル縮小演算の結果である。
【００５０】
計算ユニット３３０の特定のセルがベクトル縮小演算の結果を別のセルに与えないとき、すなわちセグメント化ベクトル縮小演算が発生しないとき、ｎｕｌｌ、すなわちゼロ、または正もしくは負の無限等のプレースホルダー信号が、この特定のセルから計算ユニット３３０の別のセルに与えられてもよい。この結果は、特定のセルが受けた入力ベクトルの要素において生じるセグメント化縮小である。なぜなら、特定のセルが実行するベクトル縮小演算の結果は、この特定のセルが受ける入力ベクトルの要素を含めてこの要素までの入力ベクトルの要素に対してセグメント化ベクトル縮小を実行した結果として、出力されるからである。ｎｕｌｌまたは正もしくは負の無限は、特定のセルから計算ユニット３３０の別のセルに与えられるので、入力ベクトルの残りの要素に対する新たなベクトル縮小計算を効果的に開始させることにより、入力ベクトルの残りの要素に対するセグメント化ベクトル縮小の第２の部分を生成する。
【００５１】
計算ユニット３３０のセルは縮小演算を実行して入力ベクトル縮小の結果を生成する。各セルは入力ベクトルの特定の要素を処理することができる。そうするために、図４でより詳細に説明するように、セルは一時縮小要素を受ける。一時縮小要素は、計算ユニット３３０の先行するセルが実行したベクトル縮小演算の結果であるか、または、プレースホルダー信号もしくは初期化値、たとえばｎｕｌｌまたは正もしくは負の無限である。このセルはまた、入力ベクトルの特定の要素を受け、上記一時縮小要素と入力ベクトルの特定の要素とを用いて、ベクトル縮小制御信号３０５が指定するベクトル縮小演算を実行する。セグメント化縮小演算が要求されない場合、セルは、計算ユニット３３０の次のセルに、指定されたベクトル縮小演算の実行結果を与える。セグメント化縮小演算が要求された場合、セルは、プレースホルダー、たとえばｎｕｌｌまたは正もしくは負の無限を次のセルに与える。このセルはまた、上記入力ベクトルの特定の要素を含むこの要素までの入力ベクトルの要素に対するセグメント化ベクトル縮小の実行結果に対応する、指定されたベクトル縮小演算の実行結果を出力する。セグメント化ベクトル縮小演算が要求されない場合、入力ベクトルのすべての要素に対してベクトル縮小演算を実行した結果に相当する、入力ベクトルの最後の要素を用いて指定されたベクトル縮小演算を実行した結果を、出力のために提供してもよい。
【００５２】
計算ユニット３３０が実行したベクトル縮小プロセスの出力を、値出力３４０が受ける。値出力３４０は、出力を受けてこれらの出力をスタッガード状に書き込むことができる。計算ユニット３３０のセルのうちのいずれもベクトル縮小の結果を提供するように構成できるので、ベクトル縮小ユニット３００は、計算ユニット３３０のセルに対応する値出力［０］〜［３］を含む。たとえば、計算ユニット３３０の第２のセルが、そのセルにおいてセグメント化ベクトル縮小をこのセルが実行すべきであることを示す信号を、制御レジスタ３１５から受けた場合計算ユニット３３０の第２のセルは、出力を値出力［１］に与えることができる。セグメント化ベクトル縮小が指示されなかった場合は、ベクトル縮小の結果を、出力のために、値出力［３］に対応する、計算ユニット３３０の最後のセルに、与えることができる。いくつかの例において、たった１つの値出力３４０が必要な場合があり、たとえば、計算ユニット３３０のセルからの出力はすべて、同一の値出力３４０に与えられる。セグメント化ベクトル縮小演算が要求された場合、値出力ベクトル縮小ユニット３００は結果のベクトルを出力することができ、このベクトルの各要素は、入力ベクトルのセグメントを縮小したものである。値出力３４０は、出力ベクトルの要素をレジスタ、たとえば出力レジスタに与えることができ、セグメント化入力ベクトル縮小の結果は、たとえばベクトル縮小ユニット３３０から出力されるスタッガード出力ベクトルとして、出力用にベクトルフォーマットで一緒に与えることができる。
【００５３】
値出力３４０は、計算ユニット３３０からベクトル縮小結果を受け、専用ハードウェア回路のメモリ、たとえば、メモリ２０８に、専用ハードウェア回路の別のコンポーネント、たとえば行列もしくはベクトル置換（permute）ユニットに、または、オフチップの場所に、たとえば行列−ベクトル処理エンジン１５０または行列−ベクトル処理システム１００の外部の別の目的地に、出力することができる。
【００５４】
図４は、ベクトル縮小ユニットの計算ユニットの、一例としてのアーキテクチャ４００を示す。アーキテクチャ４００は、たとえば図２のメモリ２０８と同様のメモリ４１０と、たとえば図３のベクトル縮小制御信号３０５と同様のベクトル縮小制御信号４０５と、たとえば図３の制御レジスタ３１５と同様の制御レジスタ４１５と、たとえば図３の値出力３４０と同様の値出力４４０とを含む。このアーキテクチャはまた、図３の計算ユニット３３０のセルに対応するセル４３０を含む。図４に示されるセルは直列接続されている、すなわちセル［０］はセル［１］に接続され、セル［１］はセル［２］に接続されるといったように直列接続されているが、その他の実装形態においてセル４３０は他の順序で接続されていてもよく、たとえば、セル［１］が、セル［０］以外のセルからデータを受け、データをセル［２］以外のセルに与えてもよい。
【００５５】
セル４３０の各々は、メモリ４１０から、スタッガードデータのレーンを受ける。ある例において、セル４３０は、図４には示されていないが、図３の値ローダ３１０と同様の値入力から、データを受けることができる。たとえば、チャート４５０は、４つのセル［０］〜［３］に対応する４つのレーン各々にデータが如何にしてスタッガード状に書き込まれるかを示すことができる。したがって、サイクル０においてセル［０］は入力ベクトル［０］の第１の要素を受けることができ、サイクル１においてセル［０］は入力ベクトル［１］の第１の要素を受けることができセル［１］は入力ベクトル［０］の第２の要素を受けることができ、以降同様に続く。
【００５６】
各セル４３０はまた、実行すべきベクトル縮小演算を指定するベクトル縮小制御信号４０５を受ける。図４に示されるように、同一のベクトル縮小制御信号４０５をセル４３０各々に与えることができる。しかしながら、その他の実装形態において、異なるベクトル縮小制御信号を、セル４３０の各々にまたはそのサブセットに与えることができる。異なるベクトル縮小制御信号を異なるセル４３０に与えることにより、アーキテクチャ４００が異なるタイプのベクトル縮小演算を同時に実行できるようにすることができる。たとえば、制御信号をセル４３０に与えることにより、第１の入力ベクトルに対する合計ベクトル縮小と第２の入力ベクトルに対する最大値ベクトル縮小とをセル４３０に実行させることができる。入力ベクトルがスタッガード状に入力されることにより、これらの異なるベクトル縮小演算をセル４３０が同時に実行できるようにしてもよい。同様に、セグメント化ベクトル縮小演算を実行する場合、入力ベクトルの第１のセグメントに対して第１のタイプのベクトル縮小演算、たとえば合計ベクトル縮小を実行し、入力ベクトルの第２のセグメントに対して第２のタイプのベクトル縮小演算、たとえば最大値ベクトル縮小演算を実行してもよい。いくつかの実装形態において、セル４３０は、１つのタイプのベクトル縮小演算を実行するように、または、入力ベクトルごとに同一の要素位置でベクトル縮小演算をセグメント化するように、構成される。これらの実装形態において、ベクトル縮小制御信号４０５または制御レジスタ４１５は、アーキテクチャ４００の任意のコンポーネントであってもよい。
【００５７】
また、各セル４３０は、アーキテクチャ４００においてセグメント化ベクトル縮小を制御するための制御信号として作用する、制御レジスタ４１５に格納された制御ベクトルの要素を受ける。制御レジスタ４１５は、制御信号のベクトルを受けることができる、または、制御レジスタ４１５の特定の要素に格納する個々の制御信号を受けることができる。各制御信号は、セル４３０によって解釈される値を指定することにより、セル４３０がセグメント化ベクトル縮小演算をセル４３０において実行すべきかまたは非セグメント化ベクトル縮小演算をセル４３０において実行すべきかを、示すことができる。
【００５８】
たとえば、セル４３０が制御レジスタ４１５から受けた値ゼロは、セル４３０がセグメント化ベクトル縮小演算をセル４３０において実行してはならないこと、すなわちセル４３０は入力ベクトルのセグメントのエンドポイントとして扱われるべき入力ベクトルの要素を受けていないことを、示すことができる。非セグメント化ベクトル縮小演算を実行するために、セル４３０は、初期化値またはプレースホルダー信号、たとえば、ｎｕｌｌまたは正もしくは負の無限、または、前のセル４３０からの前のベクトル縮小演算の結果に対応する、図４において＜値＞として示されている一時縮小要素を受けることができる。セル４３０はまた、たとえば最大インデックスもしくは最小インデックスベクトル縮小演算の実行に使用する、スタッガード入力データのレーンに対応する特定のセル４３０を示す、図４において＜インデックス＞として示されているインデックスを、受けることができる。いくつかの実装形態において、インデックスはメモリ場所、たとえば入力ベクトルが格納されていたまたは格納されているメモリ２０８内の場所であってもよい。セル４３０はまた、メモリ４１０から入力ベクトルの要素を受ける。セル４３０は、ベクトル縮小制御信号４０５によって指定されたベクトル縮小演算を実行し、このベクトル縮小演算の結果と、任意でベクトル縮小演算から得られたインデックスとを、アーキテクチャ４００の次のセル４３０に与える。任意で、セル４３０はまた、これらの結果を値出力４４０に与えることができる。次のセル４３０は、ベクトル縮小演算の結果をセル４３０から受けることができ、この結果を、次のセル４３０で、たとえば次のサイクルで実行するベクトル縮小演算において使用することができる。
【００５９】
これに代えて、セル４３０が値１を受けた場合、セル４３０は、セグメント化ベクトル縮小演算を実行し、受けた入力ベクトルの要素を入力ベクトルのセグメントのエンドポイントとして扱うことができる。そうするために、セル４３０は、セル４３０において実行したベクトル縮小演算の結果を、受けた要素で終わる入力ベクトルのセグメントに対してベクトル縮小演算を実行した結果として、出力する。セグメント化ベクトル縮小演算を実行するために、セル４３０は、初期化値または前のセル４３０からの前のベクトル縮小演算の結果に対応する、一時縮小要素を受けることができる。セル４３０はまた、前のセル４３０からインデックスを受けることもできる。セル４３０はまた、メモリ４１０から入力ベクトルの要素を受ける。セル４３０は、ベクトル縮小制御信号４０５によって指定されたベクトル縮小演算を実行する。しかしながら、セル４３０は、結果をアーキテクチャ４００の次のセル４３０に与えるのではなく、この結果をセグメント化ベクトル縮小演算の結果として値出力４４０のみに与える。セル４３０は、次のセル４３０に対し、ｎｕｌｌまたは正もしくは負の無限を、すなわち次のセル４３０で開始すべき次のベクトル縮小のための初期化値またはプレースホルダー信号として、送る。
【００６０】
たとえば、セル［１］は、セル［０］から、ベクトル縮小制御信号によって指定されたベクトル縮小演算をセル［０］が実行した結果に対応する、一時縮小要素を、受けることができる。セル［０］が実行したベクトル縮小演算の結果は、入力ベクトル［０］の第１の要素である可能性がある。たとえば、ベクトル縮小制御信号４０５が合計ベクトル縮小演算を指定した場合、セル［０］からセル［１］に出力される結果は、入力ベクトル［０］の第１の要素であろう。セル［１］はまた、入力ベクトル［０］の第２の要素を受けてもよい。そうすると、セル［１］は、ベクトル縮小制御信号４０５が指定したベクトル縮小演算、たとえば合計ベクトル縮小演算を実行して結果を生成することができる。たとえば、指定されたベクトル縮小演算が合計ベクトル縮小演算である場合、結果は入力ベクトル［０］の第１の要素および第２の要素の合計である。
【００６１】
制御レジスタ４１５の［１］位置から受けた制御信号に基づいて、セル［１］は、この結果をセル［２］にまたは値出力［１］にまたはこれら双方に与えることができる。たとえば、制御信号が、セル［１］に対し非セグメント化ベクトル縮小演算を指定する値ゼロである場合、セル［１］は、結果をセル［２］に与えることができ、任意でこの結果を値出力［１］にも与えて、たとえばベクトル縮小演算の中間結果を出力することができる。制御信号が、セル［１］に対しセグメント化ベクトル縮小演算を指定する値１である場合、セル［１］は、結果を値出力［１］に出力することにより、セグメント化ベクトル縮小演算の結果、たとえば入力ベクトル［０］の最初の２つの要素の合計を、出力する。しかしながら、セル［１］は、この結果を一時縮小要素としてセル［２］に出力しない。むしろ、セル［１］は、ｎｕｌｌまたは正もしくは負の無限をセル［２］に与え、セル［２］は受けたこの値を一時縮小要素として使用する。よって、セル［２］が入力ベクトル［０］の第３の要素をメモリ４１０から受ける場合、セル［２］が実行するベクトル縮小演算は、入力ベクトル［０］の第２のセグメントに対する第２のベクトル縮小演算に対して実行される第１の演算であろう。ベクトル縮小演算の結果、すなわちセグメント化ベクトル縮小演算が実行された場合の結果は、値出力４４０に出力され、専用ハードウェア回路２００のまたは行列−ベクトル処理システム１００の他のコンポーネントに、与えることができる。
【００６２】
ベクトル縮小制御信号４０５が示すベクトル縮小演算が最小インデックスベクトル縮小演算または最大インデックスベクトル縮小演算を指定している場合、セル４３０の各々は、スタッガード入力データの１レーンに対応する特定のセル４３０を示すインデックスを提供することができる。いくつかの例において、このようなインデックスは常に、ベクトル縮小演算が実行されるとセル４３０から出力されてもよいが、ベクトル縮小制御信号４０５が最大または最小インデックスベクトル縮小演算を指定しない限りは使用できるデータではないであろう。ベクトル縮小制御信号４０５がこれらのベクトル縮小演算のうちの１つを指定する場合、セル４３０の＜値＞出力および＜インデックス＞出力双方が、出力を正確に求めるのに必要であろう。たとえば、最大インデックスベクトル縮小演算が指定された場合、セル［０］はセル［１］に対し、セル［０］が一時縮小要素として受けた入力ベクトル［０］の第１の要素の値と、入力データの第１のレーンが現在最大値の要素を有するインデックスであることを示すインデックス［０］とを出力することができる。セル［１］はこの値をセル［０］から受け、セル［０］からのこの値を入力ベクトル［０］の第２の要素の値と比較することができる。入力ベクトル［０］の第２の要素の値が入力ベクトル［０］の第１の要素の値よりも大きい場合、セル［１］はセル［２］に、入力ベクトル［０］の第２の値を一時縮小要素として出力することができ、インデックス［１］をセル［２］に出力して、入力データの第２のレーンは現在最大値の要素を有するインデックスであることを示すことができる。このプロセスは、制御ベクトルがセグメント化ベクトル縮小演算を指定するのかまたは非セグメント化ベクトル縮小演算を指定するのかに応じて、各セル４３０において繰り返すことができる。ベクトル縮小演算の完了後、セル４３０は、一時縮小要素すなわち値を出力するのではなくインデックス値を値出力４４０に出力する。
【００６３】
いくつかの例において、システムが使用する初期化要素は、ベクトル縮小制御信号４０５が指定するベクトル縮小演算によって決まり得る。たとえば、合計ベクトル縮小演算が指定された場合は、ｎｕｌｌ値を初期化値として使用することができる。積ベクトル縮小演算が指定された場合は、単位値１を初期化値として使用することができる。最大値ベクトル縮小演算または最大インデックスベクトル縮小演算が指定された場合は、負の無限を初期化要素として使用することができる。最小値ベクトル縮小演算または最小インデックスベクトル縮小演算が指定された場合は、正の無限を初期化要素として使用することができる。いくつかの例において、特定のベクトル縮小演算に使用する初期化値は、外部のベクトル縮小ユニット４００から、たとえばベクトル縮小制御信号４０５と同様の第２の信号として受けた信号によって示されるまたは与えられる。その他の実装形態において、セル４３０は、ベクトル縮小制御信号４０５が指定するベクトル縮小演算に基づいて初期化要素を決定することが可能であってもよい。たとえば、セル４３０は、合計ベクトル縮小演算を指定する信号をセル４３０が受けたことに基づいて、初期化要素としてｎｕｌｌを使用すべきであると判断することができる。
【００６４】
図５は、ベクトル縮小ユニットのセルの、一例としてのアーキテクチャ５００を示す。たとえば、図４のセル４３０の各々は、アーキテクチャ５００と同様のアーキテクチャを有していてもよい。
【００６５】
この一例としてのアーキテクチャ５００は、一時縮小要素を受ける一時縮小要素レジスタ５０２を含む。一時縮小要素は、別のセルから、たとえば図４のセル４３０のうちの別のセルから受けることができる。いくつかの例において、一時縮小要素レジスタ５０２は、たとえばｎｕｌｌ、正の無限、または負の無限の値に初期化することができる。たとえば、ベクトル縮小ユニット４００のセル［０］は、前のセルが実行したベクトル縮小演算の結果を受けないので、その一時縮小要素レジスタ５０２がゼロに初期化される場合がある。アーキテクチャ５００はまた、入力ベクトルの要素を受ける入力ベクトル要素レジスタ５０４を含む。たとえば、ベクトル縮小ユニット４００のセル［０］の入力ベクトル要素レジスタ５０４は、入力ベクトル［０］の第１の要素を受けて格納することができ、ベクトル縮小ユニット４００のセル［１］の入力ベクトル要素レジスタ５０４は、入力ベクトル［０］の第２の要素を受けて格納することができ、以降同様に続く。
【００６６】
一時縮小要素はマルチプレクサ５０８に与えることができ、入力ベクトルの要素はマルチプレクサ５１０に与えることができる。各マルチプレクサ５０８、５１０を、ベクトル縮小制御信号５０５によって制御してもよく、ベクトル縮小制御信号５０５は、それぞれの要素を特定の計算回路５１２、５１４、５１６に与えるようにマルチプレクサ５０８、５１０を制御するための選択信号として作用する。
【００６７】
たとえば、ベクトル縮小制御信号５０５は、最大値ベクトル縮小演算または最小値ベクトル縮小演算が実行される予定であることを示すことができ、この信号５０５に応じて、マルチプレクサ５０８、５１０は一時縮小要素と入力ベクトル要素とを、要素を比較することによってこれらの要素の最小または最大を求めるように構成された比較回路５１２に与えることができる。同様に、ベクトル縮小制御信号５０５が、合計ベクトル縮小演算が実行される予定であることを示す場合、マルチプレクサ５０８、５１０は、この信号５０５を受けそれに応じて一時縮小要素と入力ベクトル要素とを、要素を合計するように構成された合計回路５１４に与えることができる。ベクトル縮小制御信号５０が、積ベクトル縮小演算が実行される予定であることを示す場合、マルチプレクサ５０８、５１０は、一時縮小要素と入力ベクトル要素とを、要素の積を計算するように構成された乗算回路５１６に与えることができる。その他の計算回路、たとえばインデックス識別回路、算術平均を計算するための回路、またはそれ以外の計算回路も、アーキテクチャ５００に含まれていてもよい。
【００６８】
いくつかの実装形態において、セルは、１つのタイプのベクトル縮小演算を実行するように構成されてもよい。このような実装形態では、１つの計算回路、たとえば、比較回路５１２、合計回路５１４、または乗算回路５１６のうちの１つのみが、含まれていてもよい。加えて、このような実装形態において、特定のタイプのベクトル縮小演算を実行するようアーキテクチャ５００に命令するためのベクトル縮小制御信号５０５は不要であろう。よって、ベクトル縮小制御信号５０５およびマルチプレクサ５０８、５１０は任意であってもよい。
【００６９】
計算回路５１２、５１４、５１６で実行された計算の結果は、結果レジスタ５２０に出力される。結果レジスタ５２０は、制御信号５１５も受ける。制御信号５１５は、アーキテクチャ５００を有する特定のセルに対応する図４の制御レジスタ４１５の要素であってもよい。たとえば、アーキテクチャ５００がベクトル縮小ユニット４００のセル［１］に対応する場合、制御信号５１５は、制御レジスタ４１５の［１］位置の要素に対応する信号であってもよい。
【００７０】
結果レジスタ５２０は、制御信号５１５に基づいて、結果を１つ以上のコンポーネントに出力する。制御信号５１５が、セグメント化ベクトル縮小演算は行われない予定であることを示す、たとえば制御信号５１５がゼロである場合、結果レジスタ５２０は、計算回路５１２、５１４、５１６から受けた結果を、次のセルに、たとえば、次のセルの一時縮小要素レジスタで受けられるように、与えることができる。任意で、セグメント化ベクトル縮小演算が行われない予定である場合、結果レジスタ５２０は、結果を、たとえば図４の値出力４４０のうちの１つである、値出力にも出力することができる。
【００７１】
制御信号５１５が、セグメント化ベクトル縮小演算が行われる予定であることを示す場合、結果レジスタ５２０は、計算回路５１２、５１４、５１６から受けた結果を、たとえば図４の値出力４４０である、値出力に与えることができる。結果レジスタは、次のセルにも、たとえば、次のセルの一時縮小要素レジスタにも、アーキテクチャ５００に対応付けられたセルにおいて入力ベクトルのベクトル縮小をセグメント化するために、ｎｕｌｌ、正の無限、または負の無限の値を、与えることができる。
【００７２】
その他のセルアーキテクチャも可能である。いくつかの実装形態において、計算回路５１２、５１４、５１６のコンポーネントを直列に配置してもよい。たとえば、比較回路５１２は一時縮小要素と入力ベクトル要素とを受けてもよい。比較回路５１２の出力は合計回路５１４の入力として与えてもよく、合計回路５１４の出力は乗算回路５１６の入力として与えてもよく、乗算回路５１６の出力を結果レジスタ５２０に与えてもよい。このような実装形態において、ベクトル縮小制御信号５０５は、計算回路５１２、５１４、５１６の各コンポーネントを起動または作動停止状態にして、データに対し、ベクトル縮小演算のうちの１つのみが、計算回路５１２、５１４、５１６のコンポーネントを通過するときに実行されるようにしてもよい。このようなアーキテクチャは、ベクトル縮小制御信号５０５を同様に解釈するために計算回路５１２、５１４、５１６のコンポーネントを必要とするであろうが、マルチプレクサ５０８、５１０の必要性を低減するであろう。その他のアーキテクチャも本明細書の範囲に含まれる。
【００７３】
図６は、入力ベクトルに対してベクトル縮小を実行するための、一例としてのプロセス６００である。いくつかの例において、入力ベクトルは入力行列のベクトルであってもよい。一般的に、プロセス６００は、専用ハードウェア回路、たとえば図１のベクトル縮小ユニット１２０を備える専用ハードウェア回路１１０を含む１つ以上のコンピュータからなるシステムによって実行することができる。
【００７４】
入力ベクトルを縮小したものを生成するために、本システムは一連の動作（６０２〜６０８）を実行する。たとえば、専用ハードウェア回路は複数のセルを含み得るものであり、入力ベクトルの指定された第１の要素を受ける指定された第１のセル以外、これら複数のセルの各々は、入力ベクトルの特定の要素に対して動作（６０２〜６０８）を実行することによってベクトル縮小を計算するように構成されている。いくつかの実装形態において、入力ベクトルの指定された第１の要素を受ける指定された第１のセルは、前のセルの出力を受けないので、動作（６０２〜６０８）を実行しない。よって、指定された第１のセルは、入力ベクトルの、最初に指定された第１の要素を、システムにおける次のセルに与えるだけである。その他のセルの各々は、前のセルの出力を受け、一連の動作（６０２〜６０８）を実行することによって、次のセルに与えられる、自身の出力を生成する。入力ベクトルの最後の要素に対応する、システムの最後のセルの出力は、指定されたベクトル縮小演算の実行結果である。
【００７５】
セルは入力ベクトルの特定の要素を受ける（６０２）。たとえば、回路の特定のセルは、入力ベクトルの特定の要素を受けることができる。いくつかの実装形態において、第１のレジスタ、たとえば入力レジスタが、入力ベクトルの要素を受けるように構成されていてもよい。この入力ベクトルの要素を入力レジスタに与えるデータストリームをスタッガードにすることで、入力ベクトルに対応するデータを遅延させながら複数のレーンで受けるようにしてもよい。たとえば、サイクルごとに入力ベクトルの次の要素を入力レジスタで受けるように、データをスタッガードにしてもよい。入力レジスタが受けた入力ベクトルの特定の要素は、回路の特定のセルに与えられる。
【００７６】
セルは、複数のセルのうちの別のセルから、一時縮小要素を受ける（６０４）。一時縮小要素は、入力ベクトルの特定の要素に先行する入力ベクトルの要素に対して縮小演算を実行した結果に相当し得る。たとえば、回路の特定のセルは、受けた入力ベクトルの特定の要素に先行する入力ベクトルの要素に対して縮小演算を実行した結果に相当する一時縮小要素を受けることができる。一時縮小要素は、回路の１つ以上のセルのうちの別のセルから受けることができ、たとえば、前のセルの出力であってもよい。セルは、このセルが入力ベクトルの特定の要素を受けるクロックサイクルと同一のクロックサイクル中に、または、このセルが入力ベクトルの特定の要素を受けるクロックサイクルよりも前のもしくは後のクロックサイクル中に、一時縮小要素を受けることができる。一例として、回路は、図４の入力ベクトル［０］に対してベクトル縮小演算を実行することができる。そうするために、入力ベクトル［０］の要素の各々は、対応するセル４３０で処理される。すなわち、入力ベクトル［０］の第１の要素はセル［０］で処理され、入力ベクトル［０］の第２の要素はセル［１］で処理され、以降同様である。このような例において、セル［２］が受ける一時縮小要素は、入力ベクトルの第１および第２の要素、すなわち、セル［２］が受ける入力ベクトルの第３の要素に先行する入力ベクトルの要素、に対して縮小演算を実行した結果に相当する。
【００７７】
セルは、特定の要素と一時縮小要素とを用いて縮小演算を実行する（６０６）。たとえば、回路の特定のセルは、入力ベクトルの特定の要素と、この特定の要素に先行する入力ベクトルの要素に対し指定されたベクトル縮小演算を実行した結果に相当する一時縮小要素とを受けた後に、受けたデータに対し、制御信号によって指定されたベクトル縮小演算を実行することができる。再び図４の例を参照して、セル［２］は、入力ベクトル［０］の第３の要素と、一時縮小要素としてのセル［１］の出力とを受けた後に、これらの要素に対し、指定されたベクトル縮小演算を実行することができる。たとえば、指定されたベクトル縮小演算が合計ベクトル縮小演算である場合、セル［２］は、入力ベクトル［０］の第３の要素と、セル［１］の出力との合計を計算すればよい。
【００７８】
いくつかの実装形態において、システムの特定のセルは、入力ベクトルの特定の要素と一時縮小要素とを用いて実行するベクトル縮小演算を指定する制御信号を受けることができる。いくつかの実装形態において、この制御信号は、複数のセル各々に対して同一であってもよい、すなわち、回路が受けた１つの制御信号がセル各々に与えられる。その他の実装形態において、回路の各セルは異なる制御信号を受けてもよい。これにより、回路の互いに異なるセルが、それぞれ異なるベクトル縮小演算を同時に実行することができる。これは、セグメント化ベクトル縮小演算が入力ベクトルに対して実行される場合と同様である。このような実装形態において、セルに与えられる制御信号を、回路が、たとえばレジスタにおいてベクトルとして受けてもよく、このベクトルの各要素は制御信号として対応するセルに与えることができる。ベクトル縮小演算のタイプは、たとえば、合計ベクトル縮小演算、最大値ベクトル縮小演算、最小値ベクトル縮小演算、最大インデックスベクトル縮小演算、最小インデックスベクトル縮小演算、平均ベクトル縮小演算、積ベクトル縮小演算、または、その他任意のベクトル縮小演算であってもよい。
【００７９】
セルは、指定された縮小演算を特定の要素と一時縮小要素とを用いて実行した結果を、新たな一時縮小要素として与える（６０８）。たとえば、回路の特定のセルは、指定された縮小演算を特定の要素と一時縮小要素とを用いて実行した結果を、新たな一時縮小要素として、複数のセルのうちの別のセルに与えることができる。再び図４の例を参照して、セル［２］は、入力ベクトル［０］の第３の要素とセル［１］から受けた一時縮小要素とに対し指定されたベクトル縮小演算を実行した後に、この指定されたベクトル縮小演算の結果を、回路のセル［３］に出力することができる。これに代えて、特定のセルが、入力ベクトルの最後の要素に対してベクトル縮小演算を実行したセルである場合、得られた一時縮小要素は、入力ベクトルに対してベクトル縮小を実行した結果に相当する出力として、与えることができる。
【００８０】
システムは、入力ベクトルの最後の要素を用いて縮小演算を実行した結果に相当する新たな一時縮小要素を、入力ベクトルを縮小したものとして出力するために与える（６１０）。たとえば、ベクトル縮小回路は、入力ベクトルの最後の要素を用いてベクトル縮小演算を実行した結果を与えるための、出力回路、たとえば値出力４４０のような１つ以上の値出力を、含み得る。回路の各セルは、入力ベクトルのある要素と、入力ベクトルのこの特定の要素に先行する入力ベクトルの要素に対し指定されたベクトル縮小演算を実行した結果に相当する一時縮小要素とを用いて、ベクトル縮小演算を実行するので、入力ベクトルの最後の要素を用いる指定されたベクトル縮小演算の結果は、入力ベクトルのすべての要素に対して指定されたベクトル縮小演算を実行した結果であろう。したがって、この結果は、入力ベクトルを縮小したものに相当する。たとえば、アーキテクチャ４００のセル［３］は、指定されたベクトル縮小演算を、第４の、すなわち最後の、入力ベクトル［０］の要素と、セル［２］の出力、すなわち先行するセルが出力した一時縮小要素とに対して実行することができる。セル［３］が実行したベクトル縮小演算の結果は、この入力ベクトル全体に対するベクトル縮小演算の結果となる。したがって、この結果を、たとえば値出力［３］に、入力ベクトルを縮小したものとして出力するために与えることができる。いくつかの実装形態において、たとえばベクトル縮小演算を入力ベクトルの複数のセグメントに対して実行する場合、入力ベクトルの最後の要素に対してベクトル縮小を実行した結果は、別のセルに与えることができる。これらの実装形態において、入力ベクトルセグメントの最後の要素に対してベクトル縮小を実行した結果は、この結果を新たな一時縮小要素として次のセルに与えるクロックサイクルと同一のクロックサイクル中に出力のために与えることができる、または、この結果を新たな一時縮小要素として次のセルに与えるときのクロックサイクルの前もしくは後のクロックサイクルにおいて出力のために与えることができる。
【００８１】
まるで回路の１つ以上のセルがデータを順次受けて与えるかのように、たとえばセル［０］と入力ベクトル［０］の第１の要素で始まりセル［３］と入力ベクトル［０］の最後の要素で終わるかのように説明したが、その他の実装形態において、セルは入力ベクトルに対して異なる順序で演算を行ってもよい。これらの実装形態において、セルは、入力ベクトルの異なる要素に対して演算を行ってもよい、または、セルは、あるシーケンスにおいてこのセルの直前または直後のセルではない他のセルから／に、データを受ける／与えてもよい。たとえば、図４のアーキテクチャ４００において、セル［１］の出力を一時縮小要素としてセル［３］に与えてもよく、セル［３］の出力を一時縮小要素としてセル［２］に与えてもよい。これらの実装形態において、入力ベクトルの要素を処理する最後のセルの出力は、この入力ベクトルの縮小結果であろう。
【００８２】
図７Ａ〜図７Ｂは、行列−ベクトルプロセッサにおけるベクトル縮小の実行の一例を示す。いくつかの実装形態において、図７Ａ〜図７Ｂの例は、ベクトル縮小ユニット１２０を含む専用ハードウェア回路１１０を特徴とする図１の行列−ベクトル処理システム１００によって実行することができる。図７Ａ〜図７Ｂに示される例では、合計ベクトル縮小演算が２つの入力ベクトルに対して実行される。第１の入力ベクトルはベクトル［１２３４］であり、第２の入力ベクトルはベクトル［５６７８］である。第１の入力ベクトルに対して実行される合計ベクトル縮小演算はセグメント化ベクトル縮小演算であり、この第１の入力ベクトルに対するベクトル縮小演算の結果は、第１の入力ベクトルの要素［１２］と［３４］との合計に相当する２要素ベクトルである。第２の入力ベクトルに対して実行される合計ベクトル縮小演算はセグメント化ベクトル縮小演算ではなく、この第２の入力ベクトルに対するベクトル縮小演算の結果は、第２の入力ベクトルの要素［５６７８］の合計に相当するスカラーとなる。
【００８３】
図７Ａ〜図７Ｂに示されるフレーム各々において、メモリ２０８を実現するために使用し得るたとえばＤＲＡＭまたはＳＲＡＭであるメモリ７１０は、スタッガードメモリとしてアクセスまたは読み出されてもよい。したがって、各フレームにおいて、スタッガードメモリの読み出しを実行し、入力ベクトルの要素を入力レジスタ７２０で受ける。入力レジスタ７２０は、たとえば図３の入力レジスタ３２０に対応していてもよい。入力レジスタ７２０は、受けた入力ベクトルの要素を、縮小ユニットセル７３０、たとえば図４のセル４３０に与える。図７Ａ〜図７Ｂのフレームの各々は、縮小ユニットセル（前）７３０ａにおいて、ベクトル縮小演算が実行される前の縮小ユニットセル７３０を示し、縮小ユニットセル（後）７３０ｂにおいて、ベクトル縮小演算が実行された後の縮小ユニットセル７３０を示す。また、図７Ａ〜図７Ｂのフレームは制御レジスタ７４０を示し、ベクトル縮小ユニットを、セグメント化または非セグメント化ベクトル縮小演算を実行するように制御するための、制御レジスタ７４０の内容は、図４の制御レジスタ４１５の内容に相当する。入力ベクトルを縮小したものは、たとえば図４の値出力４４０と同様の、出力７５０に出力される。
【００８４】
簡単に説明すると、図７Ａに示されるフレーム（ａ）において、値１を有する第１の入力ベクトルの第１の要素がメモリ７１０から読み出されこれを入力レジスタ７２０で受ける。７３０ａに示されるようにセル７３０はｎｕｌｌに初期化されているが、その他の実装形態においてセル７３０は正の無限、負の無限、または別の値に初期化されてもよい。制御レジスタ７４０は、第１の入力ベクトルのセグメント化ベクトル縮小演算を実現するための要素からなるベクトルを既に受けている。この要素からなるベクトルは［０１０１］であり制御レジスタ７４０に与えられ、要素からなるベクトルの各要素は、対応するセル７３０の制御信号である。制御レジスタ７４０の［０］位置はゼロである、すなわち、非セグメント化ベクトル縮小演算が実行されることを示しているので、セル７３０は、第１の入力ベクトルの第１の要素を受け、これとセル７３０内の現在の値とを合計し、その結果を次のセル７３０に与える。したがって、第１のセル７３０は、演算（Ｎｕｌｌ）＋１＝１を実行し、フレーム（ａ）の７３０ｂに示されるように１を次のセル７３０に送る。７３０ｂに示されるように、第１のセルの内容はｎｕｌｌに初期化されてもよい。
【００８５】
フレーム（ｂ）において、入力レジスタ７２０は、値２を有する第１の入力ベクトルの第２の要素と、値５を有する第２の入力ベクトルの第１の要素とを受ける。第２のセル７３０の縮小ユニットは、現在格納している値と受けた第１の入力ベクトルの第２の要素とを合計する、すなわち、演算（１）＋２＝３を実行する。第２のセル７３０に対する制御レジスタ７４０の要素は１である、すなわちセグメント化ベクトル縮小演算の実行を指定しているので、第２のセル７３０は、結果として得られた合計を、第２の出力７５０に出力する。加えて、第２のセル７３０はゼロを第３のセル７３０に出力する。いくつかの例において、第２のセル７３０は、第３のセル７３０に対し、異なる値、たとえば、ｎｕｌｌ、正の無限または負の無限を出力してもよい。いくつかの例において、出力７５０は１つの出力であってもよく、たとえば、セル７３０はすべて同一の出力７５０に接続されてもよい。
【００８６】
加えて、第１のセル７３０は、第２の入力ベクトルの第１の要素を受け、加算（Ｎｕｌｌ）＋５＝５を実行し、その結果を記憶のために第２のセル７３０に出力する。よって、第２のセル７３０はフレーム（ｂ）の７３０ｂに値５を格納する。図示のように、第１のセル７３０は、ｎｕｌｌ、または別の値に再初期化されてもよい。
【００８７】
フレーム（ｃ）において、入力レジスタ７２０は、第１の入力ベクトルの第３の要素と、第２の入力ベクトルの第２の要素とを受ける。また、第１の入力ベクトルに対してセグメント化ベクトル縮小演算が実行されたので、制御レジスタ７４０は更新されて第２の入力ベクトルの非セグメント化ベクトル縮小演算のための要素を含む。したがって、制御レジスタ７４０の最後の要素のみが１であり、第２の入力ベクトルに対して１つの縮小出力のみが生成される。第３のセル７３０は、フレーム（ｃ）の７３０ａに示されるように値ゼロを格納し、値３を有する第１の入力ベクトルの第３の要素を受け、演算（０）＋３＝３を実行し、７３０ｂに示されるように、その結果を最後のセル７３０に格納する。第２のセル７３０は、７３０ａに、値５を格納し、値６を有する第２の入力ベクトルの第２の要素を受け、演算（５）＋６＝１１を実行し、７３０ｂに示されるように、その結果を第３のセル７３０に格納する。
【００８８】
フレーム（ｄ）において、入力レジスタ７２０の最後の要素は、値４を有する第１の入力ベクトルの最後の要素と、値７を有する第２の入力ベクトルの第３の要素とを受ける。最後のセル７３０は、第１の入力ベクトルの最後の要素を受け、これと最後のセル７３０に格納されている値との合計を計算し、すなわち演算（３）＋４＝７を実行し、１を格納する制御レジスタ７４０に基づいて、その結果を最後の出力７５０に出力する。第３のセル７３０は、第２の入力ベクトルの第３の要素を受け、これと第３のセル７３０に格納されている値との合計を計算し、すなわち演算（１１）＋７＝１８を実行し、その結果を、フレーム（ｄ）の７３０ｂに示されるように最後のセル７３０に格納する。
【００８９】
フレーム（ｅ）において、入力レジスタ７２０は、値８を有する第２の入力ベクトルの最後の要素を受ける。この値は、最後のセル７３０に現在格納されている値に加算される、すなわち演算（１８）＋８＝２６が実行される。縮小ユニットの最後のセル７３０に対応する制御レジスタ７４０の最後の要素が１であるので、その結果は最後の出力７５０に出力される。したがって、入力ベクトル双方の合計ベクトル縮小が出力される。要素はセル７３０から読み出され、たとえば前のセル７３０の出力で置換されないので、セル７３０の内容はｎｕｌｌまたは別の値に再初期化されてもよい。
【００９０】
本明細書に記載の主題の実施形態および機能的動作は、デジタル電子回路において、有形的に実現されたコンピュータソフトウェアまたはファームウェアにおいて、本明細書に開示されている構造およびその構造的均等物を含むコンピュータハードウェアにおいて、または、これらのうちの１つ以上を組み合わせたものにおいて、実現することができる。本明細書に記載の主題の実施形態は、１つ以上のコンピュータプログラムとして、すなわち、データ処理装置によって実行されるまたはデータ処理装置の動作を制御するための有形の非一時的なプログラムキャリア上で符号化されたコンピュータプログラム命令の１つ以上のモジュールとして、実現することができる。これに代えてまたはこれに加えて、プログラム命令は、データ処理装置による実行のために適切な受信装置に送信される情報を符号化するために生成された、人為的に生成された伝搬信号、たとえばマシンによって生成された電気、光、または電磁信号上で符号化することができる。コンピュータ記憶媒体は、マシン読取可能記憶媒体、マシン読取可能記憶基盤、ランダムもしくはシリアルアクセスメモリデバイス、または、これらのうちの１つ以上を組み合わせたものであってもよい。
【００９１】
「データ処理装置」という用語は、例としてプログラマブルプロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを含む、データ処理用のすべての種類の装置、デバイス、およびマシンを包含する。この装置は、専用論理回路たとえばＦＰＧＡ（フィールドプログラマブルゲートアレイ）またはＡＳＩＣ（特定用途向け集積回路）を含み得る。この装置はまた、ハードウェアに加えて、当該コンピュータプログラムのために実行環境を作成するコード、たとえばプロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはこれらのうちの１つ以上の組み合わせを構成するコードを含み得る。
【００９２】
コンピュータプログラム（プログラム、ソフトウェア、ソフトウェアアプリケーション、モジュール、ソフトウェアモジュール、スクリプト、またはコードと呼ぶ、またはそういうものとして説明することもできる）は、コンパイルもしくはインタプリタ言語、または宣言型もしくは手続型言語を含む、任意のプログラミング言語形態で記述することができ、また、スタンドアロンプログラムとしてまたはモジュールとして、コンポーネント、サブルーチン、または計算環境で使用するのに適したその他のユニットを含む、任意の形態でデプロイすることができる。コンピュータプログラムはファイルシステム内のファイルに対応していてもよいがそうでなくてもよい。プログラムは、その他のプログラムまたはデータを保持する、たとえばマークアップ言語文書に保存されている１つ以上のスクリプトを保持するファイルの一部に、または当該プログラム専用の１つのファイルに、または連携している複数のファイル、たとえば１つ以上のモジュール、サブプログラム、またはコードの一部を保存する複数のファイルに、格納することができる。コンピュータプログラムは、１つの場所にある、または複数の場所に分散しており通信ネットワークによって相互接続されている、１つのコンピュータまたは複数のコンピュータ上で実行するためにデプロイすることができる。
【００９３】
本明細書に記載のプロセスおよび論理フローは、入力データに対して作用し出力を生成することによって機能を果たすために１つ以上のコンピュータプログラムを実行する１つ以上のプログラマブルコンピュータによって実行することができる。プロセスおよび論理フローは、専用ロジック回路たとえばＦＰＧＡ（フィールドプログラマブルゲートアレイ）またはＡＳＩＣ（特定用途向け集積回路）によって実行されてもよく、装置は、専用ロジック回路たとえばＦＰＧＡ（フィールドプログラマブルゲートアレイ）またはＡＳＩＣ（特定用途向け集積回路）として実現されてもよい。
【００９４】
コンピュータプログラムの実行に適したコンピュータは、一例として、汎用もしくは専用マイクロプロセッサまたはこれら双方に基づいていてもよく、または、その他任意の種類の中央処理装置に基づいていてもよい。一般的に、中央処理装置は、命令およびデータを、読み取り専用メモリまたはランダムアクセスメモリまたはこれら双方から受ける。コンピュータの必須要素は、命令を実施または実行するための中央処理装置と、命令およびデータを格納するための１つ以上のメモリデバイスとである。一般的に、コンピュータは、データを格納するための１つ以上の大量記憶装置たとえば磁気、光磁気ディスク、または光ディスクを含む、または、上記大量記憶装置からデータを受ける、これにデータを転送する、またはこれら双方のために、上記大量記憶装置に作動的に結合される。しかしながら、コンピュータはこのようなデバイスを有していなくてもよい。加えて、コンピュータは別のデバイスに、たとえば、例を挙げると、携帯電話、携帯情報端末（ＰＤＡ）、モバイルオーディオまたはビデオプレーヤー、ゲーム機、グローバルポジショニングシステム（ＧＰＳ）受信機、またはポータブル記憶装置たとえばユニバーサル・シリアル・バス（ＵＳＢ）フラッシュデバイスに、埋め込まれていてもよい。
【００９５】
コンピュータプログラム命令およびデータを格納するのに適したコンピュータ読取可能媒体は、すべての形態の不揮発性メモリ、媒体およびメモリデバイスを含み、これは、一例として、半導体メモリデバイスたとえばＥＰＲＯＭ、ＥＥＰＲＯＭ、およびフラッシュメモリデバイス、磁気ディスクたとえば内部ハードディスクまたはリムーバブルディスク、光磁気ディスク、ならびにＣＤ  ＲＯＭおよびＤＶＤ−ＲＯＭディスクを含む。プロセッサおよびメモリに、専用論理回路を補充してもよく、専用論理回路にプロセッサおよびメモリが組み込まれていてもよい。
【００９６】
ユーザとのやり取りにおける送信のために、本明細書に記載の主題の実施形態は、ユーザに対して情報を表示するためのディスプレイデバイスたとえばＣＲＴ（陰極線管）またはＬＣＤ（液晶ディスプレイ）モニタと、ユーザがコンピュータに入力を送ることができるようにするためのキーボードおよびポインティングデバイスたとえばマウスまたはトラックボールとを有するコンピュータ上で実現することができる。その他の種類のデバイスを用いてユーザとのやり取りにおける送信が行われるようにしてもよい。たとえば、ユーザに与えられるフィードバックは、任意の形態の感覚フィードバックたとえば視覚フィードバック、聴覚フィードバック、または触覚フィードバックであってもよく、ユーザからの入力は、音響、音声、または触覚入力を含む任意の形態で受けることができる。加えて、コンピュータは、ユーザとの対話を、ユーザが使用するデバイスに文書を送信するかまたはこのデバイスから文書を受信することによって、たとえば、ウェブブラウザから受信した要求に応じてユーザのクライアントデバイス上のウェブブラウザにウェブページを送信することによって、実現してもよい。
【００９７】
本明細書に記載の主題の実施形態は、たとえばデータサーバとしてバックエンドコンポーネントを含む計算システム、または、ミドルウェアコンポーネントたとえばアプリケーションサーバを含む計算システム、または、フロントエンドコンポーネント、たとえば、本明細書に記載の主題を実現したものとユーザとのやり取りを可能にするためのグラフィカルユーザインターフェイスもしくはウェブブラウザを有するクライアントコンピュータを含む計算システム、または、このようなバックエンド、ミドルウェア、またはフロントエンドコンポーネントのうちの１つ以上の任意の組み合わせを含む計算システムにおいて、実現することができる。当該システムのコンポーネントは、デジタルデータ通信の形態または媒体たとえば通信ネットワークによって相互接続することができる。通信ネットワークの例は、ローカルエリアネットワーク（「ＬＡＮ」）およびワイドエリアネットワーク（「ＷＡＮ」）、たとえばインターネットを含む。
【００９８】
計算システムはクライアントとサーバとを含み得る。クライアントとサーバは、通常は互いに離れており、通信ネットワークを通してやり取りするのが一般的である。クライアントとサーバとの関係は、それぞれのコンピュータ上で実行されクライアントとサーバとの関係を有するコンピュータプログラムによって発生する。
【００９９】
本明細書には実装の具体的詳細事項が多く含まれているが、これらは、どの発明の範囲またはクレームし得るものの範囲の限定としても解釈されてはならないものであって、むしろ、特定の発明の特定の実施形態に固有であり得る特徴の説明として解釈されるべきものである。本明細書において、別々の実施形態という観点で記載されている特定の特徴は、１つの実施形態において組み合わせ実現することも可能である。逆に、１つの実施形態という観点から記載されている各種特徴を、複数の実施形態において別々に、または任意の適切な下位の組み合わせとして実現することも可能である。加えて、上記特徴は、特定の組み合わせで機能するものとして記載され最初にそういうものとしてクレームされている場合があるが、クレームされている組み合わせに含まれる１つ以上の特徴は、場合によってはこの組み合わせから省略することができ、クレームされている組み合わせは下位の組み合わせまたは下位の組み合わせの変形に関するものである場合がある。
【０１００】
同様に、動作は図面において特定の順序で示されているが、これは、このような動作が、示されている特定の順序もしくは連続した順序で実行されることを要する、または、示されているすべての動作が所望の結果を得るために実行されることを要する、と理解されてはならない。特定の状況ではマルチタスキングおよび並列処理が好都合である場合がある。加えて、上記実施形態における各種システムモジュールおよびコンポーネントの分離は、すべての実施形態においてこのような分離を要するものと理解されてはならない。記載されているプログラムコンポーネントおよびシステムは一般的に、１つのソフトウェアプロダクトに統合できる、または、パッケージングして複数のソフトウェアプロダクトにできることが、理解されるはずである。
【０１０１】
当該主題の具体的な実施形態は上に述べた通りである。その他の実施形態は以下の請求項の範囲に含まれる。たとえば、請求項に記載の動作は、異なる順序で実行されてそれでもなお所望の結果を得ることができる。一例として、添付の図面に記載されているプロセスは、必ずしも示されている通りの特定の順序または連続した順序によって所望の結果を得ることを要している訳ではない。特定の実装例において、マルチタスキングおよび並列処理が好都合である場合がある。
【図１】
2020513120.tif 000003
【図２】
2020513120.tif 000004
【図３】
2020513120.tif 000005
【図４】
2020513120.tif 000006
【図５】
2020513120.tif 000007
【図６】
2020513120.tif 000008
【図７Ａ】
2020513120.tif 000009
【図７Ｂ】
2020513120.tif 000010
【国際調査報告】
2020513120.tif 000011
2020513120.tif 000012
2020513120.tif 000013