(57)【要約】  従来の順序付データ参照命令では、実行順序の保証対象となる命令を個別に指定できず、また、実行順序の保証対象となる資源も指定できなかったことから、命令のアウト・オブ・オーダ実行などで命令移動が必要以上に制限され、特にアクセスレイテンシが大きい資源へのデータ転送を行う場合などにおいて、性能劣化が大きくなっている。そこで、予め定められたフィールド（３００ｍ）が含まれると判断した順序付データ参照命令（３００）のフィールドを解読して、順序付データ参照命令（３００）が指定する、実行順序の保証対象の対象命令（６００）を特定し、特定された順序付データ参照命令（３００）の実行に対する対象命令（６００）の実行順序を保証する。
2009119021.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサによる命令の実行を制御する方法であって、
予め定められたフィールドが第１のデータ参照命令に含まれるか否かを判断するフィールド判断工程と、
前記フィールド判断工程により前記フィールドが含まれると判断された前記第１のデータ参照命令の当該フィールドを解読して、当該第１のデータ参照命令が指定する、実行順序の保証対象となる第２のデータ参照命令を特定する命令特定工程と、
前記第１のデータ参照命令、および、特定された前記第２のデータ参照命令を実行させるに際して、前記第１のデータ参照命令の実行に対する前記第２のデータ参照命令の実行順序を保証するように当該２つの命令の実行順序を制御する実行制御工程とを備える命令実行制御方法。
【請求項２】
前記命令特定工程は、前記フィールド判断工程により前記フィールドが含まれると判断された前記第１のデータ参照命令の当該フィールドを解読して、当該第１のデータ参照命令が指定する、当該第１のデータ参照命令より後に表記された、実行順序の保証対象となる第２のデータ参照命令を特定し、
前記実行制御工程は、前記第１のデータ参照命令の実行完了よりも後の実行順序で、特定された当該第２のデータ参照命令を実行させる請求項１記載の命令実行制御方法。
【請求項３】
前記命令特定工程は、前記フィールド判断工程により前記フィールドが含まれると判断された当該第１のデータ参照命令の当該フィールドを解読して、当該第１のデータ参照命令が指定する、当該第１のデータ参照命令よりも前に表記された、実行順序の保証対象となる第２のデータ参照命令を特定し、
前記実行制御工程は、前記第１のデータ参照命令の実行よりも前に実行完了する実行順序により、特定された前記第２のデータ参照命令を実行させる請求項１記載の命令実行制御方法。
【請求項４】
前記命令特定工程は、前記フィールド判断工程により前記フィールドが含まれると判断された前記第１のデータ参照命令の当該フィールドを解読して、当該第１のデータ参照命令が指定する、当該第１のデータ参照命令よりも後に表記された、実行順序の保証対象となる第２のデータ参照命令、および、当該第１のデータ参照命令よりも前に表記された、実行順序の保証対象となる第２のデータ参照命令をそれぞれ特定し、
前記実行制御工程は、前記第１のデータ参照命令の実行完了よりも後の実行順序で、特定された、表記が後ろの前記第２のデータ参照命令を実行させると共に、当該第１のデータ参照命令の当該実行よりも前に実行完了する実行順序で、表記が前である前記第２のデータ参照命令を実行させる請求項１記載の命令実行制御方法。
【請求項５】
前記フィールドは、前記第１のデータ参照命令が前記第２のデータ参照命令を指定するか、指定しないかを示すフィールドであり、
前記命令特定工程では、指定することが示される場合に、当該第１のデータ参照命令のアクセス先の資源と同じ資源をアクセス先とする他のデータ参照命令を、指定される前記第２のデータ参照命令として特定する請求項４記載の命令実行制御方法。
【請求項６】
前記命令特定工程では、当該第１のデータ参照命令の前記アクセス先の資源の各データ領域のうちで、当該第１のデータ参照命令によりアクセスされるデータ領域と同じデータ領域にアクセスするデータ参照命令のみを前記第２のデータ参照命令と特定する請求項５記載の命令実行制御方法。
【請求項７】
前記命令特定工程では、前記第１のデータ参照命令の前記アクセス先の資源の各データ領域のうちで、当該第１のデータ参照命令によってアクセスされるデータ領域を含む予め定められた近傍のデータ領域にアクセスするデータ参照命令を前記第２のデータ参照命令と特定する請求項５記載の命令実行制御方法。
【請求項８】
前記命令特定工程では、前記第１のデータ参照命令が、レジスタ間接方式により当該資源の各データ領域のうちからアクセスする前記データ領域を特定する場合には、当該資源をアクセス先とする、いずれのデータ領域にアクセスするデータ参照命令も、前記第２のデータ参照命令と特定する請求項７記載の命令実行制御方法。
【請求項９】
前記フィールドは、データ参照命令を特定するフィールドであり、
前記命令特定工程は、当該フィールドを解読することにより、当該フィールドが特定するデータ参照命令を前記第２のデータ参照命令と特定する請求項２〜４の何れか１項に記載の命令実行制御方法。
【請求項１０】
データ参照命令の命令フォーマットであって、
前記データ参照命令は、
当該データ参照命令のアクセス先の資源を特定する命令本体部と、
当該データ参照命令が、他のデータ参照命令の実行順序を保証させる順序付データ参照命令か否かを示すフィールドとを備えるデータ参照命令の命令フォーマット。
【請求項１１】
データ参照命令の命令フォーマットであって、
前記データ参照命令は、
当該データ参照命令が保証させる当該データ参照命令に対する相対的な実行順序の保証対象のデータ参照命令を特定するフィールドを備えるデータ参照命令の命令フォーマット。
【請求項１２】
当該フィールドは、１つ又は複数のアドレス空間を指定することにより、各アドレス空間の領域に格納されるデータ参照命令を各々、前記保証対象のデータ参照命令と特定する請求項１１記載の命令フォーマット。
【請求項１３】
前記フィールドは、１つまたは複数の当該データ参照命令が有するオペランドを指定することにより、当該各オペランドが特定するデータ領域と同じデータ領域にアクセスする他のデータ参照命令を前記保証対象のデータ参照命令と特定する請求項１１記載の命令フォーマット。
【請求項１４】
前記フィールドは、１つまたは複数の命令の種類を指定することにより、指定する当該各種類のデータ参照命令を、前記保証対象のデータ参照命令と特定する請求項１１記載の命令フォーマット。
【請求項１５】
命令を実行するプロセッサであって、
予め定められたフィールドが第１のデータ参照命令に含まれるか否かを判断するフィールド判断部と、
前記フィールド判断部により前記フィールドが含まれると判断された前記第１のデータ参照命令の当該フィールドを解読して、当該第１のデータ参照命令が指定する、当該第１のデータ参照命令より後に表記された、実行順序の保証対象の第２のデータ参照命令を特定する命令特定部と、
前記第１のデータ参照命令の実行完了よりも後の実行順序で、特定された当該第２のデータ参照命令を実行させる実行制御部とを備えるプロセッサ。
【請求項１６】
命令を実行するプロセッサであって、
予め定められたフィールドが第１のデータ参照命令に含まれるか否かを判断するフィールド判断部と、
前記フィールド判断部により前記フィールドが含まれると判断された当該第１のデータ参照命令の当該フィールドを解読して、当該第１のデータ参照命令が指定する、当該第１のデータ参照命令よりも前に表記された、実行順序の保証対象の第２のデータ参照命令を特定する命令特定部と、
前記第１のデータ参照命令の実行よりも前に実行完了する実行順序により、特定された前記第２のデータ参照命令を実行させる実行制御部とを備えるプロセッサ。
【請求項１７】
命令を実行するプロセッサであって、
予め定められたフィールドが第１のデータ参照命令に含まれるか否かを判断するフィールド判断部と、
前記フィールド判断部により前記フィールドが含まれると判断された前記第１のデータ参照命令の当該フィールドを解読して、当該第１のデータ参照命令が指定する、当該第１のデータ参照命令よりも後に表記された、実行順序の保証対象の第２のデータ参照命令、および、当該第１のデータ参照命令よりも前に表記された、実行順序の保証対象の第２のデータ参照命令をそれぞれ特定する命令特定部と、
前記第１のデータ参照命令の実行完了よりも後の実行順序で、特定された、表記が後ろの前記第２のデータ参照命令を実行させると共に、当該第１のデータ参照命令の当該実行よりも前に実行完了する実行順序で、表記が前である前記第２のデータ参照命令を実行させる実行制御部とを備えるプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、命令実行制御方法、命令フォーマット、およびその方法を用いるプロセッサに関する。
【背景技術】
【０００２】
従来より、順序付データ参照命令があり、順序付データ参照命令の命令フォーマットがあり、順序付データ参照命令の命令を実行するプロセッサがある。【０００３】
命令の実行順序は、命令のアウト・オブ・オーダ実行や、コンパイラの最適化により変更されることがある。【０００４】
一方、命令の実行順序が意図せず変更されると、変更前の命令の実行順序が守られないことにより、問題が発生する場合がある。例えば、プロセッサとプロセッサ外部のメモリやＩＯレジスタとの間でデータの授受を行う場合、他のプロセッサとの待ち合わせが必要な場合や、あるＩＯレジスタの書込みが完了してから他のＩＯレジスタを読込まなければならない場合などに、命令の実行順序が意図せず変更されて、問題が発生することがある。一般に、２つの命令の間に、いわゆるデータ依存（フロー依存、逆依存、出力依存等）、制御依存、資源競合などの依存関係があったり、それらの命令の間に因果関係があると、それらの命令の実行順序が意図されずに変更されると、問題が生じる恐れがある。【０００５】
そこで、この問題を解決する従来の方法として、非特許文献１では、順序付データ参照命令を準備している。【０００６】
非特許文献１に記載された従来の順序付データ参照命令では、ＩＡ―６４プロセッサにおいて、プログラムが意図した順序通りにデータ参照命令を実行させるために、アクワイヤ命令、リリース命令、フェンス命令の３種類を準備している。（ａ）アクワイヤ命令は、アクワイヤ命令の実行完了後に、そのアクワイヤ命令の後に表記されたデータ参照命令を実行することを保証させる順序付データ参照命令である。（ｂ）リリース命令は、リリース命令実行前に、そのリリース命令の前に表記されたデータ参照命令の実行が完了することを保証させる順序付データ参照命令である。（ｃ）フェンス命令は、フェンス命令の実行完了後に、そのフェンス命令の後に表記されたデータ参照命令を実行することを保証させると共に、当該フェンス命令実行前に、当該フェンス命令の前に表記されたデータ参照命令の実行完了を保証させる順序付データ参照命令である。【０００７】
非特許文献１は、このような、他のデータ参照命令の実行順序を保証させる順序付データ参照命令を設けて、意図しない実行順序の変更により問題が生じることを回避する技術を開示している。
【非特許文献１】ＩＡ−６４プロセッサ基本講座（記載頁：Ｐ７６〜Ｐ７９）  著者：池井  満、発行所：株式会社オーム社、発行日：２０００年８月２５日
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、上記従来技術は、実行順序の保証対象となる命令を個別に指定できず、また、実行順序の保証対象となる資源も指定できないもので、多数の命令の実行順序を無条件に保証してしまうものとなっている。このため、順序付データ参照命令により実行順序が保証される命令が多数となり、命令のアウト・オブ・オーダ実行時などに命令移動が必要以上に制限されて、特にアクセスレイテンシが大きい資源へのデータ転送を行う場合などにおいて、プロセッサの速度が低下し、性能劣化が大きくなってしまうという問題を有している。【０００９】
本発明は、かかる課題に鑑みてなされたものであり、実行順序の保証対象の命令を的確なもののみにして、プロセッサを高速化できるようにすることを目的とする。
【課題を解決するための手段】
【００１０】
上記課題を解決する本発明の命令実行制御方法、命令フォーマット、およびプロセッサは、次の通りである。【００１１】
請求項１記載の発明は、プロセッサによる命令の実行を制御する方法であって、予め定められたフィールドが第１のデータ参照命令に含まれるか否かを判断するフィールド判断工程と、前記フィールド判断工程により前記フィールドが含まれると判断された前記第１のデータ参照命令の当該フィールドを解読して、当該第１のデータ参照命令が指定する、実行順序の保証対象となる第２のデータ参照命令を特定する命令特定工程と、前記第１のデータ参照命令、および、特定された前記第２のデータ参照命令を実行させるのに、前記第１のデータ参照命令の実行に対する、特定された前記第２のデータ参照命令の実行順序を保証するよう、当該２つの命令の実行順序を制御する実行制御工程とを備える命令実行制御方法である。【００１２】
請求項２記載の発明は、前記命令特定工程は、前記フィールド判断工程により前記フィールドが含まれると判断された前記第１のデータ参照命令の当該フィールドを解読して、当該第１のデータ参照命令が指定する、当該第１のデータ参照命令より後に表記された、実行順序の保証対象となる第２のデータ参照命令を特定し、前記実行制御工程は、前記第１のデータ参照命令の実行完了よりも後の実行順序で、特定された当該第２のデータ参照命令を実行させる請求項１記載の命令実行制御方法である。【００１３】
請求項３記載の発明は、前記命令特定工程は、前記フィールド判断工程により前記フィールドが含まれると判断された当該第１のデータ参照命令の当該フィールドを解読して、当該第１のデータ参照命令が指定する、当該第１のデータ参照命令よりも前に表記された、実行順序の保証対象となる第２のデータ参照命令を特定し、前記実行制御工程は、前記第１のデータ参照命令の実行よりも前に実行完了する実行順序により、特定された前記第２のデータ参照命令を実行させる請求項１記載の命令実行制御方法である。【００１４】
請求項１０記載の発明は、データ参照命令の命令フォーマットであって、当該データ参照命令のアクセス先の資源を特定する命令本体部と、当該データ参照命令が、他のデータ参照命令の実行順序を保証させる順序付データ参照命令か否かを示すフィールドを備えるデータ参照命令の命令フォーマットである。【００１５】
請求項１１記載の発明は、データ参照命令の命令フォーマットであって、当該データ参照命令が保証させる当該データ参照命令に対する相対的な実行順序の保証対象のデータ参照命令を特定するフィールドを備えるデータ参照命令の命令フォーマットである。【００１６】
こうすることで、実行順序の保証対象となる命令を個別に指定することができるので、例えばアウト・オブ・オーダ実行時などにおいて、移動できない命令が、指定された的確なもののみになり、移動を制限される命令を減らすことにより、より自由に命令を移動させて、例えばストールを十分に減らすことができる等によって、プログラムの実行速度を高速化できる。【００１７】
なお、上記「前記第１のデータ参照命令の実行に対する、特定された前記第２のデータ参照命令の実行順序を保証する」とは、第１のデータ参照命令の実行に対する相対的な実行順序を保証することであり、例えば、第１のデータ参照命令が自己の実行順序で実行開始されてから、完了するまでの実行の時間のうちの予め定められた基準時に対する相対的な実行順序を保証することである。【００１８】
請求項５記載の発明は、前記フィールドは、前記第１のデータ参照命令が前記第２のデータ参照命令を指定するか、指定しないかを示すフィールドであり、前記命令特定工程では、指定することが示される場合に、当該第１のデータ参照命令のデータ参照のアクセス先の資源と同じ資源をアクセス先とする他のデータ参照命令を、指定される前記第２のデータ参照命令として特定する請求項４に記載の命令実行制御方法である。【００１９】
このような請求項５記載の発明、および請求項１０記載の発明によれば、順序付データ参照命令のアクセス先の資源により実行順序の保証対象となる命令が決定されるので、実行順序の保証対象となる命令を指定する専用のフィールドが不要となり、専用フィールドのない順序付データ参照命令を構成できて、自由に順序付データ参照命令を構成できるようになり、順序付データ参照命令の適用範囲が広がる。【００２０】
請求項９記載の発明は、前記フィールドは、データ参照命令を特定するフィールドであり、前記命令特定工程は、当該フィールドを解読することにより、当該フィールドが特定するデータ参照命令を前記第２のデータ参照命令と特定する請求項２〜４の何れかに記載の命令実行制御方法である。【００２１】
このような請求項９記載の発明、請求項１１〜１４記載の発明によれば、それぞれ、順序付データ参照命令のフィールドの指定により実行順序の保証対象となる命令が決定されて、保証対象の命令を容易、自由、的確に選べるようになったり、同じ保証対象の命令でもその命令を指定する方法を自由に選べるようになったりして、実行順序の保証対象となる命令を指定する自由度が広がる。また、プロセッサが、単にフィールドの指定に基づいて、容易に、保証対象の命令を特定できるようになる。
【発明の効果】
【００２２】
本発明によれば、実行順序の保証対象の対象命令を、指定される的確なもののみにして、移動を制限される命令を減らすことにより、プロセッサの実行性能を上げることができる。
【図面の簡単な説明】
【００２３】
【図１】図１は、プロセッサを備えるパーソナルコンピュータ、および、当該パーソナルコンピュータが実行するプログラムを示す図である。
【図２】図２は、実行部の具体的な構成と、実行部に接続する命令発行部およびデータ格納部を示す図である。
【図３】図３は、命令発行部の具体的な構成と、命令発行部に接続する命令格納部および実行部を示す図である。
【図４】図４（ａ）（ｂ）（ｃ）は、順序付データ参照命令の命令フォーマットを示す図である。
【図５】図５（ａ）（ｂ）は、第１型の順序付データ参照命令の第１〜第３の３つの具体例を含んだプログラム、および、それらの第１型の順序付データ参照命令の具体例により資源アクセスがされる各資源を示す図である。
【図６】図６（ａ）（ｂ）（ｃ）（ｄ）は、第２型の順序付データ参照命令の第１〜第４の具体例がそれぞれ含まれた４つのプログラムと、それら具体例により資源アクセスされるデータ格納部及びＩＯレジスタを示す図である。
【図７】図７は、第１種類の順序付データ参照命令が含まれるプログラムを説明する図である。
【図８】図８は、第２種類の順序付データ参照命令が含まれるプログラムを説明する図である。
【図９】図９は、第３種類の順序付データ参照命令が含まれるプログラムを説明する図である。
【図１０】図１０は、ＰＣが命令を実行する処理を示すフローチャートである。
【図１１】図１１は、図１０のステップＳ４の具体的な内容を示すフローチャートである。
【図１２】図１２は、図１１のステップＳ４４の具体的な内容を示すフローチャートである。
【符号の説明】
【００２４】
１  プロセッサ
２  データ格納部
３  命令格納部
４  命令発行部
５  実行部
４１  フィールド存在判断部
４２  対象命令特定部
４３  命令発行制御部
１００  ＰＣ
２００  プログラム
３００  順序付データ参照命令
３００ｎ  本体部分
３０１、３０１ａ、３０１ａ１  第１型の順序付データ参照命令
３０１ｍ  指定有無表示フィールド
３０２、３０２ａ〜３０２ｄ  第２型の順序付データ参照命令
３０２ｍ  対象特定フィールド
６００、６０１、６０２  対象命令
２ＩＯ  ＩＯレジスタ
２Ｐ  アクセス箇所
２Ｎ  近傍データ領域
【発明を実施するための最良の形態】
【００２５】
図面を参照した下記の説明により本発明に係る方法、命令フォーマット、プロセッサの実施形態が示される。【００２６】
図１は、プロセッサ１を備えるパーソナルコンピュータ１００およびパーソナルコンピュータ１００が実行するプログラム２００を示す図である。パーソナルコンピュータ１００は、以下では、ＰＣ１００と略称される。【００２７】
ＰＣ１００は、プロセッサ１と、データ格納部２とを備える。【００２８】
プロセッサ１は、ＰＣ１００が保持するプログラム２００を実行するプロセッサ（中央演算処理装置、ＣＰＵ）である。なお、本実施形態のプログラム２００には、順序付データ参照命令３００が含まれ、プロセッサ１は、順序付データ参照命令３００を含む命令セットを有する。【００２９】
データ格納部２は、プロセッサ１により、データを格納するのに用いられ、プロセッサ１が格納させるデータを保持すると共に、格納するデータをプロセッサ１へと送る。例えば、データ格納部２は、ＰＣ１００のメインメモリや、ハードディスク（ＨＤＤ）である。【００３０】
プロセッサ１は、命令格納部３と、命令発行部４と、実行部５とを備える。【００３１】
命令格納部３は、プロセッサ１内部にプログラム２００を入力し、入力したプログラム２００を格納する。命令格納部３は、例えば、プロセッサ１が有する命令キャッシュである。【００３２】
命令発行部４は、命令格納部３に格納されたプログラム２００のうちで、プロセッサ１が現在実行する実行部分を、命令格納部３から取得し、取得した実行部分に含まれる各命令を実行部５に発行し、実行部５に実行させる。命令発行部４は、このとき、アウト・オブ・オーダで命令の発行を行い、つまり命令の乱発行を行い、当初のプログラム２００における各命令の順序を、適宜別の順序に移動させて、移動がされた後の実行順序でそれぞれ各命令を実行部５に実行させる。なお、命令発行部４は、データ線１１を介して実行部分を命令格納部３から取得する。【００３３】
そして、命令発行部４は、データ格納部２に書き込みや読み出しなどの資源アクセスを行う命令を実行させる場合には、データ格納部２から信号線１４を介して、それらの資源アクセスが完了したことを示す完了信号を取得して、資源アクセスが完了したことの完了検知を行う。【００３４】
なお、資源アクセスには、アクセス先の資源へのデータの書き込み乃至資源へのデータの入力が行われる資源アクセスと、アクセス先の資源からのデータの読み出し乃至資源からのデータの出力が行われる資源アクセスと、それら書き込み乃至入力と読み出し乃至出力との両者を組み合わせたものが行われる資源アクセスとが含まれる。この資源アクセスは、例えば信号線１３を介して行われる。【００３５】
実行部５は、命令発行部４が発行し、実行部５に実行させる命令をそれぞれ実行する。実行部５は、命令発行部４が実行させる実行順序で、それぞれ、各命令を実行する。実行部５は、実行する命令が、データ格納部２に資源アクセスをする命令である場合、データをデータ格納部２に格納させたり、格納されたデータを取得するなどする。なお、実行部５は、データ線１２を介して、発行される命令を命令発行部４から取得して、取得した命令を実行する。【００３６】
図２は、実行部５の具体的な構成と、実行部５に接続する命令発行部４およびデータ格納部２を示す図である。【００３７】
実行部５は、命令デコーダ５１と、ＡＬＵ（Arithmetic Logic Unit：演算論理装置）５２と、外部データアクセス部５３と、ＩＯレジスタ２ＩＯと、レジスタファイル５Ｒとを備える。また、実行部５は、これら各構成の間を接続するバス、命令デコーダ５１と他の構成の間を接続する制御信号線を備える。【００３８】
命令デコーダ５１は、実行部５が実行する命令をデコードし、デコードにより特定される命令の内容に応じた制御信号を、実行部５の他の構成へ出力する。実行部５は、実行する命令を命令デコーダ５１にデコードさせることによって、その命令の内容に応じた制御信号を各構成に命令デコーダ５１より入力させることにより、命令の内容に応じて各構成を制御する。実行部５は、こうして各構成の動作を制御することにより、命令を実行する。【００３９】
なお、命令発行部４も、各命令を適切な順序で発行するのに要する情報を得るために、命令の少なくとも一部をデコードするものとしてもよい。【００４０】
ＡＬＵ５２は、命令の内容が、データの演算である場合に、実行部５が、その演算を行わせる演算装置である。実行部５がＡＬＵ５２を用いる、演算をする命令のうちには、例えば、加減乗除の演算が含まれる。命令には、かかる加減乗除の演算の命令のように、複数のデータを基にした演算をする命令（多項演算の命令）が含まれる。かかる複数のデータを基にする命令には、複数のそれらの基にされるデータをそれぞれ特定する、複数のオペランドが含まれる（図６（ｂ）参照）。【００４１】
外部データアクセス部５３は、データ格納部２への資源アクセスを行う。実行部５は、データ格納部２に資源アクセスする命令を実行する場合に、外部データアクセス部５３によって資源アクセスを行う。【００４２】
ＩＯレジスタ２ＩＯは、Ｉ／Ｏのために実行部５が有するレジスタである。実行部５は、実行する命令がＩ／Ｏを伴う場合、このＩＯレジスタ２ＩＯへの資源アクセスを行って、命令を実行する。ＩＯレジスタ２ＩＯは、図２に示される個別レジスタＩＯ０、個別レジスタＩＯ１、個別レジスタＩＯ２などの複数の個別のレジスタが集まってなる。【００４３】
なお、データ格納部２と、ＩＯレジスタ２ＩＯは、それぞれ、実行部５が資源アクセス（書き込み、及び読み出し）をするアクセス先の資源の一例に該当する。【００４４】
レジスタファイル５Ｒは、データを一時記憶する高速な記憶装置（レジスタの集まり）である。実行部５は、実行する命令に応じて、データをレジスタファイル５Ｒに書き込んだり、レジスタファイル５Ｒからデータを読み出したりする。実行部５は、その命令が、レジスタ間接方式によるオペランドを有する場合にも、レジスタファイル５Ｒからデータを読み出し、読み出したデータが特定するデータ領域のデータを基にした処理を実行する。このときレジスタファイル５Ｒから読み出されるデータは、処理の基になるデータが格納されたデータ領域を特定するポインタである。【００４５】
なお、命令発行部４は、かかる実行部５の具体的な構成に応じて、アウト・オブ・オーダでの命令発行を行い、例えば、外部データアクセス部５３に書き込みをさせる命令を発行した後に、書き込まれたデータを読み出させる命令を発行させる際に、書き込みが完了するまでの間の実行順序へと、ＡＬＵ５２等のみを稼動させて外部データアクセス部５３は稼動させない命令を移動させて、かかる実行順序でそれらのＡＬＵ５２等のみを稼動させる命令を発行し、上記読み出しの命令は完了後の実行順序に移動させて、その実行順序で発行する。【００４６】
図３は、命令発行部４の具体的な構成と、命令発行部４に接続する命令格納部３および実行部５を示す図である。本実施形態の命令発行部４は、プログラム２００に含まれる順序付データ参照命令３００に基づいて、より自由に命令の移動を行い、プロセッサ１によるプログラム２００の実行を高速化させることができる。以下の説明により、この点が詳しく説明される。【００４７】
図４は、順序付データ参照命令３００の命令フォーマット３００ｆを示す図である。【００４８】
図４（ａ）は、順序付データ参照命令３００の概略構成を示す図である。【００４９】
順序付データ参照命令３００は、本体部分３００ｎと、フィールド３００ｍとを備える。【００５０】
本体部分３００ｎは、順序付データ参照命令３００が実行部５に実行させる実行内容を特定するデータであり、加算の演算、データ格納部２へのデータ書き込みなどの処理の種類を特定するオペコードと、処理の対象となるデータのデータ領域を特定するオペランドを備える。なお、順序付データ参照命令３００が、加減乗除の演算の命令であるなどして、多項演算の命令である場合には、本体部分３００ｎは、複数のオペランドを含む。【００５１】
フィールド３００ｍは、解読されることにより、順序付データ参照命令３００が実行順序の保証対象の対象命令として指定する対象命令６００が特定されるのに要する情報が得られるデータである。なお、フィールド３００ｍの具体的な構成は、図４（ａ）、図４（ｂ）を参照した後述の説明により示される。【００５２】
図３に示されるように、命令発行部４は、フィールド存在判断部４１と、対象命令特定部４２と、命令発行制御部４３とを備える。【００５３】
フィールド存在判断部４１は、フィールド３００ｍが命令に含まれるか否かを判断する。フィールド存在判断部４１は、含まれると判断することにより、その命令が順序付データ参照命令３００であることを特定し、含まれないと判断することにより、順序付データ参照命令３００ではない一般命令であることを特定する。【００５４】
対象命令特定部４２は、フィールド存在判断部４１によりフィールド３００ｍが含まれると判断された命令の当該フィールド３００ｍを解読して、順序付データ参照命令３００が指定する対象命令６００（図４（ａ））を特定する。【００５５】
命令発行制御部４３（図３）は、当初のプログラム２００における命令の順序から、適宜別の順序へと命令の順序を変更し、変更がされた後の発行順序でそれぞれ各命令を実行部５に発行し、発行をした発行順序と同じ実行順序により各命令を実行部５に実行させる。例えば、命令発行制御部４３は、命令の内容を示す信号を実行部５に入力することにより、その命令を実行部５に実行させる。【００５６】
そして、命令発行制御部４３は、順序付データ参照命令３００があれば、順序付データ参照命令３００の実行に対する、順序付データ参照命令３００が指定する対象命令６００の相対的な実行順序を、一定の範囲に保証する。【００５７】
以下の説明は、フィールド３００ｍの具体的な構成と、対象命令特定部４２がその構成をどのように処理するかを示す。順序付データ参照命令３００には、第１型の順序付データ参照命令３０１と（図４（ｂ））、第２型の順序付データ参照命令３０２（図４（ｃ））とが含まれる。【００５８】
図４（ｂ）は、第１型の順序付データ参照命令３０１を示す図である。【００５９】
フィールド３００ｍは、第１型の順序付データ参照命令３０１において、第１型の順序付データ参照命令３０１が、対象命令６００を指定するか否かを示す指定有無表示フィールド３０１ｍである。指定有無表示フィールド３０１ｍが、第１型の順序付データ参照命令３０１が対象命令６００を指定することを示す場合、第１型の順序付データ参照命令３０１は、本体部分３００ｎにより、対象命令６００を特定する。具体的には、第１型の順序付データ参照命令３０１は、かかる場合、本体部分３００ｎにより特定される第１型の順序付データ参照命令３０１により資源アクセスがされるアクセス先の資源７００（図４（ｂ））に基づいて、この資源７００と同じ資源７００をアクセス先とする他のデータ参照命令を、対象命令６０１と指定する。したがって、第１型の順序付データ参照命令３０１は、かかる資源７００とは異なる資源７０１をアクセス先とするデータ参照命令（対象外命令６０１ｘ）は、対象命令６０１には指定しない。【００６０】
なお、ここで、同じ資源７００や、異なる資源７０１などの資源には、上述のように、例えば、データ格納部２や、ＩＯレジスタ２ＩＯが含まれる。なお、同じ資源７００や、異なる資源７０１などの資源には、他の資源も含まれるものとしてもよい。【００６１】
第１型の順序付データ参照命令３０１は、指定有無表示フィールド３０１ｍが、対象命令を第１型の順序付データ参照命令３０１が指定しないことを示す場合には、１つも対象命令を指定せず、実行順序の保証をしないデータ参照命令となるので、狭義の意味での順序付データ参照命令ではないものとなる。【００６２】
対象命令特定部４２は、指定有無表示フィールド３０１ｍを解読して、第１型の順序付データ参照命令３０１が対象命令を指定すると判断した場合には、本体部分３００ｎを読み出して、本体部分３００ｎが特定する資源７００を特定することにより、特定される資源７００と同じ資源７００をアクセス先とする他のデータ参照命令を対象命令６０１と特定する。【００６３】
図４（ｃ）は、第２型の順序付データ参照命令３０２を示す図である。【００６４】
フィールド３００ｍは、第２型の順序付データ参照命令３０２においては、対象命令６０２を特定する対象特定フィールド３０２ｍである。第２型の順序付データ参照命令３０２は、対象特定フィールド３０２ｍにより、対象命令６０２として指定し、つまり、対象特定フィールド３０２ｍにより特定されるデータ参照命令を、対象命令６０２として指定する。【００６５】
対象命令特定部４２は、対象特定フィールド３０２ｍを解読して、対象特定フィールド３０２ｍが特定する他のデータ参照命令を判断し、特定されると判断された他のデータ参照命令を、第２型の順序付データ参照命令３０２が指定する対象命令６０２であると特定する。【００６６】
図５は、第１型の順序付データ参照命令３０１（図４（ｂ））の第１〜第３の３つの具体例を含んだプログラム２００、および、それらの第１型の順序付データ参照命令３０１の具体例により資源アクセスがされる各資源を示す図である。【００６７】
図５（ａ）は、第１型の順序付データ参照命令３０１の第１の具体例を含んだプログラム２００、および、第１の具体例の第１型の順序付データ参照命令３０１ａによって資源アクセスがされる資源７００及び資源７０１を示す図である。【００６８】
図５（ａ）の場合のプログラム２００には、「ｓｔ  ｒａ  ｘ  ＯＦ」命令（第１型の順序付データ参照命令３０１ａの第１の具体例）と、「ｌｄ  ｒｂ  Ｙ」命令（他のデータ参照命令８０１、対象命令６０１）と、「ｌｄ  ｒｃ  Ｚ」命令（他のデータ参照命令８０２、対象外命令６０１ｘ）と、「ｒｄ  ＩＯ２」命令（他のデータ参照命令８０３、対象外命令６０１ｘ）との４つの命令が含まれる。【００６９】
上述のように、第１型の順序付データ参照命令３０１は、対象命令６０１を指定する場合には、本体部分３００ｎにより特定されるアクセス先の資源７００（データ格納部２）と同じ資源７００をアクセス先とする他のデータ参照命令８０１を、対象命令６０１と特定する。そして、第１型の順序付データ参照命令３０１は、異なる資源７０１（ＩＯレジスタ２ＩＯ）をアクセス先とする他のデータ参照命令８０３は、特定をしない対象外命令６０１ｘとする。【００７０】
そして、第１の具体例における、第１型の順序付データ参照命令３０１は、アクセス先の資源７００をアクセス先とする他のデータ参照命令（データ参照命令８０１、データ参照命令８０２）のうちで、資源７００が有する各データ領域のうち、オペランド３０１ａｘにより特定される第１型の順序付データ参照命令３０１のアクセス箇所２Ｐに対する近傍の近傍データ領域２Ｎにアクセスする他のデータ参照命令８０１のみを、対象命令６０１と指定し、同じ資源７００を資源アクセスしても、近傍データ領域２Ｎ以外のデータ領域にアクセスする他のデータ参照命令８０２は、対象命令６０１ではない対象外命令６０１ｘとする。【００７１】
第１の具体例では、対象命令特定部４２は、オペランド３０１ａｘを解読して、オペランド３０１ａｘが特定するアクセス箇所２Ｐの近傍の近傍データ領域２Ｎを特定し、同じ資源７００をアクセス先とする他のデータ参照命令８０１、８０２のうち、特定される近傍データ領域２Ｎにアクセスする他のデータ参照命令８０１のみを対象命令６０１と特定する。【００７２】
なお、近傍データ領域２Ｎは、例えば、アクセス箇所２Ｐを中心とした、幅が４ｋバイトのデータ領域である。【００７３】
次に、第２の具体例として、第１の具体例の変形例を説明する。この変形例では、第１型の順序付データ参照命令３０１は、アクセス先の資源がＩＯレジスタ２ＩＯの場合に、ＩＯレジスタ２ＩＯが有する個別レジスタＩＯ０、ＩＯ１、ＩＯ２…のうち、アクセス先の個別レジスタが属するグループＧ１、Ｇ２…と同じグループＧ１、Ｇ２にアクセスする他のデータ参照命令８０３を、対象命令６０１として指定する。ここで、ＩＯレジスタ２ＩＯが有するレジスタが属するグループとは、一例としては、図５のＩＯレジスタ２ＩＯに示されるように、レジスタ番号が隣接する２つのレジスタよりなるグループである。【００７４】
対象命令特定部４２は、かかる第２の具体例の場合には、ＩＯレジスタ２ＩＯが有する個別レジスタＩＯ０、個別レジスタＩＯ１、個別レジスタＩＯ２等の各個別レジスタのうちで、第１型の順序付データ参照命令３０１の本体部分３００ｎにより特定される、アクセスがされる個別レジスタが属するグループを特定し、特定されるグループに含まれる個別レジスタにアクセスする他のデータ参照命令を対象命令６０１として指定する。【００７５】
次に、第３の具体例を説明する。第１型の順序付データ参照命令３０１は、アクセス箇所２Ｐと同じアクセス箇所２Ｐをアクセスする他のデータ参照命令のみを、対象命令６０１として指定するものであってもよい。【００７６】
かかる第３の具体例の場合、対象命令特定部４２は、アクセス箇所２Ｐにアクセスする他のデータ参照命令のみを、対象命令６０１と特定し、例えば図５（ａ）のデータ参照命令８０１のように、近傍データ領域２Ｎにアクセスするとはいえ、近傍データ領域２Ｎのうちのアクセス箇所２Ｐ以外の箇所をアクセスするデータ参照命令は、対象外命令６０１ｘとし、アクセス箇所２Ｐをアクセスする他のデータ参照命令のみを、対象命令６０１と特定する。【００７７】
図５（ｂ）は、第１型の順序付データ参照命令３０１の第４の具体例を含んだプログラム２００、および、第４の具体例の第１型の順序付データ参照命令３０１ａ１によって資源アクセスがされる資源７００を示す図である。第４の具体例は、第１の具体例、または、第３の具体例に対する変形例である。【００７８】
図５（ｂ）の場合のプログラム２００には、「ｓｔｒ  ｒａ  ｍ（ｒｂ）  ＯＦ」命令（第４の具体例の第１型の順序付データ参照命令３０１ａ１）が含まれる。【００７９】
図５（ｂ）に示される第１型の順序付データ参照命令３０１ａ１は、レジスタ間接の方式によって、レジスタファイル５Ｒ（図２）に含まれるレジスタＲの内容により、アクセス箇所２Ｐを特定するオペランド３０１ａｘを有する場合に、以下のように、対象命令６０１を指定する。【００８０】
第１型の順序付データ参照命令３０１ａ１は、レジスタ間接の方式により、アクセス箇所２Ｐを特定するオペランド３０１ａｘを有する場合には、同じ資源７００に資源アクセスをするデータ参照命令であれば、その資源アクセスでのアクセス箇所が、第１型の順序付データ参照命令３０１ａ１のアクセス箇所２Ｐと異なっていても、対象命令６０１として指定する。【００８１】
対象命令特定部４２は、第１型の順序付データ参照命令３０１ａ１がレジスタ間接の方式によるものであれば、同じ資源７００に資源アクセスをするデータ参照命令であれば、いずれのデータ参照命令も、対象命令６０１と特定する。例えば、対象命令特定部４２は、かかる場合には、上述したデータ参照命令８０１と、データ参照命令８０２とのいずれも、同じ資源７００をアクセス先とすることには違いないので、対象命令６０１として特定する。【００８２】
図６は、第２型の順序付データ参照命令３０２（図４（ｃ））の第１〜第４の具体例がそれぞれ含まれた４つのプログラム２００と、それら具体例により資源アクセスされるデータ格納部２及びＩＯレジスタ２ＩＯを示す図である。【００８３】
図６（ａ）は、第２型の順序付データ参照命令３０２の第１の具体例を示す図である。【００８４】
第１の具体例に係る第２型の順序付データ参照命令３０２ａにおいては、対象特定フィールド３０２ｍａは、対象命令６０２のアドレス（格納番地）を保持し、保持するアドレスによって、そのアドレスのデータ領域に格納された他のデータ参照命令を対象命令６０２として特定すると共に、その他のデータ参照命令は、対象命令６０２ではない対象外命令６０２ｘとする。【００８５】
ここで、図６（ａ）では、対象特定フィールド３０２ｍａは、２つのアドレスを保持し、２つの対象命令６０２を特定する場合を例示している。対象特定フィールド３０２ｍａは、アドレスを１つだけ保持するものでもよいし、複数保持するものでもよい。【００８６】
なお、保持されるアドレスは、順序付データ参照命令３０２ａに対する相対的なアドレスでもよいし、プログラム２００の先頭のアドレスに対する相対的なアドレスでもよいし、プログラム２００が格納される記憶域におけるプログラム２００の格納位置に関わらない、その命令の絶対的アドレスであってもよい。【００８７】
第１の具体例では、対象命令特定部４２は、対象特定フィールド３０２ｍａを解読して、格納されたアドレスを特定し、そのアドレスが示す他のデータ参照命令を、対象命令６０２とそれぞれ特定する。【００８８】
図６（ｂ）は、第２型の順序付データ参照命令３０２の第２の具体例、および、データ格納部２を示す図である。【００８９】
第２の具体例に係る第２型の順序付データ参照命令３０２ｂにおいては、対象特定フィールド３０２ｍｂは、複数のオペランドのうちから、オペランドを選択するオペランド選択データである。図６（ｂ）では、対象特定フィールド３０２ｍｂは、順序付データ参照命令３０２ｂが備える、値Ｘ１を格納した第１オペランドと、値Ｘ２を格納した第２オペランドのうちから、後者の第２オペランドのみを選択する場合が例示されている。【００９０】
そして、対象特定フィールド３０２ｍｂは、こうしてオペランド選択データによってオペランドを選択することにより、選択するオペランドが特定する、順序付データ参照命令３０２ｂのアクセス箇所２Ｐｂと同じアクセス箇所２Ｐｂにアクセスする他のデータ参照命令を、対象命令６０２と特定する。対象特定フィールド３０２ｍｂは、そのアクセス箇所２Ｐｂとは異なるアクセス箇所２Ｐｂｘをアクセスする他のデータ参照命令は、対象外命令６０２ｘとする。【００９１】
なお、順序付データ参照命令３０２ｂは、２つ以上のオペランドを選択するオペランド選択データを有して、複数の対象命令６０２を特定するものであってもよい。【００９２】
第２の具体例では、対象命令特定部４２は、対象特定フィールド３０２ｍａを解読して、格納されたアドレスを特定し、特定されるアドレスが示す他のデータ参照命令を、対象命令６０２とそれぞれ特定する。【００９３】
図６（ｃ）は、第２型の順序付データ参照命令３０２の第３の具体例を示す図である。【００９４】
第３の具体例に係る順序付データ参照命令３０２ｃにおいては、対象特定フィールド３０２ｍｃは、命令のオペコードを格納して、そのオペコードと同じオペコードを有する他のデータ参照命令を、対象命令６０２と特定し、異なるオペコードを有する他のデータ参照命令は、対象外命令６０２ｘとする。なお、図６（ｃ）では、対象特定フィールド３０２ｍｃが、Ｌｏａｄ命令のオペコードを格納し、他のデータ参照命令のうちで、Ｌｏａｄ命令であるデータ参照命令のみを特定し、Ｓｔｏｒｅ命令であるデータ参照命令は特定しない場合が例示されている。【００９５】
なお、対象特定フィールド３０２ｍｃは、複数のオペコードを格納し、複数のオペコードの他のデータ参照命令を、いずれも、対象命令６０２と特定するものであってもよい。【００９６】
第３の具体例では、対象命令特定部４２は、対象特定フィールド３０２ｍｃを解読して、格納されたオペコードを特定し、特定されるオペコードを有する他のデータ参照命令を、対象命令６０２としてそれぞれ特定する。【００９７】
図６（ｄ）は、第２型の順序付データ参照命令３０２の第４の具体例、およびデータ格納部２とＩＯレジスタ２ＩＯを示す図である。【００９８】
第４の具体例に係る順序付データ参照命令３０２ｄにおいては、対象特定フィールド３０２ｍｄは、順序付データ参照命令３０２ｄがアクセスするデータ領域を特定するアクセスデータ領域特定データである。ここで、対象特定フィールド３０２ｍｄは、例えば、図５（ａ）に示されるアクセス箇所２Ｐを特定するものでもよいし、アクセス箇所２Ｐの近傍よりなる、図２の近傍データ領域２Ｎ等の、アクセス箇所２Ｐの近傍のデータ領域を特定するものでもよいし、アクセスがされるＩＯレジスタ２ＩＯのグループや、個別レジスタを特定するものであってもよい。【００９９】
第４の具体例では、対象命令特定部４２は、対象特定フィールド３０２ｍｄを解読して、データ領域を特定し、そのデータ領域にアクセスする他のデータ参照命令を、それぞれ、対象命令８１０と特定する。なお、図６（ｄ）では、命令８１１、命令８１２も図示される。【０１００】
次に、図７〜図９を参照して、順序付データ参照命令３００の種類を説明する。【０１０１】
図７は、第１種類の順序付データ参照命令３００Ａが含まれるプログラム２００を説明する図である。【０１０２】
第１種類の順序付データ参照命令３００Ａは、プログラム２００において第１種類の順序付データ参照命令３００Ａより後に表記された実行順序の保証対象の対象命令６００Ａを指定する順序付データ参照命令３００である。例えば、第１種類の順序付データ参照命令３００Ａは、表記が後の対象命令６００Ａがデータ格納部２等に書き込んだデータを読み出すデータ参照命令であり、書き込みが完了した後に、その読み出しを行わなければならないデータ参照命令である。【０１０３】
なお、図７に示される移動不可の矢印線は、命令発行部４がこの矢印線により示される命令の移動をしないことを保証することを示し、他方、図７に示される移動可能の矢印線は、命令発行部４がこの矢印線により示される命令の移動が、かかる移動をしないことを保証するものではなく、命令発行部４が自由に行うことができる命令の移動を示すものである。この点は、図８、図９において同様である。この点については、図１２を参照した後述の説明によって、詳しく述べられる。【０１０４】
図８は、第２種類の順序付データ参照命令３００が含まれるプログラム２００を説明する図である。【０１０５】
第２種類の順序付データ参照命令３００Ｂは、プログラム２００において第２種類の順序付データ参照命令３００Ｂよりも前に表記された実行順序の保証対象の対象命令６００Ｂを指定する順序付データ参照命令３００である。第２種類の順序付データ参照命令３００Ｂは、例えば、表記が前の対象命令６００Ｂがデータ格納部２等から読み出すデータを、予め書き込むデータ参照命令である。【０１０６】
図９は、第３種類の順序付データ参照命令３００Ｃが含まれるプログラム２００を説明する図である。【０１０７】
第３種類の順序付データ参照命令３００Ｃは、表記が後の対象命令６００Ａと、表記が前の対象命令６００Ｂとの両者を含む複数の対象命令６００を指定する順序付データ参照命令３００である。【０１０８】
図１０は、ＰＣ１００が命令を実行する処理を示すフローチャートである。【０１０９】
ステップＳ１は、ユーザが、プログラム２００を作成するステップであり、ＰＣ１００が行う処理ではない。【０１１０】
例えば、ユーザは、アセンブラを用いて、順序付データ参照命令３００を含むプログラム２００を作成する。この場合、プログラム２００は、アセンブラ言語のプログラムであり、順序付データ参照命令３００は、アセンブラ言語の命令である。そして、ユーザは、プログラム２００によって実現させる処理に含まれる因果関係や、データ間の依存関係などを特定し、特定されるそれらの関係のために必要な命令間の実行順序の保証内容を実現するように、プログラム２００の各箇所に適切な順序付データ参照命令３００を埋め込んで、プログラム２００を作成する。ユーザは、例えば、指定有無表示フィールド３０１ｍ(図４（ａ）)や対象特定フィールド３０２ｍ（図４（ｂ））に適切な値を設定し、適切な値を設定したフィールド３００ｍを有する順序付データ参照命令３００を有するプログラム２００を作成する。例えば、ユーザは、実行順序の保証対象となる対象命令６０２を選択し、選択した対象命令６０２の格納番地（アドレス）を対象特定フィールド３０２ｍに書き込む。【０１１１】
なお、プログラム２００は、ステップＳ１で、ユーザによって作成されるのでなく、ユーザが動作させるコンパイラによって作成されるものとしてもよい。【０１１２】
この場合、例えば、コンパイラは、プログラム２００の基となる基プログラムに含まれる上述した因果関係や依存関係等を自ら解析し、解析によって特定された因果関係等により必要となる命令の間の実行順序の保証を実現するように、順序付データ参照命令３００をプログラム２００の各箇所に埋め込むものとしてもよい。【０１１３】
ここで、基プログラムには、Ｃ言語のコンパイラ指令子（プリプロセッサ指示子）などによって、保証されるべき命令の実行順序や、埋め込むべき順序付データ参照命令３００を特定する情報が、ユーザによって記述されており、コンパイラは、ユーザによって記述された情報に基づいてコンパイルを行うものとしてもよい。この場合、コンパイラは、単に、ユーザのかかる記述により特定される順序付データ参照命令３００を埋め込むだけに留まり、上述したような因果関係の解析などは行わないものとしてもよい。【０１１４】
ステップＳｘは、ＰＣ１００が、ステップＳ１で作成されたプログラム２００を実行する処理である。以下の説明は、ステップＳｘの具体的な内容を説明する。【０１１５】
ステップＳ２では、命令格納部３が、プログラム２００をプロセッサ１に入力して、入力したプログラム２００を格納する。【０１１６】
ステップＳ３では、命令格納部３が、ステップＳ２で当該命令格納部３に格納した順序付データ参照命令３００を含む命令群（実行部分）を命令発行部４に供給し、命令発行部４が、供給される、順序付データ参照命令３００が含まれる命令群（実行部分）を一時的に保持する。【０１１７】
ステップＳ４では、命令発行部４が、ステップＳ３で保持した各命令を、アウト・オブ・オーダで実行部５に発行し、実行部５に実行させる。実行部５は、発行された各命令を発行された順序でそれぞれ実行する。【０１１８】
図１１は、図１０のステップＳ４の具体的な内容を示すフローチャートである。【０１１９】
ステップＳ４１では、フィールド存在判断部４１（図３）が、ステップＳ３で命令発行部４が保持した各命令に、フィールド３００ｍ（図４（ａ））が含まれるか否かを判断する。フィールド存在判断部４１は、フィールド３００ｍが含まれることを判断することにより、フィールドが含まれると判断された命令を、順序付データ参照命令３００と特定する。【０１２０】
ステップＳ４２では、対象命令特定部４２が、ステップＳ４１で特定された順序付データ参照命令３００が指定する対象命令６００を特定する。【０１２１】
ステップＳ４３では、命令発行制御部４３が、以上のステップＳ４１〜Ｓ４３での準備に基づいて、命令の発行を行う。【０１２２】
図１２は、図１０のフローチャートにおけるステップＳ４３の詳細を示すフローチャートである。【０１２３】
ステップＳ４３１では、命令発行制御部４３が、順序付データ参照命令３００の種類（図７〜図９）に応じて、第１種類である場合の処理（ステップＳ４３Ａ４〜Ｓ４３Ａ７）と、第２種類である場合の処理（ステップＳ４３Ｂ１〜Ｓ４３Ｂ４）と、第３種類である場合の処理（ステップＳ４３Ｃ１〜Ｓ４３Ｃ７）とを切り替える。【０１２４】
例えば、実行部５は、順序付データ参照命令３００の種類を判断する種類判断部を備える。そして、命令発行制御部４３は、種類判断部の判断結果に応じて、この切り替えを行う。種類判断部は、例えば、順序付データ参照命令３００の本体部分３００ｎに含まれるオペランドにより特定される処理の種類に応じて、順序付データ参照命令３００が書き込みをする命令であれば第１種類と判断したり、読み出しをする命令であれば第２種類と判断したりするなどして、種類を判断する。あるいは、種類判断部は、フィールド３００ｍに含まれる種類を示す種類情報を読み取り、読み取った種類情報が示す種類を、順序付データ参照命令３００の種類と判断するものであってもよい。【０１２５】
ステップＳ４３Ａ４では、命令発行制御部４３は、第１種類の順序付データ参照命令３００Ａ（図７の命令（３））を発行する。命令発行制御部４３は、対象命令６００の発行（ステップＳ４３Ａ７）に先立って、このステップＳ４３Ａ４で、第１種類の順序付データ参照命令３００Ａを発行する。【０１２６】
ステップＳ４３Ａ５では、命令発行制御部４３は、ステップＳ４３Ａ４で発行した順序付データ参照命令３００Ａの完了検知があるまで（後述のステップＳ４３Ａ６参照）、対象命令６００Ａを発行しない（ステップＳ４３Ａ７参照）ことから生じるストール４００Ａ（図７）を解消するよう、対象命令６００Ａ以外のデータ参照命令、つまり、対象外命令（図４（ａ）の対象外命令６０１ｘ等）を発行する。【０１２７】
図７において、移動可能の文字が付された矢印線は、命令発行制御部４３が、対象外命令を移動させて、このステップＳ４３Ａ５で対象外命令を発行することにより、ストール４００Ａが解消されることを示すものである。【０１２８】
このステップＳ４３Ａ５で、命令発行制御部４３は、対象命令６００Ａ以外の対象外命令であれば、例えば、図７に示される命令（５）のように、対象命令６００Ａと同じく第１種類の順序付データ参照命令３００Ａよりも後に表記されたデータ参照命令であっても、ストール４００Ａの解消のため、命令を移動させる。【０１２９】
なお、このステップＳ４３Ａ５で、命令発行制御部４３は、対象命令６００Ａ以外の命令であれば、対象命令ではない命令、データ参照命令ではない命令も移動して、ストール４００Ａを解消する。【０１３０】
ステップＳ４３Ａ６では、命令発行制御部４３は、ステップＳ４３Ａ４で発行した順序付データ参照命令３００Ａの完了検知を行う。【０１３１】
ステップＳ４３Ａ７では、命令発行制御部４３は、ステップＳ４４Ａ６での完了検知に応じて、ステップＳ４２（図１０参照）で特定された対象命令６００Ａ（図７の命令（４））を発行する。こうして、命令発行制御部４３は、第１種類の順序付データ参照命令３００Ａを実行の完了検知があった後の範囲の実行順序で、対象命令６００Ａを実行させて、対象命令６００Ａの実行順序を保証する。図７において、移動不可の文字が付された矢印線は、命令発行制御部４３が、かかる範囲での実行順序を保証し、その矢印線が示すような、かかる範囲外の実行順序での実行は回避することを示すものである。【０１３２】
ステップＳ４３Ｂ１では、命令発行制御部４３は、第２種類の順序付データ参照命令３００Ｂ（図８）が指定する対象命令６００Ｂ（図８の命令（２））を発行する。命令発行制御部４３は、第２種類の順序付データ参照命令３００Ｂの発行（ステップＳ４３Ｂ４）に先立って、このステップＳ４３Ｂ１で、対象命令６００Ｂを発行する。【０１３３】
ステップＳ４３Ｂ２では、命令発行制御部４３は、ステップＳ４３Ｂ１で発行した対象命令６００Ｂの完了検知の後に（ステップＳ４３Ｂ３参照）、第２種類の順序付データ参照命令３００Ｂを発行する（ステップＳ４４Ｂ４参照）ことから生じるストール４００Ｂ（図８）を解消するよう、対象外命令を発行する。図８において、移動可能の文字が付された矢印線は、対象外命令が移動されて、このステップＳ４３Ｂ２で発行されることで、ストール４００Ｂが解消されることを示すものである。ここで、命令発行制御部４３は、対象外命令でさえあれば、図８の命令（１）のように、対象命令６００Ｂと同じく、順序付データ参照命令３００Ｂよりも前に表記されたデータ参照命令でも、ストール４００Ｂ解消のために、命令を移動させる。【０１３４】
ステップＳ４３Ｂ３では、命令発行制御部４３は、ステップＳ４３Ｂ１で発行した対象命令６００Ｂの完了検知を行う。【０１３５】
ステップＳ４３Ｂ４では、命令発行制御部４３は、ステップＳ４４Ｂ３での完了検知に応じて、第２種類の順序付データ参照命令３００Ｂを発行する。【０１３６】
こうして、命令発行制御部４３は、対象命令６００Ｂの完了検知（ステップＳ４３Ｂ３）の後の実行順序で、第２種類の順序付データ参照命令３００Ｂを実行させて（ステップＳ４３Ｂ４）、完了検知が第２種類の順序付データ参照命令３００Ｂの実行よりも前となる範囲の実行順序に、対象命令６００Ｂの実行順序を保証する。【０１３７】
ステップＳ４３Ｃ１では、命令発行制御部４３は、ステップＳ４２（図１０）で特定された対象命令６００Ａおよび対象命令６００Ｂのうちの、第３種類の順序付データ参照命令３００Ｃ（図８の命令（３））よりも表記が前の対象命令６００Ｂ（命令（２））を発行する。【０１３８】
ステップＳ４３Ｃ２では、命令発行制御部４３は、対象命令６００Ｂの完了検知までは（ステップＳ４３Ｃ３参照）、第３種類の順序付データ参照命令３００Ｃの発行（ステップＳ３２Ｃ４参照）をしないことから生じるストール４００Ｂ（図９）を解消するよう、対象外命令を発行する。なお、このとき、命令発行制御部４３は、移動させる命令が対象外命令であれば、図９の命令（１）のような、第３種類の順序付データ参照命令３００Ｃより前に表記された対象外命令も移動させるし、図９の命令（５）のような、後に表記された対象外命令も移動させる。【０１３９】
ステップＳ４３Ｃ３では、命令発行制御部４３は、ステップＳ４３Ｃ１で発行した、表記が前の対象命令６００Ｂの完了検知を行う。【０１４０】
ステップＳ４３Ｃ４では、命令発行制御部４３は、ステップＳ４３Ｃ３での完了検知に応じて、第３種類の順序付データ参照命令３００Ｃ（図９の命令（３））を発行する。【０１４１】
ステップＳ４３Ｃ５では、命令発行制御部４３は、ステップＳ４３Ｃ４で発行した第３種類の順序付データ参照命令３００Ｃの完了検知（ステップＳ４３Ｃ６参照）までのストール４００Ａを解消するよう、対象外命令を発行する。命令発行制御部４３は、このときにも、第３種類の順序付データ参照命令３００Ｃより前に表記されたデータ参照命令も、後に表記されたデータ参照命令も、ストール４００Ａの解消のために移動させる。【０１４２】
ステップＳ４３Ｃ６では、命令発行制御部４３は、ステップＳ４３Ｃ４で発行した順序付データ参照命令３００Ｃ（図８の命令（３））の完了検知を行う。【０１４３】
ステップＳ４３Ｃ７では、命令発行制御部４３は、ステップＳ４４Ｃ６での完了検知に応じて、先のステップＳ４２（図１１）で特定された対象命令のうちの、表記が後の対象命令６００Ｂ（図８の命令（４））を発行する。【０１４４】
こうして、命令発行制御部４３は、第３種類の順序付データ参照命令３００Ｃよりも先に対象命令６００Ｂを実行させると共に（ステップＳ４３Ｃ１）、その完了検知（ステップＳ４３Ｃ３）の後の実行順序で、第３種類の順序付データ参照命令３００Ｃを発行し（ステップＳ４３Ｃ４）、さらに、その第３種類の順序付データ参照命令３００Ｃの完了検知（ステップＳ４３Ｃ６）の後の実行順序で、他方の対象命令６００Ａを発行して（ステップＳ４３Ａ７）、対象命令６００Ａ、および対象命令６００Ｂの実行順序を保証する。【０１４５】
このようにして、本実施形態においては、プロセッサ１による命令の実行を制御する方法であって、フィールド存在判断部４１により、「予め定められたフィールド３００ｍがデータ参照命令に含まれるかが判断される」工程が行われ、対象命令特定部４２により、「その工程によりフィールド３００ｍが含まれると判断された順序付データ参照命令３００の当該フィールド３００ｍを解読して、当該順序付データ参照命令３００が指定する、実行順序の保証対象となる対象命令６００を特定する」工程が行われ、命令発行制御部４３により、「順序付データ参照命令３００、および、特定された対象命令６００を実行させるのに、順序付データ参照命令３００の実行に対する、特定された前記対象命令６００の実行順序を保証するよう、当該２つの命令の実行順序を制御する」工程が行われる命令実行制御方法が用いられる。【０１４６】
また、対象命令特定部４２により、「前記フィールドが含まれると判断された順序付データ参照命令３００（第１種類の順序付データ参照命令３００Ａ、第２種類の順序付データ参照命令３００Ｂ）の当該フィールド３００ｍを解読し、当該順序付データ参照命令３００が指定する、当該順序付データ参照命令３００より後に表記された、実行順序の保証対象となる対象命令６００Ａを特定する」工程が行われ、命令発行制御部４３により、「前記順序付データ参照命令３００の実行完了よりも後の実行順序で、特定された対象命令６００Ａを実行させる」工程が行われる方法が用いられる。【０１４７】
また、対象命令特定部４２により、「前記フィールドが含まれると判断された順序付データ参照命令３００（第２種類の順序付データ参照命令３００Ｂ、第３種類の順序付データ参照命令３００Ｃ）の当該フィールド３００ｍを解読して、順序付データ参照命令３００が指定する、当該順序付データ参照命令３００よりも前に表記された、実行順序の保証対象となる対象命令６００Ｂを特定する」工程が行われ、命令発行制御部４３により、「順序付データ参照命令３００の実行よりも前に実行完了する実行順序により、特定された対象命令６００Ａを実行させる」工程が行われる方法が用いられる。【０１４８】
このような実施形態により、実行順序の保証対象となる対象命令６００を個別に指定することができるので、アウト・オブ・オーダ実行時において、移動できない命令が、指定された対象命令６００のみになり、移動を制限される命令を減らすことにより、より自由に命令を移動させることができ、例えば、図８において表記が前の命令（１）を自由に移動できるなどして、ストール４００Ａ等のストールを十分に小さくできて、プロセッサ１を高速化することができる。【０１４９】
そして、図４（ａ）の場合、つまり順序付データ参照命令３００が、第１型の順序付データ参照命令３０１である場合には、前記フィールド３００ｍは、第１型の順序付データ参照命令３０１が対象命令６０１を指定しないか、指定するかを示す指定有無表示フィールド３０１ｍであり、命令が特定される前記工程では、指定することが示される場合に、当該順序付データ参照命令３０１のアクセス先の資源７００と同じ資源７００をアクセス先とする他のデータ参照命令を、対象命令６０１として特定する方法が行われる。【０１５０】
また、図５（ａ）によって説明される各具体例のうちで第３の具体例の場合、対象命令が特定される前記工程では、第１型の順序付データ参照命令３０１ａの前記アクセス先の資源７００の各データ領域のうちで、当該第１型の順序付データ参照命令３０１ａによりアクセスされるアクセス箇所２Ｐと同じアクセス箇所２Ｐにアクセスする他のデータ参照命令８０１のみを前記対象命令６０１と特定する。【０１５１】
また、図５（ａ）の第１の具体例の場合、第１型の順序付データ参照命令３０１の前記アクセス先の資源７００の各データ領域のうちで、当該第１型の順序付データ参照命令３０１によってアクセスされるアクセス箇所２Ｐを含む予め定められた近傍の近傍データ領域２Ｎにアクセスする他のデータ参照命令８０１を前記対象命令６０１と特定する。【０１５２】
なお、図５（ａ）の第２の具体例の場合、第１型の順序付データ参照命令３０１の前記アクセス先の資源７００の各個別レジスタのうちで、当該第１型の順序付データ参照命令３０１によってアクセスされる個別レジスタを含むグループにアクセスする他のデータ参照命令８０１を前記対象命令６０１と特定する。【０１５３】
また、図５（ｂ）に示される第４の具体例の場合、対象命令が特定される前記工程では、第１型の順序付データ参照命令３０１が、レジスタ間接方式により当該資源７００の各データ領域のうちからアクセスするアクセス箇所を特定する場合には、当該資源７００をアクセス先とする、いずれのデータ領域にアクセスするデータ参照命令も、対象命令６０１と特定する。【０１５４】
また、図４（ｂ）の場合には、前記フィールド３００ｍは、対象命令６０２を特定する対象特定フィールド３０２ｍであり、対象命令が特定される前記工程は、当該対象特定フィールド３０２ｍを解読することにより、当該対象特定フィールド３０２ｍが特定するデータ参照命令を前記対象命令６０２と特定する。【０１５５】
そして、第１種類の順序付データ参照命令３０１の命令フォーマットとして、当該第１種類の順序付データ参照命令３０１の資源アクセスでのアクセス先の資源７００を特定する本体部分３００ｎと、当該第１種類の順序付データ参照命令３０１が、他のデータ参照命令の実行順序を保証させる順序付データ参照命令か否かを示す指定有無表示フィールド３０１ｍを備える命令フォーマット３０１ｆが用いられる。【０１５６】
また、第２種類の順序付データ参照命令３０２の命令フォーマットとして、当該第２種類の順序付データ参照命令３０２に対する相対的な実行順序を当該第２種類の順序付データ参照命令３０２が保証させる実行順序の保証対象のデータ参照命令を特定する対象特定フィールド３０２ｍを備える命令フォーマット３０２ｆが用いられる。【０１５７】
そして、図６（ａ）の場合には、対象特定フィールド３０２ｍは、１つ又は複数のアドレス空間（アドレス、格納番地）を指定することにより、各アドレス空間の領域に格納されるデータ参照命令を各々、保証対象のデータ参照命令（対象命令６０２）と特定する。【０１５８】
なお、図６（ｄ）の場合には、対象特定フィールド３０２ｍは、１つ又は複数のアドレス空間（アクセスデータ領域特定データ）を指定することにより、各アクセスデータ領域特定データが特定する領域に格納されるデータ参照命令を各々、保証対象のデータ参照命令（対象命令６０２）と特定する。【０１５９】
また、図６（ｂ）の場合には、対象特定フィールド３０２ｍは、１つまたは複数の当該データ参照命令（順序付データ参照命令３０２ｃ）が有するオペランドを指定することにより、当該各オペランドが特定するデータ領域（アクセス箇所２Ｐｂ）と同じデータ領域（アクセス箇所２Ｐｂ）にアクセスする他のデータ参照命令を対象命令６０２と特定する。【０１６０】
以下の説明は、変形例を示す。【０１６１】
上記実施形態では、プロセッサ１に設けられた、アウト・オブ・オーダでの命令発行をする際に命令移動を行う命令発行部をとりあげたが、コンパイラに設けられた、プログラムの最適化を行うために命令を移動させる最適化処理部に、命令発行部の上記技術を適用してもよい。この場合、このコンパイラは、順序付データ参照命令３００が含まれたプログラム２００を、プログラム２００とは異なる出力プログラムへと変換するコンパイラである。そして、最適化処理部は、最適化のために、プログラム２００に含まれる命令の順序を移動させ、この移動に際して、上記命令発行部と同様に、対象命令を特定すると共に、出力プログラムにおける対象命令の順序を一定の範囲に保証する。このとき、最適化処理部は、指定される対象命令だけを保証し、対象命令ではない対象外命令は自由に移動させて、十分に最適化を施す。【０１６２】
これにより、コンパイラの最適化時において、移動できない命令が、指定された少数のもののみになり、移動を制限される命令を減らすことにより、より自由に命令を移動させて、コンパイラが出力する出力プログラムが高速に実行されるようにできる。【０１６３】
なお、かかる場合、最適化処理部は、命令の順序を移動させた後の出力プログラムとして、少なくとも一部に順序付データ参照命令が含まれる出力プログラムを出力してもよい。
【産業上の利用可能性】
【０１６４】
本発明にかかる命令実行制御方法およびその方法を用いたプロセッサ、命令フォーマットは、従来のものに比べ、アウト・オブ・オーダ実行時などにおいて、移動できない命令が少なく抑えられるため、特にアクセスレイテンシが大きい資源へのデータ転送を行う場合などにおいて、十分にストールを少なくできるなどして、性能劣化を抑制できる効果があり、プロセッサとプロセッサ外部のメモリやＩＯレジスタとの間でデータの授受を行う場合において、他のプロセッサとの待ち合わせが必要、または、あるＩＯレジスタの書込みが完了してから他のＩＯレジスタを読込む必要があるプロセッサおよびプロセッサを搭載したシステムなどにおいて有用である。
【図１】
2009119021.tif 000003
【図２】
2009119021.tif 000004
【図３】
2009119021.tif 000005
【図４】
2009119021.tif 000006
【図５】
2009119021.tif 000007
【図６】
2009119021.tif 000008
【図７】
2009119021.tif 000009
【図８】
2009119021.tif 000010
【図９】
2009119021.tif 000011
【図１０】
2009119021.tif 000012
【図１１】
2009119021.tif 000013
【図１２】
2009119021.tif 000014
【手続補正書】
【提出日】平成22年8月17日(2010.8.17)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、命令実行制御方法、命令フォーマット、およびその方法を用いるプロセッサに関する。
【背景技術】
【０００２】
従来より、順序付データ参照命令があり、順序付データ参照命令の命令フォーマットがあり、順序付データ参照命令の命令を実行するプロセッサがある。
【０００３】
命令の実行順序は、命令のアウト・オブ・オーダ実行や、コンパイラの最適化により変更されることがある。
【０００４】
一方、命令の実行順序が意図せず変更されると、変更前の命令の実行順序が守られないことにより、問題が発生する場合がある。例えば、プロセッサとプロセッサ外部のメモリやＩＯレジスタとの間でデータの授受を行う場合、他のプロセッサとの待ち合わせが必要な場合や、あるＩＯレジスタの書込みが完了してから他のＩＯレジスタを読込まなければならない場合などに、命令の実行順序が意図せず変更されて、問題が発生することがある。一般に、２つの命令の間に、いわゆるデータ依存（フロー依存、逆依存、出力依存等）、制御依存、資源競合などの依存関係があったり、それらの命令の間に因果関係があると、それらの命令の実行順序が意図されずに変更されると、問題が生じる恐れがある。
【０００５】
そこで、この問題を解決する従来の方法として、非特許文献１では、順序付データ参照命令を準備している。
【０００６】
非特許文献１に記載された従来の順序付データ参照命令では、ＩＡ―６４プロセッサにおいて、プログラムが意図した順序通りにデータ参照命令を実行させるために、アクワイヤ命令、リリース命令、フェンス命令の３種類を準備している。（ａ）アクワイヤ命令は、アクワイヤ命令の実行完了後に、そのアクワイヤ命令の後に表記されたデータ参照命令を実行することを保証させる順序付データ参照命令である。（ｂ）リリース命令は、リリース命令実行前に、そのリリース命令の前に表記されたデータ参照命令の実行が完了することを保証させる順序付データ参照命令である。（ｃ）フェンス命令は、フェンス命令の実行完了後に、そのフェンス命令の後に表記されたデータ参照命令を実行することを保証させると共に、当該フェンス命令実行前に、当該フェンス命令の前に表記されたデータ参照命令の実行完了を保証させる順序付データ参照命令である。
【０００７】
非特許文献１は、このような、他のデータ参照命令の実行順序を保証させる順序付データ参照命令を設けて、意図しない実行順序の変更により問題が生じることを回避する技術を開示している。
【先行技術文献】
【非特許文献】
【０００８】
【非特許文献１】ＩＡ−６４プロセッサ基本講座（記載頁：Ｐ７６〜Ｐ７９）  著者：池井  満、発行所：株式会社オーム社、発行日：２０００年８月２５日
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、上記従来技術は、実行順序の保証対象となる命令を個別に指定できず、また、実行順序の保証対象となる資源も指定できないもので、多数の命令の実行順序を無条件に保証してしまうものとなっている。このため、順序付データ参照命令により実行順序が保証される命令が多数となり、命令のアウト・オブ・オーダ実行時などに命令移動が必要以上に制限されて、特にアクセスレイテンシが大きい資源へのデータ転送を行う場合などにおいて、プロセッサの速度が低下し、性能劣化が大きくなってしまうという問題を有している。
【００１０】
本発明は、かかる課題に鑑みてなされたものであり、実行順序の保証対象の命令を的確なもののみにして、プロセッサを高速化できるようにすることを目的とする。
【課題を解決するための手段】
【００１１】
上記課題を解決する本発明の命令実行制御方法、命令フォーマット、およびプロセッサは、次の通りである。
【００１２】
請求項１記載の発明は、プロセッサによる命令の実行を制御する方法であって、予め定められたフィールドが第１のデータ参照命令に含まれるか否かを判断するフィールド判断工程と、前記フィールド判断工程により前記フィールドが含まれると判断された前記第１のデータ参照命令の当該フィールドを解読して、当該第１のデータ参照命令が指定する、実行順序の保証対象となる第２のデータ参照命令を特定する命令特定工程と、前記第１のデータ参照命令、および、特定された前記第２のデータ参照命令を実行させるのに、前記第１のデータ参照命令の実行に対する、特定された前記第２のデータ参照命令の実行順序を保証するよう、当該２つの命令の実行順序を制御する実行制御工程とを備える命令実行制御方法である。
【００１３】
請求項２記載の発明は、前記命令特定工程は、前記フィールド判断工程により前記フィールドが含まれると判断された前記第１のデータ参照命令の当該フィールドを解読して、当該第１のデータ参照命令が指定する、当該第１のデータ参照命令より後に表記された、実行順序の保証対象となる第２のデータ参照命令を特定し、前記実行制御工程は、前記第１のデータ参照命令の実行完了よりも後の実行順序で、特定された当該第２のデータ参照命令を実行させる請求項１記載の命令実行制御方法である。
【００１４】
請求項３記載の発明は、前記命令特定工程は、前記フィールド判断工程により前記フィールドが含まれると判断された当該第１のデータ参照命令の当該フィールドを解読して、当該第１のデータ参照命令が指定する、当該第１のデータ参照命令よりも前に表記された、実行順序の保証対象となる第２のデータ参照命令を特定し、前記実行制御工程は、前記第１のデータ参照命令の実行よりも前に実行完了する実行順序により、特定された前記第２のデータ参照命令を実行させる請求項１記載の命令実行制御方法である。
【００１５】
請求項１０記載の発明は、データ参照命令の命令フォーマットであって、当該データ参照命令のアクセス先の資源を特定する命令本体部と、当該データ参照命令が、他のデータ参照命令の実行順序を保証させる順序付データ参照命令か否かを示すフィールドを備えるデータ参照命令の命令フォーマットである。
【００１６】
請求項１１記載の発明は、データ参照命令の命令フォーマットであって、当該データ参照命令が保証させる当該データ参照命令に対する相対的な実行順序の保証対象のデータ参照命令を特定するフィールドを備えるデータ参照命令の命令フォーマットである。
【００１７】
こうすることで、実行順序の保証対象となる命令を個別に指定することができるので、例えばアウト・オブ・オーダ実行時などにおいて、移動できない命令が、指定された的確なもののみになり、移動を制限される命令を減らすことにより、より自由に命令を移動させて、例えばストールを十分に減らすことができる等によって、プログラムの実行速度を高速化できる。
【００１８】
なお、上記「前記第１のデータ参照命令の実行に対する、特定された前記第２のデータ参照命令の実行順序を保証する」とは、第１のデータ参照命令の実行に対する相対的な実行順序を保証することであり、例えば、第１のデータ参照命令が自己の実行順序で実行開始されてから、完了するまでの実行の時間のうちの予め定められた基準時に対する相対的な実行順序を保証することである。
【００１９】
請求項５記載の発明は、前記フィールドは、前記第１のデータ参照命令が前記第２のデータ参照命令を指定するか、指定しないかを示すフィールドであり、前記命令特定工程では、指定することが示される場合に、当該第１のデータ参照命令のデータ参照のアクセス先の資源と同じ資源をアクセス先とする他のデータ参照命令を、指定される前記第２のデータ参照命令として特定する請求項４に記載の命令実行制御方法である。
【００２０】
このような請求項５記載の発明、および請求項１０記載の発明によれば、順序付データ参照命令のアクセス先の資源により実行順序の保証対象となる命令が決定されるので、実行順序の保証対象となる命令を指定する専用のフィールドが不要となり、専用フィールドのない順序付データ参照命令を構成できて、自由に順序付データ参照命令を構成できるようになり、順序付データ参照命令の適用範囲が広がる。
【００２１】
請求項９記載の発明は、前記フィールドは、データ参照命令を特定するフィールドであり、前記命令特定工程は、当該フィールドを解読することにより、当該フィールドが特定するデータ参照命令を前記第２のデータ参照命令と特定する請求項２〜４の何れかに記載の命令実行制御方法である。
【００２２】
このような請求項９記載の発明、請求項１１〜１４記載の発明によれば、それぞれ、順序付データ参照命令のフィールドの指定により実行順序の保証対象となる命令が決定されて、保証対象の命令を容易、自由、的確に選べるようになったり、同じ保証対象の命令でもその命令を指定する方法を自由に選べるようになったりして、実行順序の保証対象となる命令を指定する自由度が広がる。また、プロセッサが、単にフィールドの指定に基づいて、容易に、保証対象の命令を特定できるようになる。
【発明の効果】
【００２３】
本発明によれば、実行順序の保証対象の対象命令を、指定される的確なもののみにして、移動を制限される命令を減らすことにより、プロセッサの実行性能を上げることができる。
【図面の簡単な説明】
【００２４】
【図１】図１は、プロセッサを備えるパーソナルコンピュータ、および、当該パーソナルコンピュータが実行するプログラムを示す図である。
【図２】図２は、実行部の具体的な構成と、実行部に接続する命令発行部およびデータ格納部を示す図である。
【図３】図３は、命令発行部の具体的な構成と、命令発行部に接続する命令格納部および実行部を示す図である。
【図４】図４（ａ）（ｂ）（ｃ）は、順序付データ参照命令の命令フォーマットを示す図である。
【図５】図５（ａ）（ｂ）は、第１型の順序付データ参照命令の第１〜第３の３つの具体例を含んだプログラム、および、それらの第１型の順序付データ参照命令の具体例により資源アクセスがされる各資源を示す図である。
【図６】図６（ａ）（ｂ）（ｃ）（ｄ）は、第２型の順序付データ参照命令の第１〜第４の具体例がそれぞれ含まれた４つのプログラムと、それら具体例により資源アクセスされるデータ格納部及びＩＯレジスタを示す図である。
【図７】図７は、第１種類の順序付データ参照命令が含まれるプログラムを説明する図である。
【図８】図８は、第２種類の順序付データ参照命令が含まれるプログラムを説明する図である。
【図９】図９は、第３種類の順序付データ参照命令が含まれるプログラムを説明する図である。
【図１０】図１０は、ＰＣが命令を実行する処理を示すフローチャートである。
【図１１】図１１は、図１０のステップＳ４の具体的な内容を示すフローチャートである。
【図１２】図１２は、図１１のステップＳ４４の具体的な内容を示すフローチャートである。
【発明を実施するための形態】
【００２５】
図面を参照した下記の説明により本発明に係る方法、命令フォーマット、プロセッサの実施形態が示される。
【００２６】
図１は、プロセッサ１を備えるパーソナルコンピュータ１００およびパーソナルコンピュータ１００が実行するプログラム２００を示す図である。パーソナルコンピュータ１００は、以下では、ＰＣ１００と略称される。
【００２７】
ＰＣ１００は、プロセッサ１と、データ格納部２とを備える。
【００２８】
プロセッサ１は、ＰＣ１００が保持するプログラム２００を実行するプロセッサ（中央演算処理装置、ＣＰＵ）である。なお、本実施形態のプログラム２００には、順序付データ参照命令３００が含まれ、プロセッサ１は、順序付データ参照命令３００を含む命令セットを有する。
【００２９】
データ格納部２は、プロセッサ１により、データを格納するのに用いられ、プロセッサ１が格納させるデータを保持すると共に、格納するデータをプロセッサ１へと送る。例えば、データ格納部２は、ＰＣ１００のメインメモリや、ハードディスク（ＨＤＤ）である。
【００３０】
プロセッサ１は、命令格納部３と、命令発行部４と、実行部５とを備える。
【００３１】
命令格納部３は、プロセッサ１内部にプログラム２００を入力し、入力したプログラム２００を格納する。命令格納部３は、例えば、プロセッサ１が有する命令キャッシュである。
【００３２】
命令発行部４は、命令格納部３に格納されたプログラム２００のうちで、プロセッサ１が現在実行する実行部分を、命令格納部３から取得し、取得した実行部分に含まれる各命令を実行部５に発行し、実行部５に実行させる。命令発行部４は、このとき、アウト・オブ・オーダで命令の発行を行い、つまり命令の乱発行を行い、当初のプログラム２００における各命令の順序を、適宜別の順序に移動させて、移動がされた後の実行順序でそれぞれ各命令を実行部５に実行させる。なお、命令発行部４は、データ線１１を介して実行部分を命令格納部３から取得する。
【００３３】
そして、命令発行部４は、データ格納部２に書き込みや読み出しなどの資源アクセスを行う命令を実行させる場合には、データ格納部２から信号線１４を介して、それらの資源アクセスが完了したことを示す完了信号を取得して、資源アクセスが完了したことの完了検知を行う。
【００３４】
なお、資源アクセスには、アクセス先の資源へのデータの書き込み乃至資源へのデータの入力が行われる資源アクセスと、アクセス先の資源からのデータの読み出し乃至資源からのデータの出力が行われる資源アクセスと、それら書き込み乃至入力と読み出し乃至出力との両者を組み合わせたものが行われる資源アクセスとが含まれる。この資源アクセスは、例えば信号線１３を介して行われる。
【００３５】
実行部５は、命令発行部４が発行し、実行部５に実行させる命令をそれぞれ実行する。実行部５は、命令発行部４が実行させる実行順序で、それぞれ、各命令を実行する。実行部５は、実行する命令が、データ格納部２に資源アクセスをする命令である場合、データをデータ格納部２に格納させたり、格納されたデータを取得するなどする。なお、実行部５は、データ線１２を介して、発行される命令を命令発行部４から取得して、取得した命令を実行する。
【００３６】
図２は、実行部５の具体的な構成と、実行部５に接続する命令発行部４およびデータ格納部２を示す図である。
【００３７】
実行部５は、命令デコーダ５１と、ＡＬＵ（Arithmetic Logic Unit：演算論理装置）５２と、外部データアクセス部５３と、ＩＯレジスタ２ＩＯと、レジスタファイル５Ｒとを備える。また、実行部５は、これら各構成の間を接続するバス、命令デコーダ５１と他の構成の間を接続する制御信号線を備える。
【００３８】
命令デコーダ５１は、実行部５が実行する命令をデコードし、デコードにより特定される命令の内容に応じた制御信号を、実行部５の他の構成へ出力する。実行部５は、実行する命令を命令デコーダ５１にデコードさせることによって、その命令の内容に応じた制御信号を各構成に命令デコーダ５１より入力させることにより、命令の内容に応じて各構成を制御する。実行部５は、こうして各構成の動作を制御することにより、命令を実行する。
【００３９】
なお、命令発行部４も、各命令を適切な順序で発行するのに要する情報を得るために、命令の少なくとも一部をデコードするものとしてもよい。
【００４０】
ＡＬＵ５２は、命令の内容が、データの演算である場合に、実行部５が、その演算を行わせる演算装置である。実行部５がＡＬＵ５２を用いる、演算をする命令のうちには、例えば、加減乗除の演算が含まれる。命令には、かかる加減乗除の演算の命令のように、複数のデータを基にした演算をする命令（多項演算の命令）が含まれる。かかる複数のデータを基にする命令には、複数のそれらの基にされるデータをそれぞれ特定する、複数のオペランドが含まれる（図６（ｂ）参照）。
【００４１】
外部データアクセス部５３は、データ格納部２への資源アクセスを行う。実行部５は、データ格納部２に資源アクセスする命令を実行する場合に、外部データアクセス部５３によって資源アクセスを行う。
【００４２】
ＩＯレジスタ２ＩＯは、Ｉ／Ｏのために実行部５が有するレジスタである。実行部５は、実行する命令がＩ／Ｏを伴う場合、このＩＯレジスタ２ＩＯへの資源アクセスを行って、命令を実行する。ＩＯレジスタ２ＩＯは、図２に示される個別レジスタＩＯ０、個別レジスタＩＯ１、個別レジスタＩＯ２などの複数の個別のレジスタが集まってなる。
【００４３】
なお、データ格納部２と、ＩＯレジスタ２ＩＯは、それぞれ、実行部５が資源アクセス（書き込み、及び読み出し）をするアクセス先の資源の一例に該当する。
【００４４】
レジスタファイル５Ｒは、データを一時記憶する高速な記憶装置（レジスタの集まり）である。実行部５は、実行する命令に応じて、データをレジスタファイル５Ｒに書き込んだり、レジスタファイル５Ｒからデータを読み出したりする。実行部５は、その命令が、レジスタ間接方式によるオペランドを有する場合にも、レジスタファイル５Ｒからデータを読み出し、読み出したデータが特定するデータ領域のデータを基にした処理を実行する。このときレジスタファイル５Ｒから読み出されるデータは、処理の基になるデータが格納されたデータ領域を特定するポインタである。
【００４５】
なお、命令発行部４は、かかる実行部５の具体的な構成に応じて、アウト・オブ・オーダでの命令発行を行い、例えば、外部データアクセス部５３に書き込みをさせる命令を発行した後に、書き込まれたデータを読み出させる命令を発行させる際に、書き込みが完了するまでの間の実行順序へと、ＡＬＵ５２等のみを稼動させて外部データアクセス部５３は稼動させない命令を移動させて、かかる実行順序でそれらのＡＬＵ５２等のみを稼動させる命令を発行し、上記読み出しの命令は完了後の実行順序に移動させて、その実行順序で発行する。
【００４６】
図３は、命令発行部４の具体的な構成と、命令発行部４に接続する命令格納部３および実行部５を示す図である。本実施形態の命令発行部４は、プログラム２００に含まれる順序付データ参照命令３００に基づいて、より自由に命令の移動を行い、プロセッサ１によるプログラム２００の実行を高速化させることができる。以下の説明により、この点が詳しく説明される。
【００４７】
図４は、順序付データ参照命令３００の命令フォーマット３００ｆを示す図である。
【００４８】
図４（ａ）は、順序付データ参照命令３００の概略構成を示す図である。
【００４９】
順序付データ参照命令３００は、本体部分３００ｎと、フィールド３００ｍとを備える。
【００５０】
本体部分３００ｎは、順序付データ参照命令３００が実行部５に実行させる実行内容を特定するデータであり、加算の演算、データ格納部２へのデータ書き込みなどの処理の種類を特定するオペコードと、処理の対象となるデータのデータ領域を特定するオペランドを備える。なお、順序付データ参照命令３００が、加減乗除の演算の命令であるなどして、多項演算の命令である場合には、本体部分３００ｎは、複数のオペランドを含む。
【００５１】
フィールド３００ｍは、解読されることにより、順序付データ参照命令３００が実行順序の保証対象の対象命令として指定する対象命令６００が特定されるのに要する情報が得られるデータである。なお、フィールド３００ｍの具体的な構成は、図４（ａ）、図４（ｂ）を参照した後述の説明により示される。
【００５２】
図３に示されるように、命令発行部４は、フィールド存在判断部４１と、対象命令特定部４２と、命令発行制御部４３とを備える。
【００５３】
フィールド存在判断部４１は、フィールド３００ｍが命令に含まれるか否かを判断する。フィールド存在判断部４１は、含まれると判断することにより、その命令が順序付データ参照命令３００であることを特定し、含まれないと判断することにより、順序付データ参照命令３００ではない一般命令であることを特定する。
【００５４】
対象命令特定部４２は、フィールド存在判断部４１によりフィールド３００ｍが含まれると判断された命令の当該フィールド３００ｍを解読して、順序付データ参照命令３００が指定する対象命令６００（図４（ａ））を特定する。
【００５５】
命令発行制御部４３（図３）は、当初のプログラム２００における命令の順序から、適宜別の順序へと命令の順序を変更し、変更がされた後の発行順序でそれぞれ各命令を実行部５に発行し、発行をした発行順序と同じ実行順序により各命令を実行部５に実行させる。例えば、命令発行制御部４３は、命令の内容を示す信号を実行部５に入力することにより、その命令を実行部５に実行させる。
【００５６】
そして、命令発行制御部４３は、順序付データ参照命令３００があれば、順序付データ参照命令３００の実行に対する、順序付データ参照命令３００が指定する対象命令６００の相対的な実行順序を、一定の範囲に保証する。
【００５７】
以下の説明は、フィールド３００ｍの具体的な構成と、対象命令特定部４２がその構成をどのように処理するかを示す。順序付データ参照命令３００には、第１型の順序付データ参照命令３０１と（図４（ｂ））、第２型の順序付データ参照命令３０２（図４（ｃ））とが含まれる。
【００５８】
図４（ｂ）は、第１型の順序付データ参照命令３０１を示す図である。
【００５９】
フィールド３００ｍは、第１型の順序付データ参照命令３０１において、第１型の順序付データ参照命令３０１が、対象命令６００を指定するか否かを示す指定有無表示フィールド３０１ｍである。指定有無表示フィールド３０１ｍが、第１型の順序付データ参照命令３０１が対象命令６００を指定することを示す場合、第１型の順序付データ参照命令３０１は、本体部分３００ｎにより、対象命令６００を特定する。具体的には、第１型の順序付データ参照命令３０１は、かかる場合、本体部分３００ｎにより特定される第１型の順序付データ参照命令３０１により資源アクセスがされるアクセス先の資源７００（図４（ｂ））に基づいて、この資源７００と同じ資源７００をアクセス先とする他のデータ参照命令を、対象命令６０１と指定する。したがって、第１型の順序付データ参照命令３０１は、かかる資源７００とは異なる資源７０１をアクセス先とするデータ参照命令（対象外命令６０１ｘ）は、対象命令６０１には指定しない。
【００６０】
なお、ここで、同じ資源７００や、異なる資源７０１などの資源には、上述のように、例えば、データ格納部２や、ＩＯレジスタ２ＩＯが含まれる。なお、同じ資源７００や、異なる資源７０１などの資源には、他の資源も含まれるものとしてもよい。
【００６１】
第１型の順序付データ参照命令３０１は、指定有無表示フィールド３０１ｍが、対象命令を第１型の順序付データ参照命令３０１が指定しないことを示す場合には、１つも対象命令を指定せず、実行順序の保証をしないデータ参照命令となるので、狭義の意味での順序付データ参照命令ではないものとなる。
【００６２】
対象命令特定部４２は、指定有無表示フィールド３０１ｍを解読して、第１型の順序付データ参照命令３０１が対象命令を指定すると判断した場合には、本体部分３００ｎを読み出して、本体部分３００ｎが特定する資源７００を特定することにより、特定される資源７００と同じ資源７００をアクセス先とする他のデータ参照命令を対象命令６０１と特定する。
【００６３】
図４（ｃ）は、第２型の順序付データ参照命令３０２を示す図である。
【００６４】
フィールド３００ｍは、第２型の順序付データ参照命令３０２においては、対象命令６０２を特定する対象特定フィールド３０２ｍである。第２型の順序付データ参照命令３０２は、対象特定フィールド３０２ｍにより、対象命令６０２として指定し、つまり、対象特定フィールド３０２ｍにより特定されるデータ参照命令を、対象命令６０２として指定する。
【００６５】
対象命令特定部４２は、対象特定フィールド３０２ｍを解読して、対象特定フィールド３０２ｍが特定する他のデータ参照命令を判断し、特定されると判断された他のデータ参照命令を、第２型の順序付データ参照命令３０２が指定する対象命令６０２であると特定する。
【００６６】
図５は、第１型の順序付データ参照命令３０１（図４（ｂ））の第１〜第３の３つの具体例を含んだプログラム２００、および、それらの第１型の順序付データ参照命令３０１の具体例により資源アクセスがされる各資源を示す図である。
【００６７】
図５（ａ）は、第１型の順序付データ参照命令３０１の第１の具体例を含んだプログラム２００、および、第１の具体例の第１型の順序付データ参照命令３０１ａによって資源アクセスがされる資源７００及び資源７０１を示す図である。
【００６８】
図５（ａ）の場合のプログラム２００には、「ｓｔ  ｒａ  ｘ  ＯＦ」命令（第１型の順序付データ参照命令３０１ａの第１の具体例）と、「ｌｄ  ｒｂ  Ｙ」命令（他のデータ参照命令８０１、対象命令６０１）と、「ｌｄ  ｒｃ  Ｚ」命令（他のデータ参照命令８０２、対象外命令６０１ｘ）と、「ｒｄ  ＩＯ２」命令（他のデータ参照命令８０３、対象外命令６０１ｘ）との４つの命令が含まれる。
【００６９】
上述のように、第１型の順序付データ参照命令３０１は、対象命令６０１を指定する場合には、本体部分３００ｎにより特定されるアクセス先の資源７００（データ格納部２）と同じ資源７００をアクセス先とする他のデータ参照命令８０１を、対象命令６０１と特定する。そして、第１型の順序付データ参照命令３０１は、異なる資源７０１（ＩＯレジスタ２ＩＯ）をアクセス先とする他のデータ参照命令８０３は、特定をしない対象外命令６０１ｘとする。
【００７０】
そして、第１の具体例における、第１型の順序付データ参照命令３０１は、アクセス先の資源７００をアクセス先とする他のデータ参照命令（データ参照命令８０１、データ参照命令８０２）のうちで、資源７００が有する各データ領域のうち、オペランド３０１ａｘにより特定される第１型の順序付データ参照命令３０１のアクセス箇所２Ｐに対する近傍の近傍データ領域２Ｎにアクセスする他のデータ参照命令８０１のみを、対象命令６０１と指定し、同じ資源７００を資源アクセスしても、近傍データ領域２Ｎ以外のデータ領域にアクセスする他のデータ参照命令８０２は、対象命令６０１ではない対象外命令６０１ｘとする。
【００７１】
第１の具体例では、対象命令特定部４２は、オペランド３０１ａｘを解読して、オペランド３０１ａｘが特定するアクセス箇所２Ｐの近傍の近傍データ領域２Ｎを特定し、同じ資源７００をアクセス先とする他のデータ参照命令８０１、８０２のうち、特定される近傍データ領域２Ｎにアクセスする他のデータ参照命令８０１のみを対象命令６０１と特定する。
【００７２】
なお、近傍データ領域２Ｎは、例えば、アクセス箇所２Ｐを中心とした、幅が４ｋバイトのデータ領域である。
【００７３】
次に、第２の具体例として、第１の具体例の変形例を説明する。この変形例では、第１型の順序付データ参照命令３０１は、アクセス先の資源がＩＯレジスタ２ＩＯの場合に、ＩＯレジスタ２ＩＯが有する個別レジスタＩＯ０、ＩＯ１、ＩＯ２…のうち、アクセス先の個別レジスタが属するグループＧ１、Ｇ２…と同じグループＧ１、Ｇ２にアクセスする他のデータ参照命令８０３を、対象命令６０１として指定する。ここで、ＩＯレジスタ２ＩＯが有するレジスタが属するグループとは、一例としては、図５のＩＯレジスタ２ＩＯに示されるように、レジスタ番号が隣接する２つのレジスタよりなるグループである。
【００７４】
対象命令特定部４２は、かかる第２の具体例の場合には、ＩＯレジスタ２ＩＯが有する個別レジスタＩＯ０、個別レジスタＩＯ１、個別レジスタＩＯ２等の各個別レジスタのうちで、第１型の順序付データ参照命令３０１の本体部分３００ｎにより特定される、アクセスがされる個別レジスタが属するグループを特定し、特定されるグループに含まれる個別レジスタにアクセスする他のデータ参照命令を対象命令６０１として指定する。
【００７５】
次に、第３の具体例を説明する。第１型の順序付データ参照命令３０１は、アクセス箇所２Ｐと同じアクセス箇所２Ｐをアクセスする他のデータ参照命令のみを、対象命令６０１として指定するものであってもよい。
【００７６】
かかる第３の具体例の場合、対象命令特定部４２は、アクセス箇所２Ｐにアクセスする他のデータ参照命令のみを、対象命令６０１と特定し、例えば図５（ａ）のデータ参照命令８０１のように、近傍データ領域２Ｎにアクセスするとはいえ、近傍データ領域２Ｎのうちのアクセス箇所２Ｐ以外の箇所をアクセスするデータ参照命令は、対象外命令６０１ｘとし、アクセス箇所２Ｐをアクセスする他のデータ参照命令のみを、対象命令６０１と特定する。
【００７７】
図５（ｂ）は、第１型の順序付データ参照命令３０１の第４の具体例を含んだプログラム２００、および、第４の具体例の第１型の順序付データ参照命令３０１ａ１によって資源アクセスがされる資源７００を示す図である。第４の具体例は、第１の具体例、または、第３の具体例に対する変形例である。
【００７８】
図５（ｂ）の場合のプログラム２００には、「ｓｔｒ  ｒａ  ｍ（ｒｂ）  ＯＦ」命令（第４の具体例の第１型の順序付データ参照命令３０１ａ１）が含まれる。
【００７９】
図５（ｂ）に示される第１型の順序付データ参照命令３０１ａ１は、レジスタ間接の方式によって、レジスタファイル５Ｒ（図２）に含まれるレジスタＲの内容により、アクセス箇所２Ｐを特定するオペランド３０１ａｘを有する場合に、以下のように、対象命令６０１を指定する。
【００８０】
第１型の順序付データ参照命令３０１ａ１は、レジスタ間接の方式により、アクセス箇所２Ｐを特定するオペランド３０１ａｘを有する場合には、同じ資源７００に資源アクセスをするデータ参照命令であれば、その資源アクセスでのアクセス箇所が、第１型の順序付データ参照命令３０１ａ１のアクセス箇所２Ｐと異なっていても、対象命令６０１として指定する。
【００８１】
対象命令特定部４２は、第１型の順序付データ参照命令３０１ａ１がレジスタ間接の方式によるものであれば、同じ資源７００に資源アクセスをするデータ参照命令であれば、いずれのデータ参照命令も、対象命令６０１と特定する。例えば、対象命令特定部４２は、かかる場合には、上述したデータ参照命令８０１と、データ参照命令８０２とのいずれも、同じ資源７００をアクセス先とすることには違いないので、対象命令６０１として特定する。
【００８２】
図６は、第２型の順序付データ参照命令３０２（図４（ｃ））の第１〜第４の具体例がそれぞれ含まれた４つのプログラム２００と、それら具体例により資源アクセスされるデータ格納部２及びＩＯレジスタ２ＩＯを示す図である。
【００８３】
図６（ａ）は、第２型の順序付データ参照命令３０２の第１の具体例を示す図である。
【００８４】
第１の具体例に係る第２型の順序付データ参照命令３０２ａにおいては、対象特定フィールド３０２ｍａは、対象命令６０２のアドレス（格納番地）を保持し、保持するアドレスによって、そのアドレスのデータ領域に格納された他のデータ参照命令を対象命令６０２として特定すると共に、その他のデータ参照命令は、対象命令６０２ではない対象外命令６０２ｘとする。
【００８５】
ここで、図６（ａ）では、対象特定フィールド３０２ｍａは、２つのアドレスを保持し、２つの対象命令６０２を特定する場合を例示している。対象特定フィールド３０２ｍａは、アドレスを１つだけ保持するものでもよいし、複数保持するものでもよい。
【００８６】
なお、保持されるアドレスは、順序付データ参照命令３０２ａに対する相対的なアドレスでもよいし、プログラム２００の先頭のアドレスに対する相対的なアドレスでもよいし、プログラム２００が格納される記憶域におけるプログラム２００の格納位置に関わらない、その命令の絶対的アドレスであってもよい。
【００８７】
第１の具体例では、対象命令特定部４２は、対象特定フィールド３０２ｍａを解読して、格納されたアドレスを特定し、そのアドレスが示す他のデータ参照命令を、対象命令６０２とそれぞれ特定する。
【００８８】
図６（ｂ）は、第２型の順序付データ参照命令３０２の第２の具体例、および、データ格納部２を示す図である。
【００８９】
第２の具体例に係る第２型の順序付データ参照命令３０２ｂにおいては、対象特定フィールド３０２ｍｂは、複数のオペランドのうちから、オペランドを選択するオペランド選択データである。図６（ｂ）では、対象特定フィールド３０２ｍｂは、順序付データ参照命令３０２ｂが備える、値Ｘ１を格納した第１オペランドと、値Ｘ２を格納した第２オペランドのうちから、後者の第２オペランドのみを選択する場合が例示されている。
【００９０】
そして、対象特定フィールド３０２ｍｂは、こうしてオペランド選択データによってオペランドを選択することにより、選択するオペランドが特定する、順序付データ参照命令３０２ｂのアクセス箇所２Ｐｂと同じアクセス箇所２Ｐｂにアクセスする他のデータ参照命令を、対象命令６０２と特定する。対象特定フィールド３０２ｍｂは、そのアクセス箇所２Ｐｂとは異なるアクセス箇所２Ｐｂｘをアクセスする他のデータ参照命令は、対象外命令６０２ｘとする。
【００９１】
なお、順序付データ参照命令３０２ｂは、２つ以上のオペランドを選択するオペランド選択データを有して、複数の対象命令６０２を特定するものであってもよい。
【００９２】
第２の具体例では、対象命令特定部４２は、対象特定フィールド３０２ｍａを解読して、格納されたアドレスを特定し、特定されるアドレスが示す他のデータ参照命令を、対象命令６０２とそれぞれ特定する。
【００９３】
図６（ｃ）は、第２型の順序付データ参照命令３０２の第３の具体例を示す図である。
【００９４】
第３の具体例に係る順序付データ参照命令３０２ｃにおいては、対象特定フィールド３０２ｍｃは、命令のオペコードを格納して、そのオペコードと同じオペコードを有する他のデータ参照命令を、対象命令６０２と特定し、異なるオペコードを有する他のデータ参照命令は、対象外命令６０２ｘとする。なお、図６（ｃ）では、対象特定フィールド３０２ｍｃが、Ｌｏａｄ命令のオペコードを格納し、他のデータ参照命令のうちで、Ｌｏａｄ命令であるデータ参照命令のみを特定し、Ｓｔｏｒｅ命令であるデータ参照命令は特定しない場合が例示されている。
【００９５】
なお、対象特定フィールド３０２ｍｃは、複数のオペコードを格納し、複数のオペコードの他のデータ参照命令を、いずれも、対象命令６０２と特定するものであってもよい。
【００９６】
第３の具体例では、対象命令特定部４２は、対象特定フィールド３０２ｍｃを解読して、格納されたオペコードを特定し、特定されるオペコードを有する他のデータ参照命令を、対象命令６０２としてそれぞれ特定する。
【００９７】
図６（ｄ）は、第２型の順序付データ参照命令３０２の第４の具体例、およびデータ格納部２とＩＯレジスタ２ＩＯを示す図である。
【００９８】
第４の具体例に係る順序付データ参照命令３０２ｄにおいては、対象特定フィールド３０２ｍｄは、順序付データ参照命令３０２ｄがアクセスするデータ領域を特定するアクセスデータ領域特定データである。ここで、対象特定フィールド３０２ｍｄは、例えば、図５（ａ）に示されるアクセス箇所２Ｐを特定するものでもよいし、アクセス箇所２Ｐの近傍よりなる、図２の近傍データ領域２Ｎ等の、アクセス箇所２Ｐの近傍のデータ領域を特定するものでもよいし、アクセスがされるＩＯレジスタ２ＩＯのグループや、個別レジスタを特定するものであってもよい。
【００９９】
第４の具体例では、対象命令特定部４２は、対象特定フィールド３０２ｍｄを解読して、データ領域を特定し、そのデータ領域にアクセスする他のデータ参照命令を、それぞれ、対象命令８１０と特定する。なお、図６（ｄ）では、命令８１１、命令８１２も図示される。
【０１００】
次に、図７〜図９を参照して、順序付データ参照命令３００の種類を説明する。
【０１０１】
図７は、第１種類の順序付データ参照命令３００Ａが含まれるプログラム２００を説明する図である。
【０１０２】
第１種類の順序付データ参照命令３００Ａは、プログラム２００において第１種類の順序付データ参照命令３００Ａより後に表記された実行順序の保証対象の対象命令６００Ａを指定する順序付データ参照命令３００である。例えば、第１種類の順序付データ参照命令３００Ａは、表記が後の対象命令６００Ａがデータ格納部２等に書き込んだデータを読み出すデータ参照命令であり、書き込みが完了した後に、その読み出しを行わなければならないデータ参照命令である。
【０１０３】
なお、図７に示される移動不可の矢印線は、命令発行部４がこの矢印線により示される命令の移動をしないことを保証することを示し、他方、図７に示される移動可能の矢印線は、命令発行部４がこの矢印線により示される命令の移動が、かかる移動をしないことを保証するものではなく、命令発行部４が自由に行うことができる命令の移動を示すものである。この点は、図８、図９において同様である。この点については、図１２を参照した後述の説明によって、詳しく述べられる。
【０１０４】
図８は、第２種類の順序付データ参照命令３００が含まれるプログラム２００を説明する図である。
【０１０５】
第２種類の順序付データ参照命令３００Ｂは、プログラム２００において第２種類の順序付データ参照命令３００Ｂよりも前に表記された実行順序の保証対象の対象命令６００Ｂを指定する順序付データ参照命令３００である。第２種類の順序付データ参照命令３００Ｂは、例えば、表記が前の対象命令６００Ｂがデータ格納部２等から読み出すデータを、予め書き込むデータ参照命令である。
【０１０６】
図９は、第３種類の順序付データ参照命令３００Ｃが含まれるプログラム２００を説明する図である。
【０１０７】
第３種類の順序付データ参照命令３００Ｃは、表記が後の対象命令６００Ａと、表記が前の対象命令６００Ｂとの両者を含む複数の対象命令６００を指定する順序付データ参照命令３００である。
【０１０８】
図１０は、ＰＣ１００が命令を実行する処理を示すフローチャートである。
【０１０９】
ステップＳ１は、ユーザが、プログラム２００を作成するステップであり、ＰＣ１００が行う処理ではない。
【０１１０】
例えば、ユーザは、アセンブラを用いて、順序付データ参照命令３００を含むプログラム２００を作成する。この場合、プログラム２００は、アセンブラ言語のプログラムであり、順序付データ参照命令３００は、アセンブラ言語の命令である。そして、ユーザは、プログラム２００によって実現させる処理に含まれる因果関係や、データ間の依存関係などを特定し、特定されるそれらの関係のために必要な命令間の実行順序の保証内容を実現するように、プログラム２００の各箇所に適切な順序付データ参照命令３００を埋め込んで、プログラム２００を作成する。ユーザは、例えば、指定有無表示フィールド３０１ｍ(図４（ａ）)や対象特定フィールド３０２ｍ（図４（ｂ））に適切な値を設定し、適切な値を設定したフィールド３００ｍを有する順序付データ参照命令３００を有するプログラム２００を作成する。例えば、ユーザは、実行順序の保証対象となる対象命令６０２を選択し、選択した対象命令６０２の格納番地（アドレス）を対象特定フィールド３０２ｍに書き込む。
【０１１１】
なお、プログラム２００は、ステップＳ１で、ユーザによって作成されるのでなく、ユーザが動作させるコンパイラによって作成されるものとしてもよい。
【０１１２】
この場合、例えば、コンパイラは、プログラム２００の基となる基プログラムに含まれる上述した因果関係や依存関係等を自ら解析し、解析によって特定された因果関係等により必要となる命令の間の実行順序の保証を実現するように、順序付データ参照命令３００をプログラム２００の各箇所に埋め込むものとしてもよい。
【０１１３】
ここで、基プログラムには、Ｃ言語のコンパイラ指令子（プリプロセッサ指示子）などによって、保証されるべき命令の実行順序や、埋め込むべき順序付データ参照命令３００を特定する情報が、ユーザによって記述されており、コンパイラは、ユーザによって記述された情報に基づいてコンパイルを行うものとしてもよい。この場合、コンパイラは、単に、ユーザのかかる記述により特定される順序付データ参照命令３００を埋め込むだけに留まり、上述したような因果関係の解析などは行わないものとしてもよい。
【０１１４】
ステップＳｘは、ＰＣ１００が、ステップＳ１で作成されたプログラム２００を実行する処理である。以下の説明は、ステップＳｘの具体的な内容を説明する。
【０１１５】
ステップＳ２では、命令格納部３が、プログラム２００をプロセッサ１に入力して、入力したプログラム２００を格納する。
【０１１６】
ステップＳ３では、命令格納部３が、ステップＳ２で当該命令格納部３に格納した順序付データ参照命令３００を含む命令群（実行部分）を命令発行部４に供給し、命令発行部４が、供給される、順序付データ参照命令３００が含まれる命令群（実行部分）を一時的に保持する。
【０１１７】
ステップＳ４では、命令発行部４が、ステップＳ３で保持した各命令を、アウト・オブ・オーダで実行部５に発行し、実行部５に実行させる。実行部５は、発行された各命令を発行された順序でそれぞれ実行する。
【０１１８】
図１１は、図１０のステップＳ４の具体的な内容を示すフローチャートである。
【０１１９】
ステップＳ４１では、フィールド存在判断部４１（図３）が、ステップＳ３で命令発行部４が保持した各命令に、フィールド３００ｍ（図４（ａ））が含まれるか否かを判断する。フィールド存在判断部４１は、フィールド３００ｍが含まれることを判断することにより、フィールドが含まれると判断された命令を、順序付データ参照命令３００と特定する。
【０１２０】
ステップＳ４２では、対象命令特定部４２が、ステップＳ４１で特定された順序付データ参照命令３００が指定する対象命令６００を特定する。
【０１２１】
ステップＳ４３では、命令発行制御部４３が、以上のステップＳ４１〜Ｓ４３での準備に基づいて、命令の発行を行う。
【０１２２】
図１２は、図１０のフローチャートにおけるステップＳ４３の詳細を示すフローチャートである。
【０１２３】
ステップＳ４３１では、命令発行制御部４３が、順序付データ参照命令３００の種類（図７〜図９）に応じて、第１種類である場合の処理（ステップＳ４３Ａ４〜Ｓ４３Ａ７）と、第２種類である場合の処理（ステップＳ４３Ｂ１〜Ｓ４３Ｂ４）と、第３種類である場合の処理（ステップＳ４３Ｃ１〜Ｓ４３Ｃ７）とを切り替える。
【０１２４】
例えば、実行部５は、順序付データ参照命令３００の種類を判断する種類判断部を備える。そして、命令発行制御部４３は、種類判断部の判断結果に応じて、この切り替えを行う。種類判断部は、例えば、順序付データ参照命令３００の本体部分３００ｎに含まれるオペランドにより特定される処理の種類に応じて、順序付データ参照命令３００が書き込みをする命令であれば第１種類と判断したり、読み出しをする命令であれば第２種類と判断したりするなどして、種類を判断する。あるいは、種類判断部は、フィールド３００ｍに含まれる種類を示す種類情報を読み取り、読み取った種類情報が示す種類を、順序付データ参照命令３００の種類と判断するものであってもよい。
【０１２５】
ステップＳ４３Ａ４では、命令発行制御部４３は、第１種類の順序付データ参照命令３００Ａ（図７の命令（３））を発行する。命令発行制御部４３は、対象命令６００の発行（ステップＳ４３Ａ７）に先立って、このステップＳ４３Ａ４で、第１種類の順序付データ参照命令３００Ａを発行する。
【０１２６】
ステップＳ４３Ａ５では、命令発行制御部４３は、ステップＳ４３Ａ４で発行した順序付データ参照命令３００Ａの完了検知があるまで（後述のステップＳ４３Ａ６参照）、対象命令６００Ａを発行しない（ステップＳ４３Ａ７参照）ことから生じるストール４００Ａ（図７）を解消するよう、対象命令６００Ａ以外のデータ参照命令、つまり、対象外命令（図４（ａ）の対象外命令６０１ｘ等）を発行する。
【０１２７】
図７において、移動可能の文字が付された矢印線は、命令発行制御部４３が、対象外命令を移動させて、このステップＳ４３Ａ５で対象外命令を発行することにより、ストール４００Ａが解消されることを示すものである。
【０１２８】
このステップＳ４３Ａ５で、命令発行制御部４３は、対象命令６００Ａ以外の対象外命令であれば、例えば、図７に示される命令（５）のように、対象命令６００Ａと同じく第１種類の順序付データ参照命令３００Ａよりも後に表記されたデータ参照命令であっても、ストール４００Ａの解消のため、命令を移動させる。
【０１２９】
なお、このステップＳ４３Ａ５で、命令発行制御部４３は、対象命令６００Ａ以外の命令であれば、対象命令ではない命令、データ参照命令ではない命令も移動して、ストール４００Ａを解消する。
【０１３０】
ステップＳ４３Ａ６では、命令発行制御部４３は、ステップＳ４３Ａ４で発行した順序付データ参照命令３００Ａの完了検知を行う。
【０１３１】
ステップＳ４３Ａ７では、命令発行制御部４３は、ステップＳ４４Ａ６での完了検知に応じて、ステップＳ４２（図１０参照）で特定された対象命令６００Ａ（図７の命令（４））を発行する。こうして、命令発行制御部４３は、第１種類の順序付データ参照命令３００Ａを実行の完了検知があった後の範囲の実行順序で、対象命令６００Ａを実行させて、対象命令６００Ａの実行順序を保証する。図７において、移動不可の文字が付された矢印線は、命令発行制御部４３が、かかる範囲での実行順序を保証し、その矢印線が示すような、かかる範囲外の実行順序での実行は回避することを示すものである。
【０１３２】
ステップＳ４３Ｂ１では、命令発行制御部４３は、第２種類の順序付データ参照命令３００Ｂ（図８）が指定する対象命令６００Ｂ（図８の命令（２））を発行する。命令発行制御部４３は、第２種類の順序付データ参照命令３００Ｂの発行（ステップＳ４３Ｂ４）に先立って、このステップＳ４３Ｂ１で、対象命令６００Ｂを発行する。
【０１３３】
ステップＳ４３Ｂ２では、命令発行制御部４３は、ステップＳ４３Ｂ１で発行した対象命令６００Ｂの完了検知の後に（ステップＳ４３Ｂ３参照）、第２種類の順序付データ参照命令３００Ｂを発行する（ステップＳ４４Ｂ４参照）ことから生じるストール４００Ｂ（図８）を解消するよう、対象外命令を発行する。図８において、移動可能の文字が付された矢印線は、対象外命令が移動されて、このステップＳ４３Ｂ２で発行されることで、ストール４００Ｂが解消されることを示すものである。ここで、命令発行制御部４３は、対象外命令でさえあれば、図８の命令（１）のように、対象命令６００Ｂと同じく、順序付データ参照命令３００Ｂよりも前に表記されたデータ参照命令でも、ストール４００Ｂ解消のために、命令を移動させる。
【０１３４】
ステップＳ４３Ｂ３では、命令発行制御部４３は、ステップＳ４３Ｂ１で発行した対象命令６００Ｂの完了検知を行う。
【０１３５】
ステップＳ４３Ｂ４では、命令発行制御部４３は、ステップＳ４４Ｂ３での完了検知に応じて、第２種類の順序付データ参照命令３００Ｂを発行する。
【０１３６】
こうして、命令発行制御部４３は、対象命令６００Ｂの完了検知（ステップＳ４３Ｂ３）の後の実行順序で、第２種類の順序付データ参照命令３００Ｂを実行させて（ステップＳ４３Ｂ４）、完了検知が第２種類の順序付データ参照命令３００Ｂの実行よりも前となる範囲の実行順序に、対象命令６００Ｂの実行順序を保証する。
【０１３７】
ステップＳ４３Ｃ１では、命令発行制御部４３は、ステップＳ４２（図１０）で特定された対象命令６００Ａおよび対象命令６００Ｂのうちの、第３種類の順序付データ参照命令３００Ｃ（図８の命令（３））よりも表記が前の対象命令６００Ｂ（命令（２））を発行する。
【０１３８】
ステップＳ４３Ｃ２では、命令発行制御部４３は、対象命令６００Ｂの完了検知までは（ステップＳ４３Ｃ３参照）、第３種類の順序付データ参照命令３００Ｃの発行（ステップＳ３２Ｃ４参照）をしないことから生じるストール４００Ｂ（図９）を解消するよう、対象外命令を発行する。なお、このとき、命令発行制御部４３は、移動させる命令が対象外命令であれば、図９の命令（１）のような、第３種類の順序付データ参照命令３００Ｃより前に表記された対象外命令も移動させるし、図９の命令（５）のような、後に表記された対象外命令も移動させる。
【０１３９】
ステップＳ４３Ｃ３では、命令発行制御部４３は、ステップＳ４３Ｃ１で発行した、表記が前の対象命令６００Ｂの完了検知を行う。
【０１４０】
ステップＳ４３Ｃ４では、命令発行制御部４３は、ステップＳ４３Ｃ３での完了検知に応じて、第３種類の順序付データ参照命令３００Ｃ（図９の命令（３））を発行する。
【０１４１】
ステップＳ４３Ｃ５では、命令発行制御部４３は、ステップＳ４３Ｃ４で発行した第３種類の順序付データ参照命令３００Ｃの完了検知（ステップＳ４３Ｃ６参照）までのストール４００Ａを解消するよう、対象外命令を発行する。命令発行制御部４３は、このときにも、第３種類の順序付データ参照命令３００Ｃより前に表記されたデータ参照命令も、後に表記されたデータ参照命令も、ストール４００Ａの解消のために移動させる。
【０１４２】
ステップＳ４３Ｃ６では、命令発行制御部４３は、ステップＳ４３Ｃ４で発行した順序付データ参照命令３００Ｃ（図８の命令（３））の完了検知を行う。
【０１４３】
ステップＳ４３Ｃ７では、命令発行制御部４３は、ステップＳ４４Ｃ６での完了検知に応じて、先のステップＳ４２（図１１）で特定された対象命令のうちの、表記が後の対象命令６００Ｂ（図８の命令（４））を発行する。
【０１４４】
こうして、命令発行制御部４３は、第３種類の順序付データ参照命令３００Ｃよりも先に対象命令６００Ｂを実行させると共に（ステップＳ４３Ｃ１）、その完了検知（ステップＳ４３Ｃ３）の後の実行順序で、第３種類の順序付データ参照命令３００Ｃを発行し（ステップＳ４３Ｃ４）、さらに、その第３種類の順序付データ参照命令３００Ｃの完了検知（ステップＳ４３Ｃ６）の後の実行順序で、他方の対象命令６００Ａを発行して（ステップＳ４３Ａ７）、対象命令６００Ａ、および対象命令６００Ｂの実行順序を保証する。
【０１４５】
このようにして、本実施形態においては、プロセッサ１による命令の実行を制御する方法であって、フィールド存在判断部４１により、「予め定められたフィールド３００ｍがデータ参照命令に含まれるかが判断される」工程が行われ、対象命令特定部４２により、「その工程によりフィールド３００ｍが含まれると判断された順序付データ参照命令３００の当該フィールド３００ｍを解読して、当該順序付データ参照命令３００が指定する、実行順序の保証対象となる対象命令６００を特定する」工程が行われ、命令発行制御部４３により、「順序付データ参照命令３００、および、特定された対象命令６００を実行させるのに、順序付データ参照命令３００の実行に対する、特定された前記対象命令６００の実行順序を保証するよう、当該２つの命令の実行順序を制御する」工程が行われる命令実行制御方法が用いられる。
【０１４６】
また、対象命令特定部４２により、「前記フィールドが含まれると判断された順序付データ参照命令３００（第１種類の順序付データ参照命令３００Ａ、第２種類の順序付データ参照命令３００Ｂ）の当該フィールド３００ｍを解読し、当該順序付データ参照命令３００が指定する、当該順序付データ参照命令３００より後に表記された、実行順序の保証対象となる対象命令６００Ａを特定する」工程が行われ、命令発行制御部４３により、「前記順序付データ参照命令３００の実行完了よりも後の実行順序で、特定された対象命令６００Ａを実行させる」工程が行われる方法が用いられる。
【０１４７】
また、対象命令特定部４２により、「前記フィールドが含まれると判断された順序付データ参照命令３００（第２種類の順序付データ参照命令３００Ｂ、第３種類の順序付データ参照命令３００Ｃ）の当該フィールド３００ｍを解読して、順序付データ参照命令３００が指定する、当該順序付データ参照命令３００よりも前に表記された、実行順序の保証対象となる対象命令６００Ｂを特定する」工程が行われ、命令発行制御部４３により、「順序付データ参照命令３００の実行よりも前に実行完了する実行順序により、特定された対象命令６００Ａを実行させる」工程が行われる方法が用いられる。
【０１４８】
このような実施形態により、実行順序の保証対象となる対象命令６００を個別に指定することができるので、アウト・オブ・オーダ実行時において、移動できない命令が、指定された対象命令６００のみになり、移動を制限される命令を減らすことにより、より自由に命令を移動させることができ、例えば、図８において表記が前の命令（１）を自由に移動できるなどして、ストール４００Ａ等のストールを十分に小さくできて、プロセッサ１を高速化することができる。
【０１４９】
そして、図４（ａ）の場合、つまり順序付データ参照命令３００が、第１型の順序付データ参照命令３０１である場合には、前記フィールド３００ｍは、第１型の順序付データ参照命令３０１が対象命令６０１を指定しないか、指定するかを示す指定有無表示フィールド３０１ｍであり、命令が特定される前記工程では、指定することが示される場合に、当該順序付データ参照命令３０１のアクセス先の資源７００と同じ資源７００をアクセス先とする他のデータ参照命令を、対象命令６０１として特定する方法が行われる。
【０１５０】
また、図５（ａ）によって説明される各具体例のうちで第３の具体例の場合、対象命令が特定される前記工程では、第１型の順序付データ参照命令３０１ａの前記アクセス先の資源７００の各データ領域のうちで、当該第１型の順序付データ参照命令３０１ａによりアクセスされるアクセス箇所２Ｐと同じアクセス箇所２Ｐにアクセスする他のデータ参照命令８０１のみを前記対象命令６０１と特定する。
【０１５１】
また、図５（ａ）の第１の具体例の場合、第１型の順序付データ参照命令３０１の前記アクセス先の資源７００の各データ領域のうちで、当該第１型の順序付データ参照命令３０１によってアクセスされるアクセス箇所２Ｐを含む予め定められた近傍の近傍データ領域２Ｎにアクセスする他のデータ参照命令８０１を前記対象命令６０１と特定する。
【０１５２】
なお、図５（ａ）の第２の具体例の場合、第１型の順序付データ参照命令３０１の前記アクセス先の資源７００の各個別レジスタのうちで、当該第１型の順序付データ参照命令３０１によってアクセスされる個別レジスタを含むグループにアクセスする他のデータ参照命令８０１を前記対象命令６０１と特定する。
【０１５３】
また、図５（ｂ）に示される第４の具体例の場合、対象命令が特定される前記工程では、第１型の順序付データ参照命令３０１が、レジスタ間接方式により当該資源７００の各データ領域のうちからアクセスするアクセス箇所を特定する場合には、当該資源７００をアクセス先とする、いずれのデータ領域にアクセスするデータ参照命令も、対象命令６０１と特定する。
【０１５４】
また、図４（ｂ）の場合には、前記フィールド３００ｍは、対象命令６０２を特定する対象特定フィールド３０２ｍであり、対象命令が特定される前記工程は、当該対象特定フィールド３０２ｍを解読することにより、当該対象特定フィールド３０２ｍが特定するデータ参照命令を前記対象命令６０２と特定する。
【０１５５】
そして、第１種類の順序付データ参照命令３０１の命令フォーマットとして、当該第１種類の順序付データ参照命令３０１の資源アクセスでのアクセス先の資源７００を特定する本体部分３００ｎと、当該第１種類の順序付データ参照命令３０１が、他のデータ参照命令の実行順序を保証させる順序付データ参照命令か否かを示す指定有無表示フィールド３０１ｍを備える命令フォーマット３０１ｆが用いられる。
【０１５６】
また、第２種類の順序付データ参照命令３０２の命令フォーマットとして、当該第２種類の順序付データ参照命令３０２に対する相対的な実行順序を当該第２種類の順序付データ参照命令３０２が保証させる実行順序の保証対象のデータ参照命令を特定する対象特定フィールド３０２ｍを備える命令フォーマット３０２ｆが用いられる。
【０１５７】
そして、図６（ａ）の場合には、対象特定フィールド３０２ｍは、１つ又は複数のアドレス空間（アドレス、格納番地）を指定することにより、各アドレス空間の領域に格納されるデータ参照命令を各々、保証対象のデータ参照命令（対象命令６０２）と特定する。
【０１５８】
なお、図６（ｄ）の場合には、対象特定フィールド３０２ｍは、１つ又は複数のアドレス空間（アクセスデータ領域特定データ）を指定することにより、各アクセスデータ領域特定データが特定する領域に格納されるデータ参照命令を各々、保証対象のデータ参照命令（対象命令６０２）と特定する。
【０１５９】
また、図６（ｂ）の場合には、対象特定フィールド３０２ｍは、１つまたは複数の当該データ参照命令（順序付データ参照命令３０２ｃ）が有するオペランドを指定することにより、当該各オペランドが特定するデータ領域（アクセス箇所２Ｐｂ）と同じデータ領域（アクセス箇所２Ｐｂ）にアクセスする他のデータ参照命令を対象命令６０２と特定する。
【０１６０】
以下の説明は、変形例を示す。
【０１６１】
上記実施形態では、プロセッサ１に設けられた、アウト・オブ・オーダでの命令発行をする際に命令移動を行う命令発行部をとりあげたが、コンパイラに設けられた、プログラムの最適化を行うために命令を移動させる最適化処理部に、命令発行部の上記技術を適用してもよい。この場合、このコンパイラは、順序付データ参照命令３００が含まれたプログラム２００を、プログラム２００とは異なる出力プログラムへと変換するコンパイラである。そして、最適化処理部は、最適化のために、プログラム２００に含まれる命令の順序を移動させ、この移動に際して、上記命令発行部と同様に、対象命令を特定すると共に、出力プログラムにおける対象命令の順序を一定の範囲に保証する。このとき、最適化処理部は、指定される対象命令だけを保証し、対象命令ではない対象外命令は自由に移動させて、十分に最適化を施す。
【０１６２】
これにより、コンパイラの最適化時において、移動できない命令が、指定された少数のもののみになり、移動を制限される命令を減らすことにより、より自由に命令を移動させて、コンパイラが出力する出力プログラムが高速に実行されるようにできる。
【０１６３】
なお、かかる場合、最適化処理部は、命令の順序を移動させた後の出力プログラムとして、少なくとも一部に順序付データ参照命令が含まれる出力プログラムを出力してもよい。
【産業上の利用可能性】
【０１６４】
本発明にかかる命令実行制御方法およびその方法を用いたプロセッサ、命令フォーマットは、従来のものに比べ、アウト・オブ・オーダ実行時などにおいて、移動できない命令が少なく抑えられるため、特にアクセスレイテンシが大きい資源へのデータ転送を行う場合などにおいて、十分にストールを少なくできるなどして、性能劣化を抑制できる効果があり、プロセッサとプロセッサ外部のメモリやＩＯレジスタとの間でデータの授受を行う場合において、他のプロセッサとの待ち合わせが必要、または、あるＩＯレジスタの書込みが完了してから他のＩＯレジスタを読込む必要があるプロセッサおよびプロセッサを搭載したシステムなどにおいて有用である。
【符号の説明】
【０１６５】
１  プロセッサ
２  データ格納部
３  命令格納部
４  命令発行部
５  実行部
４１  フィールド存在判断部
４２  対象命令特定部
４３  命令発行制御部
１００  ＰＣ
２００  プログラム
３００  順序付データ参照命令
３００ｎ  本体部分
３０１、３０１ａ、３０１ａ１  第１型の順序付データ参照命令
３０１ｍ  指定有無表示フィールド
３０２、３０２ａ〜３０２ｄ  第２型の順序付データ参照命令
３０２ｍ  対象特定フィールド
６００、６０１、６０２  対象命令
２ＩＯ  ＩＯレジスタ
２Ｐ  アクセス箇所
２Ｎ  近傍データ領域
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プロセッサによる命令の実行を制御する方法であって、
予め定められたフィールドが第１のデータ参照命令に含まれるか否かを判断するフィールド判断工程と、
前記フィールド判断工程により前記フィールドが含まれると判断された前記第１のデータ参照命令の当該フィールドを解読して、当該第１のデータ参照命令が指定する、実行順序の保証対象となる第２のデータ参照命令を特定する命令特定工程と、
前記第１のデータ参照命令、および、特定された前記第２のデータ参照命令を実行させるに際して、前記第１のデータ参照命令の実行に対する前記第２のデータ参照命令の実行順序を保証するように当該２つの命令の実行順序を制御する実行制御工程とを備える命令実行制御方法。
【請求項２】
前記命令特定工程は、前記フィールド判断工程により前記フィールドが含まれると判断された前記第１のデータ参照命令の当該フィールドを解読して、当該第１のデータ参照命令が指定する、当該第１のデータ参照命令より後に表記された、実行順序の保証対象となる第２のデータ参照命令を特定し、
前記実行制御工程は、前記第１のデータ参照命令の実行完了よりも後の実行順序で、特定された当該第２のデータ参照命令を実行させる請求項１記載の命令実行制御方法。
【請求項３】
前記命令特定工程は、前記フィールド判断工程により前記フィールドが含まれると判断された当該第１のデータ参照命令の当該フィールドを解読して、当該第１のデータ参照命令が指定する、当該第１のデータ参照命令よりも前に表記された、実行順序の保証対象となる第２のデータ参照命令を特定し、
前記実行制御工程は、前記第１のデータ参照命令の実行よりも前に実行完了する実行順序により、特定された前記第２のデータ参照命令を実行させる請求項１記載の命令実行制御方法。
【請求項４】
前記命令特定工程は、前記フィールド判断工程により前記フィールドが含まれると判断された前記第１のデータ参照命令の当該フィールドを解読して、当該第１のデータ参照命令が指定する、当該第１のデータ参照命令よりも後に表記された、実行順序の保証対象となる第２のデータ参照命令、および、当該第１のデータ参照命令よりも前に表記された、実行順序の保証対象となる第２のデータ参照命令をそれぞれ特定し、
前記実行制御工程は、前記第１のデータ参照命令の実行完了よりも後の実行順序で、特定された、表記が後ろの前記第２のデータ参照命令を実行させると共に、当該第１のデータ参照命令の当該実行よりも前に実行完了する実行順序で、表記が前である前記第２のデータ参照命令を実行させる請求項１記載の命令実行制御方法。
【請求項５】
前記フィールドは、前記第１のデータ参照命令が前記第２のデータ参照命令を指定するか、指定しないかを示すフィールドであり、
前記命令特定工程では、指定することが示される場合に、当該第１のデータ参照命令のアクセス先の資源と同じ資源をアクセス先とする他のデータ参照命令を、指定される前記第２のデータ参照命令として特定する請求項４記載の命令実行制御方法。
【請求項６】
前記命令特定工程では、当該第１のデータ参照命令の前記アクセス先の資源の各データ領域のうちで、当該第１のデータ参照命令によりアクセスされるデータ領域と同じデータ領域にアクセスするデータ参照命令のみを前記第２のデータ参照命令と特定する請求項５記載の命令実行制御方法。
【請求項７】
前記命令特定工程では、前記第１のデータ参照命令の前記アクセス先の資源の各データ領域のうちで、当該第１のデータ参照命令によってアクセスされるデータ領域を含む予め定められた近傍のデータ領域にアクセスするデータ参照命令を前記第２のデータ参照命令と特定する請求項５記載の命令実行制御方法。
【請求項８】
前記命令特定工程では、前記第１のデータ参照命令が、レジスタ間接方式により当該資源の各データ領域のうちからアクセスする前記データ領域を特定する場合には、当該資源をアクセス先とする、いずれのデータ領域にアクセスするデータ参照命令も、前記第２のデータ参照命令と特定する請求項７記載の命令実行制御方法。
【請求項９】
前記フィールドは、データ参照命令を特定するフィールドであり、
前記命令特定工程は、当該フィールドを解読することにより、当該フィールドが特定するデータ参照命令を前記第２のデータ参照命令と特定する請求項２〜４の何れか１項に記載の命令実行制御方法。
【請求項１０】
データ参照命令の命令フォーマットであって、
前記データ参照命令は、
当該データ参照命令のアクセス先の資源を特定する命令本体部と、
当該データ参照命令が、他のデータ参照命令の実行順序を保証させる順序付データ参照命令か否かを示すフィールドとを備えるデータ参照命令の命令フォーマット。
【請求項１１】
データ参照命令の命令フォーマットであって、
前記データ参照命令は、
当該データ参照命令が保証させる当該データ参照命令に対する相対的な実行順序の保証対象のデータ参照命令を特定するフィールドを備えるデータ参照命令の命令フォーマット。
【請求項１２】
当該フィールドは、１つ又は複数のアドレス空間を指定することにより、各アドレス空間の領域に格納されるデータ参照命令を各々、前記保証対象のデータ参照命令と特定する請求項１１記載の命令フォーマット。
【請求項１３】
前記フィールドは、１つまたは複数の当該データ参照命令が有するオペランドを指定することにより、当該各オペランドが特定するデータ領域と同じデータ領域にアクセスする他のデータ参照命令を前記保証対象のデータ参照命令と特定する請求項１１記載の命令フォーマット。
【請求項１４】
前記フィールドは、１つまたは複数の命令の種類を指定することにより、指定する当該各種類のデータ参照命令を、前記保証対象のデータ参照命令と特定する請求項１１記載の命令フォーマット。
【請求項１５】
命令を実行するプロセッサであって、
予め定められたフィールドが第１のデータ参照命令に含まれるか否かを判断するフィールド判断部と、
前記フィールド判断部により前記フィールドが含まれると判断された前記第１のデータ参照命令の当該フィールドを解読して、当該第１のデータ参照命令が指定する、当該第１のデータ参照命令より後に表記された、実行順序の保証対象の第２のデータ参照命令を特定する命令特定部と、
前記第１のデータ参照命令の実行完了よりも後の実行順序で、特定された当該第２のデータ参照命令を実行させる実行制御部とを備えるプロセッサ。
【請求項１６】
命令を実行するプロセッサであって、
予め定められたフィールドが第１のデータ参照命令に含まれるか否かを判断するフィールド判断部と、
前記フィールド判断部により前記フィールドが含まれると判断された当該第１のデータ参照命令の当該フィールドを解読して、当該第１のデータ参照命令が指定する、当該第１のデータ参照命令よりも前に表記された、実行順序の保証対象の第２のデータ参照命令を特定する命令特定部と、
前記第１のデータ参照命令の実行よりも前に実行完了する実行順序により、特定された前記第２のデータ参照命令を実行させる実行制御部とを備えるプロセッサ。
【請求項１７】
命令を実行するプロセッサであって、
予め定められたフィールドが第１のデータ参照命令に含まれるか否かを判断するフィールド判断部と、
前記フィールド判断部により前記フィールドが含まれると判断された前記第１のデータ参照命令の当該フィールドを解読して、当該第１のデータ参照命令が指定する、当該第１のデータ参照命令よりも後に表記された、実行順序の保証対象の第２のデータ参照命令、および、当該第１のデータ参照命令よりも前に表記された、実行順序の保証対象の第２のデータ参照命令をそれぞれ特定する命令特定部と、
前記第１のデータ参照命令の実行完了よりも後の実行順序で、特定された、表記が後ろの前記第２のデータ参照命令を実行させると共に、当該第１のデータ参照命令の当該実行よりも前に実行完了する実行順序で、表記が前である前記第２のデータ参照命令を実行させる実行制御部とを備えるプロセッサ。
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正の内容】
【図１】
2009119021.tif 000015
【図２】
2009119021.tif 000016
【図３】
2009119021.tif 000017
【図４】
2009119021.tif 000018
【図５】
2009119021.tif 000019
【図６】
2009119021.tif 000020
【図７】
2009119021.tif 000021
【図８】
2009119021.tif 000022
【図９】
2009119021.tif 000023
【図１０】
2009119021.tif 000024
【図１１】
2009119021.tif 000025
【図１２】
2009119021.tif 000026
【国際調査報告】
2009119021.tif 000027
2009119021.tif 000028
2009119021.tif 000029