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

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

▶ インテル コーポレイションの特許一覧

特許7586459範囲特有係数セットを使用して単項関数を実行するシステム
<>
  • 特許-範囲特有係数セットを使用して単項関数を実行するシステム 図1
  • 特許-範囲特有係数セットを使用して単項関数を実行するシステム 図2
  • 特許-範囲特有係数セットを使用して単項関数を実行するシステム 図3
  • 特許-範囲特有係数セットを使用して単項関数を実行するシステム 図4
  • 特許-範囲特有係数セットを使用して単項関数を実行するシステム 図5
  • 特許-範囲特有係数セットを使用して単項関数を実行するシステム 図6
  • 特許-範囲特有係数セットを使用して単項関数を実行するシステム 図7
  • 特許-範囲特有係数セットを使用して単項関数を実行するシステム 図8A
  • 特許-範囲特有係数セットを使用して単項関数を実行するシステム 図8B
  • 特許-範囲特有係数セットを使用して単項関数を実行するシステム 図9A
  • 特許-範囲特有係数セットを使用して単項関数を実行するシステム 図9B
  • 特許-範囲特有係数セットを使用して単項関数を実行するシステム 図10
  • 特許-範囲特有係数セットを使用して単項関数を実行するシステム 図11
  • 特許-範囲特有係数セットを使用して単項関数を実行するシステム 図12
  • 特許-範囲特有係数セットを使用して単項関数を実行するシステム 図13
  • 特許-範囲特有係数セットを使用して単項関数を実行するシステム 図14
  • 特許-範囲特有係数セットを使用して単項関数を実行するシステム 図15
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-11
(45)【発行日】2024-11-19
(54)【発明の名称】範囲特有係数セットを使用して単項関数を実行するシステム
(51)【国際特許分類】
   G06F 17/16 20060101AFI20241112BHJP
   G06F 7/483 20060101ALI20241112BHJP
   G06F 7/523 20060101ALI20241112BHJP
