(57)【要約】【課題】プロセッサコアのデータ読み出しにかかるレイテンシを小さくする演算処理装置、情報処理装置、及び、演算処理装置の制御方法を提供する。【解決手段】主記憶装置に接続する演算処理装置において、データを記憶するキャッシュメモリ部と、前記キャッシュメモリ部に記憶されたデータに対して演算を行う演算部と、前記キャッシュメモリ部を制御するとともに、前記主記憶装置が記憶するデータを読み出す第１の要求を出力する第１の制御部と、前記主記憶装置に接続されるとともに、前記第１の制御部が出力する第１の要求を分割した複数の第２の要求を前記主記憶装置にそれぞれ送信するとともに、送信した前記複数の第２の要求に対応するデータを前記主記憶装置からそれぞれ受信して前記第１の制御部に送信する第２の制御部を有する。【選択図】図２
2015219813.tif 000002
【特許請求の範囲】
【請求項１】
主記憶装置に接続する演算処理装置において、
データを記憶するキャッシュメモリ部と、
前記キャッシュメモリ部に記憶されたデータに対して演算を行う演算部と、
前記キャッシュメモリ部を制御するとともに、前記主記憶装置が記憶するデータを読み出す第１の要求を出力する第１の制御部と、
前記主記憶装置に接続されるとともに、前記第１の制御部が出力する第１の要求を分割した複数の第２の要求を前記主記憶装置にそれぞれ送信するとともに、送信した前記複数の第２の要求に対応するデータを前記主記憶装置からそれぞれ受信して前記第１の制御部に送信する第２の制御部を有することを特徴とする演算処理装置。
【請求項２】
請求項１において、
前記第２の制御部は、前記第１の要求に基づいて、前記第１の要求が読み出し対象とするアドレス範囲を分割したアドレス範囲をそれぞれ読み出し対象とする前記第２の要求を複数、生成することを特徴とする演算処理装置。
【請求項３】
請求項１または２において、
前記第２の制御部は、前記第１の要求が前記第１の制御部が制御するキャッシュメモリ部のミスヒットに基づく要求である場合に、前記複数の第２の要求を生成して前記主記憶装置に送信し、前記第１の要求がプリフェッチまたはダイレクトメモリアクセスのいずれかに基づく要求である場合は、前記第１の要求を前記主記憶装置に送信することを特徴とする演算処理装置。
【請求項４】
請求項１乃至３のいずれかにおいて、
前記第２の制御部は、前記演算部の処理単位のサイズと前記キャッシュメモリ部のキャッシュラインサイズとに基づいて設定される前記第１の要求の分割数に基づいて、分割数個の第２の要求を生成することを特徴とする演算処理装置。
【請求項５】
請求項３において、
前記第１の制御部は、前記第１の要求が前記キャッシュメモリ部のミスヒットに基づく要求である場合に、前記第２の要求に対応するデータを前記主記憶装置から受信して前記キャッシュメモリ部に記憶させるとともに、前記第２の要求に対応するデータが、前記演算部が演算の対象とする演算データである場合に前記演算部に通知することを特徴とする演算処理装置。
【請求項６】
請求項１乃至５のいずれかにおいて、
前記主記憶装置は、前記データを記憶する複数の記憶素子と、可変長のデータを読み出し対象とする前記第２の要求に応答して、前記複数の記憶素子に固定長のデータ単位にアクセスして前記可変長のデータを読み出して前記第２の制御部に送信する第３の制御部と、を有することを特徴とする演算処理装置。
【請求項７】
請求項１乃至６のいずれかにおいて、
前記第２の制御部は、前記主記憶装置から前記第１、第２の要求に対応するデータとともに当該データに基づく第１の巡回冗長検査値を受信し、前記受信した第１、第２の要求に対応するデータに基づいて第２の巡回冗長検査値を生成し、前記第１の巡回冗長検査値と前記生成した第２の巡回冗長検査値とが一致する場合に、前記受信した第１、第２の要求に対応するデータが有効であると判定することを特徴とする演算処理装置。
【請求項８】
請求項１乃至７のいずれかにおいて、
前記第２の制御部は、前記第２の要求とともに当該第２の要求と分割元の第１の要求とを関連付ける識別情報を前記主記憶装置に送信し、前記主記憶装置から前記第２の要求に対応するデータとともに前記識別情報を受信し、前記識別情報に基づいて前記受信したデータに対応する分割元の第１の要求を特定することを特徴とする演算処理装置。
【請求項９】
請求項８において、
前記第１の制御部は、前記特定した分割元の第１の要求に基づいて、前記受信した第２の要求に対応するデータを記憶する前記キャッシュメモリ部のアドレスを特定することを特徴とする演算処理装置。
【請求項１０】
主記憶装置と、前記主記憶装置に接続する演算処理装置とを有する情報処理装置において、
前記演算処理装置は、
データを記憶するキャッシュメモリ部と、
前記キャッシュメモリ部に記憶されたデータに対して演算を行う演算部と、
前記キャッシュメモリ部を制御するとともに、前記主記憶装置が記憶するデータを読み出す第１の要求を出力する第１の制御部と、
前記主記憶装置に接続されるとともに、前記第１の制御部が出力する第１の要求を分割した複数の第２の要求を前記主記憶装置にそれぞれ送信するとともに、送信した前記複数の第２の要求に対応するデータを前記主記憶装置からそれぞれ受信して前記第１の制御部に送信する第２の制御部を有することを特徴とする情報処理装置。
【請求項１１】
主記憶装置に接続するとともに、データを記憶するキャッシュメモリ部と、前記キャッシュメモリ部に記憶されたデータに対して演算を行う演算部を有する演算処理装置の制御方法において、
前記演算処理装置が有する第１の制御部が、前記キャッシュメモリ部を制御するとともに、前記主記憶装置が記憶するデータを読み出す第１の要求を出力し、
前記演算処理装置が有する、前記主記憶装置に接続された第２の制御部が、前記第１の制御部が出力する第１の要求を分割した複数の第２の要求を前記主記憶装置にそれぞれ送信し、
前記第１の制御部が送信した前記複数の第２の要求に対応するデータを、前記第２の制御部が前記主記憶装置からそれぞれ受信して前記第１の制御部に送信することを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置、情報処理装置、及び、演算処理装置の制御方法に関する。
【背景技術】
【０００２】
ＨＰＣ（high performance computing）向けスーパーコンピュータ、サーバ、ＰＣ（personal computer）、携帯電話等の情報処理装置内部に設けられるプロセッサの計算速度は、製造プロセスの微細化に伴って向上している。プロセッサの計算速度の向上に伴い、主記憶装置（メインメモリ）の容量やプロセッサと主記憶装置間の帯域幅の向上が要求される。
【０００３】
従来、ＤＩＭＭ（Dual Inline Memory Module）がＤＲＡＭ（Dynamic Random Access Memory：ＤＲＡＭ）（メインメモリ）として採用されてきた。一方、近年、ＤＲＡＭ（Dynamic Random Access Memory）コントローラを内蔵するメモリ素子が提供されている。例えば、ＨＭＣ(Hybrid Memory Cube)である。ＤＲＡＭコントローラをメモリ素子側に備えることにより、主記憶装置（メインメモリ）の容量や帯域の向上が実現される。ＤＲＡＭについては、例えば、特許文献１に記載される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００１−２２２４７２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、プロセッサとメモリコントローラとの分離により、プロセッサコアがデータの読み出すまでのレイテンシが大きくなることがある。
【０００６】
１つの側面は、本発明は、プロセッサコアのデータ読み出しにかかるレイテンシを小さくする演算処理装置、情報処理装置、及び、演算処理装置の制御方法を提供する。
【課題を解決するための手段】
【０００７】
第１の側面は、主記憶装置に接続する演算処理装置において、データを記憶するキャッシュメモリ部と、前記キャッシュメモリ部に記憶されたデータに対して演算を行う演算部と、前記キャッシュメモリ部を制御するとともに、前記主記憶装置が記憶するデータを読み出す第１の要求を出力する第１の制御部と、前記主記憶装置に接続されるとともに、前記第１の制御部が出力する第１の要求を分割した複数の第２の要求を前記主記憶装置にそれぞれ送信するとともに、送信した前記複数の第２の要求に対応するデータを前記主記憶装置からそれぞれ受信して前記第１の制御部に送信する第２の制御部を有する。
【発明の効果】
【０００８】
第１の側面によれば、プロセッサコアのデータ読み出しにかかるレイテンシを小さくすることができる。
【図面の簡単な説明】
【０００９】
【図１】本実施の形態例における情報処理装置のハードウェア構成を示す図である。
【図２】図１に示すメモリコントローラのハードウェアブロック図である。
【図３】図２に示すメモリコントローラのリクエスト分割部及びリクエスト保持部の詳細を説明する図である。
【図４】キャッシュコントローラからメモリコントローラに送信されるリードリクエストのフォーマットを説明する図である。
【図５】図４で説明したリードリクエストの送信例を示す図である。
【図６】メモリコントローラがメインメモリに送信するリードリクエストを含むパケットのフォーマットを説明する図である。
【図７】分割していないリードリクエストを含むパケットの一例を示す図である。
【図８】分割して生成したリードリクエストをそれぞれ含むパケットの一例を示す図である。
【図９】図２に示すメモリコントローラの応答データ受信部及びリクエスト管理部の詳細を説明する図である。
【図１０】メモリコントローラがＤＲＡＭコントローラユニットから受信する応答パケットのフォーマットを説明する図である。
【図１１】図８に示す分割して生成したリードリクエストに対応する応答パケットの一例を示す図である。
【図１２】メモリコントローラがキャッシュコントローラに送信するリクエスト応答のフォーマットを説明する図である。
【図１３】図１２で説明したリクエスト応答の送信例を示す図である。
【図１４】メモリコントローラがキャッシュコントローラに出力するリクエスト応答を説明するタイミングチャートである。
【発明を実施するための形態】
【００１０】
以下、図面にしたがって本発明の実施の形態を説明する。ただし、本発明の技術的範囲はこれらの実施の形態に限定されず、特許請求の範囲に記載された事項とその均等物まで及ぶものである。
【００１１】
［情報処理装置］
図１は、本実施の形態例における情報処理装置のハードウェア構成を示す図である。図１の情報処理装置は、プロセッサ（演算処理装置）１００とメインメモリ（主記憶装置）２００とを有する。プロセッサ１００は、メインメモリ２００と、シリアルバス３００を介して接続し、高速シリアル通信を行う。シリアルバス３００は、例えば、１６レーンのシリアル転送バスで構成される。
【００１２】
図１のプロセッサ１００は、プロセッサコア（演算部）１０、キャッシュメモリ２１、キャッシュコントローラ（第１の制御部）２０、メモリコントローラ（第２の制御部）３０、インタフェース部４０を有する。インタフェース部４０は、図示していないが、クロスバースイッチを介して、他の情報処理装置と接続する。他の情報処理装置も、図１の情報処理装置と同様の構成を有する。
【００１３】
図１のプロセッサコア１０は、フェッチした命令をデコードし、命令内容に応じて各種の制御や演算処理を行う。プロセッサコア１０は、デコードした命令がロード命令である場合、データを読み出すリードリクエストを発行し、ストア命令である場合はデータを書き込むライトリクエストを発行する。図１のプロセッサコア１０は、１つのコアを示すが、複数のコアであってもよい。
【００１４】
図１のキャッシュコントローラ２０は、キャッシュメモリ２１を制御する。図１のキャッシュメモリ２１は、例えば、１次キャッシュである。ただし、この例に限定されるものではなく、キャッシュメモリ２１は、例えば、１次キャッシュ及び２次キャッシュ、１次キャッシュ及び２次キャッシュ及び３次キャッシュ等であってもよい。キャッシュメモリ２１は、プロセッサコア１０によるアクセス頻度が高いデータを一時的に記憶する。キャッシュメモリ２１は、メインメモリ２００から読み出したデータを、システムで定義されるブロック（以下、キャッシュラインと称する）単位に記憶する。キャッシュラインのサイズは、プロセッサ１００が採用するアーキテクチャに基づいて定義される。本実施の形態例では、キャッシュラインのサイズは、例えば、１２８バイトである。
【００１５】
キャッシュコントローラ２０は、プロセッサコア１０が発行したリードリクエスト、ライトリクエストを受信する。キャッシュコントローラ２０は、プロセッサコア１０からのリードリクエスト及びライトリクエストに応答して、対象とするデータのキャッシュメモリ２１のキャッシュヒット・ミス判定を行う。
【００１６】
キャッシュコントローラ２０は、プロセッサコア１０からのリードリクエストが対象とするデータがキャッシュメモリ２１に記憶されている（キャッシュヒットという）場合、キャッシュメモリ２１から対象のデータを読み出す。一方、対象とするデータがキャッシュメモリ２１に記憶されていない（キャッシュミスヒットという）場合、キャッシュコントローラ２０は、メインメモリ２００からデータを読み出すリードリクエストを、メモリコントローラ３０に送信する。また、キャッシュコントローラ２０は、ライトリクエストが対象とするデータがキャッシュヒットした場合、キャッシュメモリ２１の対象データを書き換える。一方、ライトリクエストが対象とするデータがキャッシュミスヒットした場合、キャッシュコントローラ２０は、対象とするデータをキャッシュメモリ２１に新たに書き込む。
【００１７】
また、キャッシュコントローラ２０は、インタフェース部４０を介して、他の情報処理装置等が発行するリードリクエスト等のダイレクトメモリアクセス（Direct Memory Access：ＤＭＡ）要求を受信する。また、キャッシュコントローラ２０は、プリフェッチ命令を発行し、先の演算処理で使用する可能性があるデータを、予めキャッシュメモリ２１に読み出す。キャッシュコントローラ２０は、ＤＭＡ要求、プリフェッチが対象とするデータをメインメモリ２００から読み出すリードリクエストを、メモリコントローラ３０に送信する。
【００１８】
また、キャッシュコントローラ２０は、メモリコントローラ３０から、送信したリードリクエストに応答してメインメモリ２００から読み出されたリードデータを受信する。そして、キャッシュコントローラ２０は、リードデータがプロセッサコア１０によるリードリクエスト、または、プリフェッチに該当する場合、リードデータをキャッシュメモリ２１に記憶する。また、キャッシュコントローラ２０は、リードデータがＤＭＡ要求に該当する場合、リードデータをインタフェース部４０に出力する。
【００１９】
図１のメモリコントローラ３０は、キャッシュコントローラ２０から送信されるリードリクエスト、ライトリクエストに基づいて、所定のプロトコルにしたがってパケットを生成する。そして、メモリコントローラ３０は、生成したパケットを、シリアルバス３００を介してメインメモリ２００に送信する。パケットは、データ長に応じて、データバス幅毎に複数サイクル分、バースト転送される。
【００２０】
また、メモリコントローラ３０は、メインメモリ２００からリードリクエストに基づくリードデータを含む応答パケットを、順次、受信する。そして、メモリコントローラ３０は、リードデータに、リードデータが対応するリードリクエストの情報を関連付けて、キャッシュコントローラ２０に送信する。
【００２１】
図１のメインメモリ２００は、例えば、ＨＭＣ(Hybrid Memory Cube)である。即ち、メインメモリ２００は、複数の記憶素子によって構成されるＤＲＡＭ（Dynamic Random Access Memory：ＤＲＡＭ）６０と、ＤＲＡＭ（Dynamic Random Access Memory）コントローラユニット（第３のコントローラ）５０とを有する。ＤＲＡＭコントローラユニット５０は、ＤＲＡＭ６０側のチップに搭載される。そして、メインメモリ２００は、プロセッサ１００とシリアルバス３００を介して接続することにより、広帯域を実現する。
【００２２】
ＤＲＡＭ６０は、複数枚の半導体層（シリコンダイ）ｘ１〜ｘ４を有する。複数枚の半導体層ｘ１〜ｘ４は、ＴＳＶ（Through-Silicon Via：シリコン貫通電極）によって接続し、積層した縦の列が１つのＤＲＡＭとして機能する。これにより、ＤＲＡＭ素子を高さ方向に積み上げることを実現可能にし、実装密度を向上することで大容量化を達成する。そして、それぞれのＤＲＡＭ素子は、共通のロジックベースに接続する。ロジックベースの裏面から基板に接続し、複数本のレーンと呼ばれる信号経路（ポート）が引き出され、１つのシリアルリンクとなる。
【００２３】
ＤＲＡＭコントローラユニット５０は、ＤＲＡＭ６０のメモリ空間を管理する。また、ＤＲＡＭコントローラユニット５０は、リクエストのタイミング調停やパイプラインの制御を行うことにより、効率的な順番にしたがってリクエストを実行する。また、ＤＲＡＭコントローラユニット５０がＤＲＡＭ６０側のチップに搭載されることにより、リクエストが対象とするデータのデータ長が固定長ではなく、一定の範囲で選択できる自由度を有する。ＤＲＡＭコントローラユニット５０は、可変長のデータにアクセスするリクエストに基づいて、固定長のデータ単位にＤＲＡＭ６０にアクセスすることで、可変長のデータの読み出し及び書き込み処理を実現する。
【００２４】
ＤＲＡＭコントローラユニット５０は、リードリクエストに対応するリードデータを読み出すと、所定のプロトコルにしたがってリードデータを含む応答パケットを生成する。そして、ＤＲＡＭコントローラユニット５０は、シリアルバス３００を介して、応答パケットをプロセッサ１００に送信する。応答パケットは、パケット長に応じて、データバス幅毎に複数サイクル分、バースト転送される。
【００２５】
このように、図１に示すメインメモリ２００は、大容量のＤＲＡＭ６０を搭載し、ＤＲＡＭコントローラユニット５０を備えることによって、容量の向上を実現する。また、メインメモリ２００は、プロセッサ１００との間をシリアルバス３００で接続することによって、帯域の向上を実現する。一方、プロセッサ１００とＤＲＡＭコントローラユニット５０とのチップの分離に伴って、シリアルパラレル変換やチップ間のパケット通信が発生する。これにより、データの書き込み処理、及び、データの読み出し処理にかかるレイテンシが大きくなることがある。
【００２６】
本実施の形態例では、プロセッサ１００のメモリコントローラ３０は、キャッシュコントローラ２０から送信されるリードリクエストを分割して、複数のリードリクエストを生成する。そして、ＤＲＡＭコントローラユニット５０は、メモリコントローラ３０から、順次、分割した複数のリードリクエストを受信する。ＤＲＡＭコントローラユニット５０は、リードリクエストに基づいて読み出したリードデータを、メモリコントローラ３０に、順次、送信する。
【００２７】
次に、本実施の形態例におけるメモリコントローラ３０の構成を説明する。本実施の形態例では、リードリクエストに係る処理を中心に説明する。
【００２８】
［メモリコントローラの詳細］
図２は、図１に示すメモリコントローラ３０のハードウェアブロック図である。図２に示すメモリコントローラ３０は、リクエスト分割部３１、リクエスト保持部３２、リクエスト発行部３３、応答データ受信部３４、リクエスト管理部３５を有する。
【００２９】
リクエスト分割部３１は、リードリクエストの種別に応じて、リードリクエストを複数のリードリクエストに分割する。具体的に、リクエスト分割部３１は、リードリクエストがキャッシュミスヒットに基づくリクエストである場合に、リードリクエストを分割して複数のリードリクエストを生成する。一方、リードリクエストがプリフェッチまたはＤＭＡ要求のいずれかに基づくリクエストである場合は、リクエスト分割部３１はリードリクエストを分割しない。
【００３０】
リクエスト分割部３１は、分割して生成した複数のリードリクエスト、及び、分割しないリードリクエストを、リクエスト保持部３２に出力する。リクエスト保持部３２は、受信したリードリクエストを保持し、順次、リクエスト発行部３３に出力する。
【００３１】
また、リクエスト分割部３１は、分割して生成した複数のリードリクエスト、及び、分割しないリードリクエストの情報を、リクエスト管理部３５に出力する。リクエスト管理部３５は、リクエストタグ（図３）に基づいて、リードリクエストと、リードリクエストに基づいてメインメモリ２００から読み出されたリードデータとの対応関係を管理する。また、リクエスト管理部３５は、リクエストタグに基づいて、分割して生成した複数のリードリクエストと、分割元のリードリクエストとの対応関係を管理する。
【００３２】
リクエスト発行部３３は、リードリクエストそれぞれについて、所定のプロトコルにしたがってパケットを生成する。また、リクエスト発行部３３は、データの一部が変化したことを検出するチェックサムとして、パケットに巡回冗長検査（Cyclic Redundancy Check：ＣＲＣ）コードを付与する。ＣＲＣコードは、任意長のデータストリームを入力とし、誤り検出関数に基づいて算出される固定サイズ（例えば、３２ビット整数）のコードである。
【００３３】
ＤＲＡＭコントローラユニット５０は、リクエスト発行部３３からパケットを受信すると、パケットが含むデータに基づいてＣＲＣコードを算出する。そして、ＤＲＡＭコントローラユニット５０は、算出したＣＲＣコードと、パケットが有するＣＲＣコードとを比較する。ＣＲＣコードが一致する場合、ＤＲＡＭコントローラユニット５０は、転送によりパケットが含むデータが変化していない旨、判定する。したがって、ＣＲＣコードが一致しない場合、ＤＲＡＭコントローラユニット５０は、リクエスト発行部３３にパケットの再送を要求する。
【００３４】
ＣＲＣコードが一致する場合、ＤＲＡＭコントローラユニット５０は、リードリクエストに基づいて、ＤＲＡＭ６０からリードデータを読み出す。そして、ＤＲＡＭコントローラユニット５０は、リードデータを入力として算出したＣＲＣコードを算出する。ＤＲＡＭコントローラユニット５０は、リードデータと、算出したＣＲＣコードとを有する応答パケットを生成し、メモリコントローラ３０に送信する。
【００３５】
応答データ受信部３４は、ＤＲＡＭコントローラユニット５０から、応答パケットを、順次、受信する。応答データ受信部３４は、応答パケットを、パケット長分、受信し終えるまで保持する。そして、応答データ受信部３４は、パケットに含まれるリードデータを入力としてＣＲＣコードを算出し、算出したＣＲＣコードが、パケットが有するＣＲＣコードと一致するか否かを判定する。ＣＲＣコードが一致しない場合、応答データ受信部３４は、ＤＲＡＭコントローラユニット５０に応答パケットの再送を要求する。ＣＲＣコードが一致する場合、応答データ受信部３４は、転送によってリードデータが変化していない旨、判定し、リードデータをキャッシュコントローラ２１に送信する。
【００３６】
このように、本実施の形態例におけるメモリコントローラ３０は、リードリクエストを複数のリードリクエストに分割する。リードリクエストを分割することによって、分割後のリードリクエストそれぞれに基づいて読み出される各データのデータ長は短くなる。読み出し対象の各データのデータ長が短くなることにより、各データのメインメモリ２００からの読み出し時間は短縮される。また、各データのデータ長が短くなることにより、応答データ受信部３４が、データの受信を開始してからＣＲＣコードの検証を行うまで時間も短くなり、分割して生成された各リードリクエストの応答時間は短縮される。したがって、リードリクエストを分割することによって、分割後のリードリクエストそれぞれのトータルのレイテンシを小さくすることができる。
【００３７】
そして、プロセッサコア１０が演算対象とするデータは、分割元のリクエストが読み出し対象とするキャッシュラインサイズのデータ全てではなく、キャッシュラインサイズのデータの一部であるケースが多い。したがって、プロセッサコア１０は、分割して生成されたリードリクエストに基づいて読み出されたリードデータが演算対象のデータを含む場合、当該リードデータの受信に応答して演算処理を開始できる。即ち、プロセッサコア１０は、分割元のリードリクエストが対象とするキャッシュラインサイズのリードデータ全ての受信を待つ必要がない。したがって、プロセッサコア１０は、分割して生成されたリードリクエストのリードデータをより早く受信できるため、より早い段階で演算を開始できる。
【００３８】
これにより、本実施の形態例におけるプロセッサ１００は、プロセッサコア１０のデータ読み出しにかかるレイテンシを小さくすることができる。したがって、プロセッサコア１０は、より効率的に演算処理を行うことができる。
【００３９】
また、メインメモリ２００において、ＤＲＡＭコントローラユニット５０は、固定長データサイズのアクセス単位毎にＤＲＡＭ６０をアクセスする。つまり、ＤＲＡＭコントローラユニット５０は、分割されていないリードリクエストについても、リードリクエストの対象とするデータのデータ長を分割したアクセス単位に、ＤＲＡＭ６０にアクセスする。したがって、リードリクエストを分割する場合の、メモリコントローラ３０によるリードリクエストの分割処理に要する時間は、問題にはならない。
【００４０】
また、リードリクエストを分割することによって、メインメモリ２００からメモリコントローラ３０に送信されるリードデータのデータ長は短くなる。データ長が短くなることにより、データ転送におけるエラー発生率は低下する。これにより、メモリコントローラ３０は、ＣＲＣエラーの発生に基づいて発生する、応答パケットの再送に伴う性能の低下を抑制することができる。
【００４１】
［メモリコントローラの送信側］
次に、図２に示すメモリコントローラ３０における、リードリクエスト送信側の各部（リクエスト分割部３１、リクエスト保持部３２）の処理を詳細に説明する。
【００４２】
図３は、図２に示すメモリコントローラ３０のリクエスト分割部３１及びリクエスト保持部３２の詳細を説明する図である。図３に示すように、リクエスト分割部３１は、判定部３１０、リクエスト生成部３１１、タグ付与部３１５を有する。また、リクエスト生成部３１１は、タグ生成部３１２、コード生成部３１３、アドレス生成部３１４を有する。
【００４３】
判定部３１０は、リードリクエストの要因を示すリクエストＩＤ（Identification：ＩＤ）６４（図４、図５）に基づいて、リードリクエストを分割するか否かを判定する。例えば、キャッシュコントローラ２０は、リードリクエストの発行時に、リクエストＩＤ６４を付与する。リクエストＩＤ６４は、キャッシュミスヒット、プリフェッチ、ＤＭＡ要求等のリードリクエストの要因を識別する情報である。判定部３１０は、リクエストＩＤに基づいて、リードリクエストがキャッシュミスヒットに基づくリクエストである場合に、リクエストを分割する。また、判定部３１０は、リクエストＩＤに基づいて、リードリクエストがプリフェッチまたはＤＭＡ要求のいずれかに基づくリクエストである場合は、リクエストを分割しない。
【００４４】
具体的に、ＤＭＡ要求に基づくリードリクエストの場合、インタフェース部４０（図１）は、読み出し対象のデータを一度に、他の情報処理装置へ送信する。したがって、データを分割して、個々の各リードリクエストのレイテンシを小さくする利点は小さい。このため、判定部３１０は、ＤＭＡ要求に基づくリードリクエストを分割の対象としない。また、プリフェッチは、先の演算処理で使用する可能性があるデータを広範囲に読み出す処理であるため、データを分割して個々のリードリクエストのレイテンシを小さくする利点は小さい。このため、判定部３１０は、プリフェッチに基づくリードリクエストを分割の対象としない。
【００４５】
また、メモリコントローラ１０には、リードリクエストの分割数ｍ（ｍ＞１、整数）が、予め設定される。分割数ｍは、例えば、プロセッサコア１０の処理単位のサイズと、キャッシュメモリ２１のキャッシュラインサイズとに基づいて設定される。前述したとおり、キャッシュコントローラ２０は、キャッシュライン単位に、データの読み出し処理、データの書き込み処理を行う。したがって、リードリクエストが対象とするデータ長はキャッシュラインのサイズを示す。
【００４６】
例えば、分割数ｍがより大きい場合、分割後の各リードリクエストが対象とするデータ長は短くなり、読み出したリードデータが、プロセッサコア１０が演算対象とする単位のデータを含む確率が低くなる。一方、分割数ｍがより小さい場合、分割後の各リードリクエストが対象とするデータ長が大きくなることにより、読み出したリードデータが、プロセッサコア１０が演算対象とする単位のデータを含む確率は高くなる。その一方で、分割数ｍがより小さい場合、リードリクエストが対象とするデータのデータ長が大きくなるため、分割して生成された各リードリクエストのレイテンシは小さくなり難い。
【００４７】
前述したとおり、本実施の形態例におけるキャッシュラインのサイズは、１２８バイトである。また、例えば、プロセッサコア１０の処理単位のサイズは３２ビットである。したがって、キャッシュラインサイズ「１２８バイト」と、プロセッサコア１０の処理単位サイズ「３２ビット」とに基づいて、分割して生成された各リードリクエストのレイテンシを小さくするとともに、読み出したリードデータが、プロセッサコア１０が演算対象とする単位のデータを含む確率を高める分割数が設定される。本実施の形態例におけるリードリクエストの分割数ｍは、例えば、「４」に設定される。
【００４８】
ここで、キャッシュコントローラ２０がメモリコントローラ３０に送信するリードリクエストの構成、及び、リードリクエストの一例を説明する。
【００４９】
図４、図５は、キャッシュコントローラ２０がメモリコントローラ３０に送信するリードリクエストを説明する図である。図４は、キャッシュコントローラ２０がメモリコントローラ３０に送信するリードリクエストのフォーマットを示す図である。また、図５は、キャッシュコントローラ２０がメモリコントローラ３０に送信するリードリクエストの送信例を示す図である。
【００５０】
図４に示すように、リードリクエストは、データ有効フラグ６１、オペレーションコード６２、アドレス６３、リクエストＩＤ６４のフォーマットからなる。データ有効フラグ６１は、メモリコントローラ３０がリクエストを取り込むか否かを示すフラグである。メモリコントローラ３０は、データ有効フラグ６１が値「１」である場合に、リクエストを取り込む。オペレーションコード６２は、命令コードである。アドレス６３は、読み出し対象のデータが記憶されたＤＲＡＭ６０のアドレスである。リクエストＩＤ６４は、図３で説明したとおりである。
【００５１】
また、図５は、図４で説明したリードリクエストの送信例を示す。キャッシュコントローラ２０は、図４に示すデータ有効フラグ６１、オペレーションコード６２、アドレス６３、リクエストＩＤ６４を１サイクルで、メモリコントローラ３０に送信する。
【００５２】
ここで、キャッシュコントローラ２０が、１２８バイトのデータのロード命令に対応するキャッシュミスヒットに基づいて、メモリコントローラ３０にリードリクエストを発行する場合を例示する。この場合、データ有効フラグ６１は値「１」を有し、オペレーションコード６２は、１２８バイトのデータのリードを示す。また、アドレス６３は、１２８バイトのデータが記憶されたＤＲＡＭ６０の先頭アドレスを示す。リクエストＩＤ６４は、キャッシュミスヒットに基づくリードリクエストであることを示す。
【００５３】
図３に戻り、リクエスト分割部３１のタグ生成部３１２は、分割して生成する各リードリクエストのリクエストタグ（識別情報）を生成する。リクエストタグは、リードリクエストを識別する情報である。また、リクエストタグは、リードリクエストに基づいてメインメモリ２００から読み出されたリードデータと、リードリクエストとを関連付ける。さらに、リクエストタグは、分割して生成した各リードリクエストを、分割元のリードリクエストに関連付ける。
【００５４】
本実施の形態例におけるメモリコントローラ３０は、リクエストタグを付加したリードリクエストを、メインメモリ２００に送信する。そして、メモリコントローラ３０は、メインメモリ２００から、リクエストタグを付加したリードデータを受信する。そして、メモリコントローラ３０は、リクエストタグに基づいて、リードデータに対応するリードリクエストを特定する。また、メモリコントローラ３０は、リードデータが分割されたリードリクエストに対応する場合、リクエストタグに基づいて、分割元のリードリクエストを特定する。
【００５５】
また、リクエスト分割部３１のコード生成部３１３は、分割元のリードリクエストのオペレーションコード６２（図４、図５）に基づいて、分割して生成する各リードリクエストのオペレーションコード６２を生成する。処理の詳細は後述する。また、リクエスト分割部３１のアドレス生成部３１４は、分割元のリードリクエストのアドレス６３（図４、図５）に基づいて、分割して生成する各リードリクエストのアドレス６３を生成する。処理の詳細は後述する。そして、リクエスト分割部３１は、生成したリクエストタグ、オペレーションコード６２、アドレス６３に基づいて、それぞれのリードリクエストを生成する。
【００５６】
一方、リクエストを分割しない場合、リクエスト分割部３１のタグ付与部３１５は、リクエストタグを生成し、リードリクエストに付与する。前述したとおり、メモリコントローラ３０は、リードデータを受信したときに、リクエストタグに基づいて、リードデータに対応するリードリクエストを特定する。
【００５７】
リクエスト分割部３１は、分割して生成した各リードリクエスト、及び、分割していないリードリクエストをリクエスト保持部３２に出力する。リクエスト保持部３２は、リクエストキューを有する。リクエストキューは、リクエストタグ、オペレーションコード６２、アドレス６３それぞれについて、フリップフロップの配列３１２、３２２、３２３を有する。リクエストキューは、順次、リクエストを保持し、リクエスト発行部３３に出力する。
【００５８】
また、リクエスト分割部３１は、分割して生成した各リードリクエストのリクエストタグ、オペレーションコード６２、アドレス６３、リクエストＩＤ６４を、リクエスト管理部３５に出力する。これにより、リクエスト管理部３５は、リクエストタグと、オペレーションコード６２、アドレス６３、リクエストＩＤ６４との対応関係を管理する。また、リクエスト分割部３１は、分割して生成した各リードリクエストのリクエストタグ、オペレーションコード６２、アドレス６３に加えて、分割元のリードリクエストのオペレーションコード６２、アドレス６３、リクエストＩＤ６４を、リクエスト管理部３５に出力する。これにより、リクエスト管理部３５は、さらに、分割して生成されたリードリクエストのリクエストタグと、分割元のリードリクエストのオペレーションコード６２、アドレス６３、リクエストＩＤ６４との対応関係を管理する。
【００５９】
ここで、メモリコントローラ３０のリクエスト発行部３３が、メインメモリ２００に送信するリードリクエストを含むパケットの具体例を説明する。
【００６０】
図６は、メモリコントローラ３０がメインメモリ２００に送信するリードリクエストを含むパケットのフォーマットを示す図である。図６に示すように、パケットは、Ｈｅａｄｅｒレコード７１と、Ｔａｉｌレコード７２のフォーマットからなる。Ｈｅａｄｅｒレコード７１は、リクエストタグ７１１、オペレーションコード７１２、アドレス７１３を有する。Ｔａｉｌレコード７２は、ＣＲＣコード７２１を有する。
【００６１】
リクエストタグ７１１は、図３で説明したとおりである。リクエストタグ７１１が付与されることによって、リードリクエストによって読み出されたリードデータと、リードリクエストの内容との関連付けが可能になる。また、リクエストタグ７１１が付与されることによって、リードデータが分割して生成されたリードリクエストに対応する場合、リードデータと、分割元のリードリクエストの内容との関連付けが可能になる。
【００６２】
また、分割されないリードリクエストの場合、オペレーションコード７１２、及び、アドレス７１３は、図４、図５で示したオペレーションコード６２を示す。一方、分割して生成されたリードリクエストの場合、オペレーションコード７１２、及び、アドレス７１３は、リクエスト分割部３１が生成したオペレーションコード、及び、アドレスを示す。ＣＲＣコード７２１は、例えば、リクエストタグ７１１、オペレーションコード７１２、アドレス７１３等を入力として算出したＣＲＣ値である。
【００６３】
パケットのフォーマット（図６）に続いて、分割していないリードリクエストを含むパケット（図７）、及び、分割して生成したリードリクエストを含む複数のパケット（図８）の一例を説明する。
【００６４】
図７は、分割していないリードリクエストを含むパケットｐｋ０の一例を示す図である。即ち、図７のパケットｐｋ０が有するリードリクエストは、ＤＭＡ要求またはプリフェッチに基づくリードリクエストである。
【００６５】
図７に示すパケットｐｋ０は、リクエストタグ「００１」７１１、オペレーションコード「１２８バイトのデータのリード」７１２、アドレス「1001_1111_1100_0011_1111_1010_1000_0000」７１３、ＣＲＣコード「ｘｘｘｘｘｘｘｘ」７１４を有する。つまり、パケットｐｋ０が示すリードリクエストは、ＤＲＡＭ６０のアドレス「1001_1111_1100_0011_1111_1010_1000_0000」７１３からアドレス「1001_1111_1100_0011_1111_1010_1110_0000」までの１２８バイトのデータを読み出すリクエストである。タグ付与部３１５（図３）は、リードリクエストに、リクエストタグ「００１」７１１を付与している。ＣＲＣコード「ｘｘｘｘｘｘｘｘ」７１４は、リクエストタグ７１１、オペレーションコード７１２、アドレス７１３等を入力として算出したＣＲＣ値である。
【００６６】
図８は、分割して生成したリードリクエストをそれぞれ含むパケットｐｋ１〜ｐｋ４の一例を示す図である。即ち、図８に示すリードリクエストは、キャッシュミスヒットに基づくリードリクエストを分割して生成したリードリクエストである。
【００６７】
図８に示すパケットｐｋ１〜ｐｋ４は、分割元のリードリクエストが４個に分割された各リードリクエストを含むパケットである。図８の例において、分割元のリードリクエストは、ＤＲＡＭ６０のアドレス「1001_1111_1100_0011_1111_1010_1000_0000」からアドレス「1001_1111_1100_0011_1111_1010_1110_0000」までの１２８バイトのデータを読み出すリクエストである。
【００６８】
タグ生成部３１２（図３）は、４つのリクエストタグ７１１を生成する。また、コード生成部３１３（図３）は、１２８バイトのデータのリードを示すオペレーションコード６２に基づいて、３２バイトのデータのリードを示す、各リードリクエストのオペレーションコード７１２を生成する。また、アドレス生成部３１４（図３）は、アドレス「1001_1111_1100_0011_1111_1010_1000_0000」から１２８バイトのアドレス範囲を、４分割する。そして、アドレス生成部３１４は、４分割した各アドレス範囲の先頭アドレスを、各リードリクエストのアドレス７１３として生成する。そして、リクエスト分割部３１は、生成したリクエストタグ７１１、オペレーションコード７１２、アドレス７１３に基づいて、４つのリードクエストを生成する。
【００６９】
図８に示す１つ目のパケットｐｋ１は、リクエストタグ「００１」７１１ａ、オペレーションコード「リード／３２バイト」７１２ａ、アドレス「1001_1111_1100_0011_1111_1010_1000_0000」７１３ａ、ＣＲＣコード「ａａａａａａａａ」７１４ａを有する。ＣＲＣコード７１４ａは、リクエストタグ７１１ａ、オペレーションコード７１２ａ、アドレス７１３ａ等を入力として算出したＣＲＣ値である。
【００７０】
また、２つ目のパケットｐｋ２は、リクエストタグ「０１０」７１１ｂ、オペレーションコード「リード／３２バイト」７１２ｂ、アドレス「1001_1111_1100_0011_1111_1010_1010_0000」７１３ｂ、ＣＲＣコード「ｂｂｂｂｂｂｂｂ」７１４ｂを有する。ＣＲＣコード７１４ｂは、リクエストタグ７１１ｂ、オペレーションコード７１２ｂ、アドレス７１３ｂ等を入力として算出したＣＲＣ値である。
【００７１】
同様にして、３つ目のパケットｐｋ３は、リクエストタグ「０１１」７１１ｃ、オペレーションコード「リード／３２バイト」７１２ｃ、アドレス「1001_1111_1100_0011_1111_1100_1100_0000」７１３ｃ、ＣＲＣコード「ｃｃｃｃｃｃｃｃ」７１４ｃを有する。４つ目のパケットｐｋ４は、リクエストタグ「１００」７１１ｄ、オペレーションコード「リード／３２バイト」７１２ｄ、アドレス「1001_1111_1100_0011_1111_1110_1110_0000」７１３ｄ、ＣＲＣコード「ｄｄｄｄｄｄｄｄ」７１４ｄを有する。
【００７２】
メインメモリ２００は、分割対象外のリードリクエストも分割後のリードリクエストも、単独のリードリクエストとして同様に処理する。メインメモリ２００のＤＲＡＭコントローラユニット５０は、メモリコントローラ３０から図７、図８に示すパケットｐｋ０〜ｐｋ４を順次、受信する。ＤＲＡＭコントローラユニット５０は、受信したパケットｐｋ０〜ｐｋ４について、パケットｐｋ０〜ｐｋ４が含むデータを入力としてＣＲＣコードを算出し、パケットが有するＣＲＣコードと比較する。ＣＲＣコードが一致しない場合、ＤＲＡＭコントローラユニット５０は、リードリクエストの再送要求をメモリコントローラ３０に送信する。
【００７３】
ＣＲＣコードが一致する場合、ＤＲＡＭコントローラユニット５０は、リードリクエストに基づいてデータを読み出す。リードリクエストが分割され、対象とするデータのデータ長の１／ｍに短縮されている場合、ＤＲＡＭコントローラユニット５０は、より短い時間でＤＲＡＭ６０からデータを読み出すことができる。そして、ＤＲＡＭコントローラユニット５０は、読み出したリードデータと、リードデータを入力として算出したＣＲＣコードとを有する応答パケットを生成し、メモリコントローラ３０に送信する。リードリクエストが分割され、リードデータのデータ長が１／ｍに短縮されている場合、ＤＲＡＭコントローラユニット５０は、より少ないサイクルで、応答パケットをメモリコントローラ３０に送信できる。
【００７４】
［メモリコントローラの受信側］
次に、図２に示すメモリコントローラ３０における、リードリクエスト受信側の各部（応答データ受信部３４、リクエスト管理部３５）の処理を詳細に説明する。
【００７５】
図９は、図２に示すメモリコントローラ３０の応答データ受信部３４及びリクエスト管理部３５の詳細を説明する図である。応答データ受信部３４は、ＣＲＣ演算器４６、シフトレジスタ４２、４３、ＡＮＤ回路４１を有する。シフトレジスタ４２は、値「０」「１」を有するデータ有効フラグ４７を保持するレジスタである。応答データ受信部３４は、ＤＲＡＭコントローラユニット５０から、応答パケットを受信すると、データ有効フラグ４７を値「０」から値「１」に遷移させる。また、シフトレジスタ４３は、リードデータ８２、８３を、データ長分、保持する。
【００７６】
ここで、メモリコントローラ３０の応答データ受信部３４が、ＤＲＡＭコントローラユニット５０から受信する応答パケットの構成、及び、リードリクエストの一例を説明する。
【００７７】
図１０、図１１は、メモリコントローラ３０がＤＲＡＭコントローラユニット５０から受信する応答パケットを説明する図である。図１０は、メモリコントローラ３０がＤＲＡＭコントローラユニット５０から受信する応答パケットのフォーマットを示す図である。また、図１１は、メモリコントローラ３０がＤＲＡＭコントローラユニット５０から受信する応答パケットの一例を示す図である。
【００７８】
図１０に示すように、応答パケットは、Ｈｅａｄｅｒレコード８１と、１６バイトのリードデータを有する２つのデータレコード８２、８３と、Ｔａｉｌレコード８４のフォーマットからなる。図１０の応答パケットは、図６に示すパケットと同様に、Ｈｅａｄｅｒレコード及びＴａｉｌレコードからなる。また、図１０の応答パケット及び図６のパケットは、リクエストタグを有する。
【００７９】
Ｈｅａｄｅｒレコード８１は、リクエストタグ８１１、パケットのデータ長８１２を有する。リクエストタグ８１１は、リードデータが対応するリードリクエストに付与されたリクエストタグ（図６〜図８）７１１と同様の情報である。Ｔａｉｌレコード８４は、ＣＲＣコード８４１を有する。ＣＲＣコード８４１は、リードデータを入力として算出したＣＲＣ値である。
【００８０】
図１１は、図８に示す、分割して生成したリードリクエストに対応する応答パケットの一例を示す。図１１の１つ目の応答パケットｐｋ１１は、図８の１つ目のパケットｐｋ１に対応する応答パケットである。１つ目の応答パケットｐｋ１１は、リクエストタグ「００１」８１１ａ、データ長「４サイクル」８１２ａ、アドレス「1001_1111_1100_0011_1111_1010_1000_0000」からの３２バイトのリードデータを２つに分割した１６バイトの各リードデータ８２ａ、８３ａ、ＣＲＣコード「ｅｅｅｅｅｅｅｅ」８４ａを有する。データ長「４サイクル」８１２ａは、バースト転送時の応答パケットｐｋ１１のサイクル数を示す。ＣＲＣコード８４ａは、リードデータ８２ａ、８３ａを入力として算出したＣＲＣ値である。
【００８１】
図１１の２つ目の応答パケットｐｋ１２は、図８の２つ目のパケットｐｋ２に対応する応答パケットである。２つ目の応答パケットｐｋ１２は、リクエストタグ「０１０」８１１ｂ、データ長「４サイクル」８１２ｂ、アドレス「1001_1111_1100_0011_1111_1100_1010_0000」からの３２バイトのリードデータを２つに分割した１６バイトの各リードデータ８２ｂ、８３ｂ、ＣＲＣコード「ｆｆｆｆｆｆｆｆ」８４ｂを有する。ＣＲＣコード８４ｂは、リードデータ８２ｂ、８３ｂを入力として算出したＣＲＣ値である。同様にして、図１１の３つ目の応答パケットｐｋ１３は、図８の３つ目のパケットｐｋ３に対応する応答パケットであって、図１１の４つ目の応答パケットｐｋ１４は、図８の４つ目のパケットｐｋ４に対応する応答パケットである。
【００８２】
図９に戻り、ＣＲＣ演算器４６は、応答パケットｐｋ１１〜ｐｋ１４が有するリードデータ８２、８３のＣＲＣチェックを行う。ＣＲＣ演算器４６は、応答パケットｐｋ１１〜ｐｋ１４が含むリードデータ８２、８３と、応答パケットｐｋ１１〜ｐｋ１４が含むＣＲＣコード８４１とを入力とする。ＣＲＣ演算器４６は、リードデータ８２、８３を入力としてＣＲＣコードを算出する。そして、ＣＲＣ演算器４６は、算出したＣＲＣコードと、応答パケットｐｋ１１〜ｐｋ１４が含むＣＲＣコード８４１とを比較する。ＣＲＣ演算器４６は、ＣＲＣコードが一致する場合にＣＲＣ結果一致信号「１」５１を、一致しない場合にＣＲＣ結果一致信号「０」５１を、ＡＮＤ回路４１に出力する。また、一致しない場合、ＣＲＣ演算器４６は、ＤＲＡＭコントローラユニット５０に、応答パケットｐｋ１１〜ｐｋ１４の再送依頼５２を送信する。
【００８３】
応答パケットが分割して生成されたリードリクエストに対応する応答パケットである場合、ＣＲＣ演算器４６は、例えば、ＣＲＣコードが一致しない応答パケットについてのみ、応答パケットの再送依頼５２をＤＲＡＭコントローラユニット５０に送信する。なお、この場合、ＣＲＣ演算器４６は、例えば、ＣＲＣコードが一致しない応答パケットに加えて、同一の分割元リードリクエストに基づいて生成された他のリードリクエストに対応する応答パケットについても、再送依頼５２を送信してもよい。
【００８４】
ＡＮＤ回路４１は、ＣＲＣ結果一致信号５１とデータ有効フラグ４７との論理積を、データ有効フラグ９１として、キャッシュコントローラ２０に出力する。ＣＲＣ結果一致信号５１とデータ有効フラグ４７とがともに値「１」である場合に、ＡＮＤ回路４１は値「１」のデータ有効フラグ９１をキャッシュコントローラ２０に出力する。つまり、ＡＮＤ回路４１は、ＣＲＣコードが一致せず、ＣＲＣ結果一致信号５１が値「０」である場合には、値「０」のデータ有効フラグ９１をキャッシュコントローラ２０に出力する。
【００８５】
キャッシュコントローラ２０は、データ有効フラグ９１が値「１」に遷移することをトリガーとして、リードデータ９２（８２、８３）、データ分割情報９２、アドレス９３、リクエストＩＤ９４を取り込む。したがって、応答データ受信部３４は、ＣＲＣコードが一致しない場合、データ転送ミスが発生して値が変化したリードデータ９２（８２、８３）を、キャッシュコントローラ２０が取り込んでしまうことを抑止できる。
【００８６】
リクエスト管理部３５は、応答パケットｐｋ１１〜ｐｋ１４が含むリクエストタグ８１１を入力として、データ分割情報９２、アドレス９３、リクエストＩＤ９４を取得し、キャッシュコントローラ２０に出力する。データ分割情報９２は、リードデータ８２、８３に対応するリードリクエストが、分割して生成されたリクエストであるか否かを示す情報である。また、アドレス９３は、リードデータ８２、８３を読み出したＤＲＡＭ６０のアドレスを示す。リクエストＩＤ９４は、リードデータ８２、８３に対応するリードリクエストの要因を示す。また、リクエストＩＤ９４は、キャッシュコントローラ２０がリードリクエストの発行時に、リードリクエストに付与した情報（図４の６４）と同一である。
【００８７】
リクエスト管理部３５は、管理しているリードリクエストの情報に基づいて、リクエストタグ８１１を入力として、リードデータ８２、８３に対応するリードリクエストに分割元のリードリクエストが関連付けられているか否かを判定する。リクエストタグ８１１に分割元のリードリクエストが関連付けられている場合、リクエスト管理部３５は、データ分割情報９２を値「１」に設定する。また、リクエストタグ８１１に分割元のリードリクエストが関連付けられていない場合、リクエスト管理部３５は、データ分割情報９２を値「０」に設定する。
【００８８】
また、リクエスト管理部３５は、管理しているリードリクエストの情報に基づいて、リクエストタグ８１１を入力として、リードデータ８２、８３が対応するリードリクエストを特定する。そして、リクエスト管理部３５は、特定したリードリクエストのオペレーションコード及びアドレス９３及びリクエストＩＤ９４を取得する。そして、リクエスト管理部３５は、アドレス９３及びリクエストＩＤ９４を、キャッシュコントローラ２０に出力する。
【００８９】
図１２、図１３は、メモリコントローラ３０がキャッシュコントローラ２０に送信するリクエスト応答を説明する図である。図１２は、メモリコントローラ３０がキャッシュコントローラ２０に送信するリクエスト応答のフォーマットを示す図である。図１３は、メモリコントローラ３０がキャッシュコントローラ２０に送信するリクエスト応答の送信例を説明する図である。
【００９０】
図１２に示すように、キャッシュコントローラ２０に送信されるリクエスト応答は、データ有効フラグ９１、データ分割情報９２、アドレス９３、リクエストＩＤ９４、リードデータ９５のフォーマットからなる。データ分割情報９２、アドレス９３、リクエストＩＤ９４は、前述したとおりである。
【００９１】
図１３は、図１２で説明したリクエスト応答の送信例を示す。メモリコントローラ３０は、１サイクルで、データ有効フラグ９１、データ分割情報９２、アドレス９３、リクエストＩＤ９４を、キャッシュコントローラ２０に送信する。また、リードデータ９５のデータ長が３２バイトである場合（例えば、図１０、図１１）、メモリコントローラ３０は、リードデータ９５を２サイクルに分割して、キャッシュコントローラ２０に送信する。
【００９２】
キャッシュコントローラ２０は、データ有効フラグ９１が値「１」に遷移した場合に、データ分割情報９２、アドレス９３、リクエストＩＤ９４、リードデータ９５を取得する。キャッシュコントローラ２０は、例えば、データ分割情報９２が値「０」である場合、リードデータ９５が対応するリードリクエストが分割されていないリードリクエストである旨、判定する。
【００９３】
そして、キャッシュコントローラ２０は、リクエストＩＤ９４に基づいて、リードリクエストがＤＭＡ要求、プリフェッチのいずれに基づくかを判定する。ＤＭＡ要求に基づくと判定された場合、キャッシュコントローラ２０は、リードデータ９５をインタフェース部４０へ出力する。一方、プリフェッチに基づくと判定された場合、キャッシュコントローラ２０は、リードデータ９５を、キャッシュメモリ２１における、アドレス９３及びリクエストＩＤ９４に基づいて特定されたアドレスに記憶する。
【００９４】
また、データ分割情報９２が値「１」である場合、キャッシュコントローラ２０は、リードデータ９５が対応するリードリクエストが分割して生成されたリードリクエストである旨、判定する。そして、キャッシュコントローラ２０は、リードデータ９５を、キャッシュメモリ２１における、アドレス９３及びリクエストＩＤ９４に基づいて特定されたアドレスに記憶する。また、キャッシュコントローラ２０は、リードデータ９５が、プロセッサコア１０が演算の対象とするデータである場合、プロセッサコア１０に通知する。
【００９５】
図１４は、メモリコントローラ３０がキャッシュコントローラ２０に出力するリクエスト応答を説明するタイミングチャートである。図１４のタイミングチャート図は、図１３で説明したデータ有効フラグ９１、データ分割情報９２、アドレス９３、リクエストＩＤ９４、リードデータ９５に加えて、クロック信号ＣＫを有する。
【００９６】
図１４のタイミングチャート図によると、２クロック目ｔ１に、メモリコントローラ３０は、値「１」のデータ有効フラグ９１及びデータ分割情報９２、アドレス「1001_1111_1100_0011_1111_1100_1010_0000」９３、リクエストＩＤ「ｘｙｚｘｙｚｘｙ」９４、リードデータ「ＲＤ２」９５をキャッシュコントローラ２０に出力する。また、続く３クロック目ｔ２に、メモリコントローラ３０は、値「０」のデータ有効フラグ９１及びデータ分割情報９２、アドレス「1001_1111_1100_0011_1111_1100_1010_0000」９３、リクエストＩＤ「ｘｙｚｘｙｚｘｙ」９４、リードデータ「ＲＤ３」９５をキャッシュコントローラ２０に出力する。また、続く４クロック目では、メモリコントローラ３０は、リードデータ９５を出力していない。
【００９７】
したがって、キャッシュコントローラ２０は、２クロック目ｔ１にデータ有効フラグ９１が値「１」に遷移したことをトリガーとして、データ分割情報「１」９２、アドレス「1001_1111_1100_0011_1111_1100_1010_0000」９３、リクエストＩＤ「ｘｙｚｘｙｚｘｙ」９４、リードデータ「ＲＤ２、ＲＤ３」９５を取得する。そして、キャッシュコントローラ２０は、データ分割情報９２に基づいて、リードデータ「ＲＤ２、ＲＤ３」９５が分割して生成されたリードリクエストに基づく旨、判定する。また、キャッシュコントローラ２０は、リードデータ９５を記憶させるキャッシュメモリ２１のアドレスを判別し、キャッシュメモリ２１にリードデータ「ＲＤ２、ＲＤ３」９５を記憶する。
【００９８】
同様にして、キャッシュコントローラ２０は、５クロック目ｔ３に、データ有効フラグ９１が値「１」に遷移したことをトリガーとして、データ分割情報「１」９２、アドレス「1001_1111_1100_0011_1111_1100_1110_0000」９３、リクエストＩＤ「ｘｙｚｘｙｚｘｙ」９４、リードデータ「ＲＤ６、ＲＤ７」９５を取得する。そして、キャッシュコントローラ２０は、データ分割情報９２、アドレス９３、リクエストＩＤ９４に基づいて、キャッシュメモリ２１の対応するアドレスに、リードデータ「ＲＤ６」「ＲＤ７」９５を記憶する。
【００９９】
また、キャッシュコントローラ２０は、８クロック目ｔ４に、データ有効フラグ９１が値「１」に遷移したことをトリガーとして、データ分割情報「１」９２、アドレス「1001_1111_1100_0011_1111_1100_1100_0000」９３、リクエストＩＤ「ｘｙｚｘｙｚｘｙ」９４、リードデータ「ＲＤ４、ＲＤ５」９５を取得し、キャッシュメモリ２１の対応するアドレスに記憶する。また、キャッシュコントローラ２０は、１０クロック目ｔ５に、データ有効フラグ９１が値「１」に遷移したことをトリガーとして、データ分割情報「１」９２、アドレス「1001_1111_1100_0011_1111_1100_1000_0000」９３、リクエストＩＤ「ｘｙｚｘｙｚｘｙ」９４、リードデータ「ＲＤ０、ＲＤ１」９５を取得し、キャッシュメモリ２１の対応するアドレスに記憶する。
【０１００】
図１４に示すように、キャッシュコントローラ２０は、リードデータ「ＲＤ０、ＲＤ１」９５より先に、リードデータ「ＲＤ２、ＲＤ３」９５を受信することがある。即ち、分割して生成されたリードリクエストの処理順は、必ずしも、対象とするアドレスの順序に因らない。図１４の例において、プロセッサコア１０が演算対象とするデータが、例えば、「ＲＤ２、ＲＤ３」に該当する場合、プロセッサコア１０は、リードデータ「ＲＤ０〜ＲＤ７」全ての受信が完了する前に、演算処理を開始できる。
【０１０１】
これに対し、キャッシュミスヒットに基づくリードリクエストを分割しない場合、プロセッサコアは、リードデータ「ＲＤ０〜ＲＤ７」全ての受信が完了してから、演算対象のデータ「ＲＤ２、ＲＤ３」に基づいて演算処理を開始する。プロセッサコアのデータ「ＲＤ０〜ＲＤ７」の読み出しにかかるレイテンシは、データ「ＲＤ２、ＲＤ３」の読み出しにかかるレイテンシよりも大きい。したがって、本実施の形態例におけるプロセッサ１００は、キャッシュミスヒットに基づくリードリクエストを分割することによって、読み出し処理にかかるレイテンシを小さくすることができる。
【０１０２】
以上のように、本実施の形態例におけるプロセッサ（演算処理装置）１００は、メインメモリ（主記憶装置）２００に接続する演算処理装置において、データを記憶するキャッシュメモリ部２１と、キャッシュメモリ部に記憶されたデータに対して演算を行うプロセッサコア（演算部）１０と、キャッシュメモリ部を制御するとともに、主記憶装置が記憶するデータを読み出す第１の要求（リードリクエスト）を出力するキャッシュコントローラ（第１の制御部）２０とを有する。また、演算処理装置（プロセッサ）１００は、メインメモリ（主記憶装置）２００に接続されるとともに、キャッシュコントローラ（第１の制御部）２０が出力する第１の要求を分割した複数の第２の要求（リードリクエスト）をメインメモリ（主記憶装置）２００にそれぞれ送信するとともに、送信した複数の第２の要求に対応するデータをメインメモリ（主記憶装置）２００からそれぞれ受信して第１の制御部に送信するメモリコントローラ（第２の制御部）３０を有する。
【０１０３】
リードリクエストを分割することによって、分割後のリードリクエストに基づいて読み出されるデータ長が短くなる。したがって、メインメモリ２００におけるデータの読み出し時間が短くなるとともに、リードデータをプロセッサ１００にバースト転送するときのサイクル数が減少する。これにより、分割して生成される各リードリクエスト当たりのレイテンシを小さくすることができる。
【０１０４】
そして、プロセッサコア１０は、分割元のリクエストが対象とするキャッシュラインサイズのデータのうち、一部のデータのみを演算対象とすることが多い。分割して生成されるリードリクエストに基づいて読み出されるリードデータが演算対象のデータを含む場合、プロセッサコア１０は、レイテンシが小さい、分割後のリードリクエストに対応するリードデータの受信に応答して、演算処理を開始できる。したがって、プロセッサコア１０は、より早いタイミングで演算処理を開始できるため、効率的に演算処理を行うことができる。
【０１０５】
また、本実施の形態例におけるプロセッサのメモリコントローラ（第２の制御部）３０は、第１の要求（リードリクエスト）に基づいて、第１の要求が読み出し対象とするアドレス範囲を分割したアドレス範囲をそれぞれ読み出し対象とする第２の要求（リードリクエスト）を複数、生成する。これにより、メモリコントローラ３０は、第１の要求に基づいて、複数の第２の要求を生成できる。
【０１０６】
また、本実施の形態例におけるプロセッサのメモリコントローラ（第２の制御部）３０は、第１の要求（リードリクエスト）がキャッシュコントローラ（第１の制御部）２０が制御するキャッシュメモリ２１のミスヒットに基づく要求である場合に、複数の第２の要求（リードリクエスト）を生成してメインメモリ（主記憶装置）２００に送信する。また、メモリコントローラ（第２の制御部）３０は、第１の要求がプリフェッチまたはダイレクトメモリアクセスのいずれかに基づく要求である場合は、第１の要求をメインメモリ（主記憶装置）２００に送信する。
【０１０７】
メモリコントローラ３０は、データを分割することによって個々のリードリクエストのレイテンシを小さくする利点が小さいＤＭＡ要求及びプリフェッチに基づくリードリクエストを分割の対象としない。そして、メモリコントローラ３０は、データを分割することによって個々のリードリクエストのレイテンシを小さくする利点が大きい、キャッシュミスヒットに基づくリードリクエストを分割の対象とすることができる。
【０１０８】
また、本実施の形態例におけるプロセッサのメモリコントローラ（第２の制御部）３０は、プロセッサコア（演算部）１０の処理単位のサイズとキャッシュメモリ２１のキャッシュラインサイズとに基づいて設定される第１の要求の分割数（ｍ）に基づいて、分割数個の第２の要求を生成する。これにより、メモリコントローラ３０は、分割して生成した各リードリクエストのレイテンシを小さくするとともに、読み出したデータが演算対象の単位のデータを含む確率を高める適切な分割数に、リードリクエストを分割できる。
【０１０９】
また、本実施の形態例におけるプロセッサのキャッシュコントローラ（第１の制御部）２０は、第１の要求（リードリクエスト）がキャッシュメモリ２１のミスヒットに基づく要求である場合に、第２の要求に対応するデータをメインメモリ（主記憶装置）２００から受信してキャッシュメモリ２１に記憶させるとともに、第２の要求に対応するデータが、プロセッサコア（演算部）１０が演算の対象とする演算データである場合にプロセッサコア（演算部）１０に通知する。これにより、プロセッサコア１０は、分割して生成されたリードリクエストに基づいて、より早いタイミングで演算処理を開始できる。
【０１１０】
また、本実施の形態例におけるメインメモリ（主記憶装置）２００は、データを記憶する複数の記憶素子（ＤＲＡＭ）６０と、可変長のデータを読み出し対象とする第２の要求に応答して、複数の記憶素子に固定長のデータ単位にアクセスして可変長のデータを読み出してメモリコントローラ（第２の制御部）３０に送信するＤＲＡＭコントロールユニット（第３の制御部）５０と、を有する。
【０１１１】
これにより、メモリコントローラ３０は、分割元のリードリクエストとアクセスする対象データのデータ長が異なるリードリクエストを、メインメモリ２００に送信できる。
【０１１２】
また、本実施の形態例におけるプロセッサのメモリコントローラ（第２の制御部）３０は、メインメモリ（主記憶装置）２００から第１、第２の要求に対応するデータとともに当該データに基づく第１のＣＲＣコード（巡回冗長検査値）を受信し、受信した第１、第２の要求に対応するデータに基づいて第２のＣＲＣコード（巡回冗長検査値）を生成する。そして、メモリコントローラ（第２の制御部）３０は、第１のＣＲＣコード（巡回冗長検査値）と生成した第２のＣＲＣコード（巡回冗長検査値）とが一致する場合に、受信した第１、第２の要求に対応するデータが有効であると判定する。
【０１１３】
これにより、メモリコントローラ３０は、リードリクエストを分割することによってリードデータのデータ長を短縮し、ＣＲＣエラーの発生率を低下させることによって、ＣＲＣエラーによるリードデータの再送に伴う性能低下を抑制することができる。
【０１１４】
また、本実施の形態例におけるプロセッサのメモリコントローラ（第２の制御部）３０は、第２の要求とともに当該第２の要求と分割元の第１の要求とを関連付けるリクエストタグ（識別情報）をメインメモリ（主記憶装置）２００に送信する。そして、メモリコントローラ（第２の制御部）３０は、メインメモリ（主記憶装置）２００から第２の要求に対応するデータとともにリクエストタグ（識別情報）を受信し、リクエストタグ（識別情報）に基づいて受信したデータに対応する分割元の第１の要求を特定する。これにより、メモリコントローラ３０は、メインメモリ２００から受信したリードデータに対応する分割元のリードリクエストを特定できる。
【０１１５】
また、本実施の形態例におけるプロセッサのキャッシュコントローラ（第１の制御部）２０は、特定した分割元の第１の要求に基づいて、受信した第２の要求に対応するデータを記憶するキャッシュメモリ２１のアドレスを特定する。これによりメモリコントローラ３０は、リクエストタグに基づいて分割元のリードリクエストを特定することによって、リードデータを書き込むキャッシュメモリ２１のアドレスを特定できる。
【０１１６】
以上の実施の形態をまとめると、次の付記のとおりである。
【０１１７】
（付記１）
主記憶装置に接続する演算処理装置において、
データを記憶するキャッシュメモリ部と、
前記キャッシュメモリ部に記憶されたデータに対して演算を行う演算部と、
前記キャッシュメモリ部を制御するとともに、前記主記憶装置が記憶するデータを読み出す第１の要求を出力する第１の制御部と、
前記主記憶装置に接続されるとともに、前記第１の制御部が出力する第１の要求を分割した複数の第２の要求を前記主記憶装置にそれぞれ送信するとともに、送信した前記複数の第２の要求に対応するデータを前記主記憶装置からそれぞれ受信して前記第１の制御部に送信する第２の制御部を有することを特徴とする演算処理装置。
【０１１８】
（付記２）
付記１において、
前記第２の制御部は、前記第１の要求に基づいて、前記第１の要求が読み出し対象とするアドレス範囲を分割したアドレス範囲をそれぞれ読み出し対象とする前記第２の要求を複数、生成することを特徴とする演算処理装置。
【０１１９】
（付記３）
付記１または２において、
前記第２の制御部は、前記第１の要求が前記第１の制御部が制御するキャッシュメモリ部のミスヒットに基づく要求である場合に、前記複数の第２の要求を生成して前記主記憶装置に送信し、前記第１の要求がプリフェッチまたはダイレクトメモリアクセスのいずれかに基づく要求である場合は、前記第１の要求を前記主記憶装置に送信することを特徴とする演算処理装置。
【０１２０】
（付記４）
付記１乃至３のいずれかにおいて、
前記第２の制御部は、前記演算部の処理単位のサイズと前記キャッシュメモリ部のキャッシュラインサイズとに基づいて設定される前記第１の要求の分割数に基づいて、分割数個の第２の要求を生成することを特徴とする演算処理装置。
【０１２１】
（付記５）
付記３において、
前記第１の制御部は、前記第１の要求が前記キャッシュメモリ部のミスヒットに基づく要求である場合に、前記第２の要求に対応するデータを前記主記憶装置から受信して前記キャッシュメモリ部に記憶させるとともに、前記第２の要求に対応するデータが、前記演算部が演算の対象とする演算データである場合に前記演算部に通知することを特徴とする演算処理装置。
【０１２２】
（付記６）
付記１乃至５のいずれかにおいて、
前記主記憶装置は、前記データを記憶する複数の記憶素子と、可変長のデータを読み出し対象とする前記第２の要求に応答して、前記複数の記憶素子に固定長のデータ単位にアクセスして前記可変長のデータを読み出して前記第２の制御部に送信する第３の制御部と、を有することを特徴とする演算処理装置。
【０１２３】
（付記７）
付記１乃至６のいずれかにおいて、
前記第２の制御部は、前記主記憶装置から前記第１、第２の要求に対応するデータとともに当該データに基づく第１の巡回冗長検査値を受信し、前記受信した第１、第２の要求に対応するデータに基づいて第２の巡回冗長検査値を生成し、前記第１の巡回冗長検査値と前記生成した第２の巡回冗長検査値とが一致する場合に、前記受信した第１、第２の要求に対応するデータが有効であると判定することを特徴とする演算処理装置。
【０１２４】
（付記８）
付記１乃至７のいずれかにおいて、
前記第２の制御部は、前記第２の要求とともに当該第２の要求と分割元の第１の要求とを関連付ける識別情報を前記主記憶装置に送信し、前記主記憶装置から前記第２の要求に対応するデータとともに前記識別情報を受信し、前記識別情報に基づいて前記受信したデータに対応する分割元の第１の要求を特定することを特徴とする演算処理装置。
【０１２５】
（付記９）
付記８において、
前記第１の制御部は、前記特定した分割元の第１の要求に基づいて、前記受信した第２の要求に対応するデータを記憶する前記キャッシュメモリ部のアドレスを特定することを特徴とする演算処理装置。
【０１２６】
（付記１０）
主記憶装置と、前記主記憶装置に接続する演算処理装置とを有する情報処理装置において、
前記演算処理装置は、
データを記憶するキャッシュメモリ部と、
前記キャッシュメモリ部に記憶されたデータに対して演算を行う演算部と、
前記キャッシュメモリ部を制御するとともに、前記主記憶装置が記憶するデータを読み出す第１の要求を出力する第１の制御部と、
前記主記憶装置に接続されるとともに、前記第１の制御部が出力する第１の要求を分割した複数の第２の要求を前記主記憶装置にそれぞれ送信するとともに、送信した前記複数の第２の要求に対応するデータを前記主記憶装置からそれぞれ受信して前記第１の制御部に送信する第２の制御部を有することを特徴とする情報処理装置。
【０１２７】
（付記１１）
付記１０において、
前記第２の制御部は、前記第１の要求に基づいて、前記第１の要求が読み出し対象とするアドレス範囲を分割したアドレス範囲をそれぞれ読み出し対象とする前記第２の要求を複数、生成することを特徴とする情報処理装置。
【０１２８】
（付記１２）
付記１０または１１において、
前記第２の制御部は、前記第１の要求が前記第１の制御部が制御するキャッシュメモリ部のミスヒットに基づく要求である場合に、前記複数の第２の要求を生成して前記主記憶装置に送信し、前記第１の要求がプリフェッチまたはダイレクトメモリアクセスのいずれかに基づく要求である場合は、前記第１の要求を前記主記憶装置に送信することを特徴とする情報処理装置。
【０１２９】
（付記１３）
付記１０乃至１２のいずれかにおいて、
前記第２の制御部は、前記演算部の処理単位のサイズと前記キャッシュメモリ部のキャッシュラインサイズとに基づいて設定される前記第１の要求の分割数に基づいて、分割数個の第２の要求を生成することを特徴とする情報処理装置。
【０１３０】
（付記１４）
付記１２において、
前記第１の制御部は、前記第１の要求が前記キャッシュメモリ部のミスヒットに基づく要求である場合に、前記第２の要求に対応するデータを前記主記憶装置から受信して前記キャッシュメモリ部に記憶させるとともに、前記第２の要求に対応するデータが、前記演算部が演算の対象とする演算データである場合に前記演算部に通知することを特徴とする情報処理装置。
【０１３１】
（付記１５）
付記１０乃至１４のいずれかにおいて、
前記主記憶装置は、前記データを記憶する複数の記憶素子と、可変長のデータを読み出し対象とする前記第２の要求に応答して、前記複数の記憶素子に固定長のデータ単位にアクセスして前記可変長のデータを読み出して前記第２の制御部に送信する第３の制御部と、を有することを特徴とする情報処理装置。
【０１３２】
（付記１６）
主記憶装置に接続するとともに、データを記憶するキャッシュメモリ部と、前記キャッシュメモリ部に記憶されたデータに対して演算を行う演算部を有する演算処理装置の制御方法において、
前記演算処理装置が有する第１の制御部が、前記キャッシュメモリ部を制御するとともに、前記主記憶装置が記憶するデータを読み出す第１の要求を出力し、
前記演算処理装置が有する、前記主記憶装置に接続された第２の制御部が、前記第１の制御部が出力する第１の要求を分割した複数の第２の要求を前記主記憶装置にそれぞれ送信し、
前記第１の制御部が送信した前記複数の第２の要求に対応するデータを、前記第２の制御部が前記主記憶装置からそれぞれ受信して前記第１の制御部に送信することを特徴とする演算処理装置の制御方法。
【０１３３】
（付記１７）
付記１６において、
前記第２の制御部は、前記第１の要求に基づいて、前記第１の要求が読み出し対象とするアドレス範囲を分割したアドレス範囲をそれぞれ読み出し対象とする前記第２の要求を複数、生成することを特徴とする演算処理装置の制御方法。
【０１３４】
（付記１８）
付記１６または１７において、
前記第２の制御部は、前記第１の要求が前記第１の制御部が制御するキャッシュメモリ部のミスヒットに基づく要求である場合に、前記複数の第２の要求を生成して前記主記憶装置に送信し、前記第１の要求がプリフェッチまたはダイレクトメモリアクセスのいずれかに基づく要求である場合は、前記第１の要求を前記主記憶装置に送信することを特徴とする演算処理装置の制御方法。
【０１３５】
（付記１９）
付記１６乃至１８のいずれかにおいて、
前記第２の制御部は、前記演算部の処理単位のサイズと前記キャッシュメモリ部のキャッシュラインサイズとに基づいて設定される前記第１の要求の分割数に基づいて、分割数個の第２の要求を生成することを特徴とする演算処理装置の制御方法。
【０１３６】
（付記２０）
付記１６乃至１９のいずれかにおいて、
前記主記憶装置の第３の制御部が、可変長のデータを読み出し対象とする前記第２の要求に応答して、前記前記データを記憶する複数の記憶素子に固定長のデータ単位にアクセスし、前記可変長のデータを読み出して、前記第２の制御部に送信することを特徴とする演算処理装置の制御方法。
【符号の説明】
【０１３７】
１００：プロセッサ（演算処理装置）、２００：メインメモリ（主記憶装置）、１０：プロセッサコア１０（演算部）、２０：キャッシュコントローラ（第１の制御部）、２１：キャッシュメモリ、３０：メモリコントローラ（第２の制御部）、４０：インタフェース部、５０：ＤＲＡＭコントロールユニット（第３の制御部）、６０：ＤＲＡＭ（複数の記憶素子）
【図１】
2015219813.tif 000003
【図２】
2015219813.tif 000004
【図３】
2015219813.tif 000005
【図４】
2015219813.tif 000006
【図５】
2015219813.tif 000007
【図６】
2015219813.tif 000008
【図７】
2015219813.tif 000009
【図８】
2015219813.tif 000010
【図９】
2015219813.tif 000011
【図１０】
2015219813.tif 000012
【図１１】
2015219813.tif 000013
【図１２】
2015219813.tif 000014
【図１３】
2015219813.tif 000015
【図１４】
2015219813.tif 000016