レジスタに適用された場合のバンキングとは何ですか?


13

ARMのバンクレジスタのコンテキストでのバンキングの意味に関するStackOverflowに関する質問へのこの回答は、レジスタに適用された場合のバンキングの意味について多少の混乱があることを示しています。

登録に関して銀行取引とはどういう意味ですか?

回答:


16

ワードバンキングは、レジスタに適用される場合、2つの異なる意味で使用されます。

割り込み処理用のバンクレジスタ

StackOverflowの質問に関する懸念は、(メモリ)バンクスイッチング(一部の8ビットおよび16ビットプロセッサで使用)での使用と似ています。 functionの。レジスタのコレクションの名前は、物理レジスタの異なるコレクションにマップされます。ARMv7は、16個のGPRのうち7個に1つの追加バンクを提供し、スタックポインターレジスタとリンクレジスタに5個のバンクを提供します(ARMはリンクレジスタを使用して、割り込みからの復帰に使用するPCを保存します)。Itaniumは、31の静的GPRのうち16に1つの追加バンクを提供します。(MIPSは31個のGPRのセット全体を提供し、それらを「シャドウレジスタセット」と呼びます。)

メモリバンクスイッチングとは異なり、このタイプのレジスタバンキングの主な目的は、(通常)アドレス可能なストレージを拡張することではなく、レジスタ値の保存、割り込みハンドラーによって使用される値のロード、および元の復元の必要性を回避することにより、割り込み処理を高速化することです値を登録し、割り込み処理を簡素化します。

(アプリケーションのスタックを使用してレジスタ状態を保存すると、このスタックに割り当てられたメモリがオーバーフローする可能性が開き、何らかの方法で状態保存を処理する必要がある例外が生成されます。さらに悪いことに、スタックの制限を超えたメモリのページが書き込み可能な場合、アプリケーションではなく、割り込みハンドラの特権を昇格すると、アプリケーションは書き込み許可のないページに効果的に書き込みを行います。一部のABIは、割り込み全体で1つ以上のレジスタを揮発性として定義することでこの問題を回避しました。アプリケーションの状態を上書きせずに状態を保存するためのポインターをロードするハンドラーですが、バンク付きレジスターとは異なり、このようなソフトウェア定義の割り込み揮発性レジスターは、アプリケーションソフトウェアによって変更されないように信頼することはできません)

(このようなレジスタバンクを固定ウィンドウとして使用することで、利用可能なレジスタ数を拡張することが提案されています。たとえば、「ウィンドウ付きレジスタファイルを使用した低電力プロセッサの有効レジスタ数の増加」、Rajiv A.Ravindran et al。、 2003. ItaniumおよびSPARC(「レジスタウィンドウ」という用語を使用)のように、関数呼び出しのレジスタの保存と復元のオーバーヘッドを回避するために使用されるレジスタスタックと類似していることにも注意してください。でる。)

ハードウェアに関しては、命令デコードでレジスタの名前を変更することにより、バンクレジスタを実装できます。ARMの比較的複雑な銀行システムでは、これがおそらく好ましいメカニズムです。Itaniumで使用されるような、2つのレジスタの累乗を持つ1つの追加バンクを備えたより単純なバンキングシステムの場合、レジスタファイル自体のインデックスに名前変更を組み込むことが実用的です。(もちろん、これはアウトオブオーダー実行をサポートするために使用される特定の形式の名前変更と互換性がありません。)

異なるバンクが同時にアクセスされないことを認識することにより、このメカニズムを使用した巧妙な最適化は、「3Dレジスタ」を使用することにより、高度に移植されたレジスタファイルの(ワイヤ制限)エリアオーバーヘッドを削減できます。(この手法は、SPARCのレジスタウィンドウのコンテキストで提案されました-「スーパースカラープロセッサ用の3次元レジスタファイル」、Tremblay et al。、1995年-そして、バリアントはIntelでSoEMTに使用されました-「マルチスレッド、パリティ保護デュアルコアItanium-Familyプロセッサ上の128ワードのレジスタファイル」、Fetzer et al。、2005年)

可能なアクセス数を増やすための銀行

バンクという用語がレジスタに使用される2番目の意味は、レジスタのセットをグループ(バンク)に分割することを指し、各グループは並行してアクセスできます。4つのバンクを使用すると、サポートされるアクセスの最大数が4倍に増加し、各バンクは、特定の実効アクセスカウントに対してサポートするアクセスポートを減らします(面積とエネルギー使用量を削減)。ただし、特定のサイクルでのアクセスがバンク間で均等に分散されない限り、アクセスの最大数は達成されません。必要なアクセス数に対して多数のバンクがある場合でも、最悪の場合、銀行の競合により実際のアクセス数が単一のバンクで提供されるポートの数に制限される可能性があります。

銀行の登録ファイルに関する多くの学術論文があります(Google Scholar検索)、および銀行紛争の影響を軽減するためのいくつかの一般的な手法が提案されています。最も明らかな手法は、命令のバッファリング(順不同実行の場合と同様)であり、銀行の競合の統計的な平均を提供します。また、命令の実行準備が整う前にレジスタオペランドを読み取ることも可能です(たとえば、別のオペランドがまだ準備できていない場合や、構造的ハザードが実行を遅らせる場合)。銀行へのレジスタの割り当てにより、予想される使用に関する情報を活用して、競合の可能性を減らすことができます。(ソフトウェアは、期待される方法でレジスタを優先的に使用することで支援できます。)仮想物理レジスタ名を使用すると、値がレジスタに格納されるまで物理レジスタ名(したがってバンク)の割り当てを遅らせることができます。

このタイプのバンキングは、より多くのアクセスポートのように見えるため、疑似マルチポートと呼ばれることもあります。物理構造は多くの場合、他の理由で個別のメモリアレイに分割されるため、この手法は一般的にキャッシュに使用されます。

(このようなバンキングの代替方法の1つは、レジスタファイルの複製です。レジスタファイルのコピーを2つ使用すると、同じ数の書き込みポートが必要ですが、各コピーで半分の読み取りポートが必要になります。この手法は、POWER2およびAlpha 21264高性能プロセッサで一般的に使用されています。)

概要

これらの2種類のバンキングを、バンク選択が時間的に分散するテンポラルバンキング(ARMの高速割り込み用バンクレジスタなど)と、バンクアクセスは時間的には並行するが空間的に分散する空間バンキングとを区別すると役立つ場合があります。

テンポラルバンキングは通常、ソフトウェアに公開され、割り込みのオーバーヘッド(および複雑さ)を軽減するために使用されます。(概念的には、Switch-on-Event-MultiThreadedプロセッサでのスレッドスイッチングは割り込み処理に非常に似ており、同様のメカニズムを使用してオーバーヘッドを削減できます。)

空間バンキングはISAの一部ではありません(Itaniumでは、偶数と奇数のレジスタ番号を使用するために浮動小数点レジスタのペアをロードおよびストアする必要がありました。レジスタファイルアクセス要件)を使用し、サイクルごとに多数のレジスタアクセスを提供するコストを削減するために使用されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.