Comments
Description
Transcript
修士論文 VLIW型命令キューを持つスーパースカラ プロセッサの命令
NAIST-IS-MT0651028 修士論文 VLIW 型命令キューを持つスーパースカラ プロセッサの命令スケジューリング機構 片岡 晶人 2008 年 2 月 7 日 奈良先端科学技術大学院大学 情報科学研究科 情報システム学専攻 本論文は奈良先端科学技術大学院大学情報科学研究科に 修士 (工学) 授与の要件として提出した修士論文である。 片岡 晶人 審査委員: 中島 康彦 教授 (主指導教員) 藤原 秀雄 教授 (副指導教員) 山下 茂 准教授 (副指導教員) 中田 尚 助教 (副指導教員) VLIW 型命令キューを持つスーパースカラ プロセッサの命令スケジューリング機構∗ 片岡 晶人 内容梗概 従来手法のスーパースカラプロセッサは,高い性能を実現するために命令ウィ ンドウの全命令から実行可能な命令を動的に選択し,演算器に発行するという複 雑な動作を 1 サイクルで行う.また,命令ウィンドウには,全命令に対して実行 結果をブロードキャストするオペランドフォワーディング機構などの大規模な回 路が必要である.このため,命令レベル並列性や動作周波数のさらなる向上は難 しく,例えば 8 並列のようなスーパースカラプロセッサの実現を阻んでいる.本 稿では,これらの機構が不要となる VLIW 型命令キューへの命令スケジューリン グ手法を提案する.提案手法ではデコード直後にスケジューリングを行うことで, 命令発行機構を簡単化する.このため,回路規模削減や動作周波数向上が可能で ある.FPGA への実装の結果,提案手法は従来手法から回路規模を 4.9%削減で き,動作周波数が 29.4%向上することが分かった.また,RTL レベルで動作する パイプラインシミュレータによる IPC の測定の結果,提案手法は従来手法からの IPC の低下が 6.2%に留まることが分かった.よって,提案手法では単位時間当た りの命令実行数で表される総合的な性能が従来手法より 21.3%向上する. キーワード マイクロプロセッサ, VLIW, スーパースカラ, 命令レベル並列処理, IPC ∗ 奈良先端科学技術大学院大学 情報科学研究科 情報システム学専攻 修士論文, NAIST-ISMT0651028, 2008 年 2 月 7 日. i Instruction scheduling method for superscalar processor with VLIW Instruction Queue∗ Akihito Kataoka Abstract An issue logic selects several instructions per cycle from all of the instructions in an instruction window. In addition, the instruction window has large circuit to bypass the instruction’s result along to each instruction. These complicated logic increase delay time and circuit size. Wide-issue superscalar (e.g. 8-issue superscalar) requires more complicated circuit, but it is hard to implement. This paper proposes a simple instruction scheduling mechanism that employs VLIW instruction queue. In this mechanism, the instructions are placed in the instruction queue. The issue logic can be make with simple logic witch are free from complicated select logic. Based on the detail design with the 4-issue superscalar using both of the proposed method and the conventional method for estimate delay time and circuit size, it is found this mechanism could decrease the circuit size by 4.9% and increase clock frequency by 29.4% as compared to the machine with conventional mechanism. This paper evaluated average IPC using a pipeline simulator, and found out that IPC using our technique show down only 6.3% as compare to the conventional technique. These results show this new mechanism can speed up overall performance by 21.3% to the conventional superscalar. Keywords: Microprocessor, VLIW, Superscaler, ILP, IPC ∗ Master’s Thesis, Department of Information Systems, Graduate School of Information Science, Nara Institute of Science and Technology, NAIST-IS-MT0651028, February 7, 2008. ii 目次 1. はじめに 1 1.1 研究背景 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 関連研究 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2. ARM アーキテクチャのスーパースカラ化 5 ARM アーキテクチャと命令分解 . . . . . . . . . . . . . . . . . . 5 2.1.1 シフト付きデータ処理命令 . . . . . . . . . . . . . . . . . . 5 2.1.2 マルチプルロードストア命令 . . . . . . . . . . . . . . . . 6 2.1.3 条件付き実行命令 . . . . . . . . . . . . . . . . . . . . . . . 6 2.1.4 乗算命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.1.5 分解後命令の単一サイクル実行 . . . . . . . . . . . . . . . 8 2.1.6 分解後の内部命令を実行する演算器の構成 . . . . . . . . . 9 2.2 スーパースカラプロセッサ . . . . . . . . . . . . . . . . . . . . . . 10 2.2.1 命令発行機構の構成 . . . . . . . . . . . . . . . . . . . . . 10 2.2.2 レジスタファイルの構成 . . . . . . . . . . . . . . . . . . . 15 2.1 2.3 ARMSS モデルの構成 . . . . . . . . . . . . . . . . . . . . . . . . 18 2.3.1 パイプライン構成 . . . . . . . . . . . . . . . . . . . . . . . 18 2.3.2 バックエンド構成 . . . . . . . . . . . . . . . . . . . . . . . 21 3. 提案するスーパスカラ 24 VLIW 型命令キュー . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.1.1 VLIW 型命令キューからの命令発行 . . . . . . . . . . . . . 24 3.1.2 VLIW 型命令キューへのスケジューリング . . . . . . . . . 26 3.1.3 VLIW 型命令キューの構造と動作 . . . . . . . . . . . . . . 27 3.2 命令スケジューリング機構 . . . . . . . . . . . . . . . . . . . . . . 28 3.2.1 単一命令のスケジューリング . . . . . . . . . . . . . . . . 28 3.2.2 シフトに対応するスケジューリング . . . . . . . . . . . . . 32 3.2.3 複数命令の同時スケジューリング . . . . . . . . . . . . . . 33 3.1 iii 3.3 命令発行機構 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.4 より高度な命令スケジューリング機構 . . . . . . . . . . . . . . . 37 3.4.1 ポートスケジューリング . . . . . . . . . . . . . . . . . . . 38 3.4.2 LD-USE 命令のスケジューリング . . . . . . . . . . . . . . 40 3.4.3 追い越し命令スケジューリング . . . . . . . . . . . . . . . 42 ARMVLIW モデル . . . . . . . . . . . . . . . . . . . . . . . . . . 43 3.5 4. 評価と考察 47 4.1 シミュレータによる評価 . . . . . . . . . . . . . . . . . . . . . . . 47 4.1.1 シミュレーション条件 . . . . . . . . . . . . . . . . . . . . 47 4.1.2 理想的なレジスタファイルを用いた場合 . . . . . . . . . . 48 4.1.3 制約のあるレジスタファイルを用いた場合 . . . . . . . . . 50 4.1.4 LD-USE 予測,追い越しスケジューリング . . . . . . . . . 53 4.2 回路面積・遅延時間による評価 . . . . . . . . . . . . . . . . . . . 54 4.2.1 実装したハードウェアモデル . . . . . . . . . . . . . . . . 55 4.2.2 ターゲットデバイス . . . . . . . . . . . . . . . . . . . . . 56 4.2.3 モジュール単位の論理合成結果 . . . . . . . . . . . . . . . 57 4.2.4 プロセッサ全体での論理合成・配置配線結果 . . . . . . . . 59 4.2.5 IPC を含めた総合評価 . . . . . . . . . . . . . . . . . . . . 60 4.3 考察 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 4.3.1 レジスタファイルに制約がある場合の IPC 低下 . . . . . . 60 4.3.2 LD-USE ミスペナルティ予測と追い越しスケジューリング 61 4.3.3 命令スケジューラの拡張 . . . . . . . . . . . . . . . . . . . 61 4.3.4 異種命令混在実行 . . . . . . . . . . . . . . . . . . . . . . . 62 5. まとめ 64 謝辞 65 参考文献 66 iv 発表文献 68 v 図目次 1 条件付実行命令の分解 . . . . . . . . . . . . . . . . . . . . . . . . 7 2 リザベーションステーション方式 . . . . . . . . . . . . . . . . . . 11 3 集中命令ウィンドウ方式 . . . . . . . . . . . . . . . . . . . . . . . 13 4 マルチバンク構成のレジスタファイル . . . . . . . . . . . . . . . 17 5 ARMSS モデルのパイプライン構成 . . . . . . . . . . . . . . . . . 19 6 ARMSS モデルのバックエンド構成 . . . . . . . . . . . . . . . . . 21 7 ARMSS モデル各ステージのモジュールの動作 . . . . . . . . . . . 23 8 VLIW 型命令キュー方式 . . . . . . . . . . . . . . . . . . . . . . . 25 9 VLIW 型命令キューへの命令スケジューリング例 . . . . . . . . . 26 10 VLIW 型命令キュー 1 演算器分の構造 . . . . . . . . . . . . . . . . 27 11 ソースレジスタ番号をブロードキャストするスケジューリング機構 30 12 スケジューリング位置生成回路 . . . . . . . . . . . . . . . . . . . 31 13 VLIW 型命令キューのシフト動作 . . . . . . . . . . . . . . . . . . 33 14 単一命令のスケジューラ . . . . . . . . . . . . . . . . . . . . . . . 33 15 複数命令のスケジューラ . . . . . . . . . . . . . . . . . . . . . . . 35 16 命令スケジューラと VLIW 型命令キュー,マップテーブルの接続 36 17 ライトポートスケジューリング . . . . . . . . . . . . . . . . . . . 39 18 リードポートスケジューリング . . . . . . . . . . . . . . . . . . . 40 19 ガードビットの左シフト . . . . . . . . . . . . . . . . . . . . . . . 41 20 ARMVLIW モデルのパイプライン構成 . . . . . . . . . . . . . . . 44 21 ARMVLIW モデルのバックエンド構成 . . . . . . . . . . . . . . . 45 22 ARMVLIW モデル各ステージのモジュールの動作 . . . . . . . . . 46 23 内部命令 IPC(理想レジスタファイル) . . . . . . . . . . . . . . 49 24 レジスタファイル制約の効果,従来手法,相対 IPC . . . . . . . . 50 25 レジスタファイル制約の効果,提案手法,相対 IPC . . . . . . . . 51 26 ライトバンク,リードポート割当の効果,相対 IPC . . . . . . . . 53 27 内部命令 IPC(制約レジスタファイル) . . . . . . . . . . . . . . 54 28 内部命令 IPC(LD-USE 予測,追い越し) . . . . . . . . . . . . . 56 vi 表目次 1 シミュレーション条件 . . . . . . . . . . . . . . . . . . . . . . . . 48 2 シミュレーションモデル(理想レジスタファイル) . . . . . . . . 48 3 シミュレーションモデル(提案手法,レジスタファイル制約あり) 52 4 平均 IPC(制約済みレジスタファイル) . . . . . . . . . . . . . . 55 5 シミュレーションモデル(LD-USE 予測,追い越し) . . . . . . . 55 6 ターゲットデバイス xc2v8000 . . . . . . . . . . . . . . . . . . . . 57 7 ARMSS モデル(従来手法)モジュール単位の論理合成結果 . . . 58 8 ARMVLIW+W モデル(提案手法)モジュール単位の論理合成結果 58 9 プロセッサ全体での回路規模・動作周波数 . . . . . . . . . . . . . 59 10 IPC× 動作周波数による評価 . . . . . . . . . . . . . . . . . . . . . 60 vii 1. はじめに 1.1 研究背景 マイクロプロセッサは,パソコン,ゲーム機,携帯電話などの端末,自動車や産 業機械などあらゆる場所に使用される必要不可欠な存在となっている.このため, 性能向上の要求が途絶えることはない.一方で現在ではバッテリ駆動機器に限ら ずデスクトップパソコンのような機器でもプロセッサの消費電力が問題となって いる.地球温暖化への対策やエネルギー問題からプロセッサには今後もさらに低 消費電力化が望まれることは間違いない.このため消費電力とのバランスが取れ た性能向上が必要である. プロセッサの性能を向上する方法の 1 つが動作周波数の向上である.例えばパ イプライン段数を増やしパイプライン 1 ステージ分の処理を減らすことで動作周 波数の向上が可能である.近年ではパソコン向けのマイクロプロセッサとして動 作周波数が 3GHz を越えるものが実現されている.しかし消費電力の問題からこ れ以上の動作周波数向上は難しいと言われている.またこれらのプロセッサのパ イプライン段数は 20 段以上に達しており,命令間の依存関係や,分岐予測ミス による性能低下が大きい.このため,周波数が倍になれば単位時間当たりの命令 実行数が倍になるわけではない. プロセッサの性能を向上するもう 1 つの方法が並列処理である.複数の命令間 に依存関係が無いとき,それらの命令を同時に実行することで,性能向上を狙う 方法を命令レベル並列処理と呼ぶ.命令レベル並列処理を行うには,依存関係の 無い命令を同時実行するように命令をスケジューリングする必要がある.このス ケジューリングをハードウェアが動的に行うものがスーパースカラプロセッサで り,コンパイラが静的に行うものが VLIW プロセッサである. 逐次処理を前提とした既存のバイナリコードから,並列性を抽出して実行でき る点ではスーパースカラプロセッサが有利である.しかし動的に命令をスケジュー リングする機構は回路規模や消費電力,動作周波数の点から不利になる.例えば Pentium4 [1] では命令の同時処理数を 3 命令としており,これ以上の命令レベル 並列度を狙っていない.また Power4 [2] ではアウトオブオーダに発行できる命令 1 を 1 グループ内 4 命令に制限して,スケジューリング機構の簡略化を図っている. 一方で VLIW プロセッサでは,ハードウェアが動的に命令をスケジューリング する必要は無いため,高い命令レベル並列度を実現するプロセッサが存在してい る.例えば FR550[3] では,低消費電力の要求が厳しい組み込み用途向けのプロ セッサでありながら,整数命令とマルチメディア命令を合わせて 8 並列を実現し ている.VLIW プロセッサは動的に命令をスケジューリングするための複雑な機 構が無いため,回路規模や消費電力,動作周波数の点では有利である.このため 近年では低消費電力で並列度の高い VLIW プロセッサが再び脚光を浴びるように なってきている.しかし VLIW プロセッサではコンパイラやプログラマが並列性 を抽出しなければならず,既存の逐次処理を前提としたプログラムそのままでは 性能が出ない. そこで現在広く使われている命令セットをサポートしながら,高い命令レベル 並列度(例えば 8 並列)を実現し,かつ内部は単純なハードウェアとなっている プロセッサの登場が望まれている. 本稿では,ARM[4] アーキテクチャを対象に VLIW 型プロセッサの利点を採り 入れた,VLIW 型命令キューを持つスーパースカラプロセッサの命令発行,命令 スケジューリング手法を提案する.提案手法を用いることで,従来手法で問題と なっている複雑な命令発行機構の回路規模削減,動作周波数の向上を実現できる. 提案手法の評価は,RTL レベルで動作するソフトウェアシミュレータによる IPC 測定,従来型のスーパースカラプロセッサおよび提案型のスーパースカラプロ セッサを実際にハードウェアとして実装した場合の回路規模,動作周波数によっ て行う. 2 章では本稿で対象とする ARM アーキテクチャの従来手法によるスーパース カラ化について述べ,3 章では VLIW 型プロセッサの利点を取り入れた新しい命 令スケジューリング機構を提案し,ARM アーキテクチャの提案手法によるスー パースカラ化について述べる.4 章では,2 章で述べる従来型のパイプラインモデ ル,3 章で述べる提案型のパイプラインモデルについてソフトウェアシミュレー タによる IPC の測定結果,FPGA 向けの論理合成,配置配線結果を述べる.また 単位時間当たりの命令実行数による総合評価を行い,さらなる高性能化を行なう 2 ための命令スケジューリング機構について議論する.最後に,5 章では本稿のま とめを行なう. 1.2 関連研究 ARM Cortex-A8 [5] は複雑な ARM 命令をそのままバックエンドで処理するイ ンオーダ実行するスーパースカラである.我々の提案手法は複雑な ARM 命令を 簡単な命令に分解し,分解後命令をアウトオブオーダ実行する.このため我々の アプローチの方がより高い命令レベル並列度を実現できる. Crusoe [6] は,x86 アーキテクチャの命令列を,4 並列の VLIW 型命令に動的 変換および命令スケジューリングを行う.この変換とスケジューリングはソフト ウェアによって行われる.我々の提案手法では,まず複雑な命令を簡単な命令に 分解し,分解後の命令をスケジューリングする.このどちらの動作もハードウェ アが行う.Cursoe では命令変換後の伸張された命令がキャッシュを圧迫する可能 性があるが,我々の提案手法では命令キャッシュから取り込んだ後に分解するた め命令キャッシュを圧迫しない.また命令列をソフトウェアが変換することによ る時間的なオーバーヘッド,変換後命令を主記憶上にキャッシュすることによる 空間的なオーバーヘッドは,提案手法では生じない.このため提案手法はキャッ シュ容量が小さい場合や主記憶の相対的速度が低い場合に,Crusoe の手法より高 い性能を得ることが出来ると考えられる. Dependence-based[7] マイクロアーキテクチャでは,命令ウィンドウを複数の キューで構成し,レジスタリネーム後の命令を依存している先行命令のあるキュー に投入する.その後発行時にキューの先頭にある命令間での依存関係のチェック のみを行うことで,アウトオブオーダの発行機構をインオーダの発行機構程度ま で簡略化している.我々の提案手法ではキューが演算器毎に分かれているため発 行論理はさらに簡略化されている.またキューの任意の位置に,既にキューに入っ ている先行命令を追い越して命令をキューイングできるので,スケジューリング の自由度が高い.このため我々の提案手法は Dependence-based マイクロアーキ テクチャより高い命令レベル並列性を実現できると考えられる. Select-Free Instruction Scheduling Logic [8] では,命令スケジューリング機構 3 における WakeUp-Select-WakeUp のループから Select 論理を取り除き,前回の Select 論理の結果を使わずに WakeUp を行うことでスケジューラの動作周波数 を向上させる手法が論じられている.しかし,WakeUp 論理と Select 論理の回路 自体はそのまま残るため,回路規模の削減,複雑な機構の削減には繋がらない. 我々の提案手法では WakeUp 論理の回路規模が削減可能でかつ Select 論理がそ もそも不要である.このため我々の提案手法は回路規模削減や動作周波数向上に Select-Free Instruction Scheduling より効果的に働くと考えられる. 4 2. ARM アーキテクチャのスーパースカラ化 本章では,まず議論の対象とする ARM 命令セットアーキテクチャについて述 べ,従来型スーパスカラプロセッサの概要を述べた後,従来方式による ARM プ ロセッサのスーパースカラ化について述べる. 2.1 ARM アーキテクチャと命令分解 ARM の R は,単純な操作を固定長の 1 命令に記述する RISC(Reduced InstructionSet Computer) の頭文字である.しかし,ARM 命令セットは複雑な操作を 1 命 令 4 バイト固定長に記述できる CISC(Complex Instruction-Set Computer) 型で ある.本節ではまずシフト付き演算命令とマルチプルロードストア命令の例を用 いて命令分解の必要性と基本方針を述べる.次に条件実行命令のスーパースカラ 化について述べ,命令を 1 サイクルで実行できるものにまで分解した上での命令 スケジューリングの例を述べる.最後に分解後命令を実行する演算器の構成につ いて述べる. 2.1.1 シフト付きデータ処理命令 ARM 命令セットでは,加算や論理積などのデータ処理命令の第 2 ソースオペ ランドに定数シフト,ローテート,バレルシフトを施すことが出来る.パイプラ イン段数の少ない ARM プロセッサではバレルシフタと ALU をカスケード接続 することでシフト付き演算命令を処理している.このようなカスケード接続され た演算器は,多数の演算器を並列配置するスーパースカラの構成には馴染まない. また命令が実行できるようになるまで格納しておく命令ウィンドウには,ソー スオペランドのフィールドを 3 つ持たせる必要がある.この 3 つ目のソースオペ ランドはシフト付きデータ処理命令以外では使われないため無駄が多い. 5 2.1.2 マルチプルロードストア命令 ARM 命令セットでは,16 本あるアーキテクチャレジスタの任意の組み合わせ に対する複数個のロードストア命令を,1 個の命令として記述することが出来る. このようなロードストア命令をマルチプルロードストア命令と呼ぶ. 例えばマルチプルロード命令では,ベースアドレス指定用に 1 個のレジスタを 使用し,最大 16 個のレジスタにロード結果を書き込む.この命令を既存のスー パースカラの枠組みで直接実行しようとすると,ディスティネーションオペラン ドを最大 16 個格納できる複雑な命令ウィンドウが必要となってしまう.その他の 命令ではディスティネーションオペランドは 1 個のため残り 15 個分のフィールド は無駄になる. このように CISC 型の命令を直接実行できるスーパスカラは構造が複雑になっ てしまう.これらの複雑な命令セットを持つプロセッサをスーパスカラ化する方 法の一つとして,RISC 型の命令に変換してから実行する命令分解機構がある.本 研究では ARM 命令の分解機構 [9][10] を用いて複雑な ARM 命令を単純な RISC 型の内部命令に分解する. 2.1.3 条件付き実行命令 スーパスカラ化において注意すべき命令として条件付き実行命令がある.ARM 命令セットでは,ほぼすべての命令に条件コードを付加することができる.条件 コードが付加された命令は,命令の実行結果であるゼロフラグやキャリーフラグ などを保持するステータスレジスタ値が,条件コードで指定された条件を満たし ている場合に限って実行される. 条件付実行命令をそのままスーパスカラ化すると,ステータスレジスタの値に よって命令間での依存関係が変わってしまう.具体例として図 1(a)(b) を示す.(a) の場合,CMP 命令 (1) の結果ステータスレジスタのゼロフラグがセットされるた め,ADDEQ 命令 (3) が実行され R2 が更新される.このため直後の SUB 命令 (4) は ADDEQ 命令 (3) に依存する.(b) の場合,CMP 命令 (1) の結果ステータ スレジスタのゼロフラグがクリアされるため ADDEQ 命令 (3) は実行されない. 6 1:CMP R0,R1 1:CMP R0,R1 1:CMP R0,R1 2:ADD R2,R3,R4 2:ADD R2,R3,R4 2:ADD R2,R3,R4 3:ADDEQ R2,R5,R6 3:ADDEQ R2,R5,R6 3:ADDEQ i0,R5,R6 4:SUB R7,R2,R8 4:SUB R7,R2,R8 4:CSLEQ R2,i0,R2 5:SUB R7,R2,R8 (a) R0==R1 (b) R0!=R1 (c) Use conditional select 図 1 条件付実行命令の分解 このため SUB 命令 (4) は ADDEQ 命令 (3) より前の ADD 命令 (2) に依存する ことになる. この命令列がパイプラインによりオーバーラップ処理されるとき,命令の依存 関係を検査する段階ではステータスレジスタの値が定まっておらず SUB 命令 (4) が ADD 命令 (2) と ADDEQ 命令 (3) どちらに依存するかは分からない.このよ うな状況下では SUB 命令 (4) は ADD 命令 (2) と ADDEQ 命令 (3) 両方の結果が レジスタファイルに反映されるまで待たなくてはならず性能が低下する. そこで図 1(c) のように ADDEQ 命令を常時実行する ADD 命令 (3) と 条件選 択を行う CSL(Condition Select) 命令 (4) に分解する.分解しただけでは R2 の値 が上書きされてしまうので,ADD 命令のディスティネーションレジスタをアーキ テクチャレジスタではない作業用レジスタ(i0)に置き換える. CSL 命令 (4) は ステータスレジスタのゼロフラグがセットされている場合は作業用レジスタの値 を,クリアされている場合は R2 の値を R2 に書き込む.こうすることで, SUB 命令 (5) はステータスレジスタの値に関わらず常に CSL 命令 (4) に依存する形 になり,バイパスやフォワーディングで正しい R2 の値を得ることが出来るよう になり,先行命令の結果がレジスタファイルに反映されるまで待たなくてもよく なる. 7 2.1.4 乗算命令 ARM 命令セットには MUL 命令(32×32 = 32 ビット),UMULL,SMULL 命令 (ロング乗算命令,32×32 = 64 ビット)などの乗算命令や MAL 命令(32×32+32 = 32 ビット),UMLAL,SMLAL 命令(ロング積和命令,32 × 32 + 64 = 64 ビッ ト)の積和命令がある. 32 × 32 ビットの乗算を 1 サイクルで実行するとプロセッサ全体の動作周波数 は低下してしまう.また ARM のアーキテクチャレジスタは 32 ビット長であるた め,ロング乗算命令,ロング積和命令の結果を格納するためには 2 個のレジスタ が必要である. このため命令ウィンドウにはソースオペランドのフィールドが最大 4 個,ディ スティネーションオペランドのフィールドが最大 2 個必要となる. そこでまず 32 × 32 ビット乗算を 32 × 8 ビットの細かい乗算に分解することで 動作周波数の低下を防ぐ.次に得られた部分積を 32 ビットの加算命令で累積し ていく.同様の枠組みで積和命令やロング乗算,ロング積和命令にも対応する. 2.1.5 分解後命令の単一サイクル実行 上述の命令分解により,複雑な ARM 命令は,2 個までのソースオペランドと 1 個までのディスティネーションオペランドを持つ単純な RISC 型の命令に分解 される.よって分解後の命令は 2 個のソースオペランドが使えるようになるまで 待ち合わせるという枠組みでスーパースカラ化が可能になる. また分解後の命令はロード命令がキャッシュミスを起こす場合を除いて全て 1 サイクルで実行可能であるため,1 サイクル後の実行結果からのバイパスを期待 して命令スケジューリングを行うことが出来る. 例えばマルチプルストア命令であれば,アドレス計算とストア命令が別の演算 器でオーバーラップ実行され,ストア先アドレスを計算する命令からストア命令 へバイパスが行われる.このためアドレス計算とストア用の演算器をカスケード 状に接続した場合と比較して,分解したことによる損は無い. 8 2.1.6 分解後の内部命令を実行する演算器の構成 命令分解機構により,複雑な ARM 命令は単純な内部命令に分解される.分解後 の命令はシフト命令,32×8 ビットの乗算命令,ALU 命令,アドレス計算(EAG- ADD/EAG-SUB),乗算の補助演算,選択命令(CSL),ロード命令,ストア命 令,SWI 命令,分岐命令,未定義命令に分類される.これらの命令を SFM,ALU, EAG,OP1,BRC の 5 種類の演算器で処理する. SFM : Shifter and Multiplier SFM はシフト命令と 32×8 ビットの乗算命令を実行する.これは ARM が対象 とするアプリケーションでは乗算の頻度が少ないため,乗算を別の演算器として 用意しておく必要性が無いためである. ALU : Arithmetic Logical Unit ALU は ALU 命令のみを処理する.ALU で処理される命令は ARM のデータ処 理命令と 1 対 1 に対応している.シフトとは演算器が分かれているため,複数個 のシフト付き演算命令についてはオーバーラップ実行が可能である. EAG : Effective Address Generation EAG では,アドレス計算,乗算の補助演算,選択命令を実行する.乗算と乗 算補助演算を別の演算器に分けているため,部分積の生成と累積加算をオーバー ラップ実行できる. OP1 : L1-D-Cache Oparation OP1 はデータキャッシュやストアバッファを操作する演算器で,ロード命令, ストア命令,SWI 命令,未定義命令を実行する.このうち SWI 命令と未定義命令 はもともと実行時に出来ることが何も無いので,OP1 内を通過するだけである. BRC : Branch BRC は PC 相対の分岐命令を実行する.実際には Taken 側の分岐先アドレス計 算は命令分解の時点で行われているため,BRC は分岐命令の Taken/Not-Taken をステータスレジスタと条件コードを比較して求め,分岐予測結果が正しいか間 違っているかを判定する. 9 2.2 スーパースカラプロセッサ スーパースカラプロセッサとは,逐次処理されることを前提としたプログラム から実行時に動的に同時実行可能な命令を抽出し,命令レベル並列処理を行うプ ロセッサである.スーパースカラプロセッサには既存のプログラムのバイナリコー ドを改変せずに実行可能という利点がある.一方,動的に命令レベル並列性を抽 出する機構は複雑であり,回路規模の増大を招いているため,より並列度の高い スーパースカラプロセッサの開発を阻んでいる. 本節では,スーパースカラプロセッサの命令発行機構の構成を述べその問題点 を指摘する. 2.2.1 命令発行機構の構成 高い命令レベル並列度を実現するには,プログラムの意味を変えない範囲内で 命令を並び替えるアウトオブオーダ実行が必要である.アウトオブオーダ実行で は,依存関係が解消した命令から順に実行していく命令発行機構が必要である, 命令発行機構は回路規模が大きく複雑であるため,動作周波数を決定するクリティ カルパスとなる可能性が高い. 従来型のスーパースカラの命令発行機構には,Pentium Pro [11] や Pentium II [12] の P6 アーキテクチャ,Pentium 4 の Net-Burst アーキテクチャに代表され るリザベーションステーション方式と,MIPS R10000 [13] に代用される集中命令 ウィンドウ方式の 2 種類がある. 本節ではこれら 2 種類の命令発行機構について述べた後,従来手法において命 令スケジューリングを行っている WakeUp-Select 論理について述べる. リザベーションステーション方式: リザベーション方式のスーパースカラのバックエンド構成を図 2 に示す.Map ステージではデコーダが出力した命令に対してレジスタリネーミングを行い,レ ジスタの再利用に起因する逆依存や出力依存を取り除く,その結果,先行命令 の結果を後続命令が使う場合に起こる依存関係(真のデータ依存)だけが残る. Read/Dispatch ステージではレジスタファイルからソースオペランド値を読み出 10 Write S1 S2 D Tag S1 S2 D Data Forwarding S1 S2 D S1 S2 D S1 S1 S1 S1 S2 S2 S2 S2 D D D D ALU D S1 S2 D S1 S2 D S1 S1 S1 S1 S2 S2 S2 S2 D D D D ALU D S1 S1 S1 S1 S2 S2 S2 S2 D D D D ALU D S1 S1 S1 S1 S2 S2 S2 S2 D D D D Cache D Decode Rename S1 S2 D S1 S2 D S1 S2 D S1 S2 D Register File Reservation Station Map Read/Dispatch Execute 図 2 リザベーションステーション方式 し,演算器毎に存在するリザベーションステーションに格納する.先行命令の実 行が終了していない場合,レジスタファイルから読み出した値は正しいソースオ ペランド値ではない.この場合はソースオペランド値の無効を表す Wait ビット をセットしてリザベーションステーションに格納する. Wait ビットがセットされている命令は発行されずリザベーションステーショ ンで待機する.Execute ステージでは各リザベーションステーションからすべて のソースオペランドの Wait ビットがクリアされている命令を選び演算器に発行 する. Write ステージでは命令の実行結果をレジスタファイルに書き込むと同時にリ ザベーションステーションの全エントリに対してディスティネーションレジスタ 番号とディスティネーションオペランド値をブロードキャストする.リザベーショ 11 ンステーションの各エントリはブロードキャストされてきたディスティネーション レジスタ番号をソースレジスタ番号と比較し,一致している場合ディスティネー ションオペランド値をソースオペランド値に取り込み,Wait ビットをクリアす る.これの機構をソースオペランドのフォワーディングと呼ぶ. リザベーションステーションにはエントリ数 × ソースオペランド数のオペラン ド値を格納するため大きな記憶容量を必要である.またソースレジスタ番号と, ブロードキャストされてきたディスティネーションレジスタ番号の一致検出回路 がエントリ数分必要となる.このためフォワーディングされる値は全エントリを 駆動することになるだけでなく,リザベーションステーションを横断する長い配 線を駆動しなければならない.このためリザベーションステーションにおけるフォ ワーディング機構は大きな電力を消費することになる. 集中命令ウィンドウ方式: 集中命令ウィンドウ方式のスーパスカラのバックエンド構成を図 3 に示す.Map ステージでは,デコーダが出力した命令に対してレジスタリネーミングを行い, 命令ウィンドウにキューイングする. 命令ウィンドウにはリザベーションステーションのようにソースオペランド値 を格納するフィールドは無い.一方で命令ウィンドウは各演算器毎に分かれてい ないため,発行先演算器の情報が格納される.命令をキューイングするとき,も し依存関係にある命令の実行が終了していなければ,Wait ビットがセットされ る.Wait ビットがセットされた命令は演算器に発行できず命令ウィンドウで待機 する. Select/Read ステージでは,命令ウィンドウから Wait ビットがクリアされてい る命令を選び,発行先演算器情報に従って演算器に発行する.発行後にレジスタ ファイルからソースオペランド値を読み出し,発行情報と共に演算器手前のパイ プラインレジスタに格納する.Execute ステージでは発行された命令を実行し結 果を演算器後段のパイプラインレジスタに格納する. Write ステージでは演算器後段のパイプラインレジスタに格納された命令の結 果であるディスティネーションオペランド値をレジスタファイルに書き込む.同 時に命令ウィンドウの全エントリにディスティネーションオペランドのレジスタ 12 S1 S2 D Tag S1 S2 D Data Tag-Update Write Bypass S1 S2 D S1 S1 S1 S1 S2 S2 S2 S2 D D D D S1 S2 D ALU D S1 S2 D S1 S1 S1 S1 S2 S2 S2 S2 D D D D S1 S2 D ALU D S1 S2 D S1 S1 S1 S1 S2 S2 S2 S2 D D D D S1 S2 D ALU D S1 S2 D S1 S1 S1 S1 S2 S2 S2 S2 D D D D S1 S2 D Cache D Decode Rename Register File Instruction Window Map Select/Read Execute 図 3 集中命令ウィンドウ方式 番号をブロードキャストする.命令ウィンドウの各エントリはブロードキャスト されたレジスタ番号とソースオペランドのレジスタ番号を比較し,一致していた ら Wait ビットをクリアする. 集中命令ウィンドウ方式では命令ウィンドウエントリ数分 × 演算器数 × ソー スオペランド数分のデスティネーションレジスタ番号とソースレジスタ番号の一 致検出回路が必要である.これを Tag-Update 機構と呼ぶ. リザベーションステーションのフォワーディング機構とは異なり,Tag-Update 機構ではディスティネーションオペランド値を取り込まない.その代わりに命令 の結果は演算器から演算器にバイパスし,レジスタファイルに書き込まれる前に 後続命令に供給する.リザベーションステーション方式のフォワーディングは演 算器対全エントリの配線が必要である.一方で集中命令ウィンドウ方式のバイパ 13 スは演算器対演算器の配線となる.このため集中命令ウィンドウ方式は回路規模 や消費電力の点でリザベーションステーション方式より有利である. 集中命令ウィンドウ方式では発行可能な命令の選択とソースレジスタ値の読み 出しを 1 サイクルで行う.また 1 個の命令ウィンドウから複数の演算器へ命令を 発行することになる.このため全エントリから各演算器の Select 論理への配線が 必要となる. WakeUp-Select 論理: 前述のどちらの命令発行機構にも,命令が発行できるかどうかを調べる WakeUp 論理と発行できる命令が複数ある場合に実際に発行する命令を選ぶ Select 論理が 存在する. WakeUp 論理で行う命令発行可能かどうかの検査とは,未発行の命令のすべて のソースオペランドが使用可能かどうかチェックすることである.ソースオペラ ンドが使用可能であるかどうかを判定するには,単純に Wait ビットを参照する だけで良いように思われる.しかし Wait ビットはハードウェアでは FF で実現さ れているため,同時刻に Write ステージにある命令の結果は Wait ビットには反 映されていない.よって Wait ビットを見るだけでは依存関係にある命令の実行 が 1 サイクル遅れてしまう. この遅延を起こさないように命令を発行するには,Write ステージにある命令 のディスティネーションレジスタ番号とソースレジスタ番号の一致比較を行い, 一致していればソースオペランドが使用可能と判定する必要がある.このような 一致比較器の集合がリザベーションステーションや命令ウィンドウのエントリ数 分必要である.すなわち命令のディスティネーションレジスタ番号はエントリ数 × ソースオペランド数分の一致検出回路を駆動する必要があり,エントリ数が増 えていくと,動作周波数に影響を与える. Select 論理は WakeUp の結果から実際に発行する命令を選択する.命令選択の 方法には,例えばリザベーションステーションのエントリの物理的な配置順に優 先順位を設定したプライオリティーエンコーダを使う方法が考えられる.また同 時にリザベーションステーションや命令ウィンドウから命令の情報を読み出す必 要がある.これを回路化したときの論理段数はエントリ数を n とすると log n 段 14 程度であるが,エントリ数が増えると動作周波数に影響を与える. 一度発行した命令は再度発行してはならない.よって Select の結果は次サイク ルの WakeUp の結果に影響を与える.動作周波数の向上のため WakeUp と Select をパイプライン化したとしてもオーバーラップ実行はできず,毎サイクル命令を 発行することができなくなる.よってエントリ数はある程度以上大きくすること は出来ない.一方で高い命令レベル並列度を実現するにはより多くの命令の中 から発行可能な命令を探し出す必要があるため,エントリ数を増やさなければら ない. 2.2.2 レジスタファイルの構成 2.1 で述べたように,RISC 型の命令には最大 2 個のソースオペランドと最大 1 個のディスティネーションオペランドがある.このような命令を 4 個同時に実行 する 4 並列のスーパースカラでは,同時に 8 個のソースオペランドを演算器に供 給し,4 個のディスティネーションオペランドを格納できるレジスタファイルが 必要である.従って単純には 4 並列のスーパースカラには 8 個のリードポートと 4 個のライトポートを持つレジスタファイルが必要になる.このようなレジスタ ファイルを 8R/4W のマルチポートレジスタファイルと呼ぶ.命令レベル並列度 をさらに増加させる場合にはさらに多くのポートが必要になる. マルチポートレジスタファイルを実現する一般的な方法がマルチポート SRAM セルを使うことである.マルチポート SRAM セルには 1 ポート当たり 1 本のワー ド線と 1 本のビット線がビット幅分ある.8R/4W を実現するには 12 本のワード 線,ビット線が必要になる.マルチポート SRAM セルでは,ポート数が増えるこ とによって配線数が増え,配線長も長くなり回路面積は増加する.SRAM セルの 回路面積は一般にはポート数の 2 乗に比例すると言われている.またライトポー トについては複数のライト要求が 1 つのセルに対して行われるとデータが壊れて しまうため,調停回路が必要になる.当然ポート数分のアドレスデーコーダも必 要である. また実際にスーパースカラプロセッサを構成する際には,8R/4W のようなメ モリセルが,ターゲットとなるテクノロジ(例えば FPGA や ASIC)に用意され 15 ているかどうかが問題である.そこでどのようなテクノロジにも用意されている 1R/1W の SRAM セルを使って,複数の演算器にソースオペランドを供給し複数 の演算結果を書き込むことができる仕組みが望ましい. マルチバンク構成 ライトポート 1 つしかないメモリを使って,複数のライトポートを実現する方 法にマルチバンク構成がある.マルチバンク構成では複数個のメモリを用意し, レジスタ番号ごとに書き込み先のメモリを分散させる.例えば図 4(a) に示すよう に 32 本のレジスタを,8 本ずつ 4 個のメモリに 4 で割った余りでグループを作り 分散させることで,4 個のライトポートを実現できる. 当然ながら同じメモリに格納されているレジスタにライトアクセスが集中す, ライトポートの衝突が起こる.このためレジスタ番号と書き込みデータを記憶す るバッファを用意しておき,ライトアクセスが集中した場合は,メモリにライト する代わりにバッファに格納する.保留されたライト動作は次サイクル以降に行 う.このような仕組みをライトバッファと呼ぶ. しかし何度もライト要求が集中しライトバッファが一杯になると,それ以上の 要求を受け付けることは出来ない.よってライトバッファには十分なエントリ数 が必要である. 一方でライトバッファに保留されたライトアクセスと同じレジスタ番号にリー ド要求が行われた場合には,ライトバッファから値をバイパスしなければならな い.ライトバッファのエントリ数が多い場合,バイパス機構がレジスタファイル そのものより複雑になってしまう可能性がある. もう 1 つの方法として,1 つのライトポートに対して複数のライト要求を調停 する方法がある.具体的にはライト要求が衝突しない組み合わせでのみ命令の発 行許可する.この方法を取るには,前提条件として命令発行の段階でライトポー トを使用するタイミングが分かっている必要がある. 2.1 節で述べた命令分解機構を使うことにより,分解後の命令はロード命令が キャッシュミスを起こす場合を除いてすべて 1 サイクルで動作するため,この前 提条件を満たすことが出来る.但しキャッシュミスが起こってしまうと書き込み タイミングは定まらないため,ロード命令からのライト要求を保留しておくライ 16 Write bank control address data BANK0 R6 4 R0 R4 R8 R12 R16 R20 R24 R28 address R20 data 25 R1 R5 R9 R13 R17 R21 R25 R29 address data R2 R6 R10 R14 R18 R22 R26 R30 R3 R7 R11 R15 R19 R23 R27 R31 R4 91 Output MUX BANK1 BANK2 Conflict BANK3 (a) Write Access Read bank control address BANK0 R9 R0 R4 R8 R12 R16 R20 R24 R28 address R18 R1 R5 R9 R13 R17 R21 R25 R29 address R2 R6 R10 R14 R18 R22 R26 R30 Output MUX BANK1 4 data 25 data BANK2 R2 Conflict X BANK3 R3 R7 R11 R15 R19 R23 R27 R31 (b) Read Access 図 4 マルチバンク構成のレジスタファイル トバッファは必要である. マルチバンク構成を用いることにより,リードポートもライトポートと同様に リードするレジスタが 4 個のメモリに分散していれば図 4(b) に示すように同時に アクセスできる.ライトポートも同様に 1 個のメモリにリード要求が集中した場 合はそのうちの 1 個分しかリードできない. 任意のレジスタ番号からの読み出しを制約無く行うためには,バンクのセット のコピーをリードポート数分用意すればよい.但しこの場合回路面積はリード ポート数分倍増することになる. リードポートの削減 4 並列スーパースカラのレジスタファイルには 8 個のリードポートが必要であ る.しかし実際には演算器間のバイパスやフォワーディングによってソースオペ ランドが演算器から直接供給される場合がある.また即値を使う命令などでは, ソースオペランドを 1 個しか使用しない.このため常時 8 個のリードポートが必 17 要というわけではない.そこでレジスタファイルに用意したリードポート数以上 のアクセスを行わないように,命令間で調停を行うことでリードポート数の削減 が可能である. 前述のとおり,マルチバンク構成のレジスタファイルでリードポート数を増や すことは,回路面積を倍増させることに等しい.従って,できるだけ少ないリー ドポート数で命令の実行が出来ると良い.そこで命令の実行に最低限何個のポー トが必要であるかを考える. ある命令のソースオペランドが両方ともレジスタにあり,バイパスやフォワー ディング等が使えない場合,レジスタファイルから同時に 2 個のデータをリード できなければ,命令を発行できない.よってリードポート数は最低限 2 個必要で ある.これはスーパースカラプロセッサではない普通のパイプラインプロセッサ のレジスタファイルに要求されているリードポート数と同じである. 2.3 ARMSS モデルの構成 従来手法と提案手法を同じ条件で評価するために,本研究では従来型スーパー スカラプロセッサの実装を行った.このスーパースカラプロセッサのモデルを ARMSS モデルと呼ぶことにする.本節では ARMSS モデルのパイプライン構成 とバックエンドのモジュール構成について述べる. 2.3.1 パイプライン構成 ARMSS モデルは図 5 に示したパイプライン構成を持つ集中命令ウィンドウ方 式のスーパースカラプロセッサである.パイプラインは大きく分けてフロントエ ンドとバックエンドから構成されており,フロントエンドでは命令のフェッチ,命 令分解を行う.バックエンドではリオーダバッファ方式によるレジスタリネーミ ングを行い,SFM,ALU,EAG,OP1,BRC の 5 個の演算器で命令を並列かつ アウトオブオーダ実行する.本節ではパイプラインの各ステージについて概略を 述べる. 18 restart_signal/restart_addr out-of-order x5 SFM ARM instruction x2 IA ALU Internal instruction x4 IF ARM-D I1 RET-AS HOST-D WR-EXEC bypass MAP SEL/RD BP in-order x4 EAG WR RETI OP1 L1-D-Cache miss Host SWI L2 BRC EXEC L1-I-Cache miss ARM Front-end SS Back-end 図 5 ARMSS モデルのパイプライン構成 IA ステージ: IA ステージはプログラムカウンタの実体を持つステージであり,次サイクルで フェッチすべき命令のアドレスを計算する.通常の動作時には ARM 命令は 1 命 令 4 バイトであり同時に 2 命令をフェッチするためプログラムカウンタを 8 ずつ 加算して命令アドレスを生成していく.分岐が成立側に予測された場合や分岐予 測ミス等が分かった段階で後段ステージから新たなアドレスが通知されるのでこ れを取り込む. IF ステージ: IF ステージでは IA ステージから通知されたアドレスに基づいて命令キャッシュ (L1-I-Cache)からのフェッチを行う.命令フェッチは 2 命令連続分行い後段のパ イプラインレジスタに格納する.同時に分岐予測を行い予測結果を後段パイプラ インレジスタに格納する.該当アドレスの命令が命令キャッシュに無い場合は L2 に対して該当ラインの入れ替えを要求する. ARM-D ステージ: ARM-D ステージでは IF ステージでフェッチされた命令をデコード,分解する. デコーダは 1 サイクル当たり 2 個の ARM 命令を処理し 4 個の内部命令を出力す る.1 番目の ARM 命令が 4 命令以上に分解される場合,2 番目の ARM 命令の分 解は行われない.またこのステージで初めてフェッチした命令が分岐命令である かどうかが分かる.もし分岐命令の予測方向が成立側だった場合は IA ステージに 19 再フェッチ要求(reifetch signal)と分岐先アドレス(reifetch addr)を通知する. ところで ARM 命令には PC 相対分岐命令(B,BL 命令)以外にプログラムカ ウンタをディスティネーションオペランドに持つ命令を記述できる.このような 命令の分岐先アドレスを予測する機構としてリターンアドレススタック(RET- AS:Return Address Stack)がある.予測したアドレスは PC 相対分岐命令の場合 と同様に IA ステージに通知する. HOST-D ステージ: HOST-D ステージは条件付実行命令の分解を行う.デコーダは 1 サイクル当た り 4 個の内部命令を処理する. MAP ステージ: MAP ステージでは 1 サイクル当たり 4 個の内部命令に対して,リオーダバッ ファ方式によるレジスタリネーミングを行い命令ウィンドウに格納する. SEL/RD ステージ: SEL/RD ステージでは命令ウィンドウの中で実行可能な命令を選び発行する. 演算器は 5 個あるため 1 サイクル当たり 5 命令を発行する.同時にレジスタファ イルからソースオペランド値を読み出す. EXEC ステージ: 5 個の演算器で命令の実行を行う.OP1 に発行されたロード命令がキャッシュミ スする場合を除き,すべての命令は 1 サイクルで実行される.ロード命令がキャッ シュミスを起こした場合は L2 に対して該当ラインの入れ替えを要求する. WR ステージ: 5 個の演算器からの結果をリオーダバッファに書き込む.同時に命令ウィンド ウに該当命令の終了を通知する. RETI ステージ: 命令ウィンドウをインオーダに検査し,終了している命令の結果をリオーダバッ ファからレジスタファイルに格納し命令ウィンドウからリタイアさせる.リタイ アは 1 サイクル当たり最大 4 個の内部命令に対して行う.分岐予測ミスが確定し た場合や SWI 命令,未定義命令がリタイアした場合はそこで命令のリタイアを 中止し,SWI ステージに割込み要求やパイプラインフラッシュ要求を通知する. 20 IBUF PREG CTRL hst2 1-4 MAP TABLE PREGS TAG PREGS VAL LREGS VAL SRC SEL OBUF IBRC BRC OBRC ISFM SFM OSFM IALU ALU OALU IEAG EAG OEAG IOP1 OOP1 OP1 RETI CTRL reti_bpred1 reti_retas1 reti_stbf1 SWI L2 restart_signal 図 6 ARMSS モデルのバックエンド構成 SWI ステージ: RETI ステージから割込み要求やパイプラインフラッシュ要求が通知された場 合のみ動作するステージ.割込み要求の場合は割込みハンドラのアドレスを,分 岐予測ミスが原因となったパイプラインフラッシュ要求の場合は正しい分岐先ア ドレスを再開アドレスを IA ステージに通知し,再開要求信号をアサートして全 パイプラインレジスタおよび命令ウィンドウ等をクリアする. 2.3.2 バックエンド構成 ARMSS モデルのバックエンド構成を図 6 に示す.ARMSS モデルのバックエ ンドは MAP ステージから RETI ステージまでであり,分岐予測ミス等により命 令を再開しなければならない場合は RETI ステージの後に SWI ステージの動作 が加わる.本節ではバックエンドを構成するモジュールについて各ステージごと の動作について述べる. 図 7(a)-(f) に各ステージごとの動作を示す.MAP ステージでは 命令ウィンド 21 ウ,リオーダバッファのエントリ使用状況を管理する PREG CTRL が指定した 命令ウィンドウ PREGS TAG のエントリに MAP TABLE でリネーミングされ た命令が格納される.このとき同時に MAP TABLE 内の論理レジスタとリオー ダバッファの対応表が更新される. SEL/RD ステージでは PREGS TAG 内の WakeUp,Select 論理が決定した命令 発行の情報を用いて,2 系統のレジスタファイル PREGS VAL および LREGS VAL へリードアクセスが行われる.SRC SEL で演算器後段のパイプラインレジスタ である OBUF からのバイパス値,命令発行情報に含まれる即値,レジスタファイ ルから読み出した値から選択されたデータは,命令発行情報と共に 演算器手前 のパイプラインレジスタ IBUF に格納される. EXEC ステージでは,IBUF 内の命令が各演算器で処理され,結果が OBUF に 格納される.OBUF に格納された結果は WR ステージで,リオーダバッファの 実体である PREGS VAL に書き込まれる.このとき書き込み先リオーダバッファ のエントリ番号が PREGS TAG と MAP TABLE に通知され,対応するエントリ の Wait ビットクリアが行われる. RETI ステージでは,リタイア可能な命令の情報が,PREGS TAG からリタイ ア処理を行う RETI CTRL に命令順に入力される.RETI CTRL は PREGS VAL から,論理レジスタの実体である LREGS VAL への転送,分岐結果の通知,スト アバッファへのリタイア要求等の制御を行う. RETI CTRL では分岐予測ミス等命令の再開が必要な状態が検出される.この 場合は SWI モジュールに対して命令再開要求が送られる.命令再開要求は SWI ステージで処理され,IA ステージに対して再開先のアドレスを通知すると同時 に,プロセッサ内の全パイプラインレジスタ,PREGS TAG, MAP TABLE に フラッシュ(再開要求信号:restart signal)を通知する.フラッシュの通知を受 けた各モジュールはレジスタの内容を消去する. 22 PREG CTRL hst2 1-4 MAP TABLE PREGS TAG PREGS VAL SRC SEL LREGS VAL IBR C BR C OBR C ISFM SFM OSFM IAL U AL U OAL U IEAG EAG OEAG IOP1 PREG CTRL hst2 1-4 MAP TABLE PREGS VAL PREGS TAG BRC OBRC ISFM SFM OSFM IALU ALU OALU IEAG EAG OEAG SRC SEL LREGS VAL OOP1 IBRC IOP1 OP1 RETI CTRL reti_bpred1 reti_retas1 reti_stbf1 SWI OP1 L2 hst2 1-4 MAP TABLE PREGS TAG PREGS VAL restart_signal SWI restart_signal (b) SEL/RD stage IBRC BRC OBRC ISFM SFM OSFM IALU ALU OALU IEAG EAG OEAG SRC SEL LREGS VAL L2 reti_bpred1 reti_retas1 reti_stbf1 RETI CTRL (a) MAP stage PREG CTRL IOP1 PREG CTRL hst2 1-4 MAP TABLE PREGS VAL PREGS TAG SRC SEL LREGS VAL OOP1 IBR C BR C OBR C ISFM SFM OSFM IAL U AL U OAL U IEAG EAG OEAG IOP1 L2 reti_bpred1 reti_retas1 reti_stbf1 SWI SWI (c) EXEC stage hst2 1-4 MAP TABLE PREGS VAL ISFM SRC SEL LREGS VAL BRC SFM OSFM IALU ALU OALU IEAG EAG OEAG IOP1 hst2 1-4 MAP TABLE PREGS TAG PREGS VAL SRC SEL LREGS VAL OOP1 IBR C BR C OBR C ISFM SFM OSFM IAL U AL U OAL U IEAG EAG OEAG IOP1 OOP1 OP1 L2 reti_bpred1 reti_retas1 reti_stbf1 SWI restart_signal PREG CTRL OBRC OP1 RETI CTRL L2 (d) WR stage IBRC PREGS TAG reti_bpred1 reti_retas1 reti_stbf1 RETI CTRL restart_signal PREG CTRL OOP1 OP1 OP1 RETI CTRL OOP1 RETI CTRL reti_bpred1 reti_retas1 reti_stbf1 SWI restart_signal (e) RETI stage L2 restart_signal (f) SWI stage 図 7 ARMSS モデル各ステージのモジュールの動作 23 3. 提案するスーパスカラ 2 章で述べたように,従来型のスーパースカラプロセッサにはフォワーディン グ機構や Tag-Update 機構などの複雑な機構があり,回路規模や消費電力の増大 を招いている.また命令を発行するための WakeUp 論理と Select 論理がパイプラ イン化できず命令発行機構がプロセッサ全体の動作周波数を決めるクリティカル パスになる可能性が高い.本章ではこれを解決する VLIW 型命令キューを用いた 命令スケジューリング手法を提案する.また命令スケジューラの具体的な構成方 法について示し,提案手法を用いたスーパースカラプロセッサ ARMVLIW モデ ルの構成について述べる. 3.1 VLIW 型命令キュー 図 8 に VLIW 型命令キューを用いたスーパースカラプロセッサのバックエンド 構成を示す.Map/Schedule ステージでは,命令間の依存関係を検査し VLIW 型 命令キューの適切な位置にキューイングする. VLIW 型命令キューにキューイングされた命令は Dispach/Read ステージにお いて,命令キューの右端エントリから順に発行されていく.VLIW 型命令キュー の右端エントリが空になったら,命令キュー全体が右に 1 段シフトされ,新たな 命令が発行可能になる.これを繰り返すことにより VLIW 型命令キューに並んだ 順に命令を発行していく. 3.1.1 VLIW 型命令キューからの命令発行 提案手法では VLIW 型命令キューの右端エントリからのみ命令を発行する.こ のため右端エントリ以外の命令が発行可能か判定する必要はなく,WakeUp 論理 を簡略化できる.また従来手法のようにリザベーションステーションや命令ウィ ンドウの全エントリから実行可能な命令を選択する必要はないため Select 論理は 不要である.このように発行時に考慮しなければならない命令数は命令キューの 本数,すなわち演算器の数だけである.このため従来手法より命令発行機構が単 純になり,動作周波数の向上や回路規模の削減が可能である. 24 S1 S2 D Tag S1 S2 D Data Write Bypass S1 S2 D S1 S2 D S1 S2 D S1 S2 D S1 S2 D S1 S2 D ALU D S1 S2 D S1 S2 D S1 S2 D S1 S2 D S1 S2 D S1 S2 D ALU D S1 S2 D S1 S2 D S1 S2 D S1 S2 D S1 S2 D S1 S2 D ALU D S1 S2 D S1 S2 D S1 S2 D S1 S2 D S1 S2 D S1 S2 D Cache D Decode Rename Schedule Register File VLIW Instruction Queue Map/Schedule Dispatch/Read Execute 図 8 VLIW 型命令キュー方式 アウトオブオーダ実行にはインオーダでのリタイア処理が必要である.VLIW 型命令キューでは命令は発行順に並べられており,命令情報は発行時に消去され る.よってリタイア処理まで命令の順番と命令情報を保持する命令ウィンドウが 必要である.VLIW 型命令キューの各エントリには,エントリが有効であること を表すフラグと命令ウィンドウのエントリ番号を格納しておく.こうすることで VLIW 型命令キューのエントリと命令ウィンドウのエントリを 1 対 1 に対応させ ることができる. VLIW 型命令キューにはソースオペランド読み出しに必要な情報を格納してお く.こうすることにより命令ウィンドウへのリードアクセスと同時にレジスタファ イルへのリードアクセスを行うことが出来る.集中命令ウィンドウ方式ではソー スオペランドを読み出すために必要な情報が命令ウィンドウに格納されていたた 25 S1 S2 D Source Register # Destination Register # S1 5 S2 8 D 10 Schedule SFM-Stage2 (A) S1 10 S2 8 D 11 (B) Schedule OP1-Stage3 MAP S1 S2 D S1 S2 D S1 0 S2 2 D 8 S1 1 S2 2 D 5 S1 6 S2 8 D 9 S1 S2 D S1 3 S2 4 D 7 S1 2 S2 1 D 3 S1 S2 D S1 5 S2 3 D 6 S1 S2 D S1 S2 D S1 S2 S1 S2 S1 S2 S1 S2 OP1 D D D D BRC Stage 3 Stage 2 Stage 1 Stage 0 VLIW instruction queue SFM ROB LREG READ PORT SEL/RD ALU EAG EXEC ROB WRITE PORT WR 図 9 VLIW 型命令キューへの命令スケジューリング例 め,まず命令ウィンドウにアクセスしてからレジスタファイルへのアクセスを行 う必要があった.これに対して,提案手法では同時にアクセスするため集中命令 ウィンドウ方式より動作周波数を向上できる. 3.1.2 VLIW 型命令キューへのスケジューリング 図 9 に SFM で実行可能な命令 A(S1=5,S2=8,D=10)をスケジューリング する例を示す.まずソースオペランド 1(S1=5)は,これを供給する命令(D=5) が SFM 命令キューの右端エントリ Stage 0 にスケジューリングされているため, Stage 1 以降で使用可能である.次にソースオペランド 2(S2=8)は,これを供 給する命令(D=8)が SFM 命令キューの Stage 1 にスケジューリングされている ため,Stage 2 以降で使用可能である.よって両方のソースオペランドが使用可能 となるエントリは Stage 2 以降であることがわかる.従って新しい命令 A は,既 にスケジューリングされている命令(S1=6,S2=8,D=9)を追い抜いて,SFM 命令キューの Stage 2 にスケジューリングされる. このように命令間に依存関係が無ければ既に命令が入っている位置より右側に 先行命令を追い越して演算器に近いエントリにキューイングできる.すなわち命 26 entry[3] entry[2] entry[1] entry[0] queue_in D Q E R D Q D E R Q E R D Q queue_out E R shift restart 図 10 VLIW 型命令キュー 1 演算器分の構造 令のアウトオブオーダ実行が可能であり,従来手法と同等の命令レベル並列度が 期待できる. なお命令レベル並列処理を実現するには,1 サイクルで複数の命令をスケジュー リングする必要がある.図 9 の例では後続命令である OP1 で実行可能な命令 B (S1=10,S2=8,D=11)についても同様に,ソースオペランドが使用可能となる 空きエントリを探してスケジューリングを行う.しかし従来手法とは異なり,同 時に考慮しなければならない命令は新たに VLIW 型命令キューにキューイングさ れる命令,つまりデコーダが 1 サイクルに出力する命令だけに限られる. 3.1.3 VLIW 型命令キューの構造と動作 命令を任意の位置にキューイング可能な命令キューは図 10 に示すシフトレジ スタで実現できる.命令スケジューリング時のキューイング機能のほかに,命令 発行時のシフト機能,分岐予測ミス時のフラッシュ機能が必要である. まずシフト機能であるが,シフト信号(shift)をアサートしクロックの立ち上 がりで図 10 で右方向にデータをシフトさせることにより実現する.このとき左 端の FF はクリアする.この動作は普通のシフトレジスタと同じである. 次にキューイング機能であるが,命令キュー段数分のキューイング信号(en- try[3:0])のうちいずれか 1 本をアサートし,命令情報(queue in)を対応する段 の FF に書き込むことで実現する.命令は 1 箇所にしかキューイングしてはならな 27 いので,キューイング信号は最大で 1 ビットのみがアサートされているワンホッ ト信号でとなっている必要がある. フラッシュ機能は,再開要求信号(restart signal)を命令キューの各エントリ を構成している FF の同期クリア入力(R)に接続し,アサートされたときに FF をクリアすることで実現する. 3.2 命令スケジューリング機構 提案手法では VLIW 型命令キューに発行順に命令を並べておくことで,発行機 構が考慮しなければならない命令数を大幅に減らしている.本節では VLIW 型命 令キューに命令を発行順に並べる方法について述べる. まず最も簡単な例として VLIW 型命令キューに 1 個の命令をスケジューリング する方法について述べる.次にスケジューラと発行機構がオーバーラップ動作す るために必要なシフトを考慮したスケジューリング方法について述べる.最後に 複数個の命令を同時にスケジューリングする方法について述べ,命令スケジュー ラを完成させる. 3.2.1 単一命令のスケジューリング 最初に 1 個の命令を VLIW 型命令キューにスケジューリングする方法について 述べる.VLIW 型命令キューの命令スケジューリングに必要な情報は,キューの エントリの空き状況およびすべてのソースオペランドが使用可能となる位置の 2 つである. VLIW 型命令キューの空き状況であるが,有効な命令が入っているエントリに は有効を示すフラグがセットされている.命令を入れるキューは,該当命令を実 行できる演算器に繋がっているキュー 1 本に絞られるので,要求演算器情報に基 づいてキューを選択することで有効を表すフラグを命令キューの段数分のビット 列として得ることが出来る. ソースオペランドが使用可能になる位置とは,真の依存関係のあるソースオペ ランドを供給する命令がスケジューリングされた位置の次段である.ソースオペ 28 ランドを供給する命令がリタイア済みで命令ウィンドウにない場合は VLIW 型命 令キューにもその命令は存在しない.この場合ソースオペランドは既に使用可能 である. ソースオペランドを供給する命令が発行済みの場合は命令ウィンドウには存在 するが VLIW 型命令キューには存在しない.ソースオペランドを供給する命令が ロード命令でない場合,ソースオペランドは命令がキューの右端に辿り着くまで 必ず使用可能になる.ソースオペランドを供給する命令がロード命令である場合 はキャッシュミスを起こしている場合がある.この場合は命令がキューの右端に辿 り着くまでにソースオペランドが使用可能になる保証はない.しかしスケジュー ラがキャッシュミスの状況を考慮するのは困難なため,発行機構で命令発行を待 ち合わせる. ソースオペランドを供給する命令が VLIW 型命令キューに存在する場合は,ま だソースオペランドは使用可能でない.この場合該当命令がスケジューリングさ れたエントリよりも後ろのエントリにスケジューリングしなければプログラム を意味どおりに実行できない.命令スケジューリングを命令順に行う場合は,真 の依存関係にある命令は既にスケジューリングされているので,発行前の命令が VLIW 型命令キューに存在しないケースはない. 図 11 のようにソースオペランドレジスタ番号を VLIW 型命令キューにブロー ドキャストし,一致するレジスタ番号を検出することで,ソースオペランドが供 給される位置を特定できる.一致するディスティネーションオペランド番号が存 在しない場合,真の依存関係にある命令は発行済みでソースオペランドはいつで も使用可能である.しかしソースオペランドレジスタ番号を VLIW 型命令キュー にブロードキャストする方法は,従来手法の Tag-Update に相当する複雑な機構と なる.ソースオペランド数が 2 個,同時命令スケジューリング数 4 個,命令キュー 段数が 4,演算器が 5 個(命令キューが 5 本)の場合 160 個の比較器が必要とな る.よってソースオペランドレジスタ番号のブロードキャストを行わずに,ソー スオペランド値供給位置を検出する機構が必要である. 提案型のスーパースカラでもレジスタリネーミングを行って論理レジスタ番号 から物理レジスタ番号への変換を行っている.物理レジスタ番号はソースオペラ 29 New instruction Source 1 Register # Source 2 Register # S1 S2 D S1 S2 D S1 S2 D S1 S2 D S1 S2 D = = = = = = = = Scheduler 図 11 ソースレジスタ番号をブロードキャストするスケジューリング機構 ンドを供給する命令と 1 対 1 に対応するため,ソースオペランドを供給する命令 のスケジューリング位置とも 1 対 1 に対応している.そこで,まず物理レジスタ 数分のテーブルを用意し,命令スケジューリング後にディスティネーション物理 レジスタ番号でテーブルに命令スケジューリング位置を格納しておく.そして後 続命令のスケジューリング時に,ソース物理レジスタ番号でテーブルにアクセス して先行命令のスケジューリング位置を読み出せばよい.VLIW 型命令キューの シフトが発生した場合はテーブル中のスケジューリング位置を更新することで, 後続命令は常に正しいスケジューリング位置を得ることが出来る. 命令スケジューリングの動作はインオーダーで行うため,命令をスケジューリ ングするタイミングではその命令が要求する論理レジスタ番号と物理レジスタ番 号は正しく対応している.論理レジスタ番号と物理レジスタ番号の対応関係が変 わった後,すなわち同じ論理レジスタに書き込む命令のスケジューリングより後 で古い論理レジスタの内容を必要とする命令のスケジューリングは行われない. このため命令のスケジューリング位置を格納するテーブルは物理レジスタ数分必 要ではなく,論理レジスタ数分だけあればよい.論理レジスタ番号でアクセスす ることで,スケジューリング位置テーブルへのアクセスのタイミングはレジスタ 30 entry_used[3:0] s1_guard[3:0] s2_guard[3:0] guard[3:0] guard[0] one-hot decoder entry[3:0] bit-fill decoder new_guard[3:0] entry[0] entry[1] guard[1] entry[2] guard[2] entry[3] guard[3] new_guard[0] guard[0] new_guard[1] new_guard[2] guard[1] new_guard[3] guard[2] Bit-fill decoder One-hot decoder 図 12 スケジューリング位置生成回路 リネーミングを行うマップテーブルと同じになる.よってスケジューリング位置 をマップテーブルに格納することができる. 命令のスケジューリング位置は VLIW 型命令キューの各エントリの空き状況を 表すビット列と同様に,依存関係にある後続命令がスケジューリングできる位置 に 0,スケジューリングできない位置に 1 がセットされた命令キュー段数分の長 さを持つビット列で表現する.このようなビット列をガードビット(Guard bit) と定義する.命令キューのシフトが発生した場合には 1 ビット右シフトし,左端 から 0 を詰めていくことでスケジューリング位置の更新を表現することが出来る. なおこのようなビット列はシフトレジスタで実現することができ,論理レジスタ 本数分のシフトレジスタをマップテーブルに追加することになる. ソースオペランドが 2 つある場合両者のガードビットのビットごとの論理和を 取ることで両方のソースオペランドが供給可能な位置を求めることが出来る.さ らにエントリの空き状況を表すガードビットとの論理和を取ることでソースオペ ランドが供給可能かつ命令がまだ入っていない位置を求めることが出来る.他に 命令スケジューリングを制約する要因がなければ,得られたビット列中で 0 となっ 31 ている位置に命令をスケジューリングできる.0 になっている位置は複数個ある 場合は,最も演算器に近い位置を選ぶことで,従来型スーパースカラのように命 令をアウトオブオーダにスケジューリングできる.0 になっている位置が見つか らない場合は,該当する命令キューに命令をスケジューリングできる位置が無い ことを表す. ガードビットの論理和から命令キューのスケジューリング位置(entry[3:0])を 求める回路をワンホットデコーダ(One-hot decoder),マップテーブルに格納す る新しいガードビット(new guard[3:0])を求める回路をビットフィルデコーダ (Bit-fill decoder)と呼ぶことにする.VLIW 型命令キューが 4 段の場合,これら の回路は図 12 に示す構成になる. 3.2.2 シフトに対応するスケジューリング VLIW 型命令キュー右端の全エントリが空になると命令キュー全体のシフトが 起こる.Dispatch/Read ステージの命令発行と Map/Schedule ステージの命令ス ケジューリングはオーバーラップ動作しているため,VLIW 型命令キューのシフ ト状況を考慮したスケジューリングが必要である.一方で Map/Schedule ステー ジの開始時点では,まだ VLIW 型命令キューのシフトが起こるかどうかは分から ない.このため VLIW 型命令キューの各エントリの空き状況やレジスタリネーミ ングの結果得られるガードビットはすべてシフト前の情報である. VLIW 型命令キューのシフトが起こる場合には,命令スケジューリングの位置 を 1 段ずらすだけでは不十分である.図 13(a)(b) に示すように,シフトが起きる 場合と起きない場合でスケジューリング可能なエントリが変わってしまう.よっ てシフトの発生状況が確定しなければ命令をスケジューリングできないことにな る.しかし,シフト状況の確定してから命令スケジューリングを行なうと,遅延 時間の増大を招き,動作周波数が低下してしまう. 最も消極的な方法は,VLIW 型命令キューの Stage 4(次サイクルの Stage 3) と Stage 0 に命令スケジューリングを行なわないことである.しかしこれでは命 令レベル並列性が低下してしまう. そこで,シフト発生時のスケジューリング結果を生成する Shift スケジューラ 32 Stage #3 Stage #2 S1 6 S2 8 D 9 S1 S2 D Stage #1 Stage #0 S1 3 S2 B D 7 S1 2 S2 B D 3 Stage #4 Stage #3 S1 S2 D S1 6 S2 8 D 9 Stage #2 Stage #1 Stage #0 S1 3 S2 B D 7 S1 2 S2 B D 3 S1 S2 D invalidate S1 6 S2 8 S1 S2 S1 3 S2 B S1 2 S2 B S1 S2 S1 6 S2 8 S1 S2 S1 3 S2 B S1 2 S2 B D 9 D D 7 D 3 D D 9 D D 7 D 3 (a) shift == 0 (b) shift == 1 図 13 VLIW 型命令キューのシフト動作 shift 1 entry_used[3:0] s1_guard[3:0] s2_guard[3:0] 0 guard[3:0] 1 shift stay 0 one-hot decoder temp_entry[4:1] one-hot decoder temp_entry[3:0] bit-fill decoder temp_guard[4:1] bit-fill decoder temp_guard[3:0] 1 entry[3:0] 0 1 new_guard[3:0] 0 図 14 単一命令のスケジューラ とシフト未発生時のスケジューリング結果を生成する Stay スケジューラの 2 つの スケジューラを用意しておき,シフト状況に応じてスケジューリング結果を選択 する図 14 の回路を構成する.シフト信号は最終段のセレクタにのみ入力し,ス ケジューラそのものには入力しないことにより,スケジューラの遅延時間を短く できる. 3.2.3 複数命令の同時スケジューリング 1 サイクルで複数個の命令を実行していくには,1 サイクルで複数の命令を VLIW 型命令キューにスケジューリングしなければならない.同時にスケジューリングす 33 る命令間に依存関係のない場合は,前節で述べたスケジューラを同時スケジュー リング命令数分並列配置するだけでよい.しかし実際の命令列は依存関係がある ため,後続命令のスケジューリング結果は先行命令のスケジューリング結果に依 存する.最も簡単な方法は同時にスケジューリングを行っている先行命令との間 に依存関係がない場合に限って同時スケジューリングを許可することだが,この 方法では命令スケジューリング能力がインオーダ発行のスーパスカラの命令発行 能力と同程度になってしまい IPC の低下を招く. スケジューリング時における命令間の依存関係は 2 種類が考えられる.まず先 行命令と同じ位置に後続命令をスケジューリングすることはできない.これは同 一演算器に同時に複数の命令を発行できないという資源制約と対応している.し かしこの依存関係は図 10 に示した VLIW 型命令キューの構造上,複数の命令を同 じ演算器の命令キューに同時にキューイングすることが出来ないため発生しない. 次に後続命令が先行命令にデータ依存している場合がある.命令スケジューリ ングはレジスタリネーミング後に行うので起こりうるデータ依存は真の依存関係 のみである.この場合後続命令は先行命令のスケジューリング結果のガードビッ トを使って,ソースオペランドが揃う位置を見つけなければならない.単一命令 のスケジューリング時にはソースオペランドのガードビットをレジスタリネーミ ング時にマップテーブルから引いていた.複数命令の同時スケジューリングでは マップテーブルからのガードビットに加えて,真の依存関係にある先行命令のディ スティーネーションガードビットをバイパスしてくる必要がある.従来手法でも 命令間の依存関係の検査はレジスタリネーミングの時点で行うため,この結果を 用いてガードビットのバイパスを制御できる. 図 15 に複数命令の同時スケジューリングを行うスケジューラの構造を示す.1 命令分のスケジューラは図 14 に示したものと同一の構成となっている.後続命令 のスケジューラはセレクタを用いて先行命令のガードビットかマップテーブルが 出力するガードビットを選択する.スケジューラには Shift スケジューラと Stay スケジューラの 2 個があるが,前段の Shift スケジューラ,Stay スケジューラの 出力するガードビットをそれぞれ入力するだけでよく,バイパス時にシフト発生 状況を考慮する必要はない. 34 shift entry_used map1_s1_guard map1_s2_guard Stay scheduler location Shift scheduler new_guard map1_s1dep map1_s2dep entry_used Stay scheduler map1_s1_guard map1_s2_guard Shift scheduler location new_guard 図 15 複数命令のスケジューラ 前節で単一命令用のスケジューラを 2 個に分割したことにより,後続命令のス ケジューラは先行命令のスケジューリングが終わり次第スケジューリングが可能 な構造になっている.サイクルの終わりに命令キューのシフト状況が確定すると 最終的なスケジューリング位置とガードビットが生成されるので,この情報に基 づき VLIW 型命令キューとマップテーブルを更新する.この動作を毎サイクル繰 り返すことにより命令のアウトオブオーダスケジューリングが可能である.2 命 令同時スケジューリング可能な命令スケジューラと VLIW 型命令キュー,マップ テーブルの接続を図 16 に示す. 3.3 命令発行機構 前節で述べた命令スケジューリング手法により,命令は VLIW 型命令キュー内 で発行順に並ぶ.このため現サイクルで発行すべき命令は VLIW 型命令キューの 右端エントリに入っており発行機構は右端エントリの命令を発行するだけでよい. 35 guard-bit update S1 S2 D S1 S2 D map1_new_guard[3:0] map2_new_guard[3:0] Instruction Scheduler Shift scheduler MAP TABLE Shift MUX Stay scheduler Shift scheduler queue1_sel map1_entry[3:0] map-to-queue selector Shift MUX Stay scheduler map2_entry[3:0] guard-bit bypass queue1_sel map1_in map2_in queue1_in queue2_sel VLIW instruction queue queue1_entry[3:0] entry[3] entry[2] entry[1] entry[0] S1 S2 S1 S2 S1 S2 S1 S2 D D D D queue2_sel map1_in map2_in queue2_in map-to-queue selector queue2_entry[3:0] entry[3] entry[2] entry[1] entry[0] S1 S2 D S1 S2 D S1 S2 D S1 S2 D 図 16 命令スケジューラと VLIW 型命令キュー,マップテーブルの接続 従来型スーパースカラが命令ウィンドウの全エントリから発行できる命令を探さ なければいけなかったのに対して,提案手法では発行する命令は既に決まってい るため Select 論理は不要である. VLIW 型命令キュー内では命令はソースオペランドが使用可能となる位置にス ケジューリングされているはずなので,従来型の手法のようにソースオペランド が使用可能か判定する必要は無い.しかし実際にはキャッシュミスにより必要と なるソースオペランドが使えない場合があり,命令が発行できない場合がある. よって命令が発行可能かどうかを判定する Wake-Up 論理は残る. 従来手法では Wake-Up 論理で全てのソースオペランドが使用可能かを判定し ていた.提案手法では VLIW 型命令キューにソースオペランドが使用可能となる 36 順番に命令が入っている.このためロード命令以外が供給するオペランドのチェッ クは不要である.よってソースオペランドごとに Wait ビットを持つ方法ではな く,キャッシュミスを起こしたロード命令のレジスタ番号が含まれているかどう かをチェックするだけでよい. 具体的にはロード命令のディスティネーションレジスタ番号をバッファに記憶 し,VLIW 型命令キューの右端エントリの命令が要求するソースレジスタ番号が, 記憶されているレジスタ番号と一致する場合に命令発行を待ち合わせる.記憶し ているレジスタ番号への書き込み要求が発生したタイミングでバッファからレジ スタ番号を削除する.このバッファのエントリ数はキャッシュミス発生時に停滞 しうるロード命令の最大数分だけでよい. 命令発行機構は命令が発行可能かを判定すると同時に,各種バイパス制御も行 う.提案手法のスーパースカラは演算器後段のパイプラインレジスタから演算器 入力へのバイパスとレジスタファイルリードポートへのバイパスを有する.バイ パスの制御は命令スケジューリング時に行うことができそうであるが,実際には キャッシュミスによって命令発行のタイミングがずれる可能性があるので,命令 発行時に制御する. VLIW 型命令キューの右端エントリの全命令が発行可能な場合はシフト信号を アサートする.シフト信号は命令キュー本体と命令スケジューラ,マップテーブ ルに通知され,キューのシフトとそれに伴うガードビットの更新が行われる.い ずれの操作も Tag-Update のような複雑な機構ではなく,シフトレジスタで容易 に実装可能な 1 ビット右シフトと左端への 0 詰めで実現できる. 3.4 より高度な命令スケジューリング機構 前節で述べたスケジューラにより,命令のアウトオブオーダ実行が可能である. 本節では前節までのスケジューラを拡張し高度なスケジューリングを行う手法に ついて述べる. まずレジスタファイルに制約がある場合に対応する手法を提案する.次にキャッ シュミス予測を行いキャッシュミスを起こすロード命令と,その結果を使う命令を 離してスケジューリングする方法について述べる.これら 2 つの手法は命令スケ 37 ジューリングを制約する方向に働くため,スケジューリング可能な命令数が減っ てしまう.そこでスケジューリングできなかった命令を追い越して後続命令のス ケジューリングを行う手法についても述べる. 3.4.1 ポートスケジューリング 前節までに説明した命令スケジューリング機構と命令発行機構は,レジスタ ファイルのポートに制約が無いことを前提としていた.しかし 2 章で述べたよう にポート数や同時アクセスできるエントリに制限の無い多ポートのレジスタファ イルを実現するのは困難であるため,レジスタファイルへのアクセスには制約が ある.本節では提案手法の命令スケジューリング機構と命令発行機構をバンク構 成,ポート数削減に対応させる方法について述べる. バンク構成を考慮したスケジューリング: レジスタファイルをマルチバンク構成にすると,バンクが競合しレジスタファイ ルにライト要求を出すことが出来ない場合が生じる.よって発行時にバンクの調 停を行う必要があり,バンクを割当てられなかった命令は発行されずに VLIW 型 命令キューに留まる.VLIW 型命令キューに命令が留まると,VLIW 型命令キュー のシフトは起こらず,結果として性能の低下を招く. 性能低下を防ぐためには命令スケジューリング時に要求するバンクが既に使わ れていないかチェックすればよい.これをライトバンクの割当と呼ぶことにする. ライトバンクの割当を行なうために,VLIW 型命令キューに各命令ごとの情報 とは別に,各段ごとのバンク占有状況を表すフラグ(AWP BUSY0-3[3:0])を用 意する.スケジューリング時には,これらのフラグのから命令が要求するバンク を選び,図 17 に示すように横方向に連結したビット列(AWP GUARD[3:0])を 生成する.このビット列はすでにバンクが占有されている位置に 1 がセットされ ているガードビットとみなすことができ,他のガードビットと論理和を取ること でバンク構成を考慮したスケジューリングが可能になる. リードポート数削減を考慮したスケジューリング: レジスタファイルのリードポートを削減すると,同じ段にスケジューリングさ れた命令間でリードポートの調停を行う必要がある.調停の結果リードポートが 38 AWP_BUSY New Instruction Type : SFM S1 5 S2 8 D 10 D 10 awp_busy W0 W1 W2 W3 001 100 010 001 0 1 0 1 awp_guard W2 0 1 0 0 s1g 0 10 1 01 0 s2g 0 10 01 0 1 0 0 0 entry Scheduler 11 01 01 0 new_guard awp_guard 0 11 0 00 MAP/SCHEDULE W0 W1 W2 W3 0 1 0 0 W0 0 W1 0 W2 1 W3 0 W0 1 W1 0 W2 0 W3 1 W0 W1 W2 W3 0 1 0 1 S1 S2 D S1 S2 D S1 0 S2 2 D 8 S1 1 S2 2 D 5 S1 6 S2 5 D 9 S1 S2 D S1 3 S2 2 D 7 S1 2 S2 0 D 3 S1 S2 D Source Register # Destination Register # Not requested SFM ROB LREG ALU READ PORT S1 S2 D S1 5 S2 3 D 6 S1 S2 D S1 S2 D S1 S2 S1 S2 S1 S2 S1 S2 OP1 D D D D BRC Stage 3 Stage 2 Stage 1 Stage 0 VLIW Instruction Queue SEL/RD EAG EXEC ROB WRITE PORT WR 図 17 ライトポートスケジューリング 割当てられなかった命令は発行されず VLIW 型命令キューに留まる.この結果性 能が低下してしまう. そこでスケジューリング時にリードポートが使えないエントリにはスケジュー リングしないという規則を追加するとよい.これをリードポートの割当と呼ぶこ とにする. 具体的にはライトバンクの割当と同様に,要求するリードポートの占有状況 (ARP BUSY S1/S2[3:0])を VLIW 型命令キューの段ごとに記憶しておき,命令 スケジューリング時にガードビットとして扱うことで実現できる. しかしこれだけではバイパスが使える場合でもリードポートを占有してしまい 必要以上に命令スケジューリングを制限してしまう.そこでソースオペランドの ガードビットを図 18 に示すように変形し,ソースオペランドを得るためにレジス タファイルへアクセスを行わなければならないことを示すリードポート要求ビット (ARP REQ S1/S2[3:0])を生成する.生成した要求ビットと占有ビットの論理積を 取ることで,バイパスの使用を考慮したガードビット(ARP GUARD S1/S2[3:0]) を生成できる. 39 s1 5 s1g 0 0 0 1 s2 8 s2g 0 0 1 1 arp_busy_s1 arp_req_s1 10 11 11 00 arp_guard_s1 10 00 arp_busy_s2 arp_req_s2 10 11 10 00 arp_guard_s2 arp_guard_s1 1 0 0 0 S1 5 S2 8 D 10 10 00 s1g 0 10 1 01 0 s2g 0 10 01 0 New Instruction Type : ALU 11 0 0 0 0 entry Scheduler 11 0 01 01 0 new_guard arp_guard_s2 1 0 0 0 MAP/SCHEDULE S1 1 S2 1 ARP_BUSY S1 0 S1 1 S2 0 S2 1 S1 1 S2 1 W0 W1 W2 W3 AWP_BUSY W0 0 W0 1 W1 1 W1 0 W2 1 W2 1 W3 1 W3 1 W0 W1 W2 W3 S1 S2 D S1 S2 D S1 0 S2 2 D 8 S1 B S2 2 D 5 S1 6 S2 8 D 9 S1 S2 D S1 3 S2 B D 7 S1 2 S2 B D 3 0 1 1 1 0 1 0 1 S1 S2 D Source Register # B Use bypass Destination Register # Not requested SFM ROB LREG READ PORT ALU S1 S2 D S1 5 S2 3 D 6 S1 S2 D S1 S2 D S1 S2 S1 S2 S1 S2 S1 S2 OP1 D D D D BRC Stage #3 Stage #2 Stage #1 Stage #0 SEL/RD EAG EXEC ROB WRITE PORT WR VLIW Instruction Queue 図 18 リードポートスケジューリング 3.4.2 LD-USE 命令のスケジューリング ロード命令の結果を使用する命令を LD-USE 命令と呼ぶ.LD-USE 命令はロー ド命令がキャッシュミスを起こしていると発行することはできず,VLIW 型命令 キューの中に残り続ける.このため命令キューのシフトが抑止され新たな命令を 発行できなくなり,IPC が低下する. 命令スケジューリング段階でキャッシュミスの発生を予測できれば,ロード命 令と LD-USE 命令をある程度,例えば L1 データキャッシュのミスペナルティサイ クル数分だけ離してスケジューリングできるようになる.この隙間に依存関係の ない後続命令をスケジューリングできれば,キャッシュミスの影響を軽減できる. 本節ではまずロード命令のキャッシュミス発生とそのペナルティが何らかの方 法で予測可能であるという前提に立ち,命令間を意図的に離してスケジューリン グする方法について述べる.次にロード命令のキャッシュミスペナルティを予測 する方法について述べる. 命令間を意図的に離すスケジューリング: 40 S1 1 S2 8 D 9 S1 3 S2 4 D 8 entry scheduler 00 01 new_guard 0 0 01 Data dependence S1 S2 D S1 1 S2 8 D 9 S1 S2 D S1 S2 D S1 S2 D S1 3 S2 4 D 8 ROB LREG READ PORT S1 1 S2 8 D 9 S1 3 S2 4 D 8 entry scheduler 00 11 Data dependence Latency=2 EAG S1 1 S2 8 D 9 S1 S2 D S1 S2 D OP1 S1 S2 D S1 S2 D S1 3 S2 4 D 8 (a) Always assume latency==1 00 01 new_guard+ latency ROB LREG READ PORT EAG OP1 (b) Use left-shifted new_guard 図 19 ガードビットの左シフト これまでのスケジューリング機構は,命令の結果を次のサイクルに使うことが できるという前提に立っていた.このためソースオペランドが使用可能になる位 置を表すガードビットは図 19(a) に示すように,供給する命令のスケジューリン グ位置を含む右側が 1(使用不可),左側が 0(使用可)というビット列で表現し ていた.もしソースオペランドが供給されるまでのサイクル数が分かるのであれ ば,そのサイクル数分だけガードビットを左シフトしておくことで,ソースオペ ランドが使用可能になる位置を正確に表現できる. 図 19(b) のようにガードビット生成時にあらかじめ左に 1 ビットシフトを行う と,ソースオペランドを供給する命令の直後に命令をスケジューリングすること はできず,1 命令分離れた位置からスケジューリングが可能になる.すなわちレ イテンシが 2 の演算器に合わせたスケジューリングが可能になる.これを拡張し て,キャッシュミスが予測される場合はキャッシュミスペナルティー分だけガー ドビットを左シフトすることで,結果を使う命令を離れた位置にスケジューリン グさせることができる. LD-USE ミスペナルティー予測: ガードビットを左シフトしておくことで,命令間を意図的に引き離すスケジュー リングが可能である.次に必要となるのはロード命令と LD-USE 命令間を何命令 分離すべきかという情報である. もし先行ロード命令がキャッシュミスを起こすのであれば,L2 や主記憶にまで 41 アクセスする時間分だけ命令間をあけるということが考えられる.しかし VLIW 型命令キューの段数は有限である.またロード命令がキャッシュにヒットする場 合に誤って,大きなキャッシュミスペナルティーを予測し,ロード命令と LD-USE 命令の間をあけてしまうと,IPC が大幅に低下してしまう. そこでロード命令数分の数ビットの飽和カウンタを用いて,過去にキャッシュ ミスを頻発した命令は飽和カウンタをインクリメント,キャッシュがヒットし続け ている命令には飽和カウンタをデクリメントし,カウンタ値をペナルティの予測 値として得る方法を提案する.実際にはロード命令数分のカウンタは用意できな いので,分岐予測テーブル(PHT)と同程度のエントリ数を持つ LUMP(Load Use Miss Penalty)テーブルを用意し,プログラムカウンタと過去数回分の分岐 方向(パス履歴)から LUMP テーブルのインデックスを生成する方式とする.こ のようなインデックスは分岐予測テーブルと同等なので,分岐予測器に LUMP テーブルを組み込むことにし,分岐予測器と同じステージで動作させる.LUMP テーブルの更新は,分岐予測テーブルと同様にロード命令のリタイア時に行うこ とでハードウェア量の節約が出来ると思われる. このようにして得られた予測値を利用して,キャッシュミスを引き起こしそう なロード命令に依存する LD-USE 命令を引き離してスケジューリングすることが できる. 3.4.3 追い越し命令スケジューリング これまでの命令スケジューリング機構は,命令スケジューリング作業をインオー ダで行っていた.この場合スケジューリング出来ない命令があると,後続命令を スケジューリングすることは出来ない.命令がスケジューリング出来ない状況と いうのは命令キューの長さが足りない場合である.このため命令キューを伸ばせ ばスケジューリングの機会を増やすことが出来る.しかし命令キューの段数を増 やすことはスケジューラの遅延時間増加に直結する.提案手法のスケジューラは 単一命令のスケジューラは複雑ではないが,複数命令のスケジューラは単一命令 のスケジューラがカスケード接続された構造を持っているため,スケジューラの 遅延時間増加をできるかぎり減らしたい. 42 一方で,ある命令が命令キューにスケジューリングできない場合であっても, 後続命令はスケジューリングできる可能性がある.本節ではスケジューリングで きない命令を追い越して後続命令をスケジューリングする方法について述べる. 追い越しスケジューリングのためにはまず,スケジューリングできなかった命 令を格納しておくバッファが必要になる.バッファにはレジスタリネーミング結 果を含めた命令の情報すべてを記憶しておく必要がある.またスケジューリング 成功,失敗に関わらず,命令ウィンドウのエントリは確保しておき,エントリ番 号をバッファと対応させておく必要がある.この情報は命令を正常にリタイアさ せるために不可欠である. 次にソースオペランドのガードビットは論理レジスタではなく物理レジスタに 対応させる必要がある.これは追い越しスケジューリングではガードビットにつ いても逆依存や出力依存が起こるためである.またスケジューリングに失敗した 命令の結果を使う命令は真のデータ依存の関係にあるため,スケジューリングで きない.これらの依存関係はインオーダにスケジューリングを行う限り暗黙のう ちに満たされていた. またストアバッファなどの資源に起因するデッドロックも起こりうる.このデッ ドロックを解消するには,命令スケジューリングの段階でストアバッファの予約 が必要になる.ストアバッファの予約が出来ない場合は命令スケジューリングし てはならない. 以上のことを満たすようにスケジューリング機構を改良すると,命令の追い越 しスケジューリングが可能になる.追い越し可能な命令数の上限は同時にスケ ジューリング可能な命令数と同一にすることで,スケジューラの数が増えること はない.このためスケジューリング機構は従来型スーパースカラの命令発行機構 のように複雑にはならない. 3.5 ARMVLIW モデル ARMVLIW モデルは,提案手法である VLIW 型命令キュー方式を用いたスー パースカラプロセッサである.パイプライン構成は図 20 に示すように,フロン 43 restart_signal/restart_addr out-of-order x5 SFM ARM instruction x2 IA ALU Internal instruction x4 IF ARM-D I1 RET-AS HOST-D WR-EXEC bypass MAP SEL/RD SCH EAG OP1 BP in-order x4 WR RETI L1-D-Cache miss Host SWI L2 BRC VLIW instruction queue EXEC L1-I-Cache miss ARM Front-end VLIW Back-end 図 20 ARMVLIW モデルのパイプライン構成 トエンドは ARMSS モデルと同一で,バンクエンドに VLIW 型命令キューが挿入 された形をとる. ARMVLIW モデルのバックエンド構成を図 21 に示す.分解された命令は ARMSS モデルと同様に MAP TABLE にてレジスタリネーミングされ,その結果を用い てスケジューリング機構が,VLIW 型命令キュー VLIW QUEUE の適切な位置 に命令をキューイングする.またスケジューリングと同時に,命令ウィンドウ PREGS TAG へのキューイングも行う.このとき命令キューのエントリには命令 ウィンドウのエントリ番号が記憶される. VLIW 型の命令キューはソースオペランドのタグ情報とリオーダーバッファ上 での位置を 8 エントリ分記憶している.このようなキューが各演算器 SFM,ALU, EAG,OP1,BRC 毎にあるので,全体のエントリ数は 8×5=40 エントリとなっ ている.しかし実際に使えるエントリ数は命令ウィンドウのエントリ数の 32 個 までとなる. 前述のように命令の発行は右端のみからとなっており,右端には発行判定機構が 接続されている.発行判定機構が発行を許可すると,リオーダバッファ PREGS VAL, レジスタファイル LREGS VAL からソースオペランドが読み出され,演算器入 力バッファ IBRC,ISFM,IALU,IEAG,IOP1 に投入される. 命令発行以後の動作は ARMSS モデルと同様で,EXEC ステージ,WR ステー ジ,RETI ステージ,SWI ステージが命令を処理していく.図 22(a)-(f) に AR- 44 IBUF PREG CTRL PREGS TAG hst2 1-4 PREGS VAL MAP TABLE VLIW QUEUE SRC SEL LREGS VAL OBUF IBRC BRC OBRC ISFM SFM OSFM IALU ALU OALU IEAG EAG OEAG IOP1 OOP1 OP1 RETI CTRL reti_bpred1 reti_retas1 reti_stbf1 SWI L2 restart_signal 図 21 ARMVLIW モデルのバックエンド構成 MVLIW モデルの各ステージの動作を示す. 45 PREG CTRL hst2 1-4 PREGS TAG PREGS VAL MAP TABLE VLIW QUEUE SRC SEL LREGS VAL IBR C BR C OBR C ISFM SFM OSFM IAL U AL U OAL U IEAG EAG OEAG IOP1 PREG CTRL hst2 1-4 PREGS TAG PREGS VAL MAP TABLE VLIW QUEUE OOP1 SRC SEL LREGS VAL IBR C BR C OBR C ISFM SFM OSFM IAL U AL U OAL U IEAG EAG OEAG IOP1 OP1 RETI CTRL reti_bpred1 reti_retas1 reti_stbf1 L2 SWI hst2 1-4 PREGS TAG PREGS VAL MAP TABLE VLIW QUEUE reti_bpred1 reti_retas1 reti_stbf1 RETI CTRL restart_signal SWI (a) MAP stage PREG CTRL restart_signal SRC SEL IBR C BR C OBR C ISFM SFM OSFM IAL U AL U OAL U IEAG EAG OEAG IOP1 PREG CTRL hst2 1-4 PREGS TAG PREGS VAL MAP TABLE VLIW QUEUE OOP1 SRC SEL LREGS VAL IBR C BR C OBR C ISFM SFM OSFM IAL U AL U OAL U IEAG EAG OEAG IOP1 OP1 reti_bpred1 reti_retas1 reti_stbf1 L2 SWI hst2 1-4 PREGS TAG PREGS VAL MAP TABLE VLIW QUEUE SRC SEL LREGS VAL reti_bpred1 reti_retas1 reti_stbf1 RETI CTRL SWI restart_signal IBR C BR C OBR C ISFM SFM OSFM IAL U AL U OAL U IEAG EAG OEAG IOP1 PREG CTRL hst2 1-4 PREGS TAG PREGS VAL MAP TABLE VLIW QUEUE OOP1 reti_bpred1 reti_retas1 reti_stbf1 SWI L2 restart_signal (d) WR stage IBR C BR C OBR C ISFM SFM OSFM IAL U AL U OAL U IEAG EAG OEAG SRC SEL LREGS VAL IOP1 OOP1 OP1 OP1 RETI CTRL OOP1 OP1 (c) EXEC stage PREG CTRL L2 (b) SEL/RD stage LREGS VAL RETI CTRL OOP1 OP1 L2 RETI CTRL reti_bpred1 reti_retas1 reti_stbf1 SWI restart_signal (e) RETI stage (f) SWI stage 図 22 ARMVLIW モデル各ステージのモジュールの動作 46 L2 restart_signal 4. 評価と考察 提案手法の有用性を確認するため,従来型の命令発行機構を持つ ARM スーパー スカラプロセッサである ARMSS モデル,提案型の VLIW 型命令キューを持つ ARM スーパースカラプロセッサである ARMVLIW モデルの評価を行った.まず 従来手法と提案手法の両方について,RTL レベルのソフトウェアシミュレータを 用いて IPC を測定した.また従来手法と提案手法両方のハードウェアを Verilog- HDL を用いて記述し,Xilinx 社の FPGA Virtex-II[14] 向けに論理合成・配置配 線を行い,回路規模と遅延時間の測定を行った.本章ではこれらの結果について 述べ,IPC× 動作周波数で表される単位時間当たりの命令実行数により総合評価 を行う. 4.1 シミュレータによる評価 本節では RTL レベルシミュレータによる IPC の測定について述べる.評価に 用いる IPC は分解後の内部命令の IPC とする.これはマルチプルロードストア 命令のように最大 35 個の内部命令に分解される複雑な命令と,単純な加算命令の ように分解されない命令を同じ 1 命令として評価することはできないためである. 本節ではまずシミュレーション条件を述べる.次に比較対象として理想的なレ ジスタファイルを用いた場合について,従来手法と提案手法の IPC 測定結果を 示す.さらに制約のあるレジスタファイルを用いた場合について,従来手法と提 案手法の IPC 測定結果を示し,ライトバンク割当,リードポート割当,LD-USE 予測,追い越しスケジューリングを適用した場合の結果を示す. 4.1.1 シミュレーション条件 ベンチマークプログラムは Mibench[15] を用いた.全てのシミュレーションモ デルで共通な条件を表 1 に示す. L1 データキャッシュはノンブロッキング構成のため,先行ロード命令がキャッ シュミスを起こしていた場合でも後続ロード命令を発行できる.後続ロード命令 47 表 1 シミュレーション条件 Branch prediction g-share pht(2bit) × 8192 entry index = PC[14:2] xor ghr[5:0] << 7 RET-AS 8entry Re-rder Buffer 32entry Store Buffer 8entry Cache Line 64byte L1-I-Cache 4way, 16KB, Miss-penalty 8cycle L1-D-Cache 4way, 16KB, Miss-penalty 8cycle, Non-blocking L2-Cache 4way, 2MB, Miss-penalty 100cycle 表 2 シミュレーションモデル(理想レジスタファイル) モデル名 命令発行 レジスタファイル ARMSS+5 従来手法 最大 12R/5W 制約なし ARMVLIW+5 提案手法 最大 12R/5W 制約なし のキャッシュミスを記憶するバッファは 1 命令分用意する.このため先行ロード 命令がキャッシュミスを起こしているとき,後続命令がキャッシュミスを起こし た場合は,先行ロード命令のキャッシュミスが解消するまで,新たなロード命令 を発行することは出来ない. 4.1.2 理想的なレジスタファイルを用いた場合 リードポート,ライトポートに制約の無い理想的なレジスタファイルを用いた 場合の IPC 測定を行った.表 2 にシミュレーションモデルの設定を示す.図 23 に 各ベンチマークごとの内部命令の IPC を示す. 従来手法に対して提案手法の IPC の低下は平均 0.24%程度と差はほとんど無い. このことから理想的なレジスタファイルがある場合,提案手法は従来手法と同等 48 -/.10324265 -7.8079/:; <=5 # +, + " " ! ! " & '( #% #$ ' ' '( ) *) 図 23 内部命令 IPC(理想レジスタファイル) の命令スケジューリングができることが分かる. ベンチマークプログラムのうち,CRC32 と blowfish encode/blowfish decode で は従来手法,提案手法ともに IPC が 0.1 以下と低い値になっている.これはサイ クル数に対してシステムコール(SWI 命令)の回数が多いためである.実際の プロセッサであれば SWI 命令のリタイア時にソフトウェア割り込みが発生し OS が管理する割込みルーチンがシステムコールを実行するが,評価に用いたシミュ レータでは OS の無い環境でもベンチマークを走行させるために,SWI 命令がリ タイアするたびに L1 データキャッシュをフラッシュしている.このためシステム コールの回数が多いと IPC が低下してしまう.システムコールのオーバーヘッド を含めた性能測定には本物の OS が必要であるため,これらのプログラムの測定 結果は議論の対象としない. 49 .0/214323 .0/51#323768 $ ,- , * % # # " " ! ! # ' () $% $& ( * )( ( +* 図 24 レジスタファイル制約の効果,従来手法,相対 IPC 4.1.3 制約のあるレジスタファイルを用いた場合 本節ではマルチバンク構成やリードポートの削減を行った制約のあるレジスタ ファイルを用いた場合の IPC 測定結果を示す.ARMSS モデル,ARMVLIW モ デルでは,4 バンク構成で,任意のレジスタ番号にアクセスできるリードポート を 2 系統,ライトポートは各バンクごとに 1 個の合計 4 系統を持つレジスタファ イルを,リオーダーバッファ,論理レジスタとして用いた. 従来型スーパースカラの場合: 従来型のスーパースカラの場合は,命令発行時にレジスタファイルのポート制 約を満たすように,発行する命令の組み合わせを制限する.理想的なレジスタファ イルを用いたモデル(ARMSS+5)と制約のあるレジスタファイルを用いたモデ ル(ARMSS)の比較結果(IPC の相対値)を図 24 に示す. レジスタファイルに制約がある場合,IPC は平均 10.5%低下している.特に susan smoothing では IPC の低下が 18.6%と大きい. 50 .0/2103546 7 .0/2103846 7:9; $ ,- , * % # # " " ! ! # ' () $% $& ( * )( ( +* 図 25 レジスタファイル制約の効果,提案手法,相対 IPC 提案型スーパースカラの場合: 提案型スーパースカラの場合も,命令発行時にレジスタファイルのポート制約 を満たすように,発行する命令の組み合わせを制限する.理想的なレジスタファ イルを用いたモデル(ARMVLIW+5)と制約のあるレジスタファイルを用いた モデル(ARMVLIW)の比較結果(IPC の相対値)を図 25 に示す. レジスタファイルに制約がある場合は,IPC が平均 22.1%低下しており,低下 幅は従来型スーパースカラに比べて大きい.特に susan smoothing では 45.5%の 低下が生じている.提案型スーパースカラでは VLIW 型命令キューの右端からし か命令を発行できないため,発行時に組み合わせを制限する方法では,レジスタ ファイルの制約に影響を受けやすいことが分かる. ライトバンク,リードポート割当の効果: 次に,命令スケジューリング時でのライトバンク,リードポート割当の効果を 確認する.ARMVLIW+W は命令スケジューリング時にライトバンクの割当を 51 表 3 シミュレーションモデル(提案手法,レジスタファイル制約あり) モデル名 ライトバンク割当 リードポート割当 制約無し ARMVLIW+5 ARMVLIW 発行時 発行時 ARMVLIW+W スケジューリング時 発行時 ARMVLIW+WR スケジューリング時 スケジューリング時 行うモデルである.ARMVLIW+WR は命令スケジューリング時にライトバンク, リードポート両方の割当を行い,命令発行時にレジスタファイルの制約が原因で 発行が制限されることの無いようにスケジューリングを行うモデルである.表 3 に以上のシミュレーションモデルを示す.また図 26 に ARMVLIW+5 モデルと の比較結果(IPC の相対値)を示す. 命令スケジューリング時にライトバンク割当,リードポート割当を行わなかっ た場合,制約の無いレジスタファイルに比べて IPC は平均 22.1%低下する.命令 スケジューリング時にライトバンクの割当を行うことによって,IPC の低下率は 15.9%に改善する.ライトバンク割当に加えて,リードポートの割当を行うこと で,IPC の低下率を 13.2%に改善できることが分かる. 従来手法と提案手法の比較: レジスタファイルに制約がある場合の IPC を従来手法(ARMSS モデル)と提 案手法(ARMVLIW,ARMVLIW+W,ARMVLIW+WR モデル)で比較する. 図 27 に IPC の差が 1%以上みられるベンチマークの IPC を示す.また表 4 に各モ デルの IPC と,提案手法からの IPC 低下率を示す. 同じ制約のあるレジスタファイルを使った場合,従来手法(ARMSS モデル)と 比較すると,ポートスケジューリングを行わない場合は 13.2% IPC が低下する. ライトバンクスケジューリングを行うと,IPC の低下率は 6.3%に改善し,さらに リードポートスケジューリングを行うと 3.2%に改善する.このとからレジスタ ファイルに制約がある場合はライトバンクスケジューリングを行わなければなら ないことが分かる. 52 .0/2103546 798: .5/;153046 7 .5/2103046 7987 .5/2153<46 7987=/ $ ,- , * % # # " " ! ! # ' () $% $& ( * )( ( +* 図 26 ライトバンク,リードポート割当の効果,相対 IPC 4.1.4 LD-USE 予測,追い越しスケジューリング ARMVLIW+WR モデルにさらに LD-USE 予測結果を考慮したスケジューリ ング手法,スケジューリングできない命令を追い越すスケジューリング手法を適 用した場合の IPC 測定を行った.シミュレーションモデルの設定を表 5 に示す. また内部命令の IPC を図 28 に示す.なお追い越しスケジューリングでは,スケ ジューリング失敗命令を溜めておくバッファを 4 個用意し,バッファが埋まるま で後続命令のスケジューリングを続行する. まず LD-USE 予測のみを適用したモデル(ARMVLIW+WR+LUMP)は AR- MVLIW+WR モデルに対して IPC の変化はほとんど無く,一部のベンチマーク では僅かに IPC が低下している.次に追い越しスケジューリングのみを適用し たモデル(ARMVLIW+WR+OOOS)は,adpcm encode,adpcm decode など一 部のベンチマークで従来手法(ARMSS モデル)を超える IPC を示しているが, 平均的には大きな IPC 向上は見られない.LD-USE 予測と追い越しスケジューリ 53 $&%('*)() $&%+'-,-./ 0 $&%('&,-./ 0*10 $&%('&,-./ 0*102% # " ! 図 27 内部命令 IPC(制約レジスタファイル) ング両方の手法を適用したモデル(ARMVLIW+WR+LUMP+OOOS)は 追い 越しスケジューリングのみを適用したモデル(ARMVLIW+WR+OOOS)より IPC が低下している. 以上のことから,LD-USE 予測を考慮したスケジューリングの効果は見られず 逆効果となる場合があり,追い越しスケジューリングは投入するハードウェア量 を考えると大きな効果が無いと言える. 4.2 回路面積・遅延時間による評価 ARMSS モデル,ARMVLIW モデルの回路規模および動作周波数を評価するた めに,Verilog-HDL を用いてハードウェアを設計,FPGA 向けに論理合成・配置 配線を行った.本節ではまずハードウェア化したモデルとターゲットデバイスに ついて述べる.その後命令発行機構に関わるモジュール単体の論理合成結果を示 54 表 4 平均 IPC(制約済みレジスタファイル) モデル名 平均 IPC 平均 IPC 低下率% ARMSS(従来手法) 0.814 ― ARMVLIW 0.707 13.2 ARMVLIW+W 0.764 6.2 ARMVLIW+WR 0.788 3.2 表 5 シミュレーションモデル(LD-USE 予測,追い越し) モデル名 LD-USE 予測 追い越し ARMSS(従来手法) ― ― ARMVLIW+WR なし なし ARMVLIW+WR+LUMP あり なし ARMVLIW+WR+OOOS なし 4 命令まで ARMVLIW+WR+LUMP+OOOS あり 4 命令まで し,最後にキャッシュ等を含んだプロセッサ全体での論理合成・配置配線結果を 示す. 4.2.1 実装したハードウェアモデル FPGA には 12R5W のような多ポートのメモリセルは存在しないため,1R1W のメモリを使用してレジスタファイルを構成している.このためレジスタファイ ルはリードポート数,ライトポート数,ライトアドレスの組み合わせに ARMSS, ARMVLIW モデルと同等の制約がある.次に ARMVLIW モデルのスケジューリ ング機構はライトバンクスケジューリングを行う ARMVLIW+W と同じ構成と した.リードポートスケジューリングは命令スケジューリング時にガードビット値 からバイパス使用を判定する回路が新たに必要となるため,回路化を行わなかっ た.また命令キュー段数は 8×5,命令ウィンドウ数は 32 エントリとしている. 55 $&%('*)+) $,%-',.&/0 1*213% $,%(',.4/0 15216% 27/89';: $,%-',.&/0 15213% 2=<,<,<,) $,%(',.4/0 15216% 2>/89';:>2=<,<?<,) # " ! 図 28 内部命令 IPC(LD-USE 予測,追い越し) また現状ではソフトウェアには搭載されているがハードウェアに未実装な機能 がある.まず演算器の構成であるが,ソフトウェアモデルでは SFM,ALU,EAG の 3 種類の演算を共通して行うことが出来る演算器 MULTI-FUNCTION を 3 個 使用する構成となっている.これに対してはハードウェアモデルでは SFM,ALU, EAG 単独の機能を持つ演算器を 3 個用意する構成となっている.次に,ソフト ウェアモデルには L1 データキャッシュがノンブロッキング構成となっているが, ハードウェアではノンブロッキング構成ではないため先行ロード命令キャッシュ ミス時に後続ロード命令を発行できない. 4.2.2 ターゲットデバイス Xilinx 社の FPGA VirtexII[14] xc2v8000 向けにキャッシュを含めたプロセッサ 全体での論理合成配置配線を行った.ターゲットデバイスの仕様を表 6 に示す. 回路規模の単位は Slice で,1 Slice には 4 入力 1 出力の論理関数 2 個と 2 ビット 56 表 6 ターゲットデバイス xc2v8000 Device resource System Gate Available 8M Slice 46,592 Filip Flops 93,184 4 input LUTs 93,184 Block RAM 168 18x18 Multiplier 168 の FF または 1 ビット × 16 エントリ 1RW+1R(同一アドレスへのリードライト 1 系統+別アドレスへのリード) の Distributed RAM として使用することが出 来る.Block RAM は 18Kb の 2RW(同一アドレスへのリードライト 2 系統)構 成の Dual-Port RAM で 16K×1 ビットから 512×36 ビットまでの 6 種類の構成 をとることができる. ARMSS モデル,ARMVLIW モデル共に,キャッシュメモリのデータ,分岐予 測器の予測テーブルは Block RAM を使用している.またキャッシュメモリのタ グとレジスタファイルは Distributed RAM を使用している.そのほか回路には プロセッサ本体以外に,外部とのインターフェースモジュールが含まれている. 論理合成には Synplicity 社の論理合成ツール Synplify Pro 8.8.0.4 を用いた. 配置配線には Xilinx 社の ISE 7.1.04i に含まれている配置配線ツールを用いてい る.目標動作周波数は 33MHz を指定し速度優先での論理合成・配置配線を行っ ている. 4.2.3 モジュール単位の論理合成結果 ARMSS モデルについて,モジュールごとの論理合成結果を表 7 に示す.なお モジュール単体では配置配線は出来ないので動作周波数は論理合成終了後の概算 値である.ARMD は命令分解機構,ALU は 16 種類の ARM データ処理命令を実 行できる演算器(後段パイプラインレジスタ,バイパス機構含む)である.MAP 57 表 7 ARMSS モデル(従来手法)モジュール単位の論理合成結果 モジュール 回路規模 [Slice] 概算動作周波数 [MHz] 3,775 64.2 ALU 395 214.1 MAP 11,045 43.3 SEL READ 2,893 76.6 ARM-D 表 8 ARMVLIW+W モデル(提案手法)モジュール単位の論理合成結果 モジュール 回路規模 [Slice] 概算動作周波数 [MHz] 3,775 64.2 ALU 395 214.1 MAP 9,230 43.8 SEL READ 3,254 76.6 ARM-D は命令ウィンドウ(WakeUp 論理,Select 論理を含む)とマップテーブルの実体 があるモジュールで,パイプラインステージでいうところのバックエンド部分の 動作を担当する.SEL READ はリオーダバッファ,論理レジスタ等のレジスタ ファイルの実体があるモジュールである. ARMVLIW+W モデルについて,モジュールごとの論理合成の結果を表 8 に 示す.動作周波数は論理合成終了後の概算値である.ARMD,ALU については ARMSS モデルと同一のものである.MAP には VLIW 型命令キューと命令ウィ ンドウ,マップテーブルの実体があり,SEL READ はリオーダーバッファ,論理 レジスタ等のレジスタファイルの実体がある. 命令ウィンドウ,VLIW 型命令キューを含む MAP モジュールの回路規模は, ARMSS モデルに対して ARMVLIW+W モデルが 16.43% 小さくなっている. 58 表 9 プロセッサ全体での回路規模・動作周波数 モデル 回路規模 [Slices] 最大遅延時間 [ns] 動作周波数 [MHz] ARMSS(従来手法) 31,930 49.458 20.219(100%) ARMVLIW 30,382 38.209 26.172(129.4%) 4.2.4 プロセッサ全体での論理合成・配置配線結果 従来手法(ARMSS モデル)と提案手法(ARMVLIW モデル)のプロセッサ全 体での論理合成・配置配線結果を表 9 に示す.クリティカルパスの遅延時間はデ バイスの配線結果が含まれており,実際のデバイスの遅延時間に相当する. モジュール単位の合成結果では,ARM-SS モデルと ARM-VLIW-W モデルで 概算動作周波数に差が無かったが,配置配線まで行うと 従来手法の最大遅延時間 より提案手法お最大遅延時間が 11.249[ns] 短くなっていることが分かる.最大動 作周波数で表すと 20.219[MHz] から 26.172[MHz] に 29.4%向上している. ARMSS モデルでは命令ウィンドウ中のソースレジスタ番号を格納する FF が 始点となり,WakeUp 論理,バイパス制御信号生成,Select 論理を通過し,演算器 手前のパイプラインレジスタへ至る経路がクリティカルパスになっている.よっ て 2 章で述べたように Select/Read ステージがクリティカルパスになっている. 演算器手前のパイプラインレジスタや演算器後段のパイプラインレジスタにある 命令のディスティネーションレジスタ番号は,命令ウィンドウ全エントリのソー スレジスタ番号と一致比較されるため,多数の配線が必要になる.このことが配 置配線結果に悪影響を与えている. これに対して ARMVLIW+W モデルではクリティカルパスは L1 データキャッ シュ内で閉じている.よって VLIW 型命令キュー,命令スケジューリング機構, 命令発行機構はクリティカルパスには含まれていない. また回路規模では提案手法(ARMVLIW+W モデル)は従来手法(ARMSS モ デル)から 1548 Slice,4.85%削減されている. 59 表 10 IPC× 動作周波数による評価 モデル 内部命令 IPC 動作周波数 [MHz] IPC× 動作周波数 ARMSS(従来手法) 0.814 20.219(100.0%) 16.47(100.0%) ARMVLIW+W 0.764 26.172(129.4%) 19.98(121.3%) 4.2.5 IPC を含めた総合評価 シミュレータによって測定した IPC の平均値,およびプロセッサ全体の論理合 成・配置配線結果から,IPC と動作周波数の積で表される単位時間当たりの実行 命令数を求めると表 10 となる.提案手法(ARMVLIW+W モデル)は従来手法 (ARMSS モデル)に対して IPC が低下しているものの,動作周波数は向上して おり IPC× 動作周波数 で表される性能で 21.3%向上している.よって提案手法 は従来手法に対して有効である. 4.3 考察 前節で得られた結果について,レジスタファイルに制約がある場合の提案手法 の IPC 低下,LD-USE ミスペナルティ予測と追い越しスケジューリング,命令ス ケジューラの拡張,異種命令混在実行の 4 つの観点から考察を述べる. 4.3.1 レジスタファイルに制約がある場合の IPC 低下 4.1 節より,提案手法はレジスタファイルの制約に従来手法より影響を受けや すいことが分かった.一部のベンチマークではライトバンク,リードポート割当 を行なわない場合 40%以上も IPC が低下する.また IPC の低下は同じレジスタ ファイル構成を持つ従来手法と比べて大きい. 3 章で述べたように,ライトバンク割当はリードポート割当より単純な回路で 実現可能である.一方でレジスタファイルのバンク数を増やすことは回路規模の 面から不可能なので,提案手法では少なくともライトバンク割当を併用すべきで ある. 60 リードポート割当については,スケジューリング済み命令からのバイパスを考 慮しなければならないため,ライトバンク割当よりも複雑である.リードポートは バンクのセットのコピーを用意するだけで簡単に増やすことができ,リードポー ト数を増やすことにより必ず IPC を向上できる保障がある.リードポート割当を 行なうべきか,そもそもリードポートを増やすべきかは追加される回路規模,動 作周波数を含めて検討していく必要がある. 4.3.2 LD-USE ミスペナルティ予測と追い越しスケジューリング 4.1 節より,LD-USE ミスペナルティ予測には効果がないことが分かった. 原因の 1 つとして考えられるのが,ロード命令と LD-USE 命令の間に実行でき る命令が少ないことである.追い越しスケジューリングにより命令スケジューリ ングの機会を増やしても,LD-USE ミスペナルティー予測の効果が現れなかった ことから,LD-USE 命令の後続にロード命令にも LD-USE 命令にも依存しない命 令がもともと少ない可能性がある.この点については今後各ベンチマークの命令 列を解析して明らかにする必要がある. もう 1 つの原因として考えられるのが,LUMP テーブルの競合である.キャッ シュミスを起こすと予測して実際にはキャッシュにヒットする場合,LD-USE 命 令を引き離したサイクル数分だけ性能が低下する.頻繁にキャッシュミスを起こ すロード命令の出現パターンを調査し,キャッシュミスを起こさないロード命令 とのエントリ競合を抑える方法を検討しなければならない. 4.3.3 命令スケジューラの拡張 4.2 節に示した論理合成・配置配線の結果から,提案手法のクリティカルパス は命令発行機構,命令スケジューリング機構ではなく,L1 データキャッシュであ ることが分かった.よって命令スケジューリングを行なう MAP ステージ,命令 発行を行なう SEL/RD ステージには時間的な余裕があるので,より高度な命令 スケジューリングを行う余地があると考えられる. 61 1 つの方向性として,スケジューリング出来ない命令を追い越すスケジューリ ング機構をハードウェアに実装して,IPC 向上を目指すことが考えられる.しか し 4.1 節に示したように,マップテーブルの規模が大きくなることに見合った IPC 向上は望めないと思われる. もう 1 つの方向性として,命令発行時に VLIW 型命令キューの右端エントリだ けでなく,もう一段左側の位置から命令の発行を許可することで,スケジューラ の性能を補う方法が考えられる.VLIW 型命令キューに入った段階でレジスタリ ネーミングが行われているので,発行時のチェックは真のデータ依存だけに限ら れる.データ依存の原因となりうる命令は,実行中またはキャッシュミスを起こ しているロード命令と命令キューの右端エントリに存在する命令のみである.こ のため依存関係の調査は従来型スーパースカラに比べて遥かに簡単である. またデータ依存の無い命令を,レジスタファイルのポートが割当てられなかっ た命令の代わりに発行することで,IPC の向上を実現できる可能性がある.この 場合でも WakeUp 機構がチェックすべき命令数は演算器数 ×2 に限られ,Select 論理は各演算器につき 2 命令に限られるため,従来型の命令発行機構より有利で あると考えられる. 4.3.4 異種命令混在実行 3 章で示したように,提案手法の命令スケジューラは既に命令キューにある命令 を上書きしてしまうことはない.また命令キューに入っている情報を直接参照す ることはない.これらのことから,命令キューには複数のスレッドからの命令が 入っていても特に問題はない.さらにスレッド間で命令セットが異なっていたとし ても,内部命令の形式が統一されていれば,なんら問題はない.このような背景 から提案手法の応用として異種命令セット混在実行プロセッサ OROCHI [16]–[19] が提案されている. 提案手法では,シフト発生時に VLIW 型命令キューの左端エントリを 0 でクリ アしていた.RISC 型命令と VLIW 型命令を混在させる場合は,この 0 でクリア の代わりに,命令キューの左端から VLIW 型命令を入れていくことで,容易に異 種命令の混在が可能となる.OROCHI プロセッサはこの形での異種命令混在実 62 行を目指している. 従来手法からマルチスレッド実行へ拡張を行なった場合は,あるスレッドのロー ド命令がキャッシュミスを起こしている間,関係のない別スレッドが動作するこ とになる.提案手法ではなんら対策を採らないと,LD-USE 命令が命令キューの 右端で停滞してしまう可能性がある.このため LD-USE ミスペナルティー予測が 必須になってくると思われる.スレッド間に優先度が決まっているのであれば, 優先度の低いスレッドがキャッシュミスを起こした場合に,命令キューやパイプ ラインをフラッシュしてしまう方法も考えられる. 63 5. まとめ 本稿では VLIW 型命令キューを用いたスーパースカラプロセッサを提案した. 従来型スーパースカラプロセッサが命令発行時に命令ウィンドウやリザベーショ ンステーションの多数のエントリから発行可能な命令を見つけるのに対して,提 案手法は命令デコード,レジスタリネーミング直後に VLIW 型命令キューに発行 順に並べ,発行時には命令キューの演算器型エントリからのみ命令を発行する. 提案手法を RTL レベルのシミュレータで動作させ IPC を測定したところ,レ ジスタファイルに制約のない場合はほぼ同じ IPC を実現できることが分かった. またレジスタファイルに制約がある場合は従来手法のスーパースカラより IPC が 13.2%低下してしまう.しかし IPC の低下率はライトバンク割当を考慮したスケ ジューリングを行うことで,6.2%,さらにリードポート割当を考慮したスケジュー リングを行うことで,3.2%に抑えることができることが分かった.以上のことか ら提案手法にはライトバンク割当を併用することが望ましいと言える. さらなる IPC 向上のため,キャッシュミスを起こしそうなロード命令とその結 果を使う命令を引き離すスケジューリング手法,またスケジューリングできなかっ た命令を追い越してスケジューリングを行う手法を提案したが,期待した効果は 得られなかった. また提案手法の回路規模,動作周波数の検討のため,Verilog-HDL を用いて従 来手法と提案手法のスーパースカラプロセッサを設計し,論理合成,配置配線を 行った.その結果,提案手法は従来手法より動作周波数が 29%向上し,回路規模 を 4.9%削減できることが分かった. IPC 測定と論理合成,配置配線の結果から単位時間当たりに実行可能な命令数 を求め比較したところ,提案手法は従来手法より性能が 21.3%向上することが分 かった. 64 謝辞 本研究に取り組むきっかけを下さり,多大なるご指導を頂いた中島康彦教授に 深く感謝の意を表します.また,本研究を行なうにあたり,多大なる御指導を頂 いた藤原秀雄教授,山下茂准教授,平素から御助言,御指導頂きました中西正樹 助教に深く感謝いたします. 本研究の内容や,本論文執筆等で有意義な指摘,暖かい助言を頂いた中田尚助 教に深く感謝の意を表します. OROCHI というテーマに一緒に取り組んだ,コンピューティング・アーキテク チャ講座ハード班の皆様,本研究の内容に関して研究報告会などで有意義な指摘 や助言を頂いたコンピューティング・アーキテクチャ講座の皆様に深くお礼申し あげます. 本研究は,半導体理工学研究センターとの共同研究によるものである.加えて, 東京大学 VDEC を通じて,Cadence 社の協力で行われたものである. 65 参考文献 [1] Hinton, G., Sager, D., Upton, M., Boggs, D., Carmean, D., Kyker, A. and Roussel, P.: The Microarchitecture of the Pentium4 Processor (2001). [2] J.M.Tendler, J.S.Dodson, J.S.Fields, H.Le and B.Sinharoy: POWER4 system microarchtecture, IBM Journal od Research and Development, Vol. 46, pp. 5–25 (2002). [3] 富士通株式会社: FR550 Series Instruction Set Manual Ver.1.1 (2002). [4] ARM Limited: ARM Architecture Reference Manual, ARM DDI0100E (2000). [5] ARM: Archtecture and Implementation of the ARM Cortex-A8 Microprocessor (2005). [6] Klaiber, A.: The Techonology Behind Crusoe Processors (2000). [7] Palacharla, S., Jouppi, N. P. and Smith, J.: Complexity-Effective Superscalar Processors, ISCA, pp. 206–218 (1997). [8] Brown, M. D., Stark, J. and Patt, Y. N.: Select-Free Instruction Scheduling Logic, IEEE , pp. 204–213 (2001). [9] 中島康彦: ARM アーキテクチャ向け命令分解型スーパースカラ, 情処研報 2006-ARC-168, pp. 77–82 (2006). [10] 小島和也, 中島康彦: OROCHI 評価用集中命令ウィンドウ型スーパースカラ の設計, 情処研報 2006-ARC-170, pp. 61–66 (2006). [11] Papworth, D. B.: Tuning the Pentium Pro Microarchitecture, IEEE Micro, Vol. 16, No. 2, pp. 8–15 (1996). [12] Gwennap, L.: Intel’s P6 Uses Decoupled Superscalar Design, Microprocessor Report, pp. 9–15 (1995). 66 [13] Yeager, K. C.: The MIPS R10000 Superscalar Microprocessor, IEEE Micro, pp. 28–41 (1996). [14] Xilinx: Virtex-II Platform FPGAs Users Mannual (2007). [15] Guthaus, M., Ringenberg, J., Ernst, D., Austin, T., Mudge, T. and Brown, R.: MiBench: A free, commercially representative embedded benchmark suite, IEEE 4th annual International Workshop on Workload Characterization (2001). [16] 島田貴史, 田端猛一, 北村俊明: 異種命令セット同時実行プロセッサ OROCHI の構成, 情処研報 2006-ARC-170, pp. 55–60 (2006). [17] Shimada, H., Shimada, T., Tabata, T., Kojima, T., Kise, K., Nakashima, Y. and Kitamura, T.: Outline of OROCHI: A Multiple Instruction Set Executable SMT Processor, IWIA (2007). [18] 須賀圭一, 山原幹雄, 中田尚, 中島康彦: 異種命令セットを同時に実行するマ ルチスレッディング・プロセッサの構成, 情処研報 2007-OS-106, pp. 17–22 (2007). [19] 中田尚, 中島康彦: 異種命令混在実行のための VLIW 型命令キューの設計, 情 処研報 2007-ARC-175, pp. 89–94 (2007). 67 発表文献 [1] 片岡晶人, 中西正樹, 山下茂, 中島康彦: VLIW 型命令キューを持つ OROCHI の命令スケジューリング機構, 情処研報 2007-ARC-172, pp. 25–30 (2007). [2] 片岡晶人, 中田尚, 中島康彦: アウトオブオーダー実行におけるマルチバン ク構成レジスタファイルの評価, 情報処理学会関西支部大会講演論文集, pp. 121–124 (2007). 68