【FI】
G06F17/16
G06F7/483
G06F7/523
G06F17/16 M
【請求項の数】 21
【外国語出願】
(21)【出願番号】P 2020106689
(22)【出願日】2020-06-22
(65)【公開番号】P2021039730
(43)【公開日】2021-03-11
【審査請求日】2023-06-20
(31)【優先権主張番号】16/557,959
(32)【優先日】2019-08-30
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】593096712
【氏名又は名称】インテル コーポレイション
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【弁理士】
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】ブライアン ジェイ. ヒックマン
(72)【発明者】
【氏名】ニティン エヌ. ガレグラ
(72)【発明者】
【氏名】マチェイ アーバンスキー
(72)【発明者】
【氏名】マイケル ロツィン
【審査官】三坂 敏夫
(56)【参考文献】
【文献】米国特許出願公開第2018/0081634(US,A1)
【文献】米国特許出願公開第2004/0044710(US,A1)
【文献】特開2018-092294(JP,A)
【文献】特開平10-111865(JP,A)
【文献】特開2006-323710(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/00-17/18
G06F 7/483
G06F 7/523
(57)【特許請求の範囲】
【請求項1】
複数のエントリを記憶するメモリであり、前記複数のエントリのうち各エントリは入力値の範囲の部分に関連づけられ、前記複数のエントリのうち各エントリは冪級数近似を定義する係数セットを含む、メモリと、
前記複数のエントリのうち第1のエントリを、浮動小数点入力値が前記第1のエントリに関連づけられた入力値の範囲の部分内であるとの決定に基づいて選択し、
前記浮動小数点入力値において前記第1のエントリの係数セットにより定義される冪級数近似を評価することにより出力値を算出する
回路を含む算術エンジンと、
を含み、
前記第1のエントリの前記選択は、要求が前記算術エンジンにより実行可能な複数の単項関数のうち第1の単項関数を指定するとの決定にさらに基づき、
前記算術エンジンは、
前記複数の単項関数のうち第2の単項関数を指定する要求に応答して第2の浮動小数点入力値から仮数を抽出し、
前記第2の浮動小数点入力値の指数及び符号を除き前記抽出された仮数に対して冪級数近似を評価し、前記冪級数近似は前記第2の浮動小数点入力値に基づき前記メモリから取り出された係数セットにより定義される、プロセッサ。
【請求項2】
前記算術エンジンは、
前記複数のエントリのうち第2のエントリを、第の浮動小数点入力値が前記第2のエントリに関連づけられた入力値の範囲の部分内であるとの決定に基づいて選択し、
前記第の浮動小数点入力値において前記第2のエントリの係数セットにより定義される冪級数近似を評価することにより第2の出力値を算出する、
請求項1に記載のプロセッサ。
【請求項3】
前記評価された冪級数近似はa+ax+aであり、xは前記浮動小数点入力値であり、a、a、及びaは前記第1のエントリの係数セットである、請求項1に記載のプロセッサ。
【請求項4】
前記範囲は複数の範囲のうち第1の範囲であり、前記算術エンジンは、前記浮動小数点入力値を前記複数の範囲の複数の開始値と比較することにより、前記浮動小数点入力値が前記第1の範囲内であると決定する、請求項1に記載のプロセッサ。
【請求項5】
前記メモリは第2の複数のエントリを記憶し、前記第2の複数のエントリのうち各エントリは第2の入力値の範囲の部分に関連づけられ、前記複数の第2のエントリのうち各エントリは冪級数近似を定義する係数セットを含む、請求項4に記載のプロセッサ。
【請求項6】
前記算術エンジンは、第の浮動小数点入力値が特殊ケースに対応すると決定し、前記特殊ケースに対応する値を出力する、請求項1に記載のプロセッサ。
【請求項7】
前記範囲は、単項関数に関連づけられた複数の範囲のうち第1の範囲であり、前記算術エンジンは、
の浮動小数点入力が前記複数の範囲のうち第2の範囲内であると決定し、
前記第2の範囲が定数モードで動作するよう指定されていると決定し、
前記第2の範囲に関連づけられた定数を第2の出力値として出力する、
請求項1に記載のプロセッサ。
【請求項8】
前記範囲は、単項関数に関連づけられた複数の範囲のうち第1の範囲であり、前記算術エンジンは、
の浮動小数点入力が前記複数の範囲のうち第2の範囲内であると決定し、
前記第2の範囲がアイデンティティモードで動作するよう指定されていると決定し、
前記第の浮動小数点入力を第2の出力値として出力する、
請求項1に記載のプロセッサ。
【請求項9】
複数のエントリを記憶するステップであり、前記複数のエントリのうち各エントリは入力値の範囲の部分に関連づけられ、前記複数のエントリのうち各エントリは冪級数近似を定義する係数セットを含む、ステップと、
前記複数のエントリのうち第1のエントリを、浮動小数点入力値が前記第1のエントリに関連づけられた入力値の範囲の部分内であるとの決定に基づいて選択するステップと、
前記浮動小数点入力値において前記第1のエントリの係数セットにより定義される冪級数近似を評価することにより出力値を算出するステップと、
み、
前記第1のエントリの前記選択は、要求が算術エンジンにより実行可能な複数の単項関数のうち第1の単項関数を指定するとの決定にさらに基づき、
前記算術エンジンは、
前記複数の単項関数のうち第2の単項関数を指定する要求に応答して第2の浮動小数点入力値から仮数を抽出し、
前記第2の浮動小数点入力値の指数及び符号を除き前記抽出された仮数に対して冪級数近似を評価し、前記冪級数近似は、前記第2の浮動小数点入力値に基づき前記複数のエントリから選択されたエントリの係数セットにより定義される、方法。
【請求項10】
前記複数のエントリのうち第2のエントリを、第の浮動小数点入力値が前記第2のエントリに関連づけられた入力値の範囲の部分内であるとの決定に基づいて選択するステップと、
前記第の浮動小数点入力値において前記第2のエントリの係数セットにより定義される冪級数近似を評価することにより第2の出力値を算出するステップと、
をさらに含む請求項に記載の方法。
【請求項11】
前記評価された冪級数近似はa+ax+aであり、xは前記浮動小数点入力値であり、a、a、及びaは前記第1のエントリの係数セットである、請求項に記載の方法。
【請求項12】
第2の複数のエントリを記憶するステップであり、前記第2の複数のエントリのうち各エントリは第2の入力値の範囲の部分に関連づけられ、前記複数の第2のエントリのうち各エントリは冪級数近似を定義する係数セットを含む、ステップ、をさらに含む請求項に記載の方法。
【請求項13】
複数の単項関数の構成を指定する複数の構成レジスタを含む第1のメモリと、
前記複数の単項関数のうち第1の単項関数に関連づけられた複数のエントリを記憶する第2のメモリであり、前記複数のエントリのうち各エントリは入力値の範囲の部分に関連づけられ、前記複数のエントリのうち各エントリは冪級数近似を定義する係数セットを含む、第2のメモリと、
前記複数のエントリのうち第1のエントリを、浮動小数点入力値が前記第1のエントリに関連づけられた入力値の範囲の部分内であるとの決定に基づいて選択し、
前記浮動小数点入力値において前記第1のエントリの係数セットにより定義される冪級数近似を評価することにより出力値を算出する
算術エンジンと、
を含み、
前記第1のエントリの前記選択は、要求が前記算術エンジンにより実行可能な複数の単項関数のうち第1の単項関数を指定するとの決定にさらに基づき、
前記算術エンジンは、
前記複数の単項関数のうち第2の単項関数を指定する要求に応答して第2の浮動小数点入力値から仮数を抽出し、
前記第2の浮動小数点入力値の指数及び符号を除き前記抽出された仮数に対して冪級数近似を評価し、前記冪級数近似は前記第2の浮動小数点入力値に基づき前記第2のメモリから取り出された係数セットにより定義される、システム。
【請求項14】
前記第2のメモリは、前記複数の単項関数のうち第の単項関数に関連づけられた第2の複数のエントリを記憶し、前記第2の複数のエントリのうち各エントリは第2の入力値の範囲の部分に関連づけられ、前記第2の複数のエントリのうち各エントリは冪級数近似を定義する係数セットを含む、請求項13に記載のシステム。
【請求項15】
前記算術エンジンを含む行列処理ユニット、をさらに含む請求項13に記載のシステム。
【請求項16】
前記算術エンジンは、前記冪級数近似を評価する複数の融合乗算加算器を含む、請求項13に記載のシステム。
【請求項17】
前記算術エンジンを含むプロセッサに通信上結合されたバッテリ、前記プロセッサに通信上結合されたディスプレイ、又は前記プロセッサに通信上結合されたネットワークインターフェース、をさらに含む請求項13に記載のシステム。
【請求項18】
複数のエントリを記憶する手段であり、前記複数のエントリのうち各エントリは入力値の範囲の部分に関連づけられ、前記複数のエントリのうち各エントリは冪級数近似を定義する係数セットを含む、手段と、
前記複数のエントリのうち第1のエントリを、浮動小数点入力値が前記第1のエントリに関連づけられた入力値の範囲の部分内であるとの決定に基づいて選択する手段と、
前記浮動小数点入力値において前記第1のエントリの係数セットにより定義される冪級数近似を評価することにより出力値を算出する手段と、
み、
前記第1のエントリの前記選択は、要求が算術エンジンにより実行可能な複数の単項関数のうち第1の単項関数を指定するとの決定にさらに基づき、
前記算術エンジンは、
前記複数の単項関数のうち第2の単項関数を指定する要求に応答して第2の浮動小数点入力値から仮数を抽出し、
前記第2の浮動小数点入力値の指数及び符号を除き前記抽出された仮数に対して冪級数近似を評価し、前記冪級数近似は、前記第2の浮動小数点入力値に基づき前記記憶する手段から取り出された係数セットにより定義される、システム。
【請求項19】
前記複数のエントリのうち第2のエントリを、第の浮動小数点入力値が前記第2のエントリに関連づけられた入力値の範囲の部分内であるとの決定に基づいて選択する手段と、
前記第の浮動小数点入力値において前記第2のエントリの係数セットにより定義される冪級数近似を評価することにより第2の出力値を算出する手段と、
をさらに含む請求項18に記載のシステム。
【請求項20】
前記評価された冪級数近似はa+ax+aであり、xは前記浮動小数点入力値であり、a、a、及びaは前記第1のエントリの係数セットである、請求項18に記載のシステム。
【請求項21】
第2の複数のエントリを記憶する手段であり、前記第2の複数のエントリのうち各エントリは第2の入力値の範囲の部分に関連づけられ、前記複数の第2のエントリのうち各エントリは冪級数近似を定義する係数セットを含む、手段、をさらに含む請求項18に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、一般にコンピュータ開発の分野に関し、より具体的にはデータ処理に関する。
【背景技術】
【0002】
プロセッサは、1つの引数を入力として取り込んで出力を生成する単項関数を実行することがある。単項関数の例は、超越関数(例えば、tanh、log2、exp2、sigmoid)、無理関数(例えば、sqrt、1/sqrt)、並びに機械学習及びニューラルネットワークに有用な一般的な有理関数(例えば、1/x)を含む。入力値(x)のいくつかの単項関数は、加算、減算、及び乗算などの基本的な算術演算を用いて容易には実行されない。
【図面の簡単な説明】
【0003】
図1】特定の実施形態による範囲特有係数セットを使用して単項関数を実行するシステムを示す。
図2】特定の実施形態による単項関数の複数の範囲を示す。
図3】特定の実施形態による第1の算術エンジンを示す。
図4】特定の実施形態による第2の算術エンジンを示す。
図5】特定の実施形態による範囲特有係数セットを使用して単項関数を実行する第1のフローを示す。
図6】特定の実施形態による範囲特有係数セットを使用して単項関数を実行する第2のフローを示す。
図7】特定の実施形態による一例示的なフィールドプログラマブルゲートアレイ(FPGA)を示す。
図8A】特定の実施形態による一例示的なインオーダパイプラインと一例示的なレジスタリネーミングのアウトオブオーダ発行/実行パイプラインとの双方を示すブロック図である。
図8B】特定の実施形態によるプロセッサに含まれるべきインオーダアーキテクチャコアの一例示的な実施形態と一例示的なレジスタリネーミングのアウトオブオーダ発行/実行アーキテクチャコアとの双方を示すブロック図である。
図9A】特定の実施形態による、チップ内のいくつかの論理ブロック(同じタイプ及び/又は異なるタイプの他のコアを潜在的に含む)のうちの1つである、より具体的な例示的なインオーダコアアーキテクチャのブロック図を示す。
図9B】特定の実施形態による、チップ内のいくつかの論理ブロック(同じタイプ及び/又は異なるタイプの他のコアを潜在的に含む)のうちの1つである、より具体的な例示的なインオーダコアアーキテクチャのブロック図を示す。
図10】特定の実施形態による2つ以上のコアを有し得、統合メモリコントローラを有し得、統合グラフィックスを有し得るプロセッサのブロック図である
図11】特定の実施形態による例示的なコンピュータアーキテクチャのブロック図である。
図12】特定の実施形態による例示的なコンピュータアーキテクチャのブロック図である。
図13】特定の実施形態による例示的なコンピュータアーキテクチャのブロック図である。
図14】特定の実施形態による例示的なコンピュータアーキテクチャのブロック図である。
図15】特定の実施形態によるソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令にコンバートするソフトウェア命令コンバータの使用を対比するブロック図である。
【0004】
様々な図面における同様の参照番号及び指定は、同様の要素を示す。
【発明を実施するための形態】
【0005】
単項関数(Unary functions)は、プロセッサ内に存在するルックアップテーブル(LUT)を用いて全体的に又は部分的に実現され得る。いくつかのシステムでは、LUTは、カスタマイズされた関数を実現するために必要とされる柔軟性をさらに提供することがある。いくつかのプロセッサは、命令フィールドを介して選択可能な複数の異なる表集計(tabulated)関数(例えば、入力に基づきルックアップを利用し得る機能)を提供し得る。最小精度単位(unit of least precision、ULP)が一様である(例えば、関数に提供される全ての入力が同じULPを有する)とき、LUTはインデックス化するのが比較的容易であり得る。例えば、LUTへのインデックスは、単に右シフトされた入力値でもよく、関数に対する出力は、LUT内でその位置に存在する値、又は選択された値とその次の値との間の線形補間でもよい。しかしながら、浮動小数点(floating-point、FP)数を入力として利用するプロセッサでは、ULPは一様でなく、表集計関数の実装はより一層困難になる。FP入力に関するULPの可変性に起因して、入力の単なる右シフトは、一般に、LUTインデックスを決定するために実行可能なアプローチではない。
【0006】
本開示の様々な実施形態は、入力としてFP数を有する単項関数を実行するロバストな解決策を提供する。本開示の特定の実施形態において、単項関数は、入力に対してとり得る値にわたり連続的に配置された冪級数近似(power series approximations)のセットにより実現される。例えば、表集計関数の結果は、(例えば、a+ax+aの形式の)冪級数の評価により決定されてもよく、xは(潜在的に操作される)入力値であり、a、a、及びaはLUTからの係数である。特定の実施形態において、係数は2段階プロセスにより決定される。第1に、入力FP値が、連続した範囲と比較される。各範囲の開始値は、任意のFP数でもよく、特定の範囲の終了値は、次の範囲の開始値より1ULP小さいFP値である。第2に、入力値の範囲が決定されると、該範囲内の入力値のオフセットに基づいて係数セット(例えば、a、a、及びa)が選択される(したがって、異なる範囲は、異なる一連の係数セットに関連づけられ得、一範囲の異なるセクションは、異なる係数セットに関連づけられ得る)。範囲当たりの係数セットの数は柔軟であり(例えば、0からNであり、Nは任意の適切な整数である)、いくつかの実施形態において、範囲にわたり数値的に一様に分布されてもよい(ただし、非一様な分布も可能である)。次いで、係数セットは入力値xと共に使用され、単項関数の結果を算出する。以下でさらに詳細に説明するように、いくつかの関数は、係数を利用せず又は関数の特性に基づきその他の方法で最適化される1つ以上の範囲を有し得る。
【0007】
上述のように、単項関数の入力はFP数でもよい。様々な実施形態において、任意の適切なFP数が使用されてもよく、FP数は有意(仮数とも呼ばれる)及び指数ビットを含み得る。FP数は符号ビットをさらに含み得る。様々な例として、FP数は、ミニフロート(minifloat)フォーマット(例えば、8ビットフォーマット)、半精度浮動小数点フォーマット(FP16)、ブレイン浮動小数点フォーマット(Brain Floating Point format、bfloat16)、単精度浮動小数点フォーマット(FP32)、倍精度浮動小数点フォーマット(FP64)、又は他の適切なFPフォーマットに従い得る。
【0008】
図1は、特定の実施形態による範囲特有係数(range-specific coefficient)セットを使用して単項関数を実行するシステム100を示す。図示の実施形態において、システム100は、行列処理ユニット104に結合された中央処理ユニット(CPU)102を含む。行列処理ユニット104は、メモリ106及び算術エンジン108を含む(図示の実施形態において、メモリ106は算術エンジン内にある)。メモリは、制御レジスタ110及びルックアップテーブル112を含む。算術エンジン108は、ルックアップテーブル112にアクセスして範囲特有係数を取得し、制御レジスタ110の構成に従って単項関数を実行するように動作可能である。様々な実施形態において、CPU102は、コードを実行し、命令及び入力を行列処理ユニット104に送信することができ、行列処理ユニット104は、命令を実行し、結果をCPU102に送り返すことができる。様々な実施形態において、CPU102は、行列処理ユニット104による単項関数の実行を要求することができ、要求は、行列処理ユニット104により算術エンジン108に渡されてもよく、あるいは、CPU102は、何らかの他の動作を要求することができ、行列処理ユニット104は、要求された動作を実行するために単項関数が実行されるべきであると決定することができ、算術エンジン108に単項関数を実行するように指示することができる。様々な実施形態において、システム100は、ユーザが制御レジスタ110をプログラムして任意の適切なインターフェースを介して関数を定義することを可能にしてもよい。
【0009】
プロセッサ100は特定の実施形態を示すが、本明細書において他の実施形態が考えられる。例えば、いくつかの実施形態において、算術エンジン108は、行列処理ユニットに含まれないが、異なるタイプのプロセッサ(例えば、CPU102又は他のプロセッサ)に含まれる。
【0010】
システム100のプロセッサの各々(例えば、CPU102、行列処理ユニット104、又は算術エンジン108を含む他のプロセッサ)は、マイクロプロセッサ、埋め込みプロセッサ、デジタル信号プロセッサ(DSP)、ネットワークプロセッサ、ハンドヘルドプロセッサ、アプリケーションプロセッサ、コプロセッサ、システムオンチップ(SOC)、又はコードを実行し及び/又は他の処理動作を実行する他のデバイスを含んでもよい。
【0011】
CPU102は、1つ以上の処理要素(例えば、コア)を含んでもよい。一実施形態において、処理要素は、ソフトウェアスレッドをサポートする回路を指す。ハードウェア処理要素の例は、スレッドユニット、スレッドスロット、スレッド、プロセスユニット、コンテキスト、コンテキストユニット、論理プロセッサ、ハードウェアスレッド、コア、及び/又は実行状態又はアーキテクチャ状態などのプロセッサの状態を保持することができる任意の他の要素を含む。換言すれば、一実施形態において、処理要素は、ソフトウェアスレッド、オペレーティングシステム、アプリケーション、又は他のコードなどのコードと独立して関連づけ可能な任意のハードウェアを指す。
【0012】
コアは、独立したアーキテクチャ状態を維持することができる集積回路上に配置された論理を指してもよく、各々独立して維持されるアーキテクチャ状態は、少なくともいくつかの専用実行リソースに関連づけられる。ハードウェアスレッドは、独立したアーキテクチャ状態を維持することができる集積回路上に配置された任意の論理を指してもよく、独立して維持されるアーキテクチャ状態は、実行リソースへのアクセスを共有する。図からわかるように、特定のリソースが共有され、他がアーキテクチャ状態の専用にされるとき、ハードウェアスレッド及びコアの名称間のラインはオーバーラップする。しかし、しばしば、コア及びハードウェアスレッドは、オペレーティングシステムにより個々の論理プロセッサとして見られ、オペレーティングシステムは、各論理プロセッサ上の動作を個々にスケジューリングすることができる。
【0013】
様々な実施形態において、プロセッサに含まれ得る処理要素は、1つ以上の算術論理ユニット(ALU)、浮動小数点ユニット(FPU)、キャッシュ、命令パイプライン、割込処理ハードウェア、レジスタ、又は処理要素の動作を容易にする他のハードウェアをさらに含んでもよい。
【0014】
行列処理ユニット104は、(例えば、ディープラーニングアプリケーションのため)行列に関連づけられた計算を加速する機能を実行する回路を含んでもよい。様々な実施形態において、行列処理ユニット104は、ベクトル‐ベクトル演算、行列‐ベクトル演算、及び行列‐行列演算のうち1つ以上を実行することができる。特定の実施形態において、行列処理ユニット104は、乗算及び除算、加算及び減算、論理演算子(例えば、|、&、^、~)、算術及び論理シフト、比較演算子(>、<、==、!=)、乱数生成、及びプログラマブル関数のうち1つ以上などの、行列に対する要素ごとの(element-wise)演算を実行してもよい。いくつかの実施形態において、行列処理ユニット104は、行/列/行列における最大値及びインデックス、行/列/行列における最小値及びインデックス、並びに行/列/行列にわたる合計のうち1つ以上などの、行列の要素にわたる演算をさらに実行してもよい。
【0015】
算術エンジン108は、1つ以上の単項関数を実行する回路を備える。様々な実施形態において、算術エンジン108は、二項関数(binary functions)(例えば、2つの入力に基づき演算を実行する関数)を実行するように動作可能でもよい。特定の実施形態において、算術エンジン108は、行列処理ユニット104による行列乗算前の入力データに対して二項関数を実行し、行列乗算が実行された後の出力データに対して二項及び単項関数を実行するように動作可能である。特定の実施形態において、算術エンジンは、要素ごとの方式でサイクル当たり32個のbfloat16要素又は16個のFP32要素を処理することができるが、他の実施形態において、算術エンジンは、サイクル当たり他の数の要素を処理するように適合されてもよい。
【0016】
算術エンジン108は、メモリ106を含んでもよい。他の実施形態において、算術エンジン108は、算術エンジン108の一部でないメモリ106にアクセスしてもよい。メモリ106は、任意の不揮発性メモリ及び/又は揮発性メモリを含んでもよい。メモリ106は、任意の適切なタイプのメモリを含むことができ、様々な実施形態における特定の速度、技術、又はフォームファクタのメモリに限定されない。図示の実施形態において、メモリ106は、制御レジスタ110及びルックアップテーブル112を含む。他の実施形態において、制御レジスタ110及びルックアップテーブル112は、別個のメモリに記憶されてもよい。
【0017】
ルックアップテーブル112は、1つ以上の単項関数のための係数セットを含むことができる。例えば、第1の単項関数について、ルックアップテーブル112は、複数のテーブルエントリを含んでもよく、各エントリは、第1の単項関数に対する入力値の範囲のうちそれぞれの部分のための係数を含んでもよい。したがって、第1の単項関数のための第1のテーブルエントリは、該関数に対する入力値が第1の入力値範囲の第1の部分内であるとき使用されるべき係数のセットを含んでもよく、第1の単項関数のための第2のエントリは、該関数に対する入力値が第1の入力値範囲の第2の部分内であるとき使用されるべき異なる係数のセットを含んでもよく、以下同様である。同様に、ルックアップテーブル112は、第1の関数の第2の範囲のための別個の一連の係数セット、第1の関数の第3の範囲のための別の一連の係数セットなどを含んでもよい。同様に、ルックアップテーブル112は、他の関数のための別個の一連の係数セットを含んでもよい。様々な実施形態において、エントリは、圧縮又は非圧縮の係数を記憶することができる。
【0018】
係数は、入力値に基づき単項関数の出力値を算出するために使用される冪級数を定義するために使用され得る。特定の実施形態において、冪級数は、a+ax+aの形式をとり、xは入力値であり、a、a、及びaはルックアップテーブル112から取り出された係数のセットである。他の実施形態において、異なる冪級数が使用されてもよい。例えば、冪級数は、a+ax+a+aの形式をとることができる。より高い次数の同様の冪級数が使用されてもよいが、算術エンジン108のフットプリントは、出力を計算するのに必要とされるさらなる論理とルックアップテーブル112に記憶されるべき係数の数の増加に起因して、冪級数がより複雑になるとき増加する。
【0019】
ルックアップテーブルに記憶される範囲及び対応するエントリの数は、単項関数の複雑さに依存して変わり得る。例えば、高度に最適化された関数は、ごくわずかなエントリ(例えば、16以下の係数セット)を消費する可能性があり、曲線及び非対称関数(例えば、シグモイド)は、かなり多くのエントリ(例えば、約90の係数セット)を利用する可能性がある。
【0020】
図2は、特定の実施形態による単項関数tanhの複数の範囲を示す。いくつかの実施形態において、示された範囲(202、204、206、208、及び210)は各々、1つ以上の係数セットに関連づけることができる(範囲は各々、任意の適切な数の係数セットを利用してもよく、異なる範囲は、異なる数の係数セットを有してもよい)。領域の各セクション(セクションは、2つの細い垂直線の間の入力値を含むエリアとして示されている)は、異なる係数セットにより支配され得る。様々な実施形態において、一範囲内のセクションは、同じサイズである。例えば、1つの係数セットが-2.0から-1.8までのx値に適用されてもよく、次の係数セットが-1.8から-1.6までのx値に適用されてもよく、以下同様である。
【0021】
一般的に、サンプリング密度(すなわち、入力値領域の単位当たりの係数セットの数)は、より高い非線形性を有する範囲ではより高い。したがって、範囲204及び208に使用される係数セットの数は、他の範囲で使用される係数セットの数より一層多い。範囲202は-1に漸近する(すなわち、範囲の入力値にわたり-1の一定出力値を有する)ため、この範囲全体が(a+ax+aの形式の冪級数を仮定して)a=-1、a=0、及びa=0の単一の係数セットを利用してもよい。同様に、範囲210は1に漸近するため、この範囲全体がa=1、a=0、及びa=0の単一の係数セットを利用してもよい。範囲206は線形であり、ゆえにa=0、a=1、及びa=0の単一の係数セットを同様に利用してもよく、それにより、この範囲では出力式は単にxである(すなわち、出力は入力に等しい)。
【0022】
図2に示される範囲は例示に過ぎない。他の実装において、単項関数は、より多くの又はより少ない領域に分けられてもよい。以下に記載されるように、記憶される係数の数を低減させるために、さらなる最適化がなされてもよい。例えば、tanh関数は原点に関して対称であるため、範囲208の係数セットは(適切な符号変更を伴って)範囲204のために再使用されてもよく、ゆえに、範囲204に入る入力値は、範囲208に関連づけられた係数セットのルックアップを結果としてもたらしてもよい。別の例として、出力値が定数である領域(例えば、202及び210)又は出力値が入力値に等しい領域(例えば、206)では、範囲は、出力値を指定するモードに関連づけられてもよく、関数がその範囲内の入力で評価されるとき、ルックアップテーブル112がアクセスされる必要はない。したがって、そのような領域は、関連づけられた係数セットを記憶することなく実現されてもよい。あるいは、そのような領域は、係数セットを利用する上記例に従って実現されてもよい。
【0023】
再び図1を参照し、メモリ106は複数の制御レジスタ110をさらに含む。これらの制御レジスタは、算術エンジン108により実現される単項関数の各々の動作を定義する。あり得る制御レジスタの例が以下に定義されるが、本開示は、本明細書に記載される機能性を実現するための以下又は他の制御レジスタの任意の適切なバリエーションを包含する。各レジスタの実際のビット数は、具体的な実装に依存して変わってもよい。特定の実施形態において、実現される各機能は、その機能専用のそれぞれのレジスタのセットに関連づけられる。
【0024】
イネーブルレジスタ(Enable Register) ‐ このレジスタは、関数を有効にするために設定され得る。特定の実施形態において、このレジスタが設定されておらず、関数を実行する要求が受信されたとき、出力値は非数(not a number、NaN)に設定される。
【0025】
範囲数レジスタ(Number of Ranges Register) ‐ このレジスタは、関数に対して有効にされている範囲の数を定義する。範囲の数が8までに制限されているとき、このレジスタに3ビットが使用され得るが、他の実施形態がより多くの又はより少ない範囲を可能にしてもよい。関数が有効にされている場合、少なくとも1つの範囲が有効である。各関数は、関連づけられた範囲数レジスタを有し得る。
【0026】
範囲モードレジスタ(Range Mode Register) ‐ このレジスタは範囲のモードを指定し、ゆえに、複数のこれらのレジスタが存在してもよく、各レジスタが関数の異なる範囲に対応する。特定の実施形態において、選択に利用可能なモードは、ルックアップ、定数、及びアイデンティティである。ルックアップモードは、テーブルルックアップが実行されるべきであり、結果として生じる冪級数が関数の出力を生成するよう算出されるべきであることを指定する。アイデンティティモードは、出力値が入力値と等しくなることを指定する(ゆえに、ルックアップが実行される必要はない)。定数モードは、特定の定数(制御レジスタ110又は他のロケールの1つに記憶されてもよい)を出力値として返されることを指定する(ゆえに、ルックアップが実行される必要はない)。
【0027】
開始値レジスタ(Start Value Register) ‐ このレジスタは、(例えば、包含的であり得る)範囲の開始値を指定し、開始値は、範囲内の最も低い入力値xである。複数のこれらのレジスタが存在してもよく、各レジスタが関数の異なる範囲に対応する。特定の実施形態において、開始値はFP32フォーマットであるが、本明細書又は他の場所に記載される他のフォーマットが使用されてもよい。開始値レジスタは、入力値がどの範囲に入るかの決定を可能にし得る(例えば、FP入力値が種々の開始値と比較されて、どの範囲が入力値を含むかを決定してもよい)。
【0028】
ベースアドレスレジスタ(Base Address Register) ‐ このレジスタは、特定の範囲に割り振られたルックアップテーブル内のテーブルエントリのベースアドレスを指定する。ゆえに、複数のこれらのレジスタが存在してもよく、各レジスタが関数の異なる範囲に対応する。ベースアドレスは、対応する係数セットを含む関連するテーブルエントリのアドレスを決定するために、範囲内における入力値の位置と共に使用され得る。
【0029】
オフセット値レジスタ(Offset Value Register) ‐ このレジスタは、範囲内の入力値のオフセットを導出するために使用されるオフセット値(例えば、ユーザにより提供される予め算出された整数値)を記憶する。一実施形態において、予め算出された整数値が入力値から減算されて、範囲への入力値のオフセットを決定してもよい。ゆえに、オフセット値は、整数形式の範囲の開始でもよい。複数のこれらのレジスタが存在してもよく、各レジスタが関数の異なる範囲に対応する。特定の実施形態において、範囲が定数モードに設定されるとき、定数(又は定数へのポインタ)が、オフセット値の代わりにオフセット値レジスタに記憶されてもよい。
【0030】
指数スパンレジスタ(Exponent Span Register) ‐ このレジスタは、範囲の指数「スパン」を表す値(例えば、いくつかの場合に範囲が複数の指数にまたがる可能性があるため、範囲内に入る入力値の最大のとり得る指数値)を記憶する。関数が低減演算(reduction operation)を利用するとき、入力がルックアップの前に1と2の間の数に正規化されるため、この値はゼロでもよい。指数スパンレジスタに記憶された値は、範囲内の入力値が同じ指数にコンバートされることを可能にでき、それにより、(整数であり得る)オフセット値が、入力値が異なる指数値を有するかどうかにかかわらず、入力値のいずれにも適用され得る。複数のこれらのレジスタが存在してもよく、各レジスタが関数の異なる範囲に対応する。
【0031】
シフトレジスタ(Shift Register) ‐このレジスタは、範囲内の入力値のオフセットに適用されるシフト量を表す値(例えば、入力値からオフセット値を減算した後に得られる値)を記憶する。いくつかの実施形態において、この値は、ユーザにより提供されてもよい。特定の実施形態において、この値は、範囲内の係数セットの数に基づく。例えば、2が範囲内の係数セットの数を表し、別の数y(例えば、仮数又は正規化された仮数を表すビット数を示す)からzを減算することにより実際のシフト量が決定されるとき、シフトレジスタに書き込まれる値はzであり得る。複数のこれらのレジスタが存在してもよく、各レジスタが関数の異なる範囲に対応する。
【0032】
対称モードレジスタ(Symmetry Mode Register) ‐ このレジスタは、関数の対称性を指定する。例えば、対称モードは、なし、y軸、又は原点でもよい。いくつかの単項関数(例えば、いくつかのディープラーニング関数)は対称性を有するので、対応する負及び正の範囲の係数セットを記憶する代わりに、双方の範囲のために単一の一連のセットが記憶されてもよい。対称モードがなしのとき、対称性最適化は適用されない。対称モードがy軸のとき、関数は、入力値の絶対値を使用して評価され得る。対称モードが原点のとき、関数は、入力値の絶対値を使用して評価され得、次いで、元の入力が負であった場合、出力の符号が反転され、最終出力を生成する。各関数は、その独自の対称モードレジスタを有し得る。
【0033】
特定の実施形態において、このレジスタ(又は他のレジスタ)の値は、関数のための何らかの他のカスタムモードを指定してもよい。例えば、neg_as_nanモードが、入力値が負の場合、ルックアップが実行されるべきでなく、出力としてNaNが返されるべきであると指定してもよい(例えば、このようなモードは、関数がsqrt(x)、又は負の数で動作しない他の関数のとき、有用であり得る)。
【0034】
特殊ケースレジスタ(Special Case Registers) ‐ これらのレジスタは、関数に対して特定の入力値(例えば、ちょうどゼロ、+無限大、又は-無限大)が受信されたときに特殊ケース処理が適用されるべきかどうかを指定し得る。例えば、特定の入力値について、特殊ケースレジスタは、特殊な処理が適用されないこと、又はキャッシュされた予め定義された定数がルックアップを実行することなく出力値として返されるべきであることを指定してもよい。あるいは、特殊ケースレジスタは、(例えば、関数が逆数演算であり、入力が0のとき)NaNが返されるべきであることを指定してもよい。
【0035】
関数モードレジスタ(Function Mode Register) ‐ 関数特有の最適化(もしあれば)を指定する。例えば、いくつかの良く知られた関数(例えば、sqrt(x)、1/x、1/sqrt(x)、log(x)、2)について、結果の指数(又はそれに非常に近い値)は、合理的に些細な付加的な論理(例えば、8ビット整数加算)でアルゴリズム的に導出可能である。このような場合、ルックアップ演算及び冪級数算出は、入力された仮数をカバーするように制限され得(したがって、入力値は、低減演算を介して1と2の間の値に低減され得る)、あるいは入力値の他の部分をカバーするように制限され得、このことは、関数に必要とされるルックアップテーブルエントリの数を劇的に低減させることができる。いくつかの状況では、関数モードは、制御レジスタを介して指定された他のモードをオーバーライドしてもよい(例えば、関数1/xでは、対称モードは、対称モードの設定にかかわらず原点に強制されてもよい)。関数特有の最適化の動作については、図4に関連してより詳細に説明する。
【0036】
圧縮モード(Compression Mode) ‐ このレジスタは、(係数がルックアップテーブルで圧縮されている場合)ルックアップテーブルエントリの解凍アルゴリズムを指定する。特定の実施形態において、2つの圧縮モードが使用される。第1の圧縮モードは、係数の範囲に制限をかけるが精密な出力を生成し、一方で、第2の圧縮モードは、係数の範囲を制約せず、ゆえに、より精密でない出力を代償として全範囲の浮動小数点入力を可能にする。特定の実施形態において、ルックアップテーブルの各エントリは、指定された解凍アルゴリズムに従って(例えば、64ビットから96ビットに)解凍される3つの係数のデータを含む。
【0037】
図3は、特定の実施形態による算術エンジン300を示す。算術エンジン300は、算術エンジン108の特性のうち任意のものを含んでもよく、逆もまた同様である。図示された実施形態において、算術エンジン300は、融合乗算加算器(fused multiply-adders、FMA)302及び304の2つの段階を含む。各段階はN個のFMAを有し、Nは任意の適切な整数であり、各FMAは別個の入力値x(例えば、ベクトル又は行列の要素)に対して動作することができ、ゆえに、N個の独立したLUTが並列に(例えば、単一命令複数データ(single instruction,multiple data)SIMDアプローチを介して)処理され得る。
【0038】
図示された実施形態において、実現される冪級数はa+ax+aの形式であり、これは、(a+(a+ax)*x)と示される結果と同等である。LUT係数306は、ルックアップテーブル112から取得される。入力x及び係数a+aは第1の段階に供給され、中間結果(a+ax)を生成する。次いで、この中間結果は、入力x及び係数a0と共に第2の段階に供給され、最終結果を生成する。
【0039】
特定の実施形態が示されているが、他の実施形態が、冪級数結果を算出する任意の他の適切な回路を含んでもよい。例えば、FMA以外の回路が使用されてもよい。上述したように、他の実施形態が異なる冪級数を評価してもよい。例えば、別の段階のFMAが算術エンジン300に追加されて、冪級数a+ax+a+aを評価することができる。一般に、N段階のFMAを含む算術エンジン108は、Nの冪に対する冪級数に従って出力値を算出し得る。
【0040】
図4は、特定の実施形態による算術エンジン400を示す。算術エンジン400は、算術エンジン108の特性のうち任意のものを含んでもよく、逆もまた同様である。図示された算術エンジン400は、単項エンジン402及び二項エンジン404を含む。種々の実施形態において、単項エンジン402は、単項関数を実行する専用の回路を含んでもよく、二項エンジン404は、単項関数及び二項関数をサポートし得る回路を含んでもよい(図示されていないが、単精度(SP)FMA406及び408への入力は、二項関数を実行するとき他の入力にさらに結合されてもよい)。他の実施形態において、図示のコンポーネントは、任意の適切な算術エンジン又は他のシステム若しくはデバイス内に含まれてもよい(例えば、二項エンジン404内に示されるコンポーネントは、必ずしも二項エンジン内に含まれる必要はない)。
【0041】
一実施形態において、単項エンジン402は、係数(本実施形態においてa、a、及びa)を生成し、上述の制御レジスタにより指定された最適化を実行し得る。図示された実施形態において、単項エンジン402は、ルックアップテーブル410(ルックアップテーブル112の任意の特性を有し得る)を含んでもよい。図示されていないが、単項エンジン402は、制御レジスタ(例えば、制御レジスタ110のうち任意のもの)をさらに含んでもよい。
【0042】
図示された実施形態において、単項エンジン402は制御モジュール412をさらに含む。制御モジュール412は、入力値xと、xに対して実行される単項関数の指示とを受信し得る。制御モジュール412は、制御レジスタ(csr)にアクセスして、入力を処理する方法を決定し得る。例えば、制御モジュール412は、入力値がどの範囲に対応するかを(例えば、入力値を、単項関数に関連づけられた1つ以上の開始値レジスタと比較することにより)決定してもよい。制御モジュール412は、範囲特有の挙動をさらに決定し得る。例えば、制御モジュール412は、ルックアップが実行されるべきかどうかを決定してもよい。ルックアップが実行されるべき場合、制御モジュール412は、入力値x及び制御レジスタで利用可能な情報に基づいてLUT410へのアドレス(「テーブルインデックス」として示されている)を算出する。このアドレスはLUT410に渡され、対応する係数がLUT410から取り出される。制御モジュール412は、さらに、ルックアップが実行されないとき(例えば、入力が、単一出力を有する範囲に入るとき)定数又は他の値(例えば、NaN)を取り出すように、あるいは制御レジスタが範囲に対してアイデンティティモードを指定するとき入力値を出力するように(あるいは後処理モジュール414にそうするよう指示するように)動作可能でもよい。
【0043】
いくつかの実施形態において、制御モジュール412は、低減演算が実行されるべきかどうかを決定し得る。例えば、上で説明したように、いくつかの関数では、結果の指数は容易に算出され得、ゆえに冪級数は、入力値全体とは対照的に入力値の仮数(又は、入力値の他の低減部分)上で単純に動作し得る。制御モジュール412が、低減演算が実行されるべきと決定したとき、制御モジュール412は、入力値から低減値(例えば、仮数)を抽出し、低減値をx’として出力してもよい。入力の指数(例えば、入力xの実際の指数、又は入力xを例えば1と2との間の値に低減するために入力xに適用される乗数に基づく指数)及び符号は、「サイドバンドデータ(sideband data)」として制御モジュール412によりさらに出力されてもよい。いくつかの実施形態において、サイドバンドデータは、後処理モジュール414が最終指数及び符号を算出することを可能にする任意の適切な情報(例えば、単項関数の指示、又は指数及び/又は符号に対して実行されるべき演算の指示)を含んでもよい。いくつかの実施形態において、サイドバンドデータは、出力が特定の値(例えば、関数が平方根で入力値が負のときなど、出力が有効でないときのNaN)にコンバートされるべきであることを示す情報を含んでもよい。
【0044】
制御モジュール412が、低減演算が実行されるべきでないと決定したとき、制御モジュール412は、入力値xをx’として出力し得る(サイドバンドデータは省略されてもよく、あるいはサイドバンドデータがないことを示す値に設定されてもよい)。
【0045】
FMA406及び408は、x’が実際の入力値か又は低減された入力値かにかかわらず、FMA302及び304に関して上述したのと同様の方法で動作し得る。FMA406及び408は単精度FMAとして示されているが、FMAは、任意の適切な数字フォーマットで動作するように構成されてもよい。FMA408の出力は、最終出力値が算術エンジン400により出力される前に実行されるべき任意の処理のために、後処理モジュール414に供給され得る。
【0046】
種々の実施形態において、算術エンジン400は、複数の異なる入力フォーマットに対して単項関数を実行可能であり得る。例えば、より短いフォーマット(例えば、bfloat16)の入力値に対して演算するとき、入力値は、より長いフォーマット(例えば、FP32)にアップコンバートされてもよく、同じ回路FMAが、入力値がより長いフォーマットで到着したとき使用されてもよい。出力のためにより短いフォーマットが望まれる場合、算術エンジン400は(例えば、後処理モジュール414を介して)、結果をインラインで(inline)ダウンコンバートしてもよい。
【0047】
種々の実施形態において、非正規化(denormals)及びNaNは、任意の適切な方法で算術エンジンにより処理されてもよい。例えば、非正規化入力値は処理の前に0(例えば+0)にコンバートされてもよく、非正規化範囲における最終結果が符号付き0にフラッシュされてもよい(選択された範囲が定数モードであり、定数が非正規化値にプログラムされている場合を除く)。別の例として、入力されたNaN値が必要に応じて静止され、結果まで伝搬されてもよい。実際の不定タイプのクワイエットNaN(Quiet NaNs)が、種々の無効処理ケースに対して(例えば、入力値が定義された範囲部分に入らなかったとき)生成されてもよい。
【0048】
図5は、特定の実施形態による範囲特有係数セットを使用して単項関数を実行するフロー500を示す。種々の実施形態において、フローは、算術エンジン108及び/又は回路を含む他の適切な論理により実行されてもよい。
【0049】
502において、関数の識別及び入力値xが受信される。504において、入力値に特殊ケースが適用されるかどうかについて決定がなされる。例えば、入力値が、特殊ケースが適用される値(例えば、ちょうどゼロ、+無限大、又は無限大)と一致するかを確認するために、レジスタがチェックされてもよい。特殊ケースが適用される場合、対応する特殊な値が506で出力され、フローは終了する。特殊ケースが適用されない場合、フローは508に移る。
【0050】
508において、入力値に低減が適用されるべきかどうかについて決定がなされる。減算が適用されるべき場合、入力値は510で低減される。特定の実施形態において、これは、入力値の仮数を抽出し、入力値の指数及び符号を後続の処理のためにサイドバンドデータに配置することを含む。低減後(又は低減が実行されるべきでない場合)、フローは512に移る。
【0051】
512において、入力値に基づいて関数の範囲が識別される。514において、識別された範囲のモードが決定される。モードがアイデンティティモードである場合、入力値が516で出力され、フローは終了する。モードが定数モードである場合、関連づけられた定数が518で取り出され、出力され、フローは終了する。
【0052】
モードがルックアップモードである場合、520でルックアップが実行される。これは、範囲の開始アドレス及び範囲内の入力値のオフセットに基づいてルックアップテーブルのアドレスを決定することを含み得る。ルックアップは係数のセットを返してもよい。522において、係数により定義される冪級数が入力値に対して算出される。結果が524で出力され、フローは終了する。
【0053】
図6は、特定の実施形態による範囲特有係数セットを使用して単項関数を実行するフロー600を示す。602は、複数のエントリを記憶することを含み、複数のエントリのうち各エントリは入力値の範囲の部分に関連づけられ、複数のエントリのうち各エントリは冪級数近似を定義する係数セットを含む。604は、複数のエントリのうち第1のエントリを、浮動小数点入力値が第1のエントリに関連づけられた入力値の範囲の部分内であるとの決定に基づいて選択することを含む。606は、浮動小数点入力値において第1のエントリの係数セットにより定義される冪級数近似を評価することにより出力値を算出することを含む。
【0054】
図2図6に記載されるフローは、特定の実施形態において生じ得る動作を表すに過ぎない。他の実施形態において、さらなる動作が実行されてもよい。本開示の種々の実施形態は、本明細書に記載の機能を達成する任意の適切なシグナリングメカニズムを企図する。図2図6に示される動作のいくつかが、適切な場合に繰り返され、組み合わせられ、修正され、あるいは省略されてもよい。さらに、動作は、特定の実施形態の範囲から逸脱することなく任意の適切な順序で実行されてもよい。
【0055】
以下の図は、上記実施形態を実現する例示的なアーキテクチャ及びシステムを詳述する。例えば、行列処理ユニット104及び/又は算術エンジン108が、以下に示すプロセッサ又はシステムのうち任意のものに含まれ、あるいは結合されてもよい。いくつかの実施形態において、上述の1つ以上のハードウェアコンポーネント及び/又は命令が、以下で詳述されるとおりエミュレートされ、あるいはソフトウェアモジュールとして実現される。
【0056】
図7は、特定の実施形態によるフィールドプログラマブルゲートアレイ(FGPA)700を示す。特定の実施形態において、算術エンジン108は、FPGA700により実現されてもよい(例えば、算術エンジン108の機能は、演算論理(operational logic)704の回路により実現されてもよい)。FPGAは、構成可能論理を含む半導体デバイスでもよい。FPGAは、FPGAの論理がどのように構成されるべきかを定義する任意の適切なフォーマットを有するデータ構造(例えば、ビットストリーム)を介してプログラムされてもよい。FPGAは、FPGAが製造された後、何回でも再プログラムされてもよい。
【0057】
図示された実施形態において、FPGA700は、構成可能論理702、演算論理704、通信コントローラ706、及びメモリコントローラ710を含む。構成可能論理702は、1つ以上のカーネルを実現するようにプログラムされてもよい。カーネルは、1つ以上の入力のセットを受信し、構成された論理を使用して入力のセットを処理し、1つ以上の出力のセットを提供し得る、FPGAの構成された論理を含んでもよい。カーネルは、任意の適切なタイプの処理を実行し得る。種々の実施形態において、カーネルは、プレフィックスデコーダエンジンを含んでもよい。いくつかのFPGA700は、一度に単一のカーネルの実行に制限される場合があり、他のFPGAは、複数のカーネルを同時に実行可能であり得る。構成可能論理702は、任意の適切なタイプの論理ゲート(例えば、ANDゲート、XORゲート)又は論理ゲートの組み合わせ(例えば、フリップフロップ、ルックアップテーブル、加算器、乗算器、マルチプレクサ、デマルチプレクサ)などの任意の適切な論理を含んでもよい。いくつかの実施形態において、論理は、FPGAの論理コンポーネント間のプログラマブルインターコネクトを通じて(少なくとも部分的に)構成される。
【0058】
演算論理704は、カーネルを定義するデータ構造にアクセスし、データ構造に基づいて設定可能論理702を構成し、FPGAの他の動作を実行し得る。いくつかの実施形態において、演算論理704は、データ構造に基づいてFPGA700のメモリ(例えば、不揮発性フラッシュメモリ又はSRAMベースのメモリ)に制御ビットを書き込んでもよく、制御ビットは、(例えば、設定可能論理の部分間の特定のインターコネクトをアクティブ化又は非アクティブ化することにより)論理を構成するように動作する。演算論理704は、任意の適切なタイプのメモリ(例えば、ランダムアクセスメモリ(RAM))を含む1つ以上のメモリデバイス、1つ以上のトランシーバ、クロック回路、FPGA上に位置する1つ以上のプロセッサ、1つ以上のコントローラ、又は他の適切な論理などの、任意の適切な論理(構成可能論理又は固定論理で実現され得る)を含んでもよい。
【0059】
通信コントローラ706は、FPGA700が(例えば、データセットを圧縮するコマンドを受信するように)コンピュータシステムの他のコンポーネント(例えば、圧縮エンジン)と通信することを可能にし得る。メモリコントローラ710は、FPGAがコンピュータシステムのメモリからデータ(例えば、オペランド又は結果)を読み出し、あるいは該メモリにデータを書き込むことを可能にし得る。種々の実施形態において、メモリコントローラ710は、ダイレクトメモリアクセス(DMA)コントローラを含んでもよい。
【0060】
プロセッサコアは、異なる方法で、異なる目的のため、及び異なるプロセッサにおいて実現されてもよい。例えば、このようなコアの実装には、1)汎用コンピューティングを対象とした汎用インオーダコア、2)汎用コンピューティングを対象とした高性能汎用アウトオブオーダコア、3)主にグラフィックス及び/又は科学(スループット)コンピューティングを対象とした専用コアを含んでもよい。異なるプロセッサの実装には、1)汎用コンピューティングを対象とした1つ以上の汎用インオーダコア及び/又は汎用コンピューティングを対象とした1つ以上の汎用アウトオブオーダコアを含むCPU、及び2)主にグラフィックス及び/又は科学(スループット)を対象とした1つ以上の専用コアを含むコプロセッサを含んでもよい。そのような異なるプロセッサは、異なるコンピュータシステムアーキテクチャをもたらし、これは、1)CPUとは別個のチップ上のコプロセッサ、2)CPUと同じパッケージ内の別個のダイ上のコプロセッサ、3)CPUと同じダイ上のコプロセッサ(その場合、このようなコプロセッサは、統合グラフィックス及び/又は科学(スループット)論理などの専用論理、又は専用コアと時に呼ばれる)、及び4)同じダイ上に記載のCPU(アプリケーションコア又はアプリケーションプロセッサと時に呼ばれる)、上述されたコプロセッサ、及びさらなる機能を含み得るシステムオンチップを含んでもよい。次に、例示的なコアアーキテクチャについて説明し、その後、例示的なプロセッサ及びコンピュータアーキテクチャの説明が続く。
【0061】
図8Aは、本開示の実施形態による一例示的なインオーダパイプラインと一例示的なレジスタリネーミングのアウトオブオーダ発行/実行パイプラインとの双方を示すブロック図である。図8Bは、本開示の実施形態によるプロセッサに含まれるべきインオーダアーキテクチャコアの一例示的な実施形態と一例示的なレジスタリネーミングのアウトオブオーダ発行/実行アーキテクチャコアとの双方を示すブロック図である。図8A図8B中の実線ボックスは、インオーダパイプライン及びインオーダコアを示し、任意的な追加の破線ボックスは、レジスタリネーミングのアウトオブオーダ発行/実行パイプライン及びコアを示す。インオーダの態様がアウトオブオーダの態様のサブセットであると仮定し、アウトオブオーダの態様を説明する。
【0062】
図8Aにおいて、プロセッサパイプライン800は、フェッチステージ802、長さデコードステージ804、デコードステージ806、割り当てステージ808、リネーミングステージ810、スケジューリング(ディスパッチ又は発行としても知られる)ステージ812、レジスタ読み出し/メモリ読み出しステージ814、実行ステージ816、ライトバック(write back)/メモリ書き込みステージ818、例外処理ステージ822、及びコミットステージ824を含む。
【0063】
図8Bは、実行エンジンユニット850に結合されたフロントエンドユニット830を含むプロセッサコア890を示し、双方ともメモリユニット870に結合されている。コア890は、縮小命令セットコンピューティング(reduced instruction set computing、RISC)コア、複合命令セットコンピューティング(complex instruction set computing、CICS)コア、超長命令語(very long instruction word、VLIW)コア、又はハイブリッド若しくは代替コアタイプでもよい。さらに別の選択肢として、コア890は、例えばネットワーク又は通信コア、圧縮及び/又は解凍エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット(general purpose computing graphics processing unit、GPGPU)コア、グラフィックスコアなどの専用コアでもよい。
【0064】
フロントエンドユニット830は、命令キャッシュユニット834に結合された分岐予測ユニット832を含み、命令キャッシュユニット834は、命令トランスレーションルックアサイドバッファ(translation lookaside buffer、TLB)836に結合され、命令トランスレーションルックアサイドバッファ836は、命令フェッチユニット838に結合され、命令フェッチユニット838は、デコードユニット840に結合される。デコードユニット840(又はデコーダ)は、命令をデコードし、出力として1つ以上のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、又は他の制御信号を生成し得、これらは、元の命令からデコードされ、あるいはその他の方法で元の命令を反映し、あるいは元の命令から導出される。デコードユニット840は、種々の異なるメカニズムを使用して実現されてもよい。適切なメカニズムの例には、これらに限られないがルックアップテーブル、ハードウェア実装、プログラマブル論理アレイ(programmable logic array、PLA)、マイクロコード読取専用メモリ(ROM)等が含まれる。一実施形態において、コア890は、(例えば、デコードユニット840に、又はその他の方法でフロントエンドユニット830内に)マイクロコードROM、又は特定のマクロ命令のためのマイクロコードを記憶する他の媒体を含む。デコードユニット840は、実行エンジンユニット850内のリネーム/アロケータユニット852に結合される。
【0065】
実行エンジンユニット850は、リタイアメントユニット854と1つ以上のスケジューラユニット856のセットとに結合されたリネーム/アロケータユニット852を含む。スケジューラユニット856は、リザベーションステーション(reservations stations)、中央命令ウィンドウ等を含む任意数の異なるスケジューラを表す。スケジューラユニット856は、物理レジスタファイルユニット858に結合される。物理レジスタファイルユニット858の各々は、1つ以上の物理レジスタファイルを表し、そのうち異なるものは、スカラー整数、スカラー浮動小数点、パック(packed)整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行されるべき次の命令のアドレスである命令ポインタ)等などの、1つ以上の異なるデータタイプを記憶する。一実施形態において、物理レジスタファイルユニット858は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、及びスカラーレジスタユニットを含む。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、及び汎用レジスタを提供し得る。物理レジスタファイルユニット858は、レジスタリネーミング及びアウトオブオーダ実行が実現され得る種々の方法を示すように(例えば、リオーダバッファ及びリタイアメントレジスタファイルを使用する、将来のファイル、ヒストリバッファ、及びリタイアメントレジスタファイルを使用する、レジスタマップ及びレジスタプールを使用する等)、リタイアメントユニット854によりオーバーラップされる。リタイアメントユニット854及び物理レジスタファイルユニット858は、実行クラスタ860に結合される。実行クラスタ860は、1つ以上の実行ユニット862のセットと、1つ以上のメモリアクセスユニット864のセットを含む。実行ユニット862は、種々の演算(例えば、シフト、加算、減算、乗算)を種々のタイプのデータ(例えば、スカラー浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して実行し得る。いくつかの実施形態は、特定の機能又は機能のセット専用の複数の実行ユニットを含み得るが、他の実施形態が、1つの実行ユニットのみ、又は全てで全機能を実行する複数の実行ユニットを含んでもよい。スケジューラユニット856、物理レジスタファイルユニット858、及び実行クラスタ860は、可能性として複数であるとして示されており、なぜならば、特定の実施形態が、特定のタイプのデータ/演算に対して別個のパイプラインを作り出すためである(例えば、スカラー整数パイプライン、スカラー浮動小数点/パック整数/パック浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、及び/又は各々がその独自のスケジューラユニット、物理レジスタファイルユニット、及び/又は実行クラスタを有するメモリアクセスパイプラインであり、別個のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット864を有する特定の実施形態が実現される)。さらに、別個のパイプラインが使用される場合、これらのパイプラインのうち1つ以上がアウトオブオーダ発行/実行でもよく、残りがインオーダでもよいことを理解されたい。
【0066】
メモリアクセスユニット864のセットは、メモリユニット870に結合され、メモリユニット870は、レベル2(L2)キャッシュユニット876に結合されたデータキャッシュユニット874に結合されたデータTLBユニット872を含む。一例示的な実施形態において、メモリアクセスユニット864は、ロードユニット、記憶アドレスユニット、及び記憶データユニットを含んでもよく、これらの各々が、メモリユニット870内のデータTLBユニット872に結合される。命令キャッシュユニット834が、メモリユニット870内のレベル2(L2)キャッシュユニット876にさらに結合される。L2キャッシュユニット876は、1つ以上の他レベルのキャッシュに、及び最終的にメインメモリに結合される。
【0067】
例として、例示的なレジスタリネーミングのアウトオブオーダ発行/実行コアアーキテクチャは、以下のようなパイプライン800を実現し得る。1)命令フェッチ838がフェッチ及び長さデコーディングステージ802及び804を実行し、2)デコードユニット840がデコードステージ806を実行し、3)リネーム/アロケータユニット852が割り当てステージ808及びリネーミングステージ810を実行し、4)スケジューラユニット856がスケジュールステージ812を実行し、5)物理レジスタファイルユニット858及びメモリユニット870がレジスタ読み出し/メモリ読み出しステージ814を実行し、実行クラスタ860が実行ステージ816を実行し、6)メモリユニット870及び物理レジスタファイルユニット858がライトバック/メモリ書き込みステージ818を実行し、7)種々のユニットが例外処理ステージ822に関与し得、8)リタイアメントユニット854及び物理レジスタファイルユニット858がコミットステージ824を実行する。
【0068】
コア890は、本明細書に記載される命令を含む、1つ以上の命令セット(例えば、x86命令セット(より新しいバージョンで追加されたいくつかの拡張を有する))、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベールのARM HoldingsのARM命令セット(NEONなどの任意のさらなる拡張を有する)をサポートし得る。一実施形態において、コア890は、パックデータ命令セット拡張(例えば、AVX1、AVX2)をサポートする論理を含み、それにより、多くのマルチメディアアプリケーションにより使用される動作が、パックデータを使用して実行されることを可能にする。
【0069】
コアは、マルチスレッディング(2つ以上の並列な動作又はスレッドのセットを実行すること)をサポートし得、タイムスライスマルチスレッディング、同時マルチスレッディング(単一の物理コアが、その物理コアが同時にマルチスレッディングしているスレッドの各々に対して論理コアを提供する場合)、又はこれらの組み合わせ(例えば、タイムスライスフェッチング及びデコーディング並びにその後の同時マルチスレッディング、例えばインテル(登録商標)ハイパースレッディングテクノロジなど)を含む様々な方法でそのようにし得ることを理解されたい。
【0070】
レジスタリネーミングがアウトオブオーダ実行の文脈で記載されているが、レジスタリネームはインオーダアーキテクチャで使用されてもよいことを理解されたい。また、図示されたプロセッサの実施形態は、別個の命令及びデータキャッシュユニット834/874と共有L2キャッシュユニット876を含むが、代替的な実施形態が、命令及びデータの双方のための単一の内部キャッシュ、例えばレベル1(L1)内部キャッシュ、又は複数のレベルの内部キャッシュを有してもよい。いくつかの実施形態において、システムは、内部キャッシュとコア及び/又はプロセッサの外部にある外部キャッシュとの組み合わせを含んでもよい。あるいは、キャッシュのすべてがコア及び/又はプロセッサの外部にあってもよい。
【0071】
図9A図9Bは、チップ内のいくつかの論理ブロック(同じタイプ及び/又は異なるタイプの他のコアを潜在的に含む)のうちの1つであり得る、より具体的な例示的なインオーダコアアーキテクチャのブロック図を示す。論理ブロックは、アプリケーションに依存して何らかの固定の機能論理、メモリI/Oインターフェース、及び他の必要なI/O論理と高帯域幅インターコネクトネットワークを通じて通信する。
【0072】
図9Aは、種々の実施形態による単一のプロセッサコアのブロック図であり、オンダイインターコネクトネットワーク902への接続、及びレベル2(L2)キャッシュのローカルサブセット904を伴う。一実施形態において、命令デコーダ900は、パックデータ命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ906は、メモリをスカラー及びベクトルユニットにキャッシュするための低レイテンシアクセスを可能にする。(設計を簡素化する)一実施形態において、スカラーユニット908及びベクトルユニット910は別個のレジスタセット(それぞれ、スカラーレジスタ912及びベクトルレジスタ914)を使用し、これらの間で転送されるデータはメモリに書き込まれ、次いでレベル1(L1)キャッシュ906からリードバックされる(read back)が、代替的な実施形態が、異なるアプローチを使用してもよい(例えば、単一のレジスタセットを使用し、あるいはデータがライト及びリードバックされることなく2つのレジスタファイル間で転送されることを可能にする通信パスを含む)。
【0073】
L2キャッシュのローカルサブセット904は、別個のローカルサブセット(いくつかの実施形態において、プロセッサコア当たり1つ)に分割されたグローバルL2キャッシュの一部である。各プロセッサコアは、L2キャッシュのその独自のローカルサブセット904への直接アクセスパスを有する。プロセッサコアにより読み出されたデータは、そのL2キャッシュサブセット904に記憶され、他のプロセッサコアがその独自のローカルL2キャッシュサブセットにアクセスするのと並行して迅速にアクセス可能である。プロセッサコアにより書き込まれたデータは、その独自のL2キャッシュサブセット904に記憶され、必要な場合、他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシを保証する。リングネットワークは双方向であり、プロセッサコア、L2キャッシュ、及び他の論理ブロックなどのエージェントがチップ内で互いに通信することを可能にする。特定の実施形態において、各リングデータパスは、方向当たり1012ビット幅である。
【0074】
図9Bは、実施形態による、図9Aにおけるプロセッサコアの一部の拡大図である。図9Bは、L1データキャッシュ906A(L1キャッシュ906の一部)と、ベクトルユニット910及びベクトルレジスタ914に関するさらなる詳細を含む。具体的に、ベクトルユニット910は、整数、単精度フロート、及び倍精度フロート命令のうち1つ以上を実行する16幅(16-wide)ベクトル処理ユニット(vector processing unit、VPU)である(16幅ALU928を参照)。VPUは、スウィズル(swizzle)ユニット920によるレジスタ入力のスウィズル、数値コンバートユニット922A~922Bによる数値コンバージョン、及び複製ユニット924によるメモリ入力の複製をサポートする。書き込みマスクレジスタ926は、結果として生じるベクトル書き込みのプレディケートを可能にする。
【0075】
図10は、種々の実施形態による2つ以上のコアを有し得、統合(integrated)メモリコントローラを有し得、統合グラフィックスを有し得るプロセッサ1000のブロック図である。図10の実線ボックスは、単一コア1002A、システムエージェント1010、及び1つ以上のバスコントローラユニットのセット1016を有するプロセッサ1000を示し、任意的な追加の破線ボックスは、複数のコア1002A~N、システムエージェントユニット1010内の1つ以上の統合メモリコントローラユニットのセット1014、及び専用論理1008を有する代替的なプロセッサ1000を示す。
【0076】
したがって、プロセッサ1000の異なる実装には、1)専用論理1008が統合グラフィックス及び/又は科学(スループット)論理(1つ以上のコアを含み得る)であり、コア1002A~Nが1つ以上の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、又はこれら2つの組み合わせ)であるCPU、2)コア1002A~Nが主にグラフィックス及び/又は科学(スループット)を対象とした多数の専用コアであるコプロセッサ、及び3)コア1002A~Nが多数の汎用インオーダコアであるコプロセッサを含んでもよい。ゆえに、プロセッサ1000は、汎用プロセッサ、コプロセッサ、又は専用プロセッサ、例えば、ネットワーク又は通信プロセッサ、圧縮及び/又は解凍エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、高スループットメニーインテグレーテッドコア(many integrated core、MIC)コプロセッサ(例えば、30以上のコアを含む)、埋め込みプロセッサ、又は論理演算を実行する他の固定又は構成可能論理などでもよい。プロセッサは、1つ以上のチップ上に実装されてもよい。プロセッサ1000は、例えば、BiCMOS、CMOS、又はNMOSなどの複数のプロセス技術のうち任意のものを使用した1つ以上のサブストレートの一部でもよく、かつ/あるいは該サブストレート上に実装されてもよい。
【0077】
種々の実施形態において、プロセッサは、対称又は非対称であり得る任意数の処理要素を含んでもよい。一実施形態において、処理要素は、ソフトウェアスレッドをサポートするハードウェア又は論理を指す。ハードウェア処理要素の例は、スレッドユニット、スレッドスロット、スレッド、プロセスユニット、コンテキスト、コンテキストユニット、論理プロセッサ、ハードウェアスレッド、コア、及び/又は実行状態又はアーキテクチャ状態などのプロセッサの状態を保持することができる任意の他の要素を含む。換言すれば、一実施形態において、処理要素は、ソフトウェアスレッド、オペレーティングシステム、アプリケーション、又は他のコードなどのコードに独立して関連づけ可能な任意のハードウェアを指す。物理プロセッサ(又はプロセッサソケット)は、典型的には、コア又はハードウェアスレッドなどの任意数の他の処理要素を潜在的に含む集積回路を指す。
【0078】
コアは、独立したアーキテクチャ状態を維持することができる集積回路上に配置された論理を指してもよく、各々独立して維持されるアーキテクチャ状態は、少なくともいくつかの専用実行リソースに関連づけられる。ハードウェアスレッドは、独立したアーキテクチャ状態を維持することができる集積回路上に配置された任意の論理を指してもよく、独立して維持されるアーキテクチャ状態は、実行リソースへのアクセスを共有する。図からわかるように、特定のリソースが共有され、他がアーキテクチャ状態の専用にされるとき、ハードウェアスレッド及びコアの名称間のラインはオーバーラップする。しかし、しばしば、コア及びハードウェアスレッドは、オペレーティングシステムにより個々の論理プロセッサとして見られ、オペレーティングシステムは、個々の論理プロセッサ上の動作を個々にスケジューリングすることができる。
【0079】
メモリ階層は、コア内の1つ以上のレベルのキャッシュ、1つ以上の共有キャッシュユニットのセット1006、及び統合メモリコントローラユニットのセット1014に結合された外部メモリ(図示せず)を含む。共有キャッシュユニットのセット1006は、1つ以上の中間レベルキャッシュ、例えばレベル2(L2)、レベル3(L3)、レベル4(L4)、又は他のレベルのキャッシュ、ラストレベルキャッシュ、及び/又はこれらの組み合わせなどを含んでもよい。一実施形態において、リングベースのインターコネクトユニット1012が専用論理(例えば、統合グラフィックス論理)1008、共有キャッシュユニットのセット1006、及びシステムエージェントユニット1010/統合メモリコントローラユニット1014を相互接続するが、代替的な実施形態が、このようなユニットを相互接続する任意数の良く知られた技術を使用してもよい。一実施形態において、1つ以上のキャッシュユニット1006とコア1002A~Nとの間でコヒーレンシが維持される。
【0080】
いくつかの実施形態において、コア1002A~1002Nのうち1つ以上がマルチスレッディング可能である。システムエージェント1010は、コア1002A~Nを協調及び動作させるコンポーネントを含む。システムエージェントユニット1010は、例えば、電力制御ユニット(PCU)及び表示ユニットを含んでもよい。PCUは、コア1002A~N及び専用論理1008の電力状態を調節するために必要な論理及びコンポーネントでもよく、あるいはこれらを含んでもよい。表示ユニットは、1つ以上の外部接続されたディスプレイの駆動に関する。
【0081】
コア1002A~Nは、アーキテクチャ命令セットの観点で同種でも又は異種でもよく、すなわち、コア1002A~Nのうち2つ以上が同じ命令セットを実行可能であり得、一方で他のコアはその命令セットのサブセットのみ又は異なる命令セットを実行可能であり得る。
【0082】
図11図14は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、セルフォン、ポータブルメディアプレーヤ、ハンドヘルドデバイス、及び種々の他の電子デバイスに関して当該分野で知られている他のシステム設計及び構成もまた、本開示に記載された方法を実行するのに適する。一般に、本明細書に開示されるプロセッサ及び/又は他の実行論理を組み込むことができる非常に多様なシステム又は電子デバイスが一般に適切である。
【0083】
図11は、本開示の一実施形態によるシステム1100のブロック図を示す。システム1100は、コントローラハブ1120に結合された1つ以上のプロセッサ1110、1115を含み得る。一実施形態において、コントローラハブ1120は、グラフィックスメモリコントローラハブ(GMCH)1190及び入力/出力ハブ(IOH)1150(別個のチップ上又は同じチップ上にあり得る)を含み、GMCH1190は、メモリ1140及びコプロセッサ1145に結合されたメモリ及びグラフィックスコントローラを含み、IOH1150は、入力/出力(I/O)デバイス1160をGMCH1190に結合する。あるいは、メモリ及びグラフィックスコントローラの一方又は双方が(本明細書に記載のように)プロセッサ内に統合され、メモリ1140及びコプロセッサ1145はプロセッサ1110に直接結合され、コントローラハブ1120は、IOH1150を含む単一のチップである。
【0084】
図11では、任意的な性質のさらなるプロセッサ1115が破線で示されている。各プロセッサ1110、1115は、本明細書に記載される処理コアのうち1つ以上を含んでもよく、プロセッサ1000の何らかのバージョンでもよい。
【0085】
メモリ1140は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、他の適切なメモリ、又はこれらの任意の組み合わせでもよい。メモリ1140は、プロセッサ1110、1115により使用されるデータなどの任意の適切なデータを記憶して、コンピュータシステム1100の機能性を提供し得る。例えば、プロセッサ1110、1115により実行されるプログラムに関連づけられたデータ又はアクセスされるファイルが、メモリ1140に記憶されてもよい。種々の実施形態において、メモリ1140は、プロセッサ1110、1115により使用又は実行されるデータ及び/又は命令のシーケンスを記憶し得る。
【0086】
少なくとも1つの実施形態において、コントローラハブ1120は、フロントサイドバス(FSB)などのマルチドロップバス、クイックパスインターコネクト(QuickPath Interconnect、QPI)などのポイントツーポイントインターフェース、又は同様の接続1195を介してプロセッサ1110、1115と通信する。
【0087】
一実施形態において、コプロセッサ1145は、例えば、高スループットMICプロセッサ、ネットワーク又は通信プロセッサ、圧縮及び/又は解凍エンジン、グラフィックスプロセッサ、GPGPU、埋め込みプロセッサなどの専用プロセッサである。一実施形態において、コントローラハブ1120は、統合グラフィックスアクセラレータを含んでもよい。
【0088】
物理リソース1110、1115間には、アーキテクチャ、マイクロアーキテクチャ、熱、電力消費特性などを含む利点のメトリックのスペクトルの観点で、様々な差がある可能性がある。
【0089】
一実施形態において、プロセッサ1110は、一般的なタイプのデータ処理動作を制御する命令を実行する。命令内に埋め込まれるのは、コプロセッサ命令でもよい。プロセッサ1110は、これらのコプロセッサ命令を、アタッチされたコプロセッサ1145により実行されるべきタイプのものであると認識する。したがって、プロセッサ1110は、コプロセッサ1145に対して、コプロセッサバス又は他のインターコネクト上でこれらのコプロセッサ命令(又はコプロセッサ命令を表す制御信号)を発行する。コプロセッサ1145は、受信したコプロセッサ命令を受け入れ、実行する。
【0090】
図12は、本開示の一実施形態による第1のより具体的な例示的なシステム1200のブロック図を示す。図12に示すように、マルチプロセッサシステム1200はポイントツーポイントインターコネクトシステムであり、ポイントツーポイントインターコネクト1250を介して結合された第1のプロセッサ1270及び第2のプロセッサ1280を含む。プロセッサ1270及び1280の各々は、プロセッサ1000の何らかのバージョンでもよい。本開示の一実施形態において、プロセッサ1270及び1280はそれぞれプロセッサ1110及び1115であり、コプロセッサ1238はコプロセッサ1145である。別の実施形態において、プロセッサ1270及び1280はそれぞれプロセッサ1110及びコプロセッサ1145である。
【0091】
プロセッサ1270及び1280は、それぞれ、統合メモリコントローラ(integrated memory controller、IMC)ユニット1272及び1282を含むように示されている。プロセッサ1270は、そのバスコントローラユニットの一部としてポイントツーポイント(P‐P)インターフェース1276及び1278をさらに含み、同様に、第2のプロセッサ1280は、P‐Pインターフェース1286及び1288を含む。プロセッサ1270、1280は、P‐Pインターフェース回路1278、1288を使用してポイントツーポイント(P‐P)インターフェース1250を介して情報を交換し得る。図12に示すように、IMC1272及び1282は、プロセッサをそれぞれのメモリに、すなわちメモリ1232及びメモリ1234に結合し、これらは、それぞれのプロセッサにローカルにアタッチされたメインメモリのうちの部分でもよい。
【0092】
プロセッサ1270、1280は各々、ポイントツーポイントインターフェース回路1276、1294、1286、1298を使用して個々のP‐Pインターフェース1252、1254を介してチップセット1290と情報を交換し得る。チップセット1290は、任意で、高性能インターフェース1239を介してコプロセッサ1238と情報を交換してもよい。一実施形態において、コプロセッサ1238は、例えば、高スループットMICプロセッサ、ネットワーク又は通信プロセッサ、圧縮及び/又は解凍エンジン、グラフィックスプロセッサ、GPGPU、埋め込みプロセッサなどの専用プロセッサである。
【0093】
共有キャッシュ(図示せず)が、いずれかのプロセッサ内か又は双方のプロセッサの外部に、ただしP‐Pインターコネクトを介してこれらプロセッサに接続されて含まれてもよく、それにより、プロセッサが低電力モードに置かれた場合、いずれか又は双方のプロセッサのローカルキャッシュ情報が共有キャッシュに記憶され得る。
【0094】
チップセット1290は、インターフェース1296を介して第1のバス1216に結合され得る。一実施形態において、第1のバス1216は、ペリフェラルコンポーネントインターコネクト(Peripheral Component Interconnect、PCI)バス、又はPCIエクスプレス(Express)バス若しくは他の第3世代I/Oインターコネクトバスなどのバスでもよいが、本開示の範囲はそのように限定されない。
【0095】
図12に示すように、種々のI/Oデバイス1214が、第1のバス1216を第2のバス1220に結合するバスブリッジ1218と共に、第1のバス1216に結合され得る。一実施形態において、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックスアクセラレータ又はデジタル信号処理(DSP)ユニットなど)、フィールドプログラマブルゲートアレイ、又は任意の他のプロセッサなどの1つ以上のさらなるプロセッサ1215が、第1のバス1216に結合される。一実施形態において、第2のバス1220はローピンカウント(low pin count、LPC)バスでもよい。種々のデバイスが第2のバス1220に結合されてもよく、一実施形態において、例えば、キーボード及び/又はマウス1222、通信デバイス1227、及び命令/コード及びデータ1230を含み得るディスクドライブ又は他の大容量記憶デバイスなどの記憶ユニット1228が含まれる。さらに、オーディオI/O1224が第2のバス1220に結合されてもよい。他のアーキテクチャが本開示により企図されることに留意する。例えば、図12のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバス又は他のこのようなアーキテクチャを実装してもよい。
【0096】
図13は、本開示の一実施形態による第2のより具体的な例示的なシステム1300のブロック図を示す。図12及び図13における同様の要素は、同様の参照番号を有し、図12の特定の態様は、図13の他の態様を分かりにくくすることを回避するために図13から省略されている。
【0097】
図13は、プロセッサ1270、1280が統合メモリ及びI/O制御論理(「CL」)1272、1282をそれぞれ含み得ることを示す。ゆえに、CL1272、1282は統合メモリコントローラユニットを含み、I/O制御論理を含む。図13は、メモリ1232、1234がCL1272、1282に結合されることだけでなく、I/Oデバイス1314も制御論理1272、1282に結合されることも示す。レガシーI/Oデバイス1315はチップセット1290に結合される。
【0098】
図14は、本開示の一実施形態によるSoC1400のブロック図を示す。図10における同様の要素は、同様の参照番号を有する。また、破線ボックスは、より高度なSoCにおける任意的な機能である。図14において、インターコネクトユニット1402は、1つ以上のコア1002A~Nのセット及び共有キャッシュユニット1006を含むアプリケーションプロセッサ1410と、システムエージェントユニット1010と、バスコントローラユニット1016と、統合メモリコントローラユニット1014と、統合グラフィックス論理、イメージプロセッサ、オーディオプロセッサ、及びビデオプロセッサを含み得る1つ以上のコプロセッサのセット1420と、スタティックランダムアクセスメモリ(SRAM)ユニット1430と、ダイレクトメモリアクセス(DMA)ユニット1432と、1つ以上の外部ディスプレイに結合するディスプレイユニット1440とに結合される。一実施形態において、コプロセッサ1420は、例えば、ネットワーク又は通信プロセッサ、圧縮及び/又は解凍エンジン、GPGPU、高スループットMICプロセッサ、埋込みプロセッサなどの専用プロセッサを含む。
【0099】
いくつかの場合、命令コンバータが使用されて、命令をソース命令セットからターゲット命令セットにコンバートしてもよい。例えば、命令コンバータは、命令を、コアにより処理されるべき1つ以上の他の命令に(例えば、スタティックバイナリ変換、ダイナミックコンパイルを含むダイナミックバイナリ変換を使用して)変換し、変形し、エミュレートし、あるいはその他の方法でコンバートしてもよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせで実現されてもよい。命令コンバータは、プロセッサ上、プロセッサ外、又は一部プロセッサ上かつ一部プロセッサ外でもよい。
【0100】
図15は、本開示の実施形態によるソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令にコンバートするソフトウェア命令コンバータの使用を対比するブロック図である。図示の実施形態において、命令コンバータはソフトウェア命令コンバータであるが、代わりに、命令コンバータはソフトウェア、ファームウェア、ハードウェア、又はこれらの種々の組み合わせで実装されてもよい。図15は、高水準言語1502のプログラムがx86コンパイラ1504を使用してコンパイルされ、少なくとも1つのx86命令セットコアを有するプロセッサ1516によりネイティブ実行され得るx86バイナリコード1506を生成し得ることを示す。少なくとも1つのx86命令セットコアを有するプロセッサ1516は、少なくとも1つのx86命令セットコアを有するインテルプロセッサと実質的に同じ結果を達成するために(1)インテルx86命令セットコアの命令セットの実質部分、又は(2)少なくとも1つのx86命令セットコアを有するインテルプロセッサ上で動作することをターゲットとしたアプリケーション又は他のソフトウェアのオブジェクトコードバージョン、を互換的に実行し又はその他の方法で処理することにより少なくとも1つのx86命令セットコアを有するインテルプロセッサと実質的に同じ機能を実行することができる任意のプロセッサを表す。x86コンパイラ1504は、さらなるリンケージ処理の有無にかかわらず、少なくとも1つのx86命令セットコアを有するプロセッサ1516上で実行可能なx86バイナリコード1506(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。同様に、図15は、高水準言語1502のプログラムが代替命令セットコンパイラ1508を使用してコンパイルされ、少なくとも1つのx86命令セットコアなしのプロセッサ1514(例えば、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セットを実行し、かつ/あるいはカリフォルニア州サニーベールのARM HoldingsのARM命令セットを実行するコアを有するプロセッサ)によりネイティブ実行され得る代替命令セットバイナリコード1510を生成し得ることを示す。命令コンバータ1512は、x86バイナリコード1506を、x86命令セットコアなしのプロセッサ1514によりネイティブ実行され得るコードにコンバートするために使用される。このコンバートされたコードは、これを可能な命令コンバータは作成が困難なため、代替命令セットバイナリコード1510と同じである可能性は低いが、コンバートされたコードは一般的な動作を達成し、代替命令セットからの命令で構成される。ゆえに、命令コンバータ1512は、エミュレーション、シミュレーション、又は他のプロセスを通じて、x86命令セットプロセッサ又はコアを有さないプロセッサ又は他の電子デバイスがx86バイナリコード1506を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、又はこれらの組み合わせを表す。
【0101】
設計は、作成からシミュレーション、製作まで種々の段階を経る可能性がある。設計を表すデータは、複数の方法で設計を表してもよい。第1に、シミュレーションにおいて有用であるように、ハードウェアは、ハードウェア記述言語(HDL)又は他の機能記述言語を使用して表現されてもよい。さらに、論理及び/又はトランジスタゲートを有する回路レベルモデルが、設計プロセスのいくつかの段階で生成されてもよい。さらに、大抵の設計は、いくらかの段階で、ハードウェアモデルにおける種々のデバイスの物理配置を表すデータのレベルに達する。従来の半導体製作手法が用いられる場合、ハードウェアモデルを表すデータは、集積回路を生成するために使用されるマスクのための異なるマスク層上の種々の特徴の有無を指定するデータでもよい。いくつかの実装において、このようなデータは、グラフィックデータシステムII(GDS II)、オープンアートワークシステムインターチェンジスタンダード(Open Artwork System Interchange Standard、OASIS)、又は同様のフォーマットなどのデータベースファイルフォーマットで記憶されてもよい。
【0102】
いくつかの実装において、ソフトウェアベースのハードウェアモデル、並びにHDL及び他の機能記述言語オブジェクトは、他の例の中でも、レジスタ転送言語(register transfer language、RTL)ファイルを含むことができる。このようなオブジェクトはマシンパース可能とすることができ、それにより、設計ツールは、HDLオブジェクト(又はモデル)を受け入れ、記述されたハードウェアの属性についてHDLオブジェクトをパースし、オブジェクトから物理回路及び/又はオンチップレイアウトを決定することができる。設計ツールの出力は、物理デバイスの製造に使用できる。例えば、設計ツールは、HDLオブジェクトでモデル化されたシステムを実現するために実装されるであろう他の属性の中で、バス幅、レジスタ(サイズ及びタイプを含む)、メモリブロック、物理的リンクパス、ファブリックトポロジなど、HDLオブジェクトからの種々のハードウェア及び/又はファームウェア要素の構成を決定することができる。設計ツールは、システムオンチップ(SoC)及び他のハードウェアデバイスのトポロジ及びファブリック構成を決定するツールを含むことができる。いくつかの例において、HDLオブジェクトは、記述されたハードウェアを製造する製造機器により使用できるモデル及び設計ファイルを開発する基礎として使用できる。実際、HDLオブジェクト自体が、記述されたハードウェアの製造をもたらす製造システムソフトウェアへの入力として提供されてもよい。
【0103】
設計の如何なる表現においても、設計を表すデータは、任意の形式のマシン読取可能媒体に記憶されてよい。メモリ、又はディスクなどの磁気若しくは光学記憶装置は、情報を伝送するために変調又はその他の方法で生成された光波又は電波を介して伝送されるそのような情報を記憶するマシン読取可能媒体でもよい。コード又は設計を示し又は搬送する電気搬送波が伝送されるとき、電気信号のコピー、バッファリング、又は再伝送が行われる範囲で、新しいコピーが作成される。ゆえに、通信プロバイダ又はネットワークプロバイダは、本開示の実施形態の手法を具現化する、搬送波にエンコードされた情報などの事項(article)を、有形のマシン読取可能媒体上に少なくとも一時的に記憶し得る。
【0104】
種々の実施形態において、設計の表現を記憶する媒体は、製造システム(例えば、集積回路及び/又は関連コンポーネントを製造することができる半導体製造システム)に提供されてもよい。設計表現は、システムに対して、上述の機能の任意の組み合わせを実行することができるデバイスを製造するように指示し得る。例えば、設計表現は、どのコンポーネントを製造するか、コンポーネントがどのように一緒に結合されるべきか、コンポーネントがデバイス上でどこに配置されるべきかに関して、及び/又は製造されるデバイスに関する他の適切な仕様に関してシステムに指示してもよい。
【0105】
したがって、少なくとも1つの実施形態の1つ以上の態様が、プロセッサ内の種々の論理を表すマシン読取可能媒体上に記憶された代表的な命令により実現されてもよく、これは、マシンにより読み出されたとき、本明細書に記載の手法を実行する論理をマシンに製作させる。このような表現は、しばしば「IPコア」と呼ばれ、非一時的な有形のマシン読取可能媒体に記憶され、論理又はプロセッサを製造する製作マシンにロードするために様々な顧客又は製造施設に供給されてもよい。
【0106】
本明細書に開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はそのような実装アプローチの組み合わせで実現されてもよい。本開示の実施形態は、少なくとも1つのプロセッサ、記憶システム(揮発性及び不揮発性メモリ、及び/又は記憶素子を含む)、少なくとも1つの入力デバイス、及び少なくとも1つの出力デバイスを含むプログラマブルシステム上で実行されるコンピュータプログラム又はプログラムコードとして実現されてもよい。
【0107】
図12に示されるコード1230などのプログラムコードは、本明細書に記載される機能を実行し、出力情報を生成するための入力命令に適用されてもよい。出力情報は、既知の方法で、1つ以上の出力デバイスに適用されてもよい。本出願を目的として、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、又はマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
【0108】
プログラムコードは、処理システムと通信するための高水準の手続き型又はオブジェクト指向のプログラミング言語で実装されてもよい。プログラムコードはまた、所望に応じて、アセンブリ又はマシン言語で実装されてもよい。実際、本明細書に記載のメカニズムは、スコープにおいていかなる特定のプログラミング言語にも限定されない。種々の実施形態において、言語は、コンパイル又は解釈された言語でもよい。
【0109】
上述の方法、ハードウェア、ソフトウェア、ファームウェア、又はコードの実施形態は、処理要素により実行可能(又はその他の方法でアクセス可能)であるマシンアクセス可能、マシン読取可能、コンピュータアクセス可能、又はコンピュータ読取可能な媒体に記憶された命令又はコードにより実現されてもよい。マシンアクセス可能/読取可能媒体は、コンピュータ又は電子システムなどのマシンにより読取可能な形式で情報を提供する(すなわち、記憶及び/又は伝送する)任意のメカニズムを含む。例えば、マシンアクセス可能媒体は、スタティックRAM(SRAM)又はダイナミックRAM(DRAM)などのランダムアクセスメモリ(RAM)、ROM、磁気又は光記憶媒体、フラッシュメモリデバイス;電気記憶デバイス;光学記憶デバイス;音響記憶デバイス;非一時的(伝搬)信号(例えば、搬送波、赤外線信号、デジタル信号)から受け取った情報を保持する他の形態の記憶デバイス等を含み、これらは、そこから情報を受け取り得る非一時的媒体とは区別されるべきである。
【0110】
本開示の実施形態を実行する論理をプログラムするために使用される命令は、DRAM、キャッシュ、フラッシュメモリ、又は他の記憶装置などのシステム内のメモリに記憶されてもよい。さらに、命令は、ネットワークを介して、又は他のコンピュータ読取可能媒体を用いて配布できる。ゆえに、マシン読取可能媒体は、マシン(例えば、コンピュータ)により読取可能な形式で情報を記憶又は伝送する任意のメカニズム、これに限られないが、フロッピーディスケット、光ディスク、コンパクトディスク、読取専用メモリ(CD‐ROM)及び磁気光ディスク、読取専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、消去可能プログラマブル読取専用メモリ(EPROM)、電気的消去可能プログラマブル読取専用メモリ(EEPROM)、磁気若しくは光学カード、フラッシュメモリ、又は電気、光学、音響、又は他の形式の伝搬信号(例えば、搬送波、赤外線信号、デジタル信号等)を介したインターネットを通じた情報の伝送に使用される有形のマシン読取可能記憶装置を含んでもよい。したがって、マシン読取可能媒体は、マシン(例えば、コンピュータ)により読取可能な形式の電子命令又は情報を記憶又は送信するのに適した任意タイプの有形のマシン読取可能媒体を含む。
【0111】
CPU102、行列処理ユニット104、算術エンジン104、メモリ106、FMA302、304、406、及び408、制御モジュール412、ルックアップテーブル112又は410、制御レジスタ110、後処理モジュール414、FPGA700、本明細書に記載される他のコンポーネント、又はこれらのコンポーネントの任意のものの任意のサブコンポーネントなどの種々のコンポーネントの機能性のうち任意のものを実現するために、任意の適切な論理が使用されてよい。「論理」は、1つ以上の機能を実行するためのハードウェア、ファームウェア、ソフトウェア、及び/又は各々の組み合わせを指し得る。一例として、論理は、マイクロコントローラ又はプロセッサにより実行されるように適合されたコードを記憶する非一時的媒体に関連づけられた、マイクロコントローラ又はプロセッサなどのハードウェアを含んでもよい。したがって、一実施形態において、論理への参照は、非一時的媒体に保持されるコードを認識及び/又は実行するように特に構成されたハードウェアを指す。さらに、別の実施形態において、論理の使用は、所定の動作を行うためにマイクロコントローラにより実行されるように特に適合されたコードを含む非一時的媒体を指す。推測できるように、さらに別の実施形態において、(この例における)用語の論理は、ハードウェアと非一時的媒体との組み合わせを指してもよい。種々の実施形態において、論理は、マイクロプロセッサ若しくはソフトウェア命令を実行するように動作可能な他の処理要素、特定用途向け集積回路(ASIC)などのディスクリート論理、フィールドプログラマブルゲートアレイ(FPGA)などのプログラムされた論理デバイス、命令を含むメモリデバイス、(例えば、プリント回路板上に見られるような)論理デバイスの組み合わせ、又は他の適切なハードウェア及び/又はソフトウェアを含んでもよい。論理は、例えばトランジスタにより実現され得る1つ以上のゲート又は他の回路コンポーネントを含んでもよい。いくつかの実施形態において、論理は、ソフトウェアとして完全に具現化されてもよい。ソフトウェアは、非一時的コンピュータ読取可能記憶媒体に記録されたソフトウェアパッケージ、コード、命令、命令セット、及び/又はデータとして具現化されてもよい。ファームウェアは、メモリデバイスにハードコーディングされた(例えば、不揮発性の)コード、命令若しくは命令セット、及び/又はデータとして具現化されてもよい。しばしば、別個のものとして示される論理境界は、一般に変化し、潜在的にオーバーラップする。例えば、第1及び第2の論理は、ハードウェア、ソフトウェア、ファームウェア、又はこれらの組み合わせを共有する一方で、一部の独立したハードウェア、ソフトウェア、又はファームウェアを潜在的に保持し得る。
【0112】
フレーズ「への(to)」又は「ように構成される(configured to)」の使用は、一実施形態において、指定又は決定されたタスクを実行する装置、ハードウェア、論理、又は要素を配置し、一緒に置き、製造し、販売を申し出、輸入し、かつ/あるいは設計することを指す。この例において、動作していない装置又はその要素は、それが指定されたタスクを実行するように設計、結合、及び/又は相互接続されている場合、上記指定されたタスクを実行するように依然として「構成」されている。純粋に例示的な例として、論理ゲートは、動作中に0又は1を提供し得る。しかし、クロックにイネーブル信号を提供する「ように構成された」論理ゲートは、1又は0を提供し得るあらゆる潜在的な論理ゲートを含むわけではない。代わりに、論理ゲートは、動作中に1又は0の出力がクロックをイネーブルにする何らかの方法で結合されたものである。再びになるが、用語「ように構成される」の使用は動作を必要とせず、代わりに装置、ハードウェア、及び/又は要素の潜在状態に焦点を合わせることに留意し、潜在状態では、装置、ハードウェア、及び/又は要素は、装置、ハードウェア、及び/又は要素が動作しているとき特定のタスクを実行するように設計されている。
【0113】
さらに、一実施形態において、フレーズ「することが可能」及び/又は「するように動作可能」の使用は、特定の方法で装置、論理、ハードウェア、及び/又は要素の使用を可能にするように設計された何らかの装置、論理、ハードウェア、及び/又は要素を指す。上述したように、一実施形態において、することが可能、又はするように動作可能、の使用は、装置、論理、ハードウェア、及び/又は要素の潜在状態を指し、装置、論理、ハードウェア、及び/又は要素は動作していないが、特定の方法で装置の使用を可能にするように設計されている。
【0114】
値は、本明細書で用いられるとき、数字、状態、論理状態、又はバイナリ論理状態の任意の既知の表現を含む。しばしば、論理レベル、論理値、又は論理的値の使用は、1のもの及び0のものとして参照され、バイナリ論理状態を単に表す。例えば、1はハイ論理レベルを指し、0はロー論理レベルを指す。一実施形態において、トランジスタ又はフラッシュセルなどの記憶セルは、単一の論理値又は複数の論理値を保持可能でもよい。しかしながら、コンピュータシステムにおける他の値表現が使用されてきた。例えば、10進数の10は、1010のバイナリ値及び16進数文字Aとして表現されることもある。したがって、値はコンピュータシステムに保持できる情報の任意の表現を含む。
【0115】
さらに、状態は、値又は値の部分により表現されてもよい。一例として、論理的1などの第1の値がデフォルト又は初期状態を表してもよく、論理的0などの第2の値が非デフォルト状態を表してもよい。さらに、用語のリセット及び設定は、一実施形態において、それぞれデフォルト及び更新された値又は状態を指す。例えば、デフォルト値は、ハイ論理値、すなわちリセットを潜在的に含む一方で、更新された値は、ロー論理値、すなわち設定を潜在的に含む。値の任意の組み合わせが、任意数の状態を表現するために利用されてよいことに留意する。
【0116】
以下の例は、本明細書による実施形態に属する。例1は、複数のエントリを記憶するメモリであり、上記複数のエントリのうち各エントリは入力値の範囲の部分に関連づけられ、上記複数のエントリのうち各エントリは冪級数近似を定義する係数セットを含む、メモリと、上記複数のエントリのうち第1のエントリを、浮動小数点入力値が上記第1のエントリに関連づけられた入力値の範囲の部分内であるとの決定に基づいて選択し、上記浮動小数点入力値において上記第1のエントリの係数セットにより定義される冪級数近似を評価することにより出力値を算出する回路を含む算術エンジンと、を含むプロセッサである。
【0117】
例2は、例1に記載の対象事項を含んでもよく、上記算術エンジンは、上記複数のエントリのうち第2のエントリを、第2の浮動小数点入力値が上記第2のエントリに関連づけられた入力値の範囲の部分内であるとの決定に基づいて選択し、上記第2の浮動小数点入力値において上記第2のエントリの係数セットにより定義される冪級数近似を評価することにより第2の出力値を算出する。
【0118】
例3は、例1~2のうちいずれか1つに記載の対象事項を含んでもよく、上記評価された冪級数近似はa+ax+aであり、xは上記浮動小数点入力値であり、a、a、及びaは上記第1のエントリの係数セットである。
【0119】
例4は、例1~3のうちいずれか1つに記載の対象事項を含んでもよく、上記範囲は複数の範囲のうち第1の範囲であり、上記算術エンジンは、上記浮動小数点入力値を上記複数の範囲の複数の開始値と比較することにより、上記浮動小数点入力値が上記第1の範囲内であると決定する。
【0120】
例5は、例4に記載の対象事項を含んでもよく、上記メモリは第2の複数のエントリを記憶し、上記第2の複数のエントリのうち各エントリは第2の入力値の範囲の部分に関連づけられ、上記複数の第2のエントリのうち各エントリは冪級数近似を定義する係数セットを含む。
【0121】
例6は、例1~5のうちいずれか1つに記載の対象事項を含んでもよく、上記第1のエントリの上記選択は、要求が上記算術エンジンにより実行可能な複数の単項関数のうち第1の単項関数を指定するとの決定にさらに基づく。
【0122】
例7は、例6に記載の対象事項を含んでもよく、上記算術エンジンは、上記複数の単項関数のうち第2の単項関数を指定する要求に応答して第2の浮動小数点入力から仮数を抽出し、上記第2の浮動小数点入力の指数及び符号を除き上記抽出された仮数に対して冪級数近似を評価し、上記冪級数近似は上記第2の浮動小数点入力に基づき上記メモリから取り出された係数により定義される。
【0123】
例8は、例1~7のうちいずれか1つに記載の対象事項を含んでもよく、上記算術エンジンは、第2の浮動小数点入力値が特殊ケースに対応すると決定し、上記特殊ケースに対応する値を出力する。
【0124】
例9は、例1~8のうちいずれか1つに記載の対象事項を含んでもよく、上記範囲は、単項関数に関連づけられた複数の範囲のうち第1の範囲であり、上記算術エンジンは、第2の浮動小数点入力が上記複数の範囲のうち第2の範囲内であると決定し、上記第2の範囲が定数モードで動作するよう指定されていると決定し、上記第2の範囲に関連づけられた定数を第2の出力値として出力する。
【0125】
例10は、例1~9のうちいずれか1つに記載の対象事項を含んでもよく、上記範囲は、単項関数に関連づけられた複数の範囲のうち第1の範囲であり、上記算術エンジンは、第2の浮動小数点入力が上記複数の範囲のうち第2の範囲内であると決定し、上記第2の範囲がアイデンティティモードで動作するよう指定されていると決定し、上記第2の浮動小数点入力を第2の出力値として出力する。
【0126】
例11は、複数のエントリを記憶するステップであり、上記複数のエントリのうち各エントリは入力値の範囲の部分に関連づけられ、上記複数のエントリのうち各エントリは冪級数近似を定義する係数セットを含む、ステップと、上記複数のエントリのうち第1のエントリを、浮動小数点入力値が上記第1のエントリに関連づけられた入力値の範囲の部分内であるとの決定に基づいて選択するステップと、上記浮動小数点入力値において上記第1のエントリの係数セットにより定義される冪級数近似を評価することにより出力値を算出するステップと、含む方法である。
【0127】
例12は、例11に記載の対象事項を含んでもよく、当該方法は、上記複数のエントリのうち第2のエントリを、第2の浮動小数点入力値が上記第2のエントリに関連づけられた入力値の範囲の部分内であるとの決定に基づいて選択するステップと、上記第2の浮動小数点入力値において上記第2のエントリの係数セットにより定義される冪級数近似を評価することにより第2の出力値を算出するステップと、をさらに含む。
【0128】
例13は、例11~12のうちいずれか1つに記載の対象事項を含んでもよく、上記評価された冪級数近似はa+ax+aであり、xは上記浮動小数点入力値であり、a、a、及びaは上記第1のエントリの係数セットである。
【0129】
例14は、例11~13のうちいずれか1つに記載の対象事項を含んでもよく、上記範囲は複数の範囲のうち第1の範囲であり、上記浮動小数点入力値を上記複数の範囲の複数の開始値と比較することにより、上記浮動小数点入力値が上記第1の範囲内であると決定するステップ、をさらに含む。
【0130】
例15は、例14に記載の対象事項を含んでもよく、第2の複数のエントリを記憶するステップであり、上記第2の複数のエントリのうち各エントリは第2の入力値の範囲の部分に関連づけられ、上記複数の第2のエントリのうち各エントリは冪級数近似を定義する係数セットを含む、ステップ、をさらに含む。
【0131】
例16は、例11~15のうちいずれか1つに記載の対象事項を含んでもよく、上記第1のエントリの上記選択は、要求が算術エンジンにより実行可能な複数の単項関数のうち第1の単項関数を指定するとの決定にさらに基づく。
【0132】
例17は、例16に記載の対象事項を含んでもよく、上記複数の単項関数のうち第2の単項関数を指定する要求に応答して第2の浮動小数点入力から仮数を抽出するステップと、上記第2の浮動小数点入力の指数及び符号を除き上記抽出された仮数に対して冪級数近似を評価するステップであり、上記冪級数近似は上記第2の浮動小数点入力に基づき取り出された係数により定義される、ステップと、をさらに含む。
【0133】
例18は、例11~17のうちいずれか1つに記載の対象事項を含んでもよく、第2の浮動小数点入力値が特殊ケースに対応すると決定するステップと、上記特殊ケースに対応する値を出力するステップと、をさらに含む。
【0134】
例19は、例11~18のうちいずれか1つに記載の対象事項を含んでもよく、上記範囲は、単項関数に関連づけられた複数の範囲のうち第1の範囲であり、第2の浮動小数点入力が上記複数の範囲のうち第2の範囲内であると決定するステップと、上記第2の範囲が定数モードで動作するよう指定されていると決定するステップと、上記第2の範囲に関連づけられた定数を第2の出力値として出力するステップと、をさらに含む。
【0135】
例20は、例11~19のうちいずれか1つに記載の対象事項を含んでもよく、上記範囲は、単項関数に関連づけられた複数の範囲のうち第1の範囲であり、第2の浮動小数点入力が上記複数の範囲のうち第2の範囲内であると決定するステップと、上記第2の範囲がアイデンティティモードで動作するよう指定されていると決定するステップと、上記第2の浮動小数点入力を第2の出力値として出力するステップと、をさらに含む。
【0136】
例21は、複数の単項関数の構成を指定する複数の構成レジスタを含む第1のメモリと、上記複数の単項関数のうち第1の単項関数に関連づけられた複数のエントリを記憶する第2のメモリであり、上記複数のエントリのうち各エントリは入力値の範囲の部分に関連づけられ、上記複数のエントリのうち各エントリは冪級数近似を定義する係数セットを含む、第2のメモリと、上記複数のエントリのうち第1のエントリを、浮動小数点入力値が上記第1のエントリに関連づけられた入力値の範囲の部分内であるとの決定に基づいて選択し、上記浮動小数点入力値において上記第1のエントリの係数セットにより定義される冪級数近似を評価することにより出力値を算出する算術エンジンと、を含むシステムである。
【0137】
例22は、例21に記載の対象事項を含んでもよく、上記第2のメモリは、上記複数の単項関数のうち第2の単項関数に関連づけられた第2の複数のエントリを記憶し、上記第2の複数のエントリのうち各エントリは第2の入力値の範囲の部分に関連づけられ、上記第2の複数のエントリのうち各エントリは冪級数近似を定義する係数セットを含む。
【0138】
例23は、例21~22のうちいずれか1つに記載の対象事項を含んでもよく、上記算術エンジンを含む行列処理ユニット、をさらに含む。
【0139】
例24は、例21~23のうちいずれか1つに記載の対象事項を含んでもよく、上記算術エンジンは、上記冪級数近似を評価する複数の融合乗算加算器を含む。
【0140】
例25は、例21~24のうちいずれか1つに記載の対象事項を含んでもよく、上記算術エンジンを含むプロセッサに通信上結合されたバッテリ、上記プロセッサに通信上結合されたディスプレイ、又は上記プロセッサに通信上結合されたネットワークインターフェース、をさらに含む。
【0141】
本明細書中での「1つの実施形態」又は「一実施形態」への参照は、実施形態に関連して説明された特定の特徴、構造、又は特性が本開示の少なくとも一実施形態に含まれることを意味する。ゆえに、本明細書中の様々な箇所におけるフレーズ「1つの実施形態において」又は「一実施形態において」の出現は、必ずしも同じ実施形態を指すものではない。さらに、特定の特徴、構造、又は特性は、1つ以上の実施形態において任意の適切な方法で組み合わせられてもよい。
【0142】
前述の明細書では、特定の例示的な実施形態を参照して詳細な説明が与えられた。しかしながら、別記の特許請求の範囲に記載された本開示のより広い主旨及び範囲から逸脱することなく、これらに対し種々の修正及び変更がなされ得ることが明らかであろう。したがって、明細書及び図面は、限定的な意味でなく例示的な意味で解釈されるべきである。さらに、前述の実施形態及び他の例示的言語の使用は、必ずしも同じ実施形態又は同じ例を参照するものでなく、異なる及び区別可能な実施形態、並びに潜在的に同じ実施形態を参照し得る。
図1
図2
図3
図4
図5
図6
図7
図8A
図8B
図9A
図9B
図10
図11
図12
図13
図14
図15