(57)【要約】      （修正有）【課題】非数値計算処理を高速処理可能なプロセッサを提供する。【解決手段】プロセッサ１は、複数のプロセッシングエレメント１０−１〜１０−Ｎと実行管理部４０とを備える。各プロセッシングエレメントそれぞれは、割り当てられた単位命令列を一時記憶する一時記憶部１１を有し、それぞれの一時記憶部に記憶された単位命令列に含まれる命令を実行可能である。実行管理部は、アセンブリ言語以下のレベルの命令列であるプログラムを、途中に分岐命令を含まない命令列であって、分岐先の先頭命令を始端とし、分岐命令を終端とする命令列である単位命令列に分割し、分割した当該単位命令列を複数のプロセッシングエレメントのそれぞれに逐次割り当て、割り当てた単位命令列を複数のプロセッシングエレメントに並列実行させる。【選択図】図１
2017134443.tif 000002
【特許請求の範囲】
【請求項１】
それぞれが、割り当てられた単位命令列を一時記憶する一時記憶部を有し、それぞれの前記一時記憶部に記憶された前記単位命令列に含まれる命令を実行可能な複数のプロセッシングエレメントと、
アセンブリ言語以下のレベルの命令列であるプログラムを、途中に分岐命令を含まない命令列であって、分岐先の先頭命令を始端とし、分岐命令を終端とする命令列である前記単位命令列に分割し、分割した当該単位命令列を前記複数のプロセッシングエレメントのそれぞれに逐次割り当て、割り当てた前記単位命令列を前記複数のプロセッシングエレメントに並列実行させる実行管理部と
を備えることを特徴とするプロセッサ。
【請求項２】
前記実行管理部は、
分割した前記単位命令列が前記複数のプロセッシングエレメントのいずれの前記一時記憶部にも記憶されていない場合に、当該単位命令列を前記複数のプロセッシングエレメントのいずれかに割り当て、
分割した前記単位命令列が前記複数のプロセッシングエレメントのいずれかの前記一時記憶部に既に記憶されている場合に、当該プロセッシングエレメントに、当該一時記憶部に既に記憶されている前記単位命令列を並列実行させる
ことを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記プログラムにおける前記単位命令列の先頭命令の位置を示す先頭位置情報と、当該単位命令列が有効であるか否かを示す有効情報と、次に実行する前記プロセッシングエレメントを示す次実行情報とを対応付けた管理情報を複数有する管理テーブルを記憶する管理テーブル記憶部を備え、
前記実行管理部は、
前記プログラムに分岐命令が検出された際に、前記管理テーブル記憶部が記憶する前記管理テーブルに基づいて、次に実行する前記単位命令列が前記複数のプロセッシングエレメントのいずれかの前記一時記憶部に既に記憶されており、且つ有効な状態であるか否かを判定する
ことを特徴とする請求項２に記載のプロセッサ。
【請求項４】
前記実行管理部は、
前記プログラムに分岐命令が検出された際に、前記管理テーブル記憶部が記憶する前記管理テーブルから、前記次実行情報に基づいて当該分岐命令の次に実行する前記単位命令列に対応する前記先頭位置情報及び前記有効情報を取得し、
取得した前記先頭位置情報の示す位置と、次に実行する前記プログラムの実行位置とが一致し、且つ、取得した前記有効情報が有効を示す場合に、前記次実行情報に一致する前記プロセッシングエレメントが、前記単位命令列を前記一時記憶部に記憶しており、且つ、有効な状態であると判定する
ことを特徴とする請求項３に記載のプロセッサ。
【請求項５】
前記実行管理部は、
取得した前記先頭位置情報の示す位置と、次に実行する前記プログラムの実行位置とが一致しない、又は取得した前記有効情報が無効を示す場合に、前記複数のプロセッシングエレメントの１つに次に実行する前記単位命令列を割り当てるとともに、割り当てた前記単位命令列に対応させて、前記管理テーブルを更新する
ことを特徴とする請求項４に記載のプロセッサ。
【請求項６】
前記実行管理部は、
前記複数のプロセッシングエレメントの１つに次に実行する前記単位命令列を割り当てる場合に、前記管理テーブルの当該単位命令列に対応する前記先頭位置情報を記憶させるとともに、前記有効情報を、無効を示す値に更新し、
前記プロセッシングエレメントが、当該単位命令列の実行を完了した場合に、当該単位命令列に対応する前記有効情報を、有効を示す値に更新する
ことを特徴とする請求項５に記載のプロセッサ。
【請求項７】
前記プロセッシングエレメントは、パイプライン処理により前記命令を実行する
ことを特徴とする請求項１から請求項６のいずれか一項に記載のプロセッサ。
【請求項８】
前記複数のプロセッシングエレメントのそれぞれは、前記命令の実行に利用されるレジスタを有し、
さらに、前記複数のプロセッシングエレメントの間で、前記レジスタの書き込み後の読み出しによるデータ依存であるＲＡＷハザードが発生した場合に、最も近い過去に当該レジスタに書き込みを実行している前記プロセッシングエレメントによる前記単位命令列の当該レジスタへの書き込みが完了するまで、当該レジスタの読み出しを実行する前記プロセッシングエレメントの命令実行を保留させるレジスタ管理部を備える
ことを特徴とする請求項１から請求項７のいずれか一項に記載のプロセッサ。
【請求項９】
前記プロセッシングエレメントを識別するＰＥ識別情報と、前記単位命令列の実行において、前記レジスタが更新されたことを示す更新情報と、前記単位命令列における前記レジスタの最後の書き込みが完了したことを示す完了情報と、前記レジスタの書き込みが実行されたことを示す実行情報とを対応付けた更新履歴情報を前記プロセッシングエレメントの個数分有する更新履歴テーブルを記憶する更新履歴記憶部を備え、
前記レジスタ管理部は、
前記更新履歴記憶部が記憶する更新履歴テーブルに基づいて、前記ＲＡＷハザードが発生したか否かを判定するとともに、前記ＲＡＷハザードが発生した場合に、前記更新履歴テーブルに含まれる、最も近い過去に前記レジスタに書き込みを実行している前記プロセッシングエレメントに対応する完了情報に基づいて、前記ＲＡＷハザードの発生した前記プロセッシングエレメントの命令実行を保留させる
ことを特徴とする請求項８のいずれか一項に記載のプロセッサ。
【請求項１０】
前記レジスタ管理部は、
前記実行情報に基づいて、前記ＲＡＷハザードが発生したか否かを判定し、前記更新情報に基づいて、最も近い過去に前記レジスタに書き込みを実行している前記プロセッシングエレメントを選択する
ことを特徴とする請求項９に記載のプロセッサ。
【請求項１１】
前記複数のプロセッシングエレメントのそれぞれは、前記レジスタを複数備え、
前記更新履歴記憶部は、前記複数のレジスタのそれぞれに対応する前記更新履歴テーブルを記憶する
ことを特徴とする請求項９又は請求項１０に記載のプロセッサ。
【請求項１２】
前記単位命令列に含まれる各命令に対応するローカル位置情報と、外部記憶部にアクセスした履歴を示すアクセス情報とを対応付けたストアバッファテーブルを、前記複数のプロセッシングエレメントの個数分記憶するストアバッファ記憶部と、
前記プロセッシングエレメントから前記外部記憶部にアクセス要求があった場合に、前記ストアバッファ記憶部が記憶する当該プロセッシングエレメントに対応する前記ストアバッファテーブルに基づいて、前記外部記憶部とのアクセスを制御するストアバッファ制御部と
を備えることを特徴とする請求項１から請求項１１のいずれか一項に記載のプロセッサ。
【請求項１３】
前記アクセス情報には、アクセスの種別を示す種別情報と、前記外部記憶部においてアクセスする記憶位置情報及びアクセスしたデータとが対応付けられており、
前記ストアバッファ制御部は、
前記外部記憶部からデータを読み出す前記アクセス要求に対して、前記ストアバッファテーブルに当該アクセス要求に対応する前記データが存在する場合に、当該データを前記プロセッシングエレメントに出力し、
前記ストアバッファテーブルに当該アクセス要求に対応する前記データが存在しない場合に、前記外部記憶部から読み出した前記データを前記プロセッシングエレメントに出力する
ことを特徴とする請求項１２に記載のプロセッサ。
【請求項１４】
前記ストアバッファ制御部は、
前記外部記憶部にデータを書き込む前記アクセス要求に対して、前記プロセッシングエレメントに対応する前記ストアバッファテーブルに、前記ローカル位置情報と、当該アクセス情報とを対応付けて記憶させるとともに、前記外部記憶部に当該データを記憶させる
ことを特徴とする請求項１２又は請求項１３に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサに関する。
【背景技術】
【０００２】
近年、プログラムを命令レベルで並列処理してプロセッサの高速処理を実現する技術が知られている（例えば、非特許文献１を参照）。このような技術を使用した従来のプロセッサでは、より多くの命令を並列処理するために、例えば、コンパイラによりプログラムを最適化する静的最適化手法や、分岐予測及び投機的実行を行うなどの動的手法が行われている。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】G. S. Sohi, S. Breach, and T. N. Vijaykumar , Multiscalar Processors, 22th International Symposium on Computer Architecture (ISCA-22), 1995
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上述した従来のプロセッサでは、例えば、プロセッサの一般的な応用である非数値計算処理に対して充分に高速処理が得られない場合があり、非数値計算処理に対して高速処理が可能なプロセッサが求められている。
【０００５】
本発明は、上記問題を解決すべくなされたもので、その目的は、非数値計算処理を高速処理することができるプロセッサを提供することにある。
【課題を解決するための手段】
【０００６】
上記問題を解決するために、本発明の一態様は、それぞれが、割り当てられた単位命令列を一時記憶する一時記憶部を有し、それぞれの前記一時記憶部に記憶された前記単位命令列に含まれる命令を実行可能な複数のプロセッシングエレメントと、アセンブリ言語以下のレベルの命令列であるプログラムを、途中に分岐命令を含まない命令列であって、分岐先の先頭命令を始端とし、分岐命令を終端とする命令列である前記単位命令列に分割し、分割した当該単位命令列を前記複数のプロセッシングエレメントのそれぞれに逐次割り当て、割り当てた前記単位命令列を前記複数のプロセッシングエレメントに並列実行させる実行管理部とを備えることを特徴とするプロセッサである。
【０００７】
また、本発明の一態様は、上記のプロセッサにおいて、前記実行管理部は、分割した前記単位命令列が前記複数のプロセッシングエレメントのいずれの前記一時記憶部にも記憶されていない場合に、当該単位命令列を前記複数のプロセッシングエレメントのいずれかに割り当て、分割した前記単位命令列が前記複数のプロセッシングエレメントのいずれかの前記一時記憶部に既に記憶されている場合に、当該プロセッシングエレメントに、当該一時記憶部に既に記憶されている前記単位命令列を並列実行させることを特徴とする。
【０００８】
また、本発明の一態様は、上記のプロセッサにおいて、前記プログラムにおける前記単位命令列の先頭命令の位置を示す先頭位置情報と、当該単位命令列が有効であるか否かを示す有効情報と、次に実行する前記プロセッシングエレメントを示す次実行情報とを対応付けた管理情報を複数有する管理テーブルを記憶する管理テーブル記憶部を備え、前記実行管理部は、前記プログラムに分岐命令が検出された際に、前記管理テーブル記憶部が記憶する前記管理テーブルに基づいて、次に実行する前記単位命令列が前記複数のプロセッシングエレメントのいずれかの前記一時記憶部に既に記憶されており、且つ有効な状態であるか否かを判定することを特徴とする。
【０００９】
また、本発明の一態様は、上記のプロセッサにおいて、前記実行管理部は、前記プログラムに分岐命令が検出された際に、前記管理テーブル記憶部が記憶する前記管理テーブルから、前記次実行情報に基づいて当該分岐命令の次に実行する前記単位命令列に対応する前記先頭位置情報及び前記有効情報を取得し、取得した前記先頭位置情報の示す位置と、次に実行する前記プログラムの実行位置とが一致し、且つ、取得した前記有効情報が有効を示す場合に、前記次実行情報に一致する前記プロセッシングエレメントが、前記単位命令列を前記一時記憶部に記憶しており、且つ、有効な状態であると判定することを特徴とする。
【００１０】
また、本発明の一態様は、上記のプロセッサにおいて、前記実行管理部は、取得した前記先頭位置情報の示す位置と、次に実行する前記プログラムの実行位置とが一致しない、又は取得した前記有効情報が無効を示す場合に、前記複数のプロセッシングエレメントの１つに次に実行する前記単位命令列を割り当てるとともに、割り当てた前記単位命令列に対応させて、前記管理テーブルを更新することを特徴とする。
【００１１】
また、本発明の一態様は、上記のプロセッサにおいて、前記実行管理部は、前記複数のプロセッシングエレメントの１つに次に実行する前記単位命令列を割り当てる場合に、前記管理テーブルの当該単位命令列に対応する前記先頭位置情報を記憶させるとともに、前記有効情報を、無効を示す値に更新し、前記プロセッシングエレメントが、当該単位命令列の実行を完了した場合に、当該単位命令列に対応する前記有効情報を、有効を示す値に更新することを特徴とする。
【００１２】
また、本発明の一態様は、上記のプロセッサにおいて、前記プロセッシングエレメントは、パイプライン処理により前記命令を実行することを特徴とする。
【００１３】
また、本発明の一態様は、上記のプロセッサにおいて、前記複数のプロセッシングエレメントのそれぞれは、前記命令の実行に利用されるレジスタを有し、さらに、前記複数のプロセッシングエレメントの間で、前記レジスタの書き込み後の読み出しによるデータ依存であるＲＡＷハザードが発生した場合に、最も近い過去に当該レジスタに書き込みを実行している前記プロセッシングエレメントによる前記単位命令列の当該レジスタへの書き込みが完了するまで、当該レジスタの読み出しを実行する前記プロセッシングエレメントの命令実行を保留させるレジスタ管理部を備えることを特徴とする。
【００１４】
また、本発明の一態様は、上記のプロセッサにおいて、前記プロセッシングエレメントを識別するＰＥ識別情報と、前記単位命令列の実行において、前記レジスタが更新されたことを示す更新情報と、前記単位命令列における前記レジスタの最後の書き込みが完了したことを示す完了情報と、前記レジスタの書き込みが実行されたことを示す実行情報とを対応付けた更新履歴情報を前記プロセッシングエレメントの個数分有する更新履歴テーブルを記憶する更新履歴記憶部を備え、前記レジスタ管理部は、前記更新履歴記憶部が記憶する更新履歴テーブルに基づいて、前記ＲＡＷハザードが発生したか否かを判定するとともに、前記ＲＡＷハザードが発生した場合に、前記更新履歴テーブルに含まれる、最も近い過去に前記レジスタに書き込みを実行している前記プロセッシングエレメントに対応する完了情報に基づいて、前記ＲＡＷハザードの発生した前記プロセッシングエレメントの命令実行を保留させることを特徴とする。
【００１５】
また、本発明の一態様は、上記のプロセッサにおいて、前記レジスタ管理部は、前記実行情報に基づいて、前記ＲＡＷハザードが発生したか否かを判定し、前記更新情報に基づいて、最も近い過去に前記レジスタに書き込みを実行している前記プロセッシングエレメントを選択することを特徴とする。
【００１６】
また、本発明の一態様は、上記のプロセッサにおいて、前記複数のプロセッシングエレメントのそれぞれは、前記レジスタを複数備え、前記更新履歴記憶部は、前記複数のレジスタのそれぞれに対応する前記更新履歴テーブルを記憶することを特徴とする。
【００１７】
また、本発明の一態様は、上記のプロセッサにおいて、前記単位命令列に含まれる各命令に対応するローカル位置情報と、外部記憶部にアクセスした履歴を示すアクセス情報とを対応付けたストアバッファテーブルを、前記複数のプロセッシングエレメントの個数分記憶するストアバッファ記憶部と、前記プロセッシングエレメントから前記外部記憶部にアクセス要求があった場合に、前記ストアバッファ記憶部が記憶する当該プロセッシングエレメントに対応する前記ストアバッファテーブルに基づいて、前記外部記憶部とのアクセスを制御するストアバッファ制御部とを備えることを特徴とする。
【００１８】
また、本発明の一態様は、上記のプロセッサにおいて、前記アクセス情報には、アクセスの種別を示す種別情報と、前記外部記憶部においてアクセスする記憶位置情報及びアクセスしたデータとが対応付けられており、前記ストアバッファ制御部は、前記外部記憶部からデータを読み出す前記アクセス要求に対して、前記ストアバッファテーブルに当該アクセス要求に対応する前記データが存在する場合に、当該データを前記プロセッシングエレメントに出力し、前記ストアバッファテーブルに当該アクセス要求に対応する前記データが存在しない場合に、前記外部記憶部から読み出した前記データを前記プロセッシングエレメントに出力することを特徴とする。
【００１９】
また、本発明の一態様は、上記のプロセッサにおいて、前記ストアバッファ制御部は、前記外部記憶部にデータを書き込む前記アクセス要求に対して、前記プロセッシングエレメントに対応する前記ストアバッファテーブルに、前記ローカル位置情報と、当該アクセス情報とを対応付けて記憶させるとともに、前記外部記憶部に当該データを記憶させることを特徴とする。
【発明の効果】
【００２０】
本発明によれば、非数値計算処理を高速処理することができる。
【図面の簡単な説明】
【００２１】
【図１】本実施形態によるプロセッサの一例を示すブロック図である。
【図２】本実施形態におけるアトミックブロックの一例を説明する図である。
【図３】本実施形態におけるＰＥの構成例を示すブロック図である。
【図４】本実施形態における実行管理ユニットの構成例を示すブロック図である。
【図５】本実施形態における更新履歴記憶部の構成例を示す図である。
【図６】本実施形態におけるレジスタ管理ユニットの一例を示すブロック図である。
【図７】本実施形態におけるストアバッファ記憶部の構成例を示す図である。
【図８】本実施形態におけるエントリテーブル記憶部の構成例を示す図である。
【図９】本実施形態におけるＰＥの状態遷移の一例を示す図である。
【図１０】本実施形態によるプロセッサのパイプライン処理の一例を示す図である。
【図１１】本実施形態によるＰＥの並列処理の一例を示す図である。
【図１２】本実施形態によるプロセッサのＰＥ間のＲＡＷハザード処理の一例を示す図である。
【図１３】本実施形態によるプロセッサの自身のＰＥ内のＲＡＷハザード処理の一例を示す図である。
【発明を実施するための形態】
【００２２】
以下、本発明の一実施形態によるプロセッサについて図面を参照して説明する。
図１は、本実施形態によるプロセッサ１の一例を示すブロック図である。
図１に示すように、プロセッサ１は、複数（例えば、Ｎ個）のプロセッシングエレメント（１０−１、１０−２、・・・、１０−Ｎ）と、ＰＣ（プログラムカウンタ）更新部２０と、命令フェッチ部３０と、実行管理ユニット４０と、レジスタ管理ユニット５０と、ストアバッファユニット６０と、メモリ管理ユニット７０とを備えている。プロセッサ１は、メモリ管理ユニット７０を介してデータメモリ７１に接続されている。
【００２３】
なお、「プロセッシングエレメント」は、以下の説明において、「ＰＥ」（Processing Element）と表記する。また、ＰＥ１０−１、ＰＥ１０−２、・・・１０−Ｎのそれぞれは、同一の構成であり、本実施形態において、プロセッサ１が備える任意のＰＥを示す場合、又は特に区別しない場合には、ＰＥ１０として説明する。なお、本実施形態において、ＰＥ１０の個数は、例えば、８個である。
【００２４】
ＰＣ更新部２０は、ＰＣ（プログラムカウンタ）２１を有し、ＰＣ２１を更新する。ここで、ＰＣ２１は、プログラムを記憶するプログラムメモリ（不図示）の命令実行位置を示すアドレス（位置情報）を格納するレジスタである。ＰＣ更新部２０は、通常の命令実行ごとに、ＰＣ２１を“＋ＩＬ”するとともに、分岐命令が実行された場合には、指定された分岐先のアドレスにＰＣ２１を更新する。ここで、“ＩＬ”は、命令固定長を示す。また、ＰＣ更新部２０は、ＰＣ２１が記憶するＰＣ値を、アドレスとしてプログラムメモリに出力する。
【００２５】
命令フェッチ部３０は、ＩＲ（命令レジスタ）３１を有し、ＰＣ更新部２０から出力されたアドレスに応じて、プログラムメモリが出力した命令（Instruction）をＩＲ３１に記憶（格納）させる。ここで、ＩＲ３１は、プログラムメモリから読み出した命令を格納するレジスタである。命令フェッチ部３０は、ＩＲ３１に記憶させた命令を実行管理ユニットに出力するとともに、命令ネットワークＮＷ１を介して、ＰＥ１０に供給する。
【００２６】
独立した複数のＰＥ１０のそれぞれは、アセンブリ言語以下のレベルの命令列であるプログラムを分割したアトミックブロックを、展開連結リスト（Unrolled Linked List）のリストエントリ（入力データ）として、アトミックブロックに含まれる命令を実行する。ここで、アトミックブロック（単位命令列の一例）とは、アセンブリ言語以下のレベルの命令列であるプログラムを、途中に分岐命令を含まない命令列であって、分岐先の先頭命令を始端とし、分岐命令を終端とする命令列である。
【００２７】
図２は、本実施形態におけるアトミックブロックの一例を説明する図である。
図２（ａ）は、アセンブリ言語で記述されたプログラム（ＰＲ１）の一例を示すリストである。また、図２（ｂ）は、図２（ａ）に示すプログラム（ＰＲ１）をアトミックブロックに分割して、展開連結リストにした一例である。
図２（ｂ）に示すように、プログラム（ＰＲ１）は、アトミックブロックＡＢ＿Ａ〜ＡＢ＿Ｅに分割される。例えば、アトミックブロックＡＢ＿Ｄは、始点（始端）が、分岐先の先頭命令である“ａｄｄ  ｒ２，ｒ２，ｒ１”（命令Ｉ１）であり、終点（終端）が、分岐命令である“ｂｎｅｑ  ｌｏｏｐ”（命令Ｉ２）である。
【００２８】
このように、本実施形態によるプロセッサ１では、プログラムをアトミックブロックに分割し、図２（ｃ）に示すような展開連結リストにし、各アトミックブロックを各ＰＥ１０に実行させる。図２（ｃ）に示す例は、図２（ａ）に示すプログラムを展開連結リストにしたものである。ここで、プロセッサ１は、「アトミックブロックＡ」（ＡＢ＿Ａ）から「アトミックブロックＢ」（ＡＢ＿Ｂ）が実行させ、「アトミックブロックＢ」（ＡＢ＿Ｂ）において、「アトミックブロックＣ」（ＡＢ＿Ｃ）と、「アトミックブロックＤ」（ＡＢ＿Ｄ）とに分岐さる処理を実行する。また、プロセッサ１は、「アトミックブロックＢ」（ＡＢ＿Ｂ）と続く「アトミックブロックＤ」（ＡＢ＿Ｄ）とにより条件付きループを実行させる。なお、図２（ｃ）において、斜線部分は、分岐命令を示している。
【００２９】
図１に戻り、複数のＰＥ１０は、それぞれが、割り当てられたアトミックブロックを一時記憶する命令キャッシュ部１１を有し、それぞれの命令キャッシュ部１１に記憶されたアトミックブロックに含まれる命令を実行可能である。
ここで、図３を参照して、ＰＥ１０の構成について説明する。
【００３０】
図３は、本実施形態におけるＰＥ１０の構成例を示すブロック図である。
図３に示すように、ＰＥ１０は、命令キャッシュ部１１と、レジスタファイル部１２と、命令実行部１３とを備えている。
命令キャッシュ部１１（一時記憶部の一例）は、命令フェッチ部３０から出力された命令をキャッシュとして記憶するレジスタ群である。命令キャッシュ部１１は、例えば、キャッシュレジスタ（Ｃ１）〜キャッシュレジスタ（ＣＭ）のＭ個のレジスタを有し、アトミックブロックを記憶する。ここで、キャッシュレジスタの個数Ｍは、例えば、１つのアトミックブロックが格納可能なサイズであり、例えば、１６である。
【００３１】
レジスタファイル部１２は、ＰＥ１０による演算結果やデータメモリから読み出したデータなどを記憶するレジスタ群であり、命令の実行に利用される。レジスタファイル部１２は、複数の汎用レジスタ（例えば、Ｒｅｇ１〜ＲｅｇＲ）、及び制御レジスタを備えている。すなわち、レジスタファイル部１２は、汎用レジスタ（Ｒｅｇ１）〜汎用レジスタ（ＲｅｇＲ）のＲ個のレジスタ、及び制御レジスタを有し、命令の実行に利用される。なお、各ＰＥ１０が備えるレジスタファイル部１２の間のデータ通信は、オペランドデータネットワークＮＷ２を介して実行される。なお、以下の説明において、汎用レジスタ及び制御レジスタを単に「レジスタ」と表記して説明する。
【００３２】
命令実行部１３は、例えば、命令デコーダ及びＡＬＵ（Arithmetic Logic Unit）などを有し、命令フェッチ部３０から出力された命令、又は命令キャッシュ部１１が記憶する命令を実行する。
なお、ＰＥ１０は、アトミックブロックの初回の実行において、命令フェッチ部３０から出力された命令を命令実行部１３に実行させつつ、順番に命令キャッシュ部１１に記憶させるようにしてもよいし、命令フェッチ部３０から出力された命令を順番に命令キャッシュ部１１に記憶させ、当該命令キャッシュ部１１から命令を読み出して、命令実行部１３に実行させてもよい。また、ＰＥ１０は、アトミックブロックの２回目の実行において、命令キャッシュ部１１から順番に命令を読み出して、命令実行部１３に実行させる。
また、ＰＥ１０は、命令キャッシュ部１１が記憶する命令をパイプライン処理により、並列に実行可能に構成されているものとする。
【００３３】
再び、図１に戻り、実行管理ユニット４０（実行管理部の一例）は、プログラムをアトミックブロックに分割し、分割した当該アトミックブロックを複数のＰＥ１０のそれぞれに逐次割り当て、割り当てたアトミックブロックを複数のＰＥ１０に並列実行させる。実行管理ユニット４０は、分割したアトミックブロックが複数のＰＥ１０のいずれの命令キャッシュ部１１にも記憶されていない場合（キャッシュミスの場合）に、当該アトミックブロックを複数のＰＥ１０のいずれかに割り当てる。また、実行管理ユニット４０は、分割したアトミックブロックが複数のＰＥ１０のいずれかの命令キャッシュ部１１に既に記憶されている場合（キャッシュヒットの場合）に、当該ＰＥ１０に、当該命令キャッシュ部１１に既に記憶されているアトミックブロックを並列実行させる。
【００３４】
また、実行管理ユニット４０は、プログラムに分岐命令が検出された際に、後述する管理テーブル記憶部４１が記憶する管理テーブルに基づいて、次に実行するアトミックブロックが複数のＰＥ１０のいずれかの命令キャッシュ部１１に既に記憶されており、且つ有効な状態であるか否かを判定する。実行管理ユニット４０は、次に実行するアトミックブロックが複数のＰＥ１０のいずれかの命令キャッシュ部１１に既に記憶されており、且つ有効な状態であると判定した場合（キャッシュヒットの場合）に。当該ＰＥ１０に、命令キャッシュ部１１に記憶されているアトミックブロックを実行させる。
【００３５】
ここで、図４を参照して、本実施形態における実行管理ユニット４０の構成について説明する。
図４は、本実施形態における実行管理ユニット４０の構成例を示すブロック図である。
図４に示すように、実行管理ユニット４０は、管理テーブル記憶部４１と、キャッシュミスハンドラ部４２と、プリデコーダ部４３とを備えている。
【００３６】
管理テーブル記憶部４１は、例えば、レジスタにより構成される記憶であり、「ＰＥ＿ＮＯ」と、「ＢＴＡ」と、「有効フラグ」と、「ＬＧＴ」と、「ＰＴＲ１」と、「ＰＴＲ２」とを対応付けた管理情報を複数有する管理テーブルを記憶する。ここで。「ＰＥ＿ＮＯ」は、ＰＥ１０の番号を示し、管理情報の数は、ＰＥ１０の個数であるＮ個である。また、「ＢＴＡ」は、ブランチターゲットアドレスであり、分岐ターゲット命令のアドレスを示す。すなわち、「ＢＴＡ」は、プログラムにおけるアトミックブロックの先頭命令の位置を示す先頭位置情報（先頭アドレス）である。
【００３７】
また、「有効フラグ」は、当該管理情報（当該ＰＥ１０）が有効であるか否か示すフラグ情報である。すなわち、「有効フラグ」は、当該アトミックブロックが有効であるか否かを示す有効情報である。「有効フラグ」は、例えば、“１”である場合に有効を示し、“０”である場合に無効を示す。また、「ＬＧＴ」は、アトミックブロックのブロック長を示す。
また、「ＰＴＲ１」及び「ＰＴＲ２」は、次に実行されるアトミックブロックの当該管理テーブルにおける行番号（ポインタ）である。すなわち、「ＰＴＲ１」及び「ＰＴＲ２」は、次に実行するＰＥ１０を示す次実行情報である。なお、本実施形態では、分岐命令が、例えば、２つの分岐先を持つ場合の一例であるため、「ＰＴＲ１」及び「ＰＴＲ２」の２つのポインタを有しているが、例えば、分岐命令が、Ｍ個の分岐先を持つ場合には、Ｍ個のポインタを有することになる。
【００３８】
図４に示す例では、例えば、「ＰＥ＿ＮＯ」が“１”であるＰＥ１０には、「ＢＴＡ」（先頭アドレス）が“ＸＸＸＸ”であり、「有効フラグ」が“１”、「ＬＧＴ」（ブロック長）が、“１０”であるアトミックブロックが割り当てられていることを示している。また、当該アトミックブロックが次に実行する「ＰＴＲ１」が“２”であり、「ＰＴＲ２」が“３”であることを示している。すなわち、次に実行するＰＲ１０が、「ＰＲ＿ＮＯ」が“２”又は“３”であることを示している。
【００３９】
プリデコーダ部４３は、命令フェッチ部３０から出力された命令をデコードして、分岐命令を判定する。
キャッシュミスハンドラ部４２は、アトミックブロックのＰＥ１０への割り当て及び実行を制御する。キャッシュミスハンドラ部４２は、例えば、アトミックブロックがキャッシュミスである場合に、キャッシュミスハンドラ部４２は、複数のＰＥ１０のうちの１つに、アトミックブロックを割り当て、当該ＰＥ１０に実行させる。また、キャッシュミスハンドラ部４２は、次に実行するアトミックブロックがキャッシュヒットである場合に、当該ヒットしたＰＥ１０に、既に命令キャッシュ部１１に記憶されているアトミックブロックを実行させる。
また、プリデコーダ部４３は、比較回路４２１と、ＡＮＤ（アンド）回路４２２と、ＡＮＤ回路４２３と、ＬＲＵ（Least Recently Used）アービタ４２４と、ハンドラ部４２５とを備えている。
【００４０】
比較回路４２１は、ＰＣ２１の値であるＰＣ値と、管理テーブル記憶部４１が記憶する次に実行予定のアトミックブロック（ＰＥ１０）の「ＢＴＡ」とが一致するか否かを比較する。比較回路４２１は、例えば、一致する場合に、Ｈ状態（Ｈｉｇｈ状態（“１”状態））を出力し、不一致の場合に、Ｌ状態（Ｌｏｗ状態（“０”状態））を出力する。
【００４１】
ＡＮＤ回路４２２は、比較回路４２１の出力と、次に実行予定のアトミックブロック（ＰＥ１０）の「有効フラグ」との論理積演算の結果を出力する。
ＡＮＤ回路４２３は、ＡＮＤ回路４２２の出力と、プリデコーダ部４３から出力される分岐命令を示す分岐命令信号との論理積演算の結果を、ＨＩＴ信号として出力する。このＨＩＴ信号は、次の実行予定のＰＥ１０に対してキャッシュヒットであることを示す信号である。すなわち、ＡＮＤ回路４２３は、キャッシュヒットである場合に、Ｈ状態を出力する。
【００４２】
ＬＲＵアービタ４２４は、次に実行予定のアトミックブロック（ＰＥ１０）がキャッシュミスである場合に、複数のＰＥ１０の中から、次に使用するＰＥ１０を選択する。ＬＲＵアービタ４２４は、例えば、「使われてから最も長い時間が経ったもの」又は「参照される頻度が最も低いもの」のＰＥ１０を選択する。
【００４３】
ハンドラ部４２５は、キャッシュミスハンドラ部４２を制御する。ハンドラ部４２５は、例えば、キャッシュヒットしたＰＥ１０に、命令キャッシュ部１１に記憶されている命令を実行させる。また、ハンドラ部４２５は、例えば、次の実行予定のＰＥ１０の「ＬＧＴ」をＰＣ更新部２０に出力させて、ＰＣ２１の値を、「ＬＧＴ」の値に更新させる。
また、ハンドラ部４２５は、キャッシュミスの場合に、ＬＲＵアービタ４２４によって選択されたＰＥ１０に対応する管理情報を更新する。すなわち、ハンドラ部４２５は、キャッシュミスの場合に、管理テーブル記憶部４１の対応する「ＰＥ＿ＮＯ」の行に、上述した「ＢＴＡ」と、「有効フラグ」と、「ＬＧＴ」と、「ＰＴＲ１」と、「ＰＴＲ２」とを対応付けた管理情報を記憶させる。
【００４４】
このように、実行管理ユニット４０は、プログラムに分岐命令が検出された際に、管理テーブル記憶部４１が記憶する管理テーブルから、次実行情報（「ＰＴＲ１」又は「ＰＴＲ２」）に基づいて当該分岐命令の次に実行するアトミックブロックに対応する「ＢＴＡ」（先頭位置情報）及び「有効フラグ」（有効情報）を取得する。実行管理ユニット４０は、取得した「ＢＴＡ」の示す位置と、次に実行するプログラムの実行位置（ＰＣ値）とが一致し、且つ、取得した「有効フラグ」が有効を示す場合に、次実行情報（「ＰＴＲ１」又は「ＰＴＲ２」）に一致するＰＥ１０が、アトミックブロックを命令キャッシュ部１１に記憶しており、且つ、有効な状態であると判定する。
【００４５】
また、実行管理ユニット４０は、取得した「ＢＴＡ」の示す位置と、次に実行するプログラムの実行位置とが一致しない、又は取得した有効情報が無効を示す場合に、複数のＰＥ１０の１つに次に実行するアトミックブロックを割り当てるとともに、割り当てたアトミックブロックに対応させて、管理テーブルを更新する。
また、実行管理ユニット４０は、複数のＰＥ１０の１つに次に実行するアトミックブロックを割り当てる場合に、管理テーブルの当該アトミックブロックに対応する「ＬＧＴ」を記憶させるとともに、「有効フラグ」を、無効を示す値（例えば、“０”）に更新する。実行管理ユニット４０は、ＰＥ１０が、当該アトミックブロックの実行を完了した場合に、当該アトミックブロックに対応する「有効フラグ」を、有効を示す値（例えば、“１”）に更新する。
【００４６】
再び、図１に戻り、レジスタ管理ユニット５０（レジスタ管理部の一例）は、各ＰＥ１０が備えるレジスタファイル部１２のレジスタを管理する。レジスタ管理ユニット５０は、特定のレジスタについて、複数のアトミックブロックに横断してデータ依存性がある場合に、ＰＥ１０を制御して、データ依存性を回避する。レジスタ管理ユニット５０は、例えば、複数のＰＥ１０の間で、レジスタの書き込み後の読み出しによるデータ依存であるＲＡＷハザードが発生した場合に、最も近い過去に当該レジスタに書き込みを実行しているＰＥ１０によるアトミックブロックの当該レジスタへの書き込みが完了するまで、当該レジスタの読み出しを実行するＰＥ１０の命令実行を保留（ＳＴＡＬＬ（ストール））させる。レジスタ管理ユニット５０は、更新履歴記憶部５１を備えている。
【００４７】
更新履歴記憶部５１は、例えば、レジスタにより構成される記憶であり、図５に示すように、「ＦＩＦＯ」と、「ＵＰＤ」と、「Ｗ／Ａ」と、「ＲＡＷ」と、「ＡＣＴ」とを対応付けた更新履歴情報を記憶する。更新履歴記憶部５１は、更新履歴情報を複数有する更新履歴テーブルを記憶する。また、更新履歴記憶部５１は、ＦＩＦＯ（First In First Out）に構成されており、実行管理ユニット４０は、ＰＥ１０にアトミックブロックが割り当てられる際に、当該ＰＥ１０に対応する更新履歴情報を追加し、古い更新履歴情報を廃棄する。
【００４８】
図５は、本実施形態における更新履歴記憶部５１の構成例を示す図である。
図５において、「ＦＩＦＯ」は、ＰＥ１０を識別するＰＥ識別情報を示し、当該ＰＥ識別情報を実行順に記憶している。また、「ＵＰＤ」は、アトミックブロックの実行において、レジスタが更新されたことを示すフラグ（ＵＰＤフラグ）である。すなわち、「ＵＰＤ」は、レジスタが更新されたことを示す更新情報である。「ＵＰＤ」は、例えば、“１”である場合に更新されたことを示し、“０”である場合に更新されていないことを示す。
【００４９】
また、「Ｗ／Ａ」は、ＷフラグとＡフラグとを有している。Ｗフラグは、アトミックブロックにおけるレジスタの最後の書き込みが完了したことを示す完了情報である。また、Ａフラグは、レジスタの書き込みが実行されたことを示す実行情報である。Ｗフラグは、例えば、“１”である場合にレジスタの最後の書き込みが完了したことを示し、“０”である場合にレジスタの最後の書き込みが完了していないことを示す。また、Ａフラグは、例えば、“１”である場合にレジスタの書き込みが実行されたことを示し、“０”である場合にレジスタの書き込みが実行されていないことを示す。
【００５０】
また、「ＲＡＷ」は、自身のＰＥ１０内において、ＲＡＷハザードが発生したことを示すＲＡＷフラグである。「ＲＡＷ」は、例えば、“１”である場合に、自身のＰＥ１０内においてＲＡＷハザードが発生したことを示し、“０”である場合に自身のＰＥ１０内においてＲＡＷハザードが発生していないことを示す。また、「ＲＡＷ」は、自身のＰＥ１０内におけるＲＡＷハザードに対する処理と、ＰＥ１０間のＲＡＷハザードに対する処理とを切り替える制御フラグとして機能する。「ＲＡＷ」は、例えば、Ａフラグが“１”であり、且つ、当該レジスタに対する読み込み要求があった場合に、「ＲＡＷ」は、“１”に変更される。
また、「ＡＣＴ」は、当該ＰＥ１０が実行中であるか否かを示すＡＣＴフラグである。「ＡＣＴ」は、例えば、“１”である場合に当該ＰＥ１０が実行中であることを示し、“０”である場合に当該ＰＥ１０が実行中でないことを示す。
【００５１】
なお、更新履歴記憶部５１は、更新履歴情報をＰＥ１０の個数分（例えば、Ｎ個）有する更新履歴テーブルを記憶する。また、更新履歴記憶部５１は、複数のレジスタのそれぞれに対応する更新履歴テーブルを記憶する。すなわち、「ＵＰＤ」、「Ｗ／Ａ」、及び「ＲＡＷ」は、ＰＥ１０が備えるレジスタの個数に応じてビット数が決定される。例えば、「ＵＰＤ」は、ＲＮ×１ビットで構成され、「Ｗ／Ａ」は、ＲＮ×２ビットで構成される。また、「ＲＡＷ」は、ＲＮ×１ビットで構成される。ここで、ＲＮは、レジスタの個数（汎用レジスタのＲ個と制御レジスタの個数との合計数）である。
図５に示す例では、例えば、「ＦＩＦＯ」が“ＰＥ＿１”に対応する更新履歴情報は、「ＵＰＤ」が“１１・・・”であり、「Ｗ／Ａ」が“０／０・・・”であることを示している。また、「ＲＡＷ」が“００・・・”であり、「ＡＣＴ」が“１”であることを示している。
【００５２】
また、図６は、本実施形態におけるレジスタ管理ユニット５０の一例を示すブロック図である。
図６に示すように、レジスタ管理ユニット５０は、更新履歴記憶部５１と、マルチプレクサ５２と、マルチプレクサ５３とを備えている。なお、図６に示す更新履歴記憶部５１は、上述した図５に示す更新履歴情報のうち、特定のレジスタ（例えば、ＲｅｇＸ）に関する「ＵＰＤ」、「Ｗ／Ａ」、及び「ＲＡＷ」のみを表記している。
【００５３】
また、更新履歴情報ＥＮ２は、レジスタ管理ユニット５０に対して読み込み要求がされており、且つ、自身のＰＥ１０内のＲＡＷハザードが発生していないＰＥ１０−３（ＰＥ＿３）に対応する。また、更新履歴情報ＥＮ１は、当該ＰＥ１０−３（ＰＥ＿３）の処理に最も近い過去にレジスタＲｅｇＸに書き込みを実行しているＰＥ１０−１（ＰＥ＿１）に対応する。
マルチプレクサ５２は、「ＲＡＷ」の値に基づいて、更新履歴情報ＥＮ１のＷフラグと、更新履歴情報ＥＮ２のＡフラグとのいずれかを選択し、ＰＥ１０−３（ＰＥ＿３）をストールさせるＳＴＡＬＬＢ信号を出力する。なお、ＳＴＡＬＬＢ信号は、負論理の信号であり、“０”の場合にストールとなる。また、マルチプレクサ５２は、「ＲＡＷ」が“０”である場合に、更新履歴情報ＥＮ１のＷフラグの値をＳＴＡＬＬＢ信号として出力する。また、マルチプレクサ５２は、「ＲＡＷ」が“１”である場合に、更新履歴情報ＥＮ２のＡフラグとの値をＳＴＡＬＬＢ信号として出力する。
【００５４】
マルチプレクサ５３は、「ＲＡＷ」の値に基づいて、データを読み込むレジスタＲｅｇＸを、ＰＥ１０−３（ＰＥ＿３）と、ＰＥ１０−１（ＰＥ＿１）とのいずれかを切り替える。マルチプレクサ５３は、「ＲＡＷ」が“０”である場合に、ＰＥ１０−１（ＰＥ＿１）のレジスタＲｅｇＸを読み込むレジスタとして指定する。また、マルチプレクサ５３は、「ＲＡＷ」が“１”である場合に、ＰＥ１０−３（ＰＥ＿３）のレジスタＲｅｇＸを読み込むレジスタとして指定する。
【００５５】
このように、レジスタ管理ユニット５０は、更新履歴記憶部５１が記憶する更新履歴テーブルに基づいて、自身のＰＥ１０内のＲＡＷハザードが発生したか否かを判定し、自身のＰＥ１０内のＲＡＷハザードが発生した場合に、「ＲＡＷ」を“１”にする。そして、レジスタ管理ユニット５０は、更新履歴テーブルに含まれる、読み込み要求のあったＰＥ１０に対応する「ＲＡＷ」と、当該ＰＥ１０に対応するＡフラグと、最も近い過去にレジスタに書き込みを実行しているＰＥ１０に対応するＷフラグとに基づいて、読み込み要求のあったＰＥ１０の命令実行を保留させる。
例えば、読み込み要求のあったＰＥ１０に対応する「ＲＡＷ」が“１”である場合に、レジスタ管理ユニット５０は、マルチプレクサ５２によって当該ＰＥ１０に対応するＡフラグに基づいて、当該ＰＥ１０への命令のエントリを保留するか否かのＳＴＡＬＬＢ信号を生成する。また、この場合、レジスタ管理ユニット５０は、当該ＰＥ１０のレジスタ（ＲｅｇＸ）からデータを当該ＰＥ１０に読み込ませる。
【００５６】
また、例えば、読み込み要求のあったＰＥ１０に対応する「ＲＡＷ」が“０”である場合に、レジスタ管理ユニット５０は、マルチプレクサ５２によって最も近い過去にレジスタに書き込みを実行しているＰＥ１０に対応するＷフラグに基づいて、当該ＰＥ１０への命令のエントリを保留するか否かのＳＴＡＬＬＢ信号を生成する。また、この場合、レジスタ管理ユニット５０は、最も近い過去にレジスタに書き込みを実行しているＰＥ１０ＰＥ１０のレジスタ（ＲｅｇＸ）からデータを、読み込み要求のあったＰＥ１０に読み込ませる。
【００５７】
例えば、図６に示す例では、更新履歴情報ＥＮ２に対応するＰＥ１０−３（ＰＥ＿３）にレジスタＲｅｇＸの読み込み要求があった場合に、「ＲＡＷ」が“０”であるため、マルチプレクサ５３によって、読み込み元として、ＰＥ１０−１（ＰＥ＿１）が選択される。また、ＰＥ１０−１（ＰＥ＿１）のＷフラグが“０”であるため、マルチプレクサ５２は、ＳＴＡＬＬＢ信号に“０”を出力して、ＰＥ１０−３（ＰＥ＿３）の命令実行を、ＰＥ１０−１（ＰＥ＿１）のＷフラグが“１”になるまで保留させる。
【００５８】
なお、レジスタ管理ユニット５０は、Ａフラグに基づいて、ＲＡＷハザードが発生したか否かを判定し、「ＵＰＤ」に基づいて、最も近い過去にレジスタに書き込みを実行しているＰＥ１０を選択する。
また、レジスタ管理ユニット５０は、アトミックブロックをＰＥ１０に割り当てた初回の命令実行において記憶された更新履歴情報のうち、Ｗフラグ、Ａフラグ、及び「ＲＡＷ」を“０”に変更し、キャッシュヒットが発生した２回目以降の命令実行において記憶された更新履歴情報の状態を維持する。
【００５９】
再び、図１に戻り、ストアバッファユニット６０（ストアバッファ制御部の一例）は、ＰＥ１０からデータメモリ７１にアクセス要求があった場合に、後述するストアバッファ記憶部６１が記憶する当該ＰＥ１０に対応するストアバッファテーブルに基づいて、データメモリ７１とのアクセスを制御する。なお、ストアバッファユニット６０は、オペランドデータネットワークＮＷ２を介して、ＰＥ１０が備えるレジスタファイル部１２とデータの授受を行う。
【００６０】
また、ストアバッファユニット６０は、メモリ管理ユニット７０を介して、データメモリ７１とデータのアクセスを行う。ストアバッファユニット６０は、データメモリ７１からデータを読み出すアクセス要求に対して、ストアバッファ記憶部６１のストアバッファテーブルに当該アクセス要求に対応するデータが存在する場合に、当該データをＰＥ１０に出力する。また、ストアバッファユニット６０は、ストアバッファテーブルに当該アクセス要求に対応するデータが存在しない場合に、データメモリ７１から読み出したデータをＰＥ１０に出力する。
また、ストアバッファユニット６０は、ストアバッファ記憶部６１と、エントリテーブル記憶部６２とを備えている。
【００６１】
ストアバッファ記憶部６１は、アトミックブロックに含まれる各命令に対応するローカル位置情報と、データメモリ７１にアクセスした履歴を示すアクセス情報とを対応付けたストアバッファテーブルを、複数のＰＥ１０の個数分（例えば、Ｎ個分）記憶する。
図７は、本実施形態におけるストアバッファ記憶部６１の構成例を示す図である。
図７に示すように、ストアバッファ記憶部６１は、Ｎ個のストアバッファテーブルを備えている。また、ストアバッファテーブルは、例えば、「ＬＰＣ」と、「Ｌｄ」と、「Ｓｔ」と、「Ａｄｄｒ」と、「Ｄａｔａ」と、「完了」と、「終了」とを対応付けて記憶する。なお、ストアバッファテーブルは、ＰＥ１０の命令キャッシュ部１１のサイズ分の行を有している。
【００６２】
ここで、「ＬＰＣ」は、ＰＥ１０内のローカルプログラムカウンタ（ローカル位置情報）であり、ＰＥ１０の命令キャッシュ部１１のアドレスに対応する。「Ｌｄ」は、ロード命令が実行されたことを示すフラグであり、「Ｓｔ」は、ストア命令が実行されたことを示すフラグである。なお、ロード命令は、データメモリ７１からレジスタへデータを読み出す命令であり、ストア命令は、レジスタからデータメモリ７１にデータを書き込む命令である。また、「Ａｄｄｒ」は、データメモリ７１のアドレスを示し、「Ｄａｔａ」は、アクセスしたデータの値を示す。また、「完了」は、データメモリ７１へのアクセス（データの書き込み）が完了したことを示す完了フラグであり、「終了」は、命令の実行が完了（終了）したことを示す終了フラグである。ここで、「Ｌｄ」、「Ｓｔ」、「Ａｄｄｒ」、「Ｄａｔａ」、「完了」、及び「終了」は、データメモリ７１にアクセスした履歴を示すアクセス情報に対応する。
【００６３】
例えば、図７に示す例では、「ＬＰＣ」が“０”の命令が、データメモリ７１の「Ａｄｄｒ」の “０ｘ０２”に「Ｄａｔａ」の“０ｘ０ｆ”を書き込むストア命令であり、命令の実行が完了しているが、データメモリ７１への書き込みが完了していない状態であることを示している。
なお、ストアバッファユニット６０は、データメモリ７１にデータを書き込むアクセス要求に対して、ＰＥ１０に対応するストアバッファテーブルに、「ＬＰＣ」（ローカル位置情報）と、当該アクセス情報とを対応付けて記憶させるとともに、データメモリ７１に当該データを記憶させる。
【００６４】
再び、図１に戻り、エントリテーブル記憶部６２は、異なるＰＥ１０から同一のアドレスにアクセスがあった場合の優先順位を記憶する。エントリテーブル記憶部６２は、ＦＩＦＯに構成されており、ストアバッファユニット６０は、データメモリ７１にデータのアクセスを行う命令が実行された際に、当該命令を実行するＰＥ１０に対応する情報を追加し、データのアクセスが完了した古い情報を廃棄する。エントリテーブル記憶部６２は、例えば、図８に示すように、「ＦＩＦＯ」と、「エントリＮＯ」とを対応付けて記憶する。
【００６５】
図８は、本実施形態におけるエントリテーブル記憶部６２の構成例を示す図である。
図８において、「ＦＩＦＯ」は、ＰＥ１０を識別するＰＥ識別情報を示し、「エントリＮＯ」は、上述したストアバッファテーブルの番号を示している。
例えば、図８に示す例では、「ＦＩＦＯ」が“ＰＥ＿１”に対応する「エントリＮＯ」が“１”であり、最上行になるため、“ＰＥ＿１”に対応するＰＥ１０によるアクセスが、最も優先順位が高いことを示している。
【００６６】
再び、図１に戻り、メモリ管理ユニット７０は、ストアバッファユニット６０と、データメモリ７１との間に配置され、ストアバッファユニット６０と、データメモリ７１との間のデータのアクセスを中継する。また、データメモリ７１（外部記憶部の一例）は、データを記憶するメモリである。
【００６７】
次に、図面を参照して、本実施形態によるプロセッサ１の動作について説明する。
＜命令の実行処理＞
まず、本実施形態によるプロセッサ１の命令実行の処理について説明する。
プロセッサ１は、ＰＣ値をアドレスとしてプログラムメモリに出力し、命令フェッチ部３０が、プログラムメモリから出力された命令をＩＲ３１に記憶させる。プロセッサ１は、図２に示すようなアトミックブロックに分割して、複数のＰＥ１０のうちの１つに割り当てて、アトミックブロック単位の命令を当該ＰＥ１０に実行させる。この際に、実行管理ユニット４０は、ＰＥ１０の割り当て、及び、ＰＥ１０の並列処理を管理する。
【００６８】
図９は、本実施形態によるプロセッサ１のＰＥ１０の状態遷移を示す図である。
この図において、状態Ｓ１は、命令実行中のアクティブ状態を示し、状態Ｓ２は、保留中（ストール中）のアクティブ状態を示している。また、状態Ｓ３は、アトミックブロックの命令実行が終了したスリープ状態を示している。
図９に示すように、実行管理ユニット４０は、アトミックブロックをＰＥ１０に割り当てて、命令を実行させることで、まず、ＰＥ１０を状態Ｓ１に遷移させる。実行管理ユニット４０は、管理テーブル記憶部４１が記憶する管理テーブルの当該ＰＥ１０に対応する「有効フラグ」を“１”にする。
【００６９】
状態Ｓ１において、実行管理ユニット４０は、ＰＥ１０がレジスタの読み出し命令を実行した場合の問合せに対して、管理テーブル記憶部４１が記憶する管理テーブルに基づいて、ストールする必要があるか否かを判定し、ストールする必要がある場合に、当該ＰＥ１０にストール指示を送信し、状態Ｓ２に遷移させる。
また、状態Ｓ２において、ストールの要因が解決した場合に、実行管理ユニット４０は、当該ＰＥ１０にストール解除を送信し、状態Ｓ１に遷移させる。
【００７０】
また、状態Ｓ１において、ＰＥ１０に分岐命令が実行された場合に、実行管理ユニット４０は、当該ＰＥ１０を状態Ｓ３に遷移させる。
また、状態Ｓ３において、前回実行したアトミックブロックが再実行される場合（キャッシュヒットの場合）に、実行管理ユニット４０は、再び状態Ｓ２に遷移させて、命令キャッシュ部１１に記憶されている命令を実行させる。
【００７１】
また、状態Ｓ３において、ＰＥ１０の空きがなく、ＬＲＵアービタ４２４によって、当該ＰＥ１０がＬＲＵ置換え対象であると判定された場合に、実行管理ユニット４０は、当該ＰＥ１０を無効化する。すなわち、実行管理ユニット４０は、管理テーブル記憶部４１が記憶する管理テーブルの当該ＰＥ１０に対応する「有効フラグ」を“０”にする。
また、キャッシュミスが発生した場合に、実行管理ユニット４０は、無効化されているＰＥ１０のうちの１つに、アトミックブロックを割り当てて、再び状態Ｓ１に遷移させる。
また、全てのＰＥ１０に対応する「有効フラグ」が“１”である場合には、実行管理ユニット４０は、ＰＥ１０が、状態Ｓ３（スリープ状態）又は「有効フラグ」が“０”になるまで、新たなアトミックブロックの実行を保留させる。
【００７２】
なお、実行管理ユニット４０は、新たにアトミックブロックをＰＥ１０に割り当てる際に、管理テーブル記憶部４１が記憶する管理テーブルを更新する。具体的には、実行管理ユニット４０は、当該ＰＥ１０の「ＢＴＡ」にＰＣ値を記憶させ、「ＬＧＴ」にアトミックブロックのブロック長を記憶させる。また、実行管理ユニット４０は、当該ＰＥ１０の「ＰＴＲ１」及び「ＰＴＲ２」にアトミックブロックの分岐先のＰＥ１０に対応する「ＰＥ＿ＮＯ」（行番号）を記憶させ、「有効フラグ」を“１”にする。
【００７３】
次に、図４を参照して、実行管理ユニット４０によるキャッシュヒットの判定について説明する。
図４において、行Ｌ１に対応するＰＥ１０が、分岐命令を実行すると、比較回路４２１が、ＰＣ値と、次に実行予定のアトミックブロックに対応するＰＥ１０（行Ｌ２）の「ＢＴＡ」とを比較し、一致する場合に、Ｈ状態を出力する。また、ＡＮＤ回路４２２は、比較回路４２１の出力と、次に実行予定のアトミックブロックに対応するＰＥ１０の「有効フラグ」との論理積演算の結果を出力する。図４に示す例では、行Ｌ２の「有効フラグ」が“１”（＝Ｈ状態）であるので、ＡＮＤ回路４２２は、Ｈ状態を出力する。そして、ＡＮＤ回路４２３が、プリデコーダ部４３から出力される分岐命令を示す分岐命令信号（ここでは、Ｈ状態）と、ＡＮＤ回路４２２の出力（Ｈ状態）との論理積演算の結果（Ｈ状態）をＨＩＴ信号として出力する。また、実行管理ユニット４０は、「ＢＴＡ」が静的に決まっているとき、行Ｌ２の「ＢＴＡ」をＰＣ更新部２０に出力して、ＰＣ２１の値を「ＢＴＡ」の値に更新させる。すなわち、図４に示す例では、実行管理ユニット４０は、ＨＩＴ信号にＨ状態を出力し、「ＰＥ＿ＮＯ」が“６”のＰＥ１０に命令キャッシュ部１１に記憶されている命令を実行させる。
【００７４】
次に、図１０を参照して、ＰＥ１０のパイプライン処理について説明する。
図１０は、本実施形態によるプロセッサ１のパイプライン処理の一例を示す図である。
図１０に示すように、プロセッサ１の各ＰＥ１０は、「ＩＦ」、「ＩＤ」、「ＲＲ」、「ＥＸ」、及び「ＷＲ」の５つの処理（サイクル）を並列に処理するパイプライン処理を実行する。
【００７５】
ここで、「ＩＦ」は、命令のフェッチ処理であり、「ＩＤ」は、命令デコード処理（制御信号の生成処理）である。また、「ＲＲ」は、レジスタからのオペランドの読み込み処理であり、「ＥＸ」は、演算の実行処理である。また、「ＷＲ」は、レジスタへの演算結果の書き込み処理である。
図１０に示すように、ＰＥ１０は、例えば、「命令１」、「命令２」、・・・の順に、５つの処理（サイクル）をずらして実行して、パイプライン処理を実行する。
【００７６】
次に、図１１を参照して、本実施形態によるプロセッサ１の命令の実行処理について説明する。
図１１は、本実施形態によるＰＥ１０の並列処理の一例を示す図である。
図１１（ａ）は、「アトミックブロックＡ」〜「アトミックブロックＤ」（ＡＢ＿Ａ〜ＡＢ＿Ｄ）の展開連結リストにされたプログラムの一例を示している。また、図１１（ｂ）は、プロセッサ１が有するＰＥ１０（１０−１、１０−２、１０−３、１０−４、・・・、１０−Ｎ）を示している。
【００７７】
また、図１１（ｃ）は、プロセッサ１が、図１１（ａ）に示すアトミックブロック（ＡＢ＿Ａ〜ＡＢ＿Ｄ）を実行した場合の一例を示している。
図１１（ｃ）に示すように、時刻Ｔ１において、プロセッサ１は、まず、ＰＥ１０−１（ＰＥ＿１）に、「アトミックブロックＡ」を割り当て、ＰＥ１０−１が、「アトミックブロックＡ」の命令を逐次実行する。
【００７８】
次に、時刻Ｔ２において、ＰＥ１０−１による「アトミックブロックＡ」の実行が完了すると、プロセッサ１は、ＰＥ１０−２（ＰＥ＿２）に、「アトミックブロックＢ」を割り当て、ＰＥ１０−２が、「アトミックブロックＢ」の命令を逐次実行する。ここで、ＰＥ１０−１の命令キャッシュ部１１には、「アトミックブロックＡ」が記憶された状態であり、管理テーブル記憶部４１には、ＰＥ１０−１に対応する管理情報が「有効フラグ」が“１”の状態で記憶されている。
【００７９】
次に、時刻Ｔ３において、ＰＥ１０−２による「アトミックブロックＢ」の実行が完了すると、プロセッサ１は、ＰＥ１０−３（ＰＥ＿３）に、「アトミックブロックＤ」を割り当て、ＰＥ１０−２が、「アトミックブロックＢ」の命令を逐次実行する。ここで、ＰＥ１０−２の命令キャッシュ部１１には、「アトミックブロックＢ」が記憶された状態であり、管理テーブル記憶部４１には、ＰＥ１０−２に対応する管理情報が「有効フラグ」が“１”の状態で記憶されている。
【００８０】
次に、時刻Ｔ４において、ＰＥ１０−３による「アトミックブロックＤ」の実行が完了すると、プロセッサ１は、ＰＥ１０−２（ＰＥ＿２）に、命令キャッシュ部１１に記憶されている「アトミックブロックＢ」の命令を実行させる。ここで、実行管理ユニット４０は、上述した図４に示す処理によりキャッシュヒットを判定し、ＰＥ１０−２（ＰＥ＿２）に「アトミックブロックＢ」を再実行させる。
また、時刻Ｔ５において、プロセッサ１は、さらに、ＰＥ１０−３（ＰＥ＿３）に、命令キャッシュ部１１に記憶されている「アトミックブロックＤ」の命令を実行させる。ここで、実行管理ユニット４０は、上述した図４に示す処理によりキャッシュヒットを判定し、ＰＥ１０−３（ＰＥ＿３）に「アトミックブロックＤ」を再実行させる。これにより、ＰＥ１０−２とＰＥ１０−３とが並列実行される。
【００８１】
続く時刻Ｔ６及び時刻Ｔ７において、プロセッサ１は、時刻Ｔ４及び時刻Ｔ５と同様の処理を実行し、ＰＥ１０−２とＰＥ１０−３とが並列実行される。
なお、図１１（ｃ）において、時刻Ｔ４以降の期間ＰＴ１は、並列実行の期間である。
このように、実行管理ユニット４０は、割り当てたアトミックブロック（「アトミックブロックＢ」及び「アトミックブロックＤ」を複数のＰＥ１０（１０−２、１０−３）に並列実行させる。
【００８２】
＜データ依存性の回避処理＞
次に、本実施形態によるプロセッサ１のデータ依存性の回避処理について説明する。
プロセッサ１のレジスタ管理ユニット５０は、以下の基本ルールに基づいて、ＰＥ１０のレジスタ間のデータ依存性を回避する処理を実行する。
（１）ＰＥ１０は、レジスタにデータの書き込みを行う際には、自身のレジスタにデータを書き込む。また、ＰＥ１０は、レジスタに対して、書き込みを行った場合には、レジスタ管理ユニット５０に更新履歴テーブルの更新を依頼し、レジスタ管理ユニット５０は、更新履歴記憶部５１の更新履歴テーブルを更新する。
【００８３】
（２）ＰＥ１０は、レジスタからデータの読み込みを行う際には、レジスタ管理ユニット５０に問合せを行う。レジスタ管理ユニット５０は、更新履歴記憶部５１の更新履歴テーブルに基づいて、命令実行の保留を指示（ＳＴＡＬＬＢ信号を出力）するとともに、保留の要因が解決（例えば、書き込み完了など）した場合に、保留の解除を指示する。レジスタ管理ユニット５０は、更新履歴テーブルに基づいて、自身のＰＥ１０のレジスタと、最も近い過去に実行されたＰＥ１０のレジスタとのいずれかからデータを、ＰＥ１０に読み込ませる。
【００８４】
レジスタ管理ユニット５０は、例えば、自身のＰＥ１０内のＲＡＷハザードが発生していない（「ＲＡＷ」が“０”である）場合、且つ、最も近い過去に実行されたＰＥ１０におけるレジスタへの書き込みが完了した場合に、最も近い過去に実行されたＰＥ１０のレジスタのデータを、読み込み要求のあったＰＥ１０に読み込ませる。また、レジスタ管理ユニット５０は、自身のＰＥ１０内のＲＡＷハザードが発生している（「ＲＡＷ」が“１”である）場合に、読み込み要求のあったＰＥ１０に、自身のレジスタのデータを読み込ませる。
【００８５】
次に、図６を参照して、レジスタ管理ユニット５０によるＲＡＷハザードが発生した際のＳＴＡＬＬＢ信号を生成する動作について説明する。
図６において、更新履歴情報ＥＮ２に対応するＰＥ１０−３（ＰＥ＿３）において、レジスタＲｅｇＸに読み出し命令が実行された場合に、ＰＥ１０−３（ＰＥ＿３）は、レジスタ管理ユニット５０にストールするか否かの問合せを行う。レジスタ管理ユニット５０は、ＰＥ１０−３（ＰＥ＿３）に対応する更新履歴情報ＥＮ２のＡフラグが“０”であるため、更新履歴情報ＥＮ２の「ＲＡＷ」を“０”のままとし、マルチプレクサ５２により、更新履歴情報ＥＮ１のＷフラグと更新履歴情報ＥＮ２の「ＲＡＷ」とに基づいてＳＴＡＬＬＢ信号にＬ状態を出力する。その結果、当該ＰＥ１０−３（ＰＥ＿３）が、レジスタＲｅｇＸの読み出し命令の実行を保留（ストール）する。
【００８６】
また、更新履歴情報ＥＮ１に対応するＰＥ１０において、レジスタＲｅｇＸにおける最後の書き込みが完了すると、レジスタ管理ユニット５０は、更新履歴情報ＥＮ１のＷフラグを“１”にする。その結果、レジスタ管理ユニット５０は、マルチプレクサ５２により、ＳＴＡＬＬＢ信号にＨ状態を出力し、当該ＰＥ１０が、レジスタＲｅｇＸの読み出し命令を再開する。
【００８７】
次に、図１２を参照して、本実施形態によるＰＥ１０間のプロセッサ１のＲＡＷハザード処理について説明する。
図１２は、本実施形態によるプロセッサ１のＰＥ１０間のＲＡＷハザード処理の一例を示す図である。
図１２は、２つのＰＥ１０（ＰＥ＿１、ＰＥ＿３）が並列に命令実行され、且つ、各ＰＥ１０がパイプライン処理を実行している状態を示している。また、図１２において、波形Ｗ１は、ＰＥ＿３の「ＲＡＷ」の論理状態を示し、波形Ｗ２は、ＰＥ＿３のＡフラグの論理状態を示している。また、波形Ｗ３は、ＰＥ＿１のＡフラグの論理状態を示し、波形Ｗ４は、ＰＥ＿１のＷフラグの論理状態を示し、波形Ｗ５は、ＰＥ＿３のＳＴＡＬＬＢ信号の論理状態を示している。なお、各波形において、横軸は、時間を示し、縦軸は、論理状態を示している。
【００８８】
例えば、時刻Ｔ１１において、ＰＥ１０−１（ＰＥ＿１）が、レジスタＲｅｇＸに書き込み命令を実行すると、レジスタ管理ユニット５０は、ＰＥ＿１に対応する管理情報のＡフラグを“１”（Ｈ状態）に更新する。
また、同様に時刻Ｔ１１において、ＰＥ１０−３（ＰＥ＿３）が、レジスタＲｅｇＸに読み出し命令を実行すると、レジスタ管理ユニット５０は、ＰＥ＿３に対応する管理情報の「ＲＡＷ」が“０”（Ｌ状態）であるため、マルチプレクサ５３によって、最も近い過去に実行されたＰＥ＿１をＲｅｇＸの読み込み元として選択する。また、レジスタ管理ユニット５０は、ＰＥ＿１に対応する管理情報のＷフラグと、ＰＥ＿３に対応する管理情報の「ＲＡＷ」とに基づいて、マルチプレクサ５２によって、ＰＥ＿３のＳＴＡＬＬＢ信号をＬ状態にする。その結果、ＰＥ＿３の命令実行が保留される。
【００８９】
次に、時刻Ｔ１２において、ＰＥ１０−１（ＰＥ＿１）が、レジスタＲｅｇＸに対する最後の書き込み命令を実行すると、レジスタ管理ユニット５０は、ＰＥ＿１に対応する管理情報のＷフラグを“１”（Ｈ状態）に更新する。レジスタ管理ユニット５０は、ＰＥ＿１に対応する管理情報のＷフラグと、ＰＥ＿３に対応する管理情報の「ＲＡＷ」とに基づいて、ＰＥ＿３のＳＴＡＬＬＢ信号をＨ状態にする。その結果、ＰＥ＿３の命令実行の保留が解除される。ここで、時刻Ｔ１１〜時刻Ｔ１２までの期間ＳＴ１が、ストール期間となる。この場合、ＰＥ１０−３（ＰＥ＿３）は、ＰＥ１０−１（ＰＥ＿１）によるレジスタＲｅｇＸの書き込みが完了した後に、レジスタＲｅｇＸの値を読み出すため、正常に命令を実行することができる。
【００９０】
次に、図１３を参照して、本実施形態によるプロセッサ１の自身のＰＥ１０内のＲＡＷハザード処理について説明する。
図１３は、本実施形態によるプロセッサ１の自身のＰＥ１０内のＲＡＷハザード処理の一例を示す図である。
図１３は、ＰＥ１０−３（ＰＥ＿３）が命令実行され、且つ、パイプライン処理を実行している状態を示している。また、図１３において、波形Ｗ６は、ＰＥ＿３の「ＲＡＷ」の論理状態を示し、波形Ｗ７は、ＰＥ＿３のＡフラグの論理状態を示している。また、波形Ｗ８は、ＰＥ＿３のＳＴＡＬＬＢ信号の論理状態を示している。なお、各波形において、横軸は、時間を示し、縦軸は、論理状態を示している。
【００９１】
例えば、時刻Ｔ２１において、ＰＥ１０−３（ＰＥ＿３）が、レジスタＲｅｇＸに書き込み命令を実行すると、レジスタ管理ユニット５０は、ＰＥ＿３に対応する管理情報のＡフラグを“１”（Ｈ状態）に更新する。
次に、時刻Ｔ２２において、ＰＥ１０−３（ＰＥ＿３）が、レジスタＲｅｇＸに読み出し命令を実行すると、レジスタ管理ユニット５０は、管理情報のＡフラグが“１”（Ｈ状態）であるため、ＰＥ＿３に対応する管理情報の「ＲＡＷ」を“１”（１状態）に更新する。そして、レジスタ管理ユニット５０は、マルチプレクサ５３によって、自身のＰＥ＿３をＲｅｇＸの読み込み元として選択する。また、レジスタ管理ユニット５０は、ＰＥ＿３に対応する管理情報のＡフラグと、ＰＥ＿３に対応する管理情報の「ＲＡＷ」とに基づいて、マルチプレクサ５２によって、ＰＥ＿３のＳＴＡＬＬＢ信号をＨ状態にする。その結果、ＰＥ＿３の命令実行が保留されずにそのまま実行される。
このように、自身のＰＥ１０において、レジスタＲｅｇＸに書き込みが実行されている場合には、ＰＥ１０は、自身のレジスタＲｅｇＸからデータを読み出す（読み込む）。
【００９２】
＜ストアバッファ処理＞
次に、本実施形態によるプロセッサ１のストアバッファ処理について説明する。
ストアバッファユニット６０は、ストアバッファ記憶部６１のストアバッファテーブルに基づいて、ロード命令に対して、当該ロード命令の「Ａｄｄｒ」を利用して、エントリテーブル記憶部６２の「ＦＩＦＯ」上の自身のストアバッファテーブルを含めた最も近いストアバッファテーブルを一つ検出する。ストアバッファユニット６０は、当該ストアバッファテーブルの中で、最も新しく（最も「ＬＰＣ」の値が大きく）、且つ当該ロード命令の「Ａｄｄｒ」の値が一致しているアクセス情報のデータをオペランドデータネットワークＮＷ２に出力する（ロードバイパス処理）。これにより、ストアバッファユニット６０は、データメモリ７１に過去に書き込んだ（ストアした）データを再利用して、再びデータメモリ７１から読み出す（ロードする）必要がないので高速にデータを読み出す（ロードする）ことができる。また、データメモリ７１から読み出したデータが更新されていない場合には、ストアバッファユニット６０は、データメモリ７１から過去に時間を掛けて読み出した（ロードした）データを再利用して、再びデータメモリ７１から読み出す（ロードする）必要がないので高速にデータを読み出す（ロードする）ことができる。
【００９３】
また、メモリ管理ユニット７０は、エントリテーブル記憶部６２の「ＦＩＦＯ」順に各ストアバッファテーブルを検索し、各ストアバッファテーブル上で逐次、「Ｌｄ」（ロード）あるいは「Ｓｔ」（ストア）のフラグが“１”である行に対するデータメモリ７１のアクセスを実行する。ストアバッファユニット６０は、ストアバッファテーブルを検索して該当「Ａｄｄｒ」を持つ行からロードバイパスし、このアクセスの終了とともに「完了」（完了フラグ）を“１”にする。なお、「完了」（完了フラグ）が“１”になった際に、レジスタ管理ユニット５０は、当該命令がロード命令である場合は、ロード先のレジスタに該当する「ＵＰＤ」及びＡフラグを“１”にする。また、レジスタ管理ユニット５０は、当該命令がそのレジスタの最後の書き込み（ロード命令）の場合には、該当するＷフラグを“１”にする。
【００９４】
また、ストアバッファユニット６０は、当該命令がストア命令の場合には、ストア元のレジスタを読み込む必要があるため、レジスタ管理ユニット５０の管理テーブルに問合せて、読み込み不可能である場合には、読み込み可能になるまで、命令実行を保留させる。また、レジスタの読み込み後に、ストアバッファユニット６０は、レジスタの値、及びアドレス値を、ストアバッファテーブルの「Ｄａｔａ」及び「Ａｄｄｒ」に記憶させる。また、ストアバッファユニット６０は、「終了」（終了フラグ）を“１”にする。
【００９５】
次に、メモリ管理ユニット７０は、ストアバッファテーブルの「Ｓｔ」が“１”である場合に、対応する「終了」（終了フラグ）が“１”になるまで待つ（ストール状態となる）。また、メモリ管理ユニット７０は、「終了」（終了フラグ）が“１”になった場合に、データメモリ７１へのメモリアクセスを開始し、当該ストア（書き込み）が完了した場合に、ストアバッファユニット６０に、該当する「完了」（完了フラグ）を“１”にさせて、次のメモリアクセスの処理に移る。
【００９６】
このように、ストアバッファユニット６０は、ＰＥ１０からデータメモリ７１にアクセス要求があった場合に、ストアバッファ記憶部６１が記憶する当該ＰＥ１０に対応するストアバッファテーブルに基づいて、データメモリ７１とのアクセスを制御する。
【００９７】
以上説明したように、本実施形態によるプロセッサ１は、複数のＰＥ１０（プロセッシングエレメント）と、実行管理ユニット４０（実行管理部）とを備えている。複数のＰＥ１０は、それぞれが、割り当てられたアトミックブロック（単位命令列）を一時記憶する命令キャッシュ部１１（一時記憶部）を有し、それぞれの命令キャッシュ部１１に記憶されたアトミックブロックに含まれる命令を実行可能に構成されている。実行管理ユニット４０は、アトミックブロックに分割し、分割した当該アトミックブロックを複数のＰＥ１０のそれぞれに逐次割り当て、割り当てたアトミックブロックを複数のＰＥ１０に並列実行させる。ここで、アトミックブロックは、アセンブリ言語以下のレベルの命令列であるプログラムを、途中に分岐命令を含まない命令列であって、分岐先の先頭命令を始端とし、分岐命令を終端とする命令列である。
【００９８】
これにより、本実施形態によるプロセッサ１は、アトミックブロック単位で、ＰＲ１０に割り当て、割り当てたアトミックブロックを複数のＰＥ１０に並列実行させるため、例えば、非数値計算処理を高速処理することができる。なお、本実施形態によるプロセッサ１は、以下のようなアプリケーションソフトウェアに有効である。
（１）単一スレッドに対して高速処理が求められるアプリケーション。
（２）複数のアトミックブロックで、且つ、用意されたＰＥ１０の数の範囲内でこのブロック群が構成されループ構造のあるアルゴリズムを持つアプリケーション。
（３）加えて複雑な制御フローを持つアルゴリズムで構成されたアプリケーション。
【００９９】
例えば、本実施形態によるプロセッサ１は、上記要件を満たす、非数値計算アプリケーションである、制御問題、グラフ問題、情報検索、コンピュータ支援型設計、定理証明などに有効である。
また、本実施形態によるプロセッサ１は、専用のコンパイラを用意する必要なしに、複数のＰＥ１０に並列実行させて、非数値計算処理を高速処理することができる。
【０１００】
また、本実施形態では、実行管理ユニット４０は、分割したアトミックブロックが複数のＰＥ１０のいずれの命令キャッシュ部１１にも記憶されていない場合に、当該アトミックブロックを複数のＰＥ１０のいずれかに割り当てる。そして、実行管理ユニット４０は、分割したアトミックブロックが複数のＰＥ１０のいずれかの命令キャッシュ部１１に既に記憶されている場合に、当該ＰＥ１０に、当該命令キャッシュ部１１に既に記憶されているアトミックブロックを並列実行させる。
これにより、本実施形態によるプロセッサ１は、アトミックブロック単位でＰＥ１０への割り当て及び並列実行を容易に実現することができる。
【０１０１】
また、本実施形態によるプロセッサ１は、プログラムにおけるアトミックブロックの先頭命令の位置を示す先頭位置情報（「ＢＴＡ」）と、当該アトミックブロックが有効であるか否かを示す有効情報（「有効フラグ」）と、次に実行するＰＥ１０を示す次実行情報（「ＰＴＲ１」、「ＰＴＲ２」）とを対応付けた管理情報を複数有する管理テーブルを記憶する管理テーブル記憶部４１を備える。実行管理ユニット４０は、プログラムに分岐命令が検出された際に、管理テーブル記憶部４１が記憶する管理テーブルに基づいて、次に実行するアトミックブロックが複数のＰＥ１０のいずれかの命令キャッシュ部１１に既に記憶されており、且つ有効な状態であるか否かを判定する。
これにより、本実施形態によるプロセッサ１は、キャッシュミス、及びキャッシュヒットの判定を管理テーブルに基づいてより容易に行うことができる。
【０１０２】
また、本実施形態では、実行管理ユニット４０は、プログラムに分岐命令が検出された際に、管理テーブル記憶部４１が記憶する管理テーブルから、次実行情報（「ＰＴＲ１」、「ＰＴＲ２」）に基づいて当該分岐命令の次に実行するアトミックブロックに対応する先頭位置情報（「ＢＴＡ」）及び有効情報（「有効フラグ」）を取得する。そして、実行管理ユニット４０は、取得した先頭位置情報の示す位置と、次に実行するプログラムの実行位置とが一致し、且つ、取得した有効情報が有効を示す場合に、次実行情報に一致するＰＥ１０が、アトミックブロックを命令キャッシュ部１１に記憶しており、且つ、有効な状態であると判定する。
これにより、本実施形態によるプロセッサ１は、キャッシュヒットを簡易な手法により適切に判定することができる。
【０１０３】
また、本実施形態では、実行管理ユニット４０は、取得した先頭位置情報の示す位置と、次に実行するプログラムの実行位置とが一致しない、又は取得した有効情報が無効を示す場合に、複数のＰＥ１０の１つに次に実行するアトミックブロックを割り当てるとともに、割り当てたアトミックブロックに対応させて、管理テーブルを更新する。
これにより、本実施形態によるプロセッサ１は、キャッシュミスの場合に、簡易な処方により、アトミックブロックを適切にＰＥ１０に割り当てることができる。
【０１０４】
また、本実施形態では、実行管理ユニット４０は、複数のＰＥ１０の１つに次に実行するアトミックブロックを割り当てる場合に、管理テーブルの当該アトミックブロックに対応する先頭位置情報（「ＢＴＡ」）を記憶させるとともに、有効情報（「有効フラグ」）を、無効を示す値に更新する。そして、実行管理ユニット４０は、ＰＥ１０が、当該アトミックブロックの実行を完了した場合に、当該アトミックブロックに対応する有効情報（「有効フラグ」）を、有効を示す値に更新する。
これにより、本実施形態によるプロセッサ１は、既に実行したアトミックブロックを適切に管理することができる。
【０１０５】
また、本実施形態では、ＰＥ１０は、パイプライン処理により命令を実行する。
これにより、本実施形態によるプロセッサ１は、パイプライン処理により、さらに高速に命令を実行することができる。
【０１０６】
また、本実施形態では、複数のＰＥ１０のそれぞれは、命令の実行に利用されるレジスタファイル部１２（レジスタ）を有している。プロセッサ１は、さらに、レジスタ管理ユニット５０（レジスタ管理部）を備えている。レジスタ管理ユニット５０は、複数のＰＥ１０の間で、レジスタの書き込み後の読み出しによるデータ依存であるＲＡＷハザードが発生した場合に、最も近い過去に当該レジスタに書き込みを実行しているＰＥ１０によるアトミックブロックの当該レジスタへの書き込みが完了するまで、当該レジスタの読み出しを実行するＰＥ１０の命令実行を保留させる。
これにより、本実施形態によるプロセッサ１は、ＲＡＷハザードが発生した場合においても、適切に命令を実行することができる。すなわち、本実施形態によるプロセッサ１は、ＰＥ１０のレジスタ間のデータ依存性を回避することができる。
【０１０７】
また、本実施形態によるプロセッサ１は、ＰＥ１０を識別するＰＥ識別情報（「ＰＥ＿１」など）と、アトミックブロックの実行において、レジスタが更新されたことを示す更新情報（「ＵＰＤ」）と、アトミックブロックにおけるレジスタの最後の書き込みが完了したことを示す完了情報（Ｗフラグ）と、レジスタの書き込みが実行されたことを示す実行情報（Ａフラグ）とを対応付けた更新履歴情報をＰＥ１０の個数分有する更新履歴テーブルを記憶する更新履歴記憶部５１を備えている。そして、レジスタ管理ユニット５０は、更新履歴記憶部５１が記憶する更新履歴テーブルに基づいて、ＰＥ１０間でＲＡＷハザードが発生したか否かを判定するとともに、ＰＥ１０間でＲＡＷハザードが発生した場合（例えば、「ＲＡＷ」が“０”の場合）に、更新履歴テーブルに含まれる、最も近い過去にレジスタに書き込みを実行しているＰＥ１０に対応する完了情報に基づいて、ＲＡＷハザードの発生したＰＥ１０の命令実行を保留させる。
これにより、本実施形態によるプロセッサ１は、更新履歴情報に基づいて、ＲＡＷハザードが発生した場合に、ＲＡＷハザードの発生したＰＥ１０の命令実行を適切に保留（ストール）させることができる。
【０１０８】
また、本実施形態では、レジスタ管理ユニット５０は、実行情報（Ａフラグ）に基づいて、ＲＡＷハザードが発生したか否かを判定し、更新情報（「ＵＰＤ」）に基づいて、最も近い過去にレジスタに書き込みを実行しているＰＥ１０を選択する。
これにより、本実施形態によるプロセッサ１は、簡易な手法により、ＲＡＷハザードの発生の検出、及び近い過去にレジスタに書き込みを実行しているＰＥ１０の選択を適切に行うことができる。
【０１０９】
また、本実施形態では、複数のＰＥ１０のそれぞれは、レジスタを複数備え、更新履歴記憶部５１は、複数のレジスタのそれぞれに対応する更新履歴テーブルを記憶する。
これにより、本実施形態によるプロセッサ１は、ＰＥ１０のそれぞれが、複数のレジスタを備える場合にも対応可能である。また、本実施形態によるプロセッサ１は、ＰＥ１０が、レジスタを多数（複数）備えることにより、より複雑な処理が可能になる。
【０１１０】
また、本実施形態によるプロセッサ１は、ストアバッファ記憶部６１と、ストアバッファユニット６０（ストアバッファ制御部）とを備えている。ストアバッファ記憶部６１は、アトミックブロックに含まれる各命令に対応するローカル位置情報（「ＬＰＣ」）と、データメモリ７１（外部記憶部）にアクセスした履歴を示すアクセス情報とを対応付けたストアバッファテーブルを、複数のＰＥ１０の個数分記憶する。ストアバッファユニット６０は、ＰＥ１０からデータメモリ７１にアクセス要求があった場合に、ストアバッファ記憶部６１が記憶する当該ＰＥ１０に対応するストアバッファテーブルに基づいて、データメモリ７１とのアクセスを制御する。
これにより、本実施形態によるプロセッサ１は、データメモリ７１とのアクセスにおいても適切に処理を行うことができる。また、本実施形態によるプロセッサ１は、ストアバッファ記憶部６１を利用することで、例えば、データメモリ７１から過去に読み出したデータ、または、ストアバッファ記憶部６１を介してデータメモリ７１に記憶させたデータを、再利用できるので、データアクセスの処理時間を短縮することができる。
【０１１１】
また、本実施形態では、アクセス情報には、アクセスの種別を示す種別情報（「Ｌｄ」、「Ｓｔ」など）と、データメモリ７１においてアクセスする記憶位置情報（「Ａｄｄｒ」）及びアクセスしたデータ（「Ｄａｔａ」）とが対応付けられている。ストアバッファユニット６０は、データメモリ７１からデータを読み出すアクセス要求に対して、ストアバッファテーブルに当該アクセス要求に対応するデータが存在する場合に、当該データをＰＥ１０に出力する。ストアバッファユニット６０は、ストアバッファテーブルに当該アクセス要求に対応するデータが存在しない場合に、データメモリ７１から読み出したデータをＰＥ１０に出力する。
これにより、本実施形態によるプロセッサ１は、簡易な手法により、適切にデータメモリ７１からデータを読み出すことができる。
【０１１２】
また、本実施形態では、ストアバッファユニット６０は、データメモリ７１にデータを書き込むアクセス要求に対して、ＰＥ１０に対応するストアバッファテーブルに、ローカル位置情報と、当該アクセス情報とを対応付けて記憶させるとともに、データメモリ７１に当該データを記憶させる。
これにより、本実施形態によるプロセッサ１は、簡易な手法により、適切にデータメモリ７１からデータを書き込むことができる。
【０１１３】
なお、本発明は、上記の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で変更可能である。
例えば、上記の実施形態において、実行管理ユニット４０が、管理テーブル記憶部４１を備える例を説明したが、実行管理ユニット４０の外部に、管理テーブル記憶部４１を備えるようにしてもよい。また、レジスタ管理ユニット５０が、更新履歴記憶部５１を備える例を説明したが、レジスタ管理ユニット５０の外部に、更新履歴記憶部５１を備えるようにしてもよい。また、ストアバッファユニット６０が、ストアバッファ記憶部６１及びエントリテーブル記憶部６２を備える例を説明したが、ストアバッファユニット６０の外部に、ストアバッファ記憶部６１とエントリテーブル記憶部６２とのいずれか一方又は両方を備えるようにしてもよい。
【０１１４】
また、上記の実施形態において、更新履歴記憶部５１及びエントリテーブル記憶部６２が、ＦＩＦＯに構成される例を説明したが、ポインタを設けて、サイクリック（循環）に構成してもよい。
また、上記の実施形態において、レジスタ管理ユニット５０が、命令の実行を保留、及び保留の解除をＰＥ１０に指示する例を説明したが、レジスタへの読み出し命令の際のレジスタ管理ユニット５０への問合せで、ＰＥ１０が自ら命令の実行を保留し、レジスタ管理ユニット５０が、問合せに対して保留の解除をＰＥ１０に指示するようにしてもよい。
【０１１５】
また、上記の実施形態において、プロセッサ１は、メモリ管理ユニット７０を介して、データメモリ７１とアクセスする例を説明したが、これに限定されるものではなく、キャッシュメモリを介してデータメモリ７１とアクセスするようにしてもよいし、データメモリ７１と直接アクセスするようにしてもよい。
また、実行管理ユニット４０の構成は、図４に示す構成に限定されるものではなく、実行管理ユニット４０は、他の構成により実現されてもよい。また、レジスタ管理ユニット５０の構成は、図６に示す構成に限定されるものではなく、レジスタ管理ユニット５０は、他の構成により実現されてもよい。
【０１１６】
また、上記の実施形態において、プロセッサ１が、実行管理ユニット４０及び管理テーブル記憶部４１を一か所により集中管理する例を説明したが、これに限定されるものではない。プロセッサ１は、例えば、実行管理ユニット４０及び管理テーブル記憶部４１の一部または全部を各ＰＥ１０に分散して備え、分散管理されるようにしてもよい。プロセッサ１は、このような分散型で実装された場合であっても、上記の実施形態と同様の効果を奏する。
【符号の説明】
【０１１７】
１…プロセッサ、１０，１０−１，１０−２，１０−３，１０−４，１０−Ｎ…ＰＥ、１１…命令キャッシュ部、１２…レジスタファイル部、１３…命令実行部、２０…ＰＣ更新部、２１…ＰＣ、３０…命令フェッチ部、３１…ＩＲ、４０…実行管理ユニット、４１…管理テーブル記憶部、４２…キャッシュミスハンドラ部、４３…プリデコーダ部、５０…レジスタ管理ユニット、５１…更新履歴記憶部、５２，５３…マルチプレクサ、４２２，４２３…ＡＮＤ回路、６０…ストアバッファユニット、６１…ストアバッファ記憶部、６２…エントリテーブル記憶部、７０…メモリ管理ユニット、７１…データメモリ、４２１…比較回路、４２４…ＬＲＵアービタ、４２５…ハンドラ部、ＮＷ１…命令ネットワーク、ＮＷ２…オペランドデータネットワーク
【図１】
2017134443.tif 000003
【図２】
2017134443.tif 000004
【図３】
2017134443.tif 000005
【図４】
2017134443.tif 000006
【図５】
2017134443.tif 000007
【図６】
2017134443.tif 000008
【図７】
2017134443.tif 000009
【図８】
2017134443.tif 000010
【図９】
2017134443.tif 000011
【図１０】
2017134443.tif 000012
【図１１】
2017134443.tif 000013
【図１２】
2017134443.tif 000014
【図１３】
2017134443.tif 000015
【手続補正書】
【提出日】平成29年6月6日(2017.6.6)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
それぞれが、割り当てられた単位命令列を一時記憶する一時記憶部を有し、それぞれの前記一時記憶部に記憶された前記単位命令列に含まれる命令を実行可能な複数のプロセッシングエレメントと、
アセンブリ言語以下のレベルの命令列であるプログラムを、途中に分岐命令を含まない命令列であって、分岐先の先頭命令を始端とし、分岐命令を終端とする命令列である前記単位命令列に分割し、分割した当該単位命令列を前記複数のプロセッシングエレメントのそれぞれに逐次割り当て、割り当てた前記単位命令列を前記複数のプロセッシングエレメントに並列実行させる実行管理部と、
前記プログラムにおける前記単位命令列の先頭命令の位置を示す先頭位置情報と、当該単位命令列が有効であるか否かを示す有効情報と、次に実行する前記プロセッシングエレメントを示す次実行情報とを対応付けた管理情報を複数有する管理テーブルを記憶する管理テーブル記憶部と
を備え、
前記実行管理部は、
分割した前記単位命令列が前記複数のプロセッシングエレメントのいずれの前記一時記憶部にも記憶されていない場合に、当該単位命令列を前記複数のプロセッシングエレメントのいずれかに割り当て、
分割した前記単位命令列が前記複数のプロセッシングエレメントのいずれかの前記一時記憶部に既に記憶されている場合に、当該プロセッシングエレメントに、当該一時記憶部に既に記憶されている前記単位命令列を並列実行させ、
前記プログラムに分岐命令が検出された際に、前記管理テーブル記憶部が記憶する前記管理テーブルに基づいて、次に実行する前記単位命令列が前記複数のプロセッシングエレメントのいずれかの前記一時記憶部に既に記憶されており、且つ有効な状態であるか否かを判定する
ことを特徴とするプロセッサ。
【請求項２】
前記実行管理部は、
前記プログラムに分岐命令が検出された際に、前記管理テーブル記憶部が記憶する前記管理テーブルから、前記次実行情報に基づいて当該分岐命令の次に実行する前記単位命令列に対応する前記先頭位置情報及び前記有効情報を取得し、
取得した前記先頭位置情報の示す位置と、次に実行する前記プログラムの実行位置とが一致し、且つ、取得した前記有効情報が有効を示す場合に、前記次実行情報に一致する前記プロセッシングエレメントが、前記単位命令列を前記一時記憶部に記憶しており、且つ、有効な状態であると判定する
ことを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記実行管理部は、
取得した前記先頭位置情報の示す位置と、次に実行する前記プログラムの実行位置とが一致しない、又は取得した前記有効情報が無効を示す場合に、前記複数のプロセッシングエレメントの１つに次に実行する前記単位命令列を割り当てるとともに、割り当てた前記単位命令列に対応させて、前記管理テーブルを更新する
ことを特徴とする請求項２に記載のプロセッサ。
【請求項４】
前記実行管理部は、
前記複数のプロセッシングエレメントの１つに次に実行する前記単位命令列を割り当てる場合に、前記管理テーブルの当該単位命令列に対応する前記先頭位置情報を記憶させるとともに、前記有効情報を、無効を示す値に更新し、
前記プロセッシングエレメントが、当該単位命令列の実行を完了した場合に、当該単位命令列に対応する前記有効情報を、有効を示す値に更新する
ことを特徴とする請求項３に記載のプロセッサ。
【請求項５】
前記プロセッシングエレメントは、パイプライン処理により前記命令を実行する
ことを特徴とする請求項１から請求項４のいずれか一項に記載のプロセッサ。
【請求項６】
前記複数のプロセッシングエレメントのそれぞれは、前記命令の実行に利用されるレジスタを有し、
さらに、前記複数のプロセッシングエレメントの間で、前記レジスタの書き込み後の読み出しによるデータ依存であるＲＡＷハザードが発生した場合に、最も近い過去に当該レジスタに書き込みを実行している前記プロセッシングエレメントによる前記単位命令列の当該レジスタへの書き込みが完了するまで、当該レジスタの読み出しを実行する前記プロセッシングエレメントの命令実行を保留させるレジスタ管理部を備える
ことを特徴とする請求項１から請求項５のいずれか一項に記載のプロセッサ。
【請求項７】
それぞれが、割り当てられた単位命令列を一時記憶する一時記憶部を有し、それぞれの前記一時記憶部に記憶された前記単位命令列に含まれる命令を実行可能な複数のプロセッシングエレメントと、
アセンブリ言語以下のレベルの命令列であるプログラムを、途中に分岐命令を含まない命令列であって、分岐先の先頭命令を始端とし、分岐命令を終端とする命令列である前記単位命令列に分割し、分割した当該単位命令列を前記複数のプロセッシングエレメントのそれぞれに逐次割り当て、割り当てた前記単位命令列を前記複数のプロセッシングエレメントに並列実行させる実行管理部と
を備え、
前記複数のプロセッシングエレメントのそれぞれは、前記命令の実行に利用されるレジスタを有し、
さらに、前記複数のプロセッシングエレメントの間で、前記レジスタの書き込み後の読み出しによるデータ依存であるＲＡＷハザードが発生した場合に、最も近い過去に当該レジスタに書き込みを実行している前記プロセッシングエレメントによる前記単位命令列の当該レジスタへの書き込みが完了するまで、当該レジスタの読み出しを実行する前記プロセッシングエレメントの命令実行を保留させるレジスタ管理部を備える
ことを特徴とするプロセッサ。
【請求項８】
前記プロセッシングエレメントを識別するＰＥ識別情報と、前記単位命令列の実行において、前記レジスタが更新されたことを示す更新情報と、前記単位命令列における前記レジスタの最後の書き込みが完了したことを示す完了情報と、前記レジスタの書き込みが実行されたことを示す実行情報とを対応付けた更新履歴情報を前記プロセッシングエレメントの個数分有する更新履歴テーブルを記憶する更新履歴記憶部を備え、
前記レジスタ管理部は、
前記更新履歴記憶部が記憶する更新履歴テーブルに基づいて、前記ＲＡＷハザードが発生したか否かを判定するとともに、
前記レジスタに対して読み込みを行う前記プロセッシングエレメントにおいて、前記プロセッシングエレメント内のＲＡＷハザードが発生せず、かつ、前記レジスタに対して読み込みを行う前記プロセッシングエレメントと当該レジスタに対して最も近い過去に書き込みを行う前記プロセッシングエレメントとの間で、前記プロセッシングエレメント間のＲＡＷハザードが発生した場合には、最も近い過去に書き込みを行う前記プロセッシングエレメントについての当該書き込み対象のレジスタに関する前記完了情報に基づいて、前記レジスタに対して読み込みを行う前記プロセッシングエレメントの命令実行を保留するか否かを制御する
ことを特徴とする請求項６又は請求項７に記載のプロセッサ。
【請求項９】
前記レジスタ管理部は、
前記レジスタに対して読み込みを行う前記プロセッシングエレメントについての当該読み込み対象のレジスタに関する前記実行情報に基づいて、前記レジスタに対して読み込みを行う前記プロセッシングエレメントにおいて、前記プロセッシングエレメント内のＲＡＷハザードが発生したか否かを判定する
ことを特徴とする請求項８に記載のプロセッサ。
【請求項１０】
前記複数のプロセッシングエレメントのそれぞれは、前記レジスタを複数備え、
前記更新履歴記憶部は、前記複数のレジスタのそれぞれに対応する前記更新履歴テーブルを記憶する
ことを特徴とする請求項８又は請求項９に記載のプロセッサ。
【請求項１１】
前記単位命令列に含まれる各命令に対応するローカル位置情報と、外部記憶部にアクセスした履歴を示すアクセス情報とを対応付けたストアバッファテーブルを、前記複数のプロセッシングエレメントの個数分記憶するストアバッファ記憶部と、
前記プロセッシングエレメントから前記外部記憶部にアクセス要求があった場合に、前記ストアバッファ記憶部が記憶する当該プロセッシングエレメントに対応する前記ストアバッファテーブルに基づいて、前記外部記憶部とのアクセスを制御するストアバッファ制御部と
を備えることを特徴とする請求項１から請求項１０のいずれか一項に記載のプロセッサ。
【請求項１２】
前記アクセス情報には、アクセスの種別を示す種別情報と、前記外部記憶部においてアクセスする記憶位置情報及びアクセスしたデータとが対応付けられており、
前記ストアバッファ制御部は、
前記外部記憶部からデータを読み出す前記アクセス要求に対して、前記ストアバッファテーブルに当該アクセス要求に対応する前記データが存在する場合に、当該データを前記プロセッシングエレメントに出力し、
前記ストアバッファテーブルに当該アクセス要求に対応する前記データが存在しない場合に、前記外部記憶部から読み出した前記データを前記プロセッシングエレメントに出力する
ことを特徴とする請求項１１に記載のプロセッサ。
【請求項１３】
前記ストアバッファ制御部は、
前記外部記憶部にデータを書き込む前記アクセス要求に対して、前記プロセッシングエレメントに対応する前記ストアバッファテーブルに、前記ローカル位置情報と、当該アクセス情報とを対応付けて記憶させるとともに、前記外部記憶部に当該データを記憶させる
ことを特徴とする請求項１１又は請求項１２に記載のプロセッサ。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００６
【補正方法】変更
【補正の内容】
【０００６】
上記問題を解決するために、本発明の一態様は、それぞれが、割り当てられた単位命令列を一時記憶する一時記憶部を有し、それぞれの前記一時記憶部に記憶された前記単位命令列に含まれる命令を実行可能な複数のプロセッシングエレメントと、アセンブリ言語以下のレベルの命令列であるプログラムを、途中に分岐命令を含まない命令列であって、分岐先の先頭命令を始端とし、分岐命令を終端とする命令列である前記単位命令列に分割し、分割した当該単位命令列を前記複数のプロセッシングエレメントのそれぞれに逐次割り当て、割り当てた前記単位命令列を前記複数のプロセッシングエレメントに並列実行させる実行管理部と、前記プログラムにおける前記単位命令列の先頭命令の位置を示す先頭位置情報と、当該単位命令列が有効であるか否かを示す有効情報と、次に実行する前記プロセッシングエレメントを示す次実行情報とを対応付けた管理情報を複数有する管理テーブルを記憶する管理テーブル記憶部とを備え、前記実行管理部は、分割した前記単位命令列が前記複数のプロセッシングエレメントのいずれの前記一時記憶部にも記憶されていない場合に、当該単位命令列を前記複数のプロセッシングエレメントのいずれかに割り当て、分割した前記単位命令列が前記複数のプロセッシングエレメントのいずれかの前記一時記憶部に既に記憶されている場合に、当該プロセッシングエレメントに、当該一時記憶部に既に記憶されている前記単位命令列を並列実行させ、前記プログラムに分岐命令が検出された際に、前記管理テーブル記憶部が記憶する前記管理テーブルに基づいて、次に実行する前記単位命令列が前記複数のプロセッシングエレメントのいずれかの前記一時記憶部に既に記憶されており、且つ有効な状態であるか否かを判定することを特徴とするプロセッサである。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０００７
【補正方法】削除
【補正の内容】
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】０００８
【補正方法】削除
【補正の内容】
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００１３
【補正方法】変更
【補正の内容】
【００１３】
また、本発明の一態様は、上記のプロセッサにおいて、前記複数のプロセッシングエレメントのそれぞれは、前記命令の実行に利用されるレジスタを有し、さらに、前記複数のプロセッシングエレメントの間で、前記レジスタの書き込み後の読み出しによるデータ依存であるＲＡＷハザードが発生した場合に、最も近い過去に当該レジスタに書き込みを実行している前記プロセッシングエレメントによる前記単位命令列の当該レジスタへの書き込みが完了するまで、当該レジスタの読み出しを実行する前記プロセッシングエレメントの命令実行を保留させるレジスタ管理部を備えることを特徴とする。
また、本発明の一態様は、それぞれが、割り当てられた単位命令列を一時記憶する一時記憶部を有し、それぞれの前記一時記憶部に記憶された前記単位命令列に含まれる命令を実行可能な複数のプロセッシングエレメントと、アセンブリ言語以下のレベルの命令列であるプログラムを、途中に分岐命令を含まない命令列であって、分岐先の先頭命令を始端とし、分岐命令を終端とする命令列である前記単位命令列に分割し、分割した当該単位命令列を前記複数のプロセッシングエレメントのそれぞれに逐次割り当て、割り当てた前記単位命令列を前記複数のプロセッシングエレメントに並列実行させる実行管理部とを備え、前記複数のプロセッシングエレメントのそれぞれは、前記命令の実行に利用されるレジスタを有し、さらに、前記複数のプロセッシングエレメントの間で、前記レジスタの書き込み後の読み出しによるデータ依存であるＲＡＷハザードが発生した場合に、最も近い過去に当該レジスタに書き込みを実行している前記プロセッシングエレメントによる前記単位命令列の当該レジスタへの書き込みが完了するまで、当該レジスタの読み出しを実行する前記プロセッシングエレメントの命令実行を保留させるレジスタ管理部を備えることを特徴とするプロセッサである。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００１４
【補正方法】変更
【補正の内容】
【００１４】
また、本発明の一態様は、上記のプロセッサにおいて、前記プロセッシングエレメントを識別するＰＥ識別情報と、前記単位命令列の実行において、前記レジスタが更新されたことを示す更新情報と、前記単位命令列における前記レジスタの最後の書き込みが完了したことを示す完了情報と、前記レジスタの書き込みが実行されたことを示す実行情報とを対応付けた更新履歴情報を前記プロセッシングエレメントの個数分有する更新履歴テーブルを記憶する更新履歴記憶部を備え、前記レジスタ管理部は、前記更新履歴記憶部が記憶する更新履歴テーブルに基づいて、前記ＲＡＷハザードが発生したか否かを判定するとともに、前記レジスタに対して読み込みを行う前記プロセッシングエレメントにおいて、前記プロセッシングエレメント内のＲＡＷハザードが発生せず、かつ、前記レジスタに対して読み込みを行う前記プロセッシングエレメントと当該レジスタに対して最も近い過去に書き込みを行う前記プロセッシングエレメントとの間で、前記プロセッシングエレメント間のＲＡＷハザードが発生した場合には、最も近い過去に書き込みを行う前記プロセッシングエレメントについての当該書き込み対象のレジスタに関する前記完了情報に基づいて、前記レジスタに対して読み込みを行う前記プロセッシングエレメントの命令実行を保留するか否かを制御することを特徴とする。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００１５
【補正方法】変更
【補正の内容】
【００１５】
また、本発明の一態様は、上記のプロセッサにおいて、前記レジスタ管理部は、前記レジスタに対して読み込みを行う前記プロセッシングエレメントについての当該読み込み対象のレジスタに関する前記実行情報に基づいて、前記レジスタに対して読み込みを行う前記プロセッシングエレメントにおいて、前記プロセッシングエレメント内のＲＡＷハザードが発生したか否かを判定することを特徴とする。