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

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

▶ 株式会社Preferred Networksの特許一覧 ▶ 国立大学法人神戸大学の特許一覧

<>
  • 特開-プロセッサ 図1
  • 特開-プロセッサ 図2
  • 特開-プロセッサ 図3
  • 特開-プロセッサ 図4
  • 特開-プロセッサ 図5
  • 特開-プロセッサ 図6
  • 特開-プロセッサ 図7
  • 特開-プロセッサ 図8
  • 特開-プロセッサ 図9
  • 特開-プロセッサ 図10
  • 特開-プロセッサ 図11
  • 特開-プロセッサ 図12
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024077425
(43)【公開日】2024-06-07
(54)【発明の名称】プロセッサ
(51)【国際特許分類】
   G06F 9/38 20180101AFI20240531BHJP
   G06F 9/30 20180101ALI20240531BHJP
【FI】
G06F9/38 350B
G06F9/38 310X
G06F9/30 310A
【審査請求】未請求
【請求項の数】9
【出願形態】OL
(21)【出願番号】P 2022189517
(22)【出願日】2022-11-28
(71)【出願人】
【識別番号】515130201
【氏名又は名称】株式会社Preferred Networks
(71)【出願人】
【識別番号】504150450
【氏名又は名称】国立大学法人神戸大学
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(72)【発明者】
【氏名】金子 紘也
(72)【発明者】
【氏名】名村 健
(72)【発明者】
【氏名】安達 知也
(72)【発明者】
【氏名】牧野 淳一郎
【テーマコード(参考)】
5B013
5B033
【Fターム(参考)】
5B013CC10
5B033BA00
(57)【要約】
【課題】命令により明示的にデータのバイパスが指示される場合に、データのバイパスを正常に実施してプロセッサの処理性能の低下を抑制する。
【解決手段】プロセッサは、バイパス情報を含む命令をデコードし、前記バイパス情報に基づいてバイパス制御信号を生成する命令デコーダと、命令の実行に使用するデータを保持するデータ保持部と、命令を実行し、演算結果データを出力する演算器と、前記データ保持部に保持されたデータ又は前記演算結果データを前記バイパス制御信号に基づいて選択して前記演算器に出力する第1セレクタと、を有する。
【選択図】図1
【特許請求の範囲】
【請求項1】
バイパス情報を含む命令をデコードし、前記バイパス情報に基づいてバイパス制御信号を生成する命令デコーダと、
命令の実行に使用するデータを保持するデータ保持部と、
命令を実行し、演算結果データを出力する演算器と、
前記データ保持部に保持されたデータ又は前記演算結果データを前記バイパス制御信号に基づいて選択して前記演算器に出力する第1セレクタと、を有する
プロセッサ。
【請求項2】
前記演算結果データを保持するラッチと、
前記演算器の出力と前記ラッチとの間に配置され、前記演算器の出力又は前記ラッチの出力を保持制御信号に基づいて前記ラッチの入力に接続する第2セレクタと、を有し、
前記命令デコーダは、先行命令と、前記先行命令の実行に基づいて前記演算器からバイパスされる前記演算結果データを使用して実行される後続命令との間にバブルが挿入されることを検出した場合、バブルの挿入サイクルに対応して前記保持制御信号を生成する
請求項1に記載のプロセッサ。
【請求項3】
命令を保持する命令キューと、
前記命令キューに保持された命令を取り出して前記命令デコーダに供給する命令取り出し部と、を有し、
前記命令キューに保持される命令は、さらに、命令パイプラインにおいて自命令の直前の命令と前記自命令との間へのバブルの挿入の禁止又は許可を示すバブル挿入禁止情報を含み、
前記命令取り出し部は、
前記命令キューから取り出す対象命令に含まれる前記バブル挿入禁止情報がバブルの挿入禁止を示す場合、前記対象命令を取り出して前記命令デコーダに供給し、
前記対象命令に含まれる前記バブル挿入禁止情報がバブルの挿入許可を示す場合、前記命令キューに保持された命令の量に応じて、前記対象命令を取り出して前記命令デコーダに供給するか、ノーオペレーション命令を前記命令デコーダに供給するかを判定する
請求項1に記載のプロセッサ。
【請求項4】
前記命令取り出し部は、前記対象命令に含まれる前記バブル挿入禁止情報がバブルの挿入許可を示す場合、
前記命令キューに保持された命令の量が第1しきい値より少ない場合、前記命令キューに保持された命令の量が前記第1しきい値以上になるまでノーオペレーション命令を前記命令デコーダに供給し、
前記命令キューに保持された命令の量が第1しきい値以上の場合、前記対象命令を前記命令キューから取り出して前記命令デコーダに供給する
請求項3に記載のプロセッサ。
【請求項5】
前記第1セレクタを介して前記演算器からバイパスされる前記演算結果データを使用して演算を実行する命令に含まれるバブル挿入禁止情報は、バブルの挿入禁止に設定され、
前記演算器からバイパスされる前記演算結果データを使用せずに演算を実行する命令に含まれるバブル挿入禁止情報は、バブルの挿入許可に設定される
請求項3又は請求項4に記載のプロセッサ。
【請求項6】
命令を保持する命令キューと、
前記命令キューに保持された命令を取り出して前記命令デコーダに供給する命令取り出し部と、
前記命令キューに供給される命令の前記演算器による演算が、前記第1セレクタを介して前記演算器からバイパスされる前記演算結果データを使用して実行されるか否かを判定する判定部と、
前記命令キューに保持される命令に対応して前記判定部の判定結果を保持し、前記命令キューの更新とともに更新される先読みキューと、を有し、
前記命令取り出し部は、
前記先読みキューの先頭が、前記演算器からバイパスされる前記演算結果データの非使用を示す非使用情報を保持し、前記先読みキューの2番目以降の全てが、前記演算器からバイパスされる前記演算結果データの使用を示す使用情報を保持する場合、ノーオペレーション命令を前記命令デコーダに供給し、
その後、前記先読みキューの2番目以降に連続して保持された前記使用情報の後に前記非使用情報が格納された場合、前記先読みキューの先頭から最後の前記使用情報までに対応して前記命令キューに保持された命令を前記命令デコーダに順次供給する
請求項1に記載のプロセッサ。
【請求項7】
前記命令取り出し部は、前記先読みキューの2番目が前記非使用情報を保持する場合、前記命令キューの先頭に保持された命令を前記命令デコーダに供給する
請求項6に記載のプロセッサ。
【請求項8】
選択制御信号に基づいて、前記命令デコーダから供給される命令で使用するデータ又は前記演算器から出力される前記演算結果データを選択して前記データ保持部に出力する第3セレクタを有し、
前記命令デコーダがデコードする命令は、さらに選択情報を含み、
前記命令デコーダは、前記選択情報に基づいて前記選択制御信号を生成する
請求項1から請求項4、請求項6及び請求項7のいずれか1項に記載のプロセッサ。
【請求項9】
前記演算結果データを前記第1セレクタに選択させる前記バイパス情報を含む命令は、前記第3セレクタによる前記演算結果データの選択を禁止させる前記選択情報を含む
請求項8に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、プロセッサに関する。
【背景技術】
【0002】
プロセッサにおいて、演算により得られた演算結果データが次の演算で使用される場合、レジスタに格納される前の演算結果データを演算器にバイパスして次の演算に使用することで、演算器の使用効率を向上し、プロセッサの性能を向上する技術が知られている。
【0003】
この種のプロセッサは、命令キューに保持された命令をデコードするときにデータの依存性を判定し、演算結果データを演算器にバイパスするか否かを判定する。演算結果データのバイパスは、隣接した命令間で実施される必要があり、演算結果データのバイパスを実施する命令間にバブルが入ると、正しい演算を実施することができない。
【0004】
また、プロセッサは、演算結果データを演算器にバイパスする場合、演算結果データをレジスタにも格納する。レジスタに格納されたデータがその後の演算で使用されない場合、レジスタの使用効率は低下し、プロセッサの処理性能が低下する場合がある。
【発明の概要】
【発明が解決しようとする課題】
【0005】
本開示では、命令により明示的にデータのバイパスが指示される場合に、データのバイパスを正常に実施してプロセッサの処理性能の低下を抑制する。
【課題を解決するための手段】
【0006】
本発明の実施形態のプロセッサは、バイパス情報を含む命令をデコードし、前記バイパス情報に基づいてバイパス制御信号を生成する命令デコーダと、命令の実行に使用するデータを保持するデータ保持部と、命令を実行し、演算結果データを出力する演算器と、前記データ保持部に保持されたデータ又は前記演算結果データを前記バイパス制御信号に基づいて選択して前記演算器に出力する第1セレクタと、を有する。
【図面の簡単な説明】
【0007】
図1】本発明の一実施形態におけるプロセッサの構成の一例を示すブロック図である。
図2図2のプロセッサが実行する命令列と動作タイミングの一例を示す説明図である。
図3】本発明の別の実施形態におけるプロセッサの構成の一例を示すブロック図である。
図4図3のプロセッサが実行する命令列と動作タイミングの一例を示す説明図である。
図5】本発明の別の実施形態におけるプロセッサの構成の一例を示すブロック図である。
図6図5の命令取り出し部の動作の一例を示すフロー図である。
図7図5の命令取り出し部の動作の一例を示す説明図である。
図8】本発明の別の実施形態におけるプロセッサの構成の一例を示すブロック図である。
図9図8のバブル判定部の動作の一例を示すフロー図である。
図10図8の命令取り出し部の動作の一例を示すフロー図である。
図11図8の命令取り出し部の動作の一例を示す説明図である。
図12図1に示したプロセッサが搭載される計算機のハードウェア構成の一例を示すブロック図である。
【発明を実施するための形態】
【0008】
以下、本発明の実施形態について、図面を参照しながら詳細に説明する。以下では、信号が伝達される信号線には、信号名と同じ符号を使用する。特に限定されないが、以下で説明するプロセッサは、サーバ等のコンピュータに搭載され、プログラムを実行することで、ディープニューラルネットワークの訓練又は推論において畳み込み演算等を実行してもよい。なお、以下で説明するプロセッサは、科学技術計算などに使用されてもよい。
【0009】
図1は、本発明の一実施形態におけるプロセッサの構成の一例を示すブロック図である。図1に示すプロセッサ100は、命令供給部10及び演算ユニット20を有してもよい。命令供給部10は、命令発生部11及び命令デコーダ14を有してもよい。演算ユニット20は、レジスタファイル21、演算器22、セレクタSEL0、SEL1及びラッチLTを有してもよい。セレクタSEL0は、第3セレクタの一例であり、セレクタSEL1は、第1セレクタの一例である。プロセッサ100は、クロックに同期して動作してもよいが、クロックの記載は省略される。例えば、レジスタファイル21及びラッチLTに示す三角印は、クロック入力端子を示す。
【0010】
なお、プロセッサ100は、デコード処理、演算の実行処理及び演算結果の格納処理等を複数のステージに分けて実施するために、複数の命令を並列に処理する命令パイプラインを有してもよい。しかしながら、ステージを区切るラッチ又はレジスタ等の記載は、ラッチLTを除いて省略される。
【0011】
命令発生部11は、演算器22に実行させる命令を発生して命令デコーダ14に供給してもよい。例えば、命令発生部11は、命令が保持されるメモリ部と、メモリ部からの命令の読み出しを制御する制御部とを含む命令キャッシュ等のメモリを有してもよい。あるいは、命令発生部11は、命令供給部10に接続されるメモリに保持される命令を命令デコーダ14に転送するDMAC(Direct Memory Access Controller)等のデータ転送回路を有してもよい。なお、命令発生部11が出力する命令は、命令バッファを介して命令デコーダ14に供給されてもよい。
【0012】
この実施形態では、プロセッサ100が実行可能な命令を含む命令セットは、例えば、直前の命令の演算による演算結果データRSLTを演算器22にバイパスさせる指示を含むバイパス演算命令を有する。バイパス演算命令は、バイパスさせる演算結果データRSLTのレジスタファイル21への格納を禁止する指示を含んでもよい。
【0013】
命令により明示的にバイパスの有無を指示することで、プロセッサ100を使用するユーザ等は、演算結果データRSLTを適切なタイミングでバイパスさせるための命令を記述することができる。また、命令デコーダ14は、受信する命令列に基づいてデータの依存性を判定し、判定結果に基づいて演算結果データRSLTをバイパスさせるか否かを決める論理回路を持たなくてよい。このため、命令デコーダ14の回路規模を低減することができ、プロセッサ100のコストを低減することができる。
【0014】
命令デコーダ14は、命令発生部11から供給される命令をデコードし、デコードした命令に含まれる制御情報及びオペランド情報に応じて制御信号CNT0、CNT1及びレジスタ制御信号REG等を生成し、演算ユニット20に出力してもよい。制御信号CNT0は、セレクタSEL0の制御に使用されてもよく、制御信号CNT1は、セレクタSEL1の制御に使用されてもよい。制御信号CNT0は、選択制御信号の一例である。制御信号CNT1は、バイパス制御信号の一例である。
【0015】
命令デコーダ14は、選択情報を含む命令をデコードした場合、選択情報に基づいて、セレクタSEL0の制御に使用する制御信号CNT0を生成してもよい。命令デコーダ14は、バイパス情報を含む命令をデコードした場合、バイパス情報に基づいて、セレクタSEL1の制御に使用する制御信号CNT1を生成してもよい。例えば、バイパス情報は命令中の2ビットの領域であり、2ビットの内1ビットの値(0又は1)がCNT0の状態(ロウレベル又はハイレベル)に対応し、他方の1ビットの値(0又は1)がCNT1の状態(ロウレベル又はハイレベル)に対応する。命令デコーダ14は、レジスタ情報(オペランド情報)を含む命令をデコードした場合、レジスタ情報に基づいて、レジスタファイル21の読み書きに使用するレジスタ制御信号REGを生成してもよい。
【0016】
命令デコーダ14によりデコードされる命令は、セレクタSEL0、SEL1を直接制御する制御情報を含んでもよい。このため、プロセッサ100を動作させる命令を記述するユーザ等は、演算結果データRSLTをレジスタファイル21を介さずに演算器22に転送するバイパス処理の有無を、制御情報を含む命令により直接制御することができる。換言すれば、プロセッサ100を使用するユーザ等は、バイパス処理の有無を命令によりプロセッサ100に指示することができる。
【0017】
レジスタファイル21は、オペランドデータを保持する図示しない複数のレジスタを有してもよい。レジスタの各々は、レジスタ制御信号REGにより選択されてもよい。図1では、一例として、レジスタファイル21の2つのレジスタからそれぞれ読み出されるデータRFa、RFb(ソースオペランド)が示される。レジスタファイル21は、命令の実行に使用するデータを保持するデータ保持部の一例である。
【0018】
セレクタSEL0は、例えば、制御信号CNT0がロウレベルのとき、端子0で受ける演算結果データRSLTを選択してレジスタファイル21に転送する。セレクタSEL0は、例えば、制御信号CNT0がハイレベルのとき、端子1で受けるオペランドデータを選択してレジスタファイル21に転送するとともに、端子0で受ける演算結果データRSLTの選択を禁止する。セレクタSEL0からレジスタファイル21に転送されるデータの格納先のレジスタは、レジスタ制御信号REGに応じて決められる。
【0019】
演算器22は、命令デコーダ14がデコードする命令を実行する加算器、乗算器又は論理演算器等であってもよい。なお、演算ユニット20は、複数種の演算器22の各々を1個又は複数個有してもよい。演算ユニット20が複数の演算器22を有する場合、各演算器22に対応してセレクタSEL1及びラッチLTが設けられてもよく、各セレクタSEL1に対応して、異なる又は同一の制御信号CNT1が生成されてもよい。
【0020】
以下では、演算器22が加算器である例について説明される。演算器22は、セレクタSEL1から転送されるデータを一方の入力で受けてもよく、レジスタファイル21から出力されるデータRFbを他方の入力で受けてもよい。演算器22は、受けたデータを加算し、演算結果データRSLTとして出力する。
【0021】
例えば、セレクタSEL1は、制御信号CNT1がロウレベルのとき端子0で受ける演算結果データRSLTを選択し、制御信号CNT1がハイレベルのとき端子1で受けるデータRFaを選択し、選択したデータを演算器22の一方の入力に転送する。セレクタSEL1の端子0を介して演算器22に転送される演算結果データRSLTは、レジスタファイル21を経由されることなくバイパスされるバイパスデータである。
【0022】
ラッチLTは、演算器22から出力される演算結果データRSLTをラッチしてセレクタSEL0、SEL1に出力してもよい。
【0023】
図2は、図2のプロセッサ100が実行する命令列と動作タイミングの一例を示す説明図である。図2に示す例では、プロセッサ100は、5個の加算命令ADD、ADDb0、ADDb0、ADDb1、ADDを順次実行する。各加算命令ADD、ADDb0、ADDb0、ADDb1の演算は、1クロックサイクルで実行されるものとする。
【0024】
加算命令ADDでは、レジスタR0、R1(又は、R4、R5)に保持されたデータが演算器22により加算され、加算結果がレジスタR2(又は、R6)に格納されてもよい。
【0025】
加算命令ADDb0では、直前の加算命令ADDの加算結果をバイパスしたバイパスデータBPと、レジスタR1に保持されたデータとが演算器22により加算されてもよい。また、加算命令ADDb0では、加算結果のレジスタファイル21への格納が禁止されてもよい(DIS)。加算命令ADDb0は、ハイレベルの制御信号CNT0を生成する選択情報とロウレベルの制御信号CNT1を生成するバイパス情報とを含むバイパス演算命令である。
【0026】
加算命令ADDb1では、直前の加算命令の加算結果をバイパスしたバイパスデータBPと、レジスタR3に保持されたデータとが演算器22により加算され、加算結果がレジスタR4に格納されてもよい。加算命令ADDb1は、ロウレベルの制御信号CNT0を生成する選択情報とロウレベルの制御信号CNT1を生成するバイパス情報とを含むバイパス演算命令である。
【0027】
動作タイミングにおいて、命令デコーダ14は、加算命令ADDをデコードした場合、例えば、ハイレベルHの制御信号CNT0、CNT1を出力してもよい。これにより、セレクタSEL0は、端子1を選択し、端子0の入力を禁止してもよい(DIS)。セレクタSEL1は、入力1(データRFa)を選択してもよい。
【0028】
命令デコーダ14は、加算命令ADDb0をデコードした場合、ハイレベルHの制御信号CNT0及びロウレベルLの制御信号CNT1を出力してもよい。これにより、セレクタSEL0は、端子1を選択し、端子0の入力を禁止してもよい(DIS)。セレクタSEL1は、端子0(バイパスデータBPであるデータD0又はデータD1)を選択してもよい。
【0029】
命令デコーダ14は、加算命令ADDb1をデコードした場合、ロウレベルの制御信号CNT0、CNT1を出力してもよい。これにより、セレクタSEL0は、端子0を選択し、直前の加算命令ADDb0の加算結果データD2をレジスタR4に転送してもよい。セレクタSEL1は、端子0(バイパスデータBPであるデータD2)を選択してもよい。
【0030】
以上、この実施形態では、命令デコーダ14は、セレクタSEL1を直接制御するバイパス情報を含む命令をデコードし、セレクタSEL1を制御する制御信号CNT1を出力する。これにより、プロセッサ100を動作させる命令を記述するユーザ等は、演算結果データRSLTのバイパスの有無を、命令によりプロセッサ100に直接指示することができる。プロセッサ100は、命令デコーダ14がデコードにより生成した制御信号CNT1に基づいて動作することで、バイパス処理を正常に実施することができ、演算器22の使用効率を向上することができる。
【0031】
命令デコーダ14は、セレクタSEL0を直接制御する選択情報を含む命令をデコードし、セレクタSEL0を制御する制御信号CNT0を出力してもよい。これにより、演算器22からバイパスされる演算結果データRSLTがレジスタファイル21に格納されることを抑止することができる。例えば、演算結果データRSLTのバイパスが繰り返される複数回の演算が実行される場合に、演算の途中のバイパスデータがレジスタファイル21に格納されることを抑止することができる。これにより、レジスタファイル21内のレジスタの使用効率が低下することを抑制することができ、プロセッサ100の処理性能の低下を抑制することができる。
【0032】
また、命令デコーダ14は、受信する命令列に基づいてデータの依存性を判定し、判定結果に基づいて演算結果データRSLTをバイパスさせるか否かを決める論理回路を持たなくてよい。このため、命令デコーダ14の回路規模を低減することができ、プロセッサ100のコストを低減することができる。例えば、命令デコーダ14のデコード処理に掛かる時間を短縮できる場合、プロセッサ100の処理性能をさらに向上することができる。
【0033】
以上より、プロセッサ100を使用するユーザ等が命令により明示的にデータのバイパスを指示する場合に、データのバイパスを正常に実施してプロセッサ100の処理性能の低下を抑制することができる。
【0034】
図3は、本発明の別の実施形態におけるプロセッサの構成の一例を示すブロック図である。図1と同様の要素については同じ符号を付し、詳細な説明は省略する。図3に示すプロセッサ100Aは、命令デコーダ14の代わりに命令デコーダ14Aを有してもよく、演算器22とラッチLTとの間にセレクタSEL2が配置されてもよいことを除き、図1のプロセッサ100と同様の構成を有する。セレクタSEL2は、第2セレクタの一例である。
【0035】
セレクタSEL2は、端子0がラッチLTの出力に接続されてもよく、端子1が演算器22の出力に接続されてもよい。セレクタSEL2は、制御信号CNT2がロウレベルのときにラッチLTから出力される演算結果データRSLTを選択してもよく、制御信号CNT2がハイレベルのときに演算器22から出力される演算結果データRSLTを選択してもよい。これにより、セレクタSEL2は、ロウレベルの制御信号CNT2を受けている期間、ラッチLTの出力を選択し続けて演算結果データRSLTを保持し続けることができる。
【0036】
命令デコーダ14Aは、図1の命令デコーダ14の機能に加えて、演算結果データRSLTがバイパスされる命令間にバブルが発生するか否かに応じて、セレクタSEL2の制御に使用する制御信号CNT2を生成する機能を有してもよい。例えば、命令デコーダ14Aは、直前の命令の演算結果データRSLTをバイパスして使用する命令の前にバブルが発生することを検出した場合、ロウレベルの制御信号CNT2を生成する。制御信号CNT2は、保持制御信号の一例である。
【0037】
図4は、図3のプロセッサ100Aが実行する命令列と動作タイミングの一例を示す説明図である。図2と同様の動作については詳細な説明は省略する。図4に示す例では、プロセッサ100Aは、図2と同様に、加算命令ADD、ADDb0、ADDb0、ADDb1、ADDを順次実行してもよい。以下では、最初の加算命令ADDの次に実行される加算命令ADDb0は、2番目の加算命令ADDb0と称される。
【0038】
図4に示す例では、先行命令である2番目の加算命令ADDb0と、後続命令である3番目の加算命令ADDb0との間にバブルが2クロックサイクル発生する。命令デコーダ14Aは、加算命令ADDb0の直前にバブルが発生することを検出した場合、バブルの挿入サイクルに対応してロウレベルLの制御信号CNT2を出力してもよい。なお、命令デコーダ14Aは、加算命令ADDb0の直前にバブルが発生することを検出したとき以外、ハイレベルHの制御信号CNT2を出力してもよい。
【0039】
加算命令ADD、ADDb0、ADDb1がデコードされた場合のプロセッサ100Aの動作は、図2に示す動作と同様である。セレクタSEL2は、ロウレベルLの制御信号CNT2を受けている間、2番目の加算命令ADDb0の演算結果データRSLTを保持し、保持している演算結果データRSLTをラッチLTに出力してもよい。これにより、演算ユニット20において、バイパスする演算結果データRSLTを生成する命令と、バイパスされる演算結果データRSLTを使用する命令との間にバブルが発生する場合にも、演算を破綻させることなく正しく実行することができる。
【0040】
以上、この実施形態においても上述した実施形態と同様に、演算結果データRSLTのバイパスの有無を、命令に付加するバイパス情報によりプロセッサ100Aに指示することができる。これにより、プロセッサ100Aは、バイパス処理を正常に実施することができ、演算器22の使用効率を向上することができる。
【0041】
さらに、この実施形態では、プロセッサ100Aは、演算結果データRSLTをバイパスさせる命令間で発生するバブルを検出して制御信号CNT2を出力する命令デコーダ14Aと、制御信号CNT2に応じて演算結果データRSLTを保持するセレクタSEL2とを有してもよい。これにより、演算結果データRSLTをバイパスさせる命令間にバブルが発生する場合にも、演算を破綻させることなく正しく実行することができる。
【0042】
この結果、プロセッサ100Aを使用するユーザが命令により明示的にデータのバイパスを指示する場合に、データのバイパスを正常に実施してプロセッサ100Aの処理性能の低下を抑制することができる。
【0043】
図5は、本発明の別の実施形態におけるプロセッサの構成の一例を示すブロック図である。図1と同様の要素については同じ符号を付し、詳細な説明は省略する。図5に示すプロセッサ100Bは、命令発生部11と命令デコーダ14との間に配置された命令キュー12及び命令取り出し部13を有してもよい。演算ユニット20は、図1の演算ユニット20と同じでもよく、図3の演算ユニット20と同じでもよい。演算ユニット20が図3の演算ユニット20と同じ場合、命令供給部10は、デコーダ14の代わりに図3のデコーダ14Aを有してもよい。
【0044】
命令キュー12は、複数のエントリを有するFIFO(First-In First-Out)タイプのキューであってもよく、命令発生部11から出力される命令をエントリに順次保持してもよい。例えば、命令キュー12に保持される命令は、命令コードOP、オペランドRx、Ry、Rz及びバブル挿入禁止情報NOINTRを含んでもよい。
【0045】
例えば、命令コードOPは、図2及び図4に示した加算命令ADD、ADDb0、ADDb1の識別コードを含む。オペランドRx、Ry、Rzは、それぞれレジスタファイル21のレジスタの番号を示す。各命令に含まれるオペランドRx、Ry、Rzの数は3個に限定されず、3個より多くあってもよいし、3個より少なくてもよい。
【0046】
バブル挿入禁止情報NOINTRは、命令パイプラインにおいて、自命令が、自命令の直前に実行される命令のバイパスデータを使用して演算を実行する場合、バブルの挿入禁止を示す論理値(例えば、"1")に設定される。バブル挿入禁止情報NOINTRは、自命令が、自命令の直前に実行される命令後、クロックサイクルを空けて演算を実行可能な場合、バブルの挿入許可を示す論理値(例えば、"0")に設定される。
【0047】
命令取り出し部13は、命令キュー12から取り出す対象命令に含まれるバブル挿入禁止情報NOINTRがバブルの挿入禁止を示す場合、対象命令を取り出して命令デコーダ14に供給してもよい。命令取り出し部13は、命令キュー12から取り出す対象命令に含まれるバブル挿入禁止情報NOINTRがバブルの挿入許可を示す場合、命令キュー12に保持された命令の量に応じて、対象命令を取り出すか否かを判定してもよい。
【0048】
例えば、命令取り出し部13は、命令キュー12に保持された命令の量が第1しきい値VT1より少ない場合、命令キュー12に保持された命令の量が第1しきい値VT1以上になるまでノーオペレーション命令NOPを命令デコーダ14に供給してもよい。命令取り出し部13は、命令キュー12に保持された命令の量が第1しきい値VT1以上の場合、取り出しの対象命令を命令キュー12から取り出して命令デコーダ14に供給してもよい。
【0049】
第1しきい値VT1は、演算結果データRSLTのバイパスが必要な命令の最大連続数以上に設定されてもよい。すなわち、プロセッサ100Bを使用するユーザ等は、演算結果データRSLTのバイパスが必要な命令の連続数が第1しきい値VT1により示される命令数以下になるように命令(プログラム)を記述してもよい。
【0050】
なお、先行命令の演算結果データRSLTをバイパスデータとして使用して演算を実行する後続命令に含まれるバブル挿入禁止情報NOINTRは、バブルの挿入禁止に設定されてもよい。先行命令の演算結果データRSLTをバイパスさせずに演算を実行する後続命令に含まれるバブル挿入禁止情報NOINTRは、バブルの挿入許可に設定されてもよい。
【0051】
図6は、図5の命令取り出し部13の動作の一例を示すフロー図である。図6に示すフローは、命令取り出し部13が命令キュー12から命令を取り出す毎に、命令を取り出す前に開始されてもよい。
【0052】
まず、ステップS10において、命令取り出し部13は、命令キュー12の先頭に保持された取り出しの対象命令を参照してもよい。次に、ステップS11において、命令取り出し部13は、取り出しの対象命令に含まれるバブル挿入禁止情報NOINTRが"1"を示すか否かを判定してもよい。命令取り出し部13は、バブル挿入禁止情報NOINTRが"1"(バブルの挿入禁止)を示す場合、ステップS14を実施してもよく、バブル挿入禁止情報NOINTRが"0"(バブルの挿入許可)を示す場合、ステップS12を実施してもよい。
【0053】
ステップS12において、命令取り出し部13は、命令キュー12に保持されている命令の量が第1しきい値VT1より少ない場合、ステップS13を実施してもよく、命令キュー12に保持されている命令の量が第1しきい値VT1以上の場合、ステップS14を実施してもよい。
【0054】
ステップS13において、命令取り出し部13は、取り出しの対象命令を命令キュー12から取り出さずにノーオペレーション命令NOPを命令デコーダ14に供給し、図6に示す動作を終了してもよい。
【0055】
このように、命令取り出し部13は、命令キュー12に保持されている命令の量が少ない場合、ノーオペレーション命令NOPを命令デコーダ14に供給してもよい。これにより、バブルの挿入禁止を示す複数の命令が命令キュー12から順次取り出される場合にも、命令キュー12が空になることを抑止することができる。この結果、演算結果データRSLTをバイパスさせる演算を繰り返し実行する場合に、命令キュー12が空になることでバブルが挿入されることを抑止することができ、データのバイパスが正常に実施されずにデータが破壊されることを抑止することができる。
【0056】
ステップS14において、命令取り出し部13は、取り出しの対象命令を命令キュー12から取り出して命令デコーダ14に供給し、図6に示す動作を終了してもよい。例えば、命令取り出し部13は、バブルの挿入禁止を示す対象命令を命令キュー12から取り出して命令デコーダ14に供給することで、対象命令の直前の命令と対象命令との演算を連続して演算器22に実行することができる。
【0057】
これにより、演算結果データRSLTをバイパスさせる命令間にバブルを発生させることなく、演算を正しく実行することができる。また、命令キュー12に所定量以上の命令が保持されている場合に、命令キュー12から命令を順次取り出して命令デコーダ14に供給することで、命令キュー12がオーバーフローすることを抑止することができる。
【0058】
図7は、図5の命令取り出し部13の動作の一例を示す説明図である。命令キュー12に網掛けで示す領域は、命令キュー12が保持している相対的な命令の量を示している。命令キュー12が保持する命令の量は、命令発生部11から供給される命令の量が命令取り出し部13により取り出される命令の量より多い場合に増加する。命令キュー12が保持する命令の量は、命令発生部11から供給される命令の量が命令取り出し部13により取り出される命令の量より少ない場合に減少する。
【0059】
状態(A)、(C)において、命令取り出し部13は、命令キュー12からの取り出しの対象命令に含まれるバブル挿入禁止情報NOINTRが"1"の場合(バブルの挿入禁止)、命令キュー12に保持されている命令の量にかかわりなく、対象命令を取り出して命令デコーダ14に供給してもよい。
【0060】
状態(B)において、命令取り出し部13は、取り出しの対象命令に含まれるバブル挿入禁止情報NOINTRが"0"(バブルの挿入許可)で、命令キュー12に保持されている命令がしきい値VT1より少ない場合、ノーオペレーション命令NOPを命令デコーダ14に供給してもよい。
【0061】
状態(B)では、取り出しの対象命令は、命令キュー12から取り出されない。状態(B)の動作により、命令キュー12に保持される命令の量を増加させることができる。これにより、状態(C)の動作において、演算結果データRSLTをバイパスさせる命令が連続する場合にも、命令キュー12が空になることでバブルが挿入されることを抑止することができる。
【0062】
状態(D)において、命令取り出し部13は、取り出しの対象命令に含まれるバブル挿入禁止情報NOINTRが"0"(バブルの挿入許可)で、命令キュー12に保持されている命令がしきい値VT1以上の場合、命令を取り出して命令デコーダ14に供給してもよい。これにより、命令キュー12がオーバーフローすることを抑止することができる。
【0063】
以上、この実施形態においても上述した実施形態と同様に、演算結果データRSLTのバイパスの有無を、命令に付加するバイパス情報によりプロセッサ100Bに指示することができる。これにより、プロセッサ100Bは、バイパス処理を正常に実施することができ、演算器22の使用効率を向上することができる。また、演算結果データRSLTのバイパスを判断する論理回路が不要になるため、命令デコーダ14の回路規模を低減することができ、プロセッサ100Bのコストを低減することができる。
【0064】
さらに、この実施形態では、命令取り出し部13は、バブル挿入禁止情報NOINTRがバブルの挿入禁止を示す場合、命令キュー12から命令を取り出して命令デコーダ14に供給する。これにより、先行の命令の演算結果データRSLTをバイパスさせて後続の命令の演算に使用することができ、データを正常にバイパスさせて演算を実行することができる。
【0065】
命令取り出し部13は、バブル挿入禁止情報NOINTRがバブルの挿入許可を示す場合、命令キュー12の命令の保持量に応じて、命令を取り出して命令キュー12に供給するか、ノーオペレーション命令NOPを命令キュー12に供給するかを判定してもよい。これにより、バブルの挿入禁止を示す複数の命令が命令キュー12から順次取り出される場合にも、命令キュー12が空になることを抑止することができる。
【0066】
この結果、プロセッサ100を使用するユーザが明示的にデータのバイパスを指示する場合であって、演算結果データRSLTをバイパスさせる演算を繰り返し実行する場合に、命令キュー12が空になることでバブルが挿入されることを抑止することができる。これにより、データのバイパスが正常に実施されずにデータが破壊されることを抑止することができ、プロセッサ100Bの処理性能の低下を抑制することができる。また、命令キュー12に所定量以上の命令が保持されている場合に、命令キュー12から命令を順次取り出して命令デコーダ14に供給することで、命令キュー12がオーバーフローすることを抑止することができる。
【0067】
図8は、本発明の別の実施形態におけるプロセッサの構成の一例を示すブロック図である。図1及び図5と同様の要素については同じ符号を付し、詳細な説明は省略する。図8に示すプロセッサ100Cは、図5の命令取り出し部13の代わりに命令取り出し部13Cを有し、バブル判定部15及び先読みキュー16が命令供給部10に追加されていることを除き、図5のプロセッサ100Bの構成と同じでもよく、図3の演算ユニット20と同じでもよい。演算ユニット20が図3の演算ユニット20と同じ場合、命令供給部10は、デコーダ14の代わりに図3のデコーダ14Aを有してもよい。
【0068】
バブル判定部15は、命令発生部11から命令キュー12に供給される命令を先読みしてもよい。なお、命令キュー12に保持される命令は、図5に示したバブル挿入禁止情報NOINTRを含まなくてもよい。バブル判定部15は、先読みした命令の演算器22による演算が、先読みした命令の直前に実行される命令の演算結果データRSLTのバイパスデータを使用して実行されるか否かを判定してもよい。このため、バブル判定部15は、過去に先読みした複数の命令の情報を保持する図示しない命令保持部を有する。
【0069】
バブル判定部15は、先読みした命令の演算がバイパスデータを使用して実行されると判定した場合、先読みした命令が格納される命令キュー12のエントリに対応する先読みキュー16のエントリにフラグ"1"を格納してもよい。フラグ"1"は、命令パイプラインにおいて先読みした命令と、先読みした命令の直前の命令との間へのバブルの挿入禁止を示す。フラグ"1"は、演算器22からバイパスされる演算結果データRSLTの使用を示す使用情報の一例である。
【0070】
バブル判定部15は、先読みした命令の演算がバイパスデータを使用せずに実行されると判定した場合、先読みした命令が格納される命令キュー12のエントリに対応する先読みキュー16のエントリにフラグ"0"を格納してもよい。フラグ"0"は、命令パイプラインにおいて先読みした命令と、先読みした命令の直前の命令との間へのバブルの挿入の許可を示す。フラグ"0"は、演算器22からバイパスされる演算結果データRSLTの非使用を示す非使用情報の一例である。なお、使用情報と非使用情報とを示すフラグの論理値の"1"と"0"は、逆に設定されてもよい。バブル判定部15の動作の例は、図9に示される。
【0071】
先読みキュー16は、例えば、命令キュー12のエントリと同数又は異なる数のエントリを有するFIFOタイプのキューである。先読みキュー16と命令キュー12とは連動して更新される。例えば、先読みキュー16と命令キュー12とは、共通の先頭ポインタと共通の末尾ポインタとを使用して、情報の格納及び取り出しが実施されてもよい。
【0072】
命令キュー12において、先頭ポインタで示されるエントリから末尾ポインタで示されるエントリには、有効な命令が保持されてもよい。同様に、先読みキュー16において、先頭ポインタで示されるエントリから末尾ポインタで示されるエントリには、有効なフラグが保持されてもよい。以下では、命令キュー12及び先読みキュー16において、先頭ポインタで示されるエントリは、先頭エントリとも称され、末尾ポインタで示されるエントリは、末尾エントリとも称される。
【0073】
命令取り出し部13Cは、先読みキュー16に保持されたフラグの値に応じて、命令キュー12に保持された命令を取り出すか否かを判定してよもい。命令取り出し部13Cは、命令を取り出すと判定した場合、命令キュー12から命令を取り出して命令デコーダ14に供給してもよい。命令取り出し部13Cは、命令を取り出さないと判定した場合、ノーオペレーション命令NOPを命令デコーダ14に供給してもよい。命令取り出し部13Cの動作の例は、図10に示される。
【0074】
図9は、図8のバブル判定部15の動作の一例を示すフロー図である。図9に示すフローは、例えば、プロセッサ100Cの起動時に開始される。まず、ステップS20において、バブル判定部15は、命令発生部11から命令が出力されるのを待ち、命令発生部11から命令が出力された場合、ステップS21を実施してもよい。
【0075】
ステップS21において、バブル判定部15は、命令発生部11から出力された判定対象の命令が、判定対象の命令の直前に実行される命令の演算結果をバイパスしたデータを使用して実行されるか否かを判定してもよい。バブル判定部15は、判定対象の命令が、直前に実行される命令の演算結果のバイパスデータを使用して実行される場合、ステップS22を実施してもよい。バブル判定部15は、判定対象の命令が、直前に実行される命令の演算結果のバイパスデータを使用しない場合、ステップS23を実施してもよい。
【0076】
ステップS22において、バブル判定部15は、判定対象の命令が格納される命令キュー12のエントリに対応する先読みキュー16のエントリに、バブル挿入の禁止を示す"1"を格納し、図9に示す動作を終了してもよい。ステップS23において、バブル判定部15は、判定対象の命令が格納される命令キュー12のエントリに対応する先読みキュー16のエントリに、バブル挿入の許可を示す"0"を格納し、図9に示す動作を終了してもよい。
【0077】
図10は、図8の命令取り出し部13Cの動作の一例を示すフロー図である。図10に示すフローは、命令取り出し部13Cが命令キュー12から命令を取り出す毎に、命令を取り出す前に開始されてもよい。
【0078】
まず、ステップS30において、命令取り出し部13Cは、先読みキュー16において先頭ポインタで示される先頭のエントリの次のエントリである2番目のエントリに保持されているフラグを参照してもよい。なお、フラグが先読みキュー16の先頭のみに保持される場合、2番目のエントリにはフラグが存在しないため、図10に示す動作は実行されず、演算ユニットには、バブルが挿入されてもよい。
【0079】
次に、ステップS31において、命令取り出し部13Cは、ステップS30で参照したフラグが"0"の場合、ステップS32を実施し、フラグが"0"でない場合(すなわち、"1"の場合)、ステップS34を実施してもよい。
【0080】
ステップS32において、命令取り出し部13Cは、命令キュー12の先頭のエントリに保持されている命令を取り出して命令デコーダ14に供給してもよい。次に、ステップS33において、命令取り出し部13Cは、先読みキュー16の先頭のエントリからフラグを取り出し、図10に示す動作を終了してもよい。
【0081】
なお、ステップS32、S33の動作により、命令キュー12及び先読みキュー16の状態が互いに連動して更新されてもよい。また、命令キュー12に命令が格納される場合、先読みキュー16にもフラグが格納されるため、命令キュー12及び先読みキュー16の状態が互いに連動して更新されてもよい。
【0082】
ステップS34において、命令取り出し部13Cは、先読みキュー16において2番目のエントリから末尾エントリまでに保持されているフラグが全て"1"か否かを判定してもよい。命令取り出し部13Cは、2番目のエントリから末尾エントリまでのフラグが全て"1"の場合、ステップS37を実施してもよく、2番目のエントリから末尾エントリまでのフラグの少なくともいずれかが"0"の場合、ステップS35を実施してもよい。
【0083】
ステップS35において、命令取り出し部13Cは、先読みキュー16の2番目のエントリからフラグ"1"を連続して保持するエントリの数に"1"(すなわち、先頭エントリ)を加えた数の命令を命令キュー12から順次取り出し、命令デコーダ14に供給してもよい。
【0084】
なお、フラグ"1"は連続せずに1個のみでもよい。すなわち、2番目のエントリのフラグ"1"が先頭エントリのフラグ"0"と3番目のエントリのフラグ"0"に挟まれてもよい。換言すれば、命令取り出し部13Cは、フラグ"0"を保持する先頭エントリから、先頭エントリの次にフラグ"0"が現れるエントリの直前のエントリに保持されている命令を順次取り出し、命令デコーダ14に供給してもよい。
【0085】
次に、ステップS36において、命令取り出し部13Cは、命令キュー12から取り出した命令と同数のフラグを先読みキュー16から取り出して破棄し、図10に示す動作を終了してもよい。
【0086】
ステップS37において、命令取り出し部13Cは、命令キュー12及び先読みキュー16を操作することなく、ノーオペレーション命令NOPを命令デコーダ14に供給し、図10に示す動作を終了してもよい。この後、先読みキュー16の末尾エントリにフラグ"0"が格納されるまで、ステップS30、S31、S34、S37が繰り返し実施され、ノーオペレーション命令NOPが命令デコーダ14に順次供給されてもよい。
【0087】
図11は、図8の命令取り出し部13Cの動作の一例を示す説明図である。命令キュー12において、符号I0-I7は、エントリに格納される命令を示す。先読みキュー16において、"0"、"1"は、フラグの値を示す。命令キュー12及び先読みキュー16において、空欄のエントリは、空きであることを示す。図1では、番号の小さい命令を保持する命令キュー12のエントリと、対応する先読みキュー16のエントリとが先頭のエントリである。
【0088】
フラグ"1"を保持するエントリに対応して命令キュー12に保持される命令I2-I5は、直前の命令の演算による演算結果データRSLTを演算器22にバイパスさせる指示を含むバイパス演算命令である。
【0089】
状態(A)において、命令キュー12は、命令I0-I4を保持しており、命令I0-I4に対応して先読みキュー16が保持するフラグは、先頭のエントリから順に"0"、"0"、"1"、"1"、"1"である。
【0090】
命令取り出し部13Cは、2番目のエントリのフラグが"0"であるため、命令キュー12の先頭のエントリから命令I0を取り出して命令デコーダ14に供給してもよい。また、命令取り出し部13Cは、先読みキュー16の先頭のエントリからフラグ"0"を取り出して破棄してもよい。
【0091】
次に、状態(B)において、命令取り出し部13Cは、先読みキュー16の2番目のエントリから末尾のエントリまでのフラグが全て"1"であると判定してもよい。このため、命令取り出し部13Cは、命令キュー12から命令を取り出すことなく、ノーオペレーション命令NOPを命令デコーダ14に供給してもよい。
【0092】
次に、状態(C)において、先読みキュー16の2番目のエントリから末尾のエントリまでのフラグが全て"1"であるため、命令取り出し部13Cは、命令キュー12から命令を取り出すことなく、ノーオペレーション命令NOPを命令デコーダ14に供給してもよい。
【0093】
次に、状態(D)において、命令発生部11から命令キュー12に新たな命令I5が供給されてもよい。バブル判定部15は、演算器22による命令I5が、直前の命令I4の演算結果のバイパスデータを使用して実行されると判定してもよい。このため、バブル判定部15は、命令キュー12の末尾のエントリに対応する先読みキュー16のエントリにフラグ"1"を格納してもよい。
【0094】
命令取り出し部13Cは、状態(B)と同様に、先読みキュー16の2番目のエントリから末尾のエントリまでのフラグが全て"1"であるため、命令キュー12から命令を取り出すことなく、ノーオペレーション命令NOPを命令デコーダ14に供給してもよい。
【0095】
先読みキュー16の2番目のエントリから末尾のエントリまでのフラグが全て"1"である場合に、命令キュー12からの命令の取り出しを抑止することで、バイパスデータを使用して演算を実行する命令が命令キュー12から全て取り出されることを抑止することができる。
【0096】
これにより、例えば、第1の命令が命令キュー12から取り出された後に、第1の命令の演算結果のバイパスデータを使用して演算を実行する第2の命令が命令キュー12に格納されることを抑止することができる。この結果、第1の命令と第2の命令との間にバブルが挿入されることを抑止することができ、第2の命令の演算が正常に実行されないことを抑止することができる。
【0097】
次に、状態(E)において、命令発生部11から命令キュー12に新たな命令I6、I7が供給される。バブル判定部15は、演算器22による命令I6、I7が、それぞれ直前の命令I5、I6の演算結果のバイパスデータを使用せずに実行されると判定してもよい。このため、バブル判定部15は、命令I6、I7が保持される命令キュー12の2つのエントリに対応する先読みキュー16の2つのエントリにフラグ"0"を格納してもよい。
【0098】
命令取り出し部13Cは、先読みキュー16の2番目のフラグが"1"であり、先読みキュー16の3番目以降のフラグのいずれかが"0"であると判定してもよい。すなわち、命令取り出し部13Cは、2番目のエントリから連続して保持されたフラグ"1"の後にフラグ"0"が格納されたと判定してもよい。
【0099】
このため、命令取り出し部13Cは、先読みキュー16の先頭のエントリから最後のフラグ"1"を保持するエントリまでに対応して命令キュー12に保持された5個の命令I1-I5を取り出して、命令デコーダ14に順次供給してもよい。また、命令取り出し部13Cは、命令I1-I5を取り出した命令キュー12の5つのエントリに対応する先読みキュー16の5つのエントリからフラグを取り出して破棄してもよい。
【0100】
次に、状態(F)において、状態(A)と同様に、命令取り出し部13Cは、2番目のエントリのフラグが"0"であるため、命令キュー12の先頭のエントリから命令I6を取り出して命令デコーダ14に供給してもよい。また、命令取り出し部13Cは、先読みキュー16の先頭のエントリからフラグ"0"を取り出して破棄してもよい。
【0101】
命令I6が命令キュー12から取り出された後、命令キュー12には命令I7のみが保持され、先読みキュー16には命令I7に対応するフラグ"0"のみが保持してもよい。このとき、図10のステップS30において2番目のエントリのフラグが存在しないため、命令取り出し部13Cは、命令キュー12からの命令I7の取り出しを抑止してもよい。
【0102】
以上、この実施形態においても上述した実施形態と同様に、演算結果データRSLTのバイパスの有無を、命令に付加するバイパス情報によりプロセッサ100Cに指示することができる。これにより、プロセッサ100Cは、バイパス処理を正常に実施することができ、演算器22の使用効率を向上することができる。
【0103】
さらに、この実施形態では、バブル判定部15及び先読みキュー16により、命令取り出し部13Cは、直前の命令の演算結果データRSLTをバイパスさせて取り出しの対象命令の演算に使用するか否かを判定することができ、データを正常にバイパスさせて演算を実行することができる。すなわち、この実施形態では、図5に示したバブル挿入禁止情報NOINTRを命令に含ませることなく、データのバイパスを正常に実施してプロセッサ100Cの処理性能の低下を抑制することができる。
【0104】
また、命令取り出し部13Cは、先頭のエントリのフラグ"0"と末尾側のエントリのフラグ"0"とに挟まれる1以上のフラグ"1"がある場合、命令キュー12において先頭のエントリから最終のフラグ"1"に対応するエントリまでに保持された命令を取り出して命令デコーダ14に供給する。フラグ"0"に挟まれたフラグ"1"に対応する命令をまとめて命令デコーダ14に順次供給することで、図7で説明したような命令キュー12に保持される命令の量の管理を不要にすることができる。
【0105】
以上より、プロセッサ100Cを使用するユーザが命令により明示的にデータのバイパスを指示する場合に、データのバイパスを正常に実施してプロセッサ100Cの処理性能の低下を抑制することができる。
【0106】
図12は、図1に示したプロセッサ100が搭載される計算機のハードウェア構成の一例を示すブロック図である。図12では、計算機は、一例として、プロセッサ100と、主記憶装置30(メモリ)と、補助記憶装置40(メモリ)と、ネットワークインタフェース50と、デバイスインタフェース60と、を備え、これらがバス70を介して接続されたコンピュータ200として実現されてもよい。なお、コンピュータ200は、プロセッサ100の代わりに、図3に示したプロセッサ100A、図5に示したプロセッサ100Bまたは図8に示したプロセッサ100Cを有してもよい。
【0107】
図12のコンピュータ200は、各構成要素を一つ備えているが、同じ構成要素を複数備えていてもよい。また、図12では、1台のコンピュータ200が示されているが、ソフトウェアが複数台のコンピュータにインストールされて、当該複数台のコンピュータそれぞれがソフトウェアの同一の又は異なる一部の処理を実行してもよい。この場合、コンピュータそれぞれがネットワークインタフェース50等を介して通信して処理を実行する分散コンピューティングの形態であってもよい。つまり、1又は複数の記憶装置に記憶された命令を1台又は複数台のコンピュータ200が実行することで機能を実現するシステムが構成されてもよい。また、端末から送信された情報をクラウド上に設けられた1台又は複数台のコンピュータ200で処理し、この処理結果を端末に送信するような構成であってもよい。
【0108】
各種演算は、コンピュータ200に搭載される1又は複数のプロセッサ100を用いて、又はネットワークを介した複数台のコンピュータ200を用いて、並列処理で実行されてもよい。また、各種演算が、プロセッサ100内に複数ある演算コアに振り分けられて、並列処理で実行されてもよい。また、本開示の処理、手段等の一部又は全部は、ネットワークを介してコンピュータ200と通信可能なクラウド上に設けられたプロセッサ及び記憶装置の少なくとも一方により実現されてもよい。このように、前述した実施形態における各装置は、1台又は複数台のコンピュータによる並列コンピューティングの形態であってもよい。
【0109】
プロセッサ100は、少なくともコンピュータの制御又は演算のいずれかを行う電子回路(処理回路、Processing circuit、Processing circuitry、CPU、GPU、FPGA、ASIC等)であってもよい。また、プロセッサ100は、汎用プロセッサ、特定の演算を実行するために設計された専用の処理回路又は汎用プロセッサと専用の処理回路との両方を含む半導体装置のいずれであってもよい。また、プロセッサ100は、光回路を含むものであってもよいし、量子コンピューティングに基づく演算機能を含むものであってもよい。
【0110】
プロセッサ100は、コンピュータ200の内部構成の各装置等から入力されたデータやソフトウェアに基づいて演算処理を行ってもよく、演算結果や制御信号を各装置等に出力してもよい。プロセッサ100は、コンピュータ200のOS(Operating System)や、アプリケーション等を実行することにより、コンピュータ200を構成する各構成要素を制御してもよい。
【0111】
主記憶装置30は、プロセッサ100が実行する命令及び各種データ等を記憶してもよく、主記憶装置30に記憶された情報がプロセッサ100により読み出されてもよい。補助記憶装置40は、主記憶装置30以外の記憶装置である。なお、これらの記憶装置は、電子情報を格納可能な任意の電子部品を意味するものとし、半導体のメモリでもよい。半導体のメモリは、揮発性メモリ又は不揮発性メモリのいずれでもよい。コンピュータ200において各種データ等を保存するための記憶装置は、主記憶装置30又は補助記憶装置40により実現されてもよく、プロセッサ100に内蔵される内蔵メモリにより実現されてもよい。
【0112】
コンピュータ200が、少なくとも1つの記憶装置(メモリ)と、この少なくとも1つの記憶装置に接続(結合)される少なくとも1つのプロセッサ100で構成される場合、記憶装置1つに対して、少なくとも1つのプロセッサ100が接続されてもよい。また、1つのプロセッサ100に対して、少なくとも1つの記憶装置が接続されてもよい。また、複数のプロセッサ100のうち少なくとも1つのプロセッサ100が、複数の記憶装置のうち少なくとも1つの記憶装置に接続される構成を含んでもよい。また、複数台のコンピュータ200に含まれる記憶装置とプロセッサ100によって、この構成が実現されてもよい。さらに、記憶装置がプロセッサ100と一体になっている構成(例えば、L1キャッシュ、L2キャッシュを含むキャッシュメモリ)を含んでもよい。
【0113】
ネットワークインタフェース50は、無線又は有線により、通信ネットワーク300に接続するためのインタフェースである。ネットワークインタフェース50は、既存の通信規格に適合したもの等、適切なインタフェースを用いればよい。ネットワークインタフェース50により、通信ネットワーク300を介して接続された外部装置410と情報のやり取りが行われてもよい。なお、通信ネットワーク300は、WAN(Wide Area Network)、LAN(Local Area Network)、PAN(Personal Area Network)等の何れか又はそれらの組み合わせであってよく、コンピュータ200と外部装置410との間で情報のやり取りが行われるものであればよい。WANの一例としてインターネット等があり、LANの一例としてIEEE802.11やイーサネット(登録商標)等があり、PANの一例としてBluetooth(登録商標)やNFC(Near Field Communication)等がある。
【0114】
デバイスインタフェース60は、外部装置420と直接接続するUSB等のインタフェースである。
【0115】
外部装置410はコンピュータ200とネットワークを介して接続されている装置である。外部装置420はコンピュータ200と直接接続されている装置である。
【0116】
外部装置410又は外部装置420は、一例として、入力装置であってもよい。入力装置は、例えば、カメラ、マイクロフォン、モーションキャプチャ、各種センサ、キーボード、マウス、タッチパネル等のデバイスであり、取得した情報をコンピュータ200に与える。また、パーソナルコンピュータ、タブレット端末、スマートフォン等の入力部とメモリとプロセッサを備えるデバイスであってもよい。
【0117】
また、外部装置410又は外部装置420は、一例として、出力装置でもよい。出力装置は、例えば、LCD(Liquid Crystal Display)、有機EL(Electro Luminescence)パネル等の表示装置であってもよいし、音声等を出力するスピーカ等であってもよい。また、パーソナルコンピュータ、タブレット端末又はスマートフォン等の出力部とメモリとプロセッサを備えるデバイスであってもよい。
【0118】
また、外部装置410また外部装置420は、記憶装置(メモリ)であってもよい。例えば、外部装置410はネットワークストレージ等であってもよく、外部装置420はHDD等のストレージであってもよい。
【0119】
また、外部装置410又は外部装置420は、コンピュータ200の構成要素の一部の機能を有する装置でもよい。つまり、コンピュータ200は、外部装置410又は外部装置420に処理結果の一部又は全部を送信してもよいし、外部装置410又は外部装置420から処理結果の一部又は全部を受信してもよい。
【0120】
本明細書(請求項を含む)において、「a、b及びcの少なくとも1つ(一方)」又は「a、b又はcの少なくとも1つ(一方)」の表現(同様な表現を含む)が用いられる場合は、a、b、c、a-b、a-c、b-c又はa-b-cのいずれかを含む。また、a-a、a-b-b、a-a-b-b-c-c等のように、いずれかの要素について複数のインスタンスを含んでもよい。さらに、a-b-c-dのようにdを有する等、列挙された要素(a、b及びc)以外の他の要素を加えることも含む。
【0121】
本明細書(請求項を含む)において、「データを入力として/を用いて/データに基づいて/に従って/に応じて」等の表現(同様な表現を含む)が用いられる場合は、特に断りがない場合、データそのものを用いる場合や、データに何らかの処理を行ったもの(例えば、ノイズ加算したもの、正規化したもの、データから抽出した特徴量、データの中間表現等)を用いる場合を含む。また、「データを入力として/を用いて/データに基づいて/に従って/に応じて」何らかの結果が得られる旨が記載されている場合(同様な表現を含む)、特に断りがない場合、当該データのみに基づいて当該結果が得られる場合や、当該データ以外の他のデータ、要因、条件及び/又は状態にも影響を受けて当該結果が得られる場合を含む。また、「データを出力する」旨が記載されている場合(同様な表現を含む)、特に断りがない場合、データそのものを出力として用いる場合や、データに何らかの処理を行ったもの(例えば、ノイズ加算したもの、正規化したもの、データから抽出した特徴量、各種データの中間表現等)を出力として用いる場合を含む。
【0122】
本明細書(請求項を含む)において、「接続される(connected)」及び「結合される(coupled)」との用語が用いられる場合は、直接的な接続/結合、間接的な接続/結合、電気的(electrically)な接続/結合、通信的(communicatively)な接続/結合、機能的(operatively)な接続/結合、物理的(physically)な接続/結合等のいずれをも含む非限定的な用語として意図される。当該用語は、当該用語が用いられた文脈に応じて適宜解釈されるべきであるが、意図的に或いは当然に排除されるのではない接続/結合形態は、当該用語に含まれるものして非限定的に解釈されるべきである。
【0123】
本明細書(請求項を含む)において、「AがBするよう構成される(A configured to B)」との表現が用いられる場合は、要素Aの物理的構造が、動作Bを実行可能な構成を有するとともに、要素Aの恒常的(permanent)又は一時的(temporary)な設定(setting/configuration)が、動作Bを実際に実行するように設定(configured/set)されていることを含んでよい。例えば、要素Aが汎用プロセッサである場合、当該プロセッサが動作Bを実行可能なハードウェア構成を有するとともに、恒常的(permanent)又は一時的(temporary)なプログラム(命令)の設定により、動作Bを実際に実行するように設定(configured)されていればよい。また、要素Aが専用プロセッサ、専用演算回路等である場合、制御用命令及びデータが実際に付属しているか否かとは無関係に、当該プロセッサの回路的構造等が動作Bを実際に実行するように構築(implemented)されていればよい。
【0124】
本明細書(請求項を含む)において、含有又は所有を意味する用語(例えば、「含む(comprising/including)」、「有する(having)」等)が用いられる場合は、当該用語の目的語により示される対象物以外の物を含有又は所有する場合を含む、open-endedな用語として意図される。これらの含有又は所有を意味する用語の目的語が数量を指定しない又は単数を示唆する表現(a又はanを冠詞とする表現)である場合は、当該表現は特定の数に限定されないものとして解釈されるべきである。
【0125】
本明細書(請求項を含む)において、ある箇所において「1つ又は複数(one or more)」、「少なくとも1つ(at least one)」等の表現が用いられ、他の箇所において数量を指定しない又は単数を示唆する表現(a又はanを冠詞とする表現)が用いられているとしても、後者の表現が「1つ」を意味することを意図しない。一般に、数量を指定しない又は単数を示唆する表現(a又はanを冠詞とする表現)は、必ずしも特定の数に限定されないものとして解釈されるべきである。
【0126】
本明細書において、ある実施形態の有する特定の構成について特定の効果(advantage/result)が得られる旨が記載されている場合、別段の理由がない限り、当該構成を有する他の1つ又は複数の実施形態についても当該効果が得られると理解されるべきである。但し、当該効果の有無は、一般に種々の要因、条件及び/又は状態に依存し、当該構成により必ず当該効果が得られるものではないと理解されるべきである。当該効果は、種々の要因、条件及び/又は状態が満たされたときに実施形態に記載の当該構成により得られるものに過ぎず、当該構成又は類似の構成を規定したクレームに係る発明において、当該効果が必ずしも得られるものではない。
【0127】
本明細書(請求項を含む)において、複数のハードウェアが所定の処理を行う場合、各ハードウェアが協働して所定の処理を行ってもよいし、一部のハードウェアが所定の処理の全てを行ってもよい。また、一部のハードウェアが所定の処理の一部を行い、別のハードウェアが所定の処理の残りを行ってもよい。本明細書(請求項を含む)において、「1又は複数のハードウェアが第1の処理を行い、前記1又は複数のハードウェアが第2の処理を行う」等の表現(同様な表現を含む)が用いられている場合、第1の処理を行うハードウェアと第2の処理を行うハードウェアは同じものであってもよいし、異なるものであってもよい。つまり、第1の処理を行うハードウェア及び第2の処理を行うハードウェアが、前記1又は複数のハードウェアに含まれていればよい。なお、ハードウェアは、電子回路、電子回路を含む装置等を含んでよい。
【0128】
本明細書(請求項を含む)において、複数の記憶装置(メモリ)がデータの記憶を行う場合、複数の記憶装置のうち個々の記憶装置は、データの一部のみを記憶してもよいし、データの全体を記憶してもよい。また、複数の記憶装置のうち一部の記憶装置がデータを記憶する構成を含んでもよい。
【0129】
以上、本開示の実施形態について詳述したが、本開示は上記した個々の実施形態に限定されるものではない。特許請求の範囲に規定された内容及びその均等物から導き出される本発明の概念的な思想と趣旨を逸脱しない範囲において、種々の追加、変更、置き換え、部分的削除等が可能である。例えば、前述した実施形態において、数値又は数式を説明に用いている場合、これらは例示的な目的で示されたものであり、本開示の範囲を限定するものではない。また、実施形態で示した各動作の順序も例示的なものであり、本開示の範囲を限定するものではない。
【符号の説明】
【0130】
10 命令供給部
11 命令発生部
12 命令キュー
13、13C 命令取り出し部
14、14A 命令デコーダ
15 バブル判定部
16 先読みキュー
20 演算ユニット
21 レジスタファイル
22 演算器
100、100A、100B、100C プロセッサ
CNT0、CNT1、CNT2 制御信号
LT ラッチ
REG レジスタ制御信号
RSLT 演算結果データ
SEL0、SEL1、SEL2 セレクタ
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12