(57)【特許請求の範囲】
【請求項１】
ストア命令とロード命令を含む命令群を実行する前に予め、当該命令群のなかにおけるストア命令とロード命令のアドレス依存性を判断し、ストア命令を特定する手段であって、アドレス依存性が判断される対象となった前記命令群のなかにおいて、当該特定されるストア命令よりも後の全てのロード命令とアドレス依存性が無いストア命令を特定する手段と、
前記命令群を実行する際に、前記命令群を受信し、前記特定されるストア命令の実行準備が完了するまで、前記命令群のうち、当該特定されるストア命令よりも後のロード命令を、前記特定されるストア命令よりも優先的に送出する送出手段と、
前記送出されたロード命令を実行する実行手段と
を有することを特徴とする演算処理装置。
【請求項２】
前記特定する手段がコンパイラ装置であり、
前記送出手段及び前記実行手段が中央処理装置であることを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記特定する手段は、前記特定される複数のストア命令に、アドレス依存性が無いことを示す識別情報を付加し、アドレス依存性を判断した命令群の終了位置を示す終了位置情報を前記命令群に付加し、命令群を送信するように構成されており、
前記送出手段は、前記命令群を受信し、前記識別情報が付加されたストア命令の実行準備が完了するまで、前記終了位置情報よりも前のロード命令を、前記識別情報の付加されたストア命令よりも優先的に前記実行手段に送出する
ように構成されていることを特徴とする請求項１または請求項２に記載の演算処理装置。
【請求項４】
前記送出手段は、前記実行手段におけるロード命令の実行準備が完了した場合に、前記命令群のうちの当該ロード命令を、前記特定されるストア命令よりも優先的に送出するように構成されていることを特徴とする請求項１から請求項３のいずれかに記載の演算処理装置。
【請求項５】
前記送出手段は、前記実行手段で所定の演算処理が完了するまで、前記命令群のうちのロード命令を、前記特定されるストア命令よりも優先的に送出するように構成されていることを特徴とする請求項１から請求項４のいずれかに記載の演算処理装置。
【請求項６】
ストア命令とロード命令を含む命令群を実行する前に予め、当該命令群のなかにおけるストア命令とロード命令のアドレス依存性を判断し、ストア命令を特定するステップであって、アドレス依存性が判断される対象となった前記命令群のなかにおいて、当該特定されるストア命令よりも後の全てのロード命令とアドレス依存性が無いストア命令を特定するステップと、
前記命令群を実行する際に、前記命令群を受信し、前記特定されるストア命令の実行準備が完了するまで、前記命令群のうち、当該特定されるストア命令よりも後のロード命令を、前記特定されるストア命令よりも優先的に送出する送出ステップと、
前記送出されたロード命令を実行する実行ステップと
を有することを特徴とする演算処理方法。
【請求項７】
前記特定するステップは、コンパイラ装置で行われ、
前記送出ステップ及び前記実行ステップは、中央処理装置で行われることを特徴とする請求項６に記載の演算処理方法。
【請求項８】
前記特定するステップは、前記特定される複数のストア命令に、アドレス依存性が無いことを示す識別情報を付加し、アドレス依存性を判断した命令群の終了位置を示す終了位置情報を前記命令群に付加し、命令群を送信するステップであり、
前記送出ステップは、前記命令群を受信し、前記識別情報が付加されたストア命令の実行準備が完了するまで、前記終了位置情報よりも前のロード命令を、前記識別情報の付加されたストア命令よりも優先的に送出するステップであること
を特徴とする請求項６または請求項７に記載の演算処理方法。
【請求項９】
前記送出ステップは、ロード命令の実行準備が完了した場合に、前記命令群のうちの当該ロード命令を、前記特定されるストア命令よりも優先的に送出することを特徴とする請求項６から請求項８のいずれかに記載の演算処理方法。
【請求項１０】
前記送出ステップは、前記実行ステップで所定の演算処理が完了するまで、前記命令群のうちのロード命令を、前記特定されるストア命令よりも優先的に送出するように構成されていることを特徴とする請求項６から請求項９のいずれかに記載の演算処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理技術に関し、特に、主記憶装置にアクセスする際の処理性能を向上させる演算処理技術に関する。
【背景技術】
【０００２】
近年、情報処理装置のＣＰＵの演算性能は、多くの演算器を実装することで、益々向上してきている。特に、最近では、ＣＰＵにおける演算性能向上のために、演算を補助するコプロセッサを使用する方式が増えている。このようなコプロセッサを使用する方式では、コプロセッサとしてＳＩＭＤ方式（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）の演算器が実装されており、少ない命令数で演算を実行し、演算性能を向上させる技術が採用されている。このようなコプロセッサを使用して処理性能を向上させる技術は、例えば、特許文献１等が知られている。
【０００３】
こうして、ＣＰＵの演算性能が大幅に向上する中、主記憶装置へのアクセス時間を短縮化する技術も提案されてきている。
【０００４】
例えば、特許文献２には、ストア命令とロード命令との依存性に関わるスケジューリング手法が開示されている。この特許文献２の発明では、ストアアドレス、ロードアドレスを演算する命令を区別して扱い、ロードアドレスを演算する命令を実行するときに、該ロードアドレスとストアアドレスとのアドレス依存性（主記憶装置にアドレスの重複有無）を調べ、命令間の順番を変更する技術が記載されている。特許文献２の発明によれば、主記憶装置との関係で命令演算をスケジューリングすることで、命令スループットを増大させることができる。尚、このようなストアアドレスとロードアドレスの依存性に関わるスケジューリング技術は、特許文献３でも知られている。
【特許文献１】特開２００６−０４８６６１号公報
【特許文献２】特表２００２−５２７７９８号公報
【特許文献３】特開２００６−２２８２４１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ところで、こうした技術が提案されてきているものの、ＣＰＵが主記憶装置（メインメモリ）にアクセスするメモリアクセス時間の短縮化という点では、目立った性能の向上はみられなかった。その為、ＣＰＵの高い演算性能を十分に活かすことができないという問題があった。これには以下のような背景があった。
【０００６】
メモリアクセス技術においては、ＣＰＵの実行する命令列の中に複数のロード命令、ロードしたデータを使う複数の演算命令、及び、その演算結果を格納する複数のストア命令がある場合に、ＣＰＵの中央処理部では、ロード命令とストア命令との間におけるアドレス依存性をチェックすることになる。ここで、アドレス依存性のチェックとは、ストア命令による書込み先となる主記憶装置のアドレス（以降、ストアアドレスとも記載する）と、ロード命令による読み込み先となる主記憶装置のアドレス（以降、ロードアドレスとも記載する）との一致・不一致をチェックすることである。その際、ＣＰＵでは、チェックに要する処理の「待ち」が発生する。すなわち、上述したアドレス依存性のチェックが済むまでは、ストア命令に先行させて後続するロード命令を主記憶装置から読み出すことができず、図８に示されるように、ＣＰＵ側では、ストア命令に先行させて後続するロード命令を処理することができない。この為、後続ロード命令は、ストア命令が実行されてストアアドレスが確定するのを待たなければならない。更に、ロード命令に後続する演算処理（図８ではＦＡＤと記載）も、ストア命令が実行されストアアドレスが確定するのを待たなければならず、所謂、「処理待ち」が発生してしまう。
【０００７】
このような、アドレス依存性のチェックによる「処理待ち」があるが故に、ＣＰＵそのものが高性能化しても、メインメモリからのロード命令の読出しがボトルネックとなり、メモリアクセスが伴う処理性能を大幅に向上させることができなかった。
【０００８】
例えば、コプロセッサを備え、主記憶装置との転送路の帯域も充分に確保した高速のＣＰＵでも、主記憶装置からロード命令を読み出す際にはアドレス依存性チェックが必要であった。従って、一度に主記憶装置から読み出せるロード命令の数が限られてしまい、ロード命令の読出し処理がボトルネックとなっていた。言い換えると、ハイスペックなＣＰＵの能力を活かしきれず、ハードウェア資源に無駄が生じていた。
【０００９】
そして、このアドレス依存性のチェックの際の「処理待ち」は、上述した特許文献２，３の発明を含む従来の技術でも解消することが困難であった。
【００１０】
特に、コプロセッサを備えたＣＰＵにおいて、そのコプロセッサ内の資源（レジスタ）にロード命令、及びストア命令で使用するアドレスが格納されている場合には、他の問題もあった。
【００１１】
例えば、自プロセッサ内の資源（レジスタ等）の値が確定した後に中央処理部にレジスタの値を送出するコプロセッサを備える場合、ＣＰＵでの「処理待ち」が生じる為、ＣＰＵがコプロセッサ内レジスタの結果を反映させたメモリアクセス命令を効率よく実行しつつアドレスの依存性をチェックすることは、難しかった。
【００１２】
そこで、本発明は、上記課題に鑑みて発明されたものであって、本発明が解決しようとする課題は、アドレス依存性チェックの際の「処理待ち」の発生を出来るだけ解消し、メモリへのアクセスが伴う処理を高速化する演算処理技術を提供することにある。
【課題を解決するための手段】
【００１３】
上記課題を解決する本発明は、演算処理装置であって、ストア命令とロード命令を含む命令群を実行する前に予め、当該命令群のなかにおけるストア命令とロード命令のアドレス依存性を判断し、ストア命令を特定する手段であって、アドレス依存性が判断される対象となった前記命令群のなかにおいて、当該特定されるストア命令よりも後の全てのロード命令とアドレス依存性が無いストア命令を特定する手段と、前記命令群を実行する際に、前記命令群を受信し、前記特定されるストア命令の実行準備が完了するまで、前記命令群のうち、当該特定されるストア命令よりも後のロード命令を、前記特定されるストア命令よりも優先的に送出する送出手段と、前記送出されたロード命令を実行する実行手段とを有することを特徴とする。
【００１４】
上記課題を解決する本発明は、演算処理方法であって、ストア命令とロード命令を含む命令群を実行する前に予め、当該命令群のなかにおけるストア命令とロード命令のアドレス依存性を判断し、ストア命令を特定するステップであって、アドレス依存性が判断される対象となった前記命令群のなかにおいて、当該特定されるストア命令よりも後の全てのロード命令とアドレス依存性が無いストア命令を特定するステップと、前記命令群を実行する際に、前記命令群を受信し、前記特定されるストア命令の実行準備が完了するまで、前記命令群のうち、当該特定されるストア命令よりも後のロード命令を、前記特定されるストア命令よりも優先的に送出する送出ステップと、前記送出されたロード命令を実行する実行ステップとを有することを特徴とする。
【発明の効果】
【００１５】
本発明によれば、演算処理装置の処理性能を向上させることができる。その理由は、本発明は、複数のストア命令と複数のロード命令とからなる命令群に対してアドレス依存性のチェックを行うことで、アドレス依存性が無いロード命令を特定し、この特定されたロード命令を前記ストア命令よりも優先的に実行させることができるので、従来技術に比べ、より多くのロード命令を優先的に実行することができ、メモリへのアクセスが伴う処理を高速化できるからである。
【発明を実施するための最良の形態】
【００１６】
次に、本発明の第１の実施の形態について、図１のブロック図を用いて説明する。
【００１７】
図１は、本発明の演算処理装置の全体図である。
【００１８】
図１を参照すると、ａは本発明の演算処理装置であり、コンパイル機能を有するコンパイラ装置ｂと、ＣＰＵである中央処理装置ｃと、メインメモリの主記憶装置ｄとから構成される。ｅは、コンパイラ装置ｂに入力されるプログラムである。プログラムｅは、Ｃ言語等の高級言語であってよいし、アセンブラ等のアセンブリ言語であってもよい。
【００１９】
まず、コンパイラ装置ｂの構成について説明する。
【００２０】
コンパイラ装置ｂは、プログラムｅが入力されると、これをＣＰＵが実行可能な形式（オブジェクトコード）へと変換する機能を有する他、プログラムｅの内容を解析し、解析結果をＣＰＵに通知する。
【００２１】
具体的には、コンパイラ装置ｂは、コンパイル機能部ｂ１と、アドレス依存性解析部ｂ２と、生成部ｂ３とを有する。
【００２２】
コンパイル機能部ｂ１は、入力されたプログラムｅをＣＰＵが実行可能な形式（オブジェクトコード）へと変換する。
【００２３】
アドレス依存性解析部ｂ２は、プログラムｅ中のアドレス依存性を解析する。具体的には、ストア命令の書き込み先の主記憶装置のアドレスと、ロード命令の読み込み先の主記憶装置のアドレスとの重複有無に基づいて、複数のストア命令と複数のロード命令とからなる命令群のアドレス依存性を判断し、ストア命令とアドレス依存性の無いロード命令を特定する。
【００２４】
ここで、アドレス依存性とは、主記憶装置におけるロード命令のアドレス（ロードアドレス、主記憶ロードアドレスとも言う）と、主記憶装置におけるストア命令のアドレス（ストアアドレス、主記憶ストアアドレスとも言う）とが重複しているか否かの状態を示す。ロード命令とは、アドレスに応じた主記憶装置の格納場所から値を読み出す際に用いられるメモリアクセス命令であり、主記憶ロード命令と呼ばれることもある。ストア命令とは、アドレスに応じた主記憶装置の格納場所への書き込みの際に用いられるメモリアクセス命令であり、主記憶ストア命令と呼ばれることもある。
【００２５】
生成部ｂ３は、アドレス依存性解析部ｂ２で解析した結果に基づいて、受信した命令群のうちアドレス依存性の無い複数のストア命令に、アドレス依存性が無いことを示す識別情報を付加する。更に、依存性を判断した命令群の終了位置を示す終了位置情報も付加される。そして、この命令群を中央処理装置に送信する。そして、コンパイル機能部ｂ１によって変換された命令群（オブジェクトコード）中の対応する命令列にこれらの情報を付与し、これを中央処理装置に通知する。
【００２６】
具体的には、生成部ｂ３は、アドレス依存性解析部ｂ２で解析した結果に基づいて、ＮＳＴ命令（識別情報）とＯＥＮＤ命令（終了位置情報）とを生成し、これをオブジェクトコード中の対応する命令群の命令列に付与し、中央処理装置に通知する。ここで、ＮＳＴ命令とは、ロード命令とのアドレス依存性が無いストア命令を特定する識別情報である。ＯＥＮＤ命令とは、アドレス依存性を判断した命令群の終了位置を示す情報であり、この情報で示される位置迄はアドレスの依存性の解析の実施を無視することができる。このＯＥＮＤ命令は、中央処理装置側で、ＮＳＴ命令で特定されたストア命令に後続するロード命令を優先的に送出させる終了位置情報として用いられる。
【００２７】
中央処理装置ｃは、通常の命令列の実行に加え、コンパイラｂから通知されたＮＳＴ命令、または、ＯＥＮＤ命令が付与された命令列を含む命令群を処理する機能を有するＣＰＵである。
【００２８】
次に、中央処理装置ｃの構成について説明する。
【００２９】
図１に示されるように、中央処理装置ｃは、アドレス依存性判定部ｃ１と、中央処理部ｃ２とを有する。
【００３０】
アドレス依存性判定部ｃ１は、コンパイラ装置ｂで生成されたＮＳＴ命令とＯＥＮＤ命令とに基づいてアドレス依存性の有無を判定する。このアドレス依存性の有無の判定は、ＮＳＴ命令，ＯＥＮＤ命令に対応するフラグを用いて行われ、その間は、アドレス同士の比較によるアドレス依存性のチェックは行われない。具体的には、ＮＳＴ命令を受信すると、ＮＳＴ命令で特定された複数のストア命令に後続する複数のロード命令を、ＮＳＴ命令で特定された複数のストア命令よりも優先的に送出してもよいと判定する。
【００３１】
すなわち、アドレス依存性判定部ｃ１は、コンパイラ装置ｂから命令群を受信すると、ＮＳＴ命令が付加されたストア命令の実行準備が完了する迄、ＯＥＮＤ命令よりも前のロード命令を、ＮＳＴ命令が付加されたストア命令よりも優先的に送出して中央処理部ｃ２に実行させる。この一連の処理を、本明細書で「複数のロード命令の先行実行」と記載する場合がある。
【００３２】
続いて、アドレス依存性判定部ｃ１の構成について、図２を用いて説明する。
【００３３】
図２を見ると、アドレス依存性判定部ｃ１は、命令列を解読するデコード部ｃ１１と、この解読された命令列を命令種別毎に格納する命令バッファ部ｃ１２と、ＮＳＴ命令・ＯＥＮＤ命令に基づいてアドレス依存性の有無を判定し、ロード命令をストア命令に先行して実行させるか否かを判定する判定回路ｃ１３と、判定回路ｃ１３による判定結果に基づいて命令バッファ部ｃ１２から出力する命令列を選択する命令選択部ｃ１０と、命令の追越しを許可するストア命令を管理するための追越し許可フラグバッファｃ１４と、アドレス依存性をチェックするための比較回路ｃ１５とから構成される。
【００３４】
まず、デコード部ｃ１１、命令バッファ部ｃ１２、及び命令選択部ｃ１０の具体的な構成について、図２及び図３のブロック図を用いて詳細に説明する。
【００３５】
図３に示すように、デコード部ｃ１１は、受信した命令列の命令種別を解読する命令デコード部ｃ１１１と、ロードＩＤ生成部ｃ１１２と、ストアＩＤ生成部ｃ１１３とを有する。
【００３６】
命令デコード部ｃ１１１は、受信した命令群の各命令列（命令列５００）の命令種別を解読し、この解読した命令を命令バッファｃ１２に命令種別毎に格納する。また、命令デコード部ｃ１１１は、ＮＳＴ命令を含むストア命令を受信すると、追越し許可セットフラグ“１”を追越し許可フラグバッファｃ１４に送出する。更に、ＯＥＮＤ命令を受信すると、追越し許可リセットフラグ“０”を追越し許可フラグバッファｃ１４に送出する。
【００３７】
ロードＩＤ生成部ｃ１１２は、命令デコード部ｃ１１１で受信した命令がロード命令であった場合に、この命令を特定する情報であるロードＩＤを生成する。このロードＩＤ生成部ｃ１１２は、実際は、付与カウンタ等である。
【００３８】
ストアＩＤ生成部ｃ１１３は、命令デコード部ｃ１１１で受信した命令がストア命令であった場合に、この命令を特定する情報であるストアＩＤを生成する。ストアＩＤ生成部ｃ１１３も、付与カウンタ等である。
【００３９】
又、図３に示すように、命令バッファ部ｃ１２は、主記憶ロード命令を格納する主記憶ロード命令バッファｃ１２１と、主記憶ストア命令を格納する主記憶ストア命令バッファｃ１２２と、ストアＩＤキューｃ１２３とを有する。
【００４０】
主記憶ロード命令バッファｃ１２１には、生成されたロードＩＤとロード命令とが対応付けられて格納される。
【００４１】
主記憶ストア命令バッファｃ１２２には、生成されたストアＩＤとストア命令とが対応付けられて格納される。
【００４２】
ストアＩＤキューｃ１２３には、ストアＩＤ生成部ｃ１１３で生成されたストアＩＤが格納される。中央処理装置の中央処理部ｃ２からのストア実行指示５０４に応答して、ストアＩＤを出力する。ここで、ストア実行指示５０４とは、アドレス依存性の無いストア命令の完了を示す通知する信号である。本実施の形態では、中央処理部ｃ２でストア実行のためのハードウェアリソースの確保が確認でき、且つ、中央処理部ｃ２側で演算処理が終了した場合に、このストア実行指示５０４を送出する。ハードウェアリソースの確保確認を待たず、中央処理部ｃ２で演算処理が終了した場合に、このストア実行指示５０４を通知するようにしても構わない。
【００４３】
命令選択部ｃ１０は、判定回路ｃ１３による判定結果に基づいて命令バッファ部ｃ１２の主記憶ロード命令バッファｃ１２１，主記憶ストア命令バッファｃ１２２から中央処理部ｃ２へ送出する命令を選択する。
【００４４】
次に、図２の判定回路ｃ１３の構成について説明する。
【００４５】
この判定回路ｃ１３は、デコード部ｃ１１から追越し許可フラグバッファｃ１４を介して受信した信号に基づいて、アドレス依存性有無を判定する。具体的には、判定回路ｃ１３は、まず、追越しを許可するか否かを示す追越し許可信号１０６を受信する。この追越し許可信号１０６は、命令デコード部ｃ１１１１から受信した「追越し許可セットフラグ“１”」、又は「追越し許可リセットフラグ“０”」のいずれかの状態が示された信号である。そして、この追越し許可信号１０６の追越し許可フラグの値が“１”の場合、
“ＮＳＴ命令を含むストア命令”、すなわちアドレス依存性が無いストア命令をデコード部ｃ１１が受信したと判定する。
【００４６】
更に、ハードウェアリソースの状況等から、ロード実行準備が整ったと判定された場合、ＣＰＵからロード実行準備完了指示５０３を受信する。
【００４７】
判定回路ｃ１３は、受信した追越し許可信号１０６と、ロード実行準備完了指示５０３とに応答し、ロード命令の実行を許可するロード実行判定結果３０３を命令選択部ｃ１０に出力する。
【００４８】
図４，図５を見ると、判定回路ｃ１３の詳細な構成が示される。
【００４９】
図４，図５に示されるように、判定回路ｃ１３は、追越し許可フラグバッファｃ１４に接続され、ストアアドレス／追越フラグセレクタｃ１３１と、図５のストア追越し判定キュー１３２と、ロード実行準備完了判定キュー１３３と、ロードＩＤキューｃ１３４と、ロード実行判定結果出力回路ｃ１３５とから構成される。
【００５０】
追越し許可フラグバッファｃ１４は、デコード部ｃ１１から通知されてきたストアＩＤと、デコード部ｃ１１から通知されてきた追越し許可フラグの値とを対応づけて格納するためのバッファである。この追越し許可フラグバッファｃ１４には、初期値“１”が設定されている。
【００５１】
図４に示されるストアアドレス／追越フラグセレクタｃ１３１は、ＮＳＴ命令が付与されたストア命令が出力された後、該ストア命令のストアＩＤに対応する追越し許可フラグバッファのフラグの値を“０”にリセットする。
【００５２】
図５に示されるストア追越し判定キューｃ１３２は、ストアＩＤに対応するストア命令に後続するロード命令を、該ストア命令よりも先行して実行させてもよいか否かの判定に用いられるキューである。ストア追越し判定キュー１３２は、Ｎ個のＦＩＦＯ（ＦＩｒｓｔｉｎ  ＦｉｒｓｔＯｕｔ）形式のキュー（Ｎ：自然数）で構成され、これらＮ個のキューは、それぞれがストアＩＤに対応づけて設けられている。更に、各キューの内部にはＭ個のエントリ（Ｍ：自然数）が設けられている。すなわち、追越し許可フラグバッファｃ１４からの追越し許可信号１０６（“０”または“１”）、または、ストア追越し判定結果１０７（“０”または“１”）が、ストアＩＤに対応するキューに格納されることになる。
【００５３】
図５に示されるロード実行準備完了判定キューｃ１３３は、中央処理部ｃ１２においてロード命令の実行準備が完了したかどうかを判定するのに用いられるキューである。ロード実行準備完了判定キューｃ１３３は、中央処理部ｃ２から、ロード命令の実行準備が完了したか否かを示すロード実行準備完了指示５０３を受信すると、このロード実行準備完了指示５０３に基づいた完了識別フラグ（０または１）が、ロードＩＤに対応付けられて格納される。ここでは、中央処理部ｃ１２側でロード命令の実行準備が完了したことを示す完了識別フラグとして、“１”を用いる。
【００５４】
ロード実行判定結果出力回路ｃ１３５は、ＡＮＤゲートである。ストア追越し判定キュー１３２から出力される「追越し許可フラグ（“０”または“１”）」の値と、ロード実行準備完了判定キューｃ１３３から出力される「完了識別フラグ（“０”または“１”）」との論理積を演算する回路である。ロード実行判定結果出力回路ｃ１３５は、ここで算出した論理積の演算結果を、ロード実行判定結果として命令選択部ｃ１０に通知する。
【００５５】
続いて、比較回路ｃ１５の内部構成について図４，図５を用いて説明する。
【００５６】
比較回路ｃ１５は、アドレス依存性の解析対象範囲外の命令列を受信した場合に用いられる回路である。すなわち、ＯＥＮＤ命令が付加された終了位置以降の、ＮＳＴ命令が付加されていない通常のストア命令を受信した場合に、後続するロード命令とのアドレス依存性を解析するのに用いられる。
【００５７】
比較回路ｃ１５は、アドレス比較器ｃ１５１と、ストア命令の主記憶ストアアドレスを格納するための主記憶ストアアドレスバッファｃ１５２と、ＯＲゲートである追越し判定結果出力回路１５３（図５）とを有する。
【００５８】
主記憶ストアアドレスバッファｃ１５２は、ストア命令の主記憶ストアアドレスを格納するために用いられるバッファである。ストアＩＤと主記憶ストアアドレスとが対応付けられて格納される。
【００５９】
アドレス比較器ｃ１５１は、Ｌ個の比較器より構成される。このＬ個の比較器のそれぞれには、主記憶ロードアドレスが格納される。各比較器は、主記憶ストアアドレスバッファｃ１５２から受信した主記憶ストアアドレスと、命令デコード部ｃ１１から受信した主記憶ロードアドレスとを比較し、アドレス比較結果１０５を出力する。すなわち、比較の結果アドレスが一致しない場合には“１”を出力し、アドレスが一致する場合には“０”を出力する。
【００６０】
図５の追越し判定結果出力回路ｃ１５３は、ＯＲゲートである。アドレス比較器ｃ１５１の各比較器から出力される「アドレス比較結果１０５（“０”または“１”）」の値と、判定回路ｃ１６の追越し許可フラグバッファから出力される「追越し許可信号１０６（“０”または“１”）」との論理和を演算する回路である。この演算結果は、「ストア追越し判定結果１０７」として判定回路ｃ１６のストア追越し判定キューｃ１３２に出力される。
【００６１】
次に、第１の実施の形態における動作について、図１〜図６を用いて詳細に説明する。
【００６２】
尚、以下では、図６の左例で示されるＦｏｒｔｒａｎプログラムのコードが、コンパイラｂによって、図６の右例で示される命令列（命令列１−１〜命令列１００００−４）に変換されたものとする。そして、図６の例で示される命令列を、中央処理装置ｃが順次読み込むものとして説明する。
【００６３】
また、以下では、プログラムの処理例として、図６に示される加算ループ処理を例にとって説明するが、他のプログラム内容を処理対象としても、むろん構わない。
【００６４】
また、ここでは、プログラムがＦｏｒｔｒａｎプログラムで記述されたプログラムであるとして説明するが、Ｃ言語等の他の言語で記述されたプログラムを処理の対象としても構わない。
【００６５】
また、ここでは、プログラムの例として高級言語であるＦｏｒｔｒａｎを例にとって説明するが、アセンブラ等のアセンブリ言語で記述されたプログラムを変換するようにしてもよい。この場合、プログラム作成者が、プログラム中のアドレス依存性を考慮し、ＮＳＴ命令、ＯＥＮＤ命令を人手により付与してもよい。図７には、これらプログラムの種別に応じたコンパイル処理の概要フローが示される。
【００６６】
また、以下では、アドレス依存性を解析した対象範囲の命令群の最終位置を終了位置とし、ＯＥＮＤ命令を付加するものとして説明するが、これに限る必要はない。中央処理装置の処理能力や主記憶ロード命令バッファの容量といったハードウェアリソースを勘案し、ロード命令数が一定命令数となるよう終了位置を決定し、ＯＥＮＤ命令を付加するようにしてもよい。
【００６７】
さて、図２に示されるように、アドレス依存判定部ｃ１が中央処理部ｃ２から命令列５００を受信すると、デコード部ｃ１１は、受信した命令列５００の命令種別を判定する。ここでは、命令列５００は、図６の命令列１−１に対応し、デコード部ｃ１１の命令デコード部ｃ１１１によってロード命令であると判定される。
【００６８】
次に、図３に示されるように、命令デコード部ｃ１１１が、ロードＩＤ生成部ｃ１１２に対して、ロード用ＩＤ付与カウンタカウントアップ信号１１０を送出する。ここで、ロード用ＩＤ付与カウンタカウントアップ信号１１０とは、ロードＩＤ生成部ｃ１１２のカウンタ値をインクリメントする信号である。ロード用ＩＤ付与カウンタカウントアップ信号１１０を受信したロードＩＤ生成部ｃ１１２は、受信したロード命令に対応するロードＩＤ１０１（１−１）を生成する。そして、ロード命令は、ロードＩＤ（１−１）と関連づけられ、主記憶ロード命令バッファ１２１に格納される。また、ロードＩＤ１０１（１−１）は、ロードＩＤキューｃ１３４にも送出される。
【００６９】
続いて、ロードＩＤ１０１（１−１）に対応するロード命令の主記憶ロードアドレスが、比較回路ｃ１５のアドレス比較器ｃ１５１に送出される。
【００７０】
ここで、図４を見ると、比較器ｃ１５１において、主記憶ストアアドレスバッファｃ１５２から受信した主記憶ストアアドレスと、命令デコード部ｃ１１から受信した主記憶ロードアドレスとが比較され、アドレス比較結果１０５が出力される。ここでは、まだ主記憶ストアアドレスのエントリが無く、アドレスが一致することはないので、アドレス比較結果１０５は“０”として出力される。
【００７１】
次に、図５を見ると、追越し判定結果出力回路１５３によって、アドレス比較器ｃ１５１から出力された「アドレス比較結果１０５」の値（ここでは「“０”」）と、判定回路ｃ１６の追越し許可フラグバッファｃ１６１とから出力される「追越し許可信号１０６」との論理和が演算される。ここで、追越し許可フラグバッファｃ１４には、全てのエントリに初期値“１”が設定されている。この為、比較回路ｃ１５によるアドレス比較処理（アドレス依存性解析）は行われない。比較回路ｃ１５の比較結果に関わらず、追越し判定結果出力回路１５３による論理和の演算結果である「ストア追越し判定結果１０７（０）〜ストア追越し判定結果１０７（Ｎ）」は、ここでは全て“１”として出力されるからである。すなわち、追越し判定結果出力回路１５３による演算結果は“１”となる。この「ストア追越し判定結果“１”」は、ストア追越し判定キューｃ１３２に通知され、ストア追越し判定キュー１３２のＮ個のキューから出力される「追越し許可フラグ」の値は、いずれも“１”となる。
【００７２】
このとき、中央処理部ｃ２でロード命令の実行準備が完了すると、中央処理部ｃ２は、アドレス依存判定部ｃ１のロード実行準備判定キューｃ１３３に対しロード実行準備完了指示５０３を送出する。ここでは、ロードＩＤ１０１（１−１）に対応する完了識別フラグ“１”が、ロード実行準備完了指示５０３としてロード実行判定結果出力回路ｃ１３５に送出される。この完了識別フラグ“１”は、ロードＩＤ１０１（１−１）とともに、ロード実行判定結果出力回路ｃ１３５に送出される。
【００７３】
続いて、ロード実行判定結果出力回路ｃ１３５によって、各ストア追越し判定キュー１３２から出力される「ストア追越し判定結果」の値（ここでは、“１”）と、ロード実行準備完了判定キュー１３３から出力される「完了識別フラグ」の値（ここでは、“１”）」との論理積が算出される。ここでは、ロード実行判定結果“１”が命令選択部ｃ１０に通知されことになる。このとき、ロード実行判定結果「“１”」とともに、ロードＩＤ１０１（１−１）もあわせて命令選択部ｃ１０に通知される。
【００７４】
次に、図３を見ると、ロードＩＤ１０１（１−１）とロード実行判定結果３０３「“１”」とを受信した命令選択部ｃ１０は、命令バッファｃ１２の主記憶ロード命令バッファｃ１２１に対し、ロードＩＤ１０１（１−１）に対応するロード命令５０２（１−１）の出力を指示する。そして、ロード命令５０２（１−１）が出力される。この出力されたロード命令５０２（１−１）は、中央処理部ｃ２に渡される。これにより命令列１−１に対応するロード命令５０２が中央処理部ｃ２で処理される。すなわち、Ｖ０レジスタから値“Ｘ”が読み出される。
【００７５】
同様にして、図６の命令列１−２に対応するロード命令が中央処理部ｃ２で処理される。すなわち、Ｖ４レジスタから値“Ｌ”が読み出される。
【００７６】
続いて、中央処理部ｃ２では、図６の命令列１−３に対応する加算処理（ＦＡＤ  Ｖ３＜−Ｖ０+Ｓ０）を行う。尚、この処理は、メモリアクセス命令ではなく、プロセサ内で閉じられた演算処理である。従って、デコード部ｃ１１で次に受信する命令列は図６の命令列１−４になる。
【００７７】
次に、ＮＳＴ命令が付与されたストア命令を受信した場合の動作の説明に移る。
【００７８】
図６の命令列１−４に対応する命令列５００を受信したアドレス依存性判定部ｃ１のデコード部ｃ１１では、受信した命令列５００がＮＳＴ命令を含むストア命令であると判定する。
【００７９】
そして、図３の命令デコード部ｃ１１１は、ストアＩＤ生成部ｃ１１３に対して、ストア用ＩＤ付与カウンタカウントアップ信号２１０を送出する。ストア用ＩＤ付与カウンタカウントアップ信号２１０を受信したストアＩＤ生成部ｃ１１３は、受信したストア命令に対応するストアＩＤ２０３（１−４）を生成する。生成されたストアＩＤ２０３（１−４）は、ストアＩＤキューＣ１２３に格納される。また、ストアＩＤ２０３（１−４）に対応するストア命令２０８（１−４）は、ストアＩＤ２０３（１−４）に対応する主記憶アドレスと関連づけられ、主記憶ストア命令バッファ１２２に格納される。
【００８０】
このとき、図４に示されるように、ストアＩＤ２０３（１−４）に対応するストア命令の主記憶ストアアドレス２０２（１−４）が、図４の主記憶ストアアドレスバッファｃ１５２に送出される。そして、主記憶ストアアドレスバッファｃ１５２では、ストアＩＤ２０３（１−４）とストアＩＤ２０３（１−４）に対応する主記憶ストアアドレスとが対応付けられて格納される。
【００８１】
ここで、受信した命令列５００がＮＳＴ命令を含むと判定した命令デコード部ｃ１１は、追越し許可フラグバッファｃ１４に対して、追越し許可フラグセット２０１「フラグ値“１”」と、ストアＩＤ２０３（１−４）とを送出する。
【００８２】
図４に示されるように、追越し許可フラグバッファｃ１４では、ストアＩＤ（ここでは、ストアＩＤ２０３（１−４））と追越し許可フラグ（ここでは、追越し許可フラグ“１”）とが対応付けられて格納される。更に、この追越し許可フラグ“１”は、図５のストア追越し判定キュー１３２のストアＩＤ２０３（１−４）に対応するキューに送出され、格納される。
【００８３】
尚、図３の主記憶ストア命令バッファ１２２に格納されたストア命令２０８（１−４）は、中央処理部ｃ２での演算処理（図６：命令列１−３に対応する加算処理）が終了するまでは、中央処理部ｃ２には出力されない。
【００８４】
さて、ここで更に、後続する命令列（図６：命令列２−１）を命令デコード部ｃ１１１が受信すると、ロード命令と判定され、ロードＩＤ１０１（２−１）が生成される。このロード命令もロードＩＤ１０１（２−１）と対応づけられて主記憶ロード命令バッファｃ１２１に格納される。
【００８５】
このとき、図１の中央処理部ｃ２でロード命令の実行準備が完了すると、中央処理部ｃ２は、アドレス依存性判定部ｃ１にロード実行準備完了指示５０３を送出する。ここでも、ロードＩＤ１０１（２−１）に対応する完了識別フラグ“１”が、ロード実行準備完了指示５０３を受けて、図５のロード実行判定結果出力回路ｃ１３５に送出される。この完了識別フラグ“１”は、ロードＩＤ１０１（２−１）とともに、ロード実行判定結果出力回路ｃ１３５に送出される。このときも、ロード実行判定結果出力回路ｃ１３５のロード実行判定結果は“１”である。このロード実行判定結果“１”を受信した命令選択部ｃ１０では、ロードＩＤ１０１（２−１）に対応するロード命令５０２（２−１）を出力する。
【００８６】
以降、同様にして後続するロード命令（図６：命令列２−２，・・・１００００−１，１００００−２）が、待たされること無く順次出力される。
【００８７】
ここで、中央処理部ｃ２での演算処理（図５：命令列１−３に対応する加算処理）が終了すると、ＮＳＴ命令の付与されたストア命令（命令列１−４）が、アドレス依存性判定部ｃ１から中央処理部ｃ２に対して出力されることになる。その具体的な動作は次の通りである。
【００８８】
まず、中央処理部ｃ２で命令列１−３の演算処理が終了すると、アドレス依存性判定部ｃ１は、ストア実行準備指示５０４を中央処理部ｃ２から受信する。具体的には、図３に示されるように、ストアＩＤキューｃ１２３がストア実行準備指示５０４を受信する。ストア実行準備５０４に応答したストアＩＤキューｃ１２３は、ストアＩＤ２０７（１−４）を出力する。該ストアＩＤ２０７（１−４）は、主記憶ストア命令バッファｃ１２２に送出される。そして、命令選択部ｃ１０は、主記憶ストア命令バッファｃ１２２から、ストアＩＤ２０７（１−４）に対応するストア命令５０１（１−４）を出力する。
【００８９】
ストア命令５０１（１−４）が出力されると、図３に示されるように、ストアＩＤ２０７（１−４）は、ストア追越し判定キューセレクタｃ１２４にも送出される。ここで、ストア追越し判定キューセレクタｃ１２４は、ストア命令５０１（１−４）の出力を受けて、受信したストアＩＤ２０７（１−４）に対応するストア追越し判定キューｃ１３２に対し、フラグＡＬＬ１セット４０２を送出する。フラグＡＬＬ１セット４０２を受信した追越し判定キュー内の全てのエントリには、“１”がセットされる。このように“１”をセットすることで、後続するロード命令に「処理待ち」が発生しなくなる。更に、図４のストアアドレス/追い越しフラグセレクタｃ１３１は、受信したストアＩＤ２０７に対応する追い越し許可フラグバッファｃ１４のフラグを“０”にリセットし、受信したストアＩＤ２０７に対応する主記憶ストアアドレスバッファｃ１５２の有効フラグを“０”にリセットする。
【００９０】
同様にして、中央処理部ｃ２における次の演算処理（命令列２−３）が完了すると、ＮＳＴ命令が付加された次のストア命令（命令列２−４）も、命令選択部ｃ１０により出力される。以降も、同様にして後続する演算処理（図６：命令列３−３，・・・，１００００−３）が完了すると、ＮＳＴ命令が付加されたストア命令（命令列３−４，・・・，１００００−４）も出力されていく。
【００９１】
続いて、ＯＥＮＤ命令を受信した場合の動作の説明に移る。
【００９２】
アドレス依存性判定部ｃ１のデコード部ｃ１１は、受信した命令列５００がＯＥＮＤ命令であることを判定すると、ＯＥＮＤ命令の後続のＮＳＴ命令を含むストア命令，ロード命令を最低1サイクル保持し、追越し許可フラグバッファｃ１４に対し、追い越し許可フラグリセット３０１「“０”」を送出する。送出された追越し許可フラグリセット３０１により、追越し許可フラグバッファｃ１４の全てのフラグは“０”にリセットされる。これにより、比較回路ｃ１５によるアドレス比較処理（アドレス依存性解析）が有効になる。
【００９３】
これ以降は、比較回路ｃ１５によって、ストア命令のアドレスとロード命令のアドレスとの比較によるアドレス依存性チェック処理が行われる。すなわち、比較回路ｃ１５によるアドレス依存性のチェックが再開される。何故なら、ＯＥＮＤ命令の受信により追越し許可フラグバッファｃ１４のフラグが“０”に設定されたので、以降の命令列を受信した場合、追越し判定結果出力回路ｃ１５３による論理和演算の結果として得られるストア追越し判定結果１０７は、比較回路ｃ１５によるアドレス比較結果１０５のフラグの値に依存する結果となるからである。
【００９４】
こうして、図９に示されるように、ストア命令とアドレス依存性の無いロード命令が、優先的に出力される。
【００９５】
上記第１の実施の形態では、複数のストア命令と複数のロード命令とからなる命令群に対してアドレス依存性のチェックを行うことで、アドレス依存性が無いロード命令を特定し、この特定されたロード命令をストア命令よりも優先的に実行させることができる。従って、従来技術に比べ、より多くのロード命令を優先的に実行することができ、主記憶装置へのアクセスが伴う処理を高速化できる。
【００９６】
又、アドレス依存性を判断した命令群の終了位置までは、中央処理装置側ではアドレス同士の比較によるアドレス依存性チェックの実施をする必要が無くなるので、ロード命令の処理待ち、及び、ロード命令に後続する演算処理の処理待ちが解消され、演算処理が効率化できる。
【００９７】
又、中央処理装置の内部において、ストア命令が実行されてストアアドレスが確定するのをロード命令が待つ際に必要とされるバッファが不足し、命令パイプラインがビジーの状態になることを回避することができる。
【００９８】
又、ストア命令の数が比較器の個数（Ｌ）を超えるような命令数の多い命令群を処理するような場合であっても、「処理待ち」状態の発生を抑えることができる。何故なら、従来の構成では、ストア命令の数が比較器の個数（Ｌ）を超えるとアドレス依存性のチェックができなくなり、「処理待ち」が発生していたが、本発明では、ＮＳＴ命令の付加された複数のストア命令に後続するロード命令を優先的に処理する際、アドレス同士の比較によるアドレス依存性チェックは行われないので、比較器の個数による制約が無くなる為である。
【００９９】
又、比較器の個数は、ストア命令の数よりも少なくすることができるので、ハードウェアリソースの節約にもつながり、装置コストを抑えることができる。
【０１００】
次に、第２の実施の形態について、図１０を用いて説明する。
【０１０１】
図１０に示されるように、第２の実施の形態の構成では、第１の実施形態に加えて、コプロセッサｃ３を中央処理装置ｃが有する。
【０１０２】
第２の実施の形態における中央処理装置ｃのアドレス依存性判定部ｃ１は、ロード命令５０２，ストア命令５０１を中央処理部ｃ２に送出する際に、これらの命令をコプロセッサｃ３にも送出する。
【０１０３】
また、第２の実施の形態における中央処理装置ｃでは、命令列の実行を中央コプロセッサｃ３でも行うことができる。
【０１０４】
尚、命令列の処理動作については、第１の実施の形態で説明した場合と同じであるので、ここでは詳細な説明を省略する。
【０１０５】
上記第２の実施の形態ではコプロセッサと連携して動作するアドレス依存性判定部ｃ１を有する。この為、中央処理装置は、自装置にコプロセッサが実装されている場合であっても、アドレス依存性のチェックをせずに、ＮＳＴ命令を含むストア命令に後続するロード命令をＯＥＮＤ命令で指定された範囲で優先的に実行させることができ、メモリアクセス命令の処理効率を向上させることができる。
【図面の簡単な説明】
【０１０６】
【図１】本発明の演算処理装置における第１の実施形態の全体ブロック図。
【図２】アドレス依存性判定部の全体構成を示すブロック図。
【図３】アドレス依存性判定部のデコード部及び命令バッファ部の内部構成を示す図。
【図４】アドレス依存性判定部の判定回路の構成を示す図。
【図５】アドレス依存性判定部の判定回路の構成を示す図。
【図６】中央処理部が実行する命令列の例を示す図。
【図７】コンパイラ装置における、プログラム種別に応じたコンパイル処理の概要フローを示す図
【図８】従来のメモリアクセスが伴う命令の処理例を示した図。
【図９】本発明におけるメモリアクセスが伴う命令処理の例を、従来の処理例と対比して示した図。
【図１０】本発明の演算処理装置の第２の実施形態の全体ブロック図。
【符号の説明】
【０１０７】
ａ        演算処理装置
ｂ        コンパイラ装置
ｃ        中央処理装置
ｄ        主記憶装置
ｅ        プログラム
ｃ１０    命令選択部
ｃ１１    デコード部
ｃ１２    命令バッファ部
ｃ１３    判定回路
ｃ１４    追越し許可フラグバッファ
ｃ１５    比較回路
ｃ１１１  命令デコード部
ｃ１１２  ロードＩＤ生成部
ｃ１１３  ストアＩＤ生成部
ｃ１２１  主記憶ロード命令バッファ
ｃ１２２  主記憶ストア命令バッファ
ｃ１２３  ストアＩＤキュー
ｃ１２４  ストア追越し判定キューセレクタ
ｃ１３１  ストアアドレス／追越フラグセレクタ
ｃ１３２  ストア追越し判定キュー
ｃ１３３  ロード実行準備判定キュー
ｃ１３４  ロードＩＤキュー
ｃ１３５  ロード実行判定結果出力回路
ｃ１５１  アドレス比較器
ｃ１５２  主記憶ストアアドレスバッファ
ｃ１５３  追越し判定結果出力回路
【図１】
0005057054.tif 000002
【図２】
0005057054.tif 000003
【図３】
0005057054.tif 000004
【図４】
0005057054.tif 000005
【図５】
0005057054.tif 000006
【図６】
0005057054.tif 000007
【図７】
0005057054.tif 000008
【図８】
0005057054.tif 000009
【図９】
0005057054.tif 000010
【図１０】
0005057054.tif 000011