(57)【要約】      （修正有）【課題】メモリ性能の低下を抑止して、演算回路間で情報を授受する情報処理装置を提供する。【解決手段】第１の演算部と第２の演算部とを有する。第１の演算部は、第２の演算回路１４−１で入出力されるデータを第２の演算回路以外の回路が有するデータとの整合性を維持する手順にしたがって保持する第１のキャッシュ１５−１と、第４の演算回路１４−２への送信データの送信開始を示す情報を第２の演算部に送信する手段１６と、第１のキャッシュに送信データを書き込む手段と、送信データ以外のデータによって第１のキャッシュが使用されることを抑止する手段とを有する。第２の演算部は、第４の演算回路で入出力されるデータを第４の演算回路以外の回路が有するデータとの整合性を維持する手順にしたがって保持する第２のキャッシュ１５−２と、送信開始を示す情報を受信した場合に第２のキャッシュを介して送信データを読み出す手段１７とを備える。【選択図】図３
2019028662.tif 000002
【特許請求の範囲】
【請求項１】
第１の演算回路および第２の演算回路を備える第１の演算部と、前記第１の演算部と接続され、かつ第３の演算回路および第４の演算回路を備える第２の演算部と、を有し、
前記第１の演算部は、さらに
前記第２の演算回路において入出力されるデータを前記第２の演算回路以外の回路が有するデータとの整合性を維持する手順にしたがって保持する第１のキャッシュメモリと、
前記第４の演算回路への送信データの送信開始を示す情報を前記第２の演算部に送信する手段と、
前記第１のキャッシュメモリに前記送信データを書き込む手段と、
前記送信データ以外のデータによって前記第１のキャッシュメモリが使用されることを抑止する手段と、を有し、
前記第２の演算部は、さらに、
前記第４の演算回路において入出力されるデータを前記第４の演算回路以外の回路が有するデータとの整合性を維持する手順にしたがって保持する第２のキャッシュメモリと、
前記送信開始を示す情報を受信した場合において、前記第２のキャッシュメモリを介して前記送信データを読み出す手段と、を備えることを特徴とする情報処理装置。
【請求項２】
前記送信データを保持するための前記第１のキャッシュメモリ上での空き領域を確認する手段をさらに備え、
前記抑止する手段は、前記第１の演算部および前記第２の演算部からアクセス可能なメモリ上で指定されるアドレスを基に、前記空き領域の存在が確認された後に前記第１のキャッシュメモリに書き込まれるデータが前記送信データか否かを判定し、前記送信データ以外のデータによって前記第１のキャッシュメモリが使用されることを抑止する請求項１に記載の情報処理装置。
【請求項３】
前記送信データのデータ量を取得し、前記確認する手段によって前記空き領域の有無を繰り返し確認し、前記空き領域があることが確認されたときに、前記書き込む手段によって前記空き領域の容量分の送信データを書き込む処理を実行する制御手段をさらに備える請求項２に記載の情報処理装置。
【請求項４】
読み出す手段は、前記メモリ上で指定されるアドレスに基づく前記第２のキャッシュメモリからのデータの読み出しがキャッシュミスとなった場合に、前記第２のキャッシュメモリからのデータの読み出しを再度実行する請求項２または３に記載の情報処理装置。
【請求項５】
前記第１のキャッシュメモリは、前記空き領域に書き込まれた送信データが前記第２のキャッシュメモリを介して前記読み出す手段によって読み出されるときに、前記送信データが書き込まれた領域を空き領域に設定するキャッシュ制御手段をさらに備える請求項３または４に記載の情報処理装置。
【請求項６】
前記送信開始を示す情報を前記第２の演算部に送信する手段は、前記第１のキャッシュメモリを介して前記メモリに前記送信開始を示す情報を書き込み、
前記第２の演算部は前記第２のキャッシュメモリを介して前記メモリから前記送信開始を示す情報を読み出す手段を備える請求項２から５のいずれか１項に記載の情報処理装置。
【請求項７】
前記第１の演算部の第１の演算回路および前記第２の演算部の第３の演算回路の両方を前記第１の演算部の第２の演算回路および前記第２の演算部の第４の演算回路の両方に接
続する伝送路をさらに有し、
前記送信開始を示す情報を前記第２の演算部に送信する手段は、前記第１のキャッシュメモリを介して前記メモリに前記送信開始を示す情報を書き込み、
前記第１の演算部の第１の演算回路または前記第２の演算部の第３の演算回路は前記メモリから前記処理の開始を示す情報を読み出し、前記伝送路を通じて前記第４の演算回路に引き渡す請求項２から５のいずれか１項に記載の情報処理装置。
【請求項８】
前記抑止する手段は、前記書き込む手段によって前記第１のキャッシュメモリに前記送信データが書き込まれた後に、前記第１のキャッシュメモリの使用を抑止し、前記読み出す手段によって前記送信データが読み出された後に、前記第１のキャッシュメモリの使用を抑止することを解除する請求項１に記載の情報処理装置。
【請求項９】
前記第１の演算部は、前記送信データのデータ量を取得し、前記データ量の送信データを所定の書き込み量の単位で前記第１のキャッシュメモリを介して前記第２の演算部に転送する制御手段をさらに備える請求項１または８に記載の情報処理装置。
【請求項１０】
前記制御手段は、前記第１のキャッシュメモリへの書き込み量を前記メモリ上で指定し、前記第１のキャッシュメモリに前記書き込み量の送信データを前記第１のキャッシュメモリに書き込み、前記第１のキャッシュメモリの使用を抑止し、前記送信データの前記第２の演算部での読み出し完了を確認し、前記読み出し完了が確認できたときに前記第１のキャッシュメモリの使用を抑止することを解除する請求項９に記載の情報処理装置。
【請求項１１】
第１の演算回路および第２の演算回路を備える第１の演算部と、前記第１の演算部と接続され、かつ第３の演算回路および第４の演算回路を備える第２の演算部と、を有する情報処理装置が実行する方法であって、
前記第１の演算部は、
前記第２の演算回路において入出力されるデータを前記第２の演算回路以外の回路が有するデータとの整合性を維持する手順にしたがって保持し、
前記第４の演算回路への送信データの送信開始を示す情報を前記第２の演算部に送信し、
前記第１のキャッシュメモリに前記送信データを書き込み、
前記送信データ以外のデータによって前記第１のキャッシュメモリが使用されることを抑止し、
前記第２の演算部は
前記第４の演算回路において入出力されるデータを前記第４の演算回路以外の回路が有するデータとの整合性を維持する手順にしたがって保持し、
前記送信開始を示す情報を受信した場合において、前記第２のキャッシュメモリを介して前記送信データを読み出す、ことを特徴とする情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置および情報処理方法に関する。
【背景技術】
【０００２】
今日、Central Processing Unit（ＣＰＵ）とメモリとField-Programmable Gate Array(ＦＰＧＡ)のようなハードウェア回路とを組み合わせて情報処理や通信を実行するシステムが利用されている。このようなシステムでは、ＣＰＵ、メモリ、ＦＰＧＡ等はシステムバス、インターコネクト、あるいはクロスバー等で例示される伝送路で接続される。また、ＣＰＵとＦＰＧＡにはそれぞれキャッシュメモリが設けられ、キャッシュメモリを制御するキャッシュコントローラがキャッシュメモリとメモリとの間の整合性（一貫性ともいう）、および各キャッシュメモリ間の整合性を維持する。
【０００３】
そして、ＣＰＵとＦＰＧＡは、メモリとの間でキャッシュメモリおよび伝送路を介してデータを授受する。また、ＣＰＵとともに、あるいは、ＣＰＵに代えてGraphics Processing Unit（ＧＰＵ）が用いられることもある。以下、ＣＰＵあるいはＧＰＵを演算装置と呼ぶ。また、ＦＰＧＡに限定されず、演算装置とシステムバス等の伝送路を介して連携するハードウェア回路を演算回路と呼ぶ。ただし、演算装置と演算回路を区別せず、いずれをも総括して演算回路と呼ぶこともある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開第２０１７／０１０００４号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、上述のようなシステムおいては、従来は、システム内の複数の演算回路間ではメモリを介して情報が授受される。しかしながら、システムバス等の伝送路に接続される複数の演算回路がメモリを介して情報を授受すると、システム内の他の構成要素、例えば、演算装置がメモリにアクセスするときのメモリ帯域が消費され、システムの性能が低下する可能性がある。
【０００６】
そこで、本発明の目的は、メモリと複数の演算回路を有するシステムにおいて、メモリの性能を含むシステムの性能低下を抑止して、演算回路間で情報を授受できるようにすることである。
【課題を解決するための手段】
【０００７】
開示の技術の一側面は、情報処理装置によって例示される。本情報処理装置は、第１の演算回路および第２の演算回路を備える第１の演算部と、第１の演算部と接続され、かつ第３の演算回路および第４の演算回路を備える第２の演算部とを有する。第１の演算部は、さらに前記第２の演算回路において入出力されるデータを前記第２の演算回路以外の回路が有するデータとの整合性を維持する手順にしたがって保持する第１のキャッシュメモリと、前記第４の演算回路への送信データの送信開始を示す情報を前記第２の演算部に送信する手段と、前記第１のキャッシュメモリに前記送信データを書き込む手段と、前記送信データ以外のデータによって前記第１のキャッシュメモリが使用されることを抑止する手段とを有する。第２の演算部は、さらに、前記第４の演算回路において入出力されるデータを前記第４の演算回路以外の回路が有するデータとの整合性を維持する手順にしたがって保持する第２のキャッシュメモリと、前記送信開始を示す情報を受信した場合におい
て、前記第２のキャッシュメモリを介して前記送信データを読み出す手段とを備える。
【発明の効果】
【０００８】
本情報処理装置によれば、メモリと複数の演算回路を有するシステムにおいて、メモリの性能を含むシステムの性能低下を抑止して、演算回路間で情報を授受できる。
【図面の簡単な説明】
【０００９】
【図１】比較例に係る情報処理装置を例示する図である。
【図２】比較例の情報処理装置の問題点を例示する図である。
【図３】実施形態１の情報処理装置の構成およびデータフローを例示する図である。
【図４】送信回路の詳細構成を例示する図である。
【図５】受信回路の詳細構成を例示する図である。
【図６】空cache管理回路の詳細構成を例示する図である。
【図７】送信回路制御回路の処理を例示するシーケンス図である。
【図８】受信回路制御回路の処理を例示するシーケンス図である。
【図９】データ転送時のデータフローを例示する図である。
【図１０】システムメモリに転送領域を確保可能な状態を例示する図である。
【図１１】転送サイズを送信回路に通知する処理例である。
【図１２】空き容量が確保された状態を例示する図である。
【図１３】空き領域に転送データが書き込まれた状態を例示する図である。
【図１４】受信回路のポーリング処理を例示する図である。
【図１５】最後の転送データを取得した状態を例示する図である。
【図１６】実施形態２の送信回路の構成およびデータフローを例示する図である。
【図１７】実施形態２の送信回路制御回路の処理を例示するシーケンス図である。
【図１８】送信回路制御回路が転送領域の先頭アドレスを受信したときの状態を例示する図である。
【図１９】システムメモリに転送サイズの初期値を設定した状態を例示する図である。
【図２０】ＦＰＧＡ演算回路がメモリリクエストとして転送要求量を通知した処理例である。
【図２１】規定サイズ分の転送データを書き込んだ状態を例示する図である。
【図２２】受信回路の処理を例示する図である。
【図２３】受信回路制御回路がシステムメモリ上の所定アドレスに設定された転送サイズをクリアした状態を例示する図である。
【図２４】残りのデータを転送するためシステムメモリの転送サイズを設定した状態を例示する図である。
【図２５】残りのデータをＦＰＧＡキャッシュに書き込んだ状態を例示する図である。
【図２６】送信ＦＩＦＯが空となり、転送フラグがクリアされる処理を例示する図である。
【図２７】４つのＦＰＧＡ演算回路の間でデータ転送を行う情報処理装置の構成を例示する図である。
【発明を実施するための形態】
【００１０】
以下、図面を参照して、一実施形態に係る情報処理装置および情報処理装置が実行する情報処理方法について説明する。以下の実施形態の構成は例示であり、本情報処理装置および本情報処理方法は、以下の実施形態の構成と作用によって限定される訳ではない。
［比較例］
【００１１】
図１に、比較例に係る情報処理装置５００を例示する。情報処理装置５００は、２つの
パッケージ(package)５１０−１、５１０−２を含む。パッケージ５１０−１は、ＣＰＵ
チップ(chip)と、ＦＰＧＡチップ(chip)と、システムメモリ２０−１を有する。パッケージ５１０−１のＣＰＵチップはＣＰＵコア(core)１１−１、ローカルキャッシュ１２−１、およびLast Level Cache（ＬＬＣ）１３−１を含む。ＣＰＵコア(core)１１−１は、単にＣＰＵ１１−１ともいう。また、パッケージ(package) ５１０−２は、同様に、ＣＰＵチップ(chip)と、ＦＰＧＡチップ(chip)と、システムメモリ２０−２を有する。パッケージ５１０−２のＣＰＵチップはＣＰＵコア(core)１１−２、ローカルキャッシュ１２−２、およびLast Level Cache（ＬＬＣ）１３−２を含む。
【００１２】
また、パッケージ５１０−１のＦＰＧＡチップは、ＦＰＧＡ演算回路１４−１およびＦＰＧＡキャッシュ１５−１を含む。なお、図１では、キャッシュはダラーマーク($)で表
されている。同様に、パッケージ５１０−２のＦＰＧＡチップは、ＦＰＧＡ演算回路１４−２およびＦＰＧＡキャッシュ１５−２を含む。
【００１３】
ＣＰＵ１１−１、１１−２、ローカルキャッシュ１２−１、１２−２、ＦＰＧＡキャッシュ１５−１、１５−２、およびＦＰＧＡ演算回路１４−１、１４−２を総称する場合には、ＣＰＵ１１、ローカルキャッシュ１２、ＦＰＧＡキャッシュ１５、およびＦＰＧＡ演算回路１４という。また、パッケージ５１０−１、５１０−２およびシステムメモリ２０−１、２０−２を総称する場合には、パッケージ５１０およびシステムメモリ２０という。ＣＰＵ１１は、システムバス、インターコネクト、あるいはクロスバー等で例示される伝送路でＦＰＧＡ演算回路１４と接続される。図１では、伝送路としてIntel QuickPath Interconnect（ＱＰＩ）が例示されているが、本比較例および後述する実施形態において、伝送路がＱＰＩに限定される訳ではない。
【００１４】
ＣＰＵ１１は、システムメモリ２０を介してＦＰＧＡ演算回路１４とデータを授受する。システムメモリ２０が介在する場合、つまり、ＣＰＵ１１がシステムメモリ２０のアドレス空間のアドレスにアクセスする場合には、ローカルキャッシュ１２、ＬＬＣ１３を介してシステムメモリ２０にアクセスする。また、ＦＰＧＡ演算回路１４がシステムメモリ２０のアドレス空間のアドレスにアクセスする場合には、ＦＰＧＡキャッシュ１５を介してシステムメモリ２０にアクセスする。また、ＬＬＣ１３は、所定の規格のメモリバス、例えば、Double-Data-Rate（ＤＤＲ）の規格にしたがってメモリバスを介してシステムメモリ２０に接続される。ただし、本比較例および後述する実施形態において、メモリバスの規格に限定がある訳ではない。
【００１５】
また、ＣＰＵ１１は、伝送路を介してＦＰＧＡ演算回路１４のレジスタにアクセスできる。ＣＰＵ１１が伝送路を介してＦＰＧＡ演算回路１４のレジスタにアクセスするときに使用される伝送路は、例えば、システムメモリ２０のアドレス空間とは異なるアドレス空間に配置される。このようなレジスタへのアクセスの仕方はダイレクト方式と呼ばれる。一方、上記伝送路がシステムメモリ２０のアドレス空間の一部に配置されてもよい。ＣＰＵ１１がシステムメモリ２０のアドレス空間の一部によりＦＰＧＡ演算回路１４のレジスタにアクセスするときのアクセスの仕方はメモリマップド方式と呼ばれる。メモリマップド方式の場合には、キャッシュコントローラによるキャッシュのコヒーレンシを維持する手順とは独立にＦＰＧＡ演算回路１４のレジスタがアクセスされてもよい。つまり、ＣＰＵ１１がシステムメモリ２０のアドレス空間の一部に配置されたアドレスを用いたメモリマップド方式により、ＦＰＧＡ演算回路１４のレジスタに直接アクセスしてもよい。いずれにしても、ＣＰＵ１１は、システムメモリ２０およびローカルキャッシュ１２等を介さずに、ＦＰＧＡ演算回路１４のレジスタにアクセスすることができる。ただし、メモリマップド方式において、キャッシュコントローラにより、キャッシュのコヒーレンシを維持する手順にしたがってＦＰＧＡ演算回路１４のレジスタがアクセスされるようにしてもよい。
【００１６】
また、システムメモリ２０内のメモリコントローラ（図１では省略）、ローカルキャッシュ１２、ＬＬＣ１３およびＦＰＧＡキャッシュ１５をそれぞれ管理するそれぞれのキャッシュコントローラは、相互にキャッシュのコヒーレンシを維持する手順にしたがって、データを授受する。キャッシュコヒーレンシは、キャッシュ一貫性あるいはキャッシュ整合性ともいう。
【００１７】
キャッシュのコヒーレンシを維持する手順としては、スヌープ方式、ディレクトリ方式等が知られている。また、スヌープ方式でキャッシュのコヒーレンシを維持する手順としては、Modified, Exclusive, Shared, Invalid（ＭＥＳＩ）プロトコル、Ｅが削除されたＭＳＩプロトコル、Ｅに代えてOwned（Ｏ）が追加されたＭＯＳＩプロトコル等が知られ
ている。
【００１８】
ただし、本比較例および後述する実施形態において、キャッシュのコヒーレンシを維持する手順に限定はない。したがって、本比較例および後述する実施形態では、キャッシュのコヒーレンシを維持する手順の詳細は省略する。ただし、システムメモリ２０内のメモリコントローラ、ローカルキャッシュ１２内のキャッシュコントローラ、ＬＬＣ１３内のキャッシュコントローラ、ＦＰＧＡキャッシュ１５のキャッシュコントローラは、相互にキャッシュのコヒーレンシを維持しているものとする。
【００１９】
複数のＣＰＵ１１上では、単一のオペレーティングシステムが起動され、情報処理装置５００のハードウェアを管理し、アプリケーションプログラム（以下、単にアプリケーションという）に実行環境をプロセスあるいはスレッドの形で提供する。プロセスあるいはスレッドは、複数のＣＰＵ１１のいずれかを割り当てられ、処理が実行される。複数のＣＰＵ１１のそれぞれは、伝送路を介して複数のＦＰＧＡ演算回路１４のレジスタにアクセスできる。また、複数のＣＰＵ１１のそれぞれは、システムメモリ２０を介して複数のＦＰＧＡ演算回路１４とデータを授受できる。ただし、本比較例および後述する実施形態において、ＣＰＵ１１、ＦＰＧＡ演算回路１４、パッケージ５１０の数が２個に限定される訳ではない。また、図１では、ＣＰＵ１１とＦＰＧＡ演算回路１４とがＱＰＩ等の伝送路を介して１対１で接続されている。ただし、本比較例および後述する実施形態において、ＣＰＵ１１とＦＰＧＡ演算回路１４との接続関係が１対１の関係に限定される訳ではない。例えば、１つのソケットに搭載されるＣＰＵ１１に複数のＦＰＧＡ演算回路１４がローカルキャッシュ１２、複数の異なるＦＰＧＡキャッシュ１５等を介して接続されてもよい。
【００２０】
図２に比較例の情報処理装置５００の問題点を例示する。ＣＰＵ１１が実行するアプリケーションによっては、複数のＦＰＧＡ演算回路１４の間で、データが授受される場合がある。比較例の情報処理装置５００では、ＦＰＧＡ演算回路１４の間でのデータの授受は、システムメモリ２０を介してなされる。しかし、ＦＰＧＡキャッシュ１５の容量には限界があり、ＦＰＧＡ演算回路１４が連続的、継続的にデータをＦＰＧＡキャッシュ１５に書き込むと、ＦＰＧＡキャッシュ１５の該当エントリに空き領域がなくなり、データの入替が発生する。ＦＰＧＡキャッシュ１５のデータの入替では、周知のアルゴリズムにしたがって、既存データがシステムメモリ２０に追い出されることになる。データの入替が発生すると、ＦＰＧＡ演算回路１４から出力されるデータがメモリバスの帯域を消費し、情報処理装置５００のシステム性能が低下することがある。したがって、比較例の情報処理装置５００においては、複数のＦＰＧＡ演算回路１４間で、メモリバスの帯域の消費を抑制した高速データ転送が望まれる。例えば、複数のＦＰＧＡ演算回路１４間でのメモリバスを経由しないデータ転送の仕組みが望まれる。
［実施形態１］
【００２１】
以下、図３から図１５を参照して、実施形態１に係る情報処理装置１００を説明する。図３は、情報処理装置１００の構成およびデータフローを例示する図である。図３の情報処理装置１００は、比較例の情報処理装置５００と同様、複数のＣＰＵ１１、複数のＦＰＧＡ演算回路１４および複数のシステムメモリ２０を有している。また、複数のＣＰＵ１１と複数のＦＰＧＡ演算回路１４は、比較例の情報処理装置５００と同様、ＱＰＩ等の伝送路により接続される。また、複数のＣＰＵ１１は、ローカルキャッシュ１２、ＬＬＣ１３およびＤＤＲ等の規格によるメモリバスを介してシステムメモリ２０にアクセスする。また、複数のＦＰＧＡ演算回路１４は、ＦＰＧＡキャッシュ１５、ＬＬＣ１３およびメモリバスを介してシステムメモリ２０にアクセスする。以上の構成は、比較例の情報処理装置５００と同様であるので、その説明を省略する。
【００２２】
実施形態１の情報処理装置１００は、さらに、送信回路１６、および受信回路１７を有する。送信回路１６および受信回路１７は、ＣＰＵ１１で実行されるアプリケーション（例えば、Ａ）に対応してＦＰＧＡチップ内に設けられる個別のアプリケーションＡ専用回路である。送信回路１６および受信回路１７は、データ転送時のパラメータ等がＣＰＵ１１で実行される各アプリケーションに対応して書き換えられることで、ＦＰＧＡ演算回路１４間のデータ転送が効率的に実行される。データ転送時のパラメータは、例えば、１回の転送で送信回路１６から受信回路１７に転送されるデータ量等である。ただし、送信回路１６および受信回路１７が、複数のアプリケーションに共通の回路であってもよい。
【００２３】
なお、実施形態１では、ＣＰＵ１１−１、ＦＰＧＡ演算回路１４−１、送信回路１６、ＦＰＧＡキャッシュ１５−１およびシステムメモリ２０−１を含む部分がパッケージ１１０−１となっている。また、ＣＰＵ１１−２、ＦＰＧＡ演算回路１４−２、受信回路１７、ＦＰＧＡキャッシュ１５−２およびシステムメモリ２０−２を含む部分がパッケージ１１０−２となっている。ただし、図３では省略されているが、パッケージ１１０−１も受信回路１７と同等の回路を有する。また、パッケージ１１０−２も送信回路１６と同等の回路を有する。ＣＰＵ１１−１は、第１の演算回路の一例であり、ＦＰＧＡ演算回路１４−１は、第２の演算回路の一例であり、ＣＰＵ１１−２は、第３の演算回路の一例であり、ＦＰＧＡ演算回路１４−２は、第４の演算回路の一例である。ＣＰＵ１１−１とＦＰＧＡ演算回路１４−１は、第１の演算部の一例であり、ＣＰＵ１１−２とＦＰＧＡ演算回路１４−２は、第２の演算部の一例である。ＦＰＧＡキャッシュ１５−１は第１のキャッシュメモリの一例であり、ＦＰＧＡキャッシュ１５−２は第２のキャッシュメモリの一例である。ＱＰＩ等の伝送路は、第１の演算部の第１の演算回路および第２の演算部の第３の演算回路の両方を第１の演算部の第２の演算回路および第２の演算部の第４の演算回路の両方に接続する伝送路の一例である。
【００２４】
図３のように、例えば、ＦＰＧＡ演算回路１４−１から出力されるデータ（data1）は
、送信回路１６からＦＰＧＡキャッシュ１５−１、１５−２、ＱＰＩ等の伝送路、ＬＬＣ１３、および受信回路１７を介してＦＰＧＡ演算回路１４−２に転送される。
【００２５】
本実施形態の送信回路１６は、送信側のＦＰＧＡキャッシュ１５−１にデータを書き込むときに、ＦＰＧＡキャッシュ１５−１からの追い出し（キャッシュブロックのデータの入替）が発生しないようにＦＰＧＡキャッシュ１５−１へのアクセスを制御する。すなわち、送信回路１６は、他のメモリトランザクションによるＦＰＧＡキャッシュ１５−１へのアクセスを制限する。したがって、ＦＰＧＡ演算回路１４−１から送信回路１６を介してＦＰＧＡキャッシュ１５−１に書き込まれたデータは、システムメモリ２０を経由しないで、ＦＰＧＡキャッシュ１５−２に転送されることが可能となる。すなわち、ＦＰＧＡキャッシュ１５−１に書き込まれたデータは、キャッシュのコヒーレンシを維持するプロトコルにしたがってＦＰＧＡキャッシュ１５−２に転送される。
【００２６】
より具体的には、実施形態１では、送信回路１６からの転送開始の指示により、受信回路１７が転送開始を検知する。すると、受信回路１７は、受信側のＦＰＧＡキャッシュ１５−２を介して転送側のＦＰＧＡキャッシュ１５−１から転送データを読み出す。送信側のＦＰＧＡキャッシュ１５−１と受信側のＦＰＧＡキャッシュ１５−２との間は、比較例での説明と同様、コヒーレンシが維持されたプロトコルにしたがってデータが授受される。
【００２７】
この場合に、コヒーレンシ維持のためのプロトコルに限定はない。例えば、受信回路１７が、受信側のＦＰＧＡキャッシュ１５−２に、システムメモリ２０の読み出しアドレスを指定して受信側のＦＰＧＡキャッシュ１５−２にアクセスする。すると、ＦＰＧＡキャッシュ１５−２（実際にはキャッシュコントローラ）がバススヌープにより読み出しアドレスに対応する最新のデータが存在する格納先を認識する。図３の例では、読み出しアドレスに対応する最新のデータは、送信側のＦＰＧＡキャッシュ１５−１に存在するので、ＦＰＧＡキャッシュ１５−２は、送信側のＦＰＧＡキャッシュ１５−１から最新のデータを取得する。そして、受信回路１７は、ＦＰＧＡキャッシュ１５−２から読み出しアドレスに対応する最新のデータを取得し、ＦＰＧＡ演算回路１４−２に引き渡す。ＦＰＧＡキャッシュ１５−１におけるコヒーレンシ維持のためのプロトコルは、第２の演算回路において入出力されるデータと第２の演算回路以外の回路が有するデータとの整合性を維持する手順の一例である。ＦＰＧＡキャッシュ１５−２におけるコヒーレンシ維持のためのプロトコルは、第４の演算回路において入出力されるデータと第４の演算回路以外の回路が有するデータとの整合性を維持する手順の一例である。
【００２８】
図４は、送信回路１６の詳細構成を例示する図である。ただし、図４では、送信側のＦＰＧＡ演算回路１４−１および送信側のＦＰＧＡキャッシュ１５−１、キャッシュコントローラ１５Ａ−１も併せて記載されている。図４のように、送信回路１６は、送信側のＦＰＧＡ演算回路１４−１と、送信側のキャッシュコントローラ１５Ａ−１との間に介在する。そして、送信回路１６は、ＦＰＧＡ演算回路１４−１から出力されるデータを送信側のキャッシュコントローラ１５Ａ−１およびＦＰＧＡキャッシュ１５−１を介して受信側のＦＰＧＡキャッシュ１５−２に転送する。送信回路１６は、送信回路制御回路１６１と、転送フラグ転送サイズ書込回路１６２と、空cache管理回路１６３と、アドレスレジス
タ(address register)１６４を有している。
【００２９】
なお、ＣＰＵ１１は、ＦＰＧＡキャッシュ１５−１を介さずに、ＱＰＩ等の伝送路を通じて送信回路１６のアドレスレジスタ１６４およびＦＰＧＡ演算回路１４−１内のレジスタにデータを書き込むことが可能である。したがって、ＣＰＵ１１は、ＣＰＵ１１で実行されるアプリケーションに応じて、送信回路１６およびＦＰＧＡ演算回路１４−１を制御できる。
【００３０】
送信回路制御回路１６１は、状態を保持するレジスタと入力信号にしたがって状態を遷移し、あるいは、制御信号を生成する論理回路を有し、ステートマシンとして動作するディジタル回路である。ただし、送信回路制御回路１６１は、Read Only Memory（ＲＯＭ）等に格納されたファームウェアにしたがって処理を実行するプロセッサであってもよい。送信回路制御回路１６１は、例えば、ステートマシンの動作にしたがって送信回路１６の各部を制御する。
【００３１】
転送フラグ転送サイズ書込回路１６２は、ＦＰＧＡ演算回路１４−１から転送されるデータの転送サイズ（データ転送量）を受け、システムメモリ２０の所定アドレスを介して受信回路１７に通知する。システムメモリ２０への書込は、ＦＰＧＡキャッシュ１５−１を介して実行される。実施形態１では、転送サイズで指定されるデータ転送量の転送データは、ＦＰＧＡ演算回路１４−１内の空き領域の単位に区切られて、ＦＰＧＡ演算回路１
４−２に転送される。また、転送フラグ転送サイズ書込回路１６２は、ＯＮに設定した転送フラグを、システムメモリ２０の所定アドレスを介して受信回路１７に通知する。ここで、ＯＮの転送フラグは、送信回路１６から受信回路１７に対する転送開始の通知である。したがって、転送フラグ転送サイズ書込回路１６２の処理は、第１のキャッシュメモリを介してメモリに送信開始を示す情報を書き込むことの一例であるといえる。また、転送フラグ転送サイズ書込回路１６２は、第４の演算回路への送信データの送信開始を示す情報を第２の演算部に送信する手段の一例である。
【００３２】
空cache管理回路１６３は、ＦＰＧＡキャッシュ１５−１上の空容量を確保する。より
具体的には、空cache管理回路１６３は、ＦＰＧＡキャッシュ１５−１に問い合わせ（query）を送り、空き領域の存在を確認する。そして、空cache管理回路１６３は、空き領域
の存在を確認できた場合には、以降、ＦＰＧＡキャッシュ１５−１の空き領域を用いたデータ転送処理を実行する。すなわち、空cache管理回路１６３は、ＦＰＧＡ演算回路１４
−１から引き渡されるデータが転送データであるか否かを判定する。そして、空cache管
理回路１６３は、転送データをＦＰＧＡキャッシュ１５−１の空き領域に書き込む。一方、空cache管理回路１６３は、転送データ以外のデータがＦＰＧＡキャッシュ１５−１に
書き込まれないようにＦＰＧＡキャッシュ１５−１へのメモリトランザクションを制御する。空cache管理回路１６３は、第１のキャッシュメモリに送信データを書き込む手段の
一例である。空cache管理回路１６３は、送信データを保持するための第１のキャッシュ
メモリ上での空き領域を確認する手段の一例でもある。
【００３３】
すなわち、空cache管理回路１６３は、ＦＰＧＡ演算回路１４−１から引き渡されるア
ドレスを基にＦＰＧＡ演算回路１４−１から引き渡されるデータが受信回路１７に転送される転送データか否かを判定する。ここで、アドレスは、システムメモリ２０上に定義されるアドレスである。空cache管理回路１６３は、ＦＰＧＡ演算回路１４−１から引き渡
されるデータのアドレスがシステムメモリ２０上に確保された転送領域のアドレスの場合、ＦＰＧＡ演算回路１４−１から引き渡されるデータが転送データであると判定する。そして、空cache管理回路１６３は、転送データをＦＰＧＡキャッシュ１５−１上の確保さ
れた空き領域に書き込み、保持する。また、空cache管理回路１６３は、受信回路１７に
転送される転送データ以外のデータがＦＰＧＡキャッシュ１５−１に書き込まれないように制御する。この制御により、空cache管理回路１６３は、ＦＰＧＡキャッシュ１５−１
に保持された転送データが追い出されるのを抑止する。空cache管理回路１６３は、送信
データ以外のデータによって第１のキャッシュメモリが使用されることを抑止する手段の一例である。
【００３４】
アドレスレジスタ１６４は、システムメモリ２０に確保された転送領域のアドレスを保持する。転送領域のアドレスは、例えば、ＣＰＵ１１から書き込まれ、アドレスレジスタ１６４に保持されている。転送領域のアドレスは、アドレスレジスタ１６４から空cache
管理回路１６３に引き渡される。空cache管理回路１６３は、アドレスレジスタ１６４に
保持されたアドレスを基に、ＦＰＧＡ演算回路１４−１から引き渡されるデータが受信回路１７に転送される転送データか否かを判定する。すなわち、空cache管理回路１６３は
、ＦＰＧＡ演算回路１４−１からデータとともに引き渡されるアドレスが、アドレスレジスタ１６４に保持されたアドレスと一致するか、一定の範囲にあれば、そのデータが転送データであると判定する。
【００３５】
以下、図４の送信回路制御回路１６１による処理手順を例示する。例えば、送信回路制御回路１６１は、システムメモリ２０に確保された転送領域のアドレスがＣＰＵ１１−１からアドレスレジスタ１６４に書き込まれると、空cache管理回路１６３にＦＰＧＡキャ
ッシュ１５−１上の空領域を確保させる。そして、送信回路制御回路１６１は、転送フラグ転送サイズ書込回路１６２に、システムメモリ２０上の所定アドレスに、転送サイズと
転送フラグを書き込ませる。ここで、転送サイズは、ＦＰＧＡ演算回路１４−１から付与されるデータ転送量（length）である。そして、送信回路制御回路１６１は、ＦＰＧＡ演算回路１４−１から引き渡されるデータをＦＰＧＡキャッシュ１５−１上に確保された空領域に、引き渡されたアドレスを基に書き込む。図４では、送信回路制御回路１６１は、空cache管理回路１６３を介してＦＰＧＡキャッシュ１５−１にデータを書き込む。
【００３６】
このとき、空cache管理回路１６３は、ＦＰＧＡ演算回路１４−１から引き渡されるデ
ータが受信回路１７に転送される転送データか否かを判定する。データが転送データか否かは、データとともにＦＰＧＡ演算回路１４−１から引き渡されるアドレスが、システムメモリ２０に確保された転送領域のアドレスに該当するか否かにより判定される。そして、ＦＰＧＡ演算回路１４−１から引き渡されるデータが受信回路１７に転送される転送データである場合には、空cache管理回路１６３は、ＦＰＧＡ演算回路１４−１からのデー
タをＦＰＧＡキャッシュ１５−１の空き領域に書き込む。転送データの書き込みでは、空cache管理回路１６３は、キャッシュヒントをModify(M)としてデータを書き込む。
【００３７】
すなわち、空cache管理回路１６３は、ＦＰＧＡキャッシュ１５−１に新たに値を設定
する。キャッシュヒントは、キャッシュメモリに書き込まれるデータの状態を指定する情報である。例えば、キャッシュヒントでModify(M)の指定は、書き込まれたデータが書き
込まれたキャッシュにだけに存在し、主記憶上の値から変更されていることを示す。Modify(M)が指定されたキャッシュ上のデータは、他のＦＰＧＡ演算回路１４あるいはＣＰＵ
１１がこのデータのキャッシュブロックに相当するシステムメモリ２０からのデータの読み出しを許可する前に、システムメモリ２０に書き戻される。また、情報処理装置１００がImplicit Write Backを実施する場合には、Modify(M)が指定されたキャッシュ上のデータがＦＰＧＡ演算回路１４−１以外のＦＰＧＡ演算回路１４、あるいは、ＣＰＵ１１に転送されると、ＦＰＧＡキャッシュ１５−１のデータはInvalid(I)となる。また、このとき、ＦＰＧＡキャッシュ１５−１のデータは、システムメモリ２０に書き戻される。
【００３８】
一方、ＦＰＧＡ演算回路１４−１からのデータが受信回路１７に転送される転送データでない場合には、空cache管理回路１６３は、キャッシュヒントをInvalid(I)に設定する
。キャッシュコントローラ１５Ａ−１は、キャッシュヒントがInvalid(I)に設定されたデータをＦＰＧＡ演算回路１４−１内に保存せず、システムメモリ２０に書き戻す。すなわち、空cache管理回路１６３は、転送データ以外は、ＦＰＧＡキャッシュ１５−１に書き
込まれないように制御し、ＦＰＧＡキャッシュ１５−１に保持された転送データが、システムメモリ２０に追い出されないようにする。
【００３９】
なお、空cache管理回路１６３からＦＰＧＡキャッシュ１５−１へのアクセスは、キャ
ッシュコントローラ１５Ａ−１を介して実行される。すなわち、空cache管理回路１６３
は、キャッシュヒント、システムメモリ２０上のアドレス、およびデータを含むメモリリクエストをキャッシュコントローラ１５Ａ−１に送り、データをＦＰＧＡキャッシュ１５−１に書き込む。また、空cache管理回路１６３は、メモリリクエストの１つとして、ク
エリをキャッシュコントローラ１５Ａ−１に送り、レスポンス（空き領域の個数）を取得する。
【００４０】
なお、例えば、ＦＰＧＡキャッシュ１５−１がフルアソシアティブ方式の場合には、空cache管理回路１６３は、キャッシュコントローラ１５Ａ−１からＦＰＧＡキャッシュ１
５−１全体の空き領域の個数を取得する。また、ＦＰＧＡキャッシュ１５−１がセットアソシアティブ方式の場合には、空cache管理回路１６３は、キャッシュコントローラ１５
Ａ−１から、アドレスで特定されるセットの空き領域の個数を取得する。なお、ＦＰＧＡキャッシュ１５−１の空き領域となる、データ入替のための単位領域は、キャッシュライン、あるいはキャッシュブロックと呼ばれる。
【００４１】
図５は、受信回路１７の詳細構成を例示する図である。ただし、図５では、受信側のＦＰＧＡ演算回路１４−２および受信側のＦＰＧＡキャッシュ１５−２、キャッシュコントローラ１５Ａ−２も併せて記載されている。図５のように、受信回路１７は、受信側のＦＰＧＡ演算回路１４−２と受信側のキャッシュコントローラ１５Ａ−２との間に介在する。そして、受信回路１７は、受信側のキャッシュコントローラ１５Ａ−２およびＦＰＧＡキャッシュ１５−２を介して送信側のＦＰＧＡキャッシュ１５−１から転送データを取得する。
【００４２】
受信回路１７は、受信回路制御回路１７１と、転送領域ポーリング回路１７２と、アドレスレジスタ１７４と、転送サイズレジスタ１７６と、転送フラグレジスタ１７７を有している。
【００４３】
なお、ＣＰＵ１１は、ＦＰＧＡキャッシュ１５−２を介さずに、ＱＰＩ等の伝送路を通じて受信回路１７のアドレスレジスタ１７４、転送サイズレジスタ１７６、転送フラグレジスタ１７７、およびＦＰＧＡ演算回路１４−２にデータを書き込むことが可能である。したがって、ＣＰＵ１１は、ＣＰＵ１１で実行されるアプリケーションに応じて、受信回路１７およびＦＰＧＡ演算回路１４−２を制御できる。
【００４４】
受信回路制御回路１７１は、状態を保持するレジスタと入力信号にしたがって状態を遷移し、あるいは、制御信号を生成する論理回路を有し、ステートマシンとして動作するディジタル回路である。ただし、受信回路制御回路１７１は、ＲＯＭ等に格納されたファームウェアにしたがって処理を実行するプロセッサであってもよい。受信回路制御回路１７１は、例えば、ステートマシンの動作にしたがって受信回路１７の各部を制御する。
【００４５】
転送領域ポーリング回路１７２は、受信側のＦＰＧＡキャッシュ１５−２を介して送信側のＦＰＧＡキャッシュ１５−１から転送データを取得する。転送領域ポーリング回路１７２は、アドレスレジスタ１７４に設定されたアドレスを基に、受信側のＦＰＧＡキャッシュ１５−２にアクセスし、データを取得する。より具体的には、転送領域ポーリング回路１７２は、キャッシュコントローラ１５Ａ−２に、アドレスを指定したメモリリクエスト（図５のaddressおよびdata）を送る。そして、転送領域ポーリング回路１７２は、キ
ャッシュコントローラ１５Ａ−２からメモリリクエストに対応するメモリレスポンスを取得する。メモリレスポンスは、受信側のＦＰＧＡキャッシュ１５−２からのデータとキャッシュヒントを含む。ただし、キャッシュヒントがキャッシュミスを示す場合には、上記メモリリクエストによってデータが取得できなかったことを示す。そこで、キャッシュヒントがキャッシュミスを示す場合には、転送領域ポーリング回路１７２は、再度キャッシュコントローラ１５Ａ−２にメモリリクエストを送り、リトライする。キャッシュヒントがキャッシュミスでない場合には、転送領域ポーリング回路１７２は、キャッシュコントローラ１５Ａ−２からのメモリレスポンス（データとキャッシュヒント）をＦＰＧＡ演算回路１４−２に引き渡す。転送領域ポーリング回路１７２は第２のキャッシュメモリを介して送信データを読み出す手段の一例である。
【００４６】
アドレスレジスタ１７４は、ＣＰＵ１１がシステムメモリ２０上に確保した転送領域の先頭アドレスをＣＰＵ１１から書き込まれ、保持する。転送サイズレジスタ１７６および転送フラグレジスタ１７７は、それぞれ、データ転送サイズおよび転送フラグをＣＰＵ１１から書き込まれ、保持する。ただし、ＣＰＵ１１に代えて、受信回路制御回路１７１が、例えば、キャッシュコントローラ１５Ａ−２およびＦＰＧＡキャッシュ１５−２を介して、システムメモリ２０上のデータ転送サイズおよび転送フラグが格納されているアドレスをポーリングしてもよい。
【００４７】
以下、図５の受信回路制御回路１７１による処理手順を例示する。例えば、受信回路制御回路１７１は、ＣＰＵ１１−１から、システムメモリ２０に確保された転送領域の先頭アドレスがアドレスレジスタ１６４に書き込まれ、ＯＮの転送フラグが転送フラグレジスタ１７７に書き込まれると、転送データ受信処理を開始する。すなわち、受信回路制御回路１７１は、転送領域ポーリング回路１７２に処理の実行を指示する。ただし、受信回路制御回路１７１は、ＣＰＵ１１−１から転送領域の先頭アドレスがアドレスレジスタ１６４に書き込まれると、上述のようにシステムメモリ２０上の転送フラグをポーリングしてもよい。
【００４８】
転送領域ポーリング回路１７２は、受信側のキャッシュコントローラ１５Ａ−２にメモリリクエストを入力し、メモリキャッシュミスの場合にはメモリリクエストをリトライする。そして、転送領域ポーリング回路１７２は、キャッシュコントローラ１５Ａ−２を介して、ＦＰＧＡキャッシュ１５−２から正常にデータを取得できると、ＦＰＧＡ演算回路１４−２に引き渡す。
【００４９】
図６は、図４の空cache管理回路１６３の詳細構成を例示する図である。図６では、空cache管理回路１６３とともに送信回路制御回路１６１およびアドレスレジスタ１６４も併せて記載されている。空cache管理回路１６３は、クエリ（query）回路１６３１と判定処理回路１６３２を有する。クエリ回路１６３１は、送信回路制御回路１６１からの指示にしたがって、キャッシュコントローラ１５Ａ−１にクエリを送り、ＦＰＧＡキャッシュ１５−１の空き領域数（invalid(I)の状態にあるキャッシュブロック数。キャッシュライン数）を取得する。
【００５０】
判定処理回路１６３２は、送信回路制御回路１６１からの指示にしたがって、ＦＰＧＡキャッシュ１５−１に書き込まれるデータが転送データか否かを判定する。転送データか否かの判定は、送信回路制御回路１６１がＦＰＧＡ演算回路１４−１から転送要求を受けたときから、その転送要求に対するデータ転送を完了するまでの間（転送中という）において実施すればよい。すなわち、転送中以外は、判定処理回路１６３２は、ＦＰＧＡ演算回路１４−１からのキャッシュヒントをそのままキャッシュコントローラ１５Ａ−１に引き渡せばよい。
【００５１】
すなわち、判定処理回路１６３２は、アドレスレジスタ１６４のアドレスと、ＦＰＧＡ演算回路１４−１から引き渡されるアドレスを比較する。そして、ＦＰＧＡ演算回路１４−１から引き渡されるアドレスがシステムメモリ２０に確保した転送領域の先頭アドレスに一致するか、所定範囲に含まれる場合、ＦＰＧＡ演算回路１４−１から引き渡されるデータが受信回路１７に転送される転送データであると判定する。転送領域の先頭アドレスに一致するか、所定範囲に含まれるアドレスは、システムメモリ２０に確保した転送領域内のアドレスを意味する。一方、ＦＰＧＡ演算回路１４−１から引き渡されるアドレスがシステムメモリ２０に確保した転送領域外のアドレスである場合、ＦＰＧＡ演算回路１４−１から引き渡されるデータが受信回路１７に転送される転送データではないと判定する。
【００５２】
そして、判定処理回路１６３２は、状態が転送中であって、かつ、転送データと判定されたデータについては、キャッシュヒントをModified(M) に設定し、キャッシュコントローラ１５Ａ−１に引き渡す。すると、キャッシュコントローラ１５Ａ−１は、ＦＰＧＡ演算回路１４−１から出力されるデータをＦＰＧＡキャッシュ１５−１に書き込む。一方、判定処理回路１６３２は、転送中であって、かつ、転送データ以外のデータについては、キャッシュヒントをInvalid(I)に設定し、キャッシュコントローラ１５Ａ−１に引き渡す。すると、キャッシュコントローラ１５Ａ−１は、ＦＰＧＡ演算回路１４−１から出力されるデータをＦＰＧＡキャッシュ１５−１に書き込まないで、そのままシステムメモリ２
０に書き込む。以上の処理により、空cache管理回路１６３は、転送データをＦＰＧＡキ
ャッシュ１５−１に書き込むととともに、転送データ以外のデータによるＦＰＧＡキャッシュ１５−１の使用を抑止する。判定処理回路１６３２による処理は、第１の演算部および前記第２の演算部からアクセス可能なメモリ上で指定されるアドレスを基に、空き領域の存在が確認された後にキャッシュメモリに書き込まれるデータが送信データか否かを判定し、送信データ以外のデータによって第１のキャッシュメモリが使用されることを抑止することの一例である。
【００５３】
図７は、送信回路制御回路１６１の処理を例示するシーケンス図である。図７では、シーケンス図とともに、システムメモリ２０および受信回路１７も併せて記載されている。送信回路制御回路１６１は、初期状態（state 0）でアプリケーションプログラムを実行
するＣＰＵ１１から、システムメモリ２０上に確保された転送領域の先頭アドレスを受信するのを待つ。送信回路制御回路１６１は、転送領域の先頭アドレスを受信すると、state 1に移行する。なお、ＣＰＵ１１は、送信回路制御回路１６１とともに、ＦＰＧＡ演算
回路１４−１内のレジスタにも、転送領域の先頭アドレスを引き渡す。ＦＰＧＡ演算回路１４−１は、ＦＰＧＡ演算回路１４−１に転送する転送データに対して、転送領域のアドレスを指定してメモリリクエストを発行する。
【００５４】
送信回路制御回路１６１は、state 1でＦＰＧＡ演算回路１４−１から転送要求ととも
に転送サイズを受信するのを待つ。送信回路制御回路１６１は、転送サイズを受信すると、state 2に移行する。送信回路制御回路１６１でのstate 1の処理は、送信データのデータ量を取得することの一例である。
【００５５】
送信回路制御回路１６１は、state 2で、システムメモリ２０の所定アドレスに転送サ
イズを書き込む。転送サイズは、例えば、アプリケーションプログラムを実行するＣＰＵ１１によってシステムメモリ２０から読み出され、受信回路１７の転送サイズレジスタ１７６に書き込まれる。ただし、受信回路１７の受信回路制御回路１７１がシステムメモリの所定アドレスをポーリングして、転送サイズを取得し、転送サイズレジスタ１７６に書き込んでもよい。送信回路制御回路１６１は、システムメモリ２０の所定アドレスに転送サイズを書き込むと、state 3に移行する。
【００５６】
送信回路制御回路１６１は、state 3で、空cache管理回路１６３により、ＦＰＧＡキャッシュ１５−１の空き容量を確認する。すなわち、空cache管理回路１６３は、送信回路
制御回路１６１からの指示にしたがってキャッシュコントローラ１５Ａ−１にクエリを送り、空き容量を取得する。送信回路制御回路１６１は、空cache管理回路１６３により、
空き容量を取得すると、state 4に移行する。送信回路制御回路１６１でのstate 3の処理は、空き領域の有無を繰り返し確認することの一例である。
【００５７】
送信回路制御回路１６１は、state 3で空き容量を取得すると、state 4で転送フラグをＯＮにする。転送フラグをＯＮにする処理は、state 3で空き容量が初めて取得されたと
きに一度だけ実行されてもよいし、state 3で空き容量が取得される度に繰り返し実行さ
れてもよい。さらに、送信回路制御回路１６１は、ＦＰＧＡ演算回路１４−１から転送サイズ分の転送データを取得する。そして、送信回路制御回路１６１は、空cache管理回路
１６３を介して、ＦＰＧＡキャッシュ１５−１の空き容量分の転送データをＦＰＧＡキャッシュ１５−１に書き込む。このとき、空cache管理回路１６３は、ＦＰＧＡキャッシュ
１５−１に書き込まれたデータのキャッシュヒントをModified(M)に設定する。ＦＰＧＡ
キャッシュ１５−１でModified(M)の状態が設定されたデータは、受信側のＦＰＧＡキャ
ッシュ１５−２に読み出されるときに、キャッシュコントローラ１５Ａ−１によるImplicit Write Backにより処理される。すなわち、Modified(M)のデータは、上記読み出し時にシステムメモリ２０の転送領域に書き込まれるととともに、ＦＰＧＡキャッシュ１５−１
の転送領域に対応する領域は、Invalidとなり、空き領域となる。送信回路制御回路１６
１でのstate 3に続いて実行されるstate 4の処理は、空き領域があることが確認されたときに、書き込む手段によって前記空き領域の容量分の送信データを書き込む処理の一例である。システムメモリ２０への書き込みは、ＦＰＧＡキャッシュ１５−１を介して実施される。したがって、送信回路制御回路１６１がstate 2でシステムメモリ２０の所定アド
レスに転送フラグを書き込むことは、第１のキャッシュメモリを介して前記メモリに前記送信開始を示す情報を書き込むことの一例であるといえる。Implicit Write Backを実行
するキャッシュコントローラ１５Ａ−１は、空き領域に書き込まれた送信データが第２のキャッシュメモリを介して読み出す手段によって読み出されるときに、送信データが書き込まれた領域を空き領域に設定するキャッシュ制御手段の一例である。
【００５８】
そして、送信回路制御回路１６１は、転送サイズ分の転送データのＦＰＧＡキャッシュ１５−１への書き込みが完了したか否かを判定する。転送サイズ分の転送データのＦＰＧＡキャッシュ１５−１への書き込みが完了していない場合、送信回路制御回路１６１は、state 3に移行する。なお、state 3では、送信回路制御回路１６１は、受信回路１７によって、受信回路側のＦＰＧＡキャッシュ１５−２を介して、転送データが読まれるのを待つ。転送データが読まれると、送信回路側のＦＰＧＡキャッシュ１５−１での転送データが格納されていた領域は、キャッシュコントローラ１５Ａ−１によるImplicit Write Backにより、Invalidとなり、空き領域となる。このようにして、送信回路制御回路１６１は、残りデータをすべてＦＰＧＡキャッシュ１５−１の空き領域に書き込むまで、state 3
とstate 4との間を遷移する。
【００５９】
以上のように、ＦＰＧＡキャッシュ１５−１とＦＰＧＡキャッシュ１５−２との間のデータの授受は、キャッシュのコヒーレンシを維持するプロトコルにしたがって、システムメモリ２０を介さずに実行される。すなわち、キャッシュコントローラ１５Ａ−１と、キャッシュコントローラ１５Ａ−２とが図３に例示したＱＰＩ等の伝送路を通じて転送データを授受する。また、上述のように、ＦＰＧＡキャッシュ１５−１でModified(M)の状態
にある転送データがＦＰＧＡキャッシュ１５−２に引き渡されたときに、キャッシュコントローラ１５Ａ−１がImplicit Write Backを実行する。Implicit Write Backでは、キャッシュコントローラ１５Ａ−１は、ＦＰＧＡキャッシュ１５−１上の転送データの領域（キャッシュライン、キャッシュブロック）をInvalidとし、転送データをシステムメモリ
２０に保存する。
【００６０】
一方、送信回路制御回路１６１は、state 4で転送サイズ分の転送データのＦＰＧＡキ
ャッシュ１５−１への書き込みが完了すると、state 5へ移行する。送信回路制御回路１
６１は、state 5で、システムメモリ２０上の所定アドレスの転送サイズおよび転送フラ
グを初期化し、state 1に戻る。以上のstate 1からstate5の状態遷移による送信回路制御回路１６１の処理は、ＣＰＵ１１の１つのアプリケーションが終了するまで継続する。
【００６１】
図８は、図７に対応する受信回路制御回路１７１の処理を例示するシーケンス図である。図７では、シーケンス図とともに、システムメモリ２０および送信回路１６も併せて記載されている。受信回路制御回路１７１は、初期状態（state 0）でアプリケーションプ
ログラムを実行するＣＰＵ１１から、システムメモリ２０上に確保された転送領域の先頭アドレスを受信するのを待つ。受信回路制御回路１７１は、転送領域の先頭アドレスを受信すると、state 1に移行する。
【００６２】
受信回路制御回路１７１は、state 1で、ＣＰＵ１１により、転送サイズが転送サイズ
レジスタ１７６に書き込まれるのを待つ。ただし、ＣＰＵ１１に代えて、受信回路制御回路１７１が、例えば、キャッシュコントローラ１５Ａ−２およびＦＰＧＡキャッシュ１５−２を介して、システムメモリ２０上の所定アドレスをポーリングし、転送サイズを取得
してもよい。そして、受信回路制御回路１７１は、取得した転送サイズを転送サイズレジスタ１７６に書き込めばよい。転送サイズが転送サイズレジスタ１７６に書き込まれると、受信回路制御回路１７１は、state 2に移行する。
【００６３】
受信回路制御回路１７１は、state 2で、ＣＰＵ１１により、ＯＮの転送フラグが転送
フラグレジスタ１７７に書き込まれるのを待つ。ただし、ＣＰＵ１１に代えて、受信回路制御回路１７１が転送サイズと同様に、システムメモリ２０の所定アドレスをポーリングし、ＯＮの転送フラグを取得してもよい。そして、受信回路制御回路１７１は、取得したＯＮの転送フラグを転送フラグレジスタ１７７に書き込めばよい。ＯＮの転送フラグが転送フラグレジスタ１７７に書き込まれると、受信回路制御回路１７１は、state 3に移行
する。受信回路制御回路１７１は、第２のキャッシュメモリを介して前記メモリから前記送信開始を示す情報を読み出す手段の一例として、state 2でシステムメモリ２０の所定
アドレスをポーリングし、ＯＮの転送フラグを取得する。また、ＣＰＵ１１がstate 2で
システムメモリ２０の所定アドレスをポーリングし、ＯＮの転送フラグを取得することは、メモリから前記処理の開始を示す情報を読み出し、伝送路を通じて第４の演算回路に引き渡すことの一例である。
【００６４】
受信回路制御回路１７１は、state 3で、転送領域ポーリング回路１７２により、受信
側のＦＰＧＡキャッシュ１５−２を介して転送領域をポーリングする。転送領域ポーリング回路１７２によるポーリングは、転送領域のデータがＦＰＧＡキャッシュ１５−２でヒットするまで繰り返される。転送領域のデータがＦＰＧＡキャッシュ１５−２でヒットすると、受信回路制御回路１７１は、state 4に移行する。受信回路制御回路１７１および
転送領域ポーリング回路１７２によるstate 3の処理は、メモリ上で指定されるアドレス
に基づく第２のキャッシュメモリからのデータの読み出しがキャッシュミスとなった場合に、第２のキャッシュメモリからのデータの読み出しを再度実行することの一例である。
【００６５】
受信回路制御回路１７１は、state 4で、ＦＰＧＡキャッシュ１５−２でヒットした転
送データをＦＰＧＡ演算回路１４−２に転送する。このとき、受信回路制御回路１７１は、ＦＰＧＡ演算回路１４−２に転送したデータ量を積算する。また、受信回路制御回路１７１は、ＦＰＧＡ演算回路１４−２に転送したデータ量だけ、ポーリングするアドレスを増分する。増分されたアドレスはアドレスレジスタ１７４に保持すればよい。そして、受信回路制御回路１７１は、ＦＰＧＡ演算回路１４−２に転送したデータ量が転送サイズレジスタ１７６の転送サイズに達したか否かを判定する。ＦＰＧＡ演算回路１４−２に転送したデータ量が転送サイズレジスタ１７６の転送サイズに達していない場合、受信回路制御回路１７１は、state 3に戻る。一方、ＦＰＧＡ演算回路１４−２に転送したデータ量
が転送サイズレジスタ１７６の転送サイズに達した場合、受信回路制御回路１７１は、state 5に移行する。送信回路制御回路１６１は、state 5で、転送サイズレジスタ１７６および転送フラグレジスタ１７７を初期化し、state 1に戻る。
【００６６】
図９は、送信側のＦＰＧＡ演算回路１４−１から受信側のＦＰＧＡ演算回路１４−２へのデータ転送時のデータフローを例示する図である。図９は、図７および図８に例示したシーケンスによる処理をデータフローにしたがって説明する図ということもできる。
【００６７】
本実施形態では、情報処理装置１００のＣＰＵ１１がアプリケーションプログラムを実行するときに、ＦＰＧＡ演算回路１４−１、１４−２と連携して処理を実行する。すでに説明したように、情報処理装置１００では、ＦＰＧＡ演算回路１４−１から１４−２へのデータ転送によるメモリバス帯域の消費が抑制され、情報処理装置１００の処理が効率的に実行される。
【００６８】
ＣＰＵ１１は、初回のＦＰＧＡ演算回路１４−１から１４−２へのデータ転送時に、シ
ステムメモリ２０に、転送されるデータの最大データサイズに対応する転送領域を確保すする（Ａ１）。そして、ＣＰＵ１１は、図４、図５に例示したＱＰＩ等の伝送路を介して、送信回路１６のアドレスレジスタ１６４、ＦＰＧＡ演算回路１４−１の所定のレジスタ、および受信回路１７のアドレスレジスタ１７４に、確保した転送領域の先頭アドレスを書き込む。
【００６９】
次に、送信側のＦＰＧＡ演算回路１４−１は、転送したいデータのデータ量（転送サイズという）を送信回路制御回路１６１に通知する（Ａ２）。すると、送信回路制御回路１６１は、空cache管理回路１６３に指示し、送信側のＦＰＧＡキャッシュ１５−１の空き
容量を確保させる（Ａ３）。ここで、空cache管理回路１６３は、送信回路制御回路１６
１からの指示にしたがって、キャッシュコントローラ１５Ａ−１からＦＰＧＡキャッシュ１５−１の空き容量を示す、キャッシュヒントがInvalid(I)の領域の数を取得する。ここで、領域の数は、キャッシュブロック数、あるいは、キャッシュライン数と呼ばれるものである。そして、空cache管理回路１６３は、以後転送が完了まで他のメモリトランザク
ションにおいては、キャッシュヒントがInvalid(I)でキャッシュコントローラ１５Ａ−１に指定されるように制御する。この制御により、空cache管理回路１６３は、ＦＰＧＡキ
ャッシュ１５−１からのシステムメモリ２０への転送データの追い出しの発生を抑止する。
【００７０】
図１０は、ＣＰＵ１１がシステムメモリ２０に転送領域を確保可能な状態を例示する。図１０では、ＦＰＧＡキャッシュ１５−１の空き領域数を計数するカウンタも例示されている。ただし、図１０では、ＣＰＵ１１−２、キャッシュコントローラ１５Ａ−１、１５Ａ−２等は省略されている。
【００７１】
図１０では、システムメモリ２０上に、転送領域（１−＞２）および転送領域（２−＞１）がＣＰＵ１１によって確保されている。転送領域（１−＞２）は、ＦＰＧＡ演算回路１４−１からＦＰＧＡ演算回路１４−２へ転送される転送データのための転送領域である。また、転送領域（２−＞１）は、ＦＰＧＡ演算回路１４−２からＦＰＧＡ演算回路１４−１へ転送される転送データのための転送領域である。転送領域（１−＞２）の先頭アドレスは、addr1であり、addr4までの領域が確保されている。転送領域（１−＞２）の先頭アドレスは、ＣＰＵ１１によって、送信回路１６内のアドレスレジスタ１６４および受信回路１７内のアドレスレジスタ１７４に書き込まれている。図１０でＣＰＵ１１−１が送信回路１６のアドレスレジスタ１６４および受信回路１７のアドレスレジスタ１７４に書き込む伝送路は、ＱＰＩを介してキャッシュのコヒーレンシを維持する制御にしたがってメモリマップド方式で情報が授受されるものでもよい。また、上記伝送路は、キャッシュのコヒーレンシを維持する制御とは別に、ＱＰＩを介してメモリマップド方式で情報が授受されるものでもよい。また、上記伝送路は、ＱＰＩとは別の経路で、システムメモリ２０のアドレス空間とは独立のアドレス空間を用いてダイレクト方式で情報が授受されるものでもよい。なお、すでに述べたように、転送領域のアドレスは、ＦＰＧＡ演算回路１４−１の所定のレジスタにも書き込まれる。
【００７２】
転送領域（１−＞２）に付随する所定アドレスには、転送サイズと転送フラグを保持する領域が確保されている。転送サイズの初期値は０であり、転送フラグの初期値はＯＦＦである。したがって、受信回路１７の転送サイズレジスタ１７６には初期値０がセットされ、転送フラグレジスタには初期値ＯＦＦがセットされている。
【００７３】
ＦＰＧＡキャッシュ１５−１には、キャッシュコントローラ１５Ａ−１によって管理されるカウンタ１５Ｂ−１が設けられている。カウンタ１５Ｂ−１は、Invalid(I), Modified(M), Exclusive(E), Share(S)に設定されているＦＰＧＡキャッシュ１５−１内の領域
数が保持される。送信回路１６は、キャッシュコントローラ１５Ａ−１から、これらのカ
ウンタ値を問い合わせて取得することが可能である。送信回路１６は、Invalid(I)の数から、ＦＰＧＡキャッシュ１５−１の空き容量（空きキャッシュブロック数、空きキャッシュライン数）を認識する。
【００７４】
図１１は、送信側のＦＰＧＡ演算回路１４−１が転送したいデータのデータ量である転送サイズを送信回路に通知する処理例である。この例では、転送サイズ（例えば、３個）が通知されている。送信回路１６は、転送サイズをシステムメモリ２０の所定アドレスに書き込む。書き込まれた転送サイズは、ＣＰＵ１１によって受信回路１７の転送サイズレジスタ１７６に書き込まれる。ただし、すでに述べたように、受信回路制御回路１７１がシステムメモリ２０上の転送サイズをポーリングして取得してもよい。また、図１１の時点で、転送フラグはまだＯＦＦのままであり、ＦＰＧＡキャッシュ１５−１に確保された空き領域にも転送データが書き込まれていない。図１２は、ＦＰＧＡ演算回路１４−１からの転送サイズの通知に対して、ＦＰＧＡキャッシュ１５−１に、データ２個分に相当する空き容量が確保された状態を例示する。
【００７５】
図９に戻ってデータフローの説明を継続する。送信回路制御回路１６１は転送データをＦＰＧＡ演算回路１４−１から取得し、ＦＰＧＡキャッシュ１５−１に空き容量分書き込む（Ａ４）。書き込み先となるシステムメモリ２０上のアドレスは転送領域の先頭から加算していく。ただし、Ａ４の処理では、システムメモリ２０への書き込みは発生させない。さらに、送信回路制御回路１６１はシステムメモリ２０およびＣＰＵ１１を通じて受信回路制御回路１７１に転送開始を示すＯＮに設定された転送フラグを通知する。ただし、すでに述べたように、受信回路制御回路１７１がシステムメモリ２０上のＯＮに設定された転送フラグをポーリングして取得してもよい。送信回路制御回路１６１は、以後、転送データ量が転送サイズに達する転送完了まで、Ａ３およびＡ４の処理を繰り返す。
【００７６】
受信回路制御回路１７１は、転送領域ポーリング回路１７２により、転送領域の先頭アドレスから読み出しを実行する。転送領域ポーリング回路１７２は、読み出しにおいてＦＰＧＡキャッシュ１５−２でキャッシュミスの結果を受けると、まだデータが書き込まれていないと判定し、データを廃棄、再度同じアドレスから読み出しを実行する（Ａ５）。
【００７７】
送信回路制御回路１６１は転送領域のアドレスに対応するＦＰＧＡキャッシュ１５−１の領域から転送データが読み出され、データが読み出された領域がInvalidateされたことで転送完了を認識し、次の転送まで待つ（Ａ６１）。受信回路制御回路１７１はＡ４で書き込まれた転送データを読み出し、ＦＰＧＡ演算回路１４−２に引き渡し、次の転送まで待つ（Ａ６２）。
【００７８】
図１３は、ＦＰＧＡキャッシュ１５−１に確保された空き領域に、転送サイズ（３個の転送データ）のうちの２個分の転送データが書き込まれた状態を例示する。ＦＰＧＡキャッシュ１５−１に書き込まれた２個の転送データは、いずれもModified(M)に設定される
。以降、送信回路１６は、メモリトランザクションでのキャッシュヒントがInvalid(I)になるように、空cache管理回路１６３に、キャッシュヒントの出力を制御させる。したが
って、ＦＰＧＡキャッシュ１５−１に書き込まれた２個の転送データは、受信回路１７からの読み出しが完了するまで、ＦＰＧＡキャッシュ１５−１からシステムメモリ２０に追い出されることなく、維持される。また、このとき、送信回路１６は、システムメモリ２０の所定領域に、ＯＮの転送フラグを設定する。すると、ＣＰＵ１１は、システムメモリ２０の転送フラグを読み出し、受信回路１７の転送フラグレジスタ１７７をＯＮに設定する。
【００７９】
図１４は、受信回路１７のポーリング処理を例示する。図１３のように、受信回路１７の転送フラグレジスタ１７７がＯＮに設定されると、受信回路１７は、図５に例示した転
送領域ポーリング回路１７２により、転送データの読み出しを開始する。すなわち、受信回路１７は、受信側のキャッシュコントローラ１５Ａ−２を介して、システムメモリ２０上に定義された転送領域の先頭アドレスを基にＦＰＧＡキャッシュ１５−２から読み出しを開始する。
【００８０】
受信側のＦＰＧＡキャッシュ１５−２（キャッシュコントローラ１５Ａ−２）は、ＱＰＩで例示される伝送路をスヌープし、例えば、送信側のＦＰＧＡキャッシュ１５−１にModified(M)の状態に設定された転送データを取得する。すなわち、受信回路１７（転送領
域ポーリング回路１７２）は、転送領域の先頭アドレス（addr1）をポーリングし、キャ
ッシュヒットの結果として、転送データ(Data1)を取得する。さらに、受信回路１７は、
転送領域のアドレスをカウントアップし、アドレス（add2）をポーリングし、キャッシュヒットの結果として、データ(Data2)を取得する。このようにして、ＦＰＧＡキャッシュ
１５−２がＦＰＧＡキャッシュ１５−１からModified(M)のData1, Data2を取得する。す
ると、ＦＰＧＡキャッシュ１５−１（キャッシュコントローラ１５Ａ−１）は、ＦＰＧＡキャッシュ１５−１上の転送データをシステムメモリ２０にImplicit Write Backによっ
て書き戻す。ＦＰＧＡキャッシュ１５−１は、この書き戻しとともに、ＦＰＧＡキャッシュ１５−１上の転送データをInvalid(I)とし、空き容量とする。
【００８１】
さらに、受信回路１７（転送領域ポーリング回路１７２）は、転送領域のアドレスをカウントアップし、アドレス（add3）をポーリングし、キャッシュミスの結果を取得する。したがって、受信回路１７は、転送サイズ（３個）のうち、３個目のデータが、まだＦＰＧＡキャッシュ１５−１に書き込まれていないことを認識する。そこで、受信回路１７（転送領域ポーリング回路１７２）は、転送領域の次のアドレス（addr3）へのポーリング
を繰り返す。
【００８２】
図１５は、受信回路１７（転送領域ポーリング回路１７２）が受信側のＦＰＧＡキャッシュ１５−２へのポーリングを繰り返して、転送サイズ（３個）のうちの最後の転送データを取得した状態を例示する。これによって、転送サイズ分（３個）の転送データがＦＰＧＡ演算回路１４−１からＦＰＧＡ演算回路１４−２に転送される。また、システムメモリ２０の転送領域（addr1から3）には、Implicit Write Backによって転送データが保存
される。さらに、送信側のＦＰＧＡキャッシュ１５−１では、１つの転送データがModified(M)で例示されているが、Implicit Write Back完了後、Invalid(I)とされ、転送データの領域は空き領域となる。この後、システムメモリ２０上の転送サイズおよび転送フラグはクリアされる。また、受信回路１７の転送サイズレジスタ１７６および転送フラグレジスタ１７７もクリアされ、図１０の状態に復帰する。
＜実施形態１の効果＞
【００８３】
以上述べたように、実施形態１によれば、ＦＰＧＡ演算回路１４−１は、送信回路１６により、受信回路１７を介してＦＰＧＡ演算回路１４−２にデータを転送できる。実施形態１の処理では、ＣＰＵ１１は、データ転送の初回に、システムメモリ２０に転送データの最大サイズでの転送領域を確保する。ただし、システムメモリ２０の転送領域は、ＦＰＧＡキャッシュ１５−１でModified(M)の転送データがＦＰＧＡキャッシュ１５−２から
スヌープにより読み出されたときにImplicit Write Backで保存されるだけである。した
がって、データ転送に伴うシステムメモリ２０の転送領域へのアクセスは、各アドレスともにImplicit Write Back時の１回に限定される可能性が高い。したがって、比較例のよ
うに、ＦＰＧＡキャッシュ１５−１からＦＰＧＡキャッシュ１５−２にシステムメモリ２０を介してデータ転送する場合と比較して、メモリ帯域の消費は少なくとも約半分まで低減されると期待できる。したがって、実施形態１の情報処理装置１００では、システムメモリ２０のメモリバスの帯域の消費を抑制して、ＦＰＧＡキャッシュ１５−１からＦＰＧＡキャッシュ１５−２へのデータ転送が可能となる。
【００８４】
上述のように、空cache管理回路１６３は、キャッシュコントローラ１５Ａ−１から、
ＦＰＧＡキャッシュ１５−１上でInvalid(I)の状態の領域数（キャッシュブロック数、キャッシュライン数）を基に空き容量を取得する。そして、空cache管理回路１６３は、Ｆ
ＰＧＡ演算回路１４−１からのデータがＦＰＧＡ演算回路１４−２への転送データか否かを、データのシステムメモリ２０上のアドレスを基に判定する。空cache管理回路１６３
は、上記判定により、転送データについては、ＦＰＧＡキャッシュ１５−１の空き容量に書き込む。一方、ＦＰＧＡ演算回路１４−１からのデータがＦＰＧＡ演算回路１４−２への転送データ以外である場合のメモリトランザクションについては、送信回路１６は、データ転送完了まで、キャッシュヒントをInvalid(I)に制御する。この制御により、送信回路１６は、ＦＰＧＡキャッシュ１５−１からシステムメモリ２０への転送データの追い出しを抑止する。以上のように、送信回路１６は、ＦＰＧＡキャッシュ１５−１の空き領域を活用し、メモリ帯域の消費を抑止して、ＦＰＧＡキャッシュ１５−１からＦＰＧＡキャッシュ１５−２へデータを転送できる。また、送信回路１６は、メモリリクエストのアドレスを基にデータが転送データか否かを正確に判定できる。
【００８５】
また、空cache管理回路１６３は、一旦ＦＰＧＡキャッシュ１５−１の空き領域のすべ
てに転送データを書き込むと、Implicit Write Backにより、ＦＰＧＡキャッシュ１５−
１の転送データがクリアされるのを待つ。そして、空cache管理回路１６３は、転送デー
タがクリアされた後、残りの転送データを空き領域分だけＦＰＧＡキャッシュ１５−１に書き込む。したがって、空cache管理回路１６３は、ＦＰＧＡキャッシュ１５−１の空き
領域を用いて、システムメモリ２０のメモリ帯域の消費を抑止して、ＦＰＧＡキャッシュ１５−１からＦＰＧＡキャッシュ１５−２へデータを転送できる。
【００８６】
また、実施形態１では、空cache管理回路１６３は、キャッシュコントローラ１５Ａ−
２によるImplicit Write Backにより、ＦＰＧＡキャッシュ１５−１に保持された転送デ
ータがクリアされるのを待つ。このため、情報処理装置１００は、既存のキャッシュコヒーレンシ維持のためのプロトコルを利用し、簡易な制御を実現できる。
【００８７】
さらに、実施形態１では、受信側の転送領域ポーリング回路１７２は、ＦＰＧＡキャッシュ１５−２に、転送領域の先頭アドレスをカウントアップしながらアクセスする。そして、転送領域ポーリング回路１７２は、キャッシュミスの結果を受けた場合には、まだ、ＦＰＧＡキャッシュ１５−１に転送データが書き込まれていないものとして、再度ＦＰＧＡキャッシュ１５−２にアクセスする。したがって、情報処理装置１００は、既存のキャッシュのコヒーレンシ維持のためのプロトコルを利用し、簡易な制御を実現できる。
【００８８】
実施形態１では、送信回路１６は、転送サイズと転送フラグをシステムメモリ２０の所定アドレスを用いて、受信回路１７に引き渡す。すなわち、送信回路１６は、転送サイズが増大しやすい転送データを、極力システムメモリ２０を使用しないで、ＦＰＧＡキャッシュ１５−１からＦＰＧＡキャッシュ１５−２へ転送する。一方、送信回路１６は、転送サイズと転送フラグ等の管理情報については、システムメモリ２０を介して、簡易に受信回路１７への引き渡しを実現できる。
【００８９】
複数のＣＰＵ１１は、ＱＰＩ等の伝送路を通じて、システムメモリ２０にアクセスできる。また、それぞれのＦＰＧＡ演算回路１４は、上記伝送路を通じてシステムメモリ２０にアクセスできる。実施形態１の手順によれば、複数のＣＰＵ１１で実行されるアプリケーションの形態によらず、送信回路１６は、転送サイズと転送フラグ等の管理情報をＣＰＵ１１に引き渡すことができる。
【００９０】
また、実施形態１では、初回転送時のシステムメモリ２０の転送領域の確保、転送サイ
ズの設定は、ＣＰＵ１１によって行われる。したがって、実施形態１によれば、ＣＰＵ１１で実行されるアプリケーションプログラムに適合したデータ転送、個々のアプリケーションプログラムに特化したデータ転送を実行できる。
［実施形態２］
【００９１】
以下、図１６から図２６を参照して、実施形態２に係る情報処理装置１０１を説明する。上記実施形態１では、送信回路１６がＦＰＧＡキャッシュ１５−１の空き容量を取得し、転送データをＦＰＧＡキャッシュ１５−１に書き込み後、転送完了までの間、ＦＰＧＡキャッシュ１５−１からのデータの追い出し、すなわち、キャッシュラインのデータ入替を抑止した。このような制御によって、情報処理装置１００は、情報処理装置１００のメモリ帯域の消費を抑制し、ＦＰＧＡ演算回路１４−１からＦＰＧＡ演算回路１４−２へデータを転送するとともに、メモリ帯域の消費に伴うシステム性能低下の可能性を低減した。
【００９２】
実施形態２の情報処理装置１０１は、送信回路１６がＦＰＧＡキャッシュ１５−１の空き容量を取得できない構成の場合に、実施形態１と同様に、メモリ帯域の消費を抑制し、ＦＰＧＡ演算回路１４−１からＦＰＧＡ演算回路１４−２へデータを転送する。送信回路１６がＦＰＧＡキャッシュ１５−１の空き容量を取得できない点以外では、実施形態２の構成要素は、実施形態１の構成要素と同様である。そこで、実施形態２の構成要素のうち、実施形態１と同一の構成要素については、実施形態１と同一の符合を付してその説明を省略する。
【００９３】
図１６は、情報処理装置１０１のうち、送信回路１６の構成およびデータフローを例示する図である。図１６のように、送信回路１６は、送信回路制御回路１６１と、転送フラグ転送サイズ書込回路１６２とcache管理回路１６３Ａと、アドレスレジスタ１６４と、
送信First IN First Out(FIFO)１６５と、転送サイズレジスタ１６６を有している。
【００９４】
これらのうち、送信回路制御回路１６１と、転送フラグ転送サイズ書込回路１６２およびアドレスレジスタ１６４の構成および作用は実施形態１と同様であるのでその説明を省略する。cache管理回路１６３Ａは、送信側のキャッシュコントローラ１５Ａ−１から、
空き容量を取得できない点以外は、実施形態１の空cache管理回路１６３と同様の処理を
実行する。
【００９５】
すなわち、cache管理回路１６３Ａは、ＦＰＧＡキャッシュ１５−１上の空容量を特定
できない。そこで、cache管理回路１６３Ａおよび受信回路１７は、ともに、所定の空き
容量（例えば、Ｎ個分の空き領域）が確保されているものとして、処理を実行する。そして、cache管理回路１６３Ａは、ＦＰＧＡ演算回路１４−１からのデータ転送要求量を上
記Ｎ個分の空き領域の合計容量に区切って、ＦＰＧＡキャッシュ１５−１を介して、受信回路１７に転送する。
【００９６】
すなわち、cache管理回路１６３Ａは、転送データのうち、上記Ｎ個分の空き領域に相
当するデータ量だけＦＰＧＡキャッシュ１５−１に書き込む。このとき、仮にＦＰＧＡキャッシュ１５−１に空き容量がなかった場合には、その時点で例えば、最も古い（アクセスの少ない）データがＦＰＧＡキャッシュ１５−１から追い出されることになる。以降、空cache管理回路１６３は、データ転送が完了するまで、さらなるデータがＦＰＧＡキャ
ッシュ１５−１に書き込まれないようにする。
【００９７】
したがって、cache管理回路１６３Ａが最初にＦＰＧＡキャッシュ１５−１に転送デー
タを書き込むときには、ＦＰＧＡキャッシュ１５−１からの追い出し、およびシステムメモリ２０へのデータの保存が発生する可能性がある。しかし、一旦、所定の空き容量（例
えば、Ｎ個分の空き領域）に相当する転送データがＦＰＧＡキャッシュ１５−１に書き込まれと、書き込まれた転送データの転送が完了するまで、送信回路１６は、ＦＰＧＡキャッシュ１５−１へのデータの書き込みを抑止する。そして、送信回路１６は、ＦＰＧＡキャッシュ１５−１とＦＰＧＡキャッシュ１５−２との間でキャッシュコヒーレンシを維持するプロトコルにしたがって、受信側のＦＰＧＡ演算回路１４−２に転送データを引き渡す。
【００９８】
送信ＦＩＦＯ１６５は、送信側のＦＰＧＡ演算回路１４−１から転送要求のあった転送データを空き容量の単位で保持する。例えば、送信回路１６および受信回路１７がともに、所定の空き容量（例えば、Ｎ個分の空き領域）を想定してデータ転送処理を実行するものとする。すると、送信回路制御回路１６１は、送信側のＦＰＧＡ演算回路１４−１から転送要求のあった転送データをＮ個分の空き領域の合計容量に相当するデータサイズに区切り、送信ＦＩＦＯ１６５に格納する。例えば、転送データの転送サイズＭ＝Ｎ＊ｋ＋ｎ（ｎ＜Ｎ）とする。この場合には、送信回路制御回路１６１は、転送データをＮ個分の領域の合計容量に相当する容量に分け、ＦＩＦＯ１６５のｋ段の要素に格納し、最後の要素にｎ個分の転送データを格納する。そして、cache管理回路１６３Ａは、送信ＦＩＦＯ１
６５の転送データを順次ＦＰＧＡキャッシュ１５−１に書き込むことで、実施形態１と同様、システムメモリ２０のメモリ帯域の消費を抑制して、転送データを受信回路１７に引き渡す。
【００９９】
転送サイズレジスタ１６６は、現在転送中の転送データのデータ量を保持する。転送サイズＭ＝Ｎ＊ｋ＋ｎ（ｎ＜Ｎ）とし、Ｎ個の領域（キャッシュブロック、キャッシュライン）に相当するデータを転送中、転送サイズレジスタ１６６は、Ｎを保持する。また、最後のｎ個の領域（キャッシュブロック、キャッシュライン）に相当するデータを転送中、転送サイズレジスタ１６６は、ｎを保持する。なお、受信回路１７の構成は、実施形態１と同様である。そこで、実施形態２においても、受信回路１７の構成は、図５で例示されるものとして、その説明を省略する。
【０１００】
図１７は、実施形態２における送信回路制御回路１６１の処理を例示するシーケンス図である。図１７では、シーケンス図とともに、システムメモリ２０および受信回路１７も併せて記載されている。送信回路制御回路１６１は、初期状態（state 0）でアプリケー
ションプログラムを実行するＣＰＵ１１から、システムメモリ２０上に確保された転送領域の先頭アドレスを受信するのを待つ。送信回路制御回路１６１は、転送領域の先頭アドレスを受信すると、アドレスレジスタ１６４に転送領域を設定する。また、このとき、送信回路制御回路１６１は、ＦＰＧＡキャッシュ１５−１で想定する空き領域の大きさ（以下規定サイズという）をシステムメモリ２０の転送サイズに初期値として設定する。
【０１０１】
実施形態２においては、システムメモリ２０に設定される転送サイズは、ＦＰＧＡキャッシュ１５−１からＦＰＧＡキャッシュ１５−２に１回の転送で転送されるデータ量を意味する。また、実施形態２においては、ＦＰＧＡ演算回路１４−１から転送要求されるデータ量が上記規定サイズに区切られて、複数回のデータ転送が実行される。このため、state 0で設定される転送サイズは、データ転送の初期値ということもできる。システムメ
モリ２０の転送サイズは、実施形態１と同様の手順で受信回路１７の転送サイズレジスタ１７６に書き込まれる。そして、送信回路制御回路１６１は、state 1に移行する。
【０１０２】
送信回路制御回路１６１は、state 1でＦＰＧＡ演算回路１４−１から転送要求（メモ
リリクエストという）とともに転送要求量を受信するのを待つ。送信回路制御回路１６１は、転送要求量を受信すると、state 2に移行する。送信回路制御回路１６１は、state 2で、送信ＦＩＦＯ１６５に、ＦＰＧＡ演算回路１４−１からのメモリリクエストによる転送データを格納する。上述のように、送信ＦＩＦＯ１６５は、上記のように例えばＮ個分
の領域に相当する規定サイズに分割されている。そして、送信回路制御回路１６１は、state 3に移行する。
【０１０３】
送信回路制御回路１６１は、state 3で、送信ＦＩＦＯ１６５の転送対象段のデータ量
を転送サイズとして、システムメモリ２０の所定アドレスに書き込む。ここで、転送対象段とは、送信ＦＩＦＯ１６５に含まれる複数段の要素のうち、現在転送対象となっている要素をいう。ただし、転送対象段のデータ量が、転送サイズの初期値と一致する場合には、転送サイズの書き込みは不要である。システムメモリ２０上に書き込まれた転送サイズは、実施形態１と同様の手順で、受信回路１７の転送サイズレジスタ１７６に書き込まれる。そして、送信回路制御回路１６１は、state 4に移行する。送信回路制御回路１６１
は、送信データのデータ量を取得し、データ量の送信データを所定の書き込み量の単位で前記第１のキャッシュメモリを介して第２の演算部に転送する制御手段の一例として、state 3の処理を実行する。送信回路制御回路１６１は、第１のキャッシュメモリへの書き
込み量をメモリ上で指定することの一例としてstate 3の処理を実行する。
【０１０４】
送信回路制御回路１６１は、state 4で、cache管理回路１６３Ａを介して、ＦＰＧＡキャッシュ１５−１に規定サイズ分の転送データを書き込む。そして、cache管理回路１６
３Ａは、以降ＦＰＧＡキャッシュへの書込を抑止する。さらに、送信回路制御回路１６１は、送信ＦＩＦＯ１６５を次の段に進める。また、送信回路制御回路１６１は、システムメモリ２０の所定アドレスの転送フラグをＯＮで書き込む。システムメモリ２０上に書き込まれた転送フラグは、実施形態１と同様の手順で、受信回路１７の転送フラグレジスタ１７７に書き込まれる。そして、送信回路制御回路１６１は、state 5に移行する。送信
回路制御回路１６１は、書き込む手段によって第１のキャッシュメモリに送信データが書き込まれた後に、第１のキャッシュメモリの使用を抑止することの一例として、state 4 の処理を実行する。また、送信回路制御回路１６１は、第１のキャッシュメモリに書き込み量の送信データを第１のキャッシュメモリに書き込み、第１のキャッシュメモリの使用を抑止することの一例として、state 4の処理を実行する。
【０１０５】
送信回路１６のstate4の処理に対して、受信回路１７（転送領域ポーリング回路１７２）は、ＯＮの転送フラグが転送フラグレジスタ１７７に書き込まれると、アドレスレジスタ１７４に設定された転送領域の先頭アドレスを基にＦＰＧＡキャッシュ１５−２から転送データを読み出す。ＦＰＧＡキャッシュ１５−２で転送データがヒットすれば、転送データの読み出しが成功するので、アドレスを次ぎの領域に移動する。ＦＰＧＡキャッシュ１５−２で転送データがキャッシュミスすれば、受信回路１７（転送領域ポーリング回路１７２）は、同一のアドレスで再度ＦＰＧＡキャッシュ１５−２からの転送データの読み出しを実行する。また、受信回路１７の受信回路制御回路１７１は、転送サイズ分の転送データを取得すると、システムメモリ２０上の転送サイズをクリアする。
【０１０６】
送信回路制御回路１６１は、state 5で、システムメモリ２０上の所定アドレスに設定
された転送サイズがクリアされるのを待つ。システムメモリ２０上の所定アドレスに設定された転送サイズがクリアされると、送信回路制御回路１６１は、ＦＰＧＡキャッシュの使用抑止を解除する。さらに、送信回路制御回路１６１は、送信回路制御回路１６１は、送信ＦＩＦＯ１６５が空か否かを判定する。送信ＦＩＦＯ１６５が空でない場合、送信回路制御回路１６１は、state ３に戻り、送信ＦＩＦＯ１６５の次の段から、state 3以下
の処理を繰り返す。送信ＦＩＦＯ１６５が空の場合、送信回路制御回路１６１は、state 1に戻り、ＦＰＧＡ演算回路１４−１からメモリリクエストを待つ。送信回路制御回路１
６１は、送信データが読み出された後に、第１のキャッシュメモリの使用を抑止することを解除することの一例として、state 5の処理を実行する。また、送信回路制御回路１６
１は、送信データの第２の演算部での読み出し完了を確認し、読み出し完了が確認できたときに第１のキャッシュメモリの使用を抑止することを解除することの一例として、stat
e 5の処理を実行する。
【０１０７】
なお、受信回路１７のシーケンスは、実施形態１の図８とほぼ同様であるので、その説明を省略する。ただし、上述のように、受信回路制御回路１７１は、state 5において、
転送サイズレジスタ１７６および転送フラグレジスタ１７７をクリアするとともに、システムメモリ２０上の転送サイズレジスタ１７６をクリアする。
【０１０８】
図１８は、state 0において、送信回路制御回路１６１が転送領域の先頭アドレスを受
信したときの状態を例示する。この例では、転送領域として、４個分の領域（addr1から4）をシステムメモリ２０に確保されている。また、実施形態２では、送信側のアドレスレジスタ１６４がＦＰＧＡ演算回路１４−１内に設けられ、システムメモリ２０上の転送領域の先頭アドレス(addr1)が書き込まれている。また、受信側のアドレスレジスタ１７４
がＦＰＧＡ演算回路１４−２内に設けられ、システムメモリ２０上の転送領域の先頭アドレス(addr1)が書き込まれている。また、図１８の例では、ＦＰＧＡキャッシュ１５−１
およびＦＰＧＡキャッシュ１５−２では、２個の空き領域が存在するものとして、データ転送処理が予定されている。すなわち、データ転送に使用されるＦＰＧＡキャッシュ１５−１の規定サイズは領域（キャッシュブロック、キャッシュライン）２個分と決められている。state 0では、システムメモリ２０上の転送サイズは０であり、転送フラグはＯＦ
Ｆである。
【０１０９】
図１９は、ＦＰＧＡキャッシュ１５−１の２個の領域を規定サイズとするため、システムメモリ２０に転送サイズの初期値を設定した状態を例示する。システムメモリ２０上の転送サイズは、実施形態１と同様、例えば、ＣＰＵ１１がポーリングして読み取り、受信回路１７の転送サイズレジスタ１７６に書き込む。ただし、受信回路制御回路１７１がシステムメモリ２０上の転送サイズをポーリングして読み取り、転送サイズレジスタ１７６に書き込むようにしてもよい。
【０１１０】
図２０は、state 1で、ＦＰＧＡ演算回路１４−１がメモリリクエストとして、３個分
の領域の転送要求量を通知した処理例である。図１９のように、転送サイズの初期値として、２個のＦＰＧＡキャッシュ１５−１の領域（規定サイズの領域）が想定されている。ＦＰＧＡ演算回路１４−１がメモリリクエストによる転送要求量が、規定値を越える場合には、送信回路制御回路１６１は、転送データを規定値に分割し、送信ＦＩＦＯ１６５の各段の要素に格納し、複数回に分けてデータ転送を実行する。
【０１１１】
図２１は、state 4で、送信回路制御回路１６１がcache管理回路１６３Ａを介して、ＦＰＧＡキャッシュ１５−１に規定サイズ分の転送データを書き込んだ状態を例示する。このとき、次回の書き込みのため、転送領域のアドレスは転送領域の先頭（アドレスレジスタ１６４の値）から加算される。また、送信回路制御回路１６１は、システムメモリ２０上の転送フラグをＯＮに設定する。以後、データ転送の完了まで、送信回路制御回路１６１は、ＦＰＧＡキャッシュ１５−１で保持されたデータの追い出しが発生しないように、その後のメモリリクエストにおいて、キャッシュヒントをInvalid(I)に制御する。
【０１１２】
図２２は、送信回路１６のstate 4の処理に対応して、受信回路１７の処理を例示する
図である。システムメモリ２０上で、転送フラグがＯＮになると、ＣＰＵ１１がシステムメモリ２０からＯＮの転送フラグを読み出し、受信回路１７の転送フラグレジスタ１７７に書き込む。ただし、受信回路制御回路１７１がシステムメモリ２０をポーリングし、ＯＮの転送フラグを読み出してもよい。転送フラグレジスタ１７７がＯＮになると、転送領域ポーリング回路１７２がＦＰＧＡキャッシュ１５−２にアクセスし、アドレスレジスタ１７４に定義された転送領域の先頭のアドレスを基に転送データを読み出す。
【０１１３】
ＦＰＧＡキャッシュ１５−２において、アクセスしたアドレスでデータがヒットすれば、当該アドレスの転送データの読み出しが成功する。そこで、転送領域ポーリング回路１７２は、アドレスレジスタ１７４をカウントアップし、次のアドレスに進めて、転送サイズ分の読み出しを継続する。このとき、転送サイズレジスタ１７６において、読み出した転送データの数が計数される。また、ＦＰＧＡキャッシュ１５−２において、アクセスしたアドレスでデータがキャッシュミスとなれば、当該アドレスの転送データの読み出しが失敗となる。キャッシュミスは、送信回路１６においてＦＰＧＡキャッシュ１５−１への転送データの書き込みが未完であることを意味する。そこで、転送領域ポーリング回路１７２は、当該アドレスで再度ＦＰＧＡキャッシュ１５−２にアクセスする。図２２では、data2への2回目のアクセスが成功し、転送サイズレジスタ１７６において、受信した転送データの計数値が２／２となり、転送が完了する。
【０１１４】
図２３は、state 5で、受信回路制御回路１７１がシステムメモリ２０上の所定アドレ
スに設定された転送サイズをクリアした状態を例示する。システムメモリ２０上の転送サイズがクリアされると、送信回路制御回路１６１は、ＦＰＧＡキャッシュ１５−１に書き込まれた転送データ（上記２個分のデータ、data1,data2）の転送完了を認識する。そこ
で、受信回路制御回路１７１は、残り１個のデータ（data3）のＦＰＧＡ演算回路１４−
２への転送を試みる。そのため、送信回路制御回路１６１は、state 3へ遷移する。なお
、このとき、転送フラグはＯＮのまま維持される。なお、図２３では省略されているが、受信回路１７のアドレスレジスタ１７４は、転送領域の次のアドレスにカウントアップされている。
【０１１５】
上述のように、実施形態２では、システムメモリ２０上の転送サイズがクリアされることにより、送信回路制御回路１６１は、ＦＰＧＡキャッシュ１５−１に書き込まれた転送データ（上記２個分のデータ、data1,data2）の転送完了を認識する。これは、実施形態
２では、送信回路制御回路１６１は、ＦＰＧＡキャッシュ１５−１の空き容量を認識できないからである。したがって、実施形態２の情報処理装置１０１では、ＦＰＧＡキャッシュ１５−１において、Implicit Write Backにより、転送データの領域がModified(M)からInvalid(I)に変更されなくてもよい。つまり、ＦＰＧＡキャッシュ１５−１において、Implicit Write Backの機能は不要である。
【０１１６】
図２４は、送信回路制御回路１６１がstate 3に戻り、送信ＦＩＦＯ１６５の残りのデ
ータ（data3）を転送するため、システムメモリ２０の転送サイズを１に設定した状態を
例示する。システムメモリ２０の転送サイズは、上記と同様、ＣＰＵ１１または受信回路制御回路１７１により、受信回路１７の転送サイズレジスタ１７６に０／１で設定される。
【０１１７】
図２５は、state 4で送信ＦＩＦＯ１６５の残りのデータ（data3）をＦＰＧＡキャッシュ１５−１に書き込んだ状態を例示する。このとき、図２２と同様、受信回路１７の転送領域ポーリング回路１７２がＦＰＧＡキャッシュ１５−２にアクセスし、カウントアップされた転送領域のアドレス（アドレスレジスタ１７４）を基に、転送データを読み出す。
【０１１８】
図２６は、state 5で送信ＦＩＦＯ１６５が空となり、送信回路制御回路１６１がstate
6で転送フラグをクリアする処理を例示する。上述のように、受信回路１７（転送領域ポーリング回路１７２）が残りの転送データをＦＰＧＡキャッシュ１５−２から読み出すと、受信回路制御回路１７１がシステムメモリ２０上の転送サイズをクリアする。すると、送信ＦＩＦＯ１６５のデータがすべて送信完了となったので、送信回路制御回路１６１は、システムメモリ２０上の転送フラグをクリアする。転送フラグがクリアされると、ＣＰＵ１１または受信回路制御回路１７１に読み出され、転送フラグレジスタ１７７がクリアされ、データ転送が完了する。
＜実施形態２の効果＞
【０１１９】
以上述べたように、送信回路１６がＦＰＧＡキャッシュ１５−１の空き容量を取得できない場合でも、送信回路１６が規定量（１回の転送データ量）を規定しておくことで、実施形態１と同様にＦＰＧＡキャッシュ１５を介したデータ転送が実現できる。送信回路１６がＦＰＧＡキャッシュ１５−１に規定量分の転送データを書き込み、以降はＦＰＧＡキャッシュ１５−１へのメモリトランザクションでのキャッシュヒントがInvalid(I)となるように制御する。このような手順によって、仮に、１回の転送データ量分の転送データを書き込み時にＦＰＧＡキャッシュ１５−１からのデータの追い出しが発生しても、以降の追い出しを抑制できる。したがって、実施形態２の構成および処理によっても、システムメモリ２０のメモリ帯域の消費を抑制して、ＦＰＧＡ演算回路１４−１からＦＰＧＡ演算回路１４−２へのデータ転送が実現できる。
【０１２０】
実施形態２の処理では、ＦＰＧＡキャッシュ１５−１への１回の転送データ量分の転送データを書き込み後にメモリトランザクションでのキャッシュヒントがInvalid(I)となるように制御すればよい。したがって、実施形態２では、実施形態１のように、ＦＰＧＡ演算回路１４−１からのメモリリクエストに含まれるアドレスから、逐一、ＦＰＧＡ演算回路１４−２へのデータ転送か否かを判定することは不要である。すなわち、送信回路１６（送信回路制御回路１６１）は、ＦＰＧＡキャッシュ１５−１に転送データを書き込んだ後、データ転送が完了するまで、メモリトランザクションにおいて、キャッシュヒントをInvalid(I)に設定すればよい。また、送信回路制御回路１６１は、転送データのデータ転送が完了すると、ＦＰＧＡ演算回路１４−１からのメモリリクエストに含まれるキャッシュヒントをそのままＦＰＧＡキャッシュ１５−１に引き渡せばよい。このような処理によって、送信回路制御回路１６１は、ＦＰＧＡキャッシュ１５−１への転送データの書き込み、ＦＰＧＡキャッシュ１５−１からの転送データの追い出しの抑止、データ転送完了後の追い出し抑止の解除を簡易に実行できる。すなわち、送信回路制御回路１６１は、簡易な制御でＦＰＧＡ演算回路１４−１からＦＰＧＡ演算回路１４−２へのデータ転送を実現できる。
［その他の実施形態］
【０１２１】
上記実施形態１および実施形態２では、ＦＰＧＡ演算回路１４−１からＦＰＧＡ演算回路１４−２へのデータ転送を例示した。しかし、データ転送を行うＦＰＧＡ演算回路１４の数が1対のＦＰＧＡ演算回路１４に限定される訳ではない。すなわち、データ転送を行
うＦＰＧＡ演算回路１４の数は、２以上のいかなる数でもよい。
【０１２２】
図２７は、４つのＦＰＧＡ演算回路１４−１から１４−４の間でデータ転送を行う情報処理装置１０２の構成を例示する。図２７のように、情報処理装置１０２は、パッケージ１１０−１から１１０−４と、システムメモリ２０を有している。また、例えば、パッケージ１１０−１は、ＣＰＵ１１−１と、ＬＬＣ１３−１と、ＦＰＧＡキャッシュ１５−１と、送信回路１６Ａ、１６Ｂ、１６Ｄと、受信回路１７Ａ、１７Ｂ、１７Ｃと、ＦＰＧＡ演算回路１４−１を有している。パッケージ１１０−１内で、例えば、ＬＬＣ１３−１とＦＰＧＡキャッシュ１５−１の間は、ＱＰＩ等の伝送路で接続される。なお、図２７では、ＣＰＵ１１−１側のローカルキャッシュ１２（図３参照）は省略されている。パッケージ１１０−２、１１０−３、１１０―４の構成もパッケージ１１０−１と同様である。
【０１２３】
各パッケージ１１０−１から１１０−４の相互間は、ＱＰＩ等の伝送路で接続される。また、各パッケージ１１０−１から１１０−４と、システムメモリ２０との間は、ＤＤＲ等の仕様に準拠したメモリバスで接続される。
【０１２４】
ＣＰＵ１１は、システムメモリ２０上に、転送領域１−＞２と転送領域２−＞１を確保
する。転送領域１−＞２は、ＦＰＧＡ演算回路１４−１からＦＰＧＡ演算回路１４−２へのデータ転送時に使用される。転送領域１−＞２は、例えば、先頭の転送データのアドレスがaddr1であり、末尾の転送データのアドレスがaddr4である。また、転送領域１−＞２は、転送データの領域の他、転送サイズおよび転送フラグを格納する領域も有する。転送領域２−＞１の構成も転送領域１−＞２と同様である。
【０１２５】
同様、ＣＰＵ１１は、システムメモリ２０上に、転送領域１−＞３と転送領域３−＞１、転送領域１−＞４と転送領域４−＞１、転送領域２−＞３と転送領域３−＞２、転送領域２−＞４と転送領域４−＞２、転送領域３−＞４と転送領域４−＞３を確保する。これらは、それぞれ、ＦＰＧＡ演算回路１４−１とＦＰＧＡ演算回路１４−３、ＦＰＧＡ演算回路１４−１とＦＰＧＡ演算回路１４−４、ＦＰＧＡ演算回路１４−２とＦＰＧＡ演算回路１４−３、ＦＰＧＡ演算回路１４−２とＦＰＧＡ演算回路１４−４、およびＦＰＧＡ演算回路１４−３とＦＰＧＡ演算回路１４−４のデータ転送で使用される。
【０１２６】
さらに、パッケージ１１０−１は、送信回路１６Ａ、１６Ｂ、１６Ｃ、受信回路１７Ａ、１７Ｂ、１７Ｃを有している。送信回路１６Ａ、１６Ｂ、１６Ｃの構成は、例えば、実施形態１、実施形態２の送信回路１６と同様である。例えば、送信回路１６Ａ、１６Ｂ、１６Ｃは、それぞれ送信回路制御回路１６１、送信ＦＩＦＯ等を有する。また、受信回路１７Ａ、１７Ｂ、１７Ｃは、の構成は、例えば、実施形態１、実施形態２の受信回路１７と同様である。例えば、送信回路１６Ａ、１６Ｂ、１６Ｃは、それぞれ送信回路制御回路、転送サイズレジスタ１７６、転送フラグレジスタ１７７、転送領域ポーリング回路等を有する。
【０１２７】
送信回路１６Ａと受信回路１７Ａは、ＦＰＧＡ演算回路１４−１からＦＰＧＡ演算回路１４−２へのデータ転送を制御する。送信回路１６Ｂと受信回路１７Ｂは、ＰＧＡ演算回路１４−１からＦＰＧＡ演算回路１４−３へのデータ転送を制御する。送信回路１６Ｃと受信回路１７Ｃは、ＰＧＡ演算回路１４−１からＦＰＧＡ演算回路１４−４へのデータ転送を制御する。
【０１２８】
なお、転送領域１−＞２、転送領域２−＞１、転送領域１−＞３、転送領域３−＞１、転送領域１−＞４、転送領域４−＞１は、システムメモリ上の異なるアドレスに確保される。したがって、送信回路１６Ａ、１６Ｂ、１６Ｃ、受信回路１７Ａ、１７Ｂ、１７Ｃは、ＦＰＧＡキャッシュ１５−１の空き領域が十分にあれば、各ＦＰＧＡ演算回路１４間のデータ転送は、並列に実行可能である。ただし、図２７では、送信回路１６Ａ、１６Ｂ、１６Ｃは、シーケンシャルに接続されているため、送信回路１６Ａ、１６Ｂ、１６Ｃの１つだけが動作するように排他制御してもよい。同様に、受信回路１７Ａ、１７Ｂ、１７Ｃは、シーケンシャルに接続されているため、受信回路１７Ａ、１７Ｂ、１７Ｃの１つだけが動作するように排他制御してもよい。
【０１２９】
したがって、ＱＰＩ等で例示される伝送路のレーン数が十分にあれば、ＦＰＧＡ演算回路１４−１から１４−４を２組に分けたＦＰＧＡ演算回路１４対で、２組並列にデータ転送可能となる。以上、図２７に例示したように、データ転送を行うＦＰＧＡ演算回路１４の数が1対のＦＰＧＡ演算回路１４に限定される訳ではない。すなわち、データ転送を行
うＦＰＧＡ演算回路１４の数は、２以上のいかなる数でもよい。
【符号の説明】
【０１３０】
１１    ＣＰＵ 
１３    ローカルキャッシュ
１４    ＦＰＧＡ演算回路
１５    ＦＰＧＡキャッシュ
１６    送信回路
１７    受信回路
２０    システムメモリ
１６１    送信回路制御回路
１６２    転送フラグ転送サイズ書込回路
１６３    空cache管理回路
１６４、１７４  アドレスレジスタ
１７１    受信回路制御回路
１７２    転送領域ポーリング回路
１６３１    クエリ回路
１６３２    判定処理回路
【図１】
2019028662.tif 000003
【図２】
2019028662.tif 000004
【図３】
2019028662.tif 000005
【図４】
2019028662.tif 000006
【図５】
2019028662.tif 000007
【図６】
2019028662.tif 000008
【図７】
2019028662.tif 000009
【図８】
2019028662.tif 000010
【図９】
2019028662.tif 000011
【図１０】
2019028662.tif 000012
【図１１】
2019028662.tif 000013
【図１２】
2019028662.tif 000014
【図１３】
2019028662.tif 000015
【図１４】
2019028662.tif 000016
【図１５】
2019028662.tif 000017
【図１６】
2019028662.tif 000018
【図１７】
2019028662.tif 000019
【図１８】
2019028662.tif 000020
【図１９】
2019028662.tif 000021
【図２０】
2019028662.tif 000022
【図２１】
2019028662.tif 000023
【図２２】
2019028662.tif 000024
【図２３】
2019028662.tif 000025
【図２４】
2019028662.tif 000026
【図２５】
2019028662.tif 000027
【図２６】
2019028662.tif 000028
【図２７】
2019028662.tif 000029