3.2 2 パス限定投機システムのハードウェア設計
3.3 システムシミュレータの開発
3.3.5 PALS シミュレータの実装方法
図3.16にシミュレータの構成を示す.図中の丸はクラスを表している.太矢印 はクラス間のインクルード関係を表しており,細矢印はクラスの継承関係を表し ている.ISIS-SimpleScalarにおいて中心となるのは,SimpleScalarをもとにした プロセッサクラスであり,ISISにより提供されるキャッシュやメモリ,ポート等の ユニットを内部にインクルードしている.このうち,ポートクラスはポート間で の通信内容を定義したパケットクラスをインクルードしている.プロセッサやメ モリといった通信を行いたいユニットクラスで同一のポートクラスをインクルー ドすることにより,ユニット間での通信が実現できる.
既存プロセッサへの変更を極力抑えつつ,TUにおけるマルチスレッド実行に関 する独自の機能を実装するため,TUはISIS-SimpleScalarのプロセッサクラスで
ISIS-SimpleScalar’s libraries
source codes for hardware units of PALS
TU
palsim
link
processor core
port
packet
cache memory top
module
TU-TU port
TU-TU packet
TU-MB port
TU-MB packet
MB
TMU
2-level path predictor
compile and link
include inheritance
図 3.16: シミュレータの構成
ある isim processorクラスを継承して構築する.また,TMUやMBはPALS独 自のハードウェア機構であるため新規に実装した.
PALSの各ハードウェア機構間での通信を実現するためには,それぞれの通信に 対してポートとパケットクラスを用意する必要がある.図中では,TU-TU間通信 とTU-MB間を一例として記載している.まず,ISIS-SimpleScalarに包含された ISISのパケットクラス (packetクラス) を継承して,どのようなデータ・通知を 通信するかを定義したパケットクラスを作成する.同様にポートクラス (portク ラス) も継承し,作成したパケットクラスをインクルードする.
このように各ハードウェアクラスと通信ごとにポートクラスを作成する.それ らは,トップモジュールクラスにより接続される.トップモジュールクラスはシ ミュレータ実行時に各ハードウェアの初期化やクロックの入力を行う.これらの プログラムをコンパイル・リンクしpalsimを構築することができる.
既存プロセッサ内部に対する大きな変更点としては,プロセッサのメモリアク セスに関する処理がある.TUでは全てのメモリアクセスをMBに対して行う必要 があるが,ISIS-SimpleScalarでは各プロセッサが独自に利用するデータは全てプ ロセッサ内部のローカルメモリに格納される.このため,既存プロセッサにおけ
るローカルメモリへのアクセスを行うか否かを判定する条件分岐の結果が必ず偽 となるよう変更し,この分岐先においてMBへのポートにメモリアクセスを発行 することで,投機的なメモリアクセスを実現した.
3.3.6 システムシミュレータを中心とした評価環境
システムシミュレータpalsimでプログラムをマルチスレッド実行するためには,
投機スレッドコードを含んだバイナリファイルを作成する必要がある.投機スレッ ドコードには,マルチスレッド実行を制御するためのPALS固有の命令が含まれ ているため,一般に使用されているコンパイラではバイナリファイルを作ること ができない.図3.17にマルチスレッド化対象プログラムのソースコードをpalsim で実行するまでの流れを示す.図中の四角は入力したファイルに応じて処理を行 うプログラムである.
まず,対象プログラムのソースコードをクロスコンパイラに入力し,バイナリ ファイルを得る.クロスコンパイラは,PALSにおいてISAのベースとしている PISA用クロスコンパイラであり,GCC (GNU Compiler Collection)をベースとし ている.ここで出力されるバイナリファイルは,PALS固有の命令を含んでおら ず,命令がPISA形式になっているだけである.
そして,このバイナリファイルとデータセットを入力として,パスプロファイ ラを実行する.パスプロファイラからは,実行したバイナリファイルのプロファ イリング情報が出力される.プロファイリング情報には,プログラム全体を通し て頻繁に実行されたループ,そのループに存在するパスの分岐履歴,プログラム 全体を通したループごとのパスの実行割合等が含まれている.入力データセット を変えることによって,複数のプロファイリング情報を取得することもできる.
次に,プロファイリング情報と元のソースコードを入力として,投機コード生 成処理系[22]を実行する.投機コード生成処理系はプロファイリング情報をもと に,ソースコードから#1パスおよび#2パスを抽出し,それぞれの投機スレッド コードを作成する.このとき,レジスタの依存関係を解析し,レジスタの同期通 信を行うためのforward bitの付加を行う.また,マルチスレッド実行を制御する ためのstart2path命令やstop2path命令,パス予測失敗を判定するための分岐 命令のassert命令への置き換え等も行う.
source code
cross-compiler
executable binary
path profiler
profiling result
speculative code generator
parallelized source code
PALS simulator data
sets
data sets cross-compiler
parallelized binary
program data profiling
result source
code
(a) !"#$%&'()*
+,-./01234
(b) !"#$%&'()*
+,-./012345678
図 3.17: プログラムをpalsimで実行するまでの流れ
そして,出力した並列化ソースコードを再度クロスコンパイラに入力し,並列化 バイナリファイルを作成する.並列化バイナリファイルをpalsimでマルチスレッ ド実行すると,実行終了後にサイクル数や投機成功率等の統計情報が出力される.
この統計情報を用いて,PALSによる性能向上の評価を行うことができる.
シミュレーションパラメータを表3.2 に示す.スレッドを実行していないTU に対するTMUからのスレッド生成は,TMUにおけるパス予測に1サイクルと,
TUへの送信に1サイクルかかるものとし,2サイクルかかるものとする.TUが
start2path命令を実行し,TMUがマルチスレッド実行モードになってから最初
にスレッド生成を行うまでには,TMUの初期化等が必要になるためさらに多くの サイクルがかかる.TMUにおけるパス予測のためのカウンタテーブルのビット長 は2とする.初期値および閾値は 10 とする.
表 3.2: シミュレーションパラメータ スレッド生成 1サイクル
TMU 2レベル分岐予測を基にした2レベルパス予測 カウンタテーブルのビット長2
TU 4命令同時実行 アウトオブオーダ TU-TU間同時通信可能レジスタ数 4 MAU レイテンシ1サイクル
MB,LS各エントリ数32 4ウェイセットアソシアティブ
LRU 1次キャッシュ サイズ16Kバイト
命令・データ分離 レイテンシ2サイクル メインメモリ レイテンシ100サイクル ハードウェア機構間通信 単方向送信レイテンシ 1サイクル