(57)【要約】      （修正有）【課題】演算リソースが多い場合でも比較的少ないハードウェア量で効率的に命令を実行可能な情報処理装置、情報処理方法、及び、そのためのプログラムを提供する。【解決手段】命令発行待機バッファ２１０の命令に対し、使用リソースが一致するスケジューリング済み命令の影響が無くなるタイミングまでの第１の時間を算出し、命令間依存関係カウンタ２１３に第１の時間を格納する。カウンタセット値生成手段２３２は演算器パイプラインにおけるパス競合が発生しないタイミングまでの第２の時間を算出し、パス競合カウンタ２１４に第２の時間を格納する。スケジューリング確定命令影響反映手段２３１は実行確定した命令が直後に選択された命令に与える影響を示す直前命令影響反映値を算出する。競合調停手段２２１は命令間依存関係カウンタ２１３の値、パス競合カウンタの値、及び、直前命令影響反映値を比較して最短となる命令の実行待ち時間を算出する。【選択図】図３
2016091362.tif 000002
【特許請求の範囲】
【請求項１】
演算器パイプラインのパイプライン処理を実行するパイプライン処理実行手段を、パイプライン制御手段が制御する情報処理装置であって、
前記パイプライン制御手段が、
命令発行待機バッファに存在する命令に対して、使用するリソースが一致する、スケジューリング済みの命令の影響が無くなるタイミングまでの第１の時間を算出して命令間依存関係カウンタに前記第１の時間に対応するカウンタ値を格納し、前記演算器パイプラインにおけるパス競合が発生しないタイミングまでの第２の時間を算出してパス競合カウンタに前記第２の時間に対応するカウンタ値を格納するカウンタセット値生成手段と、
実行確定した命令が、直後に選択された命令に与える影響を示す、直前命令影響反映値を算出するスケジューリング確定命令影響反映手段と、
前記命令間依存関係カウンタのカウンタ値、前記パス競合カウンタのカウンタ値、及び、前記直前命令影響反映値を比較して、最短となる命令の実行待ち時間を算出する、競合調停手段と、を包含する情報処理装置。
【請求項２】
前記命令間依存関係カウンタのカウンタ値、前記パス競合カウンタのカウンタ値、及び、前記直前命令影響反映値をデコードした値を用いて、前記競合調停手段が、前記最短となる命令の待ち時間を算出する請求項１に記載の情報処理装置。
【請求項３】
前記競合調停手段が、前記命令間依存関係カウンタのカウンタ値、前記パス競合カウンタのカウンタ値、及び、前記直前命令影響反映値の論理積を算出して、前記最短となる命令の実行待ち時間を算出する請求項１または２に記載の情報処理装置。
【請求項４】
前記デコードした値が、ｌｅａｄｉｎｇ０である請求項２または３に記載の情報処理装置。
【請求項５】
命令発行待機バッファに存在する命令に対して、使用するリソースが一致する、スケジューリング済みの命令の影響が無くなるタイミングまでの第１の時間を算出して命令間依存関係カウンタに前記第１の時間に対応するカウンタ値を格納し、前記演算器パイプラインにおけるパス競合が発生しないタイミングまでの第２の時間を算出してパス競合カウンタに前記第２の時間に対応するカウンタ値を格納し、
実行確定した命令が、直後に選択された命令に与える影響を示す、直前命令影響反映値を算出し、
前記命令間依存関係カウンタのカウンタ値、前記パス競合カウンタのカウンタ値、及び、前記直前命令影響反映値を比較して、最短となる命令の実行待ち時間を算出する、情報処理方法。
【請求項６】
前記命令間依存関係カウンタのカウンタ値、前記パス競合カウンタのカウンタ値、及び、前記直前命令影響反映値をデコードした値を用いて、前記最短となる命令の待ち時間を算出する、請求項５に記載の情報処理方法。
【請求項７】
前記命令間依存関係カウンタのカウンタ値、前記パス競合カウンタのカウンタ値、及び、前記直前命令影響反映値の論理積を算出して、前記最短となる命令の実行待ち時間を算出する、請求項５または６に記載の情報処理方法。
【請求項８】
命令発行待機バッファに存在する命令に対して、使用するリソースが一致する、スケジューリング済みの命令の影響が無くなるタイミングまでの第１の時間を算出して命令間依存関係カウンタに前記第１の時間に対応するカウンタ値を格納し、前記演算器パイプラインにおけるパス競合が発生しないタイミングまでの第２の時間を算出してパス競合カウンタに前記第２の時間に対応するカウンタ値を格納する処理と、
実行確定した命令が、直後に選択された命令に与える影響を示す、直前命令影響反映値を算出する処理と、
前記命令間依存関係カウンタのカウンタ値、前記パス競合カウンタのカウンタ値、及び、前記直前命令影響反映値を比較して、最短となる命令の実行待ち時間を算出する処理と、をコンピュータに実行させるプログラム。
【請求項９】
前記命令間依存関係カウンタのカウンタ値、前記パス競合カウンタのカウンタ値、及び、前記直前命令影響反映値をデコードした値を用いて、前記最短となる命令の待ち時間を算出する処理を前記コンピュータに実行させる請求項８に記載のプログラム。
【請求項１０】
前記命令間依存関係カウンタのカウンタ値、前記パス競合カウンタのカウンタ値、及び、前記直前命令影響反映値の論理積を算出して、前記最短となる命令の実行待ち時間を算出する処理を前記コンピュータに実行させる請求項８または９に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法、及び、そのためのプログラムに関する。
【背景技術】
【０００２】
特許文献１は、演算リソースおよびレジスタに対応したビジー管理カウンタを設け、発行待ち命令の実行判定にて関連する演算リソースのビジー管理カウンタ値を入力し、その値から最速で発行できるタイミングを算出して発行待ち時間を決定することでＲ→Ｗ（読み出し→書き込み）の関係にある後続命令を最速なタイミングで発行可能にする技術を開示する。
【０００３】
特許文献２は、ビジーフラグを用いて、命令の追い越し発行が可能な、ベクトル処理装置について開示している。
【０００４】
特許文献３は、ビジーフラグの更新が遅れる場合でも、パイプライン演算器の使用効率を低下させずに処理できる情報処理装置について開示している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１２−１７３７５５号公報
【特許文献２】特開２００８−２６９０６７号公報
【特許文献３】特開２０１１−０６００４８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１は、演算リソース毎のビジー管理カウンタを想定しており、演算リソースが多い場合に必要なハードウェア量が多くなってしまうという問題があった。また、演算リソースが多くなると、対応するビジー管理カウンタから値を選択して比較する機能を実現する際に、高速クロックに対応した実装が難しいという問題があった。
【０００７】
特許文献２は、ビジーフラグを用いており、特許文献１と同様の課題がある。
【０００８】
また、特許文献３についても、ビジーフラグを用いており、特許文献１と同様の課題がある。
【０００９】
このように、上記特許文献では、演算リソースおよびレジスタに対応した数のビジー管理カウンタを設ける必要がある。したがって、管理対象が増えるに従いハードウェア量も増大してしまう。また、管理対象の増加に従い、ビジー管理カウンタも増えるため、命令の実行判定において多数のビジー管理カウンタの値を入力し比較する必要がある。このことから回路遅延が増大し、高速クロックへの対応が難しい、という問題があった。
【００１０】
このため、本発明の目的は、上述した、管理対象の演算リソースが増えるに従いハードウェア量も増大してしまい、高速クロックへの対応が難しくなるという課題を解決することにある。
【課題を解決するための手段】
【００１１】
本発明の情報処理装置は、演算器パイプラインのパイプライン処理を実行するパイプライン処理実行手段を、パイプライン制御手段が制御する情報処理装置であって、前記パイプライン制御手段が、命令発行待機バッファに存在する命令に対して、使用するリソースが一致する、スケジューリング済みの命令の影響が無くなるタイミングまでの第１の時間を算出して命令間依存関係カウンタに前記第１の時間に対応するカウンタ値を格納し、前記演算器パイプラインにおけるパス競合が発生しないタイミングまでの第２の時間を算出してパス競合カウンタに前記第２の時間に対応するカウンタ値を格納するカウンタセット値生成手段と、実行確定した命令が、直後に選択された命令に与える影響を示す、直前命令影響反映値を算出するスケジューリング確定命令影響反映手段と、前記命令間依存関係カウンタのカウンタ値、前記パス競合カウンタのカウンタ値、及び、前記直前命令影響反映値を比較して、最短となる命令の実行待ち時間を算出する、競合調停手段と、を包含する。
【００１２】
本発明の情報処理方法は、命令発行待機バッファに存在する命令に対して、使用するリソースが一致する、スケジューリング済みの命令の影響が無くなるタイミングまでの第１の時間を算出して命令間依存関係カウンタに前記第１の時間に対応するカウンタ値を格納し、前記演算器パイプラインにおけるパス競合が発生しないタイミングまでの第２の時間を算出してパス競合カウンタに前記第２の時間に対応するカウンタ値を格納し、実行確定した命令が、直後に選択された命令に与える影響を示す、直前命令影響反映値を算出し、前記命令間依存関係カウンタのカウンタ値、前記パス競合カウンタのカウンタ値、及び、前記直前命令影響反映値を比較して、最短となる命令の実行待ち時間を算出する。
【００１３】
本発明のコンピュータプログラムは、命令発行待機バッファに存在する命令に対して、使用するリソースが一致する、スケジューリング済みの命令の影響が無くなるタイミングまでの第１の時間を算出して命令間依存関係カウンタに前記第１の時間に対応するカウンタ値を格納し、前記演算器パイプラインにおけるパス競合が発生しないタイミングまでの第２の時間を算出してパス競合カウンタに前記第２の時間に対応するカウンタ値を格納する処理と、実行確定した命令が、直後に選択された命令に与える影響を示す、直前命令影響反映値を算出する処理と、前記命令間依存関係カウンタのカウンタ値、前記パス競合カウンタのカウンタ値、及び、前記直前命令影響反映値を比較して、最短となる命令の実行待ち時間を算出する処理と、をコンピュータに実行させる。
【発明の効果】
【００１４】
本発明は、演算リソースが多い場合でも比較的少ないハードウェア量で効率的に命令を実行することが可能である。
【図面の簡単な説明】
【００１５】
【図１】図１は、第一の実施形態に係る、情報処理装置の構成の一例を示すブロック図である。
【図２】図２は、パイプライン処理実行部の構成の一例を示す図である。
【図３】図３は、パイプライン制御部の構成の一例を示す図である。
【図４】図４は、情報処理装置の動作を示すタイムチャートである。
【図５】図５は、カウンタ値のデコードに用いるデコードテーブル（カウンタ値デコード対応表）を示す。
【図６】図６は、図４の動作の詳細をクロック毎に示した図である。
【図７】図７は、図４の動作の詳細をクロック毎に示した図である。
【図８】図８は、図４の動作の詳細をクロック毎に示した図である。
【図９】図９は、図４の動作の詳細をクロック毎に示した図である。
【図１０】図１０は、図４の動作の詳細をクロック毎に示した図である。
【図１１】図１１は、スケジューリング済命令バッファが４個のみの構成の場合の情報処理装置の動作を示すタイムチャートである。
【図１２】図１２は、異なる命令列を使用した場合の情報処理装置の動作を示すタイムチャートである。
【図１３】図１３は、第二の実施形態に係る、情報処理装置の構成の一例を示すブロック図である。
【図１４】図１４は、第三の実施形態に係る、情報処理装置の構成の一例を示すブロック図である。
【発明を実施するための形態】
【００１６】
発明を実施するための第一の形態について、図面を参照して詳細に説明する。
【００１７】
図１は、第一の実施形態に係る、情報処理装置１の構成の一例を示すブロック図である。
【００１８】
情報処理装置１は、パイプライン処理実行部１０、及び、パイプライン制御部２０を包含する。
【００１９】
図２は、パイプライン処理実行部１０の構成の一例を示す図である。
【００２０】
パイプライン処理実行部１０は、本実施形態の制御の対象である演算パイプラインの構成を含む。
【００２１】
演算パイプ制御部１６０は、ベクトル命令の発行が確定すると、ベクトルパイプ制御信号を送出する。
【００２２】
演算レジスタＶ０〜Ｖ３：１００〜１０３は、演算パイプ制御部１６０からの指示（レジスタ読み出し指示、及び、レジスタ格納指示）に従って、命令で指定されたＶＬ（Ｖｅｃｔｏｒ  Ｌｅｎｇｔｈ：命令毎に指定可能なベクトル長）分を連続して、データの読み出し、及び、書き込み動作を行う。また、演算レジスタＶ０〜Ｖ３：１００〜１０３は、連続したデータ読み出しに対応していて、本例では最大４要素を、４サイクルに渡って連続して読み出し、または、書き込むことができる。なお、連続する要素数は、命令毎に指定可能である。
【００２３】
オペランドセレクタ１１０、１１１、１１２、１１３は、演算器の入力毎に存在し、演算パイプ制御部１６０からの指示（オペランドセレクタ指示）に従って、演算パイプ制御部１６０から指示のあった演算レジスタ出力を選択する。
【００２４】
積和演算器１２０は、演算パイプ制御部１６０からの指示（演算実行指示）に従って、ＶＬ分の演算を実行する。積和演算器１２０は、信号線９００を介してクロスバ（Ｘ−ｂａｒ）１０６に演算結果を出力する。
【００２５】
論理演算器１３０は、演算パイプ制御部１６０からの指示（演算実行指示）に従って、ＶＬ分の演算を実行する。論理演算器１３０は、信号線９０１を介してクロスバ１０６に演算結果を出力する。
【００２６】
クロスバ１０６は、演算パイプ制御部１６０の指示（Ｘ−ｂａｒセレクト指示）に従って、演算レジスタ１００、１０１、１０２、１０３に書き込むデータを選択してＶＬ分連続して出力する。
【００２７】
ストアデータセレクタ１０５は、演算パイプ制御部１６０からの指示（Ｓｔｏｒｅ  Ｓｅｌｅｃｔ  指示）に従って、演算レジスタ１００、１０１、１０２、１０３の読み出しデータを選択し、メインメモリへのストアパスにデータを出力する。
【００２８】
ロードバッファ１５０、１５１は、演算レジスタ１００〜１０３を効率的に利用するため、ロードバッファ読み出し指示に基づくロード命令でメモリから読み出したデータがＦｉｌｌ（充填）するまで格納しておき、演算レジスタ１００〜１０３への転送実行の指示に従い、指定された要素数分を連続して転送する。
【００２９】
図３は、パイプライン制御部２０の構成の一例を示す図である。
【００３０】
命令緩衝バッファ２０１は、命令をバッファして命令発行待機バッファ２１０に空きがあれば命令を送出する。
【００３１】
命令間依存関係チェック部２０２は、命令発行待機バッファ２１０に格納する予定の命令と、命令発行待機バッファ２１０およびスケジューリング済命令バッファ２４０に格納されている先行命令についての依存関係を確認する。そして、命令間依存関係チェック部２０２は、命令発行待機バッファ２１０に格納する予定の命令と命令発行待機バッファ２１０に格納されている命令との間に依存関係がある場合は、命令間依存関係フラグ２１２に依存関係ありを示す値をセットする。また、命令間依存関係チェック部２０２は、命令発行待機バッファ２１０に格納する予定の命令とスケジューリング済命令バッファ２４０との間に、依存関係およびパス競合関係がある場合、それぞれの関係が解消するタイミングまでの時間（第１の時間と第２の時間）を算出（計数）する。さらに、命令間依存関係チェック部２０２は、命令間依存関係カウンタ２１３およびパス競合カウンタ２１４に、算出された第１の時間と第２の時間に対応する値（カウンタ値とも言う）をセットする。
【００３２】
ロードバッファＦｉｌｌ判定部２０３は、ロードバッファ２０４にロード命令で指定された数の要素がメモリからロードされたことを確認して、ロード命令を実行するための要素が全て揃った場合にＦｉｌｌｅｄフラグ２１５に所定のフラグ値をセットする機能を持つ。
【００３３】
命令発行待機バッファ２１０は、命令格納バッファ２１１、命令間依存関係フラグ２１２、命令間依存関係カウンタ２１３、パス競合カウンタ２１４、及び、Ｆｉｌｌｅｄフラグ２１５から構成される。図３では、図の下側にある各バッファ及びカウンタに格納される命令及びカウンタ値が、最も古い命令及びカウンタ値となるよう順次格納される。なお、命令間依存関係フラグ２１２は、一番下に位置するバッファを用意していないが、これは、この位置の命令格納バッファ２１１に格納される命令は最も古い命令で、最優先であることが決定されているためである。
【００３４】
命令格納バッファ２１１は、命令発行待機バッファ２１０内で命令本体を格納するバッファである。
【００３５】
命令間依存関係フラグ２１２は、命令格納バッファ２１１に格納されている命令間の依存関係を示し、この格納値が「１」である場合は、２つの命令に依存関係があって命令スケジュール順番を守る必要性を示し、格納値が「０」である場合は、依存関係が無いため、状況によっては先行して受けた命令を追い越してスケジューリングされる。なお、命令格納バッファ２１１のより下側のバッファに格納されている古い命令は、それよりも上側に格納されている新しい命令の制約を受けずにスケジューリングされるべきものである。すなわち、古い命令の新しい命令に対する依存関係は、保持不要である。言い換えれば、図３に示すように、新しい命令ほどより多くの古い命令に対する依存関係をもっており、その結果、命令間依存関係フラグ２１２のビット幅が命令毎に異なっている。
【００３６】
命令間依存関係カウンタ２１３は、発行がスケジューリングされた命令に対する依存関係が解消するタイミングまでの第１の時間に対応する値を保持する。その値は、命令間依存関係チェック部２０２によって算出され格納された値である。命令格納バッファ２１１に命令を格納するタイミングまたは先行命令の発行が確定したタイミングで、命令間依存関係カウンタ２１３は、Ｗ→Ｒ、Ｗ→Ｗ、Ｒ→Ｗの関係全てを満たす最も小さい値を選択してセットする（ただし、Ｗ：書き込み、Ｒ：読み出しを表すものとする）。最も小さい値を選択する方法としては、値の大小を比較する回路を使う方法、値をビット並びに展開して論理積を取る方法、または、それらを混在させる方法のいずれを選択しても良い。命令間依存関係カウンタ２１３は、１サイクル毎に１ずつ減算し、０となったら減算を止める。
【００３７】
パス競合カウンタ２１４は、発行がスケジューリングされた命令に対し、演算器やストアパス等のデータ転送経路による競合を起さないタイミングまでの第２の時間に対応する値を保持する。その値は、命令間依存関係チェック部２０２によって算出され格納された値である。また、パス競合カウンタ２１４は、命令格納バッファ２１１に命令を格納するタイミング、または先行命令の発行が確定したタイミングで、値をセットする。演算パイプラインの構成によっては、データ転送経路の複数のポイントで競合が発生する場合があり、その場合、パス競合カウンタ２１４は、競合を回避する最も小さい値を選択してセットする。最も小さい値を選択する方法として、パス競合カウンタ２１４は、値の大小を比較する回路を使う方法、値をビット並びに展開して論理積を取る方法、または、それらを混在させる方法を用いても良い。パス競合カウンタ２１４は、１サイクル毎に１ずつ減算し、０となったら減算を止める。なお、高速クロックで動作させる装置において、競合確認ポイントが多く、大小比較する回路遅延が問題となるような場合は、パス競合カウンタ２１４を複数設ける構成も想定される。
【００３８】
Ｆｉｌｌｅｄフラグ２１５は、ロード命令を実行するための要素が全て揃ったことを示すフラグである。ロードに関係無い演算命令やストア命令などが命令格納バッファ２１１にセットされる場合、Ｆｉｌｌｅｄフラグ２１５は、「１」をセットする。
【００３９】
命令実行スケジューリング部２２０は、命令格納バッファ２１１に保持された命令の中からスケジューリング可能な命令を選択し、命令間の整合性を保った上で最も早く実行可能なタイミングを算出する。
【００４０】
スケジューリング可能な命令となる条件は、例えば、（１）命令間依存関係フラグ２１２が全て０、（２）命令間依存関係カウンタ２１３の値が７以下、（３）パス競合カウンタ２１４の値が７以下、（４）Ｆｉｌｌｅｄフラグ２１５の値が１、である。
【００４１】
なお、（２）、（３）の値は、本実施形態の値であり、別の閾値を採ることも可能である。命令実行スケジューリング部２２０は、これらの条件を全て満たした命令の中で最も古い命令を選択し、その命令に対応する命令間依存関係カウンタ２１３、及び、パス競合カウンタ２１４のカウンタ値を、命令発行待機バッファ２１０から読み出す。そして、命令実行スケジューリング部２２０は、読み出したカウンタ値を図５の表に基づいてデコード値に変換する。さらに、命令実行スケジューリング部２２０は、選択された命令とその命令の直前に発行が確定した命令（直前の命令）との依存関係を加味して、最速となる実行待ちタイミングを決定する。なお、直前の命令との依存関係やパス競合関係でスケジューリング不可となった場合（デコード後のｂｉｔパタン中に「１」が存在しない場合)、命令実行スケジューリング部２２０は、スケジューリングを中止し、有効な命令を出力しない。
【００４２】
競合調停部２２１は、命令間依存関係カウンタ２１３のカウンタ値、パス競合カウンタ２１４のカウンタ値、及び、直前命令影響反映値（後出）を比較して、最短となる命令の実行待ち時間を算出する。競合調停部２２１は、例えば、最若番優先の固定順位アービタ回路である。
【００４３】
スケジューリング確定命令影響反映部２３１は、スケジューリング確定した命令が直後に選択された命令に与える影響を計算して、その影響が無くなる最も早いタイミングを決定し、デコードを行い命令実行スケジューリング部２２０に送出する（直前命令影響反映値）。
【００４４】
カウンタセット値生成部２３２は、スケジューリング確定した命令が使用するリソースと命令発行待機バッファ２１０に存在する命令の使用リソースが一致して影響を受ける場合に、その影響が無くなる最も早いタイミングまでの時間を算出して、その時間に対応する値を命令発行待機バッファ２１０のカウンタ（命令間依存関係カウンタ２１３）にセットする。例えば、Ｗ→Ｒの関係とＲ→Ｗの関係の両方が存在するような場合には、カウンタセット値生成部２３２は、両方の影響が無くなる最も早いタイミングを算出する。また、パス競合カウンタ２１４においても、複数の経路で影響がある場合、カウンタセット値生成部２３２は、全ての経路で影響が無くなる最も早いタイミングまでの時間を算出して、命令発行待機バッファ２１０のカウンタ（パス競合カウンタ２１４）にセットする。
【００４５】
スケジューリング済命令バッファ２４０は、命令実行スケジューリング部２２０にてスケジューリングが確定した命令を、後続命令に対して影響が無くなるまで保持する機能を持つ。スケジューリング済命令格納レジスタ２４１は、スケジューリングが確定した命令を格納する。カウンタ（エントリ期間カウンタ）２４２は、スケジューリング済命令格納レジスタ２４１に対応するカウンタで、このカウンタに後続命令に対する影響が無くなるタイミングまでの時間に対応する値がセットされる。カウンタ２４２は、サイクル毎に減算して、後続命令に影響を与えない値（本例では「１」）となったらリセットする。
【００４６】
実行待機バッファ２５０は、命令実行スケジューリング部２２０にてスケジューリングが確定した命令を格納し、指示された時間経過後に命令を実行する指示を出す。実行待機命令格納レジスタ２５１は、実行を待機する命令を格納する。実行待機命令カウンタ２５２は、命令を実行するタイミングを格納し、所定の値、例えばカウンタの値が「０」になったら、対応する命令の命令実行指示を演算パイプ制御部１６０に出力する。なお、複数命令のカウンタ値が同時に「０」になった場合は、実行待機命令カウンタ２５２は、同時に実行を開始するものとする。
【００４７】
ここで、ストアデータセレクタ１０５、クロスバ１０６、オペランドセレクタ１１０、１１１、１１２、１１３、積和演算器１２０、論理演算器１３０、演算パイプ制御部１６０、命令間依存関係チェック部２０２、ロードバッファＦｉｌｌ判定部２０３、競合調停部２２１、スケジューリング確定命令影響反映部２３１、及び、カウンタセット値生成部２３２は、例えば、論理回路等のハードウェア回路で構成される。
【００４８】
また、演算レジスタ１００、１０１、１０２、１０３、ロードバッファ１５０、１５１、命令緩衝バッファ２０１、命令発行待機バッファ２１０、命令格納バッファ２１１、命令間依存関係フラグ２１２、命令間依存関係カウンタ２１３、パス競合カウンタ２１４、Ｆｉｌｌｅｄフラグ２１５、実行確定命令レジスタ２２２、実行待ち時間２２３、スケジューリング済命令バッファ２４０、スケジューリング済命令格納レジスタ２４１、カウンタ２４２、実行待機バッファ２５０、実行待機命令格納レジスタ２５１、実行待機命令カウンタ２５２は、例えば、半導体メモリ等の記憶装置で構成される。  また、情報処理装置１は、コンピュータ装置によって実現されてもよい。この場合、ストアデータセレクタ１０５、クロスバ１０６、オペランドセレクタ１１０、１１１、１１２、１１３、積和演算器１２０、論理演算器１３０、演算パイプ制御部１６０、命令間依存関係チェック部２０２、ロードバッファＦｉｌｌ判定部２０３、競合調停部２２１、スケジューリング確定命令影響反映部２３１、及び、カウンタセット値生成部２３２は、コンピュータである情報処理装置１のプロセッサが、図示されないメモリ上のプログラムを実行することで実現されてもよい。プログラムは、不揮発性メモリに格納されてもよい。
【００４９】
図４は、情報処理装置１の動作を示すタイムチャートである。
【００５０】
また、図６〜１０は、図４の動作の詳細をクロック毎に示した図である。
【００５１】
なお、ここでは、下記の命令列が実行されるケースを想定している。いずれも、ベクトル長＝４（ＶＬ＝４）の命令であるとする。命令１）乃至命令５）は、次のとおりである。
１）  ＡＤＤ  Ｖ０  ←  Ｖ０  ＋  Ｖ３
２）  ＡＮＤ  Ｖ３  ←  Ｖ０  ＆  Ｖ１
３）  ＬＤ  Ｖ０  ←  Ｍ
４）  ＬＤ  Ｖ１  ←  Ｍ
５）  ＡＮＤ  Ｖ２  ←  Ｖ０  ＆  Ｖ１
ここで、
ＡＤＤ、＋：加算
ＡＮＤ、＆：論理積
ＬＤ、Ｍ：ロード
Ｖ０〜Ｖ３：パイプライン処理実行部１０の演算レジスタ１００、１０１、１０２、１０３を示す。また矢印「←」は、図４中の命令列の枠内では「＜−」で示されている。
【００５２】
なお、命令列においては、矢印を挟んだ右辺と左辺が対になり、各命令の動作を記述している。例えば、命令１）では、「＋」と「ＡＤＤ」、同様に、命令３）及び命令４）では、「Ｍ（「メモリアクセス」等を意味する）」と「ＬＤ」である。
【００５３】
図５は、カウンタ値のデコードに用いるデコードテーブル（カウンタ値デコード対応表）を示す。
【００５４】
デコードテーブルは、左側のカウンタ値に対応するデコード値を示す。そして、デコード値に「１」がある箇所が発行スケジューリング可能であることを示している。また、本例では、カウンタ値「８」以上の場合はスケジューリング不可、等とする。なお、図５のデコードテーブルは、以下の説明の中で用いる。
【００５５】
以下、図４のタイムチャート、及び、図６〜１０を用いて、時間の経過に沿ってクロックのカウント順に、情報処理装置１の動作を説明する。
【００５６】
Ｃｌｏｃｋ１：
命令緩衝バッファ２０１に、命令１）が格納される。この時、命令発行待機バッファ２１０（命令格納バッファ２１１）には命令が格納されていないので、命令間依存関係チェック部２０２の出力（以下、単に出力と記載）は、先行命令との依存関係が全く無いことを示す「００００００」を出力する。
【００５７】
なお、出力は、命令緩衝バッファ２０１に格納された命令と、命令格納バッファ２１１の各命令との依存関係の有無を１／０で示すもので、例えば、左端から順に、２１１＃０、２１１＃１、２１１＃２（以下、省略）との依存関係を、順次、示すものとする。
【００５８】
Ｃｌｏｃｋ２：
命令１）が命令格納バッファ２１１＃０に格納され、命令緩衝バッファ２０１には、命令２）が入る。命令１）と命令２）の間にはＷ→Ｒの関係があるので、出力２０２は、「１０００００」となる。
【００５９】
命令格納バッファ２１１に命令が格納される際、ロード命令以外は条件が揃ったとしてＦｉｌｌｅｄフラグ２１５には「１」がセットされる。
【００６０】
命令格納バッファ２１１＃０に格納された命令１）は、最優先でスケジュール可能として選択される。そして、対応する、命令間依存関係カウンタ２１３、及び、パス競合カウンタ２１４のカウンタ値から、どちらも「０」の値が読み出されてデコードされる。この時、図５のデコードテーブルに従い、「１１１１１１１１」を得る。
【００６１】
直前にスケジュールが確定した命令は存在しないため、命令実行スケジューリング部２２０は、スケジューリング確定命令影響反映部２３１から、影響が無い意味の「１１１１１１１１」（直前命令影響反映値）を受け取り、全て論理積した「１１１１１１１１」をｌｅａｄｉｎｇ０回路（リーディング０回路）に供給し待ち時間を算出し、「１０００００００」（待ち時間）を生成する。「１０００００００」は、一番左のｂｉｔが「１」となっており、０サイクル後に発行可能であることを示している。
【００６２】
Ｃｌｏｃｋ３：
命令１）が実行確定となり、待ち時間が「０」であったため、減算を行わず待ち時間「０」となり、実行確定命令レジスタ２２２に格納される。命令２）が命令格納バッファ２１１＃１に格納され、命令緩衝バッファ２０１には命令３）が入る。命令３）と命令１）の間には、Ｗ→Ｗの関係とＲ→Ｗの関係があり、命令３）と命令２）の間には、Ｒ→Ｗの関係があるため、出力は、どちらとも依存関係があることを示す「１１００００」となる。
【００６３】
命令２）もロード命令では無いため、Ｆｉｌｌｅｄフラグ２１５には、「１」がセットされる。
【００６４】
命令実行スケジューリング部２２０は、命令１）の実行が確定しているため、命令１）を除いた命令格納バッファ２１１から最優先の命令２）を選択して、スケジューリングを行う。
【００６５】
カウンタ値は、命令間依存関係カウンタ２１３、及び、パス競合カウンタ２１４どちらも「０」なので、図５に従い、どちらも「１１１１１１１１」が出力される。
【００６６】
次に、直前に命令１）の実行が確定しているので、スケジューリング確定命令影響反映部２３１が、命令１）が直後に選択された命令２）に与える影響を計算する。命令１）と命令２）は、使う演算器が異なるので、関係するのは、Ｖ０レジスタについてのＷ→Ｒの関係と、Ｖ３レジスタのＲ→Ｗの関係の２つである。Ｗ→Ｒの関係の場合、待ち時間＋先行命令ＴＡＴの式で計算できるので、０＋５＝５となる。また、Ｒ→Ｗの関係の場合、待ち時間−後続命令ＴＡＴ＋１の式で計算できるので、０−３＋１＝−２となるが、０以下は０とする。２つの関係から得られた「５」と「０」を考慮すると、データ一貫性を満たして最も早い実行時間である「５」が選出される（すなわち、「５」がある以上、他が「０」であっても、「５」のカウントが完了するのを待たなければならない。）。スケジューリング確定命令影響反映部２３１は、この「５」を図５に従ってデコードして「０００００１１１」を得る。そして、命令実行スケジューリング部２２０（競合調停部２２１）は、「１１１１１１１１」、「１１１１１１１１」、「０００００１１１」の３つの値を論理積して得られた「０００００１１１」をｌｅａｄｉｎｇ０回路に入力して「０００００１００」を得る。これは、実行待ち時間が５で、５サイクル後に発行可能であることを意味している。
【００６７】
Ｃｌｏｃｋ４：
Ｃｌｏｃｋ３で実行待ち時間を算出した命令２）が実行確定命令レジスタ２２２に格納され、実行待ち時間として５−１＝４を意味する「００００１０００」が格納される。
【００６８】
また、Ｃｌｏｃｋ３で実行確定命令レジスタ２２２に格納されていた命令１）は、実行待機バッファ２５０（詳しくは、実行待機命令格納レジスタ２５１であるが、以下、このように記載する）に移動する。実行待ち時間についてもエンコード後「０」が実行待機命令カウンタ２５２にセットされる。実行待機命令カウンタ２５２の値が「０」なので、対応する命令１）は、次にＣｌｏｃｋ５で実行開始される。
【００６９】
命令１）は、スケジューリング済命令バッファ２４０（詳しくは、スケジューリング済命令格納レジスタ２４１であるが、以下、このように記載する）にも格納される。この時、対応するカウンタ２４２にも、実行待ち時間＋演算ＴＡＴ（ＡＤＤ）＋ＶＬで計算される０＋５＋４＝９がセットされる。
【００７０】
命令格納バッファ２１１には、命令３）が格納されるが、命令２）に対してＲ→Ｗの依存関係があることから、対応するｂｉｔに「１」をセットするところ、命令２）が実行確定命令レジスタ２２２に格納されたことを受けキャンセルされて、命令間依存関係フラグ２１２には「０」がセットされる。
【００７１】
命令１）が実行確定したのを受け、命令２）に対応する命令間依存関係カウンタ２１３には、０＋５＝５で計算される「５」からサイクル毎の減算を考慮した「４」がセットされる。
【００７２】
命令３）が命令格納バッファ２１０に格納されるが、命令３）はロード命令で、本来メモリからのロードデータ要素が全て揃わないとＦｉｌｌｅｄフラグ２１５には「１」がセットされないが、本動作説明では説明簡略化のため全ロードデータ要素がロードバッファに存在する前提としているため、Ｆｉｌｌｅｄフラグ２１５には「１」がセットされる。
【００７３】
このため、命令３）は、依存関係が無いためスケジューリング可能として選択される。
【００７４】
命令３）は、直前に実行確定命令レジスタ２２２に格納された命令２）とはＶ０レジスタについてＲ→Ｗの依存関係があることから、Ｒ→Ｗ：待ち時間−後続命令ＴＡＴ＋１の計算を行い４−３＋１＝２をデコードして「００１１１１１１」を得る（直前命令影響反映値）。競合調停部２２１は、カウンタ値（命令間依存関係カウンタ２１３の値：「１１１１１１１１」、及び、パス競合カウンタ２１４の値：「１１１１１１１１」）からデコードされた値と論理積を取ってｌｅａｄｉｎｇ０回路に入力し、「００１０００００」を得る。
【００７５】
以降、特徴的な動作について説明する。
【００７６】
Ｃｌｏｃｋ５：
命令１）が実行されて実行待機バッファ２５０から削除されると同時に、命令２）が実行待ち時間「４」としてセットされる。
【００７７】
同時に、命令２）は、スケジューリング済命令バッファ２４０に、実行待ち時間＋演算ＴＡＴ（ＡＮＤの）＋ＶＬ＝４＋３＋４＝１１の値と共にセットされる。
【００７８】
命令３）は、算出された「１」と共に実行確定命令レジスタ２２２に格納される。
【００７９】
命令４）が命令格納バッファ２１０に格納される際、実行が確定している命令２）との依存関係から算出された「１」が命令間依存関係カウンタ２１３にセットされる。
【００８０】
直前実行確定命令２２２の命令３）は、命令４）に対してロードバッファからの転送パスも異なる（パス競合カウンタ２１４のカウンタデコード値：「１１１１１１１１」である）など依存関係等の影響は無いので「１１１１１１１１」（直前命令反映値）が得られ、命令間依存関係カウンタ２１３から読み出した値の「１」を示す「０１１１１１１１」と論理積を取って、ｌｅａｄｉｎｇ０に入力すると「０１００００００」が得られる。命令３）は、実行確定命令レジスタ２２２に減算後の「１」と共に格納される。
【００８１】
Ｃｌｏｃｋ６（格納データ図は省略）：
図４に示すように、命令３）が実行待機バッファ２５０に値「１」と共に格納される。また、命令４）は、確定命令レジスタ２２２に、減算後の「０」と共に格納される。
【００８２】
Ｃｌｏｃｋ７（格納データ図は省略）：
命令３）に対応する実行待機命令カウンタ２５２のカウンタ値が減算されて「０」となる。命令４）は、実行待機バッファ２５０に実行待機命令カウンタ２５２のカウンタ値「０」と共に格納される。命令３）および命令４）は、どちらも実行待機命令カウンタ２５２のカウンタ値が「０」となったので、次のサイクルで同時に実行可能である。
【００８３】
以降の説明は省略するが、このように本実施形態の命令発行制御方式においては、複数の命令を同時に発行するスケジューリングを行うことが可能である。
【００８４】
次に、スケジューリング済命令バッファ２４０が４個のみの構成を想定した場合に、図４と同じ命令列を実行した場合の動作を、図１１を用いて説明する。
【００８５】
図１１は、スケジューリング済命令バッファ２４０が４個のみの構成の場合の情報処理装置１の動作を示すタイムチャートである。
【００８６】
以下、図４の動作と異なる特徴的な箇所を中心に説明する。
【００８７】
Ｃｌｏｃｋ６で、命令格納バッファ２１０から命令５）が読み出される。この時、スケジューリング済命令バッファ２４０は、４個中３個を使用しており、実行確定命令レジスタ２２２に命令４）が格納されているので、合計４個を使うことが確定している。このため、次のＣｌｏｃｋ７で、実行確定命令レジスタ２２２に命令５）は、格納されない。
【００８８】
Ｃｌｏｃｋ８〜Ｃｌｏｃｋ１０までは、スケジューリング済命令バッファ２４０を４個全て使用している状況は変わらない。
【００８９】
Ｃｌｏｃｋ１１において、スケジューリング済命令バッファ２４０に格納されている命令１）に対応するカウンタ２４２が「２」を示す（詳細図は省略）。このカウンタ値が「１」の時、次のサイクルでリセットされることが判っているため、次のサイクルで命令５）が実行確定命令レジスタ２２２に格納される。
【００９０】
Ｃｌｏｃｋ１２において、命令５）が実行確定命令レジスタ２２２に格納される。
【００９１】
Ｃｌｏｃｋ１３において、命令５）が実行待機バッファ２５０に値「０」と共に格納され、次のＣｌｏｃｋ１４で命令の実行が開始される。
【００９２】
このように、情報処理装置１は、バッファ数に制限があった場合にもレジスタ一貫性を保って命令発行することが可能である。
【００９３】
次に、図１２を用いて、前述の命令とは異なる命令列をスケジューリングする動作を説明する。
【００９４】
図１２は、異なる命令列を使用した場合の情報処理装置１の動作を示すタイムチャートである。
【００９５】
ここでは、下記の命令列が実行されるケースを想定している。なお、いずれもベクトル長＝４（ＶＬ＝４）の命令である。命令１）乃至命令４）は、次のとおりである。
１）  ＬＤ  Ｖ１  ←  Ｍ
２）  ＭＰＹ  Ｖ２  ←  Ｖ０  *  Ｖ１
３）  ＬＤ  Ｖ０  ←  Ｍ
４）  ＡＮＤ  Ｖ１  ←  Ｖ０  ＆  Ｖ３
ここで、
ＭＰＹ、＊：乗算
を示す。また矢印「←」は、図１２中の命令列の枠内では「＜−」で示されている。なお、前述の命令列と同じ記号は説明を省略する。
【００９６】
この命令列で特徴的なのは、命令２）で読み出されたレジスタを命令３）でロードデータ書き込みに再利用して、命令４）でＡＮＤ命令に使っている点である。従って、この例のように、命令２）と命令３）の間で、Ｖ０レジスタについてＲ→Ｗの依存関係がある場合にも、命令３）を命令２）の前に実行開始して演算器を効率的に使用できるようスケジューリング可能である。
【００９７】
図１２において、命令２）はＣｌｏｃｋ８で実行開始しているのに対して、命令３）は１サイクル前のＣｌｏｃｋ７で実行開始しているのが上の動作を示している。
【００９８】
上記のように、本実施形態では、発行待機命令毎に、用意したカウンタ２１３および２１４を設ける。これにより、例えば、演算レジスタ数が３２個で発行待機命令バッファ数が１６個の構成の場合に、通常は、少なくともレジスタ一貫性を保つためのビジー管理、リードパス、およびライトパスについてビジーを管理する必要があるため少なくとも３２個*３＝９６個のビジーを管理するカウンタが必要であった。しかし、本実施形態では、１６個*２＝３２個のカウンタで済むので、６４個のカウンタ分のハードウェア量が削減できる。
【００９９】
また、カウンタの値をデコード表に従ってデコードし、論理積後のビット列をｌｅａｄｉｎｇ０回路に入力してデータ一貫性に矛盾無い最短の待ち時間を算出する方法を取ることで、高クロックに対応した高効率な発行制御を行うことが可能である。本実施形態は、
論理積とｌｅａｄｉｎｇ０回路を使用可能なビット列を実現するデコード表が特徴的で、主に、命令実行スケジューリング部２２０、競合調停回路２２１、スケジューリング確定命令影響反映部２３１、カウンタセット値生成部２３２が連携して実現している。
【０１００】
本実施形態に係る情報処理装置１は、以下に記載するような効果を奏する。
【０１０１】
その効果は、演算リソースが多い場合でも比較的少ないハードウェア量で効率的に命令を実行することが可能である。
【０１０２】
その理由は、先行命令に対する発行抑止期間を管理するカウンタを発行待機命令毎に用意する方式とし、命令間の依存関係を時間的に管理する命令間依存関係カウンタと、演算器パイプラインのビジーを管理するパス競合カウンタと、直前に実行確定した命令に対する影響も考慮して待ち時間を算出し、これら３つの値を比較して最速で実行できるタイミングを算出する機構を設ける、からである。
＜第二の実施形態＞
次に、本発明を実施するための最良の第二の形態について図面を参照して詳細に説明する。
【０１０３】
図１３は、第二の実施形態に係る、情報処理装置３０の構成の一例を示すブロック図である。
【０１０４】
情報処理装置３０は、第一の実施形態の情報処理装置１と同じ構成で、ロードバッファ１５０、１５１に格納されるデータの配置が異なる。
【０１０５】
ロードバッファ１５０、１５１にロードデータを格納する際に、性能向上のため、図１３のように、格納するデータ配置を変更する場合がある。図１３のようにロードデータを配置した場合には、ロードバッファ１５０とロードバッファ１５１から交互にデータを読み出す形となる。
【０１０６】
この時、あるタイミングでＬ０−０〜Ｌ０−３のロードがスケジューリングされた状態で、Ｌ１−０〜Ｌ１−３の命令をスケジューリングする際のビット列を「０００１０１０１」というようにデコードすることで、演算レジスタ１００〜１０３（クロスバ１０６）が、交互読み出しにも対応可能である(「１」が立っている箇所が空いているタイミングを示している)。
【０１０７】
ところで、上記は、複数のロードバッファ１５０、１５１にロードデータを格納する際の性能向上であったが、複数の演算器を用いる場合においても、同様に、性能向上を行うことができる。
【０１０８】
例えば、同一機能の演算器が２つ存在し、どちらか空いている方を選ぶ構成の場合には、それぞれの演算器のビット列の論理和を取って表現することで対応可能である。
【０１０９】
例えば、「００１１１１１１」と「００００１１１１」の論理和から、「００１１１１１１」が得られる。これは、早くリソースが空く演算器をスケジューリング可能であることを示す。
【０１１０】
本実施形態に係る情報処理装置３０は、以下に記載するような効果を奏する。
【０１１１】
その効果は、パイプライン処理の性能を向上することができる。
【０１１２】
その理由は、２つのロードバッファから交互にデータを読み出すからである。
＜第三の実施形態＞
図１４は、第三の実施形態に係る、情報処理装置４０の構成の一例を示すブロック図である。
【０１１３】
情報処理装置４０は、パイプライン制御部５０、及び、パイプライン処理実行部６０を備える。
【０１１４】
パイプライン制御部５０は、パイプライン処理実行部６０を制御する。
【０１１５】
パイプライン処理実行部６０は、演算器パイプラインのパイプライン処理を実行する。
【０１１６】
パイプライン制御部５０が、命令発行待機バッファに存在する命令に対して、使用するリソースが一致する、スケジューリング済みの命令の影響が無くなるタイミングまでの第１の時間を算出して命令間依存関係カウンタに第１の時間に対応するカウンタ値を格納し、演算器パイプラインにおけるパス競合が発生しないタイミングまでの第２の時間を算出してパス競合カウンタに第２の時間に対応するカウンタ値を格納する、カウンタセット値生成部５１と、実行確定した命令が、直後に選択された命令に与える影響を示す、直前命令影響反映値を算出する、スケジューリング確定命令影響反映部５２と、命令間依存関係カウンタのカウンタ値、パス競合カウンタのカウンタ値、及び、直前命令影響反映値を比較して、最短となる命令の実行待ち時間を算出する、競合調停部５３と、を包含する。
【０１１７】
本実施形態に係る情報処理装置４０は、以下に記載するような効果を奏する。
【０１１８】
その効果は、演算リソースが多い場合でも比較的少ないハードウェア量で効率的に命令を実行することが可能である。
【０１１９】
その理由は、先行命令に対する発行抑止期間を管理するカウンタを発行待機命令毎に用意する方式とし、命令間の依存関係を時間的に管理する命令間依存関係カウンタと、演算器パイプラインのビジーを管理するパス競合カウンタと、直前に実行確定した命令に対する影響も考慮して待ち時間を算出し、これら３つの値を比較して最速で実行できるタイミングを算出する機構を設ける、からである。
【０１２０】
以上、図面を参照して本発明の実施形態を説明したが、本発明は上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【符号の説明】
【０１２１】
１    情報処理装置
１０    パイプライン処理実行部
１００、１０１、１０２、１０３    演算レジスタ
１０５    ストアデータセレクタ
１０６    クロスバ
１１０、１１１、１１２、１１３    オペランドセレクタ
１２０    積和演算器
１３０    論理演算器
１５０、１５１    ロードバッファ
１６０    演算パイプ制御部
２０    パイプライン制御部
２０１    命令緩衝バッファ
２０２    命令間依存関係チェック部
２０３    ロードバッファＦｉｌｌ判定部
２１０    命令発行待機バッファ
２１１    命令格納バッファ
２１２    命令間依存関係フラグ
２１３    命令間依存関係カウンタ
２１４    パス競合カウンタ
２１５    Ｆｉｌｌｅｄフラグ
２２０    命令実行スケジューリング部
２２１    競合調停部
２２２    実行確定命令レジスタ
２２３    実行待ち時間
２３１    スケジューリング確定命令影響反映部
２３２    カウンタセット値生成部
２４０    スケジューリング済命令バッファ
２４１    スケジューリング済命令格納レジスタ
２４２    カウンタ
２５０    実行待機バッファ
２５１    実行待機命令格納レジスタ
２５２    実行待機命令カウンタ
３０    情報処理装置
４０    情報処理装置
５０    パイプライン制御部
５１    カウンタセット値生成部
５２    スケジューリング確定命令影響反映部
５３    競合調停部
６０    パイプライン処理実行部
【図１】
2016091362.tif 000003
【図２】
2016091362.tif 000004
【図３】
2016091362.tif 000005
【図４】
2016091362.tif 000006
【図５】
2016091362.tif 000007
【図６】
2016091362.tif 000008
【図７】
2016091362.tif 000009
【図８】
2016091362.tif 000010
【図９】
2016091362.tif 000011
【図１０】
2016091362.tif 000012
【図１１】
2016091362.tif 000013
【図１２】
2016091362.tif 000014
【図１３】
2016091362.tif 000015
【図１４】
2016091362.tif 000016