(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024128508
(43)【公開日】2024-09-24
(54)【発明の名称】プロセッサおよびメモリアクセス例外処理方法
(51)【国際特許分類】
G06F 9/30 20180101AFI20240913BHJP
G06F 9/34 20180101ALI20240913BHJP
G06F 9/345 20180101ALI20240913BHJP
【FI】
G06F9/30 350A
G06F9/34 350A
G06F9/345 A
【審査請求】有
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2023037500
(22)【出願日】2023-03-10
(11)【特許番号】
(45)【特許公報発行日】2024-07-09
(71)【出願人】
【識別番号】000227205
【氏名又は名称】NECプラットフォームズ株式会社
(74)【代理人】
【識別番号】100149548
【弁理士】
【氏名又は名称】松沼 泰史
(74)【代理人】
【識別番号】100181135
【弁理士】
【氏名又は名称】橋本 隆史
(72)【発明者】
【氏名】江副 健司
【テーマコード(参考)】
5B033
【Fターム(参考)】
5B033BE00
5B033DA05
5B033DB09
5B033FA07
5B033FA27
(57)【要約】
【課題】メモリアクセス例外検出を高速化する。
【解決手段】ベクトルメモリアクセス命令の実行前に例外チェック命令を実行し、例外チェック命令は、ベクトルメモリアクセス命令の参照先に関する情報の例外チェックを示し、外チェックは、複数段階のレベル別処理を有し、高レベルの前記レベル別処理ほど厳密な条件に対する例外チェックを含み、低レベルの前記レベル別処理ほど先行し、例外検出の有無が確定するとき、例外チェック命令を終了する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
ベクトルメモリアクセス命令の実行前に例外チェック命令を実行するプロセッサであって、
前記例外チェック命令は、前記ベクトルメモリアクセス命令の参照先に関する情報の例外チェックを示し、
前記例外チェックは、複数段階のレベル別処理を有し、
高レベルの前記レベル別処理ほど厳密な条件に対する例外チェックを含み、
低レベルの前記レベル別処理ほど先行し、例外検出の有無が確定するとき、前記例外チェック命令を終了する
プロセッサ。
【請求項2】
前記複数段階のレベル別処理は、
前記例外チェック命令で指示されるアドレス範囲ごとに、例外の有無を判定する第1レベル別処理と、
前記第1レベル別処理よりも高レベルのレベル別処理として、
前記例外チェック命令で指示される個々のアドレスごとに、前記例外の有無を判定する第2レベル別処理と、を少なくとも有する
請求項1に記載のプロセッサ。
【請求項3】
前記第1レベル別処理において、
前記アドレス範囲ごとに、ページディレクトリの有効性を示す有効フラグを参照して、ページディレクトリの有無を判定する
請求項2に記載のプロセッサ。
【請求項4】
ページディレクトリごとに、有効性を示す有効フラグが格納されたページテーブルを保持し、
ページディレクトリに対応するページテーブルに示される有効フラグに基づいて当該ページテーブルの有効性を判定する
請求項3に記載のプロセッサ。
【請求項5】
前記ページテーブルは、前記ページディレクトリごとに属性を示し、
ページディレクトリに対応するページテーブルに示される属性における違反の有無を判定する
請求項4に記載のプロセッサ。
【請求項6】
前記例外チェック命令は、要素ごとの有効性を示すベクトルマスクを有し、
前記第2レベル別処理よりも高レベルのレベル別処理として、
前記例外チェック命令で指示される個々のアドレスのうち、前記ベクトルマスクで指示される要素ごとに、前記例外の有無を判定する第3レベル別処理を実行する
請求項2に記載のプロセッサ。
【請求項7】
前記例外チェック命令は、複数のベクトルを収容する配列ごとにアドレスと配列サイズを示し、
前記第1レベル別処理よりも高レベルかつ前記第2レベル別処理よりも低レベルのレベル別処理として、
前記アドレスから前記配列サイズで指示されるアドレス範囲ごとに、前記例外の有無を判定する第3レベル別処理を実行する
請求項2に記載のプロセッサ。
【請求項8】
プロセッサにおけるメモリアクセス例外処理方法であって、
前記プロセッサは、
ベクトルメモリアクセス命令の実行前に例外チェック命令を実行し、
前記例外チェック命令は、前記ベクトルメモリアクセス命令の参照先に関する情報の例外チェックを示し、
前記例外チェックは、複数段階のレベル別処理を有し、
高レベルの前記レベル別処理ほど厳密な条件に対する例外チェックを含み、
低レベルの前記レベル別処理ほど先行し、例外検出の有無が確定するとき、前記例外チェック命令を終了する
メモリアクセス例外処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本願は、プロセッサおよびメモリアクセス例外処理方法、例えば、ベクトルメモリアクセス命令に対する例外チェックに関する。
【背景技術】
【0002】
仮想記憶では、正確な例外をサポートすることが必要とされる。その際、命令の順序に従って例外を発生させた命令を特定することと、例外ハンドラー処理後に例外を発生させた命令から再開可能とすることが要求される。この機能を実現するため、プロセッサの各種レジスタの状態を保存し、例外発生直前の状態まで戻す機能と、メモリへのライト処理を保留しておく機能を要する。あるいは、先行する命令の例外の有無が確定するまで後続の例外が発生しうる命令の実行を保留する機能を要する。上記要求を満たさずに、正確な例外をサポートしないプロセッサも存在する。かかるプロセッサは、正確な例外を要する機能をサポートできないという制限を有する。そのような機能には、例えば、ページフォルトからのデマンドページング機能が該当する。
【0003】
ベクトルプロセッサは、1命令で複数要素を並列演算することができる。そのため、各種レジスタやメモリへのライト処理のデータ量が多く、処理の確定までの過渡的な状態を保存することが困難になりがちである。一例として、1つのベクトルストア命令に基づいて256要素を処理可能とするプロセッサを仮定する。1個のベクトルレジスタには、約16kビット(64ビット×256要素)のリソースを要する。64個のベクトルレジスタには、約1Mビット(16kビット×64個)のリソースを要する。さらに、メモリのライト処理を保留するには、1つのベクトルストア命令に対してアドレスの保存に要するリソース(例えば、48ビット)と、データの格納に要するリソース(例えば、64ビット)を要する。この仮定のもとでは、256要素に対しては、約28kビット((48ビット+64ビット)×256要素)のリソースを要する。64件のベクトルストア命令をインフライト(in-flight)で実行可能とする場合には、約1.75Mビット(28kビット×64)のリソースを要する。このように、ベクトルプロセッサにおいて過渡的な状態を保存するには膨大なデータ量のリソースを要する。このことは、実装を困難とする要因となりうる。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特許第6508382号公報
【特許文献2】特許第5630281号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
ベクトルプロセッサにより再開可能なページフォルトを実現する手法が検討されていた。例えば、特許文献1に記載の情報処理方法は、オペレーティングシステムが組み込まれた第1のプロセッサコアにより制御され、並列演算処理を実行可能な第2のプロセッサコアがページフォルトを検出すると、新たな命令発行を停止し、発行済み未完了な命令を再開可能な状態として静止するとともに、ページフォルトを検出した旨の通知を第1のプロセッサコアに対して送信し、第1のプロセッサコアは、通知の受信に応じてページフォルトが許容可能か否かの判断結果応じて、第2のプロセッサコアが有するページテーブルを更新し、判断結果に応じた指示を第2のプロセッサコアに送信する。
【0006】
しかしながら、特許文献1に記載の情報処理方法の実行には、複数のプロセッサコアを要する。そのため、当該情報処理方法は、複数のプロセッサコアを有しないコンピュータシステムにおいて実現が困難である。
【0007】
また、先行する全ての命令の例外の有無が確定するまで、例外が発生しうる後続の命令の実行を保留する場合を仮定する。その場合、後続の命令の実行を開始するまで待ち時間が発生する。このことも性能低下の要因となりうる。特に、ベクトルギャザー(VGT:Vector Gather、ベクトル集約)命令やベクトルスキャッタ(VSC:Vector Scatter、ベクトル分散)命令などのベクトルメモリアクセス命令では性能低下が顕著に生じうる。これらの命令では、メモリアクセスアドレスの確定に遅延が生ずるためである。例えば、特許文献2に記載のリストベクトルの追い越し制御方法は、外部から複数のアドレスの指定を含むリストアドレスを有するリストベクトル命令を受け付け、リストアドレス内のアドレスを比較して最大アドレスと最小アドレスを抽出し、抽出された最大アドレスと最小アドレスをリストベクトル命令に対応付けて命令保持回路に格納し、外部からリストベクトル命令の後続命令を受け付け、命令保持回路に格納された最大アドレスと最小アドレスに基づき、リストベクトル命令と後続命令との追い越し判定を行う。しかしながら、特許文献2に記載の手法では、例外処理自体の高速化について考慮されていなかった。そのため、ベクトルメモリアクセス命令の実行においてメモリアクセス例外検出の高速化が期待される。
【課題を解決するための手段】
【0008】
本願は、上述の課題を解決すべくなされたものであり、メモリアクセス例外検出を高速化することを目的とする。
【0009】
本願の第1の態様は、ベクトルメモリアクセス命令の実行前に例外チェック命令を実行するプロセッサであって、前記例外チェック命令は、前記ベクトルメモリアクセス命令の参照先に関する情報の例外チェックを示し、前記例外チェックは、複数段階のレベル別処理を有し、高レベルの前記レベル別処理ほど厳密な条件に対する例外チェックを含み、低レベルの前記レベル別処理ほど先行し、例外検出の有無が確定するとき、前記例外チェック命令を終了する。
【0010】
本願の第2の態様は、プロセッサにおけるメモリアクセス例外処理方法であって、前記プロセッサは、ベクトルメモリアクセス命令の実行前に例外チェック命令を実行し、前記例外チェック命令は、前記ベクトルメモリアクセス命令の参照先に関する情報の例外チェックを示し、前記例外チェックは、複数段階のレベル別処理を有し、高レベルの前記レベル別処理ほど厳密な条件に対する例外チェックを含み、低レベルの前記レベル別処理ほど先行し、例外検出の有無が確定するとき、前記例外チェック命令を終了する。
【発明の効果】
【0011】
本願の態様によれば、メモリアクセス例外検出を高速化することができる。
【図面の簡単な説明】
【0012】
【
図1】本実施形態に係るメモリアクセス制御装置の構成例を示すブロック図である。
【
図2】本実施形態に係るアドレス変換部の構成例を示すブロック図である。
【
図3】本実施形態に係るページディレクトリの構成例を示す説明図である。
【
図4】本実施形態に係るページテーブルの構成例を示す説明図である。
【
図5】本実施形態に係るページテーブルの有効アドレスの上限と下限の範囲指定レジスタを例示する説明図である。
【
図6】本実施形態に係るVSC命令のフォーマット例を示す図である。
【
図7】本実施形態に係る例外チェック命令フォーマットを例示する図である。
【
図8】本実施形態に係る仮想アドレスを例示する図である。
【
図9】本実施形態に係るページテーブルの有効アドレスの設定例を示す図である。
【
図10】本実施形態に係る例外チェック命令動作を例示するフローチャートである。
【
図11】本実施形態に係るアドレス範囲の例外チェック処理を例示するフローチャートである。
【
図12】本実施形態に係るページテーブルと範囲指定レジスタの例外チェック処理を例示するフローチャートである。
【
図13】本実施形態に係る設定アドレスに基づく例外チェック処理を例示するフローチャートである。
【
図14】本実施形態に係る設定アドレスと要素番号に基づく例外チェック処理を例示するフローチャートである。
【
図15】上記の実施形態の最小構成例を示す説明図である。
【発明を実施するための形態】
【0013】
本願の実施形態に係るメモリアクセス制御装置について、図面を参照して説明する。本実施形態に係るメモリアクセス制御装置は、プロセッサとして実現されうる。以下の説明では、ベクトルメモリアクセス命令として主にVSC命令に対する例外チェック命令を実行する場合を例とする。例外チェック命令は、ベクトルメモリアクセス命令の参照先に関する情報に対する例外チェックを指示する命令である。
図1は、本実施形態に係るメモリアクセス制御装置の構成例を示すブロック図である。本実施形態に係るメモリアクセス制御装置は、スカラ処理部100と、ベクトル処理部200と、メモリアクセス処理部300とを備える。
【0014】
スカラ処理部100は、命令キャッシュ110、命令デコーダ111、リオーダバッファ112、命令スケジューラ113、命令実行制御部114、スカラレジスタ120、演算器121、メモリアクセス命令発行制御部130、例外チェック制御部131、アドレス変換部132およびベクトル命令発行制御部133を備える。
ベクトル処理部200は、命令バッファ210、命令スケジューラ211、命令実行制御部212、ベクトルレジスタ220、ベクトルマスクレジスタ221およびデータバッファ222を備える。
メモリアクセス処理部300は、命令バッファ310、命令スケジューラ311、命令実行制御部312および命令発行制御部313を備える。
【0015】
メモリアクセス制御装置は、信号線150、151、152、153、154、155、160、161、170、171、172、173、174、180、181、182、183、184、185、190、191、250、251、252、260、261、262、263、264、270、271、272、350、351、352、353、354、360を有する。個々の信号線は、複数の構成要素を接続し、各種のデータを伝送可能とする。
【0016】
以下、本実施形態に係るメモリアクセス制御装置の機能構成について説明する。主な説明項目は、次の通りである。
(1)アドレス変換、(2)範囲指定レジスタの設定、(3)例外チェック命令動作、(4)VSC命令動作、(5)VGT命令動作、(6)その他の動作
【0017】
(アドレス変換)
次に、本実施形態に係るアドレス変換の例について説明する。以下に説明するアドレス変換は、VSC命令でアクセス先として指示される仮想アドレスを物理アドレスに変換する処理である。アドレス変換は、アドレス変換部132により実行される。アドレス変換において、ページディレクトリとページテーブルが用いられる。個々のページディレクトリは、それぞれページテーブルに対応付けられている。例えば、32個のページディレクトリに対して32セットのページテーブルが存在する。
図3の第1行に示されるディレクトリ0は、
図4の第1段に示されるページテーブル0に対応付けられる。
図4に例示されるページテーブルは、それぞれ256個のエントリを有する。個々のエントリは、0から255のいずれかの番号で区別される。この例では、ベクトル長が1以上256以下となる。ベクトル長は、VSC命令などのベクトル命令において、1命令により処理対象とする要素の数を示す。要素数は、ベクトル命令に含まれるベクトル長設定レジスタ(図示せず)の設定値により指示される。
【0018】
図8は、本実施形態に係る仮想アドレスの構成例を示す図である。
図8の例では、仮想アドレスが48ビットで表現される。この仮想アドレスは、2MBページテーブルを用いて、48ビットの物理アドレスに変換される。仮想アドレスは、ページディレクトリの仮想アドレス(以下、「ページディレクトリ仮想アドレス」と呼ぶ)、ページテーブル番号およびページ内オフセットを含んで構成される。ページディレクトリ仮想アドレス、ページテーブル番号およびページ内オフセットは、それぞれ18ビット、8ビットおよび22ビットで表現される。なお、ページサイズは2MBに限られず、2MBより大きくてもよいし、より小さくてもよい。また、仮想アドレス、物理アドレスの情報量は48ビットに限られず、より多くてもよいし、より少なくてもよい。
【0019】
アドレス変換部132は、仮想アドレスの一部をなす上位アドレス、即ち、ページディレクトリ仮想アドレスに対応する有効なページディレクトリが存在するか否かをチェックする。有効なページディレクトリの存在は、
図3に例示されるように、ページディレクトリを参照し、有効ビット(Vビット)の値が1かつページディレクトリ仮想アドレスと等しい仮想アドレスが存在することをもって判定される。有効なページディレクトリが存在しない場合、アドレス変換部132は、例外を検出する。
【0020】
有効なページディレクトリが存在する場合、アドレス変換部132は、当該ページディレクトリに対応付けられたページテーブルのページテーブル番号で指示されるエントリにアクセスし、Vビット、属性およびページベースを読み出す。メモリアクセス制御装置は、読み出したVビットの設定値が1か0かにより、当該ページテーブルが有効か否かを判定することができる。また、メモリアクセス制御装置は、Vビットの設定値が1であっても、読み出した属性における違反(例えば、書き込み禁止とストア命令の指示)の有無を判定する。メモリアクセス制御装置は、当該ページテーブルが無効または属性違反と判定することにより例外を検出する。例外を検出しない場合、メモリアクセス制御装置は、仮想アドレスのページディレクトリ仮想アドレスとページテーブルの番号を読み出したページベースに置き換える。ここで、仮想アドレスの下位アドレス部分であるページ内オフセットが維持される。よって、仮想アドレスは、物理アドレスに変換される。物理アドレスは、ページベースとページオフセットを含んで構成される。
【0021】
(範囲指定レジスタの設定)
次に、本実施形態に係る範囲指定レジスタの設定例について説明する。範囲指定レジスタには、ページテーブルの有効アドレスの範囲が設定される。ページテーブルの有効アドレスの範囲は、その上限と下限で指示される。一般に、ページテーブルのマッピングは、プロセッサが、オペレーティングシステム(OS:Operating System)の一部機能をなす所定のプログラムに従って実行される。アドレス変換部132は、例えば、ある仮想アドレスAを基準とし、より大きな値のアドレス(または、より小さな値のアドレス)に対し、順次ページテーブルのマッピングを繰り返す。ページテーブルのマッピングには、ページベースごとに有効ビットと属性を対応付けて、いずれかのページテーブルに割り当てる処理が含まれる。ページテーブルには、有効なページベースが対応付けられたアドレスが連続するアドレスの範囲(即ち、有効アドレス範囲)が形成される。そこで、アドレス変換部132は、有効アドレス範囲を示す範囲指定レジスタを生成してもよい。範囲指令レジスタには、
図5に例示されるように、エントリごとに有効フラグと下限アドレスをなすページテーブル番号と上限アドレスをなすページテーブル番号が示される。有効フラグの設定値を1とし、下限アドレスから上限アドレスにより1個の有効アドレス範囲が表される。そのため、アドレス変換部132は、範囲指定レジスタを参照し、変換対象とする仮想アドレスを有効アドレスとして含む有効アドレスの有無を判定して、例外の有無を検出することができる。その際、ページテーブルにアクセスする必要がない。
【0022】
図2は、本実施形態に係るアドレス変換部132の構成例を示す概略ブロック図である。アドレス変換部132は、ページディレクトリ400、ページテーブル401、設定部402および範囲指定レジスタ403を備える。ページテーブル401には、例外チェック制御部131から信号線1821を経由してアクセスされる。設定部402は、信号線1821を用いたページテーブル401への書き込みを監視する。設定部402は、ページテーブルを更新するごとに、当該ページテーブルのエントリごとに設定されたVビットをエントリ0から順にサーチし、設定値として最初に1が出現するエントリのエントリ番号を下限アドレス、最後に1が出現するエントリのエントリ番号を上限アドレスとして特定する。設定部402は、特定した下限アドレス、上限アドレス、Vビットの設定値を1とし、信号線413を用いて、これらを対応付けて範囲指定レジスタ403に設定する。
【0023】
図9は、本実施形態に係るページテーブルの有効アドレスの設定例を示す図である。9-1の場合には、範囲指定レジスタに対し、Vビット=1、下限アドレス=0、上限アドレス=7と設定される。9-2の場合、Vビット=1、下限アドレス=3、上限アドレス=8と設定される。9-4の場合、Vビット=1、下限アドレス=5、上限アドレス=5と設定される。9-5の場合、Vビットの設定値が全て0となる。有効な上限アドレスと下限アドレスが存在しない。この場合、設定部402は、Vビット=0、下限アドレス=0、上限アドレス=0と設定する。9-6の場合、複数のアドレス範囲が存在する。この場合、設定部402は、例えば、下限アドレス、上限アドレスとして、それぞれの最小値、最大値を設定して、最大の1つnのアドレス範囲を設定する。設定部402は、個々のアドレス範囲を設定してもよい。
なお、上記の説明では、Vビットを範囲指定レジスタに設定する場合を主としたが、アドレス変換部132は、Vビットに代えて、または、Vビットと共に、例外検出に関する属性ビットをアドレス範囲と対応付けて設定してもよい、かかる属性ビットとして、例えば、書き込み禁止ビットが適用されてもよい。
【0024】
(例外チェック命令動作)
次に、本実施形態に係る例外チェック命令動作の例について説明する。例外チェック命令動作は、例外チェック命令に従って、命令実行制御部114により制御される。以下の説明では、VSC命令に係る例外チェック命令を例にする。VSC命令に係る例外チェック命令は、コンパイラによりプログラムのコンパイル時にVSC命令よりも前に配置される。
【0025】
ここで、本実施形態に係るVSC命令のフォーマット例について説明する。
図6は、本実施形態に係るVSC命令のフォーマット例を示す図である。
図6に例示されるVSC命令は、オペコード、ベクトルマスクレジスタM、ソーススカラレジスタSy、Sz、および、ソースベクトルレジスタVx、Vyを含んで構成される。図示されるVSC命令は、8バイトのフィールドを有する。オペコード、ベクトルマスクレジスタM、ソーススカラレジスタSy、Sz、および、ソースベクトルレジスタVx、Vyは、その順序で配列され、それぞれ1バイトで表現される。byte6、byte7を、それぞれ未使用とする。
【0026】
図6の例では、オペコードとして、VSCが設定されている。ソースベクトルレジスタVyにアドレスが格納され、ベクトルマスクレジスタMには、要素番号毎に有効性情報が設定される。個々の有効性情報として、例えば、設定値が1であるとき処理が有効であり、設定値が0であるとき処理が無効であることを示す二値のフラグが格納される。これにより、ベクトルの要素毎に命令で指示される処理を実行するか否かが選択される。ソースベクトルレジスタVxには、有効な要素番号に係るデータが格納され、無効な要素番号に係るデータは格納されない。従って、例示されるVSC命令により、Mで指示される要素番号のデータとして、Vxに格納される有効なデータをVyで指示される記憶領域に格納することが指示される。
ソースベクトルレジスタVyの最小アドレスと最大アドレスは、コンパイラにより実行対象とするソースプログラムを解析して検出される場合がある。その場合、検出された最小アドレス、最大アドレスは、それぞれソーススカラレジスタSy、Szに設定する。プログラムの解析において、例えば、特許第7040187号公報に記載の手法が用いられる。当該手法は、ソースプログラムを解析して、リストベクトル命令を含む一連の命令リストに翻訳する処理を含む。当該処理では、ループ制御文のループの繰り返しごとに、リストベクトル命令によってアクセスするメモリの先頭アドレスと終端アドレスを算出し、先頭アドレスと終端アドレスをリストベクトル命令の命令語に設定する過程を含む。
【0027】
コンパイル時において解析した結果、ソースベクトルレジスタVyに処理対象とする配列のサイズのみが判明した場合には、ソーススカラレジスタSyの全ビットに1、Szに配列サイズが設定される。ベクトル長として、ベクトル命令において1命令での処理対象とする要素数が設定される。なお、VGT命令のフォーマットも、
図6と同様な構成を有していてもよい。
【0028】
次に、本実施形態に係る例外チェック命令(EXCCHK)について説明する。例外チェック命令も、VSC命令と同様にコンパイラによりプログラムを解析して設定される。
図7は、本実施形態に係る例外チェック命令フォーマットを例示する図である。
図7に例示される例外チェック命令フォーマットのデータ構成は、
図6に例示されるVSC命令フォーマットのデータ構成と同様である。第1、2行には、それぞれVSC命令、VGT命令に対する例外チェック命令を示す。
図7に例示されるVSC命令、VGT命令では、ソースベクトルレジスタVyの要素に設定されるアドレス、ベクトルマスクレジスタMの要素に設定されるマスク1を有効とする。ソーススカラレジスタSy、Szの要素には、コンパイラにより値が設定される。
【0029】
例外チェック命令は、あくまで例外チェックを目的とする。そのため、例外チェック命令では、VSC命令とは異なり、デスティネーションベクトルレジスタVxのフィールドを必須としない。Vxのフィールドは、データの格納先を示すために設定されるものである。当該フィールドを省略、または、無視することで、ストアデータの準備待ち時間を削減できる。Vzのフィールドには、検査対象とする元命令のオペコードが設定される。例えば、VSC命令に対する例外チェック命令に対しては、VzのフィールドにVSC命令のオペコードが設定される。また、Vzのフィールドに動作フラグを設定し、例外チェック方法が指示されてもよい。例外チェック方法として、例えば、通常モードと詳細モードのいずれかが指示される。通常モードでは、例外チェックにおいてページディレクトリと範囲指定レジスタが用いられる。詳細モードでは、例外チェックにおいてページディレクトリと範囲指定レジスタの他、ページテーブルのVビットと属性が用いられる。なお、例外チェックは、後述のように複数レベルでなされる。最終レベルでは、動作フラグの設定によらず詳細モードで実行される。最終レベルでは、厳密な例外チェックが要求されるためである。
【0030】
次に、
図10に例示される例外チェック命令動作について説明する。例外チェック命令処理は、複数段階のレベル別処理を含む。より高いレベルのレベル別処理ほど、厳密な条件に対する例外チェックが実行される。レベル別処理は、レベルの昇順に実行される。命令デコーダ111が例外チェック命令を検出するとき、例外チェック命令を解析し、例外チェック処理のレベルの初期値としてレベル1を設定する(S1)。例外が検出されないとき
図10の処理を終了し、例外が検出するとき、より高いレベルのレベル別処理が実行される。最終レベルのレベル別処理では最も厳密な条件を満たすか否かがチェックされ、例外の有無が確定する。以下の説明では、例外チェック命令動作のレベル数を4段階とする場合を例示する。
【0031】
レベル1: スカラレジスタSyが有効かつスカラレジスタSzが有効と設定されている場合、命令デコーダ111は、レベルの初期値をレベル1に設定する(S2)。ここで、スカラレジスタSy、Szの設定値として、即値(無効)とレジスタ(有効)のいずれを用いるかを示すフラグビットが設定される。即値とは、じかに記述された数値を指す。このとき、Syに設定されたソースベクトルレジスタVyの最小アドレスとSzに設定された最大アドレスで指定された範囲内にメモリアクセスが存在すると推定される。メモリアクセスの存在が推定されるアドレス変換テーブルにアクセスし、例外の有無がチェックされる(S5)。例外が検出されない場合、VSC命令に対して例外なしと確定する(S12)。例外が検出される場合、レベル3の処理に進む(S4)。
【0032】
レベル2: スカラレジスタSyが即値指定で全ビット1かつスカラレジスタSzが有効と設定されている場合、命令デコーダ111は、レベルの初期値をレベル2に設定する(S3)。スカラレジスタSzに設定された配列サイズとソースベクトルレジスタVyの最初に確定した1要素のアドレスに基づいて、当該アドレスに配列サイズを減算して得られる最小値から当該アドレスに配列サイズを加算して得られる最大値の範囲内にメモリアクセスが存在すると推定される。メモリアクセスの存在が推定されるアドレス変換テーブルにアクセスし、例外の有無がチェックされる(S6)、例外が検出されない場合、命令デコーダは、VSC命令に対して例外なしと確定する(S12)。例外が検出される場合、レベル3の処理に進む(S4)。
【0033】
レベル3: スカラレジスタSyが即値指定かつスカラレジスタSzが即値指定と設定されている場合、命令デコーダ111は、レベルの初期値をレベル3と設定する(S4)。ソースベクトルレジスタVyにアドレスが設定され、ベクトルマスクレジスタMの全ての要素に設定されるマスクMを全て1と推定される。設定されるアドレスに係るアドレス変換テーブルにアクセスし、例外の有無がチェックされる(S7)。例外が検出されない場合、VSC命令に対して例外なしと確定する(S12)。例外が検出される場合、マスクMが全て1と定義されている特定のマスクレジスタが指定されているか否かがチェックされる(S8)。特定のマスクレジスタとは、例えば、マスクレジスタ番号0を全て固定値1、つまりベクトルレジスタの全要素を有効とする設定値である。マスクレジスタ番号0が設定されている場合、動作フラグが詳細モードを示すか否かがチェックされる(S11)。命令デコーダは、動作フラグが詳細モードを示す場合、例外ありと確定する(S13)。命令デコーダは、マスクレジスタ番号0以外が設定されている場合、または、マスクレジスタ番号0が設定され、かつ、動作モードが通常モードである場合、レベル4の処理に進む(S9)。
【0034】
レベル4: ソースベクトルレジスタVyにアドレスが設定され、ベクトルマスクレジスタMのマスクが1と設定された要素のみに設定されたアドレスを有効なアドレスと推定される。推定されるアドレスに係るアドレス変換テーブルにアクセスし、例外の有無がチェックされる(S10)。例外が検出されない場合、VSC命令に対し例外なしと確定する(S12)。例外を検出した場合、VSC命令に対し例外ありと確定する(S13)。
【0035】
上記説明に係る制御により、メモリアクセス制御装置は、ベクトルメモリアクセス命令の実行前にメモリアクセスの例外チェック命令を実行する。例外チェック処理は、ベクトルメモリアクセス命令の参照先において例外発生に係る情報に限定してチェックを実行する。例外チェック処理は、複数のレベル別処理を有する。高レベルのレベル別処理ほど、厳密な条件のチェックを行う処理を含む。レベルの昇順にレベル別処理が実行される。レベル別処理により例外が発生しないことが確定した場合には、メモリアクセス制御装置はより高レベルのレベル別処理を実行せずに例外チェック処理を終了する。これにより、ベクトルメモリアクセス命令のメモリアクセス例外が高速に検出される。
【0036】
図1に戻り、本実施形態に係るスカラ処理部100の処理について説明する。
命令キャッシュ110は、各種の命令をキャッシュする。命令キャッシュ110は、キャッシュされる命令には、例外チェック命令が含まれうる。命令キャッシュ110は、キャッシュした例外チェック命令を、信号線150を経由して命令デコーダ111へ出力する。
【0037】
命令デコーダ111は、例外チェック命令に対して命令デコードを行い、命令デコード結果と命令に付随する各種情報を、信号線151を用いてリオーダバッファ112へ出力する。リオーダバッファ112への出力は、そのエントリに空きがあるときになされる。また、命令デコーダ111は、例外チェック命令のレベルの初期値を設定して、設定した初期値をリオーダバッファ112に出力する。命令デコーダ111は、Syのスカラレジスタ有効かつSzのスカラレジスタ有効の場合は、初期値をレベル1に設定する。命令デコーダ111は、Syが即値指定で全ビット1かつSzのスカラレジスタ有効の場合は、初期値をレベル2に設定する。命令デコーダ111は、Syが即値指定かつSzが即値指定の場合は、初期値をレベル3に設定する。
【0038】
リオーダバッファ112は、例外チェック命令を、信号線152を用いて命令スケジューラ113へ出力する。命令スケジューラ113への出力は、そのエントリに空きがあるときになされる。リオーダバッファ112は、出力対象とする命令に各命令を識別するための命令IDを付加する。
【0039】
命令スケジューラ113は、格納されている命令に対し、1エントリごとに発行可能かを判定する。命令スケジューラ113は、発行に必要とする資源を準備でき、命令順序が保証できるとき、信号線153を用いて例外チェック命令を命令実行制御部114へ出力する。命令スケジューラ113は、例外チェック命令を、ベクトル処理部200とメモリアクセス処理部300の両方にも発行する。各処理部への例外チェック命令は、必ずしも同時でなくてもよい。命令スケジューラ113は、各処理部への命令の発行準備が完了次第、それぞれ当該処理部に発行する。
【0040】
次に例外チェック命令のレベル1の動作について説明する。レベル1の動作では、動作フラグの設定値を通常モードとする。通常モードとは、ページディレクトリと範囲指定レジスタを利用した例外チェックである。レベル1の動作では、ページテーブルを利用しないため、例外チェックが迅速になされる反面、精度が低下する。精度の低下は、現実には例外なしであるにも関わらず、例外ありと判定されることを意味する。
【0041】
命令実行制御部114は、信号線172を用いて、命令スケジューラ113から入力される例外チェック命令をベクトル命令発行制御部133へ出力する。例外チェック命令のレベルがレベル1となる場合はSyのスカラレジスタ有効かつSzのスカラレジスタ有効となる。そのため、命令実行制御部114は、信号線171を用いてスカラレジスタ120へリード要求を出力する。
スカラレジスタ120は、SyとSzで指定されたスカラレジスタのデータを、信号線173を用いてベクトル命令発行制御部133へ出力する。
ベクトル命令発行制御部133は、例外チェック命令とSyとSzのデータと命令に付随する情報を、信号線185を用いてベクトル処理部200の命令バッファ210へ出力する。
【0042】
命令バッファ210は、スカラ処理部100から入力される例外チェック命令を、信号線250を用いて命令スケジューラ211へ出力する。命令スケジューラ211への出力は、そのエントリに空きがあるときになされる。命令スケジューラ211は、例外チェック制御部131からの発行要求を受けるまで、例外チェック命令の発行を待機する。
【0043】
命令実行制御部114は、信号線170を用いて例外チェック命令をメモリアクセス命令発行制御部130と例外チェック制御部131へ出力する。レベル1の場合は、Syのスカラレジスタ有効かつSzのスカラレジスタ有効となる。そこで、命令実行制御部114は、信号線171を用いてスカラレジスタ120へリード要求を出力する。スカラレジスタ120は、SyとSzで指定されたスカラレジスタのデータを、信号線173を用いてメモリアクセス命令発行制御部130と例外チェック制御部131へ出力する。メモリアクセス命令発行制御部130は、例外チェック命令とSyとSzのデータと命令に付随する情報を、信号線180を用いてメモリアクセス処理部300の命令バッファ310へ出力する。
【0044】
命令バッファ310は、スカラ処理部100から入力される例外チェック命令を、信号線350を用いて命令スケジューラ311へ出力する。命令スケジューラ311への出力は、そのエントリに空きがあるときなされる。命令スケジューラ311は、例外チェック制御部131から発行要求を受けるまで例外チェック命令の発行を待機する。
【0045】
次に、例外チェックに関する例外チェック制御部131とアドレス変換部132の動作について、
図1、
図2および
図11を用いて説明する。
ここで、
図1におけるアドレス変換部132への入力に係る信号線182は、
図2における信号線1820、1821に相当する。
図1における信号線360は、
図2における信号線3600、3601に相当する。
図1におけるアドレス変換部132からの出力に係る信号線183は、
図2における信号線1830、1831に相当する。
図1における信号線191は、
図2における信号線1910、1911、1912に相当する。
【0046】
図11は、本実施形態に係るアドレス範囲の例外チェック処理を例示するフローチャートである。
図11の処理では、例外チェックにより例外が検出されない場合が想定されている。例外が検出される場合には、後続の処理に進まず、上述の例外ありの検出時の処理がなされる。
【0047】
例外チェック制御部131は、MIN(処理の下限アドレスを示す)の設定値としてSyの最小アドレスを代入し、MAX(処理の上限アドレスを示す)の設定値としてSzの最大アドレスを代入する(S101)。例外チェック制御部131は、MINの値を、信号線182を用いてアドレス変換部132へ出力する。
アドレス変換部132のページディレクトリ400は、MINの上位ビット(ビット0~18)を利用してページディレクトリを特定し、特定したページディレクトリに対し得例外チェックを行う(S102)。ページディレクトリの例外チェックは、(ページディレクトリのVビット=1)かつ(MINの上位ビット(ビット0~18)=ページディレクトリの仮想アドレス)となるエントリが存在するか否かを判定する過程を含む。ページディレクトリ400は、例外チェック情報と有効なページディレクトリのディレクトリ番号を、信号線1910を用いて例外チェック制御部131に出力する。
【0048】
例外チェック制御部131は、MINの上位ビット(ビット0~18)=MAXの上位ビット(ビット0~18)となる条件を満たすか否かをチェックする(S103)。
S103の条件を満たす(YES)場合、例外チェック制御部131は、MINに設定されるページテーブル番号とMAXに設定されるページテーブル番号と有効なページディレクトリのディレクトリ番号と属性違反のチェックに必要な情報(例えば、書き込み禁止属性のチェックに必要になるストア系命令のデコード情報など)を、信号線1822を用いてアドレス変換部132の範囲指定レジスタ403に出力する。
【0049】
範囲指定レジスタ403は、MINのページテーブル番号からMAXのページテーブル番号の範囲をチェックする(S105)。S105の処理は、ページテーブルのエントリが有効になっているか否かのチェックである。即ち、当該処理は、(指定されたディレクトリ番号のVビット=1)かつ(MINのページテーブル番号からMAXのページテーブル番号の範囲がVビットの範囲指定レジスタの下限アドレスと上限アドレスの範囲に含まれる)とページテーブルの属性違反の有無のチェックを含む。より具体的には、(指定されたディレクトリ番号のVビット=1)かつ(MINのページテーブル番号~MAXのページテーブル番号の範囲が属性の範囲指定レジスタの下限アドレスと上限アドレスの範囲となるととき属性違反なし)となるか否かをチェックする。
【0050】
ここで、属性が書き込み禁止である場合におけるチェックを例にして説明する。ストア系の命令では、チェック対象のアドレスが範囲指定レジスタの下限アドレスと上限アドレスの範囲に含まれている場合には「属性違反あり」となり、その範囲に含まれていない場合は「属性違反なし」となる。ロード系の命令の場合、書き込み禁止の属性違反は存在しない。範囲指定レジスタ403は、例外チェック情報を、信号線1912を用いて例外チェック制御部131に出力する。S103においてYESと判定され、S105の処理を実行した後、
図11の処理が終了する。
【0051】
他方、S103の条件を満たさない(NO)場合、例外チェック制御部131は、MIN(下限)のページテーブル番号と、MAX(上限)のページテーブル番号としてエントリの最大値である255と、有効なページディレクトリのディレクトリ番号と属性違反のチェックに必要な情報など信号線1822を用いて範囲指定レジスタ403に出力する。
範囲指定レジスタ403は、MINのページテーブル番号からMAXのページテーブル番号(255)の範囲をチェックする(S104)。S104の処理は、MINとMAXの値が異なるがS105と同様の処理(即ち、ページテーブルのエントリが有効になっているか否かのチェック)とページテーブルの属性違反のチェックを含む。範囲指定レジスタ403は、例外チェック情報を、信号線1912を用いて例外チェック制御部131に出力する。
【0052】
例外チェック制御部131は、次のページディレクトリをチェックするためnに初期値として1を代入する(S106)。例外チェック制御部131は、新たなMINの上位ビット(ビット0~18)として元のMINの上位ビット(ビット0~18)+nを代入する(S107)。例外チェック制御部131は、MINの上位ビット(ビット0~18)を、信号線182を用いてアドレス変換部132へ出力する。
ページディレクトリ400は、MINの上位ビット(ビット0~18)で特定されるページディレクトリをチェックする(S108)。S108の処理は、MINの値が異なるが、S102と処理と同様の処理である。ページディレクトリ400は、例外チェック情報と有効なページディレクトリのディレクトリ番号を、信号線1910を用いて例外チェック制御部131に出力する。例外チェック制御部131は、MINの上位ビット(ビット0~18)=MAXの上位ビット(ビット0~18)となるか否かをチェックする(S109)。S109の処理は、MINの値が異なるが、S103と同様の処理である。
【0053】
S109の条件を満たす(YES)場合、例外チェック制御部131は、MIN(下限)のページテーブル番号としてエントリの最小値である0とMAX(上限)のページテーブル番号と有効なページディレクトリのディレクトリ番号と属性違反のチェックに必要な情報などを、信号線1822を用いて範囲指定レジスタ403に出力する。範囲指定レジスタ403は、MINのページテーブル番号(0)からMAXのページテーブル番号の範囲をチェックする(S110)。S110の処理は、MINとMAXの値が異なるが、S105と同様の処理である。範囲指定レジスタ403は、例外チェック情報を、信号線1912を用いて例外チェック制御部131に出力する。S109においてYESと判定され、S110の処理を実行した後、
図11の処理が終了する。
【0054】
S109の条件を満たさない(NO)場合、例外チェック制御部131は、MINのページテーブル番号とMAXのページテーブル番号と有効なページディレクトリのディレクトリ番号と属性違反のチェックに必要な情報などを、信号線1822を用いて範囲指定レジスタ403に出力する。範囲指定レジスタ403は、MINのページテーブル番号(0)~MAXのページテーブル番号(255)の全範囲をチェックする(S111)。S111の処理は、MINとMAXの値が異なるが、S105と同様の処理であるページテーブルのエントリが有効になっているかのチェックとページテーブルの属性違反のチェックを含む。範囲指定レジスタ403は、例外チェック情報を、信号線1912を用いて例外チェック制御部131に出力する。例外チェック制御部131は、次のページディレクトリをチェックするためnにn+1を代入する(S112)。その後、S107の処理に戻る。
【0055】
上記の例外チェックの処理結果として、例外なし、もしくは、例外ありの2通りのいずれかを示す例外チェック情報が得られる。次に、例外なしを示す例外チェック情報が得られる場合における動作について説明する。この動作は、例外なしが確定した場合に共通する処理となる。例外チェック制御部131は、命令IDと例外なしを示す例外チェック命令を、信号線190を用いて命令実行制御部114に出力し、信号線184を用いて命令スケジューラ211に出力し、信号線181を用いて命令スケジューラ311に出力する。命令実行制御部114は、命令IDと、例外なしを示す例外チェック命令を、信号線160を用いて命令スケジューラ113に出力し、信号線161を用いてリオーダバッファ112に出力する。
【0056】
命令スケジューラ113、211、311は、それぞれ入力される命令IDと一致する命令IDに対応する例外チェック命令を完了させ、その命令に係るエントリを解放する。
リオーダバッファ112は、入力される命令IDと一致する命令IDに対応する例外チェック命令を、例外なしを示す実行完了命令に変更する。リオーダバッファ112は、例外チェック命令単独では完了(コミット)できず、直後に入力されるメモリアクセス命令とセットで完了する。
【0057】
次に、例外ありを示す例外チェック情報が得られる場合における動作を説明する。例外チェック制御部131は、命令IDと例外ありを示す例外チェック命令とレベル変更要求を、信号線190を用いて命令実行制御部114に出力し、信号線184を用いて命令スケジューラ211に出力し、信号線181を用いて命令スケジューラ311に出力する。命令実行制御部114は、命令IDと例外有を示す例外チェック命令とレベル変更要求を、信号線160を用いて命令スケジューラ113に出力する。
命令スケジューラ113、211、311は、それぞれ入力される命令IDと一致する命令IDに対応する例外チェック命令のレベルを変更する。変更後の次のレベルは、
図10のフローチャートと同様の手順で定まる。例えば、実行した処理のレベルがレベル1またはレベル2の場合には、次のレベルはレベル3となる。実行した処理のレベルがレベル3の場合は、次のレベルはレベル4となる。
【0058】
上記の例外チェック動作例は、動作モードが通常モードである場合を主としたが、動作モードが詳細モードである場合について説明する。詳細モードは、例外チェック動作において、さらにページテーブル401を用いたチェックを含む点で、通常モードとは異なる。まず、レベル1における詳細モードについて説明する。
図11のS104、S105、S110、S111の処理においてページテーブル401を用いた例外チェックの処理が追加される。例えば、S105の処理において、例外チェック制御部131は、MINのページテーブル番号とMAXのページテーブル番号と有効なページディレクトリのディレクトリ番号と属性違反のチェックに必要な情報などを、信号線1821を用いてページテーブル401に出力する。ページテーブル401は、入力されるMINのページテーブル番号からMAXのページテーブル番号の範囲をチェックする。
【0059】
ページテーブル401の例外チェック方法は、Vビットと属性の構成に応じて異なっていてもよい。例えば、次の3種類の構成が想定されうる。構成1:例外チェック時間の短縮を優先する場合、ページテーブル401は、Vビットと属性の構成にレジスタを用いることで、両者を同時並列にチェックすることができる。構成2:ハードウェア量の低減を優先する場合、ページテーブル401は、Vビットと属性の構成にSRAM(Static Random Access Memory)を用いることで(SRAM構成)、ページテーブル番号をMINのページテーブル番号からMAXのページテーブル番号まで、インクリメントしながら個々のページテーブルに順にアクセスしてチェックを行う。構成3:例外チェック時間とハードウェア量の低減を両立する場合、SRAM構成を採用し、Vビットと属性の組を複数エントリごとに一括して格納する構成である。例えば、SRAMの各アドレスにページテーブル番号にそれぞれ対応する32エントリ分のVビットと属性をまとめて格納しておく。その場合、32エントリ分のページテーブル番号に対して一括したチェックが可能となる。
【0060】
次に、構成3において各アドレスに32エントリ分のページテーブル番号を格納する場合を例にして、ページテーブル401の例外チェック方法について説明する。
ページテーブル401は、MINのページテーブル番号からMAXのページテーブル番号の読み出しに要するアドレスを計算する。ページテーブル401は、ページテーブル番号÷32+ページディレクトリ番号×(256÷32)をSRAMのアドレスとして算出することができる。ページテーブル401は、Vビットと属性が格納されているページテーブルの(MINのページテーブル番号÷32+ページディレクトリ番号×(256÷32))から(MAXのページテーブル番号÷32+ページディレクトリ番号×(256÷32))の範囲のページディレクトリ番号を読み出し、例外チェックを行う。ページテーブル401は、チェック結果を示す例外チェック情報を、信号線1911を用いて例外チェック制御部131に出力する。
【0061】
詳細モードでは、ページテーブル401による例外チェック情報と範囲指定レジスタ403による例外チェック情報が異なりうる。範囲指定レジスタ403は例外チェックの高速化を目的に簡略されたページテーブルの情報が用いられるため、ページテーブル401で用いられる情報とは完全に等価ではないためである。そのため、
図12に例示されるように、アドレス変換部132は、ページテーブル401による例外チェック情報を範囲指定レジスタ403による例外チェック情報よりも優先して採用する。
図12に例示される、ページテーブルに対する例外あり、かつ範囲指定レジスタに対する例外なしの組み合わせは、現実には存在しなくてもよい。S104、S110、S111の処理に対しても、MIN、MAXの値が異なる他、S105の処理と同様に運用することができる。
【0062】
次に、例外チェック命令のレベル2の動作について説明する。動作フラグの設定が、通常モードである場合を仮定する。スカラ処理部100の処理において、命令キャッシュ110から命令スケジューラ113の発行までの動作は、レベル1の動作と同様である。
命令実行制御部114は、信号線172を用いて、例外チェック命令をベクトル命令発行制御部133へ出力する。レベル2では、Szのスカラレジスタが有効と設定される。そのため、命令実行制御部114は、信号線171を用いてスカラレジスタ120へリード要求を出力する。
スカラレジスタ120は、Szで指定されたスカラレジスタのデータを、信号線173を用いてベクトル命令発行制御部133へ出力する。
ベクトル命令発行制御部133は、例外チェック命令とSzのデータと命令に付随する情報を、信号線185を用いてベクトル処理部200の命令バッファ210へ出力する。
【0063】
命令バッファ210は、例外チェック命令を、信号線250を用いて命令スケジューラ211へ出力する。命令スケジューラへの出力は、命令スケジューラ211のエントリに空きがあるときになされる。
命令スケジューラ211は、1エントリごとに格納されている命令の発行が可能か否かを判定する。発行に必要な資源の準備が整い、命令順序が保証できるとき、命令スケジューラ211は、信号線251を用いて例外チェック命令を命令実行制御部212へ出力する。レベル2の場合はVyのベクトルレジスタが有効と設定されるため、Vyの準備が整うと命令が発行可能になる。
命令実行制御部212は、信号線260を用いてベクトルレジスタ220へリード要求を出力する。
ベクトルレジスタ220は、リード要求を受け、Vyで指定されたベクトルレジスタのデータを、信号線262を用いて例外チェック制御部131へ出力する。
【0064】
命令実行制御部114は、信号線170を用いて例外チェック命令をメモリアクセス命令発行制御部130と例外チェック制御部131へ出力する。レベル2の場合はSzのスカラレジスタが有効と設定されるため、命令実行制御部114は、信号線171を用いてスカラレジスタ120へリード要求を出力する。
スカラレジスタ120は、リード要求を受け、Szで指定されたスカラレジスタのデータを、信号線173を用いてメモリアクセス命令発行制御部130と例外チェック制御部131へ出力する。
メモリアクセス命令発行制御部130は、例外チェック命令とSzのデータと命令に付随する情報を、信号線180を用いてメモリアクセス処理部300の命令バッファ310へ出力する。
【0065】
命令バッファ310は、例外チェック命令を、信号線350を用いて命令スケジューラ311へ出力する。命令スケジューラ311への出力は、そのエントリに空きがあるときになされる。命令スケジューラ311は、例外チェック制御部131から発行要求を受けるまで、例外チェック命令の発行を待機する。
【0066】
次に、例外チェックに関する例外チェック制御部131とアドレス変換部132の動作について、
図1、
図2および
図11を用いて説明する。
例外チェック制御部131は、MIN(処理の下限アドレスを示す)にVyの1要素-Sz(配列サイズ)を代入し、MAX(処理の上限アドレスを示す)にVyの1要素+Sz(配列サイズ)を代入する(S101)。MINとMAXの初期値の計算方法が異なる他、S102以降の処理は、レベル1の処理と同様である。また、動作フラグの設定が詳細モードの場合は、レベル1の処理と同様に、ページテーブルを用いた例外チェックが追加される。
【0067】
命令実行制御部114は、信号線172を用い、例外チェック命令をベクトル命令発行制御部133へ出力する。命令実行制御部114は、レベル3の場合、命令実行制御部114は、SyとSzのスカラレジスタを利用しない。
ベクトル命令発行制御部133は、例外チェック命令と命令に付随する情報を、信号線185を用いて、ベクトル処理部200の命令バッファ210へ出力する。
命令バッファ210は、例外チェック命令を、信号線250を用いて命令スケジューラ211へ出力する。命令スケジューラ211への出力は、そのエントリに空きがあるときになされる。命令スケジューラ211は、1エントリごとに格納されている命令の発行が可能か否かを判定し、必要な資源の準備が整い、命令順序が保証できるとき、例外チェック命令を、信号線251を用いて命令実行制御部212へ出力する。レベル3の場合はVyが有効と設定されるため、Vyの準備が整うと命令が発行可能になる。
命令実行制御部212は、信号線260を用いてベクトルレジスタ220へリード要求を出力する。ベクトルレジスタ220は、リード要求を受け、Vyで指定されたベクトルレジスタのデータを、信号線262を用いて例外チェック制御部131へ出力する。
【0068】
命令実行制御部114は、信号線170を用いて、例外チェック命令をメモリアクセス命令発行制御部130と例外チェック制御部131へ出力する。命令実行制御部114は、レベル3の場合、SyとSzのスカラレジスタを利用しない。メモリアクセス命令発行制御部130は、例外チェック命令と命令に付随する情報を、信号線180を用いてメモリアクセス処理部300の命令バッファ310へ出力する。
命令バッファ310は、例外チェック命令を、信号線350を用いて命令スケジューラ311へ出力する。命令スケジューラ311への出力は、そのエントリに空きがあるときになされる。命令スケジューラ311は、例外チェック制御部131から発行要求を受けるまで例外チェック命令の発行を待機する。
【0069】
次に、例外チェックに関する例外チェック制御部131とアドレス変換部132の動作について、
図1、
図2および
図13を用いて説明する。
図13は、本実施形態に係る設定アドレスに基づく例外チェック処理を例示するフローチャートである。
図13の処理では、例外チェックにより例外が検出されない場合が想定されている。例外が検出される場合には、後続の処理に進まず、上述の例外ありの検出時と同様の処理がなされる。
【0070】
例外チェック制御部131には、VyのアドレスとしてVL個のデータ(要素番号0~要素番号VL-1)がベクトル処理部200から取得される。例外チェック制御部131は、例外チェック対象とする要素の要素番号の初期値として0を代入する(S201)。
例外チェック制御部131は、例外チェック対象とする要素の要素番号がVL-1よりも大きくなる条件を満たすか否かをチェックする(S202)。S202の条件を満たさない(NO)場合、例外チェック制御部131は、アドレスADRにVyの要素番号のデータを代入する(S203)。
【0071】
例外チェック制御部131は、ADRに代入されたデータを、信号線182を用いてアドレス変換部132へ出力する。
アドレス変換部132のページディレクトリ400は、ADRの上位ビット(ビット0~18)を用いてページディレクトリに対して例外チェックを行う(S204)。ページディレクトリの例外チェックは、(ページディレクトリのVビット=1)かつ(ADRの上位ビット(ビット0~18)=ページディレクトリの仮想アドレス)となるエントリが存在するかチェックする過程を含む。ページディレクトリ400は、例外チェック情報と有効なページディレクトリのディレクトリ番号を、信号線1910を用いて例外チェック制御部131に出力する。
【0072】
例外チェック制御部131は、ADRのページテーブル番号と有効なページディレクトリのディレクトリ番号と属性違反のチェックに必要な情報などを、信号線1822を用いてアドレス変換部132の範囲指定レジスタ403に出力する。
範囲指定レジスタ403は、ADRのページテーブル番号をチェックする(S205)。S205の処理は、ページテーブルのエントリが有効になっているか否かのチェック、(指定されたディレクトリ番号のVビット=1)かつ(ADRページテーブル番号がVビットの範囲指定レジスタの下限アドレスと上限アドレスの範囲に含まれる)と、ページテーブルの属性違反のチェックを含む。ページテーブルの属性違反のチェックは、(指定されたディレクトリ番号のVビット=1)かつ(ADRのページテーブル番号が属性の範囲指定レジスタの下限アドレスと上限アドレスの範囲で属性違反なし)となるか否かのチェックを含む。範囲指定レジスタ403は、チェック結果を示す例外チェック情報を、信号線1912を用いて例外チェック制御部131に出力する。
例外チェック制御部131は、次の要素番号のチェックのために要素番号に要素番号+1を代入する(S206)。そして、S202のチェックに戻る。S202の条件を満たす(YES)と判定される場合、Vyをアドレスとした例外チェックの処理を終了する。
【0073】
なお、
図13の処理は1要素ずつ実行される場合を例にするが、これには限られない。例外チェック処理の高速化を目的として、S201の初期値の代入である要素番号←0の処理に代えて、要素番号←m(mは、0以上m-1以下の整数)に変更することで、m要素ごとの並列処理が実行されてもよい。その場合、S206において、要素番号←要素番号+1の代入処理に代えて、要素番号←要素番号+mの代入処理がなされる。
【0074】
上記の例外チェックの処理結果として、例外なし、もしくは、例外ありの2通りのいずれかを示す例外チェック情報が得られる。次に、例外なしを示す例外チェック情報が得られる場合における動作について説明する。この動作は、例外なしが確定した場合に共通する処理となる。例外チェック制御部131は、命令IDと例外なしを示す例外チェック命令を、信号線190を用いて命令実行制御部114に出力し、信号線184を用いて命令スケジューラ211に出力し、信号線181を用いて命令スケジューラ311に出力する。命令実行制御部114は、命令IDと、例外なしを示す例外チェック命令を、信号線160を用いて命令スケジューラ113に出力し、信号線161を用いてリオーダバッファ112に出力する。
【0075】
命令スケジューラ113、211、311は、それぞれ入力される命令IDと一致する命令IDに対応する例外チェック命令を完了させ、その命令に係るエントリを解放する。
リオーダバッファ112は、入力される命令IDと一致する命令IDに対応する例外チェック命令を、例外なしを示す実行完了命令に変更する。リオーダバッファ112は、例外チェック命令単独では完了(コミット)できず、直後に入力されるメモリアクセス命令とセットで完了する。
【0076】
次に、例外ありを示す例外チェック情報が得られる場合における動作を説明する。例外チェック制御部131は、例外チェック命令のマスクMが全て1と定義されている特定のマスクレジスタ(例えば、マスクレジスタ番号0が全て固定値1、即ち、ベクトルレジスタの全要素が有効)が指定されているか否かをチェックする(
図10 S8参照)。また、例外チェック制御部131は、動作フラグに詳細モードが設定されているか否かをチェックする(
図10 S11参照)。マスクMが全て1ではない場合、または、マスクMが全て1かつ動作モードに通常モードが設定されている場合、例外チェック制御部131は、命令IDと例外ありを示す例外チェック命令とレベル変更要求を、信号線190を用いて命令実行制御部114に出力し、信号線184を用いて命令スケジューラ211に出力し、信号線181を用いて命令スケジューラに出力する。命令実行制御部114は、命令IDと例外ありを示す例外チェック命令とレベル変更要求を、信号線160を用いて命令スケジューラ113に出力する。
【0077】
命令スケジューラ113、211、311は、それぞれ入力される命令IDと一致する命令IDに対応する例外チェック命令のレベルを変更する。変更後の次のレベルは、
図10のフローチャートと同様の手順で定まる。例えば、実行した処理のレベルがレベル3の場合は、次のレベルはレベル4となる。マスクMが全て1かつ動作モードが詳細モードである場合、例外ありが確定する(
図10 S13参照)。例外チェック制御部131は、命令IDと例外ありを示す例外チェック命令と例外種類(例えば、ページディレクトリ無効、ページテーブル無効、ページテーブル属性違反、等と例外が発生した最小の要素番号を、信号線190を用いて命令実行制御部114に出力し、信号線184を用いて命令スケジューラ211に出力し、信号線181を用いて命令スケジューラ311に出力する。
【0078】
命令実行制御部114は、命令IDと例外ありを示す例外チェック命令を、信号線160を用いて命令スケジューラ113に出力し、命令IDと例外ありを示す例外チェック命令と例外が発生した最小の要素番号を、信号線161を用いてリオーダバッファ112に出力する。
命令スケジューラ113、211、311は、それぞれ例外ありフラグの設定値を1(有効)に変更し、例外あり命令の命令IDを保存する。命令スケジューラ113、211、311は、例外ありフラグ=1の状態で新たに例外ありを示す例外チェック命令が取得される場合(複数命令で例外あり)、保存されている命令IDと新たに例外ありと検出した命令の命令IDを比較し、先行する命令の命令IDを保存する。命令スケジューラ113、211、311は、新たな命令IDと一致する命令IDに対応する例外チェック命令を完了させ、エントリを解放する。リオーダバッファ112は、新たな命令IDと一致する命令IDに対応する例外チェック命令を、例外ありを示す実行完了命令に変更し、例外が発生した最小の要素番号を保存する。リオーダバッファ112は、例外チェック命令単独では完了(コミット)できず、直後のメモリアクセス命令とセットで完了する。
【0079】
動作モードが詳細モードである場合には、範囲指定レジスタ403を用いた例外チェックに、ページテーブル401を用いたチェックが加わる点で、通常モードとは異なる。
図13のS205の処理においてページテーブル401を用いた例外チェックの処理が追加される。例外チェック制御部131は、ADRのページテーブル番号と有効なページディレクトリのディレクトリ番号と属性違反のチェックに必要な情報などを、信号線1821を用いてページテーブル401に出力する。ページテーブル401は、ADRのページテーブル番号をチェックする(S205)。ページテーブル401はレベル1で説明した手法を用いて、ADRのページテーブル番号をリードするのに必要なアドレスを計算する。ページテーブル401は、Vビットと属性が格納されているページテーブルのアドレス(ADRのページテーブル番号÷32+ページディレクトリ番号×(256÷32))をリードして例外チェックを行う。ページテーブル401は、チェック結果を示す例外チェック情報を、信号線1911を用いて例外チェック制御部131に出力する。詳細モードの場合では、ページテーブルによる例外チェック情報と範囲指定レジスタの例外チェック情報が異なりうるため、
図12に例示するように、ページテーブルの例外チェック情報を優先して採用される。
【0080】
次に、例外チェック命令のレベル4の動作について説明する。厳密な条件で例外をチェックするため、レベル4では、動作フラグの設定は詳細モードとなる。スカラ処理部100の処理では、命令キャッシュ110から命令スケジューラ113の発行までの動作は、レベル1の動作と同様である。
【0081】
命令実行制御部114は、信号線172を用いて例外チェック命令をベクトル命令発行制御部133へ出力する。命令実行制御部114は、レベル4の場合はSyとSzのスカラレジスタを利用しない。ベクトル命令発行制御部133は、例外チェック命令と命令に付随する情報を、信号線185を用いてベクトル処理部200の命令バッファ210へ出力する。
【0082】
命令バッファ210は、例外チェック命令を、信号線250を用いて命令スケジューラ211へ出力する。命令スケジューラ211への出力は、そのエントリに空きがあるときになされる。命令スケジューラ211は、1エントリ毎に、格納されている命令の発行が可能か否かを判定し、必要な資源の準備が整い、命令順序が保証できるとき、例外チェック命令を、信号線251を用いて命令実行制御部212へ出力する。レベル4の場合はVyが有効かつMが有効のため、VyとMの準備が整えば、命令が発行可能となる。命令実行制御部212は、レベル4の場合はVyのベクトルレジスタ有効のため信号線260を介してベクトルレジスタ220へリード要求を出力し、Mのマスクレジスタ有効のため信号線261を介してベクトルマスクレジスタ221へリード要求を出力する。ベクトルレジスタ220は、Vyで指定されたベクトルレジスタのデータを、信号線262を用いて例外チェック制御部131へ出力する。ベクトルマスクレジスタ221は、マスクMで指定されたベクトルマスクレジスタのデータを、信号線263を用いて例外チェック制御部131へ出力する。
【0083】
命令実行制御部114は、信号線170を用いて、例外チェック命令をメモリアクセス命令発行制御部130と例外チェック制御部131へ出力する。命令実行制御部114は、レベル4の場合はSyとSzのスカラレジスタを利用しない。メモリアクセス命令発行制御部130は、例外チェック命令と命令に付随する情報を、信号線180を用いてメモリアクセス処理部300の命令バッファ310へ出力する。
命令バッファ310は、例外チェック命令を、信号線350を用いて命令スケジューラ311へ出力する。命令スケジューラ311への出力は、そのエントリに空きがあるときになされる。命令スケジューラ311は、例外チェック制御部131から発行要求を受けるまで例外チェック命令の発行を待機する。
【0084】
次に、例外チェックに関する例外チェック制御部131とアドレス変換部132の動作について、
図1、
図2および
図14を用いて説明する。
図14は、本実施形態に係る設定アドレスと要素番号に基づく例外チェック処理を例示するフローチャートである。
図14の処理では、例外チェックにより例外が検出されない場合が想定されている。例外が検出される場合には、後続の処理に進まず、上述の例外ありの検出時の処理がなされる。
レベル4に係る
図14の処理は、レベル3に係る
図13の処理にS303の処理が追加された点で異なる。
【0085】
例外チェック制御部131には、VyのアドレスとMのマスクとしてVL個のデータ(要素番号0~要素番号VL-1)がベクトル処理部200から取得される。レベル4では、例外チェック制御部131は、要素番号毎にMの設定値が1であるとの条件を満足するか否かをチェックする(S303)。この点において、レベル3では、Vyのアドレスがそのまま利用されていた点と異なる。S303の条件を満足する要素番号に対しては(YES)、例外チェック制御部131は、Vyのアドレスが有効なアドレスと推定されるため、ADRにVyの要素番号のデータを代入する(S304)。例外チェック制御部131は、ADRのデータを、信号線182を用いてアドレス変換部132へ出力する。S305の処理は
図13のS204の処理と、S306の処理は
図13のS205の詳細モード時の処理と、S207の処理は
図13のS206の処理と、それぞれ同等である。S304、S305、S306の例外チェックと次のチェックのためS307の処理が行われる。S303の条件を満足しない(NO)場合、Vyのアドレスが有効なアドレスではないため例外チェックを省略して次のチェックのためS307の処理が行われる。
【0086】
上記の例外チェックの処理結果として、例外なし、もしくは、例外ありの2通りのいずれかを示す例外チェック情報が得られる。次に、例外なしを示す例外チェック情報が得られる場合における動作について説明する。この動作は、例外なしが確定した場合に共通する処理となる。例外チェック制御部131は、命令IDと例外なしを示す例外チェック命令を、信号線190を用いて命令実行制御部114に出力し、信号線184を用いて命令スケジューラ211に出力し、信号線181を用いて命令スケジューラ311に出力する。命令実行制御部114は、命令IDと、例外なしを示す例外チェック命令を、信号線160を用いて命令スケジューラ113に出力し、信号線161を用いてリオーダバッファ112に出力する。
【0087】
命令スケジューラ113、211、311は、それぞれ入力される命令IDと一致する命令IDに対応する例外チェック命令を完了させ、その命令に係るエントリを解放する。
リオーダバッファ112は、入力される命令IDと一致する命令IDに対応する例外チェック命令を、例外なしを示す実行完了命令に変更する。リオーダバッファ112は、例外チェック命令単独では完了(コミット)できず、直後に入力されるメモリアクセス命令とセットで完了する。
【0088】
次に、例外ありを示す例外チェック情報が得られる場合における動作を説明する。レベル4では、チェック結果として例外ありが確定する(
図10 S13参照)。例外チェック制御部131は、命令IDと例外ありを示す例外チェック命令と例外種類(ペーディレクトリ無効、ページテーブル無効、ページテーブル属性違反等)と例外が発生した最小の要素番号を、信号線190を用いて命令実行制御部114に出力し、信号線184を用いて命令スケジューラ211に出力し、信号線181を用いて命令スケジューラ311に出力する。命令実行制御部114は、命令IDと例外ありを示す例外チェック命令を、信号線160を用いて命令スケジューラ113に出力し、命令IDと例外有を示す例外チェック命令と例外が発生した最小の素番号を、信号線161を用いてリオーダバッファ112に出力する。
【0089】
命令スケジューラ113、211、311は、例外ありフラグの設定値を1(有効)に変更し、例外あり命令に係る命令IDを保存する。例外ありフラグ=1の状態で、新たに例外ありを示す例外チェック命令が到着した場合(複数命令で例外あり)、保存されている命令IDと新たに例外ありを検出した命令の命令IDを比較し、先行する命令の命令IDを保存する。命令スケジューラ113、211、311は、新たな命令に係る命令IDと一致する命令IDに対応する例外チェック命令を完了させエントリを解放する。リオーダバッファ112は、新たな命令に係る命令IDと一致する命令IDに対応する例外チェック命令を、例外ありを示す実行完了命令に変更し、例外が発生した最小の要素番号を保存する。
【0090】
(VSC命令動作)
次に、本実施形態に係るVSC命令の動作の例について説明する。
図1に戻り、スカラ処理部100の処理について説明する。命令キャッシュ110は、VSC命令を、信号線150を用いて命令デコーダ111へ出力する。
命令デコーダ111は、VSC命令の命令デコードを行い命令デコード結果と命令に付随する各種情報をリオーダバッファ112のエントリに空きがあるとき信号線151を用いてリオーダバッファ112へ出力する。
【0091】
リオーダバッファ112は、命令スケジューラ113のエントリに空きがあるとき、VSC命令を、信号線152を用いて命令スケジューラ113へ出力する。また、リオーダバッファ112は、出力対象の命令には各命令を識別するための命令IDを付加する。
命令スケジューラ113は、格納されている1エントリごとに命令の発行が可能か否かを判定する。命令スケジューラ113は、必要な資源の準備が整い、命令順序が保証できるとき、VSC命令を、信号線153を用いて命令実行制御部114へ出力する。命令スケジューラ113は、VSC命令をベクトル処理部とメモリアクセス処理部の両方に発行する。命令スケジューラ113は、各処理部への準備が整い次第、独立に命令を発行する。例外に関係する命令の発行条件として、例外ありフラグ=1になった場合、命令IDが保存されている命令の直後のメモリアクセス命令まで発行可能である。但し、命令スケジューラ113は、以降の命令の発行を停止する。本実施形態に係る命令スケジューラ113は、性能向上を目的として、先行するメモリアクセス命令の例外の有無が全て確定するまで待機しない。そのため、命令を発行するタイミングにより、例外ありに係るメモリアクセス命令に後続する命令がベクトル処理部200もしくはメモリアクセス処理部300へ発行されるケースが存在しうる。メモリアクセス処理部300の命令スケジューラ311と命令実行制御部312とリオーダバッファ112は、例外ありのメモリアクセス命令以降の命令を実行しない。これにより、正確な例外を保証する。
【0092】
命令実行制御部114は、信号線172を用いてVSC命令をベクトル命令発行制御部133へ出力する。命令実行制御部114は、スカラレジスタが有効と設定される場合は信号線171を用いてスカラレジスタ120へリード要求を出力する。
スカラレジスタ120は、リード要求で指定されたスカラレジスタのデータを、信号線173を用いてベクトル命令発行制御部133へ出力する。
命令実行制御部114は、ベクトル命令発行制御部133への命令発行が完了すると命令IDを、信号線161を用いてリオーダバッファ112へ出力する。
リオーダバッファ112は、入力される命令IDと一致する命令IDに対応するVSC命令をベクトル処理部200へ発行完了に変更する。ベクトル命令発行制御部133は、VSC命令とスカラレジスタ有効と設定される、場合はスカラレジスタのデータと命令に付随する情報を、信号線185を用いてベクトル処理部200の命令バッファ210へ出力する。
【0093】
命令バッファ210は、VSC命令を、命令スケジューラ211のエントリに空きがあるとき、信号線250を用いて命令スケジューラ211へ出力する。命令スケジューラ211は、1エントリごとに格納されている命令の発行が可能か判定し、必要な資源の準備が整い、命令順序が保証できるとき、例外チェック命令を、信号線251を用いて命令実行制御部212へ出力する。Vx(ストアデータ)とVy(ストアアドレス)とM(マスク)の準備が整うと発行可能になる。
命令実行制御部212は、信号線260を用いてベクトルレジスタ220へリード要求を出力し、信号線261を用いてベクトルマスクレジスタ221へリード要求を出力する。
【0094】
ベクトルレジスタ220は、指定されたベクトルレジスタのデータと命令IDストアデータを、信号線262を用いてメモリアクセス処理部300の命令実行制御部312へ出力する。
ベクトルマスクレジスタ221は、指定されたベクトルマスクレジスタのデータと命令IDを、信号線263を用いて命令実行制御部312へ出力する。命令実行制御部212は、メモリアクセス処理部300への出力後に命令IDを、信号線252を用いて命令スケジューラ211に出力する。
命令スケジューラ211は、入力される命令IDと一致する命令IDに対応するVSC命令を完了させエントリを解放する。
【0095】
命令実行制御部114は、信号線170を用いてVSC命令をメモリアクセス命令発行制御部130へ出力する。
命令実行制御部114は、スカラレジスタが有効と設定される場合、信号線171を用いてスカラレジスタ120へリード要求を出力する。
スカラレジスタ120は、リード要求で指定されたスカラレジスタのデータを、信号線173を用いてメモリアクセス命令発行制御部130へ出力する。
命令実行制御部114は、メモリアクセス命令発行制御部130への命令発行が完了すると、命令IDを、信号線160を用いて命令スケジューラ113に出力する。
【0096】
命令スケジューラ113は、入力される命令IDと一致する命令IDに対応するVSC命令を完了させエントリを解放する。命令実行制御部114は、メモリアクセス命令発行制御部130への命令発行が完了すると、命令IDを、信号線161を用いてリオーダバッファ112に出力する。
リオーダバッファ112は、入力される命令IDと一致する命令IDに対応するVSC命令に対し、メモリアクセス処理部300へ発行完了と変更する。メモリアクセス命令発行制御部130は、VSC命令とスカラレジスタのデータ(スカラレジスタ有効の場合)と命令に付随する情報を、信号線180を用いてメモリアクセス処理部300の命令バッファ310へ出力する。
【0097】
命令バッファ310は、VSC命令を、命令スケジューラ311のエントリに空きがあるとき、信号線350を用いて命令スケジューラ311へ出力する。
命令スケジューラ311は、先行するメモリアクセス命令のうち例外の有無が未確定のものがある場合、VSC命令の発行を待機する。先行するメモリアクセス命令に対して例外の有無が確定すると、命令スケジューラ311は、例外ありフラグをチェックする。命令スケジューラ311は、(例外ありフラグ=0)あるいは(例外ありフラグ=1かつ命令IDが保存されている命令の直後の命令を指す)場合に、VSC命令を発行する。命令スケジューラ311は、信号線351を用いて、発行した命令を命令実行制御部312へ出力する。例外ありフラグ=1の場合、直後の命令より後続の命令については先行命令で例外ありが確定している。そのため、命令スケジューラ311は、命令の発行を中止する。
【0098】
命令実行制御部312は、VSC命令の命令IDと一致するVx(ストアデータ)とVy(ストアアドレス)とM(マスク)がベクトル処理部200からVL個(要素番号0~要素番号VL-1)到着しているかチェックする。到着していない場合、命令実行制御部312は、VSC命令の実行を待機する。到着した場合、命令実行制御部312は、アドレス変換部132を用いてVyのストアアドレスの変換(仮想アドレスから物理アドレス)と例外チェックを行う(
図14参照)。命令実行制御部312は、要素番号に0を代入する(S301)。命令実行制御部312は、これから実行する要素番号がVL-1より大きいか否かをチェックする(S302)。命令実行制御部312は、当該要素番号に係るMの設定値が1であるとの条件を満たすか否かチェックする(S303)。S303の条件を満たす(YES)場合、アドレスが有効なため、命令実行制御部312は、ADRにVyの要素番号のデータを代入する(S304)。命令実行制御部312は、ADRに代入されたデータを、信号線360を用いてアドレス変換部132へ出力する。
【0099】
アドレス変換部132のページディレクトリ400は、ADRの上位ビット(ビット0~18)を参照してページディレクトリをチェックする(S305)。ページディレクトリ400は、例外チェックにおいて、(ページディレクトリのVビット=1)かつ(ADRの上位ビット(ビット0~18)=ページディレクトリの仮想アドレス)となるエントリが存在するか否かをチェックする。ページディレクトリ400は、例外チェック情報と有効なページディレクトリのディレクトリ番号を、信号線1830を用いてメモリアクセス処理部300の命令実行制御部312に出力する。
【0100】
命令実行制御部312は、ADRのページテーブル番号と有効なページディレクトリのディレクトリ番号と属性違反のチェックに必要な情報などを、信号線3601を用いて、アドレス変換部132のページテーブル401に出力する。
アドレス変換部132のページテーブル401は、ADRのページテーブル番号をチェックする(S306)。
【0101】
ページテーブル401は、ADRのページテーブル番号と有効なページディレクトリのディレクトリ番号を利用してページテーブルのエントリとなるVビット、属性およびページベースをリードする。ページテーブル401は、例外チェックの際、ページテーブルのエントリが有効になっているか否かをチェックする。即ち、(指定されたディレクトリ番号のVビット=1)かつ(ADRページテーブル番号のVビット=1)とページテーブルの属性違反のチェックがなされる。ページテーブルの属性違反のチェックでは、(指定されたディレクトリ番号のVビット=1)かつ(ADRのページテーブル番号が属性違反なし)のチェックがなされる。ページテーブル401は、ページベースと例外チェック情報を、信号線1831を用いて命令実行制御部312に出力する。
【0102】
命令実行制御部312は、次の要素番号のチェックのために要素番号に要素番号+1を代入する(S307)。そして、S302の処理に戻る。命令実行制御部312は、最後の要素番号まで処理が完了すると、命令IDを、信号線354を用いて命令スケジューラ311に出力する。命令スケジューラ311は、入力される命令IDと命令IDに対応するVSC命令を完了させエントリを解放する。
【0103】
命令実行制御部312は、Mの設定値が1となる要素番号に対し、S306の処理の後に出力された例外チェック情報をチェックする。例外チェック情報が、例外なしを示す場合、処理を継続する。命令実行制御部312は、ページベースを、利用した物理アドレスに変換する。命令実行制御部312は、アドレス変換において、Vyのストアアドレスの仮想アドレスの上位ビット(ページディレクトリとページテーブル番号の部分、ビット0~26)をページベースと差し替え、ページ内オフセットは変換せずに、物理アドレスに変換する。命令実行制御部312は、物理アドレスとストアデータ、信号線352を用いて命令発行制御部313へ出力する。
【0104】
命令発行制御部313は、VSC命令を、信号線353を用いてメモリへ出力する。例外チェック情報が、例外ありを示す場合、命令発行制御部313は、例外あり要素フラグ=1(有効)に変更し、最初に例外ありを検出した要素番号を例外あり要素番号として保存する。VSC命令の処理は、要素番号0~要素番号VL-1の順番に従って処理されるため、最初に例外ありを検出した要素番号は、例外が発生する最小の要素番号となる。
命令実行制御部312は、例外あり要素フラグ=1かつ例外あり要素番号以上となる要素番号に係る要素を命令発行制御部313に出力しない。命令実行制御部312は、最後の要素番号まで処理が完了すると、信号線354を用いて命令スケジューラ311に命令IDを出力する。命令スケジューラ311は、入力される命令IDと一致する命令IDに対応するVSC命令を完了させ、エントリを解放する。
【0105】
スカラ処理部100のリオーダバッファ112は、VSC命令のベクトル処理部の命令発行完了とメモリアクセス処理部の命令発行完了と直前の例外チェック命令の完了を一定周期でチェックする。これら3件が完了となった場合、リオーダバッファ112は、直前の例外チェック命令のエントリに保存された例外情報(例外の有無、例外の種類、最小の要素番号、命令ICなど)をVSC命令のエントリに保存し、VSC命令を実行完了命令に変更する。
リオーダバッファ112は、先行する全命令が完了したとき、直前の例外チェック命令とVSC命令をセットで完了(コミット)する。VSC命令はベクトルレジスタへの書き込みがない命令なので、VSC命令が例外なしの場合には、リオーダバッファ112は、他ブロックへ通知せずに完了し、エントリを解放する。VSC命令が例外ありかつ先行命令で例外なしの場合、リオーダバッファ112は、VSC命令の例外情報をソフトウェアから確認可能な例外レジスタ(図示せず)へ保存し、エントリを解放する。VSC命令が例外ありかつ先行命令で例外ありの場合、リオーダバッファ112は、先行命令について例外情報を例外レジスタへ保存済みのため、他ブロックへ通知せずに完了し、エントリを解放する。
【0106】
(VGT命令動作)
次に、本実施形態に係るVGT命令の動作の例について説明する。VGT命令に対する例外チェック命令の動作は、VGT命令に先行してなされる。VGT命令に対する例外チェック命令の動作は、VSC命令に対する例外チェック命令の動作と基本的に同様である。
図6に例示されるように、VGT命令に対する例外チェック命令もVSC命令に対する例外チェック命令と同様にベクトルレジスタVxが未使用のためである。但し、VSC命令の例外チェック命令とは異なり、VGT命令に対する例外チェック命令では、ページテーブルの属性違反となる書き込み禁止は存在しない。
【0107】
図1に戻り、スカラ処理部100の処理について説明する。
命令キャッシュ110は、VGT命令を、信号線150を用いて命令デコーダ111へ出力する。
命令デコーダ111は、入力されたVGT命令の命令デコードを行い命令デコード結果と命令に付随する各種情報を、リオーダバッファ112のエントリに空きがあるときに、信号線151を用いてリオーダバッファ112へ出力する。
リオーダバッファ112は、入力されたVGT命令を、命令スケジューラ113のエントリに空きがあるときに、信号線152を用いて命令スケジューラ113へ出力する。また、リオーダバッファ112は、出力対象の命令に各命令を識別するための命令IDを付加する。
【0108】
命令スケジューラ113は、格納されている1エントリ毎に命令の発行が可能か否かを判定し、発行に必要な資源の準備が整い、命令順序が保証できる場合、VGT命令を、信号線153を用いて命令実行制御部114へ出力する。
命令スケジューラ113は、VGT命令をベクトル処理部200とメモリアクセス処理部300の両方に発行する。命令スケジューラ113は、各部への発行準備が整い次第、VGT命令を個々に発行する。例外に関係する命令の発行条件として、例外ありフラグ=1になった場合、命令IDが保存されている命令の直後のメモリアクセス命令まで発行可能とし、以降の命令に対しては発行が停止される。本実施形態に係る命令スケジューラ113は、性能向上を目的として、先行するメモリアクセス命令の例外の有無が全て確定するまで待機しない。命令を発行するタイミングによって例外ありとするメモリアクセス命令の後続命令がベクトル処理部200またはメモリアクセス処理部300へ発行されるケースが存在するが、ベクトル処理部200の命令実行制御部212とリオーダバッファ112は、例外ありとするメモリアクセス命令以降の命令を実行しない。これにより正確な例外が保証される。
【0109】
命令実行制御部114は、信号線172を用いてVGT命令をベクトル命令発行制御部133へ出力する。命令実行制御部114は、スカラレジスタを有効とする場合、信号線171を用いてスカラレジスタ120へリード要求を出力する。
スカラレジスタ120は、入力されるリード要求で指定されたスカラレジスタのデータを、信号線173を用いてベクトル命令発行制御部133へ出力する。
命令実行制御部114は、ベクトル命令発行制御部133への命令発行を完了すると命令IDを、信号線161を用いてリオーダバッファ112へ出力する。
【0110】
リオーダバッファ112は、入力される命令IDと一致する命令IDに対応するVGT命令についてベクトル処理部200へ発行完了に変更する。
ベクトル命令発行制御部133は、VGT命令とスカラレジスタを有効とする場合、スカラレジスタのデータと命令に付随する情報を、信号線185を用いてベクトル処理部200の命令バッファ210へ出力する。
【0111】
命令バッファ210は、命令スケジューラ211のエントリに空きがあるとき、VGT命令を、信号線250を用いて命令スケジューラ211へ出力する。
命令スケジューラ211は、1エントリ毎に格納されている命令の発行が可能か否かを判定し、発行に必要な資源の準備が整い、命令順序が保証できるとき、例外チェック命令を、信号線251を用いて命令実行制御部212へ出力する。Vy(ストアアドレス)とM(マスク)の準備が整い、メモリからのデータを書き込むデータバッファ222のエントリに空きがあるとき発行可能となる。
【0112】
命令実行制御部212は、信号線260を用いてベクトルレジスタ220へリード要求を出力し、信号線261を用いてベクトルマスクレジスタ221へリード要求を出力する。命令実行制御部212は、命令IDとメモリからのロードデータを書き込むエントリ番号と自部に戻るデータの要素数を、信号線264を用いてデータバッファ222へ出力する。
ベクトルレジスタ220は、指定されたベクトルレジスタのデータと命令IDとメモリからのロードデータを書き込むデータバッファ222のエントリ番号を、信号線262を用いて命令実行制御部312へ出力する。ベクトルマスクレジスタ221は、指定されたベクトルマスクレジスタのデータと命令IDを、信号線263を用いて命令実行制御部312へ出力する。
【0113】
命令実行制御部212は、メモリアクセス処理部300への出力後に命令IDを、信号線252を用いて命令スケジューラ211へ出力する。
命令スケジューラ211は、入力される命令IDと一致する命令IDに対応するVGT命令について発行完了に変更する。
データバッファ222は、命令IDとメモリからのロードデータを書き込むエントリ番号と自部に戻るデータの要素数を保存する。
【0114】
命令実行制御部114は、信号線170を用いて、VGT命令をメモリアクセス命令発行制御部130へ出力する。
命令実行制御部114は、スカラレジスタを有効とする場合、信号線171を用いてスカラレジスタ120へリード要求を出力する。
スカラレジスタ120は、指定されたスカラレジスタのデータを、信号線173を用いてメモリアクセス命令発行制御部130へ出力する。
命令実行制御部114は、メモリアクセス命令発行制御部130への命令発行が完了すると、命令IDを、信号線160を用いて命令スケジューラ113に出力する。
命令スケジューラ113は、入力される命令IDと一致する命令IDに対応するVGT命令を完了させ、エントリを解放する。
【0115】
命令実行制御部114は、メモリアクセス命令発行制御部130への命令発行が完了すると、命令IDを、信号線161を用いてリオーダバッファ112に出力する。
リオーダバッファ112は、入力される命令IDと一致する命令IDに対応するVGT命令についてメモリアクセス処理部300へ発行完了と変更する。
メモリアクセス命令発行制御部130は、VGT命令とスカラレジスタ有効とする場合、スカラレジスタのデータと命令に付随する情報を、信号線180を用いてメモリアクセス処理部300の命令バッファ310へ出力する。
命令バッファ310は、入力されるVGT命令を命令スケジューラ311のエントリに空きがあるとき、信号線350を用いて命令スケジューラ311へ出力する。
【0116】
命令スケジューラ311では、プロセッサの構成により命令の発行条件が異なる。VGT命令によりVxに書き込むメモリからのデータをベクトルレジスタ220への書き込み時に保留できない構成では、命令スケジューラ311は、先行するメモリアクセス命令のうち例外の有無が未確定のものがある場合、VGT命令の発行を待機する。命令スケジューラ311は、先行命令の例外の有無が確定した後、VGT命令を発行する。例外が発生する命令において、例外の発生する要素の直前までベクトルレジスタ220が更新される。例外が発生する命令の後続命令については、先行命令で例外ありが確定しているため、命令スケジューラ311は、発行を中止する。
【0117】
ベクトルレジスタへの書き込み時に保留できる構成では、命令スケジューラ311は、先行するメモリアクセス命令で例外の有無が未確定であっても、VGT命令をメモリへ発行し、ベクトルレジスタへの書き込み時に正確な例外を保証する。次に、ベクトル処理部200にデータバッファ222が存在し、ベクトルレジスタ220への書き込み時に正確な例外を保証する構成を有する場合について説明する。先行命令の結果を待ち合わせする動作とベクトルレジスタへの書き込み保留動作以外は、上記のVGT命令の発行時と概ね同様な動作となる。まず、命令スケジューラ311は、例外ありフラグをチェックする。(例外ありフラグ=0)あるいは(例外ありフラグ=1かつ命令IDが保存されている命令の直後の命令)の場合に、命令スケジューラ311は、VGT命令を発行する。命令スケジューラ311は、VGT命令を、信号線351を用いて命令実行制御部312へ出力する。例外ありフラグ=1の場合、直後の命令より後続のVGT命令については先行命令で例外ありが確定している。その場合には、命令スケジューラ311は、VGT命令の発行を中止する。
【0118】
命令実行制御部312は、VGT命令の命令IDと一致する命令IDに対応するデータバッファのエントリのエントリ番号とVy(ストアアドレス)とM(マスク)がベクトル処理部200からVL個(要素番号0~要素番号VL-1)到着しているか否かをチェックする。到着していない場合、命令実行制御部312は、VGT命令の実行を待ち合わせる。到着した場合、命令実行制御部312は、アドレス変換部132を利用してVyのストアアドレスの変換(仮想アドレスから物理アドレス)と例外チェックを実行する(
図14参照)。命令実行制御部312は、要素番号に0を代入する(S301)。命令実行制御部312は、実行対象とする要素番号がVL-1より大きいか否かをチェックする(S302)。命令実行制御部312は、当該要素番号に係るマスクMの設定値が1であるとの条件を満たすか否かをチェックする(S303)。S303の条件を満たす(YES)場合、アドレスが有効なため、命令実行制御部312は、ADRにVyの要素番号のデータを代入する(S304)。命令実行制御部312は、ADRに代入されたデータを、信号線360を用いてアドレス変換部132へ出力する。
【0119】
アドレス変換部132のページディレクトリ400は、ADRの上位ビット(ビット0~18)を利用してページディレクトリをチェックする(S305)。ページディレクトリの例外チェックは、(ページディレクトリのVビット=1)かつ(ADRの上位ビット(ビット0~18)=ページディレクトリの仮想アドレス)となるエントリが存在する否かのチェックを含む。
ページディレクトリ400は、例外チェック情報と有効なページディレクトリのディレクトリ番号を、信号線1830を用いて命令実行制御部312に出力する。
命令実行制御部312は、ADRのページテーブル番号と有効なページディレクトリのディレクトリ番号と属性違反のチェックに必要な情報などを、信号線3601を用いてページテーブル401に出力する。
【0120】
ページテーブル401は、ADRのページテーブル番号をチェックする(S306)。ページテーブル401は、ADRのページテーブル番号と有効なページディレクトリのディレクトリ番号を用いて、ページテーブルのエントリとなるVビット、属性およびページベースをリードする。ページテーブルの例外チェックは、ページテーブルのエントリが有効になっているかのチェックである(指定されたディレクトリ番号のVビット=1)かつ(ADRページテーブル番号のVビット=1)となるか否かのチェックとページテーブルの属性違反のチェックを含む。ページテーブルの属性違反のチェックは、(指定されたディレクトリ番号のVビット=1)かつ(ADRのページテーブル番号が属性違反なし)となるか否かのチェックを含む。ページテーブル401は、ページベースと例外チェック情報を、信号線1831を用いて命令実行制御部312に出力する。命令実行制御部312は、次の要素番号のチェックのために、要素番号に要素番号+1を代入する(S307)。その後、S302の処理に戻る。命令実行制御部312は、最後の要素番号まで処理が完了すると命令IDを、信号線354を用いて命令スケジューラ311に出力する。命令スケジューラ311は、入力される命令IDと一致する命令IDに対応するVGT命令を完了させ、エントリを解放する。
【0121】
命令実行制御部312は、Mの設定値が1となる要素番号について、S306の処理の後に出力された例外チェック情報をチェックする。例外チェック情報が、例外なしの場合、命令実行制御部312は、命令に係る処理を継続する。命令実行制御部312は、ページベースを利用して仮想アドレスを物理アドレスに変換する。Vyのロードアドレスの仮想アドレスの上位ビット(ページディレクトリとページテーブル番号の部分、ビット0~26)をページベースと差し替え、ページ内オフセットは変換せずに物理アドレスに変換される。命令実行制御部312は、物理アドレスとデータバッファのエントリ番号を、信号線352を用いて命令発行制御部313へ出力する。
【0122】
命令発行制御部313は、VGT命令を、信号線353を用いてメモリへ出力する。例外チェック情報が、例外ありを示す場合、例外あり要素フラグの値が1(有効)に変更され、最初に例外ありを検出した要素番号が例外あり要素番号として保存される。VGT命令の処理は、要素番号0~要素番号VL-1の順番で処理されるため、最初に例外ありを検出した要素番号は、例外が発生する最小の要素番号になる。命令実行制御部312は、例外あり要素フラグ=1かつ例外あり要素番号以上となる要素を例外ありとして、命令発行制御部313に出力する。命令実行制御部312は、最後の要素番号まで処理が完了すると、命令IDを、信号線354を用いて命令スケジューラ311に出力する。命令スケジューラ311は、入力される命令IDと一致する命令IDに対応するVGT命令を完了させ、エントリを解放する。
【0123】
VGT命令のロードデータは、メモリから信号線270を介してデータバッファ222の指定されたエントリ番号へライトされる。例外ありでメモリへ発行した要素は、元のデータとは無関係なデータ(例えば全て0のデータ)として戻される。データバッファ222は、メモリから戻った要素の要素数をカウントし、事前に保存しておいた要素数と一致すると命令IDとVGT命令のロードデータ書き込み完了を、信号線272を用いて命令実行制御部212へ出力する。
命令実行制御部212は、命令IDとVGT命令のロードデータ書き込み完了を、信号線252を用いて命令スケジューラ211へ出力する。
命令スケジューラ211は、入力された命令IDと一致する命令IDに対応するVGT命令に対しデータバッファ利用可能に変更する。この状態になるとき、命令スケジューラ211は、VGT命令のロードデータとしてデータバッファ222に格納されたデータを利用できる。但し、命令スケジューラ211は、リオーダバッファ112からVGT命令の完了(コミット)が通知されるまで、ベクトルレジスタ220への書き込みを保留する。
【0124】
スカラ処理部100のリオーダバッファ112は、VGT命令のベクトル処理部200の命令発行完了とメモリアクセス処理部300の命令発行完了と直前の例外チェック命令の完了を一定周期ごとにチェックする。これら3件が完了となった場合、リオーダバッファ112は、直前の例外チェック命令のエントリに保存された例外情報(例外の有無、例外の種類、最小の要素番号)をVGT命令のエントリに保存し、VGT命令を実行完了命令に変更する。リオーダバッファ112は、先行する全命令が完了しているとき、直前の例外チェック命令とVGT命令をセットで完了(コミット)する。VGT命令は、ベクトルレジスタへの書き込みがある命令なので、リオーダバッファ112は、ベクトル処理部200へ完了(コミット)を通知する。リオーダバッファ112は、例外なしの場合は、命令IDと例外情報と完了(コミット)を、信号線155を用いて命令スケジューラ211へ出力し、エントリを解放するが、例外レジスタは変更しない。リオーダバッファ112は、処理対象の命令で例外あり、かつ、先行命令で例外なしとなる場合、処理対象の命令の命令IDと例外情報と完了(コミット)を、信号線155を用いて命令スケジューラ211へ出力し、エントリを解放し、VGT命令の例外情報をソフトウェアから確認可能な例外レジスタ(図示せず)へ保存する。リオーダバッファ112は、処理対象の命令で例外あり、かつ、先行命令で例外ありとなる場合、処理対象の命令に係る命令IDと例外情報と完了(コミット)を、信号線155を用いて命令スケジューラ211へ出力し、エントリを解放し、例外レジスタを変更しない。
【0125】
命令スケジューラ211は、リオーダバッファ112から完了(コミット)を受け取ると、受け取った命令IDと一致する命令IDに対応するVGT命令がデータバッファ利用可能になるまで待ち合わせ、命令の完了(コミット)のためにVGT命令を、信号線251を用いて命令実行制御部212へ出力し、エントリを解放する。命令実行制御部212は、信号線264を用いてデータバッファ222へリード要求を出力し、信号線260を用いてベクトルレジスタ220へライト要求を出力し、信号線261を用いてベクトルマスクレジスタ221へリード要求を出力する。
【0126】
データバッファ222は、VGT命令のロードデータを、信号線271を用いてベクトルレジスタ220へ出力する。
ベクトルレジスタ220は、VGT命令のロードデータをライトする。
ベクトルマスクレジスタ221は、信号線263を用いてベクトルレジスタ220へM(マスク)のデータを出力する。ベクトルレジスタ220へのライトは、Mの設定値が1なる要素番号のデータがライト対象になるが、例外の有無により動作が異なる。例外なしの場合、ベクトルレジスタ220は通常動作(例外による制限なし)でライトする。処理対象の命令で例外あり、かつ先行命令で例外なしの場合、ベクトルレジスタ220は例外の発生した最小の要素番号-1までの要素をライトし、最小の要素番号以降の要素をライトしない。処理対象の命令で例外あり、かつ先行命令で例外ありの場合、ベクトルレジスタ220は、ライトしない。例外の発生した命令より後続に存在する命令のためである。
【0127】
上記の説明のように、ベクトル処理部200の命令スケジューラ211と命令実行制御部212とベクトルレジスタ220とリオーダバッファ112が、例外ありの命令以降の命令を実行しないことで、正確な例外が保証される。
【0128】
(その他の動作)
次に、その他の動作について説明する。その他のメモリへの書き込みを伴うメモリアクセス命令に対しては、例外チェック命令が存在しないが、当該命令に対する動作は、基本的にVSC命令に対する動作と同様となる。メモリアクセス処理部300の命令スケジューラ311と命令実行制御部312とリオーダバッファ112が、例外ありのメモリアクセス命令以降の命令を実行しないことで、正確な例外が保証される。
【0129】
その他のベクトルレジスタへの書き込みがある命令に対する動作は、基本的にVGT命令に対する処理と同様となる。ベクトル処理部200の命令スケジューラ211と命令実行制御部212とベクトルレジスタ220とリオーダバッファ112が、例外ありの命令以降の命令を実行しないことにより、正確な例外が保証される。
【0130】
リオーダバッファ112、命令スケジューラ113、211、311に存在するインフライト命令を全て完了(コミット)すると例外処理への遷移が可能になる。本実施形態に係るコンピュータシステムは、例外ハンドラーを備えてもよい。例外ハンドラーは、ソフトウェアから確認可能な例外レジスタの情報を参照し、例外種類や例外が発生した命令ICを特定して、上記の例外チェック動作を行う。また、例外ハンドラーは、例外の発生した命令がベクトル命令である場合、例外の発生した最小の要素番号の情報を利用して、例外が発生した命令もしくは要素を特定し、特定した命令または要素に係る動作から再開してもよい。
【0131】
なお、上記の説明では、ベクトルメモリアクセス命令に対する例外チェック命令が、ソフトウェアで定義される命令であることを前提としたが、これには限られない。命令デコーダ111がVSC命令やVGT命令などの命令を検出するとき、当該命令の前に自動生成されるハードウェア専用の内部命令として定義されてもよい。
また、上記の説明では、VSC命令またはVGTと同様な構成を有する例外チェック命令を主として例示したが、これには限られない。ベクトルストア(VST:Vector Store)命令またはベクトルロード(VLD:Vector Load)命令に対し、これらと同様な構成を有する例外チェック命令に対しても適用することができる。
【0132】
これらの命令では、Syにディスタンス、Szにベースアドレス、Vxにデスティネーションのベクトルレジスタ、Mにマスクを指定可能とする。例外チェック命令は、レベル1の場合にディスタンスが正の数の場合、MIN=SzからMAX=(Sz+Sy×(VL-1)+命令のアクセスデータサイズ(8バイト、4バイト、2バイト、1倍となど))までの範囲、ディスタンスが負の数の場合、MIN=(Sz-Sy×(VL-1)-命令のアクセスデータサイズ)からMAX=Szまでの範囲をチェック対象とすればよい。レベル2は、設定されない。レベル3は、マスクMの設定値を全ての要素番号について1とし、アドレスとしてディスタンスが正の数の場合はSz+Sy×(VL-1)+命令のアクセスデータサイズ、ディスタンスが負の数の場合はSz-Sy×(VL-1)-命令のアクセスデータサイズをチェック対象とする。レベル4は、マスクMを設定値が1となる要素のアドレスをチェック対象とする。その他の動作は、VST命令に対してはVSC命令と同様、VLD命令に対してはVGT命令と同様になる。
【0133】
なお、近年では半導体プロセスの微細化によりLSI(Large Scale Integration)に搭載できる論理回路が増加し、CPU(Central Processing Unit)の演算性能は向上している。この演算性能の向上はコア数を増加させるマルチコア化による寄与が大きく、単一コア当たりの性能向上が鈍化しつつある。しかしながら、マルチコア化による性能向上を享受するために必要な並列化が困難なプログラムも多数存在するため、単一コアの性能向上は依然として重要である。単一コアの性能向上を行う手法として、1命令で複数のデータと複数の演算器を動作可能にするSIMD(Single Instruction Multiple Data)技術やベクトル技術が広く知られている。特に、ベクトル技術を利用するベクトルプロセッサでは、仮想記憶に必要とされる正確な例外をサポートする場合にベクトル命令で処理する要素数が非常に多い。そのため過渡的な状態を保存して各命令の処理が確定した後に実行すべきでない命令をキャンセルする機能を実現するのが困難という課題が生じていた。実行すべきではない命令とは、例えば、例外を検出した命令の後続命令などである。また、先行する全ての命令の処理が確定するまで後続命令の実行を保留する場合、命令を処理できない待ち時間が発生し、性能低下の原因となりうる。そのため、先行命令の処理の確定の高速化が求められる。
【0134】
本実施形態は、ベクトルメモリアクセス命令を実行するプロセッサにおいて、ベクトルメモリアクセス命令の実行前にメモリアクセスの例外チェック命令を実行する。例外チェック命令に従って、元のベクトルメモリアクセス命令の参照先で例外発生に関係する情報に限定してチェックが行われる。例外チェック命令には、複数段階の例外チェック条件が設けられ、より厳密な条件に変更しながら例外チェックが実行される。例外チェックにより例外が発生しないことが確定した場合は、以降の条件はスキップして一連の処理を終了する。また、例外チェックにおいて、ページが有効な範囲をアドレス範囲で指定する構成をとるアドレス変換テーブルを用いる。これにより、メモリアクセス例外の検出に際し、個別のページテーブルにアクセスする回数を削減することができる。これらにより、ベクトルメモリアクセス命令のメモリアクセス例外を高速に検出するという要請に応えることができる。
【0135】
次に、上記の実施形態の最小構成について説明する。
図15は、最小構成例を示す説明図である。上記の実施形態に係るプロセッサ10は、ベクトルメモリアクセス命令の実行前に例外チェック命令を実行するプロセッサであって、例外チェック命令は、ベクトルメモリアクセス命令の参照先に関する情報の例外チェックを示し、例外チェックは、複数段階のレベル別処理を有し、高レベルの前記レベル別処理ほど厳密な条件に対する例外チェックを含み、低レベルのレベル別処理ほど先行し、例外検出の有無が確定するとき、例外チェック命令を終了する。
【0136】
上記の実施形態は、次のように実現されてもよい。
(a)プロセッサ10において、複数段階のレベル別処理は、例外チェック命令で指示されるアドレス範囲ごとに、例外の有無を判定する第1レベル別処理と、第1レベル別処理よりも高レベルのレベル別処理として、例外チェック命令で指示される個々のアドレスごとに例外の有無を判定する第2レベル別処理と、を少なくとも有してもよい。
(b)(a)のプロセッサ10は、第1レベル別処理において、アドレス範囲ごとに、ページディレクトリの有効性を示す有効フラグを参照して、ページディレクトリの有無を判定してもよい。
(c)(b)のプロセッサ10は、ページディレクトリごとに、有効性を示す有効フラグが格納されたページテーブルを保持し、ページディレクトリに対応するページテーブルに示される有効フラグに基づいて当該ページテーブルの有効性を判定してもよい。
(d)(c)のプロセッサ10において、ページテーブルは、ページディレクトリごとに属性を示し、ページディレクトリに対応するページテーブルに示される属性における違反の有無を判定してもよい。
(e)(a)のプロセッサ10において、例外チェック命令は、要素ごとの有効性を示すベクトルマスクを有し、第2レベル別処理よりも高レベルのレベル別処理として、例外チェック命令で指示される個々のアドレスのうち、ベクトルマスクで指示される要素ごとに、例外の有無を判定する第3レベル別処理と、を実行してもよい。
(f)(a)のプロセッサ10において、例外チェック命令は、複数のベクトルを収容する配列ごとにアドレスと配列サイズを示し、第1レベル別処理よりも高レベルかつ第2レベル別処理よりも低レベルのレベル別処理として、アドレスから配列サイズで指示されるアドレス範囲ごとに、例外の有無を判定する第3レベル別処理を実行してもよい。
(g)プロセッサ10におけるメモリアクセス例外処理方法であって、プロセッサ10は、ベクトルメモリアクセス命令の実行前に例外チェック命令を実行し、例外チェック命令は、ベクトルメモリアクセス命令の参照先に関する情報の例外チェックを示し、例外チェックは、複数段階のレベル別処理を有し、高レベルのレベル別処理ほど厳密な条件に対する例外チェックを含み、低レベルのレベル別処理ほど先行し、例外検出の有無が確定するとき、例外チェック命令を終了する。
【0137】
以上、本実施形態につぃて説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0138】
10…プロセッサ、100…スカラ処理部、110…命令キャッシュ、111…命令デコーダ、112…リオーダバッファ、113…命令スケジューラ、114…命令実行制御部、120…スカラレジスタ、121…演算器、130…メモリアクセス命令発行制御部、131…例外チェック制御部、132…アドレス変換部、133…ベクトル命令発行制御部、200…ベクトル処理部、210…命令バッファ、211…命令スケジューラ、212…命令実行制御部、220…ベクトルレジスタ、221…ベクトルマスクレジスタ、222…データバッファ、300…メモリアクセス処理部、310…命令バッファ、311…命令スケジューラ、312…命令実行制御部、313…命令発行制御部、400…ページディレクトリ、401…ページテーブル、402…設定部、403…範囲指定レジスタ