...

修士論文 VLIW型命令キューを持つスーパースカラ プロセッサの命令

by user

on
Category: Documents
1

views

Report

Comments

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
Fly UP