JP2017134443A - プロセッサ - Google Patents

プロセッサ Download PDF

Info

Publication number
JP2017134443A
JP2017134443A JP2016011234A JP2016011234A JP2017134443A JP 2017134443 A JP2017134443 A JP 2017134443A JP 2016011234 A JP2016011234 A JP 2016011234A JP 2016011234 A JP2016011234 A JP 2016011234A JP 2017134443 A JP2017134443 A JP 2017134443A
Authority
JP
Japan
Prior art keywords
unit
instruction
register
execution
storage unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2016011234A
Other languages
English (en)
Other versions
JP6167193B1 (ja
Inventor
茂幸 高野
Shigeyuki Takano
茂幸 高野
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Dwango Co Ltd
Original Assignee
Dwango Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Dwango Co Ltd filed Critical Dwango Co Ltd
Priority to JP2016011234A priority Critical patent/JP6167193B1/ja
Application granted granted Critical
Publication of JP6167193B1 publication Critical patent/JP6167193B1/ja
Publication of JP2017134443A publication Critical patent/JP2017134443A/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

【課題】非数値計算処理を高速処理可能なプロセッサを提供する。【解決手段】プロセッサ1は、複数のプロセッシングエレメント10−1〜10−Nと実行管理部40とを備える。各プロセッシングエレメントそれぞれは、割り当てられた単位命令列を一時記憶する一時記憶部11を有し、それぞれの一時記憶部に記憶された単位命令列に含まれる命令を実行可能である。実行管理部は、アセンブリ言語以下のレベルの命令列であるプログラムを、途中に分岐命令を含まない命令列であって、分岐先の先頭命令を始端とし、分岐命令を終端とする命令列である単位命令列に分割し、分割した当該単位命令列を複数のプロセッシングエレメントのそれぞれに逐次割り当て、割り当てた単位命令列を複数のプロセッシングエレメントに並列実行させる。【選択図】図1

Description

本発明は、プロセッサに関する。
近年、プログラムを命令レベルで並列処理してプロセッサの高速処理を実現する技術が知られている(例えば、非特許文献1を参照)。このような技術を使用した従来のプロセッサでは、より多くの命令を並列処理するために、例えば、コンパイラによりプログラムを最適化する静的最適化手法や、分岐予測及び投機的実行を行うなどの動的手法が行われている。
G. S. Sohi, S. Breach, and T. N. Vijaykumar , Multiscalar Processors, 22th International Symposium on Computer Architecture (ISCA-22), 1995
しかしながら、上述した従来のプロセッサでは、例えば、プロセッサの一般的な応用である非数値計算処理に対して充分に高速処理が得られない場合があり、非数値計算処理に対して高速処理が可能なプロセッサが求められている。
本発明は、上記問題を解決すべくなされたもので、その目的は、非数値計算処理を高速処理することができるプロセッサを提供することにある。
上記問題を解決するために、本発明の一態様は、それぞれが、割り当てられた単位命令列を一時記憶する一時記憶部を有し、それぞれの前記一時記憶部に記憶された前記単位命令列に含まれる命令を実行可能な複数のプロセッシングエレメントと、アセンブリ言語以下のレベルの命令列であるプログラムを、途中に分岐命令を含まない命令列であって、分岐先の先頭命令を始端とし、分岐命令を終端とする命令列である前記単位命令列に分割し、分割した当該単位命令列を前記複数のプロセッシングエレメントのそれぞれに逐次割り当て、割り当てた前記単位命令列を前記複数のプロセッシングエレメントに並列実行させる実行管理部とを備えることを特徴とするプロセッサである。
また、本発明の一態様は、上記のプロセッサにおいて、前記実行管理部は、分割した前記単位命令列が前記複数のプロセッシングエレメントのいずれの前記一時記憶部にも記憶されていない場合に、当該単位命令列を前記複数のプロセッシングエレメントのいずれかに割り当て、分割した前記単位命令列が前記複数のプロセッシングエレメントのいずれかの前記一時記憶部に既に記憶されている場合に、当該プロセッシングエレメントに、当該一時記憶部に既に記憶されている前記単位命令列を並列実行させることを特徴とする。
また、本発明の一態様は、上記のプロセッサにおいて、前記プログラムにおける前記単位命令列の先頭命令の位置を示す先頭位置情報と、当該単位命令列が有効であるか否かを示す有効情報と、次に実行する前記プロセッシングエレメントを示す次実行情報とを対応付けた管理情報を複数有する管理テーブルを記憶する管理テーブル記憶部を備え、前記実行管理部は、前記プログラムに分岐命令が検出された際に、前記管理テーブル記憶部が記憶する前記管理テーブルに基づいて、次に実行する前記単位命令列が前記複数のプロセッシングエレメントのいずれかの前記一時記憶部に既に記憶されており、且つ有効な状態であるか否かを判定することを特徴とする。
また、本発明の一態様は、上記のプロセッサにおいて、前記実行管理部は、前記プログラムに分岐命令が検出された際に、前記管理テーブル記憶部が記憶する前記管理テーブルから、前記次実行情報に基づいて当該分岐命令の次に実行する前記単位命令列に対応する前記先頭位置情報及び前記有効情報を取得し、取得した前記先頭位置情報の示す位置と、次に実行する前記プログラムの実行位置とが一致し、且つ、取得した前記有効情報が有効を示す場合に、前記次実行情報に一致する前記プロセッシングエレメントが、前記単位命令列を前記一時記憶部に記憶しており、且つ、有効な状態であると判定することを特徴とする。
また、本発明の一態様は、上記のプロセッサにおいて、前記実行管理部は、取得した前記先頭位置情報の示す位置と、次に実行する前記プログラムの実行位置とが一致しない、又は取得した前記有効情報が無効を示す場合に、前記複数のプロセッシングエレメントの1つに次に実行する前記単位命令列を割り当てるとともに、割り当てた前記単位命令列に対応させて、前記管理テーブルを更新することを特徴とする。
また、本発明の一態様は、上記のプロセッサにおいて、前記実行管理部は、前記複数のプロセッシングエレメントの1つに次に実行する前記単位命令列を割り当てる場合に、前記管理テーブルの当該単位命令列に対応する前記先頭位置情報を記憶させるとともに、前記有効情報を、無効を示す値に更新し、前記プロセッシングエレメントが、当該単位命令列の実行を完了した場合に、当該単位命令列に対応する前記有効情報を、有効を示す値に更新することを特徴とする。
また、本発明の一態様は、上記のプロセッサにおいて、前記プロセッシングエレメントは、パイプライン処理により前記命令を実行することを特徴とする。
また、本発明の一態様は、上記のプロセッサにおいて、前記複数のプロセッシングエレメントのそれぞれは、前記命令の実行に利用されるレジスタを有し、さらに、前記複数のプロセッシングエレメントの間で、前記レジスタの書き込み後の読み出しによるデータ依存であるRAWハザードが発生した場合に、最も近い過去に当該レジスタに書き込みを実行している前記プロセッシングエレメントによる前記単位命令列の当該レジスタへの書き込みが完了するまで、当該レジスタの読み出しを実行する前記プロセッシングエレメントの命令実行を保留させるレジスタ管理部を備えることを特徴とする。
また、本発明の一態様は、上記のプロセッサにおいて、前記プロセッシングエレメントを識別するPE識別情報と、前記単位命令列の実行において、前記レジスタが更新されたことを示す更新情報と、前記単位命令列における前記レジスタの最後の書き込みが完了したことを示す完了情報と、前記レジスタの書き込みが実行されたことを示す実行情報とを対応付けた更新履歴情報を前記プロセッシングエレメントの個数分有する更新履歴テーブルを記憶する更新履歴記憶部を備え、前記レジスタ管理部は、前記更新履歴記憶部が記憶する更新履歴テーブルに基づいて、前記RAWハザードが発生したか否かを判定するとともに、前記RAWハザードが発生した場合に、前記更新履歴テーブルに含まれる、最も近い過去に前記レジスタに書き込みを実行している前記プロセッシングエレメントに対応する完了情報に基づいて、前記RAWハザードの発生した前記プロセッシングエレメントの命令実行を保留させることを特徴とする。
また、本発明の一態様は、上記のプロセッサにおいて、前記レジスタ管理部は、前記実行情報に基づいて、前記RAWハザードが発生したか否かを判定し、前記更新情報に基づいて、最も近い過去に前記レジスタに書き込みを実行している前記プロセッシングエレメントを選択することを特徴とする。
また、本発明の一態様は、上記のプロセッサにおいて、前記複数のプロセッシングエレメントのそれぞれは、前記レジスタを複数備え、前記更新履歴記憶部は、前記複数のレジスタのそれぞれに対応する前記更新履歴テーブルを記憶することを特徴とする。
また、本発明の一態様は、上記のプロセッサにおいて、前記単位命令列に含まれる各命令に対応するローカル位置情報と、外部記憶部にアクセスした履歴を示すアクセス情報とを対応付けたストアバッファテーブルを、前記複数のプロセッシングエレメントの個数分記憶するストアバッファ記憶部と、前記プロセッシングエレメントから前記外部記憶部にアクセス要求があった場合に、前記ストアバッファ記憶部が記憶する当該プロセッシングエレメントに対応する前記ストアバッファテーブルに基づいて、前記外部記憶部とのアクセスを制御するストアバッファ制御部とを備えることを特徴とする。
また、本発明の一態様は、上記のプロセッサにおいて、前記アクセス情報には、アクセスの種別を示す種別情報と、前記外部記憶部においてアクセスする記憶位置情報及びアクセスしたデータとが対応付けられており、前記ストアバッファ制御部は、前記外部記憶部からデータを読み出す前記アクセス要求に対して、前記ストアバッファテーブルに当該アクセス要求に対応する前記データが存在する場合に、当該データを前記プロセッシングエレメントに出力し、前記ストアバッファテーブルに当該アクセス要求に対応する前記データが存在しない場合に、前記外部記憶部から読み出した前記データを前記プロセッシングエレメントに出力することを特徴とする。
また、本発明の一態様は、上記のプロセッサにおいて、前記ストアバッファ制御部は、前記外部記憶部にデータを書き込む前記アクセス要求に対して、前記プロセッシングエレメントに対応する前記ストアバッファテーブルに、前記ローカル位置情報と、当該アクセス情報とを対応付けて記憶させるとともに、前記外部記憶部に当該データを記憶させることを特徴とする。
本発明によれば、非数値計算処理を高速処理することができる。
本実施形態によるプロセッサの一例を示すブロック図である。 本実施形態におけるアトミックブロックの一例を説明する図である。 本実施形態におけるPEの構成例を示すブロック図である。 本実施形態における実行管理ユニットの構成例を示すブロック図である。 本実施形態における更新履歴記憶部の構成例を示す図である。 本実施形態におけるレジスタ管理ユニットの一例を示すブロック図である。 本実施形態におけるストアバッファ記憶部の構成例を示す図である。 本実施形態におけるエントリテーブル記憶部の構成例を示す図である。 本実施形態におけるPEの状態遷移の一例を示す図である。 本実施形態によるプロセッサのパイプライン処理の一例を示す図である。 本実施形態によるPEの並列処理の一例を示す図である。 本実施形態によるプロセッサのPE間のRAWハザード処理の一例を示す図である。 本実施形態によるプロセッサの自身のPE内のRAWハザード処理の一例を示す図である。
以下、本発明の一実施形態によるプロセッサについて図面を参照して説明する。
図1は、本実施形態によるプロセッサ1の一例を示すブロック図である。
図1に示すように、プロセッサ1は、複数(例えば、N個)のプロセッシングエレメント(10−1、10−2、・・・、10−N)と、PC(プログラムカウンタ)更新部20と、命令フェッチ部30と、実行管理ユニット40と、レジスタ管理ユニット50と、ストアバッファユニット60と、メモリ管理ユニット70とを備えている。プロセッサ1は、メモリ管理ユニット70を介してデータメモリ71に接続されている。
なお、「プロセッシングエレメント」は、以下の説明において、「PE」(Processing Element)と表記する。また、PE10−1、PE10−2、・・・10−Nのそれぞれは、同一の構成であり、本実施形態において、プロセッサ1が備える任意のPEを示す場合、又は特に区別しない場合には、PE10として説明する。なお、本実施形態において、PE10の個数は、例えば、8個である。
PC更新部20は、PC(プログラムカウンタ)21を有し、PC21を更新する。ここで、PC21は、プログラムを記憶するプログラムメモリ(不図示)の命令実行位置を示すアドレス(位置情報)を格納するレジスタである。PC更新部20は、通常の命令実行ごとに、PC21を“+IL”するとともに、分岐命令が実行された場合には、指定された分岐先のアドレスにPC21を更新する。ここで、“IL”は、命令固定長を示す。また、PC更新部20は、PC21が記憶するPC値を、アドレスとしてプログラムメモリに出力する。
命令フェッチ部30は、IR(命令レジスタ)31を有し、PC更新部20から出力されたアドレスに応じて、プログラムメモリが出力した命令(Instruction)をIR31に記憶(格納)させる。ここで、IR31は、プログラムメモリから読み出した命令を格納するレジスタである。命令フェッチ部30は、IR31に記憶させた命令を実行管理ユニットに出力するとともに、命令ネットワークNW1を介して、PE10に供給する。
独立した複数のPE10のそれぞれは、アセンブリ言語以下のレベルの命令列であるプログラムを分割したアトミックブロックを、展開連結リスト(Unrolled Linked List)のリストエントリ(入力データ)として、アトミックブロックに含まれる命令を実行する。ここで、アトミックブロック(単位命令列の一例)とは、アセンブリ言語以下のレベルの命令列であるプログラムを、途中に分岐命令を含まない命令列であって、分岐先の先頭命令を始端とし、分岐命令を終端とする命令列である。
図2は、本実施形態におけるアトミックブロックの一例を説明する図である。
図2(a)は、アセンブリ言語で記述されたプログラム(PR1)の一例を示すリストである。また、図2(b)は、図2(a)に示すプログラム(PR1)をアトミックブロックに分割して、展開連結リストにした一例である。
図2(b)に示すように、プログラム(PR1)は、アトミックブロックAB_A〜AB_Eに分割される。例えば、アトミックブロックAB_Dは、始点(始端)が、分岐先の先頭命令である“add r2,r2,r1”(命令I1)であり、終点(終端)が、分岐命令である“bneq loop”(命令I2)である。
このように、本実施形態によるプロセッサ1では、プログラムをアトミックブロックに分割し、図2(c)に示すような展開連結リストにし、各アトミックブロックを各PE10に実行させる。図2(c)に示す例は、図2(a)に示すプログラムを展開連結リストにしたものである。ここで、プロセッサ1は、「アトミックブロックA」(AB_A)から「アトミックブロックB」(AB_B)が実行させ、「アトミックブロックB」(AB_B)において、「アトミックブロックC」(AB_C)と、「アトミックブロックD」(AB_D)とに分岐さる処理を実行する。また、プロセッサ1は、「アトミックブロックB」(AB_B)と続く「アトミックブロックD」(AB_D)とにより条件付きループを実行させる。なお、図2(c)において、斜線部分は、分岐命令を示している。
図1に戻り、複数のPE10は、それぞれが、割り当てられたアトミックブロックを一時記憶する命令キャッシュ部11を有し、それぞれの命令キャッシュ部11に記憶されたアトミックブロックに含まれる命令を実行可能である。
ここで、図3を参照して、PE10の構成について説明する。
図3は、本実施形態におけるPE10の構成例を示すブロック図である。
図3に示すように、PE10は、命令キャッシュ部11と、レジスタファイル部12と、命令実行部13とを備えている。
命令キャッシュ部11(一時記憶部の一例)は、命令フェッチ部30から出力された命令をキャッシュとして記憶するレジスタ群である。命令キャッシュ部11は、例えば、キャッシュレジスタ(C1)〜キャッシュレジスタ(CM)のM個のレジスタを有し、アトミックブロックを記憶する。ここで、キャッシュレジスタの個数Mは、例えば、1つのアトミックブロックが格納可能なサイズであり、例えば、16である。
レジスタファイル部12は、PE10による演算結果やデータメモリから読み出したデータなどを記憶するレジスタ群であり、命令の実行に利用される。レジスタファイル部12は、複数の汎用レジスタ(例えば、Reg1〜RegR)、及び制御レジスタを備えている。すなわち、レジスタファイル部12は、汎用レジスタ(Reg1)〜汎用レジスタ(RegR)のR個のレジスタ、及び制御レジスタを有し、命令の実行に利用される。なお、各PE10が備えるレジスタファイル部12の間のデータ通信は、オペランドデータネットワークNW2を介して実行される。なお、以下の説明において、汎用レジスタ及び制御レジスタを単に「レジスタ」と表記して説明する。
命令実行部13は、例えば、命令デコーダ及びALU(Arithmetic Logic Unit)などを有し、命令フェッチ部30から出力された命令、又は命令キャッシュ部11が記憶する命令を実行する。
なお、PE10は、アトミックブロックの初回の実行において、命令フェッチ部30から出力された命令を命令実行部13に実行させつつ、順番に命令キャッシュ部11に記憶させるようにしてもよいし、命令フェッチ部30から出力された命令を順番に命令キャッシュ部11に記憶させ、当該命令キャッシュ部11から命令を読み出して、命令実行部13に実行させてもよい。また、PE10は、アトミックブロックの2回目の実行において、命令キャッシュ部11から順番に命令を読み出して、命令実行部13に実行させる。
また、PE10は、命令キャッシュ部11が記憶する命令をパイプライン処理により、並列に実行可能に構成されているものとする。
再び、図1に戻り、実行管理ユニット40(実行管理部の一例)は、プログラムをアトミックブロックに分割し、分割した当該アトミックブロックを複数のPE10のそれぞれに逐次割り当て、割り当てたアトミックブロックを複数のPE10に並列実行させる。実行管理ユニット40は、分割したアトミックブロックが複数のPE10のいずれの命令キャッシュ部11にも記憶されていない場合(キャッシュミスの場合)に、当該アトミックブロックを複数のPE10のいずれかに割り当てる。また、実行管理ユニット40は、分割したアトミックブロックが複数のPE10のいずれかの命令キャッシュ部11に既に記憶されている場合(キャッシュヒットの場合)に、当該PE10に、当該命令キャッシュ部11に既に記憶されているアトミックブロックを並列実行させる。
また、実行管理ユニット40は、プログラムに分岐命令が検出された際に、後述する管理テーブル記憶部41が記憶する管理テーブルに基づいて、次に実行するアトミックブロックが複数のPE10のいずれかの命令キャッシュ部11に既に記憶されており、且つ有効な状態であるか否かを判定する。実行管理ユニット40は、次に実行するアトミックブロックが複数のPE10のいずれかの命令キャッシュ部11に既に記憶されており、且つ有効な状態であると判定した場合(キャッシュヒットの場合)に。当該PE10に、命令キャッシュ部11に記憶されているアトミックブロックを実行させる。
ここで、図4を参照して、本実施形態における実行管理ユニット40の構成について説明する。
図4は、本実施形態における実行管理ユニット40の構成例を示すブロック図である。
図4に示すように、実行管理ユニット40は、管理テーブル記憶部41と、キャッシュミスハンドラ部42と、プリデコーダ部43とを備えている。
管理テーブル記憶部41は、例えば、レジスタにより構成される記憶であり、「PE_NO」と、「BTA」と、「有効フラグ」と、「LGT」と、「PTR1」と、「PTR2」とを対応付けた管理情報を複数有する管理テーブルを記憶する。ここで。「PE_NO」は、PE10の番号を示し、管理情報の数は、PE10の個数であるN個である。また、「BTA」は、ブランチターゲットアドレスであり、分岐ターゲット命令のアドレスを示す。すなわち、「BTA」は、プログラムにおけるアトミックブロックの先頭命令の位置を示す先頭位置情報(先頭アドレス)である。
また、「有効フラグ」は、当該管理情報(当該PE10)が有効であるか否か示すフラグ情報である。すなわち、「有効フラグ」は、当該アトミックブロックが有効であるか否かを示す有効情報である。「有効フラグ」は、例えば、“1”である場合に有効を示し、“0”である場合に無効を示す。また、「LGT」は、アトミックブロックのブロック長を示す。
また、「PTR1」及び「PTR2」は、次に実行されるアトミックブロックの当該管理テーブルにおける行番号(ポインタ)である。すなわち、「PTR1」及び「PTR2」は、次に実行するPE10を示す次実行情報である。なお、本実施形態では、分岐命令が、例えば、2つの分岐先を持つ場合の一例であるため、「PTR1」及び「PTR2」の2つのポインタを有しているが、例えば、分岐命令が、M個の分岐先を持つ場合には、M個のポインタを有することになる。
図4に示す例では、例えば、「PE_NO」が“1”であるPE10には、「BTA」(先頭アドレス)が“XXXX”であり、「有効フラグ」が“1”、「LGT」(ブロック長)が、“10”であるアトミックブロックが割り当てられていることを示している。また、当該アトミックブロックが次に実行する「PTR1」が“2”であり、「PTR2」が“3”であることを示している。すなわち、次に実行するPR10が、「PR_NO」が“2”又は“3”であることを示している。
プリデコーダ部43は、命令フェッチ部30から出力された命令をデコードして、分岐命令を判定する。
キャッシュミスハンドラ部42は、アトミックブロックのPE10への割り当て及び実行を制御する。キャッシュミスハンドラ部42は、例えば、アトミックブロックがキャッシュミスである場合に、キャッシュミスハンドラ部42は、複数のPE10のうちの1つに、アトミックブロックを割り当て、当該PE10に実行させる。また、キャッシュミスハンドラ部42は、次に実行するアトミックブロックがキャッシュヒットである場合に、当該ヒットしたPE10に、既に命令キャッシュ部11に記憶されているアトミックブロックを実行させる。
また、プリデコーダ部43は、比較回路421と、AND(アンド)回路422と、AND回路423と、LRU(Least Recently Used)アービタ424と、ハンドラ部425とを備えている。
比較回路421は、PC21の値であるPC値と、管理テーブル記憶部41が記憶する次に実行予定のアトミックブロック(PE10)の「BTA」とが一致するか否かを比較する。比較回路421は、例えば、一致する場合に、H状態(High状態(“1”状態))を出力し、不一致の場合に、L状態(Low状態(“0”状態))を出力する。
AND回路422は、比較回路421の出力と、次に実行予定のアトミックブロック(PE10)の「有効フラグ」との論理積演算の結果を出力する。
AND回路423は、AND回路422の出力と、プリデコーダ部43から出力される分岐命令を示す分岐命令信号との論理積演算の結果を、HIT信号として出力する。このHIT信号は、次の実行予定のPE10に対してキャッシュヒットであることを示す信号である。すなわち、AND回路423は、キャッシュヒットである場合に、H状態を出力する。
LRUアービタ424は、次に実行予定のアトミックブロック(PE10)がキャッシュミスである場合に、複数のPE10の中から、次に使用するPE10を選択する。LRUアービタ424は、例えば、「使われてから最も長い時間が経ったもの」又は「参照される頻度が最も低いもの」のPE10を選択する。
ハンドラ部425は、キャッシュミスハンドラ部42を制御する。ハンドラ部425は、例えば、キャッシュヒットしたPE10に、命令キャッシュ部11に記憶されている命令を実行させる。また、ハンドラ部425は、例えば、次の実行予定のPE10の「LGT」をPC更新部20に出力させて、PC21の値を、「LGT」の値に更新させる。
また、ハンドラ部425は、キャッシュミスの場合に、LRUアービタ424によって選択されたPE10に対応する管理情報を更新する。すなわち、ハンドラ部425は、キャッシュミスの場合に、管理テーブル記憶部41の対応する「PE_NO」の行に、上述した「BTA」と、「有効フラグ」と、「LGT」と、「PTR1」と、「PTR2」とを対応付けた管理情報を記憶させる。
このように、実行管理ユニット40は、プログラムに分岐命令が検出された際に、管理テーブル記憶部41が記憶する管理テーブルから、次実行情報(「PTR1」又は「PTR2」)に基づいて当該分岐命令の次に実行するアトミックブロックに対応する「BTA」(先頭位置情報)及び「有効フラグ」(有効情報)を取得する。実行管理ユニット40は、取得した「BTA」の示す位置と、次に実行するプログラムの実行位置(PC値)とが一致し、且つ、取得した「有効フラグ」が有効を示す場合に、次実行情報(「PTR1」又は「PTR2」)に一致するPE10が、アトミックブロックを命令キャッシュ部11に記憶しており、且つ、有効な状態であると判定する。
また、実行管理ユニット40は、取得した「BTA」の示す位置と、次に実行するプログラムの実行位置とが一致しない、又は取得した有効情報が無効を示す場合に、複数のPE10の1つに次に実行するアトミックブロックを割り当てるとともに、割り当てたアトミックブロックに対応させて、管理テーブルを更新する。
また、実行管理ユニット40は、複数のPE10の1つに次に実行するアトミックブロックを割り当てる場合に、管理テーブルの当該アトミックブロックに対応する「LGT」を記憶させるとともに、「有効フラグ」を、無効を示す値(例えば、“0”)に更新する。実行管理ユニット40は、PE10が、当該アトミックブロックの実行を完了した場合に、当該アトミックブロックに対応する「有効フラグ」を、有効を示す値(例えば、“1”)に更新する。
再び、図1に戻り、レジスタ管理ユニット50(レジスタ管理部の一例)は、各PE10が備えるレジスタファイル部12のレジスタを管理する。レジスタ管理ユニット50は、特定のレジスタについて、複数のアトミックブロックに横断してデータ依存性がある場合に、PE10を制御して、データ依存性を回避する。レジスタ管理ユニット50は、例えば、複数のPE10の間で、レジスタの書き込み後の読み出しによるデータ依存であるRAWハザードが発生した場合に、最も近い過去に当該レジスタに書き込みを実行しているPE10によるアトミックブロックの当該レジスタへの書き込みが完了するまで、当該レジスタの読み出しを実行するPE10の命令実行を保留(STALL(ストール))させる。レジスタ管理ユニット50は、更新履歴記憶部51を備えている。
更新履歴記憶部51は、例えば、レジスタにより構成される記憶であり、図5に示すように、「FIFO」と、「UPD」と、「W/A」と、「RAW」と、「ACT」とを対応付けた更新履歴情報を記憶する。更新履歴記憶部51は、更新履歴情報を複数有する更新履歴テーブルを記憶する。また、更新履歴記憶部51は、FIFO(First In First Out)に構成されており、実行管理ユニット40は、PE10にアトミックブロックが割り当てられる際に、当該PE10に対応する更新履歴情報を追加し、古い更新履歴情報を廃棄する。
図5は、本実施形態における更新履歴記憶部51の構成例を示す図である。
図5において、「FIFO」は、PE10を識別するPE識別情報を示し、当該PE識別情報を実行順に記憶している。また、「UPD」は、アトミックブロックの実行において、レジスタが更新されたことを示すフラグ(UPDフラグ)である。すなわち、「UPD」は、レジスタが更新されたことを示す更新情報である。「UPD」は、例えば、“1”である場合に更新されたことを示し、“0”である場合に更新されていないことを示す。
また、「W/A」は、WフラグとAフラグとを有している。Wフラグは、アトミックブロックにおけるレジスタの最後の書き込みが完了したことを示す完了情報である。また、Aフラグは、レジスタの書き込みが実行されたことを示す実行情報である。Wフラグは、例えば、“1”である場合にレジスタの最後の書き込みが完了したことを示し、“0”である場合にレジスタの最後の書き込みが完了していないことを示す。また、Aフラグは、例えば、“1”である場合にレジスタの書き込みが実行されたことを示し、“0”である場合にレジスタの書き込みが実行されていないことを示す。
また、「RAW」は、自身のPE10内において、RAWハザードが発生したことを示すRAWフラグである。「RAW」は、例えば、“1”である場合に、自身のPE10内においてRAWハザードが発生したことを示し、“0”である場合に自身のPE10内においてRAWハザードが発生していないことを示す。また、「RAW」は、自身のPE10内におけるRAWハザードに対する処理と、PE10間のRAWハザードに対する処理とを切り替える制御フラグとして機能する。「RAW」は、例えば、Aフラグが“1”であり、且つ、当該レジスタに対する読み込み要求があった場合に、「RAW」は、“1”に変更される。
また、「ACT」は、当該PE10が実行中であるか否かを示すACTフラグである。「ACT」は、例えば、“1”である場合に当該PE10が実行中であることを示し、“0”である場合に当該PE10が実行中でないことを示す。
なお、更新履歴記憶部51は、更新履歴情報をPE10の個数分(例えば、N個)有する更新履歴テーブルを記憶する。また、更新履歴記憶部51は、複数のレジスタのそれぞれに対応する更新履歴テーブルを記憶する。すなわち、「UPD」、「W/A」、及び「RAW」は、PE10が備えるレジスタの個数に応じてビット数が決定される。例えば、「UPD」は、RN×1ビットで構成され、「W/A」は、RN×2ビットで構成される。また、「RAW」は、RN×1ビットで構成される。ここで、RNは、レジスタの個数(汎用レジスタのR個と制御レジスタの個数との合計数)である。
図5に示す例では、例えば、「FIFO」が“PE_1”に対応する更新履歴情報は、「UPD」が“11・・・”であり、「W/A」が“0/0・・・”であることを示している。また、「RAW」が“00・・・”であり、「ACT」が“1”であることを示している。
また、図6は、本実施形態におけるレジスタ管理ユニット50の一例を示すブロック図である。
図6に示すように、レジスタ管理ユニット50は、更新履歴記憶部51と、マルチプレクサ52と、マルチプレクサ53とを備えている。なお、図6に示す更新履歴記憶部51は、上述した図5に示す更新履歴情報のうち、特定のレジスタ(例えば、RegX)に関する「UPD」、「W/A」、及び「RAW」のみを表記している。
また、更新履歴情報EN2は、レジスタ管理ユニット50に対して読み込み要求がされており、且つ、自身のPE10内のRAWハザードが発生していないPE10−3(PE_3)に対応する。また、更新履歴情報EN1は、当該PE10−3(PE_3)の処理に最も近い過去にレジスタRegXに書き込みを実行しているPE10−1(PE_1)に対応する。
マルチプレクサ52は、「RAW」の値に基づいて、更新履歴情報EN1のWフラグと、更新履歴情報EN2のAフラグとのいずれかを選択し、PE10−3(PE_3)をストールさせるSTALLB信号を出力する。なお、STALLB信号は、負論理の信号であり、“0”の場合にストールとなる。また、マルチプレクサ52は、「RAW」が“0”である場合に、更新履歴情報EN1のWフラグの値をSTALLB信号として出力する。また、マルチプレクサ52は、「RAW」が“1”である場合に、更新履歴情報EN2のAフラグとの値をSTALLB信号として出力する。
マルチプレクサ53は、「RAW」の値に基づいて、データを読み込むレジスタRegXを、PE10−3(PE_3)と、PE10−1(PE_1)とのいずれかを切り替える。マルチプレクサ53は、「RAW」が“0”である場合に、PE10−1(PE_1)のレジスタRegXを読み込むレジスタとして指定する。また、マルチプレクサ53は、「RAW」が“1”である場合に、PE10−3(PE_3)のレジスタRegXを読み込むレジスタとして指定する。
このように、レジスタ管理ユニット50は、更新履歴記憶部51が記憶する更新履歴テーブルに基づいて、自身のPE10内のRAWハザードが発生したか否かを判定し、自身のPE10内のRAWハザードが発生した場合に、「RAW」を“1”にする。そして、レジスタ管理ユニット50は、更新履歴テーブルに含まれる、読み込み要求のあったPE10に対応する「RAW」と、当該PE10に対応するAフラグと、最も近い過去にレジスタに書き込みを実行しているPE10に対応するWフラグとに基づいて、読み込み要求のあったPE10の命令実行を保留させる。
例えば、読み込み要求のあったPE10に対応する「RAW」が“1”である場合に、レジスタ管理ユニット50は、マルチプレクサ52によって当該PE10に対応するAフラグに基づいて、当該PE10への命令のエントリを保留するか否かのSTALLB信号を生成する。また、この場合、レジスタ管理ユニット50は、当該PE10のレジスタ(RegX)からデータを当該PE10に読み込ませる。
また、例えば、読み込み要求のあったPE10に対応する「RAW」が“0”である場合に、レジスタ管理ユニット50は、マルチプレクサ52によって最も近い過去にレジスタに書き込みを実行しているPE10に対応するWフラグに基づいて、当該PE10への命令のエントリを保留するか否かのSTALLB信号を生成する。また、この場合、レジスタ管理ユニット50は、最も近い過去にレジスタに書き込みを実行しているPE10PE10のレジスタ(RegX)からデータを、読み込み要求のあったPE10に読み込ませる。
例えば、図6に示す例では、更新履歴情報EN2に対応するPE10−3(PE_3)にレジスタRegXの読み込み要求があった場合に、「RAW」が“0”であるため、マルチプレクサ53によって、読み込み元として、PE10−1(PE_1)が選択される。また、PE10−1(PE_1)のWフラグが“0”であるため、マルチプレクサ52は、STALLB信号に“0”を出力して、PE10−3(PE_3)の命令実行を、PE10−1(PE_1)のWフラグが“1”になるまで保留させる。
なお、レジスタ管理ユニット50は、Aフラグに基づいて、RAWハザードが発生したか否かを判定し、「UPD」に基づいて、最も近い過去にレジスタに書き込みを実行しているPE10を選択する。
また、レジスタ管理ユニット50は、アトミックブロックをPE10に割り当てた初回の命令実行において記憶された更新履歴情報のうち、Wフラグ、Aフラグ、及び「RAW」を“0”に変更し、キャッシュヒットが発生した2回目以降の命令実行において記憶された更新履歴情報の状態を維持する。
再び、図1に戻り、ストアバッファユニット60(ストアバッファ制御部の一例)は、PE10からデータメモリ71にアクセス要求があった場合に、後述するストアバッファ記憶部61が記憶する当該PE10に対応するストアバッファテーブルに基づいて、データメモリ71とのアクセスを制御する。なお、ストアバッファユニット60は、オペランドデータネットワークNW2を介して、PE10が備えるレジスタファイル部12とデータの授受を行う。
また、ストアバッファユニット60は、メモリ管理ユニット70を介して、データメモリ71とデータのアクセスを行う。ストアバッファユニット60は、データメモリ71からデータを読み出すアクセス要求に対して、ストアバッファ記憶部61のストアバッファテーブルに当該アクセス要求に対応するデータが存在する場合に、当該データをPE10に出力する。また、ストアバッファユニット60は、ストアバッファテーブルに当該アクセス要求に対応するデータが存在しない場合に、データメモリ71から読み出したデータをPE10に出力する。
また、ストアバッファユニット60は、ストアバッファ記憶部61と、エントリテーブル記憶部62とを備えている。
ストアバッファ記憶部61は、アトミックブロックに含まれる各命令に対応するローカル位置情報と、データメモリ71にアクセスした履歴を示すアクセス情報とを対応付けたストアバッファテーブルを、複数のPE10の個数分(例えば、N個分)記憶する。
図7は、本実施形態におけるストアバッファ記憶部61の構成例を示す図である。
図7に示すように、ストアバッファ記憶部61は、N個のストアバッファテーブルを備えている。また、ストアバッファテーブルは、例えば、「LPC」と、「Ld」と、「St」と、「Addr」と、「Data」と、「完了」と、「終了」とを対応付けて記憶する。なお、ストアバッファテーブルは、PE10の命令キャッシュ部11のサイズ分の行を有している。
ここで、「LPC」は、PE10内のローカルプログラムカウンタ(ローカル位置情報)であり、PE10の命令キャッシュ部11のアドレスに対応する。「Ld」は、ロード命令が実行されたことを示すフラグであり、「St」は、ストア命令が実行されたことを示すフラグである。なお、ロード命令は、データメモリ71からレジスタへデータを読み出す命令であり、ストア命令は、レジスタからデータメモリ71にデータを書き込む命令である。また、「Addr」は、データメモリ71のアドレスを示し、「Data」は、アクセスしたデータの値を示す。また、「完了」は、データメモリ71へのアクセス(データの書き込み)が完了したことを示す完了フラグであり、「終了」は、命令の実行が完了(終了)したことを示す終了フラグである。ここで、「Ld」、「St」、「Addr」、「Data」、「完了」、及び「終了」は、データメモリ71にアクセスした履歴を示すアクセス情報に対応する。
例えば、図7に示す例では、「LPC」が“0”の命令が、データメモリ71の「Addr」の “0x02”に「Data」の“0x0f”を書き込むストア命令であり、命令の実行が完了しているが、データメモリ71への書き込みが完了していない状態であることを示している。
なお、ストアバッファユニット60は、データメモリ71にデータを書き込むアクセス要求に対して、PE10に対応するストアバッファテーブルに、「LPC」(ローカル位置情報)と、当該アクセス情報とを対応付けて記憶させるとともに、データメモリ71に当該データを記憶させる。
再び、図1に戻り、エントリテーブル記憶部62は、異なるPE10から同一のアドレスにアクセスがあった場合の優先順位を記憶する。エントリテーブル記憶部62は、FIFOに構成されており、ストアバッファユニット60は、データメモリ71にデータのアクセスを行う命令が実行された際に、当該命令を実行するPE10に対応する情報を追加し、データのアクセスが完了した古い情報を廃棄する。エントリテーブル記憶部62は、例えば、図8に示すように、「FIFO」と、「エントリNO」とを対応付けて記憶する。
図8は、本実施形態におけるエントリテーブル記憶部62の構成例を示す図である。
図8において、「FIFO」は、PE10を識別するPE識別情報を示し、「エントリNO」は、上述したストアバッファテーブルの番号を示している。
例えば、図8に示す例では、「FIFO」が“PE_1”に対応する「エントリNO」が“1”であり、最上行になるため、“PE_1”に対応するPE10によるアクセスが、最も優先順位が高いことを示している。
再び、図1に戻り、メモリ管理ユニット70は、ストアバッファユニット60と、データメモリ71との間に配置され、ストアバッファユニット60と、データメモリ71との間のデータのアクセスを中継する。また、データメモリ71(外部記憶部の一例)は、データを記憶するメモリである。
次に、図面を参照して、本実施形態によるプロセッサ1の動作について説明する。
<命令の実行処理>
まず、本実施形態によるプロセッサ1の命令実行の処理について説明する。
プロセッサ1は、PC値をアドレスとしてプログラムメモリに出力し、命令フェッチ部30が、プログラムメモリから出力された命令をIR31に記憶させる。プロセッサ1は、図2に示すようなアトミックブロックに分割して、複数のPE10のうちの1つに割り当てて、アトミックブロック単位の命令を当該PE10に実行させる。この際に、実行管理ユニット40は、PE10の割り当て、及び、PE10の並列処理を管理する。
図9は、本実施形態によるプロセッサ1のPE10の状態遷移を示す図である。
この図において、状態S1は、命令実行中のアクティブ状態を示し、状態S2は、保留中(ストール中)のアクティブ状態を示している。また、状態S3は、アトミックブロックの命令実行が終了したスリープ状態を示している。
図9に示すように、実行管理ユニット40は、アトミックブロックをPE10に割り当てて、命令を実行させることで、まず、PE10を状態S1に遷移させる。実行管理ユニット40は、管理テーブル記憶部41が記憶する管理テーブルの当該PE10に対応する「有効フラグ」を“1”にする。
状態S1において、実行管理ユニット40は、PE10がレジスタの読み出し命令を実行した場合の問合せに対して、管理テーブル記憶部41が記憶する管理テーブルに基づいて、ストールする必要があるか否かを判定し、ストールする必要がある場合に、当該PE10にストール指示を送信し、状態S2に遷移させる。
また、状態S2において、ストールの要因が解決した場合に、実行管理ユニット40は、当該PE10にストール解除を送信し、状態S1に遷移させる。
また、状態S1において、PE10に分岐命令が実行された場合に、実行管理ユニット40は、当該PE10を状態S3に遷移させる。
また、状態S3において、前回実行したアトミックブロックが再実行される場合(キャッシュヒットの場合)に、実行管理ユニット40は、再び状態S2に遷移させて、命令キャッシュ部11に記憶されている命令を実行させる。
また、状態S3において、PE10の空きがなく、LRUアービタ424によって、当該PE10がLRU置換え対象であると判定された場合に、実行管理ユニット40は、当該PE10を無効化する。すなわち、実行管理ユニット40は、管理テーブル記憶部41が記憶する管理テーブルの当該PE10に対応する「有効フラグ」を“0”にする。
また、キャッシュミスが発生した場合に、実行管理ユニット40は、無効化されているPE10のうちの1つに、アトミックブロックを割り当てて、再び状態S1に遷移させる。
また、全てのPE10に対応する「有効フラグ」が“1”である場合には、実行管理ユニット40は、PE10が、状態S3(スリープ状態)又は「有効フラグ」が“0”になるまで、新たなアトミックブロックの実行を保留させる。
なお、実行管理ユニット40は、新たにアトミックブロックをPE10に割り当てる際に、管理テーブル記憶部41が記憶する管理テーブルを更新する。具体的には、実行管理ユニット40は、当該PE10の「BTA」にPC値を記憶させ、「LGT」にアトミックブロックのブロック長を記憶させる。また、実行管理ユニット40は、当該PE10の「PTR1」及び「PTR2」にアトミックブロックの分岐先のPE10に対応する「PE_NO」(行番号)を記憶させ、「有効フラグ」を“1”にする。
次に、図4を参照して、実行管理ユニット40によるキャッシュヒットの判定について説明する。
図4において、行L1に対応するPE10が、分岐命令を実行すると、比較回路421が、PC値と、次に実行予定のアトミックブロックに対応するPE10(行L2)の「BTA」とを比較し、一致する場合に、H状態を出力する。また、AND回路422は、比較回路421の出力と、次に実行予定のアトミックブロックに対応するPE10の「有効フラグ」との論理積演算の結果を出力する。図4に示す例では、行L2の「有効フラグ」が“1”(=H状態)であるので、AND回路422は、H状態を出力する。そして、AND回路423が、プリデコーダ部43から出力される分岐命令を示す分岐命令信号(ここでは、H状態)と、AND回路422の出力(H状態)との論理積演算の結果(H状態)をHIT信号として出力する。また、実行管理ユニット40は、「BTA」が静的に決まっているとき、行L2の「BTA」をPC更新部20に出力して、PC21の値を「BTA」の値に更新させる。すなわち、図4に示す例では、実行管理ユニット40は、HIT信号にH状態を出力し、「PE_NO」が“6”のPE10に命令キャッシュ部11に記憶されている命令を実行させる。
次に、図10を参照して、PE10のパイプライン処理について説明する。
図10は、本実施形態によるプロセッサ1のパイプライン処理の一例を示す図である。
図10に示すように、プロセッサ1の各PE10は、「IF」、「ID」、「RR」、「EX」、及び「WR」の5つの処理(サイクル)を並列に処理するパイプライン処理を実行する。
ここで、「IF」は、命令のフェッチ処理であり、「ID」は、命令デコード処理(制御信号の生成処理)である。また、「RR」は、レジスタからのオペランドの読み込み処理であり、「EX」は、演算の実行処理である。また、「WR」は、レジスタへの演算結果の書き込み処理である。
図10に示すように、PE10は、例えば、「命令1」、「命令2」、・・・の順に、5つの処理(サイクル)をずらして実行して、パイプライン処理を実行する。
次に、図11を参照して、本実施形態によるプロセッサ1の命令の実行処理について説明する。
図11は、本実施形態によるPE10の並列処理の一例を示す図である。
図11(a)は、「アトミックブロックA」〜「アトミックブロックD」(AB_A〜AB_D)の展開連結リストにされたプログラムの一例を示している。また、図11(b)は、プロセッサ1が有するPE10(10−1、10−2、10−3、10−4、・・・、10−N)を示している。
また、図11(c)は、プロセッサ1が、図11(a)に示すアトミックブロック(AB_A〜AB_D)を実行した場合の一例を示している。
図11(c)に示すように、時刻T1において、プロセッサ1は、まず、PE10−1(PE_1)に、「アトミックブロックA」を割り当て、PE10−1が、「アトミックブロックA」の命令を逐次実行する。
次に、時刻T2において、PE10−1による「アトミックブロックA」の実行が完了すると、プロセッサ1は、PE10−2(PE_2)に、「アトミックブロックB」を割り当て、PE10−2が、「アトミックブロックB」の命令を逐次実行する。ここで、PE10−1の命令キャッシュ部11には、「アトミックブロックA」が記憶された状態であり、管理テーブル記憶部41には、PE10−1に対応する管理情報が「有効フラグ」が“1”の状態で記憶されている。
次に、時刻T3において、PE10−2による「アトミックブロックB」の実行が完了すると、プロセッサ1は、PE10−3(PE_3)に、「アトミックブロックD」を割り当て、PE10−2が、「アトミックブロックB」の命令を逐次実行する。ここで、PE10−2の命令キャッシュ部11には、「アトミックブロックB」が記憶された状態であり、管理テーブル記憶部41には、PE10−2に対応する管理情報が「有効フラグ」が“1”の状態で記憶されている。
次に、時刻T4において、PE10−3による「アトミックブロックD」の実行が完了すると、プロセッサ1は、PE10−2(PE_2)に、命令キャッシュ部11に記憶されている「アトミックブロックB」の命令を実行させる。ここで、実行管理ユニット40は、上述した図4に示す処理によりキャッシュヒットを判定し、PE10−2(PE_2)に「アトミックブロックB」を再実行させる。
また、時刻T5において、プロセッサ1は、さらに、PE10−3(PE_3)に、命令キャッシュ部11に記憶されている「アトミックブロックD」の命令を実行させる。ここで、実行管理ユニット40は、上述した図4に示す処理によりキャッシュヒットを判定し、PE10−3(PE_3)に「アトミックブロックD」を再実行させる。これにより、PE10−2とPE10−3とが並列実行される。
続く時刻T6及び時刻T7において、プロセッサ1は、時刻T4及び時刻T5と同様の処理を実行し、PE10−2とPE10−3とが並列実行される。
なお、図11(c)において、時刻T4以降の期間PT1は、並列実行の期間である。
このように、実行管理ユニット40は、割り当てたアトミックブロック(「アトミックブロックB」及び「アトミックブロックD」を複数のPE10(10−2、10−3)に並列実行させる。
<データ依存性の回避処理>
次に、本実施形態によるプロセッサ1のデータ依存性の回避処理について説明する。
プロセッサ1のレジスタ管理ユニット50は、以下の基本ルールに基づいて、PE10のレジスタ間のデータ依存性を回避する処理を実行する。
(1)PE10は、レジスタにデータの書き込みを行う際には、自身のレジスタにデータを書き込む。また、PE10は、レジスタに対して、書き込みを行った場合には、レジスタ管理ユニット50に更新履歴テーブルの更新を依頼し、レジスタ管理ユニット50は、更新履歴記憶部51の更新履歴テーブルを更新する。
(2)PE10は、レジスタからデータの読み込みを行う際には、レジスタ管理ユニット50に問合せを行う。レジスタ管理ユニット50は、更新履歴記憶部51の更新履歴テーブルに基づいて、命令実行の保留を指示(STALLB信号を出力)するとともに、保留の要因が解決(例えば、書き込み完了など)した場合に、保留の解除を指示する。レジスタ管理ユニット50は、更新履歴テーブルに基づいて、自身のPE10のレジスタと、最も近い過去に実行されたPE10のレジスタとのいずれかからデータを、PE10に読み込ませる。
レジスタ管理ユニット50は、例えば、自身のPE10内のRAWハザードが発生していない(「RAW」が“0”である)場合、且つ、最も近い過去に実行されたPE10におけるレジスタへの書き込みが完了した場合に、最も近い過去に実行されたPE10のレジスタのデータを、読み込み要求のあったPE10に読み込ませる。また、レジスタ管理ユニット50は、自身のPE10内のRAWハザードが発生している(「RAW」が“1”である)場合に、読み込み要求のあったPE10に、自身のレジスタのデータを読み込ませる。
次に、図6を参照して、レジスタ管理ユニット50によるRAWハザードが発生した際のSTALLB信号を生成する動作について説明する。
図6において、更新履歴情報EN2に対応するPE10−3(PE_3)において、レジスタRegXに読み出し命令が実行された場合に、PE10−3(PE_3)は、レジスタ管理ユニット50にストールするか否かの問合せを行う。レジスタ管理ユニット50は、PE10−3(PE_3)に対応する更新履歴情報EN2のAフラグが“0”であるため、更新履歴情報EN2の「RAW」を“0”のままとし、マルチプレクサ52により、更新履歴情報EN1のWフラグと更新履歴情報EN2の「RAW」とに基づいてSTALLB信号にL状態を出力する。その結果、当該PE10−3(PE_3)が、レジスタRegXの読み出し命令の実行を保留(ストール)する。
また、更新履歴情報EN1に対応するPE10において、レジスタRegXにおける最後の書き込みが完了すると、レジスタ管理ユニット50は、更新履歴情報EN1のWフラグを“1”にする。その結果、レジスタ管理ユニット50は、マルチプレクサ52により、STALLB信号にH状態を出力し、当該PE10が、レジスタRegXの読み出し命令を再開する。
次に、図12を参照して、本実施形態によるPE10間のプロセッサ1のRAWハザード処理について説明する。
図12は、本実施形態によるプロセッサ1のPE10間のRAWハザード処理の一例を示す図である。
図12は、2つのPE10(PE_1、PE_3)が並列に命令実行され、且つ、各PE10がパイプライン処理を実行している状態を示している。また、図12において、波形W1は、PE_3の「RAW」の論理状態を示し、波形W2は、PE_3のAフラグの論理状態を示している。また、波形W3は、PE_1のAフラグの論理状態を示し、波形W4は、PE_1のWフラグの論理状態を示し、波形W5は、PE_3のSTALLB信号の論理状態を示している。なお、各波形において、横軸は、時間を示し、縦軸は、論理状態を示している。
例えば、時刻T11において、PE10−1(PE_1)が、レジスタRegXに書き込み命令を実行すると、レジスタ管理ユニット50は、PE_1に対応する管理情報のAフラグを“1”(H状態)に更新する。
また、同様に時刻T11において、PE10−3(PE_3)が、レジスタRegXに読み出し命令を実行すると、レジスタ管理ユニット50は、PE_3に対応する管理情報の「RAW」が“0”(L状態)であるため、マルチプレクサ53によって、最も近い過去に実行されたPE_1をRegXの読み込み元として選択する。また、レジスタ管理ユニット50は、PE_1に対応する管理情報のWフラグと、PE_3に対応する管理情報の「RAW」とに基づいて、マルチプレクサ52によって、PE_3のSTALLB信号をL状態にする。その結果、PE_3の命令実行が保留される。
次に、時刻T12において、PE10−1(PE_1)が、レジスタRegXに対する最後の書き込み命令を実行すると、レジスタ管理ユニット50は、PE_1に対応する管理情報のWフラグを“1”(H状態)に更新する。レジスタ管理ユニット50は、PE_1に対応する管理情報のWフラグと、PE_3に対応する管理情報の「RAW」とに基づいて、PE_3のSTALLB信号をH状態にする。その結果、PE_3の命令実行の保留が解除される。ここで、時刻T11〜時刻T12までの期間ST1が、ストール期間となる。この場合、PE10−3(PE_3)は、PE10−1(PE_1)によるレジスタRegXの書き込みが完了した後に、レジスタRegXの値を読み出すため、正常に命令を実行することができる。
次に、図13を参照して、本実施形態によるプロセッサ1の自身のPE10内のRAWハザード処理について説明する。
図13は、本実施形態によるプロセッサ1の自身のPE10内のRAWハザード処理の一例を示す図である。
図13は、PE10−3(PE_3)が命令実行され、且つ、パイプライン処理を実行している状態を示している。また、図13において、波形W6は、PE_3の「RAW」の論理状態を示し、波形W7は、PE_3のAフラグの論理状態を示している。また、波形W8は、PE_3のSTALLB信号の論理状態を示している。なお、各波形において、横軸は、時間を示し、縦軸は、論理状態を示している。
例えば、時刻T21において、PE10−3(PE_3)が、レジスタRegXに書き込み命令を実行すると、レジスタ管理ユニット50は、PE_3に対応する管理情報のAフラグを“1”(H状態)に更新する。
次に、時刻T22において、PE10−3(PE_3)が、レジスタRegXに読み出し命令を実行すると、レジスタ管理ユニット50は、管理情報のAフラグが“1”(H状態)であるため、PE_3に対応する管理情報の「RAW」を“1”(1状態)に更新する。そして、レジスタ管理ユニット50は、マルチプレクサ53によって、自身のPE_3をRegXの読み込み元として選択する。また、レジスタ管理ユニット50は、PE_3に対応する管理情報のAフラグと、PE_3に対応する管理情報の「RAW」とに基づいて、マルチプレクサ52によって、PE_3のSTALLB信号をH状態にする。その結果、PE_3の命令実行が保留されずにそのまま実行される。
このように、自身のPE10において、レジスタRegXに書き込みが実行されている場合には、PE10は、自身のレジスタRegXからデータを読み出す(読み込む)。
<ストアバッファ処理>
次に、本実施形態によるプロセッサ1のストアバッファ処理について説明する。
ストアバッファユニット60は、ストアバッファ記憶部61のストアバッファテーブルに基づいて、ロード命令に対して、当該ロード命令の「Addr」を利用して、エントリテーブル記憶部62の「FIFO」上の自身のストアバッファテーブルを含めた最も近いストアバッファテーブルを一つ検出する。ストアバッファユニット60は、当該ストアバッファテーブルの中で、最も新しく(最も「LPC」の値が大きく)、且つ当該ロード命令の「Addr」の値が一致しているアクセス情報のデータをオペランドデータネットワークNW2に出力する(ロードバイパス処理)。これにより、ストアバッファユニット60は、データメモリ71に過去に書き込んだ(ストアした)データを再利用して、再びデータメモリ71から読み出す(ロードする)必要がないので高速にデータを読み出す(ロードする)ことができる。また、データメモリ71から読み出したデータが更新されていない場合には、ストアバッファユニット60は、データメモリ71から過去に時間を掛けて読み出した(ロードした)データを再利用して、再びデータメモリ71から読み出す(ロードする)必要がないので高速にデータを読み出す(ロードする)ことができる。
また、メモリ管理ユニット70は、エントリテーブル記憶部62の「FIFO」順に各ストアバッファテーブルを検索し、各ストアバッファテーブル上で逐次、「Ld」(ロード)あるいは「St」(ストア)のフラグが“1”である行に対するデータメモリ71のアクセスを実行する。ストアバッファユニット60は、ストアバッファテーブルを検索して該当「Addr」を持つ行からロードバイパスし、このアクセスの終了とともに「完了」(完了フラグ)を“1”にする。なお、「完了」(完了フラグ)が“1”になった際に、レジスタ管理ユニット50は、当該命令がロード命令である場合は、ロード先のレジスタに該当する「UPD」及びAフラグを“1”にする。また、レジスタ管理ユニット50は、当該命令がそのレジスタの最後の書き込み(ロード命令)の場合には、該当するWフラグを“1”にする。
また、ストアバッファユニット60は、当該命令がストア命令の場合には、ストア元のレジスタを読み込む必要があるため、レジスタ管理ユニット50の管理テーブルに問合せて、読み込み不可能である場合には、読み込み可能になるまで、命令実行を保留させる。また、レジスタの読み込み後に、ストアバッファユニット60は、レジスタの値、及びアドレス値を、ストアバッファテーブルの「Data」及び「Addr」に記憶させる。また、ストアバッファユニット60は、「終了」(終了フラグ)を“1”にする。
次に、メモリ管理ユニット70は、ストアバッファテーブルの「St」が“1”である場合に、対応する「終了」(終了フラグ)が“1”になるまで待つ(ストール状態となる)。また、メモリ管理ユニット70は、「終了」(終了フラグ)が“1”になった場合に、データメモリ71へのメモリアクセスを開始し、当該ストア(書き込み)が完了した場合に、ストアバッファユニット60に、該当する「完了」(完了フラグ)を“1”にさせて、次のメモリアクセスの処理に移る。
このように、ストアバッファユニット60は、PE10からデータメモリ71にアクセス要求があった場合に、ストアバッファ記憶部61が記憶する当該PE10に対応するストアバッファテーブルに基づいて、データメモリ71とのアクセスを制御する。
以上説明したように、本実施形態によるプロセッサ1は、複数のPE10(プロセッシングエレメント)と、実行管理ユニット40(実行管理部)とを備えている。複数のPE10は、それぞれが、割り当てられたアトミックブロック(単位命令列)を一時記憶する命令キャッシュ部11(一時記憶部)を有し、それぞれの命令キャッシュ部11に記憶されたアトミックブロックに含まれる命令を実行可能に構成されている。実行管理ユニット40は、アトミックブロックに分割し、分割した当該アトミックブロックを複数のPE10のそれぞれに逐次割り当て、割り当てたアトミックブロックを複数のPE10に並列実行させる。ここで、アトミックブロックは、アセンブリ言語以下のレベルの命令列であるプログラムを、途中に分岐命令を含まない命令列であって、分岐先の先頭命令を始端とし、分岐命令を終端とする命令列である。
これにより、本実施形態によるプロセッサ1は、アトミックブロック単位で、PR10に割り当て、割り当てたアトミックブロックを複数のPE10に並列実行させるため、例えば、非数値計算処理を高速処理することができる。なお、本実施形態によるプロセッサ1は、以下のようなアプリケーションソフトウェアに有効である。
(1)単一スレッドに対して高速処理が求められるアプリケーション。
(2)複数のアトミックブロックで、且つ、用意されたPE10の数の範囲内でこのブロック群が構成されループ構造のあるアルゴリズムを持つアプリケーション。
(3)加えて複雑な制御フローを持つアルゴリズムで構成されたアプリケーション。
例えば、本実施形態によるプロセッサ1は、上記要件を満たす、非数値計算アプリケーションである、制御問題、グラフ問題、情報検索、コンピュータ支援型設計、定理証明などに有効である。
また、本実施形態によるプロセッサ1は、専用のコンパイラを用意する必要なしに、複数のPE10に並列実行させて、非数値計算処理を高速処理することができる。
また、本実施形態では、実行管理ユニット40は、分割したアトミックブロックが複数のPE10のいずれの命令キャッシュ部11にも記憶されていない場合に、当該アトミックブロックを複数のPE10のいずれかに割り当てる。そして、実行管理ユニット40は、分割したアトミックブロックが複数のPE10のいずれかの命令キャッシュ部11に既に記憶されている場合に、当該PE10に、当該命令キャッシュ部11に既に記憶されているアトミックブロックを並列実行させる。
これにより、本実施形態によるプロセッサ1は、アトミックブロック単位でPE10への割り当て及び並列実行を容易に実現することができる。
また、本実施形態によるプロセッサ1は、プログラムにおけるアトミックブロックの先頭命令の位置を示す先頭位置情報(「BTA」)と、当該アトミックブロックが有効であるか否かを示す有効情報(「有効フラグ」)と、次に実行するPE10を示す次実行情報(「PTR1」、「PTR2」)とを対応付けた管理情報を複数有する管理テーブルを記憶する管理テーブル記憶部41を備える。実行管理ユニット40は、プログラムに分岐命令が検出された際に、管理テーブル記憶部41が記憶する管理テーブルに基づいて、次に実行するアトミックブロックが複数のPE10のいずれかの命令キャッシュ部11に既に記憶されており、且つ有効な状態であるか否かを判定する。
これにより、本実施形態によるプロセッサ1は、キャッシュミス、及びキャッシュヒットの判定を管理テーブルに基づいてより容易に行うことができる。
また、本実施形態では、実行管理ユニット40は、プログラムに分岐命令が検出された際に、管理テーブル記憶部41が記憶する管理テーブルから、次実行情報(「PTR1」、「PTR2」)に基づいて当該分岐命令の次に実行するアトミックブロックに対応する先頭位置情報(「BTA」)及び有効情報(「有効フラグ」)を取得する。そして、実行管理ユニット40は、取得した先頭位置情報の示す位置と、次に実行するプログラムの実行位置とが一致し、且つ、取得した有効情報が有効を示す場合に、次実行情報に一致するPE10が、アトミックブロックを命令キャッシュ部11に記憶しており、且つ、有効な状態であると判定する。
これにより、本実施形態によるプロセッサ1は、キャッシュヒットを簡易な手法により適切に判定することができる。
また、本実施形態では、実行管理ユニット40は、取得した先頭位置情報の示す位置と、次に実行するプログラムの実行位置とが一致しない、又は取得した有効情報が無効を示す場合に、複数のPE10の1つに次に実行するアトミックブロックを割り当てるとともに、割り当てたアトミックブロックに対応させて、管理テーブルを更新する。
これにより、本実施形態によるプロセッサ1は、キャッシュミスの場合に、簡易な処方により、アトミックブロックを適切にPE10に割り当てることができる。
また、本実施形態では、実行管理ユニット40は、複数のPE10の1つに次に実行するアトミックブロックを割り当てる場合に、管理テーブルの当該アトミックブロックに対応する先頭位置情報(「BTA」)を記憶させるとともに、有効情報(「有効フラグ」)を、無効を示す値に更新する。そして、実行管理ユニット40は、PE10が、当該アトミックブロックの実行を完了した場合に、当該アトミックブロックに対応する有効情報(「有効フラグ」)を、有効を示す値に更新する。
これにより、本実施形態によるプロセッサ1は、既に実行したアトミックブロックを適切に管理することができる。
また、本実施形態では、PE10は、パイプライン処理により命令を実行する。
これにより、本実施形態によるプロセッサ1は、パイプライン処理により、さらに高速に命令を実行することができる。
また、本実施形態では、複数のPE10のそれぞれは、命令の実行に利用されるレジスタファイル部12(レジスタ)を有している。プロセッサ1は、さらに、レジスタ管理ユニット50(レジスタ管理部)を備えている。レジスタ管理ユニット50は、複数のPE10の間で、レジスタの書き込み後の読み出しによるデータ依存であるRAWハザードが発生した場合に、最も近い過去に当該レジスタに書き込みを実行しているPE10によるアトミックブロックの当該レジスタへの書き込みが完了するまで、当該レジスタの読み出しを実行するPE10の命令実行を保留させる。
これにより、本実施形態によるプロセッサ1は、RAWハザードが発生した場合においても、適切に命令を実行することができる。すなわち、本実施形態によるプロセッサ1は、PE10のレジスタ間のデータ依存性を回避することができる。
また、本実施形態によるプロセッサ1は、PE10を識別するPE識別情報(「PE_1」など)と、アトミックブロックの実行において、レジスタが更新されたことを示す更新情報(「UPD」)と、アトミックブロックにおけるレジスタの最後の書き込みが完了したことを示す完了情報(Wフラグ)と、レジスタの書き込みが実行されたことを示す実行情報(Aフラグ)とを対応付けた更新履歴情報をPE10の個数分有する更新履歴テーブルを記憶する更新履歴記憶部51を備えている。そして、レジスタ管理ユニット50は、更新履歴記憶部51が記憶する更新履歴テーブルに基づいて、PE10間でRAWハザードが発生したか否かを判定するとともに、PE10間でRAWハザードが発生した場合(例えば、「RAW」が“0”の場合)に、更新履歴テーブルに含まれる、最も近い過去にレジスタに書き込みを実行しているPE10に対応する完了情報に基づいて、RAWハザードの発生したPE10の命令実行を保留させる。
これにより、本実施形態によるプロセッサ1は、更新履歴情報に基づいて、RAWハザードが発生した場合に、RAWハザードの発生したPE10の命令実行を適切に保留(ストール)させることができる。
また、本実施形態では、レジスタ管理ユニット50は、実行情報(Aフラグ)に基づいて、RAWハザードが発生したか否かを判定し、更新情報(「UPD」)に基づいて、最も近い過去にレジスタに書き込みを実行しているPE10を選択する。
これにより、本実施形態によるプロセッサ1は、簡易な手法により、RAWハザードの発生の検出、及び近い過去にレジスタに書き込みを実行しているPE10の選択を適切に行うことができる。
また、本実施形態では、複数のPE10のそれぞれは、レジスタを複数備え、更新履歴記憶部51は、複数のレジスタのそれぞれに対応する更新履歴テーブルを記憶する。
これにより、本実施形態によるプロセッサ1は、PE10のそれぞれが、複数のレジスタを備える場合にも対応可能である。また、本実施形態によるプロセッサ1は、PE10が、レジスタを多数(複数)備えることにより、より複雑な処理が可能になる。
また、本実施形態によるプロセッサ1は、ストアバッファ記憶部61と、ストアバッファユニット60(ストアバッファ制御部)とを備えている。ストアバッファ記憶部61は、アトミックブロックに含まれる各命令に対応するローカル位置情報(「LPC」)と、データメモリ71(外部記憶部)にアクセスした履歴を示すアクセス情報とを対応付けたストアバッファテーブルを、複数のPE10の個数分記憶する。ストアバッファユニット60は、PE10からデータメモリ71にアクセス要求があった場合に、ストアバッファ記憶部61が記憶する当該PE10に対応するストアバッファテーブルに基づいて、データメモリ71とのアクセスを制御する。
これにより、本実施形態によるプロセッサ1は、データメモリ71とのアクセスにおいても適切に処理を行うことができる。また、本実施形態によるプロセッサ1は、ストアバッファ記憶部61を利用することで、例えば、データメモリ71から過去に読み出したデータ、または、ストアバッファ記憶部61を介してデータメモリ71に記憶させたデータを、再利用できるので、データアクセスの処理時間を短縮することができる。
また、本実施形態では、アクセス情報には、アクセスの種別を示す種別情報(「Ld」、「St」など)と、データメモリ71においてアクセスする記憶位置情報(「Addr」)及びアクセスしたデータ(「Data」)とが対応付けられている。ストアバッファユニット60は、データメモリ71からデータを読み出すアクセス要求に対して、ストアバッファテーブルに当該アクセス要求に対応するデータが存在する場合に、当該データをPE10に出力する。ストアバッファユニット60は、ストアバッファテーブルに当該アクセス要求に対応するデータが存在しない場合に、データメモリ71から読み出したデータをPE10に出力する。
これにより、本実施形態によるプロセッサ1は、簡易な手法により、適切にデータメモリ71からデータを読み出すことができる。
また、本実施形態では、ストアバッファユニット60は、データメモリ71にデータを書き込むアクセス要求に対して、PE10に対応するストアバッファテーブルに、ローカル位置情報と、当該アクセス情報とを対応付けて記憶させるとともに、データメモリ71に当該データを記憶させる。
これにより、本実施形態によるプロセッサ1は、簡易な手法により、適切にデータメモリ71からデータを書き込むことができる。
なお、本発明は、上記の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で変更可能である。
例えば、上記の実施形態において、実行管理ユニット40が、管理テーブル記憶部41を備える例を説明したが、実行管理ユニット40の外部に、管理テーブル記憶部41を備えるようにしてもよい。また、レジスタ管理ユニット50が、更新履歴記憶部51を備える例を説明したが、レジスタ管理ユニット50の外部に、更新履歴記憶部51を備えるようにしてもよい。また、ストアバッファユニット60が、ストアバッファ記憶部61及びエントリテーブル記憶部62を備える例を説明したが、ストアバッファユニット60の外部に、ストアバッファ記憶部61とエントリテーブル記憶部62とのいずれか一方又は両方を備えるようにしてもよい。
また、上記の実施形態において、更新履歴記憶部51及びエントリテーブル記憶部62が、FIFOに構成される例を説明したが、ポインタを設けて、サイクリック(循環)に構成してもよい。
また、上記の実施形態において、レジスタ管理ユニット50が、命令の実行を保留、及び保留の解除をPE10に指示する例を説明したが、レジスタへの読み出し命令の際のレジスタ管理ユニット50への問合せで、PE10が自ら命令の実行を保留し、レジスタ管理ユニット50が、問合せに対して保留の解除をPE10に指示するようにしてもよい。
また、上記の実施形態において、プロセッサ1は、メモリ管理ユニット70を介して、データメモリ71とアクセスする例を説明したが、これに限定されるものではなく、キャッシュメモリを介してデータメモリ71とアクセスするようにしてもよいし、データメモリ71と直接アクセスするようにしてもよい。
また、実行管理ユニット40の構成は、図4に示す構成に限定されるものではなく、実行管理ユニット40は、他の構成により実現されてもよい。また、レジスタ管理ユニット50の構成は、図6に示す構成に限定されるものではなく、レジスタ管理ユニット50は、他の構成により実現されてもよい。
また、上記の実施形態において、プロセッサ1が、実行管理ユニット40及び管理テーブル記憶部41を一か所により集中管理する例を説明したが、これに限定されるものではない。プロセッサ1は、例えば、実行管理ユニット40及び管理テーブル記憶部41の一部または全部を各PE10に分散して備え、分散管理されるようにしてもよい。プロセッサ1は、このような分散型で実装された場合であっても、上記の実施形態と同様の効果を奏する。
1…プロセッサ、10,10−1,10−2,10−3,10−4,10−N…PE、11…命令キャッシュ部、12…レジスタファイル部、13…命令実行部、20…PC更新部、21…PC、30…命令フェッチ部、31…IR、40…実行管理ユニット、41…管理テーブル記憶部、42…キャッシュミスハンドラ部、43…プリデコーダ部、50…レジスタ管理ユニット、51…更新履歴記憶部、52,53…マルチプレクサ、422,423…AND回路、60…ストアバッファユニット、61…ストアバッファ記憶部、62…エントリテーブル記憶部、70…メモリ管理ユニット、71…データメモリ、421…比較回路、424…LRUアービタ、425…ハンドラ部、NW1…命令ネットワーク、NW2…オペランドデータネットワーク
上記問題を解決するために、本発明の一態様は、それぞれが、割り当てられた単位命令列を一時記憶する一時記憶部を有し、それぞれの前記一時記憶部に記憶された前記単位命令列に含まれる命令を実行可能な複数のプロセッシングエレメントと、アセンブリ言語以下のレベルの命令列であるプログラムを、途中に分岐命令を含まない命令列であって、分岐先の先頭命令を始端とし、分岐命令を終端とする命令列である前記単位命令列に分割し、分割した当該単位命令列を前記複数のプロセッシングエレメントのそれぞれに逐次割り当て、割り当てた前記単位命令列を前記複数のプロセッシングエレメントに並列実行させる実行管理部と、前記プログラムにおける前記単位命令列の先頭命令の位置を示す先頭位置情報と、当該単位命令列が有効であるか否かを示す有効情報と、次に実行する前記プロセッシングエレメントを示す次実行情報とを対応付けた管理情報を複数有する管理テーブルを記憶する管理テーブル記憶部とを備え、前記実行管理部は、分割した前記単位命令列が前記複数のプロセッシングエレメントのいずれの前記一時記憶部にも記憶されていない場合に、当該単位命令列を前記複数のプロセッシングエレメントのいずれかに割り当て、分割した前記単位命令列が前記複数のプロセッシングエレメントのいずれかの前記一時記憶部に既に記憶されている場合に、当該プロセッシングエレメントに、当該一時記憶部に既に記憶されている前記単位命令列を並列実行させ、前記プログラムに分岐命令が検出された際に、前記管理テーブル記憶部が記憶する前記管理テーブルに基づいて、次に実行する前記単位命令列が前記複数のプロセッシングエレメントのいずれかの前記一時記憶部に既に記憶されており、且つ有効な状態であるか否かを判定することを特徴とするプロセッサである。
また、本発明の一態様は、上記のプロセッサにおいて、前記複数のプロセッシングエレメントのそれぞれは、前記命令の実行に利用されるレジスタを有し、さらに、前記複数のプロセッシングエレメントの間で、前記レジスタの書き込み後の読み出しによるデータ依存であるRAWハザードが発生した場合に、最も近い過去に当該レジスタに書き込みを実行している前記プロセッシングエレメントによる前記単位命令列の当該レジスタへの書き込みが完了するまで、当該レジスタの読み出しを実行する前記プロセッシングエレメントの命令実行を保留させるレジスタ管理部を備えることを特徴とする。
また、本発明の一態様は、それぞれが、割り当てられた単位命令列を一時記憶する一時記憶部を有し、それぞれの前記一時記憶部に記憶された前記単位命令列に含まれる命令を実行可能な複数のプロセッシングエレメントと、アセンブリ言語以下のレベルの命令列であるプログラムを、途中に分岐命令を含まない命令列であって、分岐先の先頭命令を始端とし、分岐命令を終端とする命令列である前記単位命令列に分割し、分割した当該単位命令列を前記複数のプロセッシングエレメントのそれぞれに逐次割り当て、割り当てた前記単位命令列を前記複数のプロセッシングエレメントに並列実行させる実行管理部とを備え、前記複数のプロセッシングエレメントのそれぞれは、前記命令の実行に利用されるレジスタを有し、さらに、前記複数のプロセッシングエレメントの間で、前記レジスタの書き込み後の読み出しによるデータ依存であるRAWハザードが発生した場合に、最も近い過去に当該レジスタに書き込みを実行している前記プロセッシングエレメントによる前記単位命令列の当該レジスタへの書き込みが完了するまで、当該レジスタの読み出しを実行する前記プロセッシングエレメントの命令実行を保留させるレジスタ管理部を備えることを特徴とするプロセッサである。
また、本発明の一態様は、上記のプロセッサにおいて、前記プロセッシングエレメントを識別するPE識別情報と、前記単位命令列の実行において、前記レジスタが更新されたことを示す更新情報と、前記単位命令列における前記レジスタの最後の書き込みが完了したことを示す完了情報と、前記レジスタの書き込みが実行されたことを示す実行情報とを対応付けた更新履歴情報を前記プロセッシングエレメントの個数分有する更新履歴テーブルを記憶する更新履歴記憶部を備え、前記レジスタ管理部は、前記更新履歴記憶部が記憶する更新履歴テーブルに基づいて、前記RAWハザードが発生したか否かを判定するとともに、前記レジスタに対して読み込みを行う前記プロセッシングエレメントにおいて、前記プロセッシングエレメント内のRAWハザードが発生せず、かつ、前記レジスタに対して読み込みを行う前記プロセッシングエレメントと当該レジスタに対して最も近い過去に書き込みを行う前記プロセッシングエレメントとの間で、前記プロセッシングエレメント間のRAWハザードが発生した場合には、最も近い過去に書き込みを行う前記プロセッシングエレメントについての当該書き込み対象のレジスタに関する前記完了情報に基づいて、前記レジスタに対して読み込みを行う前記プロセッシングエレメントの命令実行を保留するか否かを制御することを特徴とする。
また、本発明の一態様は、上記のプロセッサにおいて、前記レジスタ管理部は、前記レジスタに対して読み込みを行う前記プロセッシングエレメントについての当該読み込み対象のレジスタに関する前記実行情報に基づいて、前記レジスタに対して読み込みを行う前記プロセッシングエレメントにおいて、前記プロセッシングエレメント内のRAWハザードが発生したか否かを判定ることを特徴とする。

Claims (14)

  1. それぞれが、割り当てられた単位命令列を一時記憶する一時記憶部を有し、それぞれの前記一時記憶部に記憶された前記単位命令列に含まれる命令を実行可能な複数のプロセッシングエレメントと、
    アセンブリ言語以下のレベルの命令列であるプログラムを、途中に分岐命令を含まない命令列であって、分岐先の先頭命令を始端とし、分岐命令を終端とする命令列である前記単位命令列に分割し、分割した当該単位命令列を前記複数のプロセッシングエレメントのそれぞれに逐次割り当て、割り当てた前記単位命令列を前記複数のプロセッシングエレメントに並列実行させる実行管理部と
    を備えることを特徴とするプロセッサ。
  2. 前記実行管理部は、
    分割した前記単位命令列が前記複数のプロセッシングエレメントのいずれの前記一時記憶部にも記憶されていない場合に、当該単位命令列を前記複数のプロセッシングエレメントのいずれかに割り当て、
    分割した前記単位命令列が前記複数のプロセッシングエレメントのいずれかの前記一時記憶部に既に記憶されている場合に、当該プロセッシングエレメントに、当該一時記憶部に既に記憶されている前記単位命令列を並列実行させる
    ことを特徴とする請求項1に記載のプロセッサ。
  3. 前記プログラムにおける前記単位命令列の先頭命令の位置を示す先頭位置情報と、当該単位命令列が有効であるか否かを示す有効情報と、次に実行する前記プロセッシングエレメントを示す次実行情報とを対応付けた管理情報を複数有する管理テーブルを記憶する管理テーブル記憶部を備え、
    前記実行管理部は、
    前記プログラムに分岐命令が検出された際に、前記管理テーブル記憶部が記憶する前記管理テーブルに基づいて、次に実行する前記単位命令列が前記複数のプロセッシングエレメントのいずれかの前記一時記憶部に既に記憶されており、且つ有効な状態であるか否かを判定する
    ことを特徴とする請求項2に記載のプロセッサ。
  4. 前記実行管理部は、
    前記プログラムに分岐命令が検出された際に、前記管理テーブル記憶部が記憶する前記管理テーブルから、前記次実行情報に基づいて当該分岐命令の次に実行する前記単位命令列に対応する前記先頭位置情報及び前記有効情報を取得し、
    取得した前記先頭位置情報の示す位置と、次に実行する前記プログラムの実行位置とが一致し、且つ、取得した前記有効情報が有効を示す場合に、前記次実行情報に一致する前記プロセッシングエレメントが、前記単位命令列を前記一時記憶部に記憶しており、且つ、有効な状態であると判定する
    ことを特徴とする請求項3に記載のプロセッサ。
  5. 前記実行管理部は、
    取得した前記先頭位置情報の示す位置と、次に実行する前記プログラムの実行位置とが一致しない、又は取得した前記有効情報が無効を示す場合に、前記複数のプロセッシングエレメントの1つに次に実行する前記単位命令列を割り当てるとともに、割り当てた前記単位命令列に対応させて、前記管理テーブルを更新する
    ことを特徴とする請求項4に記載のプロセッサ。
  6. 前記実行管理部は、
    前記複数のプロセッシングエレメントの1つに次に実行する前記単位命令列を割り当てる場合に、前記管理テーブルの当該単位命令列に対応する前記先頭位置情報を記憶させるとともに、前記有効情報を、無効を示す値に更新し、
    前記プロセッシングエレメントが、当該単位命令列の実行を完了した場合に、当該単位命令列に対応する前記有効情報を、有効を示す値に更新する
    ことを特徴とする請求項5に記載のプロセッサ。
  7. 前記プロセッシングエレメントは、パイプライン処理により前記命令を実行する
    ことを特徴とする請求項1から請求項6のいずれか一項に記載のプロセッサ。
  8. 前記複数のプロセッシングエレメントのそれぞれは、前記命令の実行に利用されるレジスタを有し、
    さらに、前記複数のプロセッシングエレメントの間で、前記レジスタの書き込み後の読み出しによるデータ依存であるRAWハザードが発生した場合に、最も近い過去に当該レジスタに書き込みを実行している前記プロセッシングエレメントによる前記単位命令列の当該レジスタへの書き込みが完了するまで、当該レジスタの読み出しを実行する前記プロセッシングエレメントの命令実行を保留させるレジスタ管理部を備える
    ことを特徴とする請求項1から請求項7のいずれか一項に記載のプロセッサ。
  9. 前記プロセッシングエレメントを識別するPE識別情報と、前記単位命令列の実行において、前記レジスタが更新されたことを示す更新情報と、前記単位命令列における前記レジスタの最後の書き込みが完了したことを示す完了情報と、前記レジスタの書き込みが実行されたことを示す実行情報とを対応付けた更新履歴情報を前記プロセッシングエレメントの個数分有する更新履歴テーブルを記憶する更新履歴記憶部を備え、
    前記レジスタ管理部は、
    前記更新履歴記憶部が記憶する更新履歴テーブルに基づいて、前記RAWハザードが発生したか否かを判定するとともに、前記RAWハザードが発生した場合に、前記更新履歴テーブルに含まれる、最も近い過去に前記レジスタに書き込みを実行している前記プロセッシングエレメントに対応する完了情報に基づいて、前記RAWハザードの発生した前記プロセッシングエレメントの命令実行を保留させる
    ことを特徴とする請求項8のいずれか一項に記載のプロセッサ。
  10. 前記レジスタ管理部は、
    前記実行情報に基づいて、前記RAWハザードが発生したか否かを判定し、前記更新情報に基づいて、最も近い過去に前記レジスタに書き込みを実行している前記プロセッシングエレメントを選択する
    ことを特徴とする請求項9に記載のプロセッサ。
  11. 前記複数のプロセッシングエレメントのそれぞれは、前記レジスタを複数備え、
    前記更新履歴記憶部は、前記複数のレジスタのそれぞれに対応する前記更新履歴テーブルを記憶する
    ことを特徴とする請求項9又は請求項10に記載のプロセッサ。
  12. 前記単位命令列に含まれる各命令に対応するローカル位置情報と、外部記憶部にアクセスした履歴を示すアクセス情報とを対応付けたストアバッファテーブルを、前記複数のプロセッシングエレメントの個数分記憶するストアバッファ記憶部と、
    前記プロセッシングエレメントから前記外部記憶部にアクセス要求があった場合に、前記ストアバッファ記憶部が記憶する当該プロセッシングエレメントに対応する前記ストアバッファテーブルに基づいて、前記外部記憶部とのアクセスを制御するストアバッファ制御部と
    を備えることを特徴とする請求項1から請求項11のいずれか一項に記載のプロセッサ。
  13. 前記アクセス情報には、アクセスの種別を示す種別情報と、前記外部記憶部においてアクセスする記憶位置情報及びアクセスしたデータとが対応付けられており、
    前記ストアバッファ制御部は、
    前記外部記憶部からデータを読み出す前記アクセス要求に対して、前記ストアバッファテーブルに当該アクセス要求に対応する前記データが存在する場合に、当該データを前記プロセッシングエレメントに出力し、
    前記ストアバッファテーブルに当該アクセス要求に対応する前記データが存在しない場合に、前記外部記憶部から読み出した前記データを前記プロセッシングエレメントに出力する
    ことを特徴とする請求項12に記載のプロセッサ。
  14. 前記ストアバッファ制御部は、
    前記外部記憶部にデータを書き込む前記アクセス要求に対して、前記プロセッシングエレメントに対応する前記ストアバッファテーブルに、前記ローカル位置情報と、当該アクセス情報とを対応付けて記憶させるとともに、前記外部記憶部に当該データを記憶させる
    ことを特徴とする請求項12又は請求項13に記載のプロセッサ。
JP2016011234A 2016-01-25 2016-01-25 プロセッサ Active JP6167193B1 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2016011234A JP6167193B1 (ja) 2016-01-25 2016-01-25 プロセッサ

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016011234A JP6167193B1 (ja) 2016-01-25 2016-01-25 プロセッサ

Publications (2)

Publication Number Publication Date
JP6167193B1 JP6167193B1 (ja) 2017-07-19
JP2017134443A true JP2017134443A (ja) 2017-08-03

Family

ID=59351428

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016011234A Active JP6167193B1 (ja) 2016-01-25 2016-01-25 プロセッサ

Country Status (1)

Country Link
JP (1) JP6167193B1 (ja)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001282549A (ja) * 2000-03-30 2001-10-12 Nec Corp プログラム変換装置及び方法並びに記録媒体
JP2004302706A (ja) * 2003-03-31 2004-10-28 Nec Corp プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム
WO2014120690A1 (en) * 2013-01-29 2014-08-07 Advanced Micro Devices, Inc. Hardware and software solutions to divergent branches in a parallel pipeline
WO2014120703A1 (en) * 2013-01-29 2014-08-07 Advanced Micro Devices, Inc. Solution to divergent branches in a simd core using hardware pointers
US20140331236A1 (en) * 2011-12-01 2014-11-06 National University Of Singapore Polymorphic heterogeneous multi-core architecture

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001282549A (ja) * 2000-03-30 2001-10-12 Nec Corp プログラム変換装置及び方法並びに記録媒体
JP2004302706A (ja) * 2003-03-31 2004-10-28 Nec Corp プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム
US20140331236A1 (en) * 2011-12-01 2014-11-06 National University Of Singapore Polymorphic heterogeneous multi-core architecture
WO2014120690A1 (en) * 2013-01-29 2014-08-07 Advanced Micro Devices, Inc. Hardware and software solutions to divergent branches in a parallel pipeline
WO2014120703A1 (en) * 2013-01-29 2014-08-07 Advanced Micro Devices, Inc. Solution to divergent branches in a simd core using hardware pointers

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
大津金光,外3名: "プログラム実行パスに基づいた投機スレッド分割", システム制御情報学会論文誌, vol. 第22巻,第6号, JPN6017013435, JP, pages Pages:209〜219 *
玉造潤史,外1名: "Runtime Restructuringによる複数コントロールフロー予測", 情報処理学会研究報告, vol. 第2002巻,第81号,(2002-ARC-149), JPN6017013437, 23 August 2002 (2002-08-23), JP, pages Pages:49〜54 *
酒井淳嗣,外6名: "制御並列アーキテクチャ向け自動並列化コンパイル手法", 情報処理学会論文誌, vol. 第40巻,第5号, JPN6017013433, 15 May 1999 (1999-05-15), JP, pages Pages:2045〜2053 *

Also Published As

Publication number Publication date
JP6167193B1 (ja) 2017-07-19

Similar Documents

Publication Publication Date Title
JP6143872B2 (ja) 装置、方法、およびシステム
JP5894120B2 (ja) ゼロサイクルロード
US10417001B2 (en) Physical register table for eliminating move instructions
JP3927546B2 (ja) 同時マルチスレッド化プロセッサ
JP5499029B2 (ja) 仮想処理装置のための割込み制御
US10761846B2 (en) Method for managing software threads dependent on condition variables
JP7149405B2 (ja) 複数のテーブルの分岐ターゲットバッファ
KR20170076564A (ko) 레지스터 리네이밍을 사용한 무브 명령어 처리
JP5548037B2 (ja) 命令発行制御装置及び方法
US20120079241A1 (en) Instruction execution based on outstanding load operations
WO2017030692A1 (en) Storing narrow produced values for instruction operands directly in a register map in an out-of-order processor
JP2006260571A (ja) デュアルスレッドプロセッサ
US10831537B2 (en) Dynamic update of the number of architected registers assigned to software threads using spill counts
US20130179662A1 (en) Method and System for Resolving Thread Divergences
JP2006040141A (ja) マルチスレッドプロセッサ
US20070028151A1 (en) Supervisory operating system for running multiple child operating systems simultaneously and optimizing resource usage
GB2520731A (en) Soft-partitioning of a register file cache
US7203821B2 (en) Method and apparatus to handle window management instructions without post serialization in an out of order multi-issue processor supporting multiple strands
US9223714B2 (en) Instruction boundary prediction for variable length instruction set
JP2017537408A (ja) アウトオブオーダー(ooo)プロセッサにおける早期命令実行を提供すること、ならびに関連する装置、方法、およびコンピュータ可読媒体
US8701122B2 (en) Method and system for exception-less system calls in an operating system
JP7131313B2 (ja) 演算処理装置および演算処理装置の制御方法
JP6167193B1 (ja) プロセッサ
US20140229677A1 (en) Hiding instruction cache miss latency by running tag lookups ahead of the instruction accesses
US10430342B2 (en) Optimizing thread selection at fetch, select, and commit stages of processor core pipeline

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170418

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170606

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170613

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170626

R150 Certificate of patent or registration of utility model

Ref document number: 6167193

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250