竹下世界塔の計算機よもやま話

アクセスカウンタ

zoom RSS ぼくのかんがえたさいきょうCPU レジスタローテート

<<   作成日時 : 2013/12/28 02:26   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

 ありあまるレジスタをどう活用するか。

 レジスタリネーミングを行うプロセッサは、ソフトから参照できる論理レジスタと内部にある物理レジスタとの対応付けを行っている。

コンピュータアーキテクチャの話 155 Tomasuloアルゴリズム(1)



 では、この機構を利用したらなんかできるんじゃないだろうか。ということで並んだレジスタを使ったシフトやローテートを考えてみる。ここでは左からR0,R1,R2,…R63の順に並んでいるものとする。

・レジスタローテート
REGROL m,n,amm レジスタ番号mからnの間をamm個左にローテート
REGROR m,n,amm レジスタ番号mからnの間をamm個右にローテート
通常はm<nだが、m>nの場合はRm,Rm+1,Rm+2,…R63,R0,R1,…Rnの並びでローテート
m=nの時は無操作

例:R5,R6,R7にそれぞれ15,16,17が入っているとすると
REGROL 5,7,1 → R5,R6,R7の内容は17,15,16になる

さてこれがなんの役に?というとFIFOやスタックが作れるわけです。1サイクルでできる。

・レジスタシフト
同様にシフト命令的なものも考えられる。
REGSL m,n,amm レジスタ番号mからnの間をamm個左にシフト
左側にamm数分レジスタを保存 右側からamm数分レジスタを取り出す
REGSR m,n,amm レジスタ番号mからnの間をamm個右にシフト
左側からamm数分レジスタを取り出す 右側からamm数分レジスタを保存
通常はm<nだが、m>nの場合はRm,Rm+1,Rm+2,…R63,R0,R1,…Rnの並びでシフト
m=nの時は無操作

 これはレジスタ・ウィンドウ的にも使える。例えば、REGSLでローカル作業用のレジスタを確保し、作業後戻す。保存/退避がそれぞれ1サイクルでできる。

 が、無限にレジスタを用意することは出来ないので、確保できない場合のことも考える。
とりあえずトラップで対処しようと考えると、以下の様になる。
REGSLを実行した時は左側から供給可能なレジスタの本数が足らないとトラップ
REGSRを実行した時は右側から供給可能なレジスタの本数が足らないとトラップ
足らない分はメモリに退避しないといけないが、どうしようか。REGSL/REGSR命令でもってくる物理レジスタ番号もローテートして割り当てられると考えると、不足した分はグルっと回って論理レジスタに割り当てられて見えてしまう値なので、これを保存したり戻したりすればよい。ただしメモリアクセスのペナルティは大きい。

で、これらのメカニズムはSPARCのレジスタウィンドウほど全体に影響を及ぼすわけではなく、なかったら別に使わなくてもいい。オプション扱いにしよう。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文




ぼくのかんがえたさいきょうCPU レジスタローテート 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる