特許拒絶査定不服審判
2017-000761
プロアクティブ分岐ターゲットアドレスキャッシュ管理のための方法及び装置
- 審判番号
- 2017-000761
- 法域
- 特許
- 審判種別
- 拒絶査定不服審判(拒絶査定不服の審決)
- 出願番号
- 特願2015-041619外部サイト(J-PlatPat)へ移動します
- 請求日
- 2017年01月19日
- 審決日
- 2017年10月31日
- 公報発行日
- 2018年05月25日
- 結論
- 請求不成立
- 当事者
- 【請求人】クゥアルコム・インコーポレイテッド
- 【請求人代理人】蔵田 昌俊
- 【請求人代理人】福原 淑弘
- 【請求人代理人】井関 守三
- 【請求人代理人】岡田 貴志
- 分類
- P18 .121-Z (G06F)
- 根拠条文(結論部分から自動抽出・参考)
- 特許法29条2項
- 条文(本文から自動抽出・参考)
- 特許法第29条第2項
- データ出所
- 審決公報(SGML)
事件の表示
特願2015- 41619「プロアクティブ分岐ターゲットアドレスキャッシュ管理のための方法及び装置」拒絶査定不服審判事件〔平成27年 8月 6日出願公開、特開2015-144001〕について、次のとおり審決する。
結論
【結 論】
本件審判の請求は、成り立たない。
理由
【理 由】
1.手続の経緯
本願は,2007年6月28日(パリ条約による優先権主張外国庁受理2006年6月29日(以下,「優先日」という。),米国)を国際出願日とする特願2009-518553号の一部を平成25年6月5日に新たな特許出願とした特願2013-119018号の一部を平成27年3月3日に新たな特許出願としたものであって,平成27年3月24日付けで翻訳文,上申書,及び審査請求書が提出されると共に手続補正がなされ,平成27年12月24日付けの拒絶理由通知に対して平成28年4月11日付けで意見書が提出されると共に手続補正がなされたが,平成28年9月13日付けで拒絶査定がなされ,これに対して平成29年1月19日に拒絶査定不服審判の請求がなされたものである。
2.本願発明
本願の請求項1に係る発明(以下,「本願発明」という。)は,平成28年4月11日付けの手続補正により補正された特許請求の範囲の請求項1に記載された事項により特定される次のとおりのものである。
「 【請求項1】
マルチプルステージ分岐予測システムであって,
分岐命令に関連付けられた分岐ターゲットアドレスキャッシュ(BTAC)エントリを格納するように構成されたBTACと,
分岐予測子回路とを備え,前記分岐予測子回路は,
予測方向カウンタと,ここで,前記予測方向カウンタは,前記分岐命令に関連付けられる,
履歴レジスタ回路と,ここで,前記履歴レジスタ回路は,前記分岐命令の分岐方向履歴を格納する,
前記BTACエントリに基づいて前記分岐命令の第1の方向を予測し,ここで,前記第1の方向は,後の命令を命令プリフェッチユニットに推測的にプリフェッチするために用いられ,
前記予測方向カウンタに基づいて前記分岐命令の第2の方向を予測し,ここで,前記第1の方向と矛盾する前記第2の方向に応答して,前記後の命令は,前記命令プリフェッチユニットからフラッシュされ,
前記予測方向カウンタの値を修正し,ここで,前記予測方向カウンタの前記修正された値は,前記分岐命令の実際の結果に基づいており,前記履歴レジスタ回路に格納されている情報に基づいていない,
前記予測方向カウンタの前記修正された値に基づいて,前記BTACエントリを管理するために管理信号を生成する
ように構成された論理回路と
を備えるシステム。」
3.引用例
(1)引用例1
原査定の拒絶理由で引用された,本願の優先日前に頒布された刊行物である,特開平7-262006号公報(1995年10月13日出願公開。以下,「引用例1」という。)には,図面とともに,以下の事項が記載されている。(下線は当審において付したものである。)
A 「【0001】
【産業上の利用分野】本発明は一般的にはデジタル計算システムに関し,かつより特定的には分岐予測(branch prediction)能力を備えたデータプロセッサに関する。」
B 「【0004】分岐ターゲットアドレスキャッシュ(Branch target address cache:BTAC)は分岐予測を行なうために使用される装置である。BTACはデータプロセッサが最近分岐したアドレスを含む。これらの「分岐ターゲット(branch targets)」はそれらを発生した分岐命令のアドレスによって指示される(indexed)。データプロセッサはいったんそれが次に実行すべきいずれかの命令のアドレスを決定するとBTACをサーチする。もし該アドレスがBTAC内の有効なエントリに対応すれば,データプロセッサはそれが再び分岐を行なうことを推測しかつ自動的にその対応するキャッシュ記憶された(cached)ターゲットアドレスへと分岐する。もし前記アドレスがBTAC内のいずれの有効なエントリにも対応しなければ,データプロセッサはその次の命令のアドレスをいずれか他の方法で決定することになる。
【0005】
【発明が解決しようとする課題】BTACを導入したデータプロセッサはそのBTACを該データプロセッサが各々の分岐命令を実行した後に更新しかつターゲットアドレスを決定する。知られたデータプロセッサは次に該分岐命令のアドレスおよびそのターゲットアドレスをBTACに記憶する。いくつかのデータプロセッサは分岐が行なわれた分岐命令のアドレス-ターゲットアドレス対のみを記憶する。分岐が行なわれないものはBTACに記憶されないかあるいはもしそれらが既にBTACに記憶されていれば削除される。この方法は分岐が行なわれない(not-taken)または引き続く(sequential)アドレスが容易に決定できるからBTACのサイズを最小にする。使用される置き換えアルゴリズムにかかわらず,知られたデータプロセッサはそれらのBTACを分岐命令の実行結果によって更新する。」
C 「【0010】
【実施例】図1は,本発明にしたがって構築されたデータプロセッサ10のブロック図を示す。データプロセッサ10は各々の分岐命令が分岐が行なわれるかあるいは行なわれないかを予測することによってその性能を改善するデータプロセッサである。データプロセッサ10は次に命令を予測されたフェッチアドレスでフェッチし,かつこれらの命令の実行を開始する。後に,データプロセッサ10は前記分岐が行なわれるべきであったかあるいは行なわれるべきでなかったかを解明し(resolves)かつもしそれが前の時間に誤って予測した場合には訂正処置を行なう。データプロセッサ10は複数組のフェッチアドレス-ターゲットアドレス対(fetch address-target address pairs)を記憶するために分岐ターゲットアドレスキャッシュ(“BTAC”)を導入する。データプロセッサ10はそれが新しいフェッチアドレスを発生するたびごとにBTACをサーチする。もしフェッチアドレスがBTACに存在すれば,データプロセッサは直ちに記憶されたフェッチアドレスに関連するターゲットアドレスにおける命令のフェッチを開始することになる。各々の分岐命令を解明した後,データプロセッサ10は前記特定の分岐命令によって指示される(indexed)フェッチアドレス-ターゲットアドレス対を加えるかまたは削除する。開示された発明によれば,データプロセッサ10はそれが次に分岐命令を実行するときに同じ分岐を行なうか否かを予測する。もしデータプロセッサ10がそれが次に命令を実行するときに分岐を行なうことを予測すれば,データプロセッサ10は該フェッチアドレス-ターゲットアドレス対をBTACに加えることになる。もしデータプロセッサ10がそれが次に命令を実行するときに分岐を行なわないものと予測すれば,データプロセッサ10は該フェッチアドレス-ターゲットアドレス対をBTACから削除することになる。BTACに対しフェッチアドレス-ターゲットアドレス対を加えまたは削除する決定は単に分岐が最終的に行なわれるものと解明されたかあるいは行なわれないものと解明されたかによるものではない。この方法は各々の分岐予測の精度を改善し,命令ストリームにおける「バブル(bubbles)」の数を低減し,かつ一般にデータプロセッサ10の性能を改善する。
【0011】
(途中省略)
【0012】開示された分岐予測方法を除くデータプロセッサ10の動作は技術的に知られている。一般に,分岐ユニット20はあるデータレジスタの内容および命令自体が与えらればプログラムされた命令のどのシーケンスが適切であるかを判定する。分岐ユニット20が分岐命令を予測するために使用する2つのそのようなレジスタはカウンタレジスタ37および条件レジスタ39である。分岐ユニット20は図4および図5に関して後に説明する。命令キャッシュ14はプログラムされた命令のこのシーケンスをシーケンサ18に提供する。もし命令キャッシュ14が必要な命令を含んでいなければ,それはそのような命令をデータプロセッサ10の外部のメインメモリシステム(図示せず)からフェッチする。(以下に説明するように,シーケンサユニット18は分岐ユニット20が最終的に特定の分岐命令を解明する前に各々の分岐命令に対しいくつかの予測を行なう。)」
D 「【0019】フェッチ段階では,命令キャッシュ14は前のクロックサイクルにおいて分岐ユニット20またはシーケンサユニット18によって識別されたメモリアドレスで始まる1つまたはそれ以上の命令を読み出す。このメモリアドレスはフェッチアドレスと称される。シーケンサユニット18はフェッチパイプライン段階で第1の分岐予測を行なう。シーケンサユニット18はBTACを使用して数多くの最近の分岐命令に対するフェッチアドレスおよびそれらの対応するターゲットアドレスの多数の対を記憶する。シーケンサユニット18はもしその入力フェッチアドレスが特定のターゲットアドレスのフェッチアドレスに対応すればBTACに格納された特定のターゲットアドレスにおける命令をフェッチする。
【0020】デコード段階においては,命令はシーケンサユニット18によって引き続く段階で使用するために数多くの制御信号にデコードされる。シーケンサユニット18はデコードパイプラインステージにおいて第2の分岐予測を行なう。シーケンサユニット18は1つまたはそれ以上の単純な分岐命令のためのフェッチアドレスを発生することができる。シーケンサユニット18は分岐ヒストリテーブル(“BHT”)に各々の最近遭遇した分岐命令に対する履歴状態(historystate)を維持する。各々の分岐命令の状態はシーケンサユニット18が分岐を行なうと予測するかあるいは行なわないと予測するかを決定する。」
E 「【0031】BHT50は,512の最近遭遇した分岐命令に対する2ビットの分岐履歴状態を維持するダイレクトマップ・ランダムアクセスメモリ(direct mapped random access memory:RAM)アレイである。各々のエントリは4つの可能な状態をエンコードするために2ビットを含む。BHT50はIFAR44からの前記フェッチアドレスビットのサブセット(部分集合)によって指示される(indexed)。現在のフェッチアドレスがマップされるエントリの最新の値がBHT50から読み出されかつデコードバッファ52にラッチされる。分岐ユニット20は後に説明されるように実行段階においてBHT50の各々のエントリを更新する。BHT50はこれらの実行段階の動作および上に述べたフェッチ段階の動作を容易に可能とするため1つの読み出しポートおよび1つの書き込みポートを有する。
【0032】データプロセッサ10は条件レジスタ39における1つまたはそれ以上のビットの値に基づく分岐命令を予測するためのダイナミック分岐予測方法を使用する。パワーPCアーキテクチャにおいては,他の命令は条件レジスタ39のビットを分岐命令を実行するための前置き(prelude)として修正することができる。ダイナミック分岐予測方法によれば,分岐命令は同じ分岐命令の前に生じたものが分岐が行なわれた場合または行なわれなかった場合に,それぞれ,分岐が行なわれあるいは行なわれない可能性が高くなる。したがって,各々の分岐命令の履歴を維持することにより分岐命令が分岐が行なわれるかあるいは行なわれないかを予測することが可能になる。特定の分岐命令の状態は該特定の分岐命令のデコード段階の間に分岐が行なわれるものと予測されるかあるいは行なわれないものと予測されるかを決定する。示された実施例に対する分岐状態モデルは4状態モデル(four-state model)であり,すなわち強い分岐なし(STRONG-NOT-TAKEN),弱い分岐なし(WEAK-NOT-TAKEN),弱い分岐あり(WEAK-TAKEN)および強い分岐あり(STRONG-TAKEN)である。シーケンサ18はもし命令の分岐状態が前記強い分岐なしまたは弱い分岐なしに対応すれば分岐が行なわれないことを予測する。シーケンサ18はもしその命令の分岐状態が強い分岐ありまたは弱い分岐ありに対応すれば分岐が行われることを予測する。分岐ユニット20はBHT50における各々のエントリの状態を更新する。分岐ユニット20はBHTエントリの現在の状態および実行している分岐の方向に関する情報を使用して該実行している分岐命令に対応するBHTエントリの次の状態を計算する。もしシーケンサ18が分岐命令を誤って予測すれば,分岐ユニット20はBHT50の対応するエントリを1つの強い状態から同じ弱い状態へあるいは1つの弱い状態から反対の弱い状態へと更新する。逆に,シーケンサユニット18が分岐命令を正しく予測すれば,分岐ユニット20はBHT50における対応するエントリを1つの弱い状態から同じ強い状態へとまたは1つの強い状態から同じ強い状態へと更新することになる。」
F 「【0039】アドレスセレクタ42はそれがマルチプレクサ40に対し6個までのアドレスの内のどれをIFAR44に出力させるべきかを決定する。マルチプレクサ40はBTAC48から制御信号HIT/*MISSを,デコード予測ユニット54から制御信号デコード訂正(DECODE CORRECTION)を,ディスパッチユニット60から制御信号ディスパッチ訂正(DISPATCH CORRECTION)を,分岐ユニット20から制御信号実行訂正(EXECUTION CORRECTION)を,そして完了ユニット62から制御信号割込み(INTERRUPT)を受信する。各々の制御信号の発生源(source)はその制御信号をもし該発生源が前のパイプラインステージの間に発生されたフェッチアドレスと異なるフェッチアドレス,すなわち訂正されたフェッチアドレス,を発生すればその制御信号を肯定する。一般に,パイプラインの各ステージは分岐を解明するかあるいは前の段階(単数または複数)よりも統計的により正確な分岐方向の予測を行なう。したがって,パイプラインのより後の段階は訂正についてより前の段階よりも優先度を有する。フェッチ段階の場合には,BTAC48の出力はシーケンシャルアドレス計算機46の出力よりも優先度を持つ。各々の引き続くフェッチアドレス訂正はパイプラインにおける対応する分岐命令に続く全ての命令を無効にする。例えば,もし分岐ユニット20が前のフェッチアドレスを訂正すれば,デコード段階のフェッチアドレス(分岐命令の直後の)デコード段階のフェッチアドレスは不適切なものである。この場合,デコード段階のフェッチアドレスはフェッチされるべきではなかった分岐命令に基いている。」
G 「【0046】分岐ユニット20は次にそれが実行している分岐命令が条件分岐命令であるかを判定する,ステップ78。前に述べたように,条件分岐命令は条件レジスタ39の1つまたはそれ以上のビットに依存する。条件分岐命令は該条件分岐命令のフェッチアドレスに対応するBHT50に格納された値に依存して分岐を行なうかあるいは行なわないかが予測される。分岐ユニット20が実行している分岐命令が条件分岐命令であれば,分岐ユニット20はBHT50のための新しい分岐状態を計算する,ステップ80。分岐ユニット20はまたステップ80においてこの新しい分岐状態をBHT50に書き込む。分岐ユニット20は前記新しい分岐状態が強い分岐(strong-taken)または弱い分岐(weak-taken)であるかを判定する,ステップ82。条件分岐命令はこれら両方の場合において次にデータプロセッサ10が条件分岐命令を実行する時に分岐を行なうものと予測されることになる。したがって,分岐ユニット20は該分岐命令のフェッチアドレスおよびそれがステップ68において計算したターゲットアドレスをBTAC48に加える。強い分岐なし(strong-not-taken)または弱い分岐なし(weak-not-taken)に対応する分岐状態を有する条件分岐命令はデータプロセッサ10が次に該条件分岐命令を実行する時に分岐を行なわないものと予測されることになる。したがって,分岐ユニット20は該分岐命令のフェッチアドレスおよびそれがステップ68において計算したターゲットアドレスをBTAC48から削除する。」
H 「【図1】
」
I 「【図3】
」
ここで,上記引用例1に記載されている事項について検討する。
ア 上記Aの「本発明は一般的にはデジタル計算システムに関し,かつより特定的には分岐予測(branch prediction)能力を備えたデータプロセッサに関する。」との記載から,
引用例1には,“分岐予測能力を備えたデータプロセッサ”が記載されていると認められる。
イ 上記Bの段落【0004】の「分岐ターゲットアドレスキャッシュ(Branch target address cache:BTAC)は分岐予測を行なうために使用される装置である。BTACはデータプロセッサが最近分岐したアドレスを含む。これらの「分岐ターゲット(branch targets)」はそれらを発生した分岐命令のアドレスによって指示される(indexed)。データプロセッサはいったんそれが次に実行すべきいずれかの命令のアドレスを決定するとBTACをサーチする。もし該アドレスがBTAC内の有効なエントリに対応すれば,データプロセッサはそれが再び分岐を行なうことを推測しかつ自動的にその対応するキャッシュ記憶された(cached)ターゲットアドレスへと分岐する。」との記載,同じく上記Bの段落【0005】の「BTACを導入したデータプロセッサはそのBTACを該データプロセッサが各々の分岐命令を実行した後に更新しかつターゲットアドレスを決定する。知られたデータプロセッサは次に該分岐命令のアドレスおよびそのターゲットアドレスをBTACに記憶する。」との記載,及び上記Cの「データプロセッサ10は複数組のフェッチアドレス-ターゲットアドレス対(fetch address-target address pairs)を記憶するために分岐ターゲットアドレスキャッシュ(“BTAC”)を導入する。」との記載から,
データプロセッサが,分岐ターゲットアドレスキャッシュ(BTAC)を備えていることが読み取れ,また,当該BTACは,エントリとして,分岐命令のアドレスとターゲットアドレスの対を記憶していることが読み取れるから,
引用例1には,“データプロセッサは,エントリとして分岐命令のアドレスとターゲットアドレスの対を記憶した分岐ターゲットアドレスキャッシュ(BTAC)を備え”ていることが記載されていると認められる。
ウ 上記Hで引用した図1の記載から,データプロセッサ10は,シーケンサユニット18を備えていることが読み取れ,
上記Dの段落【0020】の「シーケンサユニット18は分岐ヒストリテーブル(“BHT”)に各々の最近遭遇した分岐命令に対する履歴状態(historystate)を維持する。」との記載から,
シーケンサユニットは,最近遭遇した分岐命令に対する履歴状態を維持する分岐ヒストリテーブル(“BHT”)を備えることが読み取れるから,
引用例1には,“データプロセッサは,最近遭遇した分岐命令に対する履歴状態を維持する分岐ヒストリテーブル(“BHT”)を備えたシーケンサユニットを備え”ることが記載されていると認められる。
また,上記Eの段落【0031】の「BHT50は,512の最近遭遇した分岐命令に対する2ビットの分岐履歴状態を維持するダイレクトマップ・ランダムアクセスメモリ(direct mapped random access memory:RAM)アレイである。各々のエントリは4つの可能な状態をエンコードするために2ビットを含む。」との記載,及び同じく上記Eの段落【0032】の「示された実施例に対する分岐状態モデルは4状態モデル(four-state model)であり,すなわち強い分岐なし(STRONG-NOT-TAKEN),弱い分岐なし(WEAK-NOT-TAKEN),弱い分岐あり(WEAK-TAKEN)および強い分岐あり(STRONG-TAKEN)である。」との記載から,BHTは,最近遭遇した分岐命令に対する2ビットの分岐履歴状態,すなわち,強い分岐なし,弱い分岐なし,弱い分岐ありおよび強い分岐ありの4状態を維持することが読み取れるから,
引用例1には,“データプロセッサは,最近遭遇した分岐命令に対する2ビットの分岐履歴状態,すなわち,強い分岐なし,弱い分岐なし,弱い分岐ありおよび強い分岐ありの4状態を維持する分岐ヒストリテーブル(“BHT”)を備えたシーケンサユニットを備え”ることが記載されていると認められる。
エ 上記Cの段落【0010】の「データプロセッサ10はそれが新しいフェッチアドレスを発生するたびごとにBTACをサーチする。もしフェッチアドレスがBTACに存在すれば,データプロセッサは直ちに記憶されたフェッチアドレスに関連するターゲットアドレスにおける命令のフェッチを開始することになる。」との記載,及び上記Dの段落【0019】の「シーケンサユニット18はフェッチパイプライン段階で第1の分岐予測を行なう。シーケンサユニット18はBTACを使用して数多くの最近の分岐命令に対するフェッチアドレスおよびそれらの対応するターゲットアドレスの多数の対を記憶する。シーケンサユニット18はもしその入力フェッチアドレスが特定のターゲットアドレスのフェッチアドレスに対応すればBTACに格納された特定のターゲットアドレスにおける命令をフェッチする。」との記載から,
シーケンサユニットは,フェッチパイプライン段階で第1の分岐予測を行なうこと,また,当該分岐予測においては,新しいフェッチアドレスを発生するたびごとにBTACをサーチし,もしフェッチアドレスがBTACに存在すれば,当該フェッチアドレスに関連するターゲットアドレスにおける命令をフェッチすることが読み取れる。
また,上記Cの段落【0012】の「命令キャッシュ14はプログラムされた命令のこのシーケンスをシーケンサ18に提供する。」との記載,上記Hで引用した図1の「シーケンサユニット18 FIG.3」との記載,及び上記Iで引用した図3の「命令キャッシュ14からの命令」との記載から,図3で示されるシーケンサユニット18のデコードバッファ52には,「命令キャッシュ14からの命令」が入力されていることが読み取れ,上記Dの段落【0019】の「フェッチ段階では,命令キャッシュ14は前のクロックサイクルにおいて分岐ユニット20またはシーケンサユニット18によって識別されたメモリアドレスで始まる1つまたはそれ以上の命令を読み出す。このメモリアドレスはフェッチアドレスと称される。」との記載も併せると,フェッチ段階では,命令キャッシュ14から命令がフェッチされることが読み取れる。
してみれば,引用例1には,“シーケンサユニットは,フェッチパイプライン段階で,新しいフェッチアドレスを発生するたびごとにBTACをサーチして第1の分岐予測を行い,もしフェッチアドレスがBTACに存在すれば,当該フェッチアドレスに関連するターゲットアドレスにおける命令を命令キャッシュからフェッチ”することが記載されていると認められる。
オ 上記Dの段落【0020】の「シーケンサユニット18はデコードパイプラインステージにおいて第2の分岐予測を行なう。シーケンサユニット18は1つまたはそれ以上の単純な分岐命令のためのフェッチアドレスを発生することができる。シーケンサユニット18は分岐ヒストリテーブル(“BHT”)に各々の最近遭遇した分岐命令に対する履歴状態(historystate)を維持する。各々の分岐命令の状態はシーケンサユニット18が分岐を行なうと予測するかあるいは行なわないと予測するかを決定する。」との記載から,
シーケンサユニットはデコードパイプラインステージにおいて第2の分岐予測を行なうこと,また,当該分岐予測において,シーケンサユニットは,分岐ヒストリテーブル(“BHT”)に維持された分岐命令に対する履歴状態に基づいて,分岐を行なうと予測するかあるいは分岐を行なわないと予測するかを決定することが読み取れるから,
引用例1には,“シーケンサユニットは,デコードパイプラインステージにおいて,分岐ヒストリテーブル(“BHT”)に維持された分岐命令に対する履歴状態に基づいて第2の分岐予測を行い,分岐を行うと予測するかあるいは分岐を行わないと予測するかを決定”することが記載されていると認められる。
カ 上記Fの「各々の制御信号の発生源(source)はその制御信号をもし該発生源が前のパイプラインステージの間に発生されたフェッチアドレスと異なるフェッチアドレス,すなわち訂正されたフェッチアドレス,を発生すればその制御信号を肯定する。一般に,パイプラインの各ステージは分岐を解明するかあるいは前の段階(単数または複数)よりも統計的により正確な分岐方向の予測を行なう。したがって,パイプラインのより後の段階は訂正についてより前の段階よりも優先度を有する。・・・各々の引き続くフェッチアドレス訂正はパイプラインにおける対応する分岐命令に続く全ての命令を無効にする。」との記載から,
パイプラインの各ステージにおける分岐予測は,前の段階より後の段階の方がより正確であるため,パイプラインのより後の段階におけるフェッチアドレスの訂正は,パイプラインにおける対応する分岐命令に続く全ての命令を無効にすることが読み取れるから,
引用例1には,“パイプラインのより後の段階におけるフェッチアドレスの訂正により,パイプラインにおける対応する分岐命令に続く全ての命令が無効にされ”ることが記載されていると認められる。
キ 上記Hで引用した図1の記載から,データプロセッサ10は,分岐ユニット20を備えていることが読み取れる。
また,上記Eの段落【0031】の「分岐ユニット20は後に説明されるように実行段階においてBHT50の各々のエントリを更新する。」との記載,同じく上記Eの段落【0032】の「分岐ユニット20はBHT50における各々のエントリの状態を更新する。分岐ユニット20はBHTエントリの現在の状態および実行している分岐の方向に関する情報を使用して該実行している分岐命令に対応するBHTエントリの次の状態を計算する。もしシーケンサ18が分岐命令を誤って予測すれば,分岐ユニット20はBHT50の対応するエントリを1つの強い状態から同じ弱い状態へあるいは1つの弱い状態から反対の弱い状態へと更新する。逆に,シーケンサユニット18が分岐命令を正しく予測すれば,分岐ユニット20はBHT50における対応するエントリを1つの弱い状態から同じ強い状態へとまたは1つの強い状態から同じ強い状態へと更新することになる。」との記載,及び上記Gの「分岐ユニット20は次にそれが実行している分岐命令が条件分岐命令であるかを判定する,ステップ78。・・・分岐ユニット20が実行している分岐命令が条件分岐命令であれば,分岐ユニット20はBHT50のための新しい分岐状態を計算する,ステップ80。分岐ユニット20はまたステップ80においてこの新しい分岐状態をBHT50に書き込む。」との記載から,
分岐ユニットは,実行段階においてBHTの各々のエントリを更新すること,また,分岐ユニットは,BHTにおける各々のエントリの状態を,BHTエントリの現在の状態および実行している分岐の方向に関する情報を使用して更新すること,更には,もしシーケンサ18が分岐命令を誤って予測すれば,分岐ユニット20はBHT50の対応するエントリを1つの強い状態から同じ弱い状態へあるいは1つの弱い状態から反対の弱い状態へと更新し,逆に,シーケンサユニット18が分岐命令を正しく予測すれば,分岐ユニット20はBHT50における対応するエントリを1つの弱い状態から同じ強い状態へとまたは1つの強い状態から同じ強い状態へと更新することが読み取れるから,
引用例1には,“データプロセッサは,実行段階において,BHTにおける各々のエントリの状態を,BHTエントリの現在の状態および実行している分岐の方向に関する情報を使用して,もしシーケンサが分岐命令を誤って予測すれば,BHTの対応するエントリを1つの強い状態から同じ弱い状態へあるいは1つの弱い状態から反対の弱い状態へと更新し,逆に,シーケンサユニットが分岐命令を正しく予測すれば,BHTにおける対応するエントリを1つの弱い状態から同じ強い状態へとまたは1つの強い状態から同じ強い状態へと更新する分岐ユニットを備え”ることが記載されていると認められる。
ク 上記Gの「分岐ユニット20は次にそれが実行している分岐命令が条件分岐命令であるかを判定する,ステップ78。・・・分岐ユニット20が実行している分岐命令が条件分岐命令であれば,分岐ユニット20はBHT50のための新しい分岐状態を計算する,ステップ80。分岐ユニット20はまたステップ80においてこの新しい分岐状態をBHT50に書き込む。分岐ユニット20は前記新しい分岐状態が強い分岐(strong-taken)または弱い分岐(weak-taken)であるかを判定する,ステップ82。条件分岐命令はこれら両方の場合において次にデータプロセッサ10が条件分岐命令を実行する時に分岐を行なうものと予測されることになる。したがって,分岐ユニット20は該分岐命令のフェッチアドレスおよびそれがステップ68において計算したターゲットアドレスをBTAC48に加える。強い分岐なし(strong-not-taken)または弱い分岐なし(weak-not-taken)に対応する分岐状態を有する条件分岐命令はデータプロセッサ10が次に該条件分岐命令を実行する時に分岐を行なわないものと予測されることになる。したがって,分岐ユニット20は該分岐命令のフェッチアドレスおよびそれがステップ68において計算したターゲットアドレスをBTAC48から削除する。」との記載から,
分岐ユニットは,BHTに書き込まれた新しい分岐状態が,強い分岐または弱い分岐である場合には,次にデータプロセッサが当該分岐命令を実行する時に分岐を行なうものと予測して,当該分岐命令のフェッチアドレスおよびターゲットアドレスをBTACに加える一方,強い分岐なしまたは弱い分岐なしである場合には,データプロセッサが次に当該条件分岐命令を実行する時に分岐を行なわないものと予測して,当該分岐命令のフェッチアドレスおよびターゲットアドレスをBTACから削除することが読み取れるから,
上記ウでの検討も踏まえると,
引用例1には,“分岐ユニットは,BHTに書き込まれた新しい分岐状態が,強い分岐ありまたは弱い分岐ありである場合には,次にデータプロセッサが当該分岐命令を実行する時に分岐を行うものと予測して,当該分岐命令のフェッチアドレスおよびターゲットアドレスをBTACに加える一方,強い分岐なしまたは弱い分岐なしである場合には,データプロセッサが次に当該条件分岐命令を実行する時に分岐を行わないものと予測して,当該分岐命令のフェッチアドレスおよびターゲットアドレスをBTACから削除する”ことが記載されているものと認められる。
上記ア~クの検討から,引用例1には,次のとおりの発明(以下,「引用発明」という。)が記載されていると認められる。
「分岐予測能力を備えたデータプロセッサであって,
前記データプロセッサは,エントリとして分岐命令のアドレスとターゲットアドレスの対を記憶した分岐ターゲットアドレスキャッシュ(BTAC)を備え,
前記データプロセッサは,最近遭遇した分岐命令に対する2ビットの分岐履歴状態,すなわち,強い分岐なし,弱い分岐なし,弱い分岐ありおよび強い分岐ありの4状態を維持する分岐ヒストリテーブル(“BHT”)を備えたシーケンサユニットを備え,
前記シーケンサユニットは,フェッチパイプライン段階で,新しいフェッチアドレスを発生するたびごとにBTACをサーチして第1の分岐予測を行い,もしフェッチアドレスがBTACに存在すれば,当該フェッチアドレスに関連するターゲットアドレスにおける命令を命令キャッシュからフェッチし,
また,前記シーケンサユニットは,デコードパイプラインステージにおいて,分岐ヒストリテーブル(“BHT”)に維持された分岐命令に対する履歴状態に基づいて第2の分岐予測を行い,分岐を行うと予測するかあるいは分岐を行わないと予測するかを決定し,
ここで,パイプラインのより後の段階におけるフェッチアドレスの訂正により,パイプラインにおける対応する分岐命令に続く全ての命令が無効にされ,
前記データプロセッサは,実行段階において,BHTにおける各々のエントリの状態を,BHTエントリの現在の状態および実行している分岐の方向に関する情報を使用して,もしシーケンサが分岐命令を誤って予測すれば,BHTの対応するエントリを1つの強い状態から同じ弱い状態へあるいは1つの弱い状態から反対の弱い状態へと更新し,逆に,シーケンサユニットが分岐命令を正しく予測すれば,BHTにおける対応するエントリを1つの弱い状態から同じ強い状態へとまたは1つの強い状態から同じ強い状態へと更新する分岐ユニットを備え,
前記分岐ユニットは,BHTに書き込まれた新しい分岐状態が,強い分岐ありまたは弱い分岐ありである場合には,次にデータプロセッサが当該分岐命令を実行する時に分岐を行うものと予測して,当該分岐命令のフェッチアドレスおよびターゲットアドレスをBTACに加える一方,強い分岐なしまたは弱い分岐なしである場合には,データプロセッサが次に当該条件分岐命令を実行する時に分岐を行わないものと予測して,当該分岐命令のフェッチアドレスおよびターゲットアドレスをBTACから削除する,
データプロセッサ。」
(2)引用例2
原査定の拒絶理由で引用された,本願の優先日前に頒布された刊行物である,国際公開第2005/103886号(2005年11月3日公開。以下,「引用例2」という。)には,図面とともに,以下の事項が記載されている。(下線は当審において付したものである。)
J 「技術分野
[0001] 本発明は,最近の分岐命令の分岐結果を複数,格納する分岐ヒストリレジスタ,及びインデックス毎に分岐命令が分岐すると予測する確度を示す予測情報を格納した分岐ヒストリテーブルを用いて分岐予測を行う技術に関する。
背景技術
[0002] パイプライン機能を有するプロセサでは,性能を最大限に発揮させるために,分岐命令が分岐する力否かを分岐予測装置により予測して先に処理を進めるようになっている。その予測がはずれた場合,後戻りさせなくてはならない。これは,先に進めた分の処理は無駄になり,後戻りさせるための処理を別に行わなければならないことを意味する。そのようなペナルティが発生することから,予測精度はプロセサの性能に大きく影響する。このため,分岐予測装置では,より高い精度で予測を行えるようにすることが強く望まれている。
[0003] 従来の分岐予測装置としては,例えば特許文献1に記載された2レベル型分岐予測装置がある。その型の分岐予測装置は,比較的に高い予測精度が得られると注目されている。
図1Aは,2レベル型の従来の分岐予測装置で行われる分岐予測を説明する図である。
[0004] 分岐ヒストリレジスタ702は,最近の分岐命令における分岐結果を複数,履歴として格納するレジスタである。1分岐命令の分岐結果は1ビットの値で表現される。例えば分岐不成立は「0」,分岐成立は「1」で表現される。その分岐結果は,1ビットずつシフトしながらレジスタ702に格納する。それにより,レジスタ702には,最近のそのビット数分の分岐結果が格納されるようになっている。例えばビット数が4ビットであり,現在の内容が「1001」である状態で分岐成立の分岐命令を実行した場合には,その内容は「0011」に更新される。
[0005] 排他的論理和(XOR)演算回路703は,分岐ヒストリテーブル704に格納された内容と分岐命令アドレス値701との排他的論理和を算出する。その排他的論理和は,分岐ヒストリテーブル704のインデックスとして使われる。
[0006] 分岐ヒストリテーブル704には,インデックス毎に,分岐命令による分岐が成立する確度を示す予測情報である状態が格納されている。その状態 (予測情報)は2ビットで表現され,その2ビットで表現される値は大きくなるほど,分岐が成立する確度が高いことを示している。それにより,その値が「11」或いは「10」のときは分岐命令による分岐が成立すると予測し,その値が「01」或いは「00」のときは分岐が成立しないと予測する。
[0007]図1Bは,分岐ヒストリテーブル704に格納した状態の更新方法を説明する図である。
その状態としての値は,実際の分岐結果に応じて更新するようになっている。その更新は,図1Bに示すように,分岐が成立した場合には「11」を上限に値をインクリメントし,分岐が成立しなかった場合には「00」を下限に値をデクリメントすることで行っている。そのような更新を行うことにより,実行するプログラムに応じて分岐ヒストリテーブル704を最適化し,予測精度を常に高く維持させるようにしている。」
K 「[図1A]
」
L 「[図1B]
」
(3)参考文献1
本願の優先日前に頒布された刊行物である,特表2005-538439号公報(2005年12月15日公表。以下,「参考文献1」という。)には,図面とともに,以下の事項が記載されている。(下線は当審において付したものである。)
M 「【0050】
(好ましい実施例の説明)
図1は,本発明の好ましい実施例の同期技法が使用されるデータ処理システムを示す。図1に示されるように,プロセッサーコア40は,プロセッサーコア40によって要求されるインストラクションのアクセスされるインストラクションキャッシュまたは他のメモリー装置10に結合されている。プロセッサーコア40内には,プリフェッチ(先取り)ユニット20が提供されていて,パイプライン化プロセッサー30によって要求されると,プリフェッチユニットの判断するインストラクションの要求が経路50を通って発行される。そして,インストラクションが検索されるインストラクションメモリー10が,インストラクションを出力して,経路60を通してプリフェッチユニット20に戻し,そしてそこから,それらは経路70を通してパイプライン化プロセッサー30へと送られる。インストラクションを実行しているとき,パイプライン化プロセッサー30は,データ値を収容するレジスターバンク35のレジスターとインターフェースで接続して,インストラクションによって操作される。ロードインストラクションが用いられて,データ値をデータメモリー87からレジスターバンクへとローディングし,そして蓄積インストラクションが用いられて,データ値をレジスターバンク35からデータメモリー87へと蓄積する。そしてデータ処理インストラクションが,レジスターバンク35の特定のレジスターに蓄積されるデータ値で実行される。」
N 「【図1】
」
(4)参考文献2
本願の優先日前に頒布された刊行物である,特開平11-288372号公報(1999年10月19日出願公開。以下,「参考文献2」という。)には,図面とともに,以下の事項が記載されている。(下線は当審において付したものである。)
O 「【0029】命令キャッシュ15は命令プリフェッチバッファ19へ接続しており,それは,命令フェッチ/デコードユニット18によってフェッチされる前にマイクロプロセサ命令を格納するために設けられている。命令は,命令ストリームから「プリフェッチ」されることによって該バッファ内にロードされる。命令がユニット18によってフェッチされると,新たな命令が該バッファ内にロードされる。このことは,実行ユニットが,常に,命令を連続して供給し且つパイプライン内において「バブル」が発生することを防止することを確保している。分岐ターゲットバッファ17が,「分岐」即ち「ジャンプ」命令のターゲットアドレスを予測するために使用される。即ち,ターゲットアドレスは予め計算され(予測され)且つバッファ17内に格納される。従って,無条件分岐がとられる場合には,又は条件分岐命令に遭遇する場合には,次の(逐次的でない)命令に対するアドレスは常に知られており且つ対応する実行ユニット(浮動小数点又は整数)によって使用するために使用可能である。」
P 「【図1】
」
4.対比
本願発明と,引用発明とを比較する。
ア 引用発明の「分岐ターゲットアドレスキャッシュ(BTAC)」が本願発明の「分岐ターゲットアドレスキャッシュ(BTAC)」に相当し,引用発明のBTACは,「エントリ」として「分岐命令のアドレスとターゲットアドレスの対を記憶」していることから,当該「エントリ」は,“分岐命令に関連付けられた”ものであるといえる。また,引用発明の「エントリ」が,BTACに“格納するように構成された”ものであることは明らかである。
してみれば,引用発明の「エントリとして分岐命令のアドレスとターゲットアドレスの対を記憶した分岐ターゲットアドレスキャッシュ(BTAC)」は,本願発明の「分岐命令に関連付けられた分岐ターゲットアドレスキャッシュ(BTAC)エントリを格納するように構成されたBTAC」に相当する。
イ 引用発明の「分岐ヒストリテーブル(“BHT”)」(前者)は,「最近遭遇した分岐命令に対する2ビットの分岐履歴状態,すなわち,強い分岐なし,弱い分岐なし,弱い分岐ありおよび強い分岐ありの4状態を維持する」ものである一方,本願発明の「予測方向カウンタ」(後者)も,本願明細書の段落【0007】の記載によれば,“11-選択されると強く予測された”,“10-選択されると弱く予測された”,“01-選択されないと弱く予測された”,“00-選択されないと強く予測された”という4つの状態のうちのいずれか1つの状態を保持しているものであるから,前者と後者とは,2ビットで表現される4状態を保持する点で一致する。
また,引用発明の「分岐ヒストリテーブル(“BHT”)」は,「もしシーケンサが分岐命令を誤って予測すれば,BHTの対応するエントリを1つの強い状態から同じ弱い状態へあるいは1つの弱い状態から反対の弱い状態へと更新し,逆に,シーケンサユニットが分岐命令を正しく予測すれば,BHTにおける対応するエントリを1つの弱い状態から同じ強い状態へとまたは1つの強い状態から同じ強い状態へと更新する」ように動作するものであるから,いわゆる“飽和カウンタ”として動作するものである。
してみれば,引用発明の「分岐ヒストリテーブル(“BHT”)」が本願発明の「予測方向カウンタ」に相当する。
そして,引用発明の「分岐ヒストリテーブル(“BHT”)」は,最近遭遇した“分岐命令”に対する2ビットの分岐履歴状態を維持するものであるから,“分岐命令”に“関連付けられる”ものである。
よって,引用発明と本願発明とは,「予測方向カウンタ,ここで,前記予測方向カウンタは,分岐命令に関連付けられる」を備える点で一致する。
ウ 本願明細書の段落【0037】の「ブロック610で,条件付分岐命令の第1の方向が暗黙に予測される。例えば,もしBTAC内での条件付分岐命令へのヒットがあれば,BTAC内の対応する分岐ターゲットアドレスがプリフェッチされる。従って,分岐方向は暗黙に「選択される」と予測される。」との記載からすると,本願の“第1の方向”を予測することは,BTAC内に条件分岐命令へのヒットがあるか否かを判断することであると認められるところ,引用発明も,「BTACをサーチして第1の分岐予測を行い」,「フェッチアドレスがBTACに存在す」るか否かを判断することによって,分岐するか否か“予測”しているものであるから,引用発明の第1の分岐予測において予測される“方向”が本願発明の「分岐命令の第1の方向」に相当する。
そうすると,引用発明の,「新しいフェッチアドレスを発生するたびごとにBTACをサーチして第1の分岐予測を行」うことが,本願発明の「BTACエントリに基づいて分岐命令の第1の方向を予測」することに相当する。
また,引用発明では,「もしフェッチアドレスがBTACに存在すれば」,すなわち,“分岐する方向であると予測されれば”,その予測結果を用いて「当該フェッチアドレスに関連するターゲットアドレスにおける命令を命令キャッシュからフェッチし」ているから,“分岐する方向(分岐命令の第1の方向)”を“用い”て,分岐命令に後続する“後の命令”を“フェッチ”しているということができる。
また,引用発明の「フェッチ」は,分岐予測の結果を用いていることから,“推測的にフェッチ”しているものである。
してみれば,引用発明と本願発明とは,後記する点で相違するものの,「BTACエントリに基づいて分岐命令の第1の方向を予測し,ここで,前記第1の方向は,後の命令を推測的にフェッチするために用いられ」る点で共通する。
エ 上記イで検討したように,引用発明の「分岐ヒストリテーブル(“BHT”)」が本願発明の「予測方向カウンタ」に相当し,引用発明において,「シーケンサユニット」は,「デコードパイプラインステージにおいて,分岐ヒストリテーブル(“BHT”)に維持された分岐命令に対する履歴状態に基づいて第2の分岐予測を行い,分岐を行うと予測するかあるいは分岐を行わないと予測するかを決定し」ているところ,ここで予測される「分岐を行う」あるいは「分岐を行わない」という“方向”は,上記ウで検討した「第1の方向」に対する「第2の方向」といえるから,
引用発明と本願発明とは,「予測方向カウンタに基づいて分岐命令の第2の方向を予測」する点で一致する。
ここで,仮に,引用発明のフェッチパイプライン段階における「第1の分岐予測」で,「フェッチアドレスがBTACに存在」し,“分岐する”という「第1の方向」が予測された後で,デコードパイプラインステージにおける「第2の分岐予測」で,“分岐を行わない”という「第2の方向」が予測されたとすると,「第1の方向と矛盾する第2の方向」が予測されたことになり,これは,フェッチパイプライン段階より後のデコードパイプラインステージにおいて“フェッチアドレスの訂正”を行うものといえるところ,この場合,引用発明では,「パイプラインのより後の段階におけるフェッチアドレスの訂正により」,「パイプラインにおける対応する分岐命令に続く全ての命令が無効にされ」るものである。
そして,引用発明の「分岐命令に続く全ての命令」は,誤った予測によってフェッチされ,その後無効にされる命令である点で,本願発明の「後の命令」に相当し,また,引用発明の「無効にされ」ることが本願発明の「フラッシュされ」ることに相当するから,引用発明と本願発明とは,「第1の方向と矛盾する第2の方向に応答して,後の命令は,フラッシュされ」る点で共通する。
してみれば,引用発明と本願発明とは,後記する点で相違するものの,「予測方向カウンタに基づいて分岐命令の第2の方向を予測し,ここで,第1の方向と矛盾する前記第2の方向に応答して,後の命令は,フラッシュされ」る点で共通する。
オ 引用発明の「データプロセッサ」は,「実行段階において,BHTにおける各々のエントリの状態を,BHTエントリの現在の状態および実行している分岐の方向に関する情報を使用して」「更新する」「分岐ユニットを備え」るところ,上記イで検討したとおり,引用発明の「分岐ヒストリテーブル(“BHT”)」が本願発明の「予測方向カウンタ」に相当するから,引用発明の「BHTにおける各々のエントリの状態」が本願発明の「予測方向カウンタの値」に相当し,引用発明における,「BHTにおける各々のエントリの状態」を「更新」することが,本願発明における「予測方向カウンタの値」を「修正」することに相当し,更に,引用発明の“更新された”「BHTにおける各々のエントリの状態」が本願発明の「予測方向カウンタの修正された値」に相当する。
また,引用発明の「実行している分岐の方向に関する情報」は,「実行段階」において決定された実際の分岐方向の情報であり,本願発明の「分岐命令の実際の結果」に相当するものであるから,引用発明の「実行している分岐の方向に関する情報を使用して」「更新する」ことが,本願発明の「分岐命令の実際の結果に基づいて」「修正」することに相当する。
してみれば,引用発明と本願発明とは,「予測方向カウンタの値を修正し,ここで,前記予測方向カウンタの前記修正された値は,分岐命令の実際の結果に基づいて」いる点で一致する。
カ 上記オで検討したように,引用発明の“更新された”「BHTにおける各々のエントリの状態」が本願発明の「予測方向カウンタの修正された値」に相当するから,当該更新の結果である引用発明の「BHTに書き込まれた新しい分岐状態」が本願発明の「予測方向カウンタの修正された値」に相当する。
そして,引用発明の「分岐ユニット」は,「BHTに書き込まれた新しい分岐状態」が,「強い分岐ありまたは弱い分岐ありである場合には,次にデータプロセッサが当該分岐命令を実行する時に分岐を行うものと予測して,当該分岐命令のフェッチアドレスおよびターゲットアドレスをBTACに加え」,また,「BHTに書き込まれた新しい分岐状態」が,「強い分岐なしまたは弱い分岐なしである場合には,データプロセッサが次に当該条件分岐命令を実行する時に分岐を行わないものと予測して,当該分岐命令のフェッチアドレスおよびターゲットアドレスをBTACから削除」しているところ,引用発明の「分岐命令のフェッチアドレスおよびターゲットアドレスをBTACに加える」ことや,「分岐命令のフェッチアドレスおよびターゲットアドレスをBTACから削除する」ことは,「BTAC」の「エントリ」を「管理する」ことに他ならず,また,この“管理”の内容は,「BHTに書き込まれた新しい分岐状態」に応じて変更されていることから,「BHTに書き込まれた新しい分岐状態」に“基づいて”実行されているといえる。
また,引用発明において,分岐ユニットが,上記“管理”を行うために,何らかの「管理信号」を「生成」していることは自明のことである。
してみれば,引用発明と本願発明とは,「予測方向カウンタの修正された値に基づいて,BTACエントリを管理するために管理信号を生成する」点で一致する。
キ 引用発明において,“第1の分岐予測を実行する処理”及び“第2の分岐予測を実行する処理”の主体は,「シーケンサユニット」であり,また,“BHTにおける各々のエントリの状態を更新する処理”,及び,“分岐命令のフェッチアドレスおよびターゲットアドレスを,BTACに加え,又はBTACから削除する処理”の主体は,「分岐ユニット」である。
そして,引用発明の“第1の分岐予測を実行する処理”,“第2の分岐予測を実行する処理”,“BHTにおける各々のエントリの状態を更新する処理”,及び,“分岐命令のフェッチアドレスおよびターゲットアドレスを,BTACに加え,又はBTACから削除する処理”(以下,「引用発明の各処理」という。)は,上記ウ~カで検討したとおり,それぞれ,本願発明の“前記BTACエントリに基づいて前記分岐命令の第1の方向を予測する処理”,“前記予測方向カウンタに基づいて前記分岐命令の第2の方向を予測する処理”,“前記予測方向カウンタの値を修正する処理”,及び,“前記BTACエントリを管理するために管理信号を生成する処理”(以下,「本願発明の各処理」という。)に相当乃至対応しているから,引用発明の各処理の主体である「シーケンサユニット及び分岐ユニット」が本願発明の各処理の主体である「論理回路」に対応する。
よって,上記ウ~カでの検討も踏まえると,引用発明と本願発明とは,
「前記BTACエントリに基づいて前記分岐命令の第1の方向を予測し,ここで,前記第1の方向は,後の命令を推測的にフェッチするために用いられ,
前記予測方向カウンタに基づいて前記分岐命令の第2の方向を予測し,ここで,前記第1の方向と矛盾する前記第2の方向に応答して,前記後の命令は,フラッシュされ,
前記予測方向カウンタの値を修正し,ここで,前記予測方向カウンタの前記修正された値は,前記分岐命令の実際の結果に基づいており,
前記予測方向カウンタの前記修正された値に基づいて,前記BTACエントリを管理するために管理信号を生成する
ように構成された論理回路」
を備える点で共通する。
ク 引用発明の「データプロセッサ」は,「分岐ターゲットアドレスキャッシュ(BTAC)」,「分岐ヒストリテーブル(“BHT”)を備えたシーケンサユニット」,及び「分岐ユニット」からなる“システム”を備えており,これらの“システム”によって,フェッチパイプライン段階でBTACを用いた第1の分岐予測を行い,続くデコードパイプラインステージで分岐ヒストリテーブル(“BHT”)を用いた第2の分岐予測を行っていることから,“2段階の分岐予測”,すなわち,“マルチプルステージ分岐予測”を実行しているということができる。
してみれば,引用発明の「データプロセッサ」が本願発明の「マルチプルステージ分岐予測システム」に対応する。
以上の検討から,本願発明と引用発明とは,
「マルチプルステージ分岐予測システムであって,
分岐命令に関連付けられた分岐ターゲットアドレスキャッシュ(BTAC)エントリを格納するように構成されたBTACと,
予測方向カウンタと,ここで,前記予測方向カウンタは,前記分岐命令に関連付けられる,
前記BTACエントリに基づいて前記分岐命令の第1の方向を予測し,ここで,前記第1の方向は,後の命令を推測的にフェッチするために用いられ,
前記予測方向カウンタに基づいて前記分岐命令の第2の方向を予測し,ここで,前記第1の方向と矛盾する前記第2の方向に応答して,前記後の命令は,フラッシュされ,
前記予測方向カウンタの値を修正し,ここで,前記予測方向カウンタの前記修正された値は,前記分岐命令の実際の結果に基づいており,
前記予測方向カウンタの前記修正された値に基づいて,前記BTACエントリを管理するために管理信号を生成する
ように構成された論理回路と
を備えるシステム。」
の点で一致し,以下の点で相違する。
[相違点1]
本願発明では,システムが,「分岐予測子回路」を備え,前記「分岐予測子回路」が,予測方向カウンタ,履歴レジスタ回路,及び論理回路を備える構成となっているのに対して,引用発明は,予測方向カウンタ及び論理回路を備えるものの,これらを併せて備えた「分岐予測子回路」という構成を有するものではない点。
[相違点2]
本願発明のシステムでは,分岐予測子回路が「履歴レジスタ回路」を備え,前記「履歴レジスタ回路」は,「分岐命令の分岐方向履歴を格納する」のに対して,引用発明のデータプロセッサは,「履歴レジスタ回路」を備えていない点。
[相違点3]
本願発明では,後の命令を「命令プリフェッチユニットに」「プリフェッチ」し,また,後の命令を,「前記命令プリフェッチユニットから」フラッシュするのに対して,引用発明では,命令プリフェッチユニットにプリフェッチする構成を備えていない点。
[相違点4]
本願発明では,予測方向カウンタの修正された値は,「履歴レジスタ回路に格納されている情報に基づいていない」と特定されているのに対して,引用発明は,そのような特定がなされていない点。
5.判断
上記各相違点について,検討する。
[相違点1]及び[相違点2]について
分岐予測を行うプロセッサにおいて,「分岐命令の分岐方向履歴を格納する」分岐ヒストリレジスタ(本願発明における「履歴レジスタ回路」に相当)を分岐ヒストリテーブル(本願発明における「予測方向カウンタ」に相当)と組み合わせて用いることは,例えば上記「3.引用例」の「(2)」で引用した引用例2のJ及びKに記載されているように本願の優先日前に当該技術分野における周知技術であったものと認められる。
ここで,本願発明は,分岐予測子回路が履歴レジスタ回路を備えることを特定しているものの,当該履歴レジスタ回路がシステムにおいてどのように作用するのかについては何ら特定していないことから,本願発明は,システムが単に履歴レジスタ回路を備えることを特定するに留まるものである。
また,システムを構成する際,当該システムが備える種々の回路をどのようなユニット(まとまり)とするかは,回路相互の関連性等を考慮して当業者が適宜決定すべき設計的事項である。
してみれば,分岐ヒストリテーブル(予測方向カウンタ)を用いて分岐予測を行う引用発明のシステムに上記周知技術を適用して,分岐ヒストリレジスタ(履歴レジスタ回路)を組み合わせて用いるように構成し,その際,適宜,分岐予測子回路というユニットを設けて,当該分岐予測子回路が,予測方向カウンタ,履歴レジスタ回路,及び論理回路を備えるように構成すること,すなわち,上記相違点1及び相違点2に係る構成とすることは,当業者が容易に想到し得たことである。
[相違点3]について
引用発明では,「シーケンサユニットが,フェッチパイプライン段階で,・・・命令を命令キャッシュからフェッチし」ているところ,
パイプライン処理を行うプロセッサにおいて,命令を命令キャッシュからフェッチする際に,命令を,まず,プリフェッチユニット,あるいはプリフェッチバッファにプリフェッチするように構成することは,例えば上記「3.引用例」の「(3)」で引用した参考文献1のM,N,同じく上記「3.引用例」の「(4)」で引用した参考文献2のO及びPに記載されているように本願の優先日前に当該技術分野における周知技術であったものと認められる。
また,引用発明は,「パイプラインのより後の段階におけるフェッチアドレスの訂正により,パイプラインにおける対応する分岐命令に続く全ての命令が無効にされ」るものであるところ,上記周知技術の命令をプリフェッチユニットプリフェッチする構成を適用した場合に,命令をプリフェッチユニットにプリフェッチした後で,フェッチアドレスが訂正されれば,プリフェッチユニットにプリフェッチした命令が無効なものとなることは明らかである。
してみれば,命令を命令キャッシュからフェッチするように構成された引用発明において,上記周知技術を採用して,命令を,まず,命令プリフェッチユニットにプリフェッチするように構成するとともに,命令を命令プリフェッチユニットにプリフェッチした後で,フェッチアドレスが訂正された場合に,プリフェッチした命令を,前記命令プリフェッチユニットからフラッシュするように構成すること,すなわち,上記相違点3に係る構成とすることは,当業者が容易に想到し得たことである。
[相違点4]について
引用発明は,「BHTにおける各々のエントリの状態を,BHTエントリの現在の状態および実行している分岐の方向に関する情報を使用して」「更新する」ものであって,ここでのBHT(予測方向カウンタ)の更新された値は,履歴レジスタ回路に格納されている情報に基づかないものである。
また,上記「3.引用例」の「(2)」で引用した引用例2のJ及びLの記載によれば,分岐ヒストリテーブル(予測方向カウンタ)と分岐ヒストリレジスタ(履歴レジスタ回路)を組み合わせて用いる装置においても,分岐ヒストリテーブル(予測方向カウンタ)は,実際の分岐結果に応じて更新されており,この更新は,分岐ヒストリレジスタ(履歴レジスタ回路)に格納されている情報には基づいていない。
してみれば,BHT(予測方向カウンタ)を用いて分岐予測を行う引用発明のシステムにおいて,履歴レジスタ回路を組み合わせて用いる際に,実際の分岐結果に応じてBHT(予測方向カウンタ)を更新するようにし,BHT(予測方向カウンタ)の修正された値が,履歴レジスタ回路に格納されている情報に基づかないものとすること,すなわち,上記相違点4に係る構成とすることは,当業者が容易に想到し得たことである。
そして,本願発明の作用効果も,引用発明及び周知技術から当業者が予測できる範囲のものである。
したがって,本願発明は,引用発明及び周知技術に基づいて,当業者が容易に発明をすることができたものである。
6.むすび
以上のとおり,本願発明は,引用発明及び周知技術に基づいて,当業者が容易に発明をすることができたものであるから,特許法第29条第2項の規定により特許を受けることができない。
したがって,本願は他の請求項について検討するまでもなく拒絶されるべきものである。
よって,結論のとおり審決する。
審決本文(J-PlatPat)
J-PlatPatの審決検索トップを開きます。番号入力で「審判番号」を選び、下の番号を貼り付けて検索してください。
J-PlatPat 審決検索を開く
2017-000761