(57)【要約】【課題】複数のコアがメモリバスを共有する演算処理装置におけるメモリアクセス性能を向上させることにある。【解決手段】主記憶装置であるメモリに接続されるプロセッサにて、メモリに対するメモリアクセスを実行するメモリコントローラと、命令をそれぞれ実行する複数のコアと、メモリに対する複数のコアによるメモリアクセス命令の実行を制御する命令制御部と、命令制御部からの指示に応じて、メモリコントローラと複数のコアとの間のデータ転送を制御するデータ転送制御部とを有し、命令制御部がメモリに対する各コアのメモリアクセス命令を一括制御する。【選択図】図１
2018165913.tif 000002
【特許請求の範囲】
【請求項１】
主記憶装置に接続される演算処理装置であって、
前記主記憶装置に対するメモリアクセスを実行するメモリ制御部と、
命令をそれぞれ実行する複数の演算処理部と、
前記主記憶装置に対する前記複数の演算処理部によるアクセス命令の実行を制御する命令制御部と、
前記命令制御部からの指示に応じて、前記メモリ制御部と前記複数の演算処理部との間のデータ転送を制御する転送制御部とを有する演算処理装置。
【請求項２】
前記アクセス命令が２以上の前記演算処理部に同一データを転送する命令である場合、前記転送制御部は、前記主記憶装置から読み出されたデータを前記２以上の前記演算処理部に一斉転送する請求項１記載の演算処理装置。
【請求項３】
前記転送制御部は、前記命令制御部からデータのコピーが指示された場合、前記複数の演算処理部の内の前記演算処理部からデータを取得し、取得したデータを前記主記憶装置を介さずに他の前記演算処理部に供給する請求項１又は２記載の演算処理装置。
【請求項４】
前記転送制御部は、データバッファを有し、
前記演算処理部から取得したデータを前記データバッファに保持し、前記データバッファから前記他の演算処理部にデータを供給する請求項３記載の演算処理装置。
【請求項５】
前記転送制御部は、前記複数の演算処理部の内の第１の前記演算処理部から取得した第１のデータと、前記複数の演算処理部の内の第２の前記演算処理部から取得した第２のデータとを、１つの要求で前記主記憶装置への書き込みを行わせる請求項１〜４の何れか１項に記載の演算処理装置。
【請求項６】
前記転送制御部は、１つの要求で前記主記憶装置から読み出されたデータを、前記複数の演算処理部の内の第１の前記演算処理部に供給する第１のデータと、前記複数の演算処理部の内の第２の前記演算処理部に供給する第２のデータとに分割して供給する請求項１〜５の何れか１項に記載の演算処理装置。
【請求項７】
データを記憶する主記憶装置と、
前記主記憶装置に接続される演算処理装置とを有し、
前記演算処理装置は、
前記主記憶装置に対するメモリアクセスを実行するメモリ制御部と、
命令をそれぞれ実行する複数の演算処理部と、
前記主記憶装置に対する前記複数の演算処理部によるアクセス命令の実行を制御する命令制御部と、
前記命令制御部からの指示に応じて、前記メモリ制御部と前記複数の演算処理部との間のデータ転送を制御する転送制御部とを有する情報処理装置。
【請求項８】
主記憶装置に接続される演算処理装置の制御方法であって、
前記演算処理装置が有するメモリ制御部が前記主記憶装置に対するメモリアクセスを実行し、
前記演算処理装置が有する命令制御部が、命令をそれぞれ実行する複数の演算処理部による前記主記憶装置に対するアクセス命令の実行を制御し、
前記演算処理装置が有する転送制御部が、前記命令制御部からの指示に応じて、前記メモリ制御部と前記複数の演算処理部との間のデータ転送を制御する演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置、情報処理装置、及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
１つのプロセッサに複数の演算処理部としてのプロセッサコア（以下、「コア」という）を有するマルチコアアーキテクチャでは、各コア内にメモリロード・ストア命令を実行する実行制御部と演算命令を実行する実行制御部とを設け、主記憶（メインメモリ）へのデータの読み出し（ロード）や書き込み（ストア）と演算処理をコア毎に行う手法が知られている。また、搭載するコアの数が多い場合、回路実装の都合から主記憶へのアクセスバスを複数コア間で共有することが一般的に行われる。このようなマルチコア演算装置（プロセッサ）の構成例を図２４に示す。
【０００３】
図２４に示すプロセッサ２４００は、複数のコア２４１０及びメモリコントローラ２４２０を有する。コア２４１０の各々は、ホストデバイス２４０２からの命令を制御する命令制御部２４１１、演算処理を行う演算実行部２４１２、及び主記憶装置であるメモリ２４０１に対するデータの読み出しや書き込みを行うロード・ストア実行部２４１３を有する。ロード・ストア実行部２４１３は、ストア待ちのデータを保持するデータバッファ２４１４を有する。また、コア２４１０の各々は、メモリ２４０１に係る制御を行うメモリコントローラ２４２０とメモリバスを介して接続される。
【０００４】
図２４に示したプロセッサにおけるメモリアクセスの動作例を図２５及び図２６に示す。図２５（Ａ）〜図２５（Ｃ）は、複数のコアが並列してメモリへのデータの書き込み（ストア）を行う場合の動作を示している。図２５（Ａ）に示すように、最初にコア＃０（２４１０−０）内部の命令制御部２４１１−０でストア命令が実行され、ロード・ストア実行部２４１３−０からメモリバスを経由してメモリコントローラ２４２０へライト要求と当該ライト要求の対象であるライトデータが転送される。
【０００５】
この転送中にコア＃１（２４１０−１）でもストア命令が実行された場合、図２５（Ｂ）に示すようにコア＃１（２４１０−１）も同様にライト要求とライトデータをメモリバスへ出力しようとする。しかし、コア＃０（２４１０−０）がメモリバスを使用しているため、その転送が完了するまで待たされる。そして、コア＃０（２４１０−０）のデータ転送が完了すると、図２５（Ｃ）に示すように、コア＃１（２４１０−１）のロード・ストア実行部２４１３−１からメモリバスを経由してメモリコントローラ２４２０へライト要求とライトデータが転送される。このように複数のコアでメモリバスを共有する場合、各コアは、メモリバスを獲得できるまでの期間、データを滞留させるためのデータバッファ２４１４を持つ必要がある。
【０００６】
図２６（Ａ）〜図２６（Ｄ）は、複数のコアが並列してメモリの同一アドレスからデータの読み出し（ロード）を行う場合の動作を示している。図２６（Ａ）に示すように、最初にコア＃０（２４１０−０）内部の命令制御部２４１１−０でロード命令が実行され、ロード・ストア実行部２４１３−０からメモリバスを経由してメモリコントローラ２４２０へアドレスＸに係るリード要求が転送される。コア＃０（２４１０−０）のロード・ストア実行部２４１３−０からのリード要求に対する応答として、図２６（Ｂ）に示すように、メモリ２４０１からデータＹが読み出されてコア＃０（２４１０−０）に供給される。
【０００７】
この後に、図２６（Ｃ）に示すように、コア＃１（２４１０−１）でも同じアドレスＸのデータが必要となりロード命令が実行された場合、再度メモリコントローラ２４２０にアドレスＸに係るリード要求が行われる。コア＃１（２４１０−１）からのリード要求に対する応答として、図２６（Ｄ）に示すように、メモリ２４０１からデータＹが再び読み出されてコア＃１（２４１０−１）に供給される。すなわち、各コアの演算内容が同様の演算内容であり共通のデータを必要とする場合でもコア毎にメモリアクセスが発生する。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平５−１０１２０７号公報
【特許文献２】特開２００７−１４８７０９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
前述したような複数のコアがメモリバスを共有するプロセッサでは、コア毎に独立してメモリアクセス制御命令を実行する。そのため、コア間のバス調停等の制御を行う回路を設けたり、バス競合時にライトデータを待機するためのデータバッファを各コアに設けたりするため、回路物量が大きい。また、同一のデータを複数のコアがメモリに対して要求する場合、バス帯域を無駄に消費することがあった。なお、これらの問題はいずれも、チップ上に搭載されるコアの数が増加するほど影響が顕著である。１つの側面では、本発明の目的は、複数のコアがメモリバスを共有する演算処理装置におけるメモリアクセス性能を向上させることにある。
【課題を解決するための手段】
【００１０】
演算処理装置の一態様は、接続される主記憶装置に対するメモリアクセスを実行するメモリ制御部と、命令をそれぞれ実行する複数の演算処理部と、主記憶装置に対する複数の演算処理部によるアクセス命令の実行を制御する命令制御部と、命令制御部からの指示に応じて、メモリ制御部と複数の演算処理部との間のデータ転送を制御する転送制御部とを有する。
【発明の効果】
【００１１】
発明の一態様においては、複数のコアがメモリバスを共有する演算処理装置にて、メモリバスの制御を改善しメモリアクセス性能を向上させることができる。
【図面の簡単な説明】
【００１２】
【図１】図１は、第１の実施形態における情報処理装置の構成例を示すブロック図である。
【図２】図２（Ａ）及び図２（Ｂ）は、第１の実施形態におけるプロセッサのメモリアクセス動作例を示す図である。
【図３】図３（Ａ）及び図３（Ｂ）は、第１の実施形態におけるプロセッサのメモリアクセス動作例を示す図である。
【図４】図４（Ａ）及び図４（Ｂ）は、第１の実施形態におけるプロセッサのメモリアクセス動作例を示す図である。
【図５】図５は、第１の実施形態におけるプロセッサの動作例を示すフローチャートである。
【図６】図６は、第１の実施形態におけるメモリアクセス処理の流れの一例を示す図である。
【図７】図７は、第１の実施形態におけるメモリアクセス処理の流れの他の例を示す図である。
【図８】図８（Ａ）〜図８（Ｃ）は、第１の実施形態における命令コードの例を示す図である。
【図９】図９は、第２の実施形態における情報処理装置の構成例を示すブロック図である。
【図１０】図１０は、第２の実施形態における命令コードの例を示す図である。
【図１１】図１１は、第３の実施形態における情報処理装置の構成例を示すブロック図である。
【図１２】図１２（Ａ）〜図１２（Ｃ）は、命令“ｃｏｐｙ”によりデータをコピーする動作例を示す図である。
【図１３】図１３は、第３の実施形態における動作の流れの一例を示す図である。
【図１４】図１４は、第４の実施形態における情報処理装置の構成例を示すブロック図である。
【図１５】図１５（Ａ）〜図１５（Ｃ）は、命令“ｐｕｓｈｓ”によりデータを転送する動作例を示す図である。
【図１６】図１６（Ａ）〜図１６（Ｃ）は、命令“ｐｕｌｌｍ”によりデータを転送する動作例を示す図である。
【図１７】図１７（Ａ）〜図１７（Ｃ）は、命令“ｐｕｓｈｓ”によりデータを転送する他の動作例を示す図である。
【図１８】図１８は、第４の実施形態における動作の流れの一例を示す図である。
【図１９】図１９は、第５の実施形態における情報処理装置の構成例を示すブロック図である。
【図２０】図２０は、第６の実施形態における情報処理装置の構成例を示すブロック図である。
【図２１】図２１は、第６の実施形態における動作の流れの一例を示す図である。
【図２２】図２２は、第７の実施形態における情報処理装置の構成例を示すブロック図である。
【図２３】図２３は、第７の実施形態における動作の流れの一例を示す図である。
【図２４】図２４は、マルチコア演算装置（プロセッサ）の構成例を示す図である。
【図２５】図２５（Ａ）〜図２５（Ｃ）は、複数のコアがメモリへのデータの書き込みを行う場合の動作例を示す図である。
【図２６】図２６（Ａ）〜図２６（Ｄ）は、複数のコアがメモリの同一アドレスからデータの読み出しを行う場合の動作例を示す図である。
【発明を実施するための形態】
【００１３】
以下、本発明の実施形態を図面に基づいて説明する。
【００１４】
（第１の実施形態）
本発明の第１の実施形態について説明する。図１は、第１の実施形態における情報処理装置の構成例を示すブロック図である。第１の実施形態における情報処理装置は、演算処理装置としてのプロセッサ１００及び主記憶装置としてのメモリ１０１を有する。プロセッサ１００は、通信可能に接続されるホストデバイス１０２から供給される命令コードに従って処理動作を実行する。
【００１５】
プロセッサ１００は、命令制御部１１０、データ転送制御部１２０、メモリコントローラ１３０、及び複数のプロセッサコア（以下「コア」という）１４０を有する。図１には、プロセッサ１００が３つのコア１４０−０、１４０−１、１４０−２を有する例を示しているが、プロセッサ１００が有する複数のコアの数は任意である。
【００１６】
命令制御部１１０は、プロセッサ１００における命令に応じた処理動作の実行を制御する。命令制御部１１０は、例えばプロセッサ１００が有するすべてのコア１４０によるメモリ１０１に対するリード命令及びライト命令を一括制御する。すなわち、命令制御部１１０は、メモリ１０１に対する各コア１４０のメモリアクセス命令を集約して制御する。
【００１７】
命令制御部１１０は、処理制御部１１１及び命令バッファ１１２を有する。処理制御部１１１は、命令バッファ１１２から１行ずつ命令を取り出し、その命令に基づいて実行する動作を識別して各ハード資源に指示を行う。処理制御部１１１は、メモリ１０１に対するリード命令及びライト命令に応じた動作の実行をデータ転送制御部１２０に指示したり、演算命令に応じた動作の実行をコア１４０に指示したりする。命令バッファ１１２は、実行する命令コードを格納する。
【００１８】
データ転送制御部１２０は、命令制御部１１０からの指示に応じてメモリコントローラ１３０と各コア１４０との間のデータ転送を制御する。データ転送制御部１２０と各コア１４０とはメモリバスを介して接続される。メモリ制御部としてのメモリコントローラ１３０は、データ転送制御部１２０の要求に従ってメモリ１０１に対するメモリアクセス等を実行する。
【００１９】
データ転送制御部１２０は、メモリ１０１からコア１４０へデータを転送する指示（ｐｕｓｈ指示）を命令制御部１１０から受けると、メモリ１０１に対するリード要求をメモリコントローラ１３０に発行し、リード要求に応じて読み出されたデータをコア１４０に供給する。また、データ転送制御部１２０は、コア１４０からメモリ１０１へデータを転送する指示（ｐｕｌｌ指示）を命令制御部１１０から受けると、コア１４０からデータを取得して、取得したデータをライトデータとするメモリ１０１に対するライト要求をメモリコントローラ１３０に発行する。
【００２０】
命令を実行する演算処理部としてのコア１４０の各々は、演算命令に応じた処理の実行を制御する演算命令制御部１４１、及び演算命令に応じた処理を実行する演算実行部１４４を有する。演算命令制御部１４１は、処理制御部１４２及び命令バッファ１４３を有する。処理制御部１４２は、命令バッファ１４３から１行ずつ命令を取り出し、その命令に応じた演算処理の実行を演算実行部１４４に指示する。命令バッファ１４３は、コア１４０において実行する命令コードを格納する。
【００２１】
演算実行部１４４は、演算処理を行う演算器１４５及びレジスタユニット１４６を有する。レジスタユニット１４６は、メモリ１０１から読み出した演算の入力データや演算後の結果データを記憶するレジスタ群である。この例では、＃０−＃１５までの番号付けされた１６本のレジスタを持ち、１つのレジスタあたり４バイト（Ｂｙｔｅ）の記憶領域を有するものとする。また、本実施形態においては、命令バッファ１１２及び命令バッファ１４３に格納される命令コードは、ホストデバイス１０２から供給されるものとする。
【００２２】
ここで、命令制御部１１０が扱う命令セットとして下記の命令“ｐｕｓｈ”、“ｐｕｌｌ”、“ｅｘｅｃ”、“ｗａｉｔ”、“ｈａｌｔ”を定義する。
・ｐｕｓｈ＜メモリアドレス＞＜レジスタ番号＞＜コア番号＞
命令“ｐｕｓｈ”は、指定されたメモリアドレスから４バイトデータを読み出し、指定されたコアの指定されたレジスタに書き込む。
・ｐｕｌｌ＜メモリアドレス＞＜レジスタ番号＞＜コア番号＞
命令“ｐｕｌｌ”は、指定されたコアの指定されたレジスタから４バイトデータを読み出し、指定されたメモリアドレスに書き込む。
・ｅｘｅｃ＜コード番号＞＜コア番号＞
命令“ｅｘｅｃ”は、指定されたコアの演算命令制御部１４１に対して、指定されたコード番号の命令コードを実行させる。
・ｗａｉｔ＜命令種＞
命令“ｗａｉｔ”は、先行して発行された指定の命令種が完了するまで後続の命令を処理せずに待機する。
・ｈａｌｔ
命令“ｈａｌｔ”は、命令処理を終了してホストデバイスに完了通知を発行する。
【００２３】
また、演算命令制御部１４１が扱う命令セットとして下記の命令“ａｄｄ”、“ｓｕｂ”、“ｍｕｌ”、“ｊｍｐ”、“ｈａｌｔ”を定義する。
・ａｄｄ＜レジスタ番号１＞＜レジスタ番号２＞＜レジスタ番号３＞
命令“ａｄｄ”は、レジスタ番号１、２で指定された２つのレジスタのデータを加算し、結果をレジスタ番号３で指定されたレジスタに書き込む。
・ｓｕｂ＜レジスタ番号１＞＜レジスタ番号２＞＜レジスタ番号３＞
命令“ｓｕｂ”は、レジスタ番号１、２で指定された２つのレジスタのデータを減算し、結果をレジスタ番号３で指定されたレジスタに書き込む。
・ｍｕｌ＜レジスタ番号１＞＜レジスタ番号２＞＜レジスタ番号３＞
命令“ｍｕｌ”は、レジスタ番号１、２で指定された２つのレジスタのデータを積算し、結果をレジスタ番号３で指定されたレジスタに書き込む。
・ｊｍｐ＜レジスタ番号＞＜行番号＞
命令“ｊｍｐ”は、指定されたレジスタに格納されたデータ値が０以上であるとき、指定された行の命令を次に実行し、指定されたレジスタに格納されたデータ値が０未満であるとき、指定行に移動せず次の行の命令を実行する。
・ｈａｌｔ
命令“ｈａｌｔ”は、命令処理を終了して命令制御部１１０に完了通知を発行する。
【００２４】
本実施形態におけるプロセッサ１００でのメモリアクセス動作例を図２、図３、及び図４に示す。なお、図１に示した構成要素と同一の構成要素には同一の符号を付している。図２（Ａ）、図２（Ｂ）、図３（Ａ）、及び図３（Ｂ）は、命令制御部１１０が各コア１４０へのメモリデータの転送を制御する動作を示している。図２（Ａ）及び図２（Ｂ）に示すように、命令制御部１１０が、最初にコア＃０（１４０−０）宛のｐｕｓｈ指示を実行し、これを受けてデータ転送制御部１２０がメモリ１０１に対するリード要求を行ってデータを取得しコア＃０（１４０−０）に転送（ｐｕｓｈ）する。
【００２５】
続いて、図３（Ａ）に示すように、命令制御部１１０が、コア＃１（１４０−１）宛のｐｕｌｌ指示を実行し、これを受けてデータ転送制御部１２０がコア＃１（１４０−１）からデータを取り出して（ｐｕｌｌ）からメモリ１０１に対するライト要求を行ってメモリ１０１にデータを書き込む。また、図３（Ｂ）に示すように、命令制御部１１０が、コア＃０（１４０−０）宛のｐｕｌｌ指示を実行し、これを受けてデータ転送制御部１２０がコア＃０（１４０−０）からデータを取り出して（ｐｕｌｌ）からメモリ１０１に対するライト要求を行ってメモリ１０１にデータを書き込む。
【００２６】
このように本実施形態では、メモリバスの使用権を各コアではなく命令制御部１１０が統括的に制御することで、各コアからバス競合時にデータを待機するためのデータバッファが不要になり、回路物量が削減できる。
【００２７】
図４（Ａ）及び図４（Ｂ）は、命令制御部１１０がすべてのコア１４０に対してメモリデータをブロードキャストする動作を示している。図４（Ａ）に示すように、命令制御部１１０が、コア＃０〜＃２（１４０−０〜１４０−２）に対するブロードキャストのｐｕｓｈ指示を実行し、これを受けてデータ転送制御部１２０がメモリ１０１に対するリード要求を行う。そして、図４（Ｂ）に示すように、データ転送制御部１２０が、メモリ１０１に対するリード要求に対する応答としてデータを取得してコア＃０〜＃２（１４０−０〜１４０−２）に一斉転送する。このように本実施形態では、各コアが共通して必要とするデータをブロードキャストする命令で記述し実行させることで、同一データの重複アクセスを削減しスループットを向上させることができる。
【００２８】
次に、本実施形態におけるプロセッサ１００の動作フローについて説明する。
図５は、本実施形態におけるプロセッサ１００がホストデバイス１０２からの処理開始通知を受けてから一連の処理を完了するまでの動作例を示すフローチャートである。プロセッサ１００の命令制御部１１０は、ホストデバイス１０２から開始トリガを受信する（Ｓ５０１）と、自身が管理するＰｕｓｈ命令及びＰｕｌｌ命令を順に実行する。
【００２９】
まず、命令制御部１１０は、命令コードとして記述されたＰｕｓｈ命令の実行をデータ転送制御部１２０に指示しメモリ１０１からデータを読み出し、読み出したデータが宛先コア１４０に転送される（Ｓ５０２）。対象のコア１４０は、データ転送制御部１２０から転送されたデータ（Ｐｕｓｈデータ）を受信する（Ｓ５０３）。
【００３０】
一連のＰｕｓｈ命令の実行を完了した後、命令制御部１１０は、コア１４０の演算命令制御部１４１に演算実行指示を行う（Ｓ５０４）。演算実行指示を受けた演算命令制御部１４１は、自身が管理する演算命令の処理を順に実行し（Ｓ５０５）、すべての演算処理が完了したら命令制御部１１０に完了通知を応答する（Ｓ５０６）。コア１４０からの応答を受けた命令制御部１１０は、続くＰｕｌｌ命令の実行をデータ転送制御部１２０に指示し（Ｓ５０７）、演算結果がコア１４０のレジスタユニット１４６からメモリに書き込まれる（Ｓ５０８）。
【００３１】
図６は、第１の実施形態におけるメモリアクセス処理の流れの一例を示す図である。図６には、命令制御部１１０がコア＃０とコア＃１にそれぞれ必要な演算命令とデータを供給し、コア毎に演算命令を実行させるｅｘｅｃ指示を行い、各コアからの演算完了通知を待ってから結果データを取得してメモリ１０１に書き戻す流れを示している。
【００３２】
命令制御部１１０がデータ転送制御部１２０にｐｕｓｈ指示を実行すると（６０１、６０７、６１９）、それを受けたデータ転送制御部１２０がメモリ１０１に対するリード要求を行う（６０２、６０８、６２０）。そして、データ転送制御部１２０が、リード要求の応答としてメモリ１０１からのリードデータを受けると（６０３、６０９、６２１）、そのデータを宛先のコアに転送（ｐｕｓｈ）して（６０４、６１０、６２２）、命令制御部１１０に完了通知を送る（６０５、６１１、６２３）。
【００３３】
命令制御部１１０は、データ転送制御部１２０からの完了通知を受けると、コアに演算命令を実行させるｅｘｅｃ指示を行う（６０６、６１２、６２４）。命令制御部１１０からのｅｘｅｃ指示を受けたコアは、演算命令を実行し、演算処理が完了すると命令制御部１１０に完了通知を送る（６１３）。
【００３４】
コアからの完了通知を受けると命令制御部１１０がデータ転送制御部１２０にｐｕｌｌ指示を実行し（６１４）、それを受けたデータ転送制御部１２０がコアに対して演算結果の取得を要求する（６１５）。そして、データ転送制御部１２０が、要求に対する応答としてコアから演算結果データを受けると（６１６）、そのデータをメモリ１０１に書き込み（６１７）、命令制御部１１０に完了通知を送る（６１８）。
【００３５】
図７は、第１の実施形態におけるメモリアクセス処理の流れの他の例を示す図である。図７には、各コアの演算器の動作率が向上するようにデータ転送の方式を改善した例を示している。この例では各コアのデータ記憶領域を演算実行用とプリフェッチ用に分けて制御を行っている。
【００３６】
例えば、命令制御部１１０は、最初にコア＃０の演算用記憶領域に対してデータＡを供給し演算開始を指示するが（７０１〜７０６）、その演算実行中にデータＣをコア＃０のプリフェッチ領域に供給する（７１３〜７１７）。同様に、命令制御部１１０は、コア＃１に対してもデータＢの演算実行中にプリフェッチ領域にデータＤを供給する（７１８〜７２２）。
【００３７】
また、命令制御部１１０は、各コアの演算が終わった際には結果データを取得する前にプリフェッチデータに対して次の演算開始を指示しておく（７２４）。このように各コアでの演算実行中に前の演算結果の取得と次の演算処理に用いるデータの供給を行うことで、メモリアクセスのレイテンシを演算時間で隠蔽することができ、演算器をデータ供給待ち状態にすることなく稼働させ続けることが可能となる。
【００３８】
なお、図６及び図７では、簡単のために命令制御部１１０からデータ転送制御部１２０に対して１命令ずつ指示が行われ、逐次処理される流れを示しているが、これに限定されるものではない。命令制御部１１０からデータ転送制御部１２０に対して複数の命令を一度に発行し、データ転送制御部１２０がメモリバスの使用率が最大となるように命令の順序を入れ替えてｐｕｓｈやｐｕｌｌを発行するスケジューラの機能を持つ構成とすることでさらに効率的に制御できる。
【００３９】
図８（Ａ）〜図８（Ｃ）は、第１の実施形態における命令コードの例を示す図である。以下では、命令制御部１１０が実行する命令コードを「マスター命令コード」とも称し、演算命令制御部１４１が実行する命令コードを「スレーブ命令コード」とも称する。
【００４０】
図８（Ａ）には、命令制御部１１０が実行するマスター命令コードの例を示している。このマスター命令コードでは、まず＃０００、＃００１において命令“ｐｕｓｈ”によりメモリアドレス０ｘ００００、０ｘ０００４のデータを読み出し、コア＃０及びコア＃１のレジスタにブロードキャストして書き込む。次に、＃００２において命令“ｐｕｓｈ”によりメモリアドレス０ｘ０００８のデータをコア＃０のレジスタに書き込み、続く＃００３においてコア＃０宛の命令“ｐｕｓｈ”が完了するまで待機してから＃００４において命令“ｅｘｅｃ”によりコア＃０にスレーブ命令コード０の実行を指示する。
【００４１】
同様に＃００５において命令“ｐｕｓｈ”によりメモリアドレス０ｘ０００ａのデータをコア＃１のレジスタに書き込み、続く＃００６においてコア＃１宛の命令“ｐｕｓｈ”が完了するまで待機してから＃００７において命令“ｅｘｅｃ”によりコア＃１にスレーブ命令コード０の実行を指示する。ここで、＃００３、＃００６で命令“ｗａｉｔ”を行うのは、＃０００−＃００２、＃００５の命令“ｐｕｓｈ”が完了していない（つまり、メモリデータがレジスタに格納されていない）状態でスレーブ命令コードを実行し、誤ったデータを使用して演算が行われるのを避けるためである。
【００４２】
続いて次の演算の準備のため、＃００８−＃０１１において命令“ｐｕｓｈ”により別のメモリアドレスのデータをコア＃０、コア＃１のレジスタに書き込む。これらのレジスタはスレーブ命令コード０では使用されておらず、スレーブ命令コード０の完了まで待機後に実行されるスレーブ命令コード１で使用される。
【００４３】
その後は、コア＃０、コア＃１のそれぞれについてスレーブ命令コード０が完了し、さらにスレーブ命令コード１のための命令“ｐｕｓｈ”が完了するまで待機してからスレーブ命令コード１の実行指示とスレーブ命令コード０の演算結果の取得を行う。具体的には、＃０１２、＃０１３でコア＃０の先行命令が完了したことを保証し、＃０１４でコア＃０にスレーブ命令コード１の実行指示を行い、＃０１５でスレーブ命令コード０の演算結果をメモリアドレス０ｘ００１０に書き戻す。同様に、＃０１６、＃０１７でコア＃１の先行命令が完了したことを保証し、＃０１８でコア＃１にスレーブ命令コード１の実行指示を行い、＃０１９でスレーブ命令コード０の演算結果をメモリアドレス０ｘ００１４に書き戻す。
【００４４】
最後に、＃０２０においてスレーブ命令コード１が完了するまで待機してから＃０２１、＃０２２において結果データのメモリへの書き戻しを行い、＃０２３で処理を完了してホストデバイスに通知する。
【００４５】
図８（Ｂ）には、演算命令制御部１４１が実行するスレーブ命令コード０の例を示している。このスレーブ命令コード０では、＃０００においてレジスタ＃０と＃１のデータ値を加算した結果をレジスタ＃３に書き込む。続いて、＃００１においてレジスタ＃２と＃３のデータ値を積算した結果をレジスタ＃７に書き込み、＃００２で処理を完了して命令制御部１１０に通知する。
【００４６】
図８（Ｃ）には、演算命令制御部１４１が実行するスレーブ命令コード１の例を示している。このスレーブ命令コード１では、＃０００においてレジスタ＃８から＃９のデータ値を減算した結果をレジスタ＃ｂに書き込む。続いて、＃００１においてレジスタ＃ｂの値が０以上であるか否かを判定し、０以上であれば行を飛ばして＃００４の積算を実行して＃００５で処理を完了する。また、レジスタ＃ｂの値が０未満である場合、＃００２の積算を実行して＃００３で処理を完了する。
【００４７】
このように本実施形態では、メモリバスを管理するロード命令やストア命令の実行に係る制御部を各コアの演算命令制御部１４１から分離することで、メモリアクセスをただ１つの命令制御部１１０により管理する。このようにして、すべてのコアに対するメモリアクセス命令を一元的に記述し命令制御部１１０により制御することにより、バス競合や読み出しデータの重複を発生することなく、メモリバス制御を行え、メモリアクセス性能を向上させることができる。また、バス権の調停を行う制御回路等が不要となり回路物量を削減することができる。また、各コアに演算命令制御部１４１を有することで、コア毎に異なる演算（例えば分岐命令を含む複雑な演算）を実行させることができ、並列性を損なうことなく演算処理の実行が可能となる。
【００４８】
（第２の実施形態）
次に、本発明の第２の実施形態について説明する。前述した第１の実施形態では、命令制御部１１０や演算命令制御部１４１の命令バッファにホストデバイス１０２が予め命令コードを格納してから動作開始を指示する例を示した。第１の実施形態における方式では命令バッファに格納できるサイズの命令コードを扱うことになるが、第２の実施形態では、命令コードをメモリに格納して命令バッファに随時読み出す機構を持たせることで、実行可能な命令コードのサイズを大きくする。
【００４９】
図９は、第２の実施形態における情報処理装置の構成例を示すブロック図である。図９において、図１に示した構成要素と同一の機能を有する構成要素には同一の符号を付し、重複する説明は省略する。第２の実施形態におけるプロセッサ９００では、命令制御部１１０が、処理制御部１１１及び命令バッファ１１２に加え、命令フェッチ制御部９０１を有する。
【００５０】
命令フェッチ制御部９０１は、命令コードが格納されているメモリアドレスを把握し、命令バッファ内の命令がすべて実行されたときにデータ転送制御部１２０を経由してメモリ１０１から後続の命令コードを読み込んで命令バッファに格納する。これにより、命令制御部１１０は、必要に応じてメモリ１０１から命令コードを取得することが可能となり、命令バッファに収まらない大きなサイズの命令コードを扱うことが可能になる。
【００５１】
ここで、第２の実施形態では、第１の実施形態における命令制御部１１０の命令セットに下記の命令“ｐｕｓｈｃ”を追加する。
・ｐｕｓｈｃ＜メモリアドレス＞＜コード番号＞＜コア番号＞
命令“ｐｕｓｈｃ”は、指定されたメモリアドレスから所定のデータ長（例えば２５６バイト）のデータを読み出し、指定されたコアの命令バッファに指定されたコード番号の命令コードとして書き込む。
【００５２】
図１０は、第２の実施形態における命令制御部１１０が実行するマスター命令コードの例を示す図である。図８（Ａ）に示した第１の実施形態におけるマスター命令コードとは、＃０００においてメモリアドレス＃０ｘｅ０００から２５６バイトのデータを読み出してコア＃０及びコア＃１の命令バッファ１４３にスレーブ命令コード０として格納している点、また＃００９においてメモリアドレス＃０ｘｆ０００から２５６バイトのデータを読み出しコア＃０及びコア＃１の命令バッファ１４３にスレーブ命令コード１として格納している点が異なる。この命令“ｐｕｓｈｃ”を実装することにより、演算命令制御部１４１は命令制御部１１０からスレーブ命令コードの供給を受けることができ、命令バッファに収まらない大きなサイズの命令コードを実行可能となる。
【００５３】
（第３の実施形態）
次に、本発明の第３の実施形態について説明する。前述した第１の実施形態では、命令制御部１１０とデータ転送制御部１２０が各コア１４０からメモリ１０１へのデータ書き込み及びメモリ１０１から各コア１４０へのデータの読み出しを制御する例を示したが、メモリに対する読み出しや書き込みを行わずにコア間で直接データを転送する方式も考えられる。そこで、第３の実施形態では、メモリを介さずにコア間でデータ転送を行える機能を設ける。これにより、あるコアで実行した演算の結果を他のコアで使用したい場合等にメモリを経由して受け渡す必要がなくなり、転送レイテンシを改善することができる。
【００５４】
図１１は、第３の実施形態における情報処理装置の構成例を示すブロック図である。図１１において、図１に示した構成要素と同一の機能を有する構成要素には同一の符号を付し、重複する説明は省略する。第３の実施形態におけるプロセッサ１１００では、データ転送制御部１２０が、コピーバッファ１１０１を有する。コピーバッファ１１０１は、あるコア１４０が有するレジスタユニット１４６のレジスタから読み出したデータを、他のコア１４０が有するレジスタユニット１４６のレジスタに書き込む処理を行う際にデータを保持するバッファである。
【００５５】
ここで、第３の実施形態では、第１の実施形態における命令制御部１１０の命令セットに下記の命令“ｃｏｐｙ”を追加する。
・ｃｏｐｙ＜レジスタ番号１＞＜レジスタ番号２＞＜コア番号１＞＜コア番号２＞
命令“ｃｏｐｙ”は、コア番号１で指定されたコアのレジスタ番号１で指定されたレジスタから、コア番号２で指定されたコアのレジスタ番号２で指定されたレジスタに、データをコピーする。
【００５６】
図１２（Ａ）〜図１２（Ｃ）は、命令“ｃｏｐｙ”によりコア＃０のレジスタからコア＃１のレジスタにデータをコピーする動作例を示す図である。また、図１３は、第３の実施形態における動作の流れの一例を示す図である。図１２（Ａ）及び図１２（Ｂ）に示すように、命令制御部１１０によりコア＃０のレジスタからコア＃１のレジスタへデータをコピーする命令“ｃｏｐｙ”が実行されると、まずデータ転送制御部１２０がコア＃０のレジスタからデータを読み出す（図１３に示す１３０８〜１３１０）。そして、データ転送制御部１２０は、コア＃０のレジスタから読み出したデータをコピーバッファ１１０１に格納する。続いて、図１２（Ｃ）に示すように、データ転送制御部１２０は、コピーバッファ１１０１に格納したデータをコア＃１に書き込む（図１３に示す１３１１）。
【００５７】
このように第３の実施形態によれば、コア＃０のレジスタからコア＃１のレジスタへのデータ転送において、メモリコントローラ１３０へのアクセスが発生せず、高速なデータコピーを行うことが可能である。なお、データ転送制御部１２０にコピーバッファ１１０１を設ける代わりに、データ転送制御部１２０がコア＃０から読み出したデータを滞留させずにコア＃１宛に折り返すことでコピーを行うことも可能である。このようにすれば、コピーバッファ１１０１を実現する回路物量を削減することができる。
【００５８】
（第４の実施形態）
次に、本発明の第４の実施形態について説明する。第４の実施形態では、メモリからまとめて読み出した大きなデータブロックを分割して複数のコアに分配する分割読み出し（Ｓｐｌｉｔ  Ｐｕｓｈ）や、各コアのデータを結合して１かたまりの大きなデータブロックとし、まとめてメモリに書き込む結合書き込み（Ｍｅｒｇｅ  Ｐｕｌｌ）を実行可能にする。一般的にメモリアクセスのインタフェースは、各コアのレジスタファイルのサイズよりも大きなデータ単位でやり取りされ、小さなデータの読み出しや書き込みを行うとバスの使用効率が低下するため、メモリデータの分割読み出しや結合書き込みを行うことでバスの使用効率を改善することができる。
【００５９】
図１４は、第４の実施形態における情報処理装置の構成例を示すブロック図である。図１４において、図１に示した構成要素と同一の機能を有する構成要素には同一の符号を付し、重複する説明は省略する。第４の実施形態におけるプロセッサ１４００では、データ転送制御部１２０が、分割・結合制御部１４０１を有する。分割・結合制御部１４０１は、メモリ１０１から読み出したデータを上位ビット側と下位ビット側との２つに分割してコア＃０とコア＃１にそれぞれ転送する。また、分割・結合制御部１４０１は、コア＃０、コア＃１から読み出したデータを結合し１つのメモリに対するライト要求としてメモリコントローラ１３０に発行する。
【００６０】
ここで、第４の実施形態では、第１の実施形態における命令制御部１１０の命令セットに下記の命令“ｐｕｓｈｓ”、“ｐｕｌｌｍ”を追加する。
・ｐｕｓｈｓ＜メモリアドレス＞＜レジスタ番号１＞＜レジスタ番号２＞＜コア番号１＞＜コア番号２＞
命令“ｐｕｓｈｓ”は、指定されたメモリアドレスから８バイトデータを読み出し、番号１で指定されたコアのレジスタに上位４バイトを書き込み、番号２で指定されたコアのレジスタに下位４バイトを書き込む。
・ｐｕｌｌｍ＜メモリアドレス＞＜レジスタ番号１＞＜レジスタ番号２＞＜コア番号１＞＜コア番号２＞
命令“ｐｕｌｌｍ”は、番号１、２で指定されたコアのレジスタからそれぞれ４バイトデータを読み出し、番号１側のデータを上位側ビットとして８バイトデータに結合してから指定されたメモリアドレスに書き込む。
【００６１】
図１５（Ａ）〜図１５（Ｃ）は、命令“ｐｕｓｈｓ”によりメモリからコア＃０、コア＃１へデータを転送する動作例を示す図である。図１５（Ａ）に示すように、命令制御部１１０によりコア＃０、コア＃１へデータを転送する命令“ｐｕｓｈｓ”が実行されると、データ転送制御部１２０が、メモリ１０１から８バイトデータを読み出す。そして、データ転送制御部１２０の分割・結合制御部１４０１は、このデータを上下４バイトの２つのデータに分割し、図１５（Ｂ）に示すように上位側４バイトをコア＃０に転送し、図１５（Ｃ）に示すように下位側４バイトをコア＃１に転送する。なお、これは一例であり、下位側４バイトをコア＃１に転送した後に、上位側４バイトをコア＃０に転送するようにしても良い。
【００６２】
図１６（Ａ）〜図１６（Ｃ）は、命令“ｐｕｌｌｍ”によりコア＃０、コア＃１からメモリへデータを転送する動作例を示す図である。図１６（Ａ）に示すように、命令制御部１１０によりコア＃０、コア＃１からデータを転送する命令“ｐｕｌｌｍ”が実行されると、データ転送制御部１２０が、コア＃０、コア＃１にｐｕｌｌ要求を行う。そして、図１６（Ｂ）及び図１６（Ｃ）に示すように、データ転送制御部１２０がコア＃０、コア＃１から４バイトずつデータを読み出し、データ転送制御部１２０の分割・結合制御部１４０１がこのデータをコア＃０からのデータを上位側ビットとして８バイトに結合し、１つのライト要求としてメモリコントローラ１３０に転送する。なお、これは一例であり、コア＃１からデータを読み出した後に、コア＃０からデータを読み出すようにしても良い。
【００６３】
図１７（Ａ）〜図１７（Ｃ）は、命令“ｐｕｓｈｓ”によりメモリからコア＃０の２つの異なるレジスタへデータを転送する動作例を示す図である。図１７（Ａ）に示すように、命令制御部１１０により例えばコア＃０のレジスタ＃２及びレジスタ＃３を指定して命令“ｐｕｓｈｓ”が実行されると、データ転送制御部１２０が、メモリ１０１から８バイトデータを読み出す。そして、データ転送制御部１２０の分割・結合制御部１４０１は、このデータを上下４バイトの２つのデータに分割し、図１７（Ｂ）に示すように上位側４バイトをコア＃０のレジスタ＃２に転送し、図１７（Ｃ）に示すように下位側４バイトをコア＃０のレジスタ＃３に転送する。このように、分割読み出し・結合書き込みの対象を１つのコア内の複数レジスタとした場合も、複数のコアで実施する場合と同様に処理を行うことができる。なお、これは一例であり、下位側４バイトをレジスタ＃３に転送した後に、上位側４バイトをレジスタ＃２に転送するようにしても良い。
【００６４】
図１８は、第４の実施形態におけるメモリデータの分割読み出しや結合書き込みを行う動作の流れの一例を示す図である。このように第４の実施形態では、メモリデータの分割読み出しや結合書き込みを行うことで、各コア１４０とデータ転送制御部１２０との間の転送データＡ、Ｂに係る処理を、メモリ１０１に対する１回のリード要求又はライト要求で処理できるため、メモリコントローラ１３０とメモリ１０１間のバスの使用効率を向上させることができる。
【００６５】
なお、本実施形態において、扱うデータサイズは４バイトと８バイトに限定されない。例えば、３２バイトと６４バイト等の大きなデータサイズでの分割や結合を行えるようにしても良い。また、必ずしもメモリデータを各コアに対して均等に二分する必要はない。例えば、３２バイトのメモリデータのうちの８バイトをコア＃０に転送し、２４バイトをコア＃１に転送しても良い。さらに、２つのコア間での分割や結合に限らず、例えば３２バイトのメモリデータを４分割してコア＃０−コア＃３に転送するようにしても良い。
【００６６】
（第５の実施形態）
次に、本発明の第５の実施形態について説明する。一般に複数のコアを有するプロセッサ（演算処理装置）では、演算を開始するタイミングで大量のトランジスタが同時に動作を開始するため、大電流が流れることによるスイッチングノイズが発生して誤動作の原因となることがある。装置内の各コアで演算開始のタイミングをずらすことなどで、これを回避することができる。第５の実施形態では、例えばコア＃０とコア＃１に対して同時期に命令“ｅｘｅｃ”が実行されないように調整し、前述したスイッチングノイズの発生を抑制する。
【００６７】
図１９は、第５の実施形態における情報処理装置の構成例を示すブロック図である。図１９において、図１に示した構成要素と同一の機能を有する構成要素には同一の符号を付し、重複する説明は省略する。第５の実施形態におけるプロセッサ１９００では、命令制御部１１０が、処理制御部１１１及び命令バッファ１１２に加え、スケジュール部１９０１を有する。また、演算命令制御部１４１は、処理制御部１４２及び命令バッファ１４３に加え、スロットリング制御部１９０２を有する。
【００６８】
スケジュール部１９０１は、あるコア１４０に対して命令“ｅｘｅｃ”が実行されたときにタイマカウントを開始し、規定時間が経過するまで次の命令“ｅｘｅｃ”の実行を待機させる。ここで、規定時間は制御レジスタ等でソフトウェアが設定できるようにしても良い。命令制御部１１０のスケジュール部１９０１によって命令“ｅｘｅｃ”の最低実行間隔が保証されることで、複数のコアが同時に演算を開始することがなくなり、複数のコアが同時に動作開始することによるスイッチングノイズを低減できる。
【００６９】
スロットリング制御部１９０２は、命令制御部１１０からの指示を受けて処理制御部１４２のスループットを変更する。例えば、処理制御部１４２は、通常は１サイクルに１行の命令を処理可能であるが、これを２サイクルに１行、あるいは３サイクルに１行の処理をするように動作を間引く制御を行う。例えば、演算開始時には２サイクルに１回命令を実行するよう制御し、ある程度の時間をおいて解除し１サイクルに１回命令を実行するよう制御することで、動作開始時の電流変化を緩やかにし、コア内の演算器が同時に動作開始することによるスイッチングノイズを低減できる。
【００７０】
このような制御を実現するため、第５の実施形態では、第１の実施形態における命令制御部１１０の命令セットに下記の命令“ｔｈｒｏｔｔｌｅ”を追加する。
・ｔｈｒｏｔｔｌｅ＜サイクル数＞＜コア番号＞
命令“ｔｈｒｏｔｔｌｅ”は、指定されたサイクル数に１行ずつ命令処理を行うよう指定されたコアのスロットリング制御部１９０２に指示する。
【００７１】
なお、スロットリング制御を行うための命令を命令制御部１１０ではなく演算命令制御部１４１の命令として実装することも可能である。しかし、各コアに係る命令“ｐｕｓｈ”、“ｐｕｌｌ”、“ｅｘｅｃ”を制御している命令制御部１１０が各コアの演算実行状況を俯瞰的に判断でき、スロットリング制御を行うための命令を命令制御部１１０に実装することで、より効果的な制御を行うことができる。
【００７２】
（第６の実施形態）
次に、本発明の第６の実施形態について説明する。例えば、基幹系の分野で利用される演算処理装置は、故障発生時にも保守が行われるまで継続動作する機能を持つものがある。そこで、第６の実施形態では、プロセッサが有するコアの一部を予備コアとして扱い冗長性を設け、故障発生時にも継続動作可能なようにする。
【００７３】
図２０は、第６の実施形態における情報処理装置の構成例を示すブロック図である。図２０において、図１に示した構成要素と同一の機能を有する構成要素には同一の符号を付し、重複する説明は省略する。第６の実施形態におけるプロセッサ２０００では、命令制御部１１０が、処理制御部１１１及び命令バッファ１１２に加え、ＩＤ変換部２００１を有する。また、データ転送制御部１２０が、パリティ生成部２００２及びパリティチェック部２００３を有する。また、演算実行部１４４は、演算器１４５及びレジスタユニット１４６に加え、パリティ更新部２００４を有する。また、第６の実施形態におけるプロセッサ２０００では、コア＃２をコア＃０又はコア＃１が故障した場合の予備コアとする。
【００７４】
データ転送制御部１２０は、命令“ｐｕｓｈ”によりメモリ１０１からデータを読み出す際にパリティ生成部２００２でデータ８ビットあたり１ビットのパリティチェックサムを付加して各コア１４０のレジスタユニット１４６に転送する。データ転送制御部１２０からのデータを受信した各コア１４０は、チェックサムを保持し、演算器１４５の計算結果に応じてパリティ更新部２００４でチェックサムを更新する。
【００７５】
演算完了後、データ転送制御部１２０は、命令“ｐｕｌｌ”によりコア１４０からデータを読み出す際にパリティチェック部２００３でチェックサムが正しいか否かをチェックする。その結果、異常が検出された場合、データ転送制御部１２０は、そのデータの送信元であるコア１４０の番号を命令制御部１１０に故障情報として通知する。これらの機構により、運用中にコアの故障を検知することが可能となる。
【００７６】
また、ＩＤ変換部２００１は、マスター命令コードで指示されるコア番号（論理ＩＤ）を、実際のハードウェアの物理的なコア番号（物理ＩＤ）に変換する。故障が発生する前の通常時は、コア＃０及びコア＃１とも正常に動作しておりコア＃２は予備コアとして待機している状態であるので、ＩＤ変換部２００１は、論理ＩＤ＃０を物理ＩＤ＃０に変換し、論理ＩＤ＃１を物理ＩＤ＃１に変換して命令を実行する。すなわち、マスター命令コードに記述されているコア番号をそのまま使用してコア＃０、コア＃１にデータ転送や命令実行指示を行う。
【００７７】
例えば、運用中の劣化や初期不良等でコア＃０が故障し命令制御部１１０がそれを検知した場合、ＩＤ変換部２００１は論理ＩＤ＃０を物理ＩＤ＃２に変換し、論理ＩＤ＃１を物理ＩＤ＃１に変換するように動作を変更する。すなわち、マスター命令コードでコア＃０が指定された命令を実際にはコア＃２に対して実行する。このようにしてコアの故障を検知した際に命令コードのコア番号を予備コア番号に変換することで、故障したコアの代わりに予備コアを使用して動作を継続できる。
【００７８】
図２１は、第６の実施形態において故障検出してコアの切り替えを行う動作の流れの一例を示す図である。図２１に示す例では、コア＃０が処理したデータＡでパリティチェックサムの異常を検出し（２１１７）、以降は命令制御部１１０が命令中のコア＃０（論理ＩＤ＃０）を物理ＩＤ＃２に読み替えてデータ転送制御部１２０に指示を出すように論理物理ＩＤ変換を行う（２１１９）。コア＃２への切り替え後、パリティ異常を検出したデータＡのメモリリード処理からリトライすることで、命令処理を継続することができる。
【００７９】
なお、故障検出の手法としてパリティチェックサムをデータに付加する方法を示したが、これ以外の故障検出機構を用いても良い。例えば、装置のパワーオン時に各コアのレジスタファイルを自動で走査するＢＩＳＴ回路等を別に設けても良い。
【００８０】
（第７の実施形態）
次に、本発明の第７の実施形態について説明する。第６の実施形態で説明した故障検出及び動作継続の別形態として、以下に第７の実施形態として説明するように、複数のコアで完全に同一の処理を同期して行い、演算結果を比較することで故障を検出するミラーリングを行うことも可能である。
【００８１】
図２２は、第７の実施形態における情報処理装置の構成例を示すブロック図である。図２２において、図１に示した構成要素と同一の機能を有する構成要素には同一の符号を付し、重複する説明は省略する。第７の実施形態におけるプロセッサ２２００では、データ転送制御部１２０が、ミラー制御部２２０１を有する。
【００８２】
ミラー制御部２２０１は、ミラー動作の有効・無効をソフトウェアから設定可能なレジスタを有し、ミラー動作有効時には命令制御部１１０から指示されるコア＃０に対する命令をコア＃１、コア＃２にも複製して実行する機能を有する。また、ミラー制御部２２０１は、命令“ｐｕｌｌ”が複製されてコア＃０、コア＃１からデータを読み出した際、これらの値が同一であるかを比較チェックする。
【００８３】
図２３は、第７の実施形態においてコアミラーリングを行う動作の流れの一例を示す図である。図２３に示すように、命令制御部１１０からコア＃０に対する命令が指示されたとき、データ転送制御部１２０は、コア＃１にも同じ処理を複製して実行する。また、データ転送制御部１２０は、命令“ｐｕｌｌ”でコア＃０、コア＃１からデータを読み出した際、その値を比較して（２３１６）、一致していることを確認してからメモリへの書き戻しを行う。このようにしてコア＃１をコア＃０の複製として動作させ、両者の演算結果を比較チェックすることで、故障によりコア＃０、コア＃１のいずれかが誤動作した場合に直ちにこれを検出することができる。
【００８４】
なお、ミラー動作させるコアは必ずしも２つ１組である必要はない。例えば、３つのコアを１組としてミラー動作させれば、いずれかのコアに故障が発生して命令“ｐｕｌｌ”を実行したときの比較結果が不一致となった場合に多数決を取ることで直ちにいずれのコアが故障したのかを判別することができる。
【００８５】
なお、前述した各実施形態では、メモリバスのトポロジをメモリコントローラ起点のスター型と仮定しているが、これに限定されるものではない。例えば、コアを数珠つなぎに接続したリング型のバス形状としても良い。また、命令制御部１１０および演算命令制御部１４１の動作として「命令“ｗａｉｔ”で指示されない限り後続の命令は先行する命令の完了を待たずに実行される」制御を仮定したが、先行命令の完了を待ってから次の命令を実行する逐次処理型の処理であっても適用可能である。
【００８６】
また、命令制御部１１０の命令セットとして定義する命令は前述したものに限らず、型変換演算やデータ加工を行う命令をサポートしても良い。例えば下記の命令“ｐｕｓｈｉ”を追加しても良い。
・ｐｕｓｈｉ＜メモリアドレス＞＜レジスタ番号＞＜コア番号＞
命令“ｐｕｓｈｉ”は、指定されたメモリアドレスから４バイトデータを読み出し、浮動小数点型（ｆｌｏａｔ型）から整数型（ｉｎｔ型）に変換した後に指定されたコアのレジスタに書き込む。
また、前述した第１〜第７の実施形態は、それぞれ独立したものに限定されず、第１〜第７の実施形態を適宜組み合わせるようにしてもよい。
【００８７】
なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
以上の第１〜第７の実施形態を含む実施形態に関し、さらに以下の付記を開示する。
【００８８】
（付記１）
主記憶装置に接続される演算処理装置であって、
前記主記憶装置に対するメモリアクセスを実行するメモリ制御部と、
命令をそれぞれ実行する複数の演算処理部と、
前記主記憶装置に対する前記複数の演算処理部によるアクセス命令の実行を制御する命令制御部と、
前記命令制御部からの指示に応じて、前記メモリ制御部と前記複数の演算処理部との間のデータ転送を制御する転送制御部とを有する演算処理装置。
（付記２）
前記アクセス命令が２以上の前記演算処理部に同一データを転送する命令である場合、前記転送制御部は、前記主記憶装置から読み出されたデータを前記２以上の前記演算処理部に一斉転送する付記１記載の演算処理装置。
（付記３）
前記転送制御部は、前記命令制御部からデータのコピーが指示された場合、前記複数の演算処理部の内の前記演算処理部からデータを取得し、取得したデータを前記主記憶装置を介さずに他の前記演算処理部に供給する付記１又は２記載の演算処理装置。
（付記４）
前記転送制御部は、データバッファを有し、
前記演算処理部から取得したデータを前記データバッファに保持し、前記データバッファから前記他の演算処理部にデータを供給する付記３記載の演算処理装置。
（付記５）
前記転送制御部は、前記複数の演算処理部の内の第１の前記演算処理部から取得した第１のデータと、前記複数の演算処理部の内の第２の前記演算処理部から取得した第２のデータとを、１つの要求で前記主記憶装置への書き込みを行わせる付記１〜４の何れか１項に記載の演算処理装置。
（付記６）
前記転送制御部は、１つの要求で前記主記憶装置から読み出されたデータを、前記複数の演算処理部の内の第１の前記演算処理部に供給する第１のデータと、前記複数の演算処理部の内の第２の前記演算処理部に供給する第２のデータとに分割して供給する付記１〜５の何れか１項に記載の演算処理装置。
（付記７）
前記第１の演算処理部と前記第２の演算処理部とが異なる演算処理部である付記５又は６記載の演算処理装置。
（付記８）
前記第１の演算処理部と前記第２の演算処理部とが同じ演算処理部である付記５又は６記載の演算処理装置。
（付記９）
データを記憶する主記憶装置と、
前記主記憶装置に接続される演算処理装置とを有し、
前記演算処理装置は、
前記主記憶装置に対するメモリアクセスを実行するメモリ制御部と、
命令をそれぞれ実行する複数の演算処理部と、
前記主記憶装置に対する前記複数の演算処理部によるアクセス命令の実行を制御する命令制御部と、
前記命令制御部からの指示に応じて、前記メモリ制御部と前記複数の演算処理部との間のデータ転送を制御する転送制御部とを有する情報処理装置。
（付記１０）
主記憶装置に接続される演算処理装置の制御方法であって、
前記演算処理装置が有するメモリ制御部が前記主記憶装置に対するメモリアクセスを実行し、
前記演算処理装置が有する命令制御部が、命令をそれぞれ実行する複数の演算処理部による前記主記憶装置に対するアクセス命令の実行を制御し、
前記演算処理装置が有する転送制御部が、前記命令制御部からの指示に応じて、前記メモリ制御部と前記複数の演算処理部との間のデータ転送を制御する演算処理装置の制御方法。
【符号の説明】
【００８９】
１００  プロセッサ
１０１  メモリ
１１０  命令制御部
１１１  処理制御部
１１２  命令バッファ
１２０  データ転送制御部
１３０  メモリコントローラ
１４０  コア
１４１  演算命令制御部
１４２  処理制御部
１４３  命令バッファ
１４４  演算実行部
１４５  演算器
１４６  レジスタユニット
９０１  命令フェッチ制御部
１１０１  コピーバッファ
１４０１  分割・結合制御部
【図１】
2018165913.tif 000003
【図２】
2018165913.tif 000004
【図３】
2018165913.tif 000005
【図４】
2018165913.tif 000006
【図５】
2018165913.tif 000007
【図６】
2018165913.tif 000008
【図７】
2018165913.tif 000009
【図８】
2018165913.tif 000010
【図９】
2018165913.tif 000011
【図１０】
2018165913.tif 000012
【図１１】
2018165913.tif 000013
【図１２】
2018165913.tif 000014
【図１３】
2018165913.tif 000015
【図１４】
2018165913.tif 000016
【図１５】
2018165913.tif 000017
【図１６】
2018165913.tif 000018
【図１７】
2018165913.tif 000019
【図１８】
2018165913.tif 000020
【図１９】
2018165913.tif 000021
【図２０】
2018165913.tif 000022
【図２１】
2018165913.tif 000023
【図２２】
2018165913.tif 000024
【図２３】
2018165913.tif 000025
【図２４】
2018165913.tif 000026
【図２５】
2018165913.tif 000027
【図２６】
2018165913.tif 000028