(57)【要約】【課題】データ書き込み要求を出力した後に書き込み完了書き込み要求を出力することができる情報処理装置を提供することを課題とする。【解決手段】情報処理装置は、複数のデータ書き込み要求を含む第１の書き込み要求群を発行し、第１の書き込み要求群の後に、第１の書き込み要求群の書き込み完了情報の第１の書き込み完了書き込み要求を発行するコア（１１１）と、コアが発行する第１の書き込み完了書き込み要求の直前に、第１のバリア命令を挿入するバリア命令挿入部（１１２）と、バリア命令挿入部の挿入後、第１のバリア命令の前の第１の書き込み要求群に含まれる複数のデータ書き込み要求をすべてアウトオブオーダ実行で出力した後に、第１のバリア命令の後の第１の書き込み完了書き込み要求を出力するメモリコントローラ（１１３）とを有する。【選択図】図１
2019016328.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータ書き込み要求を含む第１の書き込み要求群を発行し、前記第１の書き込み要求群の後に、前記第１の書き込み要求群の書き込み完了情報の第１の書き込み完了書き込み要求を発行するコアと、
前記コアが発行する前記第１の書き込み完了書き込み要求の直前に、第１のバリア命令を挿入するバリア命令挿入部と、
前記バリア命令挿入部の挿入後、前記第１のバリア命令の前の前記第１の書き込み要求群に含まれる複数のデータ書き込み要求をすべてアウトオブオーダ実行で出力した後に、前記第１のバリア命令の後の前記第１の書き込み完了書き込み要求を出力するメモリコントローラと
を有することを特徴とする情報処理装置。
【請求項２】
前記第１の書き込み要求群は、連続するアドレスの複数のデータ書き込み要求を含むことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
第１の書き込み完了書き込み要求は、前記第１の書き込み要求群の書き込み完了を示す情報と、前記第１の書き込み要求群の書き込み開始アドレスと、前記第１の書き込み要求群の書き込みデータサイズとを含む書き込み完了情報の書き込み要求であることを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記複数のデータ書き込み要求は、データ領域のアドレスへの書き込み要求であり、
前記第１の書き込み完了書き込み要求は、書き込み完了情報領域のアドレスへの書き込み要求であり、
前記バリア命令挿入部は、前記コアが発行した要求が前記書き込み完了情報領域のアドレスへの書き込み要求である場合には、前記コアが発行した要求が前記第１の書き込み完了書き込み要求であると判定することを特徴とする請求項１〜３のいずれか１項に記載の情報処理装置。
【請求項５】
前記バリア命令挿入部は、前記コアが発行した書き込み要求の数をカウントし、前記カウントした書き込み要求の数に応じて、前記第１のバリア命令を挿入することを特徴とする請求項１〜３のいずれか１項に記載の情報処理装置。
【請求項６】
前記複数のデータ書き込み要求は、データ領域のアドレスへの書き込み要求であり、
前記第１の書き込み完了書き込み要求は、書き込み完了情報領域のアドレスへの書き込み要求であり、
前記コアは、前記書き込み完了情報領域の読み出し要求を発行し、前記読み出し要求に応答して入力した書き込み完了情報が書き込み完了を示さない情報を含む場合には、前記書き込み完了情報領域の読み出し要求を発行する処理を繰り返し、前記読み出し要求に応答して入力した書き込み完了情報が書き込み完了を示す情報を含む場合には、前記書き込み完了情報に含まれる前記書き込み開始アドレスと前記書き込みデータサイズのデータの読み出し要求を発行することを特徴とする請求項３に記載の情報処理装置。
【請求項７】
前記コアは、前記読み出し要求に応答して入力した書き込み完了情報が書き込み完了を示す情報を含む場合には、前記書き込み完了情報を書き込み完了を示さない情報に変更した書き込み完了情報の書き込み要求を発行することを特徴とする請求項６に記載の情報処理装置。
【請求項８】
前記コアは、前記第１の書き込み完了書き込み要求の後に、複数のデータ書き込み要求を含む第２の書き込み要求群を発行し、前記第２の書き込み要求群の後に、前記第２の書き込み要求群の書き込み完了情報の第２の書き込み完了書き込み要求を発行し、
前記バリア命令挿入部は、前記コアが発行する前記第２の書き込み完了書き込み要求の直前に、第２のバリア命令を挿入するバリア命令挿入部と、
前記メモリコントローラは、前記第２のバリア命令の前の前記第２の書き込み要求群に含まれる複数のデータ書き込み要求をすべてアウトオブオーダ実行で出力した後に、前記第２のバリア命令の後の前記第２の書き込み完了書き込み要求を出力することを特徴とする請求項１〜７のいずれか１項に記載の情報処理装置。
【請求項９】
第１の情報処理装置と、
メモリとを有し、
前記第１の情報処理装置は、
複数のデータ書き込み要求を含む第１の書き込み要求群を発行し、前記第１の書き込み要求群の後に、前記第１の書き込み要求群の書き込み完了情報の第１の書き込み完了書き込み要求を発行するコアと、
前記コアが発行する前記第１の書き込み完了書き込み要求の直前に、第１のバリア命令を挿入するバリア命令挿入部と、
前記バリア命令挿入部の挿入後、前記第１のバリア命令の前の前記第１の書き込み要求群に含まれる複数のデータ書き込み要求をすべてアウトオブオーダ実行で前記メモリに出力した後に、前記第１のバリア命令の後の前記第１の書き込み完了書き込み要求を前記メモリに出力するメモリコントローラとを有し、
前記メモリは、
前記データ書き込み要求に応じてデータを書き込みデータ領域と、
前記第１の書き込み完了書き込み要求に応じて前記書き込み完了情報を書き込む書き込み完了情報領域とを有することを特徴とする情報処理システム。
【請求項１０】
前記第１の書き込み要求群は、連続するアドレスの複数のデータ書き込み要求を含むことを特徴とする請求項９に記載の情報処理システム。
【請求項１１】
第１の書き込み完了書き込み要求は、前記第１の書き込み要求群の書き込み完了を示す情報と、前記第１の書き込み要求群の書き込み開始アドレスと、前記第１の書き込み要求群の書き込みデータサイズとを含む書き込み完了情報の書き込み要求であることを特徴とする請求項１０に記載の情報処理システム。
【請求項１２】
前記複数のデータ書き込み要求は、前記データ領域のアドレスへの書き込み要求であり、
前記第１の書き込み完了書き込み要求は、前記書き込み完了情報領域のアドレスへの書き込み要求であり、
前記バリア命令挿入部は、前記コアが発行した要求が前記書き込み完了情報領域のアドレスへの書き込み要求である場合には、前記コアが発行した要求が第１の書き込み完了書き込み要求であると判定することを特徴とする請求項９〜１１のいずれか１項に記載の情報処理システム。
【請求項１３】
前記バリア命令挿入部は、前記コアが発行した書き込み要求の数をカウントし、前記カウントした書き込み要求の数に応じて、前記第１のバリア命令を挿入することを特徴とする請求項９〜１１のいずれか１項に記載の情報処理システム。
【請求項１４】
前記複数のデータ書き込み要求は、データ領域のアドレスへの書き込み要求であり、
前記第１の書き込み完了書き込み要求は、書き込み完了情報領域のアドレスへの書き込み要求であり、
前記情報処理システムは、さらに、前記書き込み完了情報領域の読み出し要求を前記メモリに出力し、前記読み出し要求に応答して入力した書き込み完了情報が書き込み完了を示さない情報を含む場合には、前記書き込み完了情報領域の読み出し要求を出力する処理を繰り返し、前記読み出し要求に応答して入力した書き込み完了情報が書き込み完了を示す情報を含む場合には、前記書き込み完了情報に含まれる前記書き込み開始アドレスと前記書き込みデータサイズのデータの読み出し要求を前記メモリに出力する第２の情報処理装置を有することを特徴とする請求項１１に記載の情報処理システム。
【請求項１５】
前記第２の情報処理装置は、前記読み出し要求に応答して入力した書き込み完了情報が書き込み完了を示す情報を含む場合には、前記書き込み完了情報を書き込み完了を示さない情報に変更した書き込み完了情報の書き込み要求を出力することを特徴とする請求項１４に記載の情報処理システム。
【請求項１６】
前記コアは、前記第１の書き込み完了書き込み要求の後に、複数のデータ書き込み要求を含む第２の書き込み要求群を発行し、前記第２の書き込み要求群の後に、前記第２の書き込み要求群の書き込み完了情報の第２の書き込み完了書き込み要求を発行し、
前記バリア命令挿入部は、前記コアが発行する前記第２の書き込み完了書き込み要求の直前に、第２のバリア命令を挿入し、
前記メモリコントローラは、前記第２のバリア命令の前の前記第２の書き込み要求群に含まれる複数のデータ書き込み要求をすべてアウトオブオーダ実行で出力した後に、前記第２のバリア命令の後の前記第２の書き込み完了書き込み要求を出力することを特徴とする請求項９〜１５のいずれか１項に記載の情報処理システム。
【請求項１７】
複数のデータ書き込み要求を含む第１の書き込み要求群を発行し、前記第１の書き込み要求群の後に、前記第１の書き込み要求群の書き込み完了情報の第１の書き込み完了書き込み要求を発行し、
前記第１の書き込み完了書き込み要求の直前に、第１のバリア命令を挿入し、
前記第１のバリア命令の前の前記第１の書き込み要求群に含まれる複数のデータ書き込み要求をすべてアウトオブオーダ実行で出力した後に、前記第１のバリア命令の後の前記第１の書き込み完了書き込み要求を出力する、
処理をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理システム及びプログラムに関する。
【背景技術】
【０００２】
メモリアクセスの順序を強制するための技法が知られている（特許文献１参照）。メモリアクセス要求は、メモリバリアコマンドを生成するように構成されていないデバイスから受信される。サロゲートバリアは、メモリアクセス要求に応じて生成される。メモリアクセス要求は、読取り要求とすることができる。メモリ書込み要求の場合には、サロゲートバリアは、書込み要求が処理される前に生成される。サロゲートバリアはまた、読取り要求と同じアドレスに対する先行する書込み要求を条件としてメモリ読取り要求に応じて生成されることも可能である。コヒーレンシは、あたかもメモリバリアコマンドがメモリバリアコマンドを生成しないデバイスから受信されたかのように、階層的メモリシステムの内部で強制される。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特表２０１２−５２８３９９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１では、サロゲートバリアは、読取り要求と同じアドレスに対する先行する書込み要求を条件としてメモリ読取り要求に応じて生成される。読取り要求と同じアドレスに対する先行する書込み要求が、その読取り要求の直前に存在する場合には、その先行する書き込み要求の検索時間は短くなる。しかし、その先行する書込み要求とその読取り要求との間に、多数の他のアドレスの書き込み要求が存在する場合がある。その場合、その先行する書込み要求の検索時間が長くなってしまい、電力効率が低下し、読み出しが遅くなってしまう課題がある。
【０００５】
１つの側面では、本発明の目的は、アウトオブオーダ実行により書き込み要求を出力する際に、データ書き込み要求を出力した後に書き込み完了書き込み要求を出力することができる情報処理装置、情報処理システム及びプログラムを提供することである。
【課題を解決するための手段】
【０００６】
情報処理装置は、複数のデータ書き込み要求を含む第１の書き込み要求群を発行し、前記第１の書き込み要求群の後に、前記第１の書き込み要求群の書き込み完了情報の第１の書き込み完了書き込み要求を発行するコアと、前記コアが発行する前記第１の書き込み完了書き込み要求の直前に、第１のバリア命令を挿入するバリア命令挿入部と、前記バリア命令挿入部の挿入後、前記第１のバリア命令の前の前記第１の書き込み要求群に含まれる複数のデータ書き込み要求をすべてアウトオブオーダ実行で出力した後に、前記第１のバリア命令の後の前記第１の書き込み完了書き込み要求を出力するメモリコントローラとを有する。
【発明の効果】
【０００７】
１つの側面では、アウトオブオーダ実行により書き込み要求を出力する際に、データ書き込み要求を出力した後に書き込み完了書き込み要求を出力することができる。
【図面の簡単な説明】
【０００８】
【図１】図１は、第１の実施形態による情報処理システムの構成例を示す図である。
【図２】図２は、メインメモリの構成例を示す図である。
【図３】図３（Ａ）は第１のコマンドＦＩＦＯの論理的構成例を示す図であり、図３（Ｂ）は第１のコマンドＦＩＦＯの物理的構成例を示す図である。
【図４】図４は、情報処理システムの処理例を示すシーケンス図である。
【図５】図５（Ａ）及び（Ｂ）は、書き込み時の第１のコマンドＦＩＦＯの例を示す図である。
【図６】図６（Ａ）及び（Ｂ）は、読み出し時の第１のコマンドＦＩＦＯの例を示す図である。
【図７】図７は、書き込み処理と読み出し処理の詳細を示すシーケンス図である。
【図８】図８（Ａ）は第１のプロセッサのプロセッサコアが発行する要求の順番を示す図であり、図８（Ｂ）は第１のプロセッサのバリア命令挿入部が出力する要求及びバリア命令の順番を示す図であり、図８（Ｃ）は第２のプロセッサのプロセッサコアが発行する要求の順番を示す図である。
【図９】図９は、プロセッサコアの書き込み処理の詳細を示すフローチャートである。
【図１０】図１０（Ａ）はバリア命令挿入部の要求出力処理の詳細を示すフローチャートであり、図１０（Ｂ）はバリア命令挿入部の応答入力処理の詳細を示すフローチャートである。
【図１１】図１１（Ａ）はメモリコントローラの要求出力処理の詳細を示すフローチャートであり、図１１（Ｂ）はメモリコントローラの応答入力処理の詳細を示すフローチャートである。
【図１２】図１２は、プロセッサコアの読み出し処理の詳細を示すフローチャートである。
【図１３】図１３は、第２の実施形態によるバリア命令挿入部の要求出力処理の詳細を示すフローチャートである。
【発明を実施するための形態】
【０００９】
（第１の実施形態）
図１は、第１の実施形態による情報処理システム１００の構成例を示す図である。情報処理システム１００は、第１のプロセッサ１０１と、第２のプロセッサ１０２と、メインメモリ１０３と、バス１０４とを有する。バス１０４には、第１のプロセッサ１０１と、第２のプロセッサ１０２と、メインメモリ１０３が接続される。第１のプロセッサ１０１は、第１の情報処理装置であり、プロセッサコア１１１と、バリア命令挿入部１１２と、メモリコントローラ１１３とを有する。第２のプロセッサ１０２は、第２の情報処理装置であり、プロセッサコア１２１と、バリア命令挿入部１２２と、メモリコントローラ１２３とを有する。メインメモリ１０３上に格納されるデータは、データ領域１３１と、コマンドファーストインファーストアウト（コマンドＦＩＦＯ）１３２とを含む。コマンドＦＩＦＯ１３２は、書き込み完了情報領域である。
【００１０】
第１のプロセッサ１０１及び第２のプロセッサ１０２は、同一のバス１０４に接続され、メインメモリ１０３を共有する。例えば、第１のプロセッサ１０１は、中央処理ユニット（ＣＰＵ）である。第２のプロセッサ１０２は、ハードウェアアクセラレータであり、ＦＰＧＡ（field-programmable gate array）又はＧＰＵ（graphics processing unit）である。第１のプロセッサ（ＣＰＵ）１０１は、ソフトウェア処理に不向きな処理を第２のプロセッサ（ＦＰＧＡ又はＧＰＵ）１０２に委任することができる。これにより、処理を高速化することができる。
【００１１】
図２は、図１のメインメモリ１０３の構成例を示す図である。メインメモリ１０３上に格納されるデータは、データ領域１３１と、コマンドＦＩＦＯ１３２とを含む。データ領域１３１は、第１のデータ領域１３１ａと、第２のデータ領域１３１ｂとを有する。第１のデータ領域１３１ａは、ブロック単位の入力データを記憶し、例えば、ブロックｂｌｋ０の入力データと、ブロックｂｌｋ１の入力データと、ブロックｂｌｋ２の入力データを記憶する。通信の場合、ブロックは、パケット、セグメント、又はフレームである。動画像符号化の場合、ブロックは、ＧＯＰ（Group of Picture）、ピクチャ、又はＣＴＵ（coding tree unit）である。第２のデータ領域１３１ｂは、ブロック単位の出力データを記憶し、例えば、ブロックｂｌｋ０の出力データと、ブロックｂｌｋ１の出力データと、ブロックｂｌｋ２の出力データを記憶する。
【００１２】
コマンドＦＩＦＯ１３２の先頭アドレスは、アドレスＡＤＲ＿ＣＭＤである。コマンドＦＩＦＯ１３２は、アドレスＡＤＲ＿ＣＭＤ以降のアドレス領域に設けられ、第１のコマンドＦＩＦＯ１３２ａと、第２のコマンドＦＩＦＯ１３２ｂとを有する。第１のコマンドＦＩＦＯ１３２ａは、第１のデータ領域１３１ａに対応し、ブロック毎の入力データの書き込み完了情報を記憶する。第１のコマンドＦＩＦＯ１３２ａは、例えば、ブロックｂｌｋ０の入力データの書き込み完了情報と、ブロックｂｌｋ１の入力データの書き込み完了情報と、ブロックｂｌｋ２の入力データの書き込み完了情報を記憶する。第１のコマンドＦＩＦＯ１３２ａは、ライトポインタＷＰ１に対応するアドレスに対して書き込みが行われ、リードポインタＲＰ１に対応するアドレスに対して読み出しが行われる。
【００１３】
第２のコマンドＦＩＦＯ１３２ｂは、第２のデータ領域１３１ｂに対応し、ブロック毎の出力データの書き込み完了情報を記憶する。第２のコマンドＦＩＦＯ１３２ｂは、例えば、ブロックｂｌｋ０の出力データの書き込み完了情報と、ブロックｂｌｋ１の出力データの書き込み完了情報と、ブロックｂｌｋ２の出力データの書き込み完了情報を記憶する。第２のコマンドＦＩＦＯ１３２ｂは、ライトポインタＷＰ２に対応するアドレスに対して書き込みが行われ、リードポインタＲＰ２に対応するアドレスに対して読み出しが行われる。
【００１４】
図３（Ａ）は、第１のコマンドＦＩＦＯ１３２ａの論理的構成例を示す図であり、図３（Ｂ）は、第１のコマンドＦＩＦＯ１３２ａの物理的構成例を示す図である。以下、第１のコマンドＦＩＦＯ１３２ａの例を説明するが、第２のコマンドＦＩＦＯ１３２ｂの構成も第１のコマンドＦＩＦＯ１３２ａの構成と同様である。第１のコマンドＦＩＦＯ１３２ａは、ブロック単位の書き込み完了情報３００をファーストインファーストアウトで記憶する。書き込み完了情報３００は、１ワードの情報であり、有効フラグ３０１と、ブロック開始アドレス３０２と、ブロックサイズ３０３を有する。
【００１５】
有効フラグ３０１は、書き込み完了情報３００が有効である場合には「１」であり、書き込み完了情報３００が有効でない場合には「０」である。ブロック開始アドレス３０２は、第１のデータ領域１３１ａに書き込まれているブロックの開始アドレスである。ブロックサイズ３０３は、第１のデータ領域１３１ａに書き込まれているブロックのデータサイズである。
【００１６】
第１のコマンドＦＩＦＯ１３２ａにおいて、書き込み要求により、ライトポインタＷＰ１に対応するアドレスに対して、新たな書き込み完了情報３００が書き込まれ、ライトポインタＷＰ１がインクメントされる。また、第１のコマンドＦＩＦＯ１３２ａにおいて、読み出し要求により、リードポインタＲＰ１に対応するアドレスに記憶されている書き込み完了情報３００が読み出され、リードポインタＲＰ１がインクメントされる。
【００１７】
図４は、情報処理システム１００の処理例を示すシーケンス図である。ステップＳ４０１において、第１のプロセッサ１０１は、ブロック単位の入力データをメインメモリ１０３の第１のデータ領域１３１ａに書き込む。この入力データは、第２のプロセッサ１０２に処理させたいデータである。第１のプロセッサ１０１は、ブロック単位の入力データの書き込みが完了する毎に、ブロック単位の書き込み完了情報３００をメインメモリ１０３の第１のコマンドＦＩＦＯ１３２ａのライトポインタＷＰ１が示すアドレスに書き込む。書き込み完了情報３００は、「１」の有効フラグ３０１を含む。
【００１８】
次に、ステップＳ４０２において、第２のプロセッサ１０２は、メインメモリ１０３の第１のコマンドＦＩＦＯ１３２ａのリードポインタＲＰ１が示すアドレスに記憶されている書き込み完了情報３００を読み出す。書き込み完了情報３００内の有効フラグ３０１が「０」である場合には、入力データの書き込みが完了していないことを示すので、第２のプロセッサ１０２は、上記のリードポインタＲＰ１が示すアドレスに記憶されている書き込み完了情報３００を読み出す処理を繰り返す。書き込み完了情報３００内の有効フラグ３０１が「１」である場合には、入力データの書き込みが完了していることを示すので、第２のプロセッサ１０２は、書き込み完了情報３００内のブロック開始アドレス３０２及びブロックサイズ３０３を基に、メインメモリ１０３の第１のデータ領域１３１ａからブロック単位の入力データを読み出す。
【００１９】
次に、ステップＳ４０３において、第２のプロセッサ１０２は、その読み出したブロック単位の入力データに対して、通信又は画像処理等の処理を行い、ブロック単位の出力データを得る。
【００２０】
次に、ステップＳ４０４において、第２のプロセッサ１０２は、ブロック単位の出力データをメインメモリ１０３の第２のデータ領域１３１ｂに書き込む。第２のプロセッサ１０２は、ブロック単位の出力データの書き込みが完了する毎に、ブロック単位の書き込み完了情報３００をメインメモリ１０３の第２のコマンドＦＩＦＯ１３２ｂのライトポインタＷＰ２が示すアドレスに書き込む。書き込み完了情報３００は、「１」の有効フラグ３０１を含む。
【００２１】
次に、ステップＳ４０５において、第１のプロセッサ１０１は、メインメモリ１０３の第２のコマンドＦＩＦＯ１３２ｂのリードポインタＲＰ２が示すアドレスに記憶されている書き込み完了情報３００を読み出す。書き込み完了情報３００内の有効フラグ３０１が「０」である場合には、出力データの書き込みが完了していないことを示すので、第１のプロセッサ１０１は、上記のリードポインタＲＰ２が示すアドレスに記憶されている書き込み完了情報３００を読み出す処理を繰り返す。書き込み完了情報３００内の有効フラグ３０１が「１」である場合には、出力データの書き込みが完了していることを示すので、第１のプロセッサ１０１は、書き込み完了情報３００内のブロック開始アドレス３０２及びブロックサイズ３０３を基に、メインメモリ１０３の第２のデータ領域１３１ｂからブロック単位の出力データを読み出す。
【００２２】
第２のプロセッサ１０２が行うステップＳ４０４の書き込み処理は、第１のプロセッサ１０１が行うステップＳ４０１の書き込み処理と同様である。また、第１のプロセッサ１０１が行うステップＳ４０５の読み出し処理は、第２のプロセッサ１０２が行うステップＳ４０２の読み出し処理と同様である。
【００２３】
図５（Ａ）は、有効フラグ３０１がすべて「１」である第１のコマンドＦＩＦＯ１３２ａを示す図である。有効フラグ３０１がすべて「１」である場合には、第１のコマンドＦＩＦＯ１３２ａがフルであることを示す。ステップＳ４０１において、まず、第１のプロセッサ１０１は、ライトポインタＷＰ１に対応するアドレスの書き込み完了情報３００を読み出す。書き込み完了情報３００内の有効フラグ３０１が「１」である場合、第１のコマンドＦＩＦＯ１３２ａがフルであることを示す。その場合、第１のプロセッサ１０１は、有効フラグ３０１が「０」になるまで、上記のライトポインタＷＰ１に対応するアドレスの書き込み完了情報３００を読み出す処理を繰り返す。この場合、第１のプロセッサ１０１は、入力データを書き込むことができない。
【００２４】
図５（Ｂ）に示すように、やがて、ライトポインタＷＰ１に対応するアドレスの書き込み完了情報３００が不要になると、書き込み完了情報３００内の有効フラグ３０１が「０」になる。第１のプロセッサ１０１は、ライトポインタＷＰ１に対応するアドレスの書き込み完了情報３００を読み出す。書き込み完了情報３００内の有効フラグ３０１が「０」である場合には、第１のプロセッサ１０１は、ブロック単位の入力データを第１のデータ領域１３１ａに書き込む。そして、第１のプロセッサ１０１は、第１のコマンドＦＩＦＯ１３２ａのライトポインタＷＰ１に対応するアドレスに、「１」の有効フラグ３０１を含む書き込み完了情報３００を書き込み、ライトポインタＷＰ１をインクリメントする。
【００２５】
図６（Ａ）は、有効フラグ３０１がすべて「０」である第１のコマンドＦＩＦＯ１３２ａを示す図である。有効フラグ３０１がすべて「０」である場合には、第１のコマンドＦＩＦＯ１３２ａが空であり、第１のデータ領域１３１ａに入力データが書き込まれていないことを示す。ステップＳ４０２において、まず、第２のプロセッサ１０２は、リードポインタＲＰ１に対応するアドレスの書き込み完了情報３００を読み出す。書き込み完了情報３００内の有効フラグ３０１が「０」である場合、第１のデータ領域１３１ａに入力データが書き込まれていないことを示す。その場合、第２のプロセッサ１０２は、有効フラグ３０１が「１」になるまで、上記のリードポインタＲＰ１に対応するアドレスの書き込み完了情報３００を読み出す処理を繰り返す。この場合、第２のプロセッサ１０２は、入力データの書き込みが完了していないので、入力データを読み出すことができない。
【００２６】
図６（Ｂ）に示すように、入力データの書き込みが完了すると、リードポインタＲＰ１に対応するアドレスの書き込み完了情報３００内の有効フラグ３０１が「１」になる。第２のプロセッサ１０２は、リードポインタＲＰ１に対応するアドレスの書き込み完了情報３００を読み出す。書き込み完了情報３００内の有効フラグ３０１が「１」である場合には、第２のプロセッサ１０２は、ブロック単位の入力データを第１のデータ領域１３１ａから読み出す。そして、第２のプロセッサ１０２は、第１のコマンドＦＩＦＯ１３２ａのリードポインタＲＰ１に対応するアドレスに、「０」の有効フラグ３０１を含む書き込み完了情報３００を書き込み、リードポインタＲＰ１をインクリメントする。
【００２７】
図７は、図４のステップＳ４０１の書き込み処理とステップＳ４０２の読み出し処理の詳細を示すシーケンス図である。第１のプロセッサ１０１は、ブロックｂｌｋ０のアクセス権７３１を有し、ステップＳ７０１及びＳ７０２の処理を行う。ステップＳ７０１において、第１のプロセッサ１０１は、ブロックｂｌｋ０の入力データを第１のデータ領域１３１ａに書き込む。次に、ステップＳ７０２において、第１のプロセッサ１０１は、ブロックｂｌｋ０の入力データの書き込み完了情報３００を第１のコマンドＦＩＦＯ１３２ａに書き込む。
【００２８】
第２のプロセッサ１０２は、ブロックｂｌｋ０のアクセス権７４１を有し、ステップＳ７０３及びＳ７０４の処理を行う。ステップＳ７０３において、第２のプロセッサ１０２は、ブロックｂｌｋ０の入力データの書き込み完了情報３００を第１のコマンドＦＩＦＯ１３２ａから読み出す。次に、ステップＳ７０４において、第２のプロセッサ１０２は、ブロックｂｌｋ０の入力データの書き込み完了情報３００内の有効フラグ３０１が「１」である場合には、その書き込み完了情報３００内のブロック開始アドレス３０２及びブロックサイズ３０３を基に、第１のデータ領域１３１ａからブロックｂｌｋ０の入力データを読み出す。
【００２９】
第１のプロセッサ１０１は、ブロックｂｌｋ１のアクセス権７３２を有し、ステップＳ７１１及びＳ７１２の処理を行う。ステップＳ７１１において、第１のプロセッサ１０１は、ブロックｂｌｋ１の入力データを第１のデータ領域１３１ａに書き込む。次に、ステップＳ７１２において、第１のプロセッサ１０１は、ブロックｂｌｋ１の入力データの書き込み完了情報３００を第１のコマンドＦＩＦＯ１３２ａに書き込む。
【００３０】
第２のプロセッサ１０２は、ブロックｂｌｋ１のアクセス権７４２を有し、ステップＳ７１３及びＳ７１４の処理を行う。ステップＳ７１３において、第２のプロセッサ１０２は、ブロックｂｌｋ１の入力データの書き込み完了情報３００を第１のコマンドＦＩＦＯ１３２ａから読み出す。次に、ステップＳ７１４において、第２のプロセッサ１０２は、ブロックｂｌｋ１の入力データの書き込み完了情報３００内の有効フラグ３０１が「１」である場合には、その書き込み完了情報３００内のブロック開始アドレス３０２及びブロックサイズ３０３を基に、第１のデータ領域１３１ａからブロックｂｌｋ１の入力データを読み出す。
【００３１】
第１のプロセッサ１０１は、ブロックｂｌｋ２のアクセス権７３３を有し、ステップＳ７２１及びＳ７２２の処理を行う。ステップＳ７２１において、第１のプロセッサ１０１は、ブロックｂｌｋ２の入力データを第１のデータ領域１３１ａに書き込む。次に、ステップＳ７２２において、第１のプロセッサ１０１は、ブロックｂｌｋ２の入力データの書き込み完了情報３００を第１のコマンドＦＩＦＯ１３２ａに書き込む。
【００３２】
第２のプロセッサ１０２は、ブロックｂｌｋ２のアクセス権７４３を有し、ステップＳ７２３及びＳ７２４の処理を行う。ステップＳ７２３において、第２のプロセッサ１０２は、ブロックｂｌｋ２の入力データの書き込み完了情報３００を第１のコマンドＦＩＦＯ１３２ａから読み出す。次に、ステップＳ７２４において、第２のプロセッサ１０２は、ブロックｂｌｋ２の入力データの書き込み完了情報３００内の有効フラグ３０１が「１」である場合には、その書き込み完了情報３００内のブロック開始アドレス３０２及びブロックサイズ３０３を基に、第１のデータ領域１３１ａからブロックｂｌｋ２の入力データを読み出す。
【００３３】
以上のように、第１のプロセッサ１０１の書き込み完了情報３００の書き込み及び第２のプロセッサ１０２の書き込み完了情報３００の読み出しにより、第１のプロセッサ１０１から第２のプロセッサ１０２にブロック単位でアクセス権を移動させる。図２に示すように、各ブロックの入力データは、第１のデータ領域１３１ａ内の異なるアドレスに記憶される。これにより、第２のプロセッサ１０２がブロックｂｌｋ０の入力データを読み出している間に、第１のプロセッサ１０１は、ブロックｂｌｋ１以降の入力データを書き込む、といったパイプライン動作が可能となる。
【００３４】
図８（Ａ）は、第１のプロセッサ１０１のプロセッサコア１１１が発行する要求の順番を示す。図８（Ｂ）は、第１のプロセッサ１０１のバリア命令挿入部１１２が出力する要求及びバリア命令の順番を示す。図８（Ｃ）は、第２のプロセッサ１０２のプロセッサコア１２１が発行する要求の順番を示す。
【００３５】
図９は、図４のステップＳ４０１の第１のプロセッサ１０１のプロセッサコア１１１の書き込み処理の詳細を示すフローチャートである。ステップＳ９０１において、プロセッサコア１１１は、第１のコマンドＦＩＦＯ１３２ａのライトポインタＷＰ１を記憶し、第１のコマンドＦＩＦＯ１３２ａのライトポインタＷＰ１を０に初期化する。次に、ステップＳ９０２において、プロセッサコア１１１は、処理すべきブロックの入力データが存在するまで待機し、ブロックの入力データが存在する場合には、ステップＳ９０３に処理を進める。ステップＳ９０３〜Ｓ９０９は、処理対象ブロックに関するループ処理である。
【００３６】
まず、ステップＳ９０３において、プロセッサコア１１１は、最初のブロックｂｌｋ０を処理対象ブロックに設定する。次に、ステップＳ９０４において、プロセッサコア１１１は、第１のコマンドＦＩＦＯ１３２ａのライトポインタＷＰ１に対応する第１のコマンドＦＩＦＯ１３２ａのアドレスに記憶されているブロックｂｌｋ０の入力データの書き込み完了情報３００の読み出し要求８０１（図８（Ａ））を発行する。
【００３７】
第１のプロセッサ１０１は、バス１０４を介して、読み出し要求８０１をメインメモリ１０３に出力する。メインメモリ１０３は、読み出し要求８０１に応答し、第１のコマンドＦＩＦＯ１３２ａのアドレスに記憶されているブロックｂｌｋ０の入力データの書き込み完了情報３００を読み出す。そして、メインメモリ１０３は、バス１０４を介して、その書き込み完了情報３００を第１のプロセッサ１０１に出力する。プロセッサコア１１１は、その書き込み完了情報３００を入力する。
【００３８】
次に、ステップＳ９０５において、プロセッサコア１１１は、その書き込み完了情報３００内の有効フラグ３０１が「０」であるか否かを判定する。プロセッサコア１１１は、その有効フラグ３０１が「１」であると判定した場合には、第１のコマンドＦＩＦＯ１３２ａがフルであることを示すので、ステップＳ９０４に処理を戻す。プロセッサコア１１１は、その有効フラグ３０１が「０」であると判定した場合には、第１のコマンドＦＩＦＯ１３２ａがフルでないことを示すので、ステップＳ９０６に処理を進める。
【００３９】
ステップＳ９０６において、プロセッサコア１１１は、ブロックｂｌｋ０の入力データの書き込み要求群８０２（図８（Ａ））を発行する。ここで、第１のプロセッサ１０１は、キャッシュラインのデータ長の単位で、メインメモリ１０３に書き込みを行う。ブロックｂｌｋ０の入力データの書き込み要求群８０２は、図８（Ａ）に示すように、各々がキャッシュラインのデータ長の連続するアドレスの複数のデータ書き込み要求を含む。プロセッサコア１１１は、ブロックｂｌｋ０の入力データの書き込み要求群８０２に対応し、ブロックｂｌｋ０の入力データの書き込み開始アドレスを変数ｗａｄｄｒに設定し、ブロックｂｌｋ０の入力データのサイズを変数ｗｓｉｚｅに設定する。
【００４０】
次に、ステップＳ９０７において、プロセッサコア１１１は、第１のコマンドＦＩＦＯ１３２ａのライトポインタＷＰ１に対応する第１のコマンドＦＩＦＯ１３２ａのアドレスに対して、ブロックｂｌｋ０の入力データの書き込み完了情報３００を書き込むための書き込み要求８０３（図８（Ａ））を発行する。書き込み要求８０３は、書き込み要求群８０２の書き込み完了情報３００を書き込むための書き込み完了書き込み要求である。書き込み完了情報３００は、「１」の有効フラグ３０１と、ブロックｂｌｋ０の入力データ（書き込み要求群８０２）の書き込み開始アドレスｗａｄｄｒと、ブロックｂｌｋ０の入力データ（書き込み要求群８０２）の書き込みデータサイズｗｓｉｚｅとを含む。この有効フラグ３０１は、書き込み要求群８０２の書き込み完了を示す情報である。
【００４１】
次に、ステップＳ９０８において、プロセッサコア１１１は、第１のコマンドＦＩＦＯ１３２ａのライトポインタＷＰ１をインクリメントする。次に、ステップＳ９０９において、プロセッサコア１１１は、次のブロックｂｌｋ１を処理対象ブロックに設定し、ステップＳ９０３に処理を戻す。
【００４２】
次に、ステップＳ９０４において、プロセッサコア１１１は、第１のコマンドＦＩＦＯ１３２ａのライトポインタＷＰ１に対応する第１のコマンドＦＩＦＯ１３２ａのアドレスに記憶されているブロックｂｌｋ１の入力データの書き込み完了情報３００の読み出し要求８０４（図８（Ａ））を発行する。
【００４３】
第１のプロセッサ１０１は、バス１０４を介して、読み出し要求８０４をメインメモリ１０３に出力する。メインメモリ１０３は、読み出し要求８０４に応答し、第１のコマンドＦＩＦＯ１３２ａのアドレスに記憶されているブロックｂｌｋ１の入力データの書き込み完了情報３００を読み出す。そして、メインメモリ１０３は、バス１０４を介して、その書き込み完了情報３００を第１のプロセッサ１０１に出力する。プロセッサコア１１１は、その書き込み完了情報３００を入力する。
【００４４】
次に、ステップＳ９０５において、プロセッサコア１１１は、その書き込み完了情報３００内の有効フラグ３０１が「０」であると判定した場合には、第１のコマンドＦＩＦＯ１３２ａがフルでないことを示すので、ステップＳ９０６に処理を進める。
【００４５】
ステップＳ９０６において、プロセッサコア１１１は、ブロックｂｌｋ１の入力データの書き込み要求群８０５（図８（Ａ））を発行する。ブロックｂｌｋ１の入力データの書き込み要求群８０５は、図８（Ａ）に示すように、各々がキャッシュラインのデータ長の連続するアドレスの複数のデータ書き込み要求を含む。プロセッサコア１１１は、ブロックｂｌｋ１の入力データの書き込み要求群８０５に対応し、ブロックｂｌｋ１の入力データの書き込み開始アドレスを変数ｗａｄｄｒに設定し、ブロックｂｌｋ１の入力データのサイズを変数ｗｓｉｚｅに設定する。
【００４６】
次に、ステップＳ９０７において、プロセッサコア１１１は、第１のコマンドＦＩＦＯ１３２ａのライトポインタＷＰ１に対応する第１のコマンドＦＩＦＯ１３２ａのアドレスに対して、ブロックｂｌｋ１の入力データの書き込み完了情報３００を書き込むための書き込み要求８０６（図８（Ａ））を発行する。書き込み要求８０６は、書き込み要求群８０５の書き込み完了情報３００を書き込むための書き込み完了書き込み要求である。書き込み完了情報３００は、「１」の有効フラグ３０１と、ブロックｂｌｋ１の入力データ（書き込み要求群８０５）の書き込み開始アドレスｗａｄｄｒと、ブロックｂｌｋ１の入力データ（書き込み要求群８０５）の書き込みデータサイズｗｓｉｚｅとを含む。この有効フラグ３０１は、書き込み要求群８０５の書き込み完了を示す情報である。
【００４７】
次に、ステップＳ９０８において、プロセッサコア１１１は、第１のコマンドＦＩＦＯ１３２ａのライトポインタＷＰ１をインクリメントする。次に、ステップＳ９０９において、プロセッサコア１１１は、次のブロックｂｌｋ２を処理対象ブロックに設定し、ステップＳ９０３に処理を戻す。
【００４８】
次に、ステップＳ９０４において、プロセッサコア１１１は、第１のコマンドＦＩＦＯ１３２ａのライトポインタＷＰ１に対応する第１のコマンドＦＩＦＯ１３２ａのアドレスに記憶されているブロックｂｌｋ２の入力データの書き込み完了情報３００の読み出し要求８０７（図８（Ａ））を発行する。
【００４９】
第１のプロセッサ１０１は、バス１０４を介して、読み出し要求８０７をメインメモリ１０３に出力する。メインメモリ１０３は、読み出し要求８０７に応答し、第１のコマンドＦＩＦＯ１３２ａのアドレスに記憶されているブロックｂｌｋ２の入力データの書き込み完了情報３００を読み出す。そして、メインメモリ１０３は、バス１０４を介して、その書き込み完了情報３００を第１のプロセッサ１０１に出力する。プロセッサコア１１１は、その書き込み完了情報３００を入力する。
【００５０】
次に、ステップＳ９０５において、プロセッサコア１１１は、その書き込み完了情報３００内の有効フラグ３０１が「０」であると判定した場合には、第１のコマンドＦＩＦＯ１３２ａがフルでないことを示すので、ステップＳ９０６に処理を進める。
【００５１】
ステップＳ９０６において、プロセッサコア１１１は、ブロックｂｌｋ２の入力データの書き込み要求群８０８（図８（Ａ））を発行する。ブロックｂｌｋ２の入力データの書き込み要求群８０８は、図８（Ａ）に示すように、各々がキャッシュラインのデータ長の連続するアドレスの複数のデータ書き込み要求を含む。プロセッサコア１１１は、ブロックｂｌｋ２の入力データの書き込み要求群８０８に対応し、ブロックｂｌｋ２の入力データの書き込み開始アドレスを変数ｗａｄｄｒに設定し、ブロックｂｌｋ２の入力データのサイズを変数ｗｓｉｚｅに設定する。
【００５２】
次に、ステップＳ９０７において、プロセッサコア１１１は、第１のコマンドＦＩＦＯ１３２ａのライトポインタＷＰ１に対応する第１のコマンドＦＩＦＯ１３２ａのアドレスに対して、ブロックｂｌｋ２の入力データの書き込み完了情報３００を書き込むための書き込み要求８０９（図８（Ａ））を発行する。書き込み要求８０９は、書き込み要求群８０８の書き込み完了情報３００を書き込むための書き込み完了書き込み要求である。書き込み完了情報３００は、「１」の有効フラグ３０１と、ブロックｂｌｋ２の入力データ（書き込み要求群８０８）の書き込み開始アドレスｗａｄｄｒと、ブロックｂｌｋ２の入力データ（書き込み要求群８０８）の書き込みデータサイズｗｓｉｚｅとを含む。この有効フラグ３０１は、書き込み要求群８０８の書き込み完了を示す情報である。以下、同様に、プロセッサコア１１１は、ブロックｂｌｋ３以降の処理を繰り返す。
【００５３】
図１において、バリア命令挿入部１１２がない場合を説明する。その場合、メモリコントローラ１１３は、プロセッサコア１１１が発行した要求をアウトオブオーダ実行で出力する。すなわち、メモリコントローラ１１３は、プロセッサコア１１１が発行した要求の順番で要求を出力するのではなく、プロセッサコア１１１が発行した要求をデータ依存関係等による最適な順番に入れ替えて出力する。その結果、メモリコントローラ１１３は、ブロックｂｌｋ０の書き込み要求群８０２内のすべての書き込み要求を出力する前に、書き込み完了情報３００の書き込み要求８０３を出力する可能性がある。第２のプロセッサ１０２は、書き込み完了情報３００が書き込まれたことを確認すると、読み出し処理を開始する。しかし、この時点では、ブロックｂｌｋ０の入力データのすべての書き込みが完了していない場合がある。その場合、第２のプロセッサ１０２は、書き込み前の誤ったブロックｂｌｋ０の入力データを読み出すことになってしまう。本実施形態では、この課題を解決するために、バリア命令挿入部１１２及び１２２を設ける。
【００５４】
図１０（Ａ）は、図４のステップＳ４０１の第１のプロセッサ１０１のバリア命令挿入部１１２の要求出力処理の詳細を示すフローチャートである。ステップＳ１００１において、バリア命令挿入部１１２は、プロセッサコア１１１が発行したメインメモリ１０３への要求を入力するまで待機し、要求を入力した場合にはステップＳ１００２に処理を進める。
【００５５】
ステップＳ１００２において、バリア命令挿入部１１２は、入力した要求が書き込み要求であり、かつその書き込み要求の書き込みアドレスがアドレスＡＤＲ＿ＣＭＤ以上のアドレスであるか否かを判定する。アドレスＡＤＲ＿ＣＭＤは、図２に示すように、コマンドＦＩＦＯ１３２の先頭アドレスである。アドレスＡＤＲ＿ＣＭＤ以上のアドレスへの書き込み要求は、コマンドＦＩＦＯ１３２への書き込み要求である。アドレスＡＤＲ＿ＣＭＤより小さいアドレスへの書き込み要求は、データ領域１３１への書き込み要求である。バリア命令挿入部１１２は、入力した読み出し要求８０１（図８（Ａ））が書き込み要求ではないので、ステップＳ１００４に処理を進める。ステップＳ１００４において、バリア命令挿入部１１２は、図８（Ｂ）に示すように、プロセッサコア１１１から入力した読み出し要求８０１をメモリコントローラ１１３に出力し、ステップＳ１００１に処理を戻す。
【００５６】
次に、ステップＳ１００２において、バリア命令挿入部１１２は、入力した書き込み要求群８０２（図８（Ａ））内の書き込み要求の書き込みアドレスがアドレスＡＤＲ＿ＣＭＤより小さいので、ステップＳ１００４に処理を進める。書き込み要求群８０２内の書き込み要求は、第１のデータ領域１３１ａのアドレスへの書き込み要求である。ステップＳ１００４において、バリア命令挿入部１１２は、図８（Ｂ）に示すように、プロセッサコア１１１から入力した書き込み要求群８０２内の書き込み要求をメモリコントローラ１１３に出力し、ステップＳ１００１に処理を戻す。
【００５７】
次に、ステップＳ１００２において、バリア命令挿入部１１２は、入力した書き込み要求８０３（図８（Ａ））が書き込み要求であり、かつ書き込み要求８０３の書き込みアドレスがアドレスＡＤＲ＿ＣＭＤ以上であるので、ステップＳ１００３に処理を進める。書き込み要求８０３は、第１のコマンドＦＩＦＯ１３２ａのアドレスへの書き込み要求である。ステップＳ１００３において、バリア命令挿入部１１２は、図８（Ｂ）に示すように、バリア命令８１１をメモリコントローラ１１３に出力する。次に、ステップＳ１００４において、バリア命令挿入部１１２は、図８（Ｂ）に示すように、プロセッサコア１１１から入力した書き込み要求８０３をメモリコントローラ１１３に出力し、ステップＳ１００１に処理を戻す。以上のように、バリア命令挿入部１１２は、書き込み完了情報３００の書き込み要求８０３の直前に、バリア命令８１１を挿入する。
【００５８】
次に、ステップＳ１００２において、バリア命令挿入部１１２は、入力した読み出し要求８０４（図８（Ａ））が書き込み要求ではないので、ステップＳ１００４に処理を進める。ステップＳ１００４において、バリア命令挿入部１１２は、図８（Ｂ）に示すように、プロセッサコア１１１から入力した読み出し要求８０４をメモリコントローラ１１３に出力し、ステップＳ１００１に処理を戻す。
【００５９】
次に、ステップＳ１００２において、バリア命令挿入部１１２は、入力した書き込み要求群８０５（図８（Ａ））内の書き込み要求の書き込みアドレスがアドレスＡＤＲ＿ＣＭＤより小さいので、ステップＳ１００４に処理を進める。ステップＳ１００４において、バリア命令挿入部１１２は、図８（Ｂ）に示すように、プロセッサコア１１１から入力した書き込み要求群８０５内の書き込み要求をメモリコントローラ１１３に出力し、ステップＳ１００１に処理を戻す。
【００６０】
次に、ステップＳ１００２において、バリア命令挿入部１１２は、入力した書き込み要求８０６（図８（Ａ））が書き込み要求であり、かつ書き込み要求８０６の書き込みアドレスがアドレスＡＤＲ＿ＣＭＤ以上であるので、ステップＳ１００３に処理を進める。ステップＳ１００３において、バリア命令挿入部１１２は、図８（Ｂ）に示すように、バリア命令８１２をメモリコントローラ１１３に出力する。次に、ステップＳ１００４において、バリア命令挿入部１１２は、図８（Ｂ）に示すように、プロセッサコア１１１から入力した書き込み要求８０６をメモリコントローラ１１３に出力し、ステップＳ１００１に処理を戻す。以上のように、バリア命令挿入部１１２は、書き込み完了情報３００の書き込み要求８０６の直前に、バリア命令８１２を挿入する。
【００６１】
次に、ステップＳ１００２において、バリア命令挿入部１１２は、入力した読み出し要求８０７（図８（Ａ））が書き込み要求ではないので、ステップＳ１００４に処理を進める。ステップＳ１００４において、バリア命令挿入部１１２は、図８（Ｂ）に示すように、プロセッサコア１１１から入力した読み出し要求８０７をメモリコントローラ１１３に出力し、ステップＳ１００１に処理を戻す。
【００６２】
次に、ステップＳ１００２において、バリア命令挿入部１１２は、入力した書き込み要求群８０８（図８（Ａ））内の書き込み要求の書き込みアドレスがアドレスＡＤＲ＿ＣＭＤより小さいので、ステップＳ１００４に処理を進める。ステップＳ１００４において、バリア命令挿入部１１２は、図８（Ｂ）に示すように、プロセッサコア１１１から入力した書き込み要求群８０８内の書き込み要求をメモリコントローラ１１３に出力し、ステップＳ１００１に処理を戻す。
【００６３】
次に、ステップＳ１００２において、バリア命令挿入部１１２は、入力した書き込み要求８０９（図８（Ａ））が書き込み要求であり、かつ書き込み要求８０９の書き込みアドレスがアドレスＡＤＲ＿ＣＭＤ以上であるので、ステップＳ１００３に処理を進める。ステップＳ１００３において、バリア命令挿入部１１２は、図８（Ｂ）に示すように、バリア命令８１３をメモリコントローラ１１３に出力する。次に、ステップＳ１００４において、バリア命令挿入部１１２は、図８（Ｂ）に示すように、プロセッサコア１１１から入力した書き込み要求８０９をメモリコントローラ１１３に出力し、ステップＳ１００１に処理を戻す。以上のように、バリア命令挿入部１１２は、書き込み完了情報３００の書き込み要求８０９の直前に、バリア命令８１３を挿入する。
【００６４】
図１０（Ｂ）は、図４のステップＳ４０１の第１のプロセッサ１０１のバリア命令挿入部１１２の応答入力処理の詳細を示すフローチャートである。ステップＳ１０１１において、バリア命令挿入部１１２は、メモリコントローラ１１３から応答を入力するまで待機し、応答を入力した場合にはステップＳ１０１２に処理を進める。応答は、例えば、読み出し要求８０１，８０４，８０７に応答して読み出された書き込み完了情報３００である。ステップＳ１０１２において、バリア命令挿入部１１２は、メモリコントローラ１１３から入力した応答をそのままプロセッサコア１１１に出力し、ステップＳ１０１１に処理を戻す。
【００６５】
図１１（Ａ）は、図４のステップＳ４０１の第１のプロセッサ１０１のメモリコントローラ１１３の要求出力処理の詳細を示すフローチャートである。ステップＳ１１０１において、メモリコントローラ１１３は、バリア命令挿入部１１２から要求を入力するまで待機し、要求を入力した場合にはステップＳ１１０２に処理を進める。ステップＳ１１０２において、メモリコントローラ１１３は、入力した要求がバリア命令であるか否かを判定し、入力した要求がバリア命令であると判定した場合には、ステップＳ１１０３に処理を進め、入力した要求がバリア命令でないと判定した場合には、ステップＳ１１０４に処理を進める。ステップＳ１１０３において、メモリコントローラ１１３は、バス１０４を介して、メインメモリ１０３に出力されていない要求がすべて出力するまで待機し、バリア命令の前の要求がすべて出力された場合には、ステップＳ１１０４に処理を進める。ステップＳ１１０４では、メモリコントローラ１１３は、バッファ１０４を介して、バリア命令の前の要求をアウトオブオーダ実行で出力し、ステップＳ１１０１に処理を戻す。すなわち、メモリコントローラ１１３は、バリア命令挿入部１１２から入力したバリア命令の前の要求を最適な順番に入れ替えて出力する。
【００６６】
例えば、図８（Ｂ）において、メモリコントローラ１１３は、まず、読み出し要求８０１を出力する。メインメモリ１０３は、読み出し要求８０１に応答して、ブロックｂｌｋ０の入力データの書き込み完了情報３００を読み出す。プロセッサコア１１１は、その書き込み完了情報３００内の有効フラグ３０１が「０」である場合に、書き込み要求群８０２を発行する。メモリコントローラ１１３は、バス１０４を介して、バリア命令８１１の前の書き込み要求群８０２に含まれる複数の書き込み要求をアウトオブオーダ実行でメインメモリ１０３に出力する。そして、メモリコントローラ１１３は、バリア命令８１１の前の書き込み要求群８０２に含まれる複数の書き込み要求をすべてアウトオブオーダ実行で出力した後に、バリア命令８１１の後の書き込み要求８０３及び読み出し要求８０４を出力する。これにより、メインメモリ１０３は、書き込み要求群８０２に対応するブロックｂｌｋ０の入力データを第１のデータ領域１３１ａに書き込み、その後、書き込み要求８０３に対応するブロックｂｌｋ０の入力データの書き込み完了情報３００を第１のコマンドＦＩＦＯ１３２ａに書き込む。第２のプロセッサ１０２は、第１のコマンドＦＩＦＯ１３２ａから読み出したブロックｂｌｋ０の入力データの書き込み完了情報３００内の有効フラグ３０１が「１」である場合には、既に、第１のデータ領域１３１ａにブロックｂｌｋ０の入力データの書き込みが完了しているので、正しいブロックｂｌｋ０の入力データを読み出すことができる。
【００６７】
次に、メインメモリ１０３は、読み出し要求８０４に応答して、ブロックｂｌｋ１の入力データの書き込み完了情報３００を読み出す。プロセッサコア１１１は、その書き込み完了情報３００内の有効フラグ３０１が「０」である場合に、書き込み要求群８０５を発行する。メモリコントローラ１１３は、バス１０４を介して、バリア命令８１２の前の書き込み要求群８０５に含まれる複数の書き込み要求をアウトオブオーダ実行でメインメモリ１０３に出力する。そして、メモリコントローラ１１３は、バリア命令８１２の前の書き込み要求群８０５に含まれる複数の書き込み要求をすべてアウトオブオーダ実行で出力した後に、バリア命令８１２の後の書き込み要求８０６及び読み出し要求８０７を出力する。これにより、メインメモリ１０３は、書き込み要求群８０５に対応するブロックｂｌｋ１の入力データを第１のデータ領域１３１ａに書き込み、その後、書き込み要求８０６に対応するブロックｂｌｋ１の入力データの書き込み完了情報３００を第１のコマンドＦＩＦＯ１３２ａに書き込む。第２のプロセッサ１０２は、第１のコマンドＦＩＦＯ１３２ａから読み出したブロックｂｌｋ１の入力データの書き込み完了情報３００内の有効フラグ３０１が「１」である場合には、既に、第１のデータ領域１３１ａにブロックｂｌｋ１の入力データの書き込みが完了しているので、正しいブロックｂｌｋ１の入力データを読み出すことができる。
【００６８】
次に、メインメモリ１０３は、読み出し要求８０７に応答して、ブロックｂｌｋ２の入力データの書き込み完了情報３００を読み出す。プロセッサコア１１１は、その書き込み完了情報３００内の有効フラグ３０１が「０」である場合に、書き込み要求群８０８を発行する。メモリコントローラ１１３は、バス１０４を介して、バリア命令８１３の前の書き込み要求群８０８に含まれる複数の書き込み要求をアウトオブオーダ実行でメインメモリ１０３に出力する。そして、メモリコントローラ１１３は、バリア命令８１３の前の書き込み要求群８０８に含まれる複数の書き込み要求をすべてアウトオブオーダ実行で出力した後に、バリア命令８１３の後の書き込み要求８０９を出力する。これにより、メインメモリ１０３は、書き込み要求群８０８に対応するブロックｂｌｋ２の入力データを第１のデータ領域１３１ａに書き込み、その後、書き込み要求８０９に対応するブロックｂｌｋ２の入力データの書き込み完了情報３００を第１のコマンドＦＩＦＯ１３２ａに書き込む。第２のプロセッサ１０２は、第１のコマンドＦＩＦＯ１３２ａから読み出したブロックｂｌｋ２の入力データの書き込み完了情報３００内の有効フラグ３０１が「１」である場合には、既に、第１のデータ領域１３１ａにブロックｂｌｋ２の入力データの書き込みが完了しているので、正しいブロックｂｌｋ２の入力データを読み出すことができる。
【００６９】
図１１（Ｂ）は、図４のステップＳ４０１の第１のプロセッサ１０１のメモリコントローラ１１３の応答入力処理の詳細を示すフローチャートである。ステップＳ１１１１において、メモリコントローラ１１３は、バス１０４を介してメインメモリ１０３から応答を入力するまで待機し、応答を入力した場合にはステップＳ１１１２に処理を進める。応答は、例えば、読み出し要求８０１，８０４，８０７に応答して読み出された書き込み完了情報３００である。ステップＳ１１１２において、メモリコントローラ１１３は、バス１０４を介してメインメモリ１０３から入力した応答をそのままバリア命令挿入部１１２に出力し、ステップＳ１１１１に処理を戻す。
【００７０】
図１２は、図４のステップＳ４０２の第２のプロセッサ１０２のプロセッサコア１２１の読み出し処理の詳細を示すフローチャートである。ステップＳ１２０１において、プロセッサコア１２１は、第１のコマンドＦＩＦＯ１３２ａのリードポインタＲＰ１を記憶し、第１のコマンドＦＩＦＯ１３２ａのリードポインタＲＰ１を０に初期化する。次に、ステップＳ１２０２において、プロセッサコア１２１は、第１のコマンドＦＩＦＯ１３２ａのリードポインタＲＰ１に対応する第１のコマンドＦＩＦＯ１３２ａのアドレスに記憶されているブロックｂｌｋ０の入力データの書き込み完了情報３００の読み出し要求８２１（図８（Ｃ））を発行する。
【００７１】
第２のプロセッサ１０２は、バス１０４を介して、読み出し要求８２１をメインメモリ１０３に出力する。メインメモリ１０３は、読み出し要求８２１に応答し、第１のコマンドＦＩＦＯ１３２ａのアドレスに記憶されているブロックｂｌｋ０の入力データの書き込み完了情報３００を読み出す。そして、メインメモリ１０３は、バス１０４を介して、その書き込み完了情報３００を第２のプロセッサ１０２に出力する。プロセッサコア１２１は、その書き込み完了情報３００を入力する。
【００７２】
次に、ステップＳ１２０３において、プロセッサコア１２１は、その書き込み完了情報３００内の有効フラグ３０１が「１」であるか否かを判定する。プロセッサコア１１１は、その有効フラグ３０１が「０」であると判定した場合には、第１のデータ領域１３２ａにブロックｂｌｋ０の入力データが未だ書き込まれていないことを示すので、ステップＳ１２０２に処理を戻す。
【００７３】
次に、ステップＳ１２０２において、プロセッサコア１２１は、第１のコマンドＦＩＦＯ１３２ａのリードポインタＲＰ１に対応する第１のコマンドＦＩＦＯ１３２ａのアドレスに記憶されているブロックｂｌｋ０の入力データの書き込み完了情報３００の読み出し要求８２２（図８（Ｃ））を発行する。次に、ステップＳ１２０３において、プロセッサコア１２１は、読み出された書き込み完了情報３００内の有効フラグ３０１が「０」であると判定した場合には、第１のデータ領域１３２ａにブロックｂｌｋ０の入力データが未だ書き込まれていないことを示すので、ステップＳ１２０２に処理を戻す。
【００７４】
次に、ステップＳ１２０２において、プロセッサコア１２１は、第１のコマンドＦＩＦＯ１３２ａのリードポインタＲＰ１に対応する第１のコマンドＦＩＦＯ１３２ａのアドレスに記憶されているブロックｂｌｋ０の入力データの書き込み完了情報３００の読み出し要求８２３（図８（Ｃ））を発行する。次に、ステップＳ１２０３において、プロセッサコア１２１は、読み出された書き込み完了情報３００内の有効フラグ３０１が「１」であると判定した場合には、第１のデータ領域１３２ａにブロックｂｌｋ０の入力データが書き込まれたことを示すので、ステップＳ１２０４に処理を進める。
【００７５】
ステップＳ１２０４において、プロセッサコア１２１は、読み出したブロックｂｌｋ０の入力データの書き込み完了情報３００内のブロック開始アドレス３０２を読み出し開始アドレスｒａｄｄｒに設定し、その書き込み完了情報３００内のブロックサイズ３０３をブロックサイズｒｓｉｚｅに設定する。
【００７６】
次に、ステップＳ１２０５において、プロセッサコア１２１は、第１のコマンドＦＩＦＯ１３２ａのリードポインタＲＰ１に対応する第１のコマンドＦＩＦＯ１３２ａのアドレスに対して、全ビットが０であるブロックｂｌｋ０の入力データの書き込み完了情報３００を書き込むための書き込み要求８２４（図８（Ｃ））を発行する。書き込み完了情報３００は、「０」の有効フラグ３０１を含む。なお、プロセッサコア１２１は、有効フラグ３０１が「０」である書き込み完了情報３００を書き込むための書き込み要求８２４を発行すればよい。
【００７７】
次に、ステップＳ１２０６において、プロセッサコア１２１は、読み出し開始アドレスｒａｄｄｒ及びブロックサイズｒｓｉｚｅを基に、第１のデータ領域１３１ａからブロックｂｌｋ０の入力データを読み出すための読み出し要求群８２５（図８（Ｃ））を発行する。ここで、第２のプロセッサ１０２は、キャッシュラインのデータ長の単位で、メインメモリ１０３から読み出しを行う。ブロックｂｌｋ０の入力データの読み出し要求群８２５は、図８（Ｃ）に示すように、各々がキャッシュラインのデータ長の連続するアドレスの複数のデータ読み出し要求を含む。
【００７８】
次に、ステップＳ１２０７において、プロセッサコア１２１は、第１のコマンドＦＩＦＯ１３２ａのリードポインタＲＰ１をインクリメントし、ステップＳ１２０２に処理を戻す。
【００７９】
次に、ステップＳ１２０２において、プロセッサコア１２１は、第１のコマンドＦＩＦＯ１３２ａのリードポインタＲＰ１に対応する第１のコマンドＦＩＦＯ１３２ａのアドレスに記憶されているブロックｂｌｋ１の入力データの書き込み完了情報３００の読み出し要求８２６（図８（Ｃ））を発行する。次に、ステップＳ１２０３において、プロセッサコア１２１は、読み出された書き込み完了情報３００内の有効フラグ３０１が「１」であると判定した場合には、第１のデータ領域１３２ａにブロックｂｌｋ１の入力データが書き込まれたことを示すので、ステップＳ１２０４に処理を進める。ステップＳ１２０４において、プロセッサコア１２１は、読み出したブロックｂｌｋ１の入力データの書き込み完了情報３００内のブロック開始アドレス３０２を読み出し開始アドレスｒａｄｄｒに設定し、その書き込み完了情報３００内のブロックサイズ３０３をブロックサイズｒｓｉｚｅに設定する。次に、ステップＳ１２０５において、プロセッサコア１２１は、第１のコマンドＦＩＦＯ１３２ａのリードポインタＲＰ１に対応する第１のコマンドＦＩＦＯ１３２ａのアドレスに対して、全ビットが０であるブロックｂｌｋ０の入力データの書き込み完了情報３００を書き込むための書き込み要求８２７（図８（Ｃ））を発行する。次に、ステップＳ１２０６において、プロセッサコア１２１は、読み出し開始アドレスｒａｄｄｒ及びブロックサイズｒｓｉｚｅを基に、第１のデータ領域１３１ａからブロックｂｌｋ１の入力データを読み出すための読み出し要求群８２８（図８（Ｃ））を発行する。ブロックｂｌｋ１の入力データの読み出し要求群８２８は、図８（Ｃ）に示すように、各々がキャッシュラインのデータ長の連続するアドレスの複数のデータ読み出し要求を含む。次に、ステップＳ１２０７において、プロセッサコア１２１は、第１のコマンドＦＩＦＯ１３２ａのリードポインタＲＰ１をインクリメントし、ステップＳ１２０２に処理を戻す。以下、同様に、プロセッサコア１２１は、ブロックｂｌｋ２以降の読み出し処理を行う。
【００８０】
以上のように、プロセッサコア１２１は、第１のコマンドＦＩＦＯ１３２ａの読み出し要求８２１を発行し、読み出し要求８２１に応答して入力した書き込み完了情報３００が書き込み完了を示さない情報（有効フラグ３０１が「０」）を含む場合には、第１のコマンドＦＩＦＯ１３２ａの読み出し要求８２２及び８２３を発行する処理を繰り返す。プロセッサコア１２１は、読み出し要求８２３に応答して入力した書き込み完了情報３００が書き込み完了を示す情報（有効フラグ３０１が「１」）を含む場合には、書き込み完了情報３００に含まれる書き込み開始アドレス３０２と書き込みデータサイズ３０３のデータの読み出し要求群８２５を発行する。プロセッサコア１２１は、読み出し要求８２３に応答して入力した書き込み完了情報３００が書き込み完了を示す情報（有効フラグ３０１が「１」）を含む場合には、書き込み完了情報３００を書き込み完了を示さない情報（有効フラグ３０１が「０」）に変更した書き込み完了情報３００の書き込み要求８２４を発行する。
【００８１】
なお、図４のステップＳ４０２において、第２のプロセッサ１０２のバリア命令挿入部１２２は、図１０（Ａ）と同様に、要求出力処理を行い、図１０（Ｂ）と同様に、応答入力処理を行う。また、図４のステップＳ４０２において、第２のプロセッサ１０２のメモリコントローラ１２３は、図１１（Ａ）と同様に、要求出力処理を行い、図１１（Ｂ）と同様に、応答入力処理を行う。
【００８２】
また、図４のステップＳ４０４において、第２のプロセッサ１０２は、ステップＳ４０１の第１のプロセッサ１０１の処理と同様に、書き込み処理を行う。また、図４のステップＳ４０５において、第１のプロセッサ１０１は、ステップＳ４０２の第２のプロセッサ１０２の処理と同様に、読み出し処理を行う。
【００８３】
また、図１において、情報処理システム１００は、第２のプロセッサ１０２を削除することができる。その場合、図４のステップＳ４０１において、第１のプロセッサ１０１が入力データの書き込み処理を行い、ステップＳ４０２において、第１のプロセッサ１０１がその入力データの読み出し処理を行う。ステップＳ４０１〜Ｓ４０５において、第１のプロセッサ１０１が、第２のプロセッサ１０２の処理をすべて行う。
【００８４】
データ領域１３１及びコマンドＦＩＦＯ１３２は、それぞれ、１００Ｍバイト又は１Ｇバイト等の固定容量にすることができる。また、第１のデータ領域１３１ａ及び第２のデータ領域１３１ｂは、それぞれ、１０ブロック又は１００ブロック等の固定ブロック数を記憶することができる。また、情報処理システム１００は、コマンドＦＩＦＯ１３２の空き時間に応じて、データ領域１３１及びコマンドＦＩＦＯ１３２の容量を動的に変更してもよい。
【００８５】
仮に、バリア命令挿入部１１２が、メモリアクセス履歴をバッファリングし、メモリアクセス履歴を基にバリア命令を挿入すると、バリア命令挿入の条件が複雑になり、消費電力が増加し、レイテンシが悪化する。本実施形態によれば、バリア命令挿入部１１２は、書き込み完了情報３００の書き込み要求８０３，８０６，８０９の直前にバリア命令８１１〜８１３を挿入するので、消費電力が低下し、レイテンシが改善する。
【００８６】
（第２の実施形態）
図１３は、図１０（Ａ）に対応し、第２の実施形態によるバリア命令挿入部１１２の要求出力処理の詳細を示すフローチャートである。以下、本実施形態の情報処理システム１００が第１の実施形態の情報処理システム１００と異なる点を説明する。バリア命令挿入部１１２は、図１０（Ａ）の代わりに、図１３の処理を行う。本実施形態では、全ブロックの入力データのサイズが同じである。すなわち、ブロックｂｌｋ０の入力データのサイズとブロックｂｌｋ１の入力データのサイズは、相互に同じである。その場合、図８（Ａ）において、書き込み要求群８０２内の複数の書き込み要求の数は、ブロックｂｌｋ０の入力データのサイズをメモリキャッシュのデータ長で割った数であり、要求数ＴＨ１である。書き込み要求群８０５内の複数の書き込み要求の数は、ブロックｂｌｋ１の入力データのサイズをメモリキャッシュのデータ長で割った数であり、要求数ＴＨ１である。書き込み要求群８０８内の複数の書き込み要求の数は、ブロックｂｌｋ２の入力データのサイズをメモリキャッシュのデータ長で割った数であり、要求数ＴＨ１である。すべての書き込み要求群８０２，８０５，８０８内の書き込み要求の数は、それぞれ、同一の要求数ＴＨ１である。以下、バリア命令挿入部１１２の処理を例に説明するが、バリア命令挿入部１２２の処理もバリア命令挿入部１１２の処理と同様である。
【００８７】
ステップＳ１３０１において、バリア命令挿入部１１２は、カウンタ値ｃｎｔを１に初期化する。次に、ステップＳ１３０２において、バリア命令挿入部１１２は、プロセッサコア１１１が発行したメインメモリ１０３への要求を入力するまで待機し、要求を入力した場合にはステップＳ１３０３に処理を進める。
【００８８】
ステップＳ１３０３において、バリア命令挿入部１１２は、入力した要求が書き込み要求であるか否かを判定する。バリア命令挿入部１１２は、入力した要求が書き込み要求であると判定した場合には、ステップＳ１３０４に処理を進め、入力した要求が書き込み要求でないと判定した場合には、ステップＳ１３０５に処理を進める。ステップＳ１３０４において、バリア命令挿入部１１２は、カウンタ値ｃｎｔをインクリメントし、ステップＳ１３０５に処理を進める。ステップＳ１３０５において、バリア命令挿入部１１２は、プロセッサコア１１１から入力した要求をメモリコントローラ１１３に出力する。
【００８９】
次に、ステップＳ１３０６において、バリア命令挿入部１１２は、カウンタ値ｃｎｔがＴＨ＋１と同じか否かを判定する。ＴＨは、各書き込み要求群８０２，８０５，８０８内の書き込み要求の数である。バリア命令挿入部１１２は、カウンタ値ｃｎｔがＴＨ＋１と同じであると判定した場合には、ステップＳ１３０７に処理を進め、カウンタ値ｃｎｔがＴＨ＋１と同じでないと判定した場合には、ステップＳ１３０２に処理を戻す。ステップＳ１３０７において、バリア命令挿入部１１２は、バリア命令をメモリコントローラ１１３に出力し、カウンタ値ｃｎｔを０にし、ステップＳ１３０２に処理を戻す。
【００９０】
図８（Ａ）及び（Ｂ）の場合、読み出し要求８０１が発行されると、バリア命令挿入部１１２は、カウンタ値ｃｎｔをインクリメントせず、読み出し要求８０１を出力する。次に、書き込み要求群８０２内の複数の書き込み要求が発行されると、バリア命令挿入部１１２は、カウンタ値ｃｎｔをインクリメントし、書き込み要求群８０２内の複数の書き込み要求を出力する。カウンタ値ｃｎｔがＴＨ＋１と同じになり、バリア命令挿入部１１２は、バリア命令８１１を出力し、カウンタ値ｃｎｔを０にする。
【００９１】
次に、書き込み要求８０３が発行されると、バリア命令挿入部１１２は、カウンタ値ｃｎｔをインクリメントし、書き込み要求８０３を出力する。次に、読み出し要求８０４が発行されると、バリア命令挿入部１１２は、カウンタ値ｃｎｔをインクリメントせず、読み出し要求８０４を出力する。次に、書き込み要求群８０５内の複数の書き込み要求が発行されると、バリア命令挿入部１１２は、カウンタ値ｃｎｔをインクリメントし、書き込み要求群８０５内の複数の書き込み要求を出力する。カウンタ値ｃｎｔがＴＨ＋１と同じになり、バリア命令挿入部１１２は、バリア命令８１２を出力し、カウンタ値ｃｎｔを０にする。
【００９２】
次に、書き込み要求８０６が発行されると、バリア命令挿入部１１２は、カウンタ値ｃｎｔをインクリメントし、書き込み要求８０６を出力する。次に、読み出し要求８０７が発行されると、バリア命令挿入部１１２は、カウンタ値ｃｎｔをインクリメントせず、読み出し要求８０７を出力する。次に、書き込み要求群８０８内の複数の書き込み要求が発行されると、バリア命令挿入部１１２は、カウンタ値ｃｎｔをインクリメントし、書き込み要求群８０８内の複数の書き込み要求を出力する。カウンタ値ｃｎｔがＴＨ＋１と同じになり、バリア命令挿入部１１２は、バリア命令８１３を出力し、カウンタ値ｃｎｔを０にする。次に、書き込み要求８０９が発行されると、バリア命令挿入部１１２は、カウンタ値ｃｎｔをインクリメントし、書き込み要求８０９を出力する。
【００９３】
本実施形態によれば、バリア命令挿入部１１２は、プロセッサコア１１１が発行した書き込み要求の数をカウンタ値ｃｎｔとしてカウントし、カウントした書き込み要求の数に応じて、バリア命令８１１〜８１３を挿入する。
【００９４】
なお、第１のプロセッサ１０１及び第２のプロセッサ１０２は、上記の図９〜図１３の処理をハードウェアにより処理してもよいし、ソフトウェアにより処理してもよい。第１のプロセッサ１０１及び第２のプロセッサ１０２は、それぞれ、メインメモリ１０３に記憶されているプログラムを実行することにより、図９〜図１３の処理をすることができる。
【００９５】
第１及び第２の実施形態は、コンピュータがプログラムを実行することによって実現することができる。また、上記のプログラムを記録したコンピュータ読み取り可能な記録媒体及び上記のプログラム等のコンピュータプログラムプロダクトも本発明の実施形態として適用することができる。記録媒体としては、例えばフレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、磁気テープ、不揮発性のメモリカード、ＲＯＭ等を用いることができる。
【００９６】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００９７】
１００  情報処理システム
１０１  第１のプロセッサ
１０２  第２のプロセッサ
１０３  メインメモリ
１０４  バス
１１１，１２１  プロセッサコア
１１２，１２２  バリア命令挿入部
１１３，１２３  メモリコントローラ
１３１  データ領域
１３２  コマンドＦＩＦＯ
【図１】
2019016328.tif 000003
【図２】
2019016328.tif 000004
【図３】
2019016328.tif 000005
【図４】
2019016328.tif 000006
【図５】
2019016328.tif 000007
【図６】
2019016328.tif 000008
【図７】
2019016328.tif 000009
【図８】
2019016328.tif 000010
【図９】
2019016328.tif 000011
【図１０】
2019016328.tif 000012
【図１１】
2019016328.tif 000013
【図１２】
2019016328.tif 000014
【図１３】
2019016328.tif 000015