(57)【特許請求の範囲】
【請求項１】
演算処理装置、記憶装置及びメモリ制御装置を有する情報処理装置であって、
前記演算処理装置は、前記記憶装置に対する読出要求及び書込要求を出力し、
前記記憶装置は、受信した前記読出要求又は前記書込要求に応じて処理を行い、処理完了後に応答を出力し、
前記メモリ制御装置は、
前記記憶装置に接続する複数の出力経路）と、
前記読出要求又は前記書込要求を前記演算処理装置から受信する受信部と、
各前記出力経路に既に送信され且つ前記応答を受信していない送信済み読出要求及び送信済み書込要求の数を基に、前記送信済み読出要求及び前記送信済み書込要求に対する前記応答を受信するまでの所要時間を前記出力経路毎に算出し、前記所要時間を基に使用出力経路を選択する選択部と、
前記受信部が受信した前記読出要求又は前記書込要求を、前記使用出力経路を介して前記記憶装置に送信する送信部と、
前記記憶装置からの前記読出要求又は前記書込要求に対する前記応答を前記使用出力経路を介して受信する応答受信部とを備えた
ことを特徴とする情報処理装置。
【請求項２】
前記選択部は、前記出力経路毎に、前記送信済み書込要求に対する前記応答の受信にかかる時間に、前記送信済み書込要求の数を乗算した結果と、前記送信済み読出要求に対する前記応答の受信にかかる時間に、前記送信済み読出要求の数を乗算した結果とを加算して、各前記出力経路の前記所要時間を算出することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記選択部は、前記出力経路の中に前記送信済み読出要求及び前記送信済み書込要求のいずれも有さない未使用経路が１つ存在する場合、前記未使用経路を前記使用出力経路として選択することを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
前記選択部は、前記受信部が前記書込要求を受信した場合、前記所要時間が最も短い前記出力経路を前記使用出力経路として選択することを特徴とする請求項１〜３のいずれか一つに記載の情報処理装置。
【請求項５】
前記選択部は、前記受信部が前記読出要求を受信した場合、前記所要時間が最も長い前記出力経路を前記使用出力経路として選択することを特徴とする請求項１〜４のいずれか一つに記載の情報処理装置。
【請求項６】
前記記憶装置は、データを格納する場所を表すアドレスを有し、
前記演算処部は、前記書込要求及び前記読出要求で対象となる前記アドレスを指定し、
前記受信部は、受信した前記書込要求及び前記読出要求を格納し、
前記送信部は、前記受信部に格納された前記書込要求及び前記読出要求を送信し、且つ、特定の送信済み書込要求で指定されたアドレスと同じアドレスに対する前記書込要求又は前記読出要求は、前記特定の送信済み書込要求の処理が完了するまで送信しないことを特徴とする請求項１〜５のいずれか一つに記載の情報処理装置。
【請求項７】
記憶装置に接続する複数の出力経路と、
前記記憶装置に対する読出要求又は書込要求を演算処理装置から受信する受信部と、
各前記出力経路に既に送信され且つ前記記憶装置からの応答を受信していない送信済み読出要求及び送信済み書込要求の数を基に、前記送信済み読出要求及び前記送信済み書込要求に対する前記応答を受信するまでの所要時間を前記出力経路毎に算出し、前記所要時間を基に使用出力経路を選択する選択部と、
前記受信部が受信した前記読出要求又は前記書込要求を、前記使用出力経路を介して前記記憶装置に送信する送信部と、
前記記憶装置からの前記読出要求又は前記書込要求に対する前記応答を前記使用出力経路を介して受信する応答受信部と
を備えたことを特徴とするメモリ制御装置。
【請求項８】
演算処理装置、記憶装置及びメモリ制御装置を有する情報処理装置の制御方法であって、
前記演算処理装置に、読出要求及び書込要求を前記記憶装置に対して出力させ、
前記メモリ制御装置に、前記読出要求又は前記書込要求を受信させ、前記記憶装置に接続する複数の出力経路に既に送信され且つ前記記憶装置からの応答を受信していない送信済み読出要求及び送信済み書込要求の数を基に、前記送信済み読出要求及び前記送信済み書込要求に対する前記応答を受信するまでの所要時間を前記出力経路毎に算出させ、前記所要時間を基に使用出力経路を選択させ、受信した前記読出要求又は前記書込要求を、前記使用出力経路を介して前記記憶装置に送信させ、
前記記憶装置に、前記使用出力経路を介して受信した前記読出要求又は前記書込要求に応じて処理を行わせ、処理完了後に応答を出力させ、
前記メモリ制御装置に、前記記憶装置からの前記読出要求又は前記書込要求に対する前記応答を前記使用出力経路を介して受信させる
ことを特徴とする情報処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、メモリ制御装置及び情報処理装置の制御方法に関する。
【背景技術】
【０００２】
近年、ＨＰＣ（High  Performance  Computing）、サーバ、ＰＣ（Personal  Computer）、携帯電話などの情報処理装置に搭載されるプロセッサは、製造プロセスの細分化が進み、プロセッサあたりの計算速度はますます向上してきている。このようなプロセッサの計算速度向上にしたがい、主記憶装置においても容量や帯域幅が拡大していくことが好ましい。
【０００３】
このようなメモリの性能向上に対応するために、様々な技術が提案されてきている。例えば、最近では、従来採用されてきたＤＩＭＭ（Dual  Inline  Memory  Module）に変わる素子として、ＨＭＣ（Hybrid  Memory  Cube）に代表されるＤＲＡＭ（Dynamic  Random  Access  Memory）コントロール素子を内蔵したメモリ素子が開発されている。
【０００４】
ＨＭＣは、ＤＲＡＭの積層化技術により、実装密度を向上させることで、大容量化を達成している。また、ＨＭＣは、複数のメモリコントローラを内蔵し、且つ、ＣＰＵ（Central  Processing  Unit）とメモリとの間のインタフェースに高速シリアル通信を採用することで、広帯域を実現している。
【０００５】
さらに、ＨＭＣは、ＣＰＵと接続するためのインタフェースを複数有している。そして、接続するインタフェースの数に比例して合計のバンド幅が大きくなり、すべてのインタフェースを用いた場合に、ＨＭＣに搭載されたメモリは、最大性能を発揮する。
【０００６】
ＨＭＣでは、メモリのアドレスに応じて、そのアドレス空間の制御を行うメモリコントローラが割り当てられている。そして、ＨＭＣは、上述のように複数のインタフェースを有しており、それぞれのインタフェースはスイッチを介してメモリコントローラに接続している。インタフェースは、スイッチで接続される経路によりレイテンシに差がある。各メモリに対して、そのメモリを管理するメモリコントローラとの間でレイテンシがより小さくなるインタフェースが、直属インタフェースとして割り当てられる場合がある。この直属のインタフェースを用いてメモリにアクセスすると、レイテンシが少なくなるため、従来は、アクセスするアドレスによりどのインタフェースにアクセスするかを振り分ける方法が一般的であった。
【０００７】
なお、メモリの制御技術として、マルチポートのメモリにおいて、処理要求のＱｏＳパラメータに応じて、各ポートで受信した処理要求の処理順序を決定する従来技術がある。また、メモリへの処理要求を格納するキューとそのキューを迂回する短絡路を設けて、直接メモリに処理要求を送る場合に短絡路を用いて処理要求をメモリへ送信する従来技術がある。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１２−７４０４２号公報
【特許文献２】特開平０７−２５３９２３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、レイテンシに基づくアドレスを用いた処理要求の振り分けでは、アクセスが特定のインタフェースに集中するおそれがある。その場合、他のインタフェースへのアクセスが減り、メモリの合計のバンド幅が減ってしまうおそれがある。そのため、従来のレイテンシに応じた処理要求の振り分けでは、メモリ性能の効率的な利用は困難であった。
【００１０】
また、処理要求のＱｏＳパラメータに応じて処理要求の処理順序を変更する従来技術やキューを迂回する短絡路を設ける従来技術を用いても、インタフェースへのアクセスを平準化することは困難であり、メモリ性能を効率的に利用することは困難である。
【００１１】
開示の技術は、上記に鑑みてなされたものであって、メモリの性能を効率的に利用する情報処理装置、メモリ制御装置及び情報処理装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
本願の開示する情報処理装置、メモリ制御装置及び情報処理装置の制御方法は、一つの態様において、演算処理装置、記憶装置及びメモリ制御装置を有する。前記演算処理装置は、前記記憶装置に対する読出要求及び書込要求を出力する演算処理部を備える前記記憶装置は、受信した前記読出要求又は前記書込要求に応じて処理を行い、処理完了後に応答を出力する処理部を備える。前記メモリ制御装置は、以下の各部を備える。複数の出力経路は、前記記憶装置に接続する。受信部は、前記読出要求又は前記書込要求を前記演算処理装置から受信する。選択部は、各前記出力経路に既に送信され且つ前記応答を受信していない送信済み読出要求及び送信済み書込要求の数を基に、前記送信済み読出要求及び前記送信済み書込要求に対する前記応答を受信するまでの所要時間を前記出力経路毎に算出する。選択部は、前記所要時間を基に使用出力経路を選択する。送信部は、前記受信部が受信した前記読出要求又は前記書込要求を、前記使用出力経路を介して前記記憶装置に送信する。応答受信部は、前記記憶装置からの前記読出要求又は前記書込要求に対する前記応答を前記使用出力経路を介して受信する。
【発明の効果】
【００１３】
本願の開示する情報処理装置、メモリ制御装置及び情報処理装置の制御方法の一つの態様によれば、メモリの性能を効率的に利用することができるという効果を奏する。
【図面の簡単な説明】
【００１４】
【図１】図１は、実施例１に係る情報処理装置のブロック図である。
【図２】図２は、ＨＭＣの詳細を表すブロック図である。
【図３】図３は、実施例１に係る情報処理装置によるコマンド発行処理のフローチャートである。
【図４】図４は、実施例２に係る情報処理装置のブロック図である。
【図５】図５は、実施例２に係る情報処理装置によるリクエストの処理順序の保証処理のフローチャートである。
【発明を実施するための形態】
【００１５】
以下に、本願の開示する情報処理装置、メモリ制御装置及び情報処理装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する情報処理装置、メモリ制御装置及び情報処理装置の制御方法が限定されるものではない。
【実施例１】
【００１６】
図１は、実施例１に係る情報処理装置のブロック図である。図１に示すように、本実施例に係る情報処理装置１００は、プロセッサ１、メモリコントローラ２及びＨＭＣ３を有する。
【００１７】
プロセッサ１は、ＨＭＣ３からのデータの読出要求（以下、「リードリクエスト」という。）をメモリコントローラ２へ出力する。その後、プロセッサ１は、出力したリードリクエストの応答であるリードレスポンスをメモリコントローラ２から受信する。
【００１８】
また、プロセッサ１は、ＨＭＣ３へのデータの書込要求（以下、「ライトリクエスト」という。）をメモリコントローラ２へ出力する。その後、プロセッサ１は、出力したライトリクエストの応答としてライトレスポンスをメモリコントローラ２から受信する。以下では、ライトリクエスト及びリードリクエストをまとめて、「リクエスト」と呼ぶ。このプロセッサ１が、「演算処理装置」の一例にあたる。
【００１９】
メモリコントローラ２は、リクエストキュー２１、送信部２２、Ｉ／Ｆ（Interface）選択部２３、レスポンス管理部２４、並びに、Ｉ／Ｆ２５及び２６を有する。ここで、本実施例では、Ｉ／Ｆが２つの場合で説明するが、メモリコントローラ２は、２つ以上のＩ／Ｆを備えていれば、Ｉ／Ｆの数はいくつでもよい。例えば、メモリコントローラ２は、４つ又は８つのＩ／Ｆを有してもよい。このメモリコントローラ２が、「メモリ制御装置」の一例にあたる。またＩ／Ｆ２５及び２６が、「複数の出力経路」の一例にあたる。
【００２０】
リクエストキュー２１は、リクエストをプロセッサ１から受信する。そして、リクエストキュー２１は、受信したリクエストを古いリクエストが前になるようにキューに蓄積する。
【００２１】
さらに、リクエストキュー２１は、キューに格納したリクエストのうち先頭のリクエストを送信部２２に送信する。このリクエストキュー２１が、「受信部」の一例にあたる。
【００２２】
送信部２２は、リクエストをリクエストキュー２１から取得する。次に、送信部２２は、取得したリクエストがリードリクエスト又はライトリクエストのいずれの種類のリクエストであるかをＩ／Ｆ選択部２３へ送信する。その後、送信部２２は、Ｉ／Ｆ選択部２３が選択したＩ／Ｆの情報を受信する。ここでは、Ｉ／Ｆ２５がＩ／Ｆ選択部２３により選択された場合で説明する。
【００２３】
さらに、送信部２２は、リクエストが指定するアドレスの取得要求をＩ／Ｆ選択部２３から受けた場合、リクエストが指定するアドレスをＩ／Ｆ選択部２３へ出力する。
【００２４】
そして、送信部２２は、取得したリクエストを、Ｉ／Ｆ選択部２３により選択されたＩ／Ｆ２５を経由させてＨＭＣ３へ送信する。その後、送信部２２は、送信したリクエストの識別情報をレスポンス管理部２４へ送信する。ここで、リクエストの識別情報とは、例えば、送信部２２が送信するリクエストのタグである。
【００２５】
Ｉ／Ｆ選択部２３は、リクエストの種類の情報をリクエスト送信部２２から受信する。次に、Ｉ／Ｆ選択部２３は、Ｉ／Ｆ２５及び２６のそれぞれにおける、リードレスポンスの待ち数とライトレスポンスの待ち数とをレスポンス管理部２４から受信する。
【００２６】
ここで、ライトレスポンスとは、ライトリクエストに応じたライトコマンドを送信部２２がＨＭＣ３へ発行した場合の、そのライトコマンドに対するＨＭＣ３からの応答である。そして、ライトレスポンスの待ち数とは、ライトコマンドをＨＭＣ３へ送信部２２が発行した後、そのライトコマンドに対応するライトレスポンスをレスポンス管理部２４が受けていない状態のライトリクエストの数である。この発行済みのライトレスポンスが、「送信済み書込要求」の一例にあたる。
【００２７】
また、リードレスポンスとは、リードリクエストに応じたリードコマンドを送信部２２がＨＭＣ３へ発行した場合の、そのリードコマンドに対するＨＭＣ３からの応答である。そして、リードレスポンスの待ち数とは、リードコマンドをＨＭＣ３へ送信部２２が発行した後、そのリードコマンドに対応するリードレスポンスをレスポンス管理部２４が受けていない状態のリードリクエストの数である。この発行済みのリードレスポンスが、「送信済み読出要求」の一例にあたる。
【００２８】
ここで、Ｉ／Ｆ選択部２３は、ライトレスポンスの取得にかかるサイクル数、及びリードレスポンスの取得にかかるサイクル数を記憶している。
【００２９】
ライトリクエストの発行にかかるサイクル数は、コマンドを送出するサイクル数と、データを送出するサイクル数の和である。この場合、ライトリクエストの発行にかかるサイクル数は、コマンドの１サイクルとデータの８サイクルを加算して９サイクルとなる。
【００３０】
ライトレスポンスの取得にかかるサイクル数は、コマンドを受信するサイクル数のみである。ここで、レスポンス管理部２４が１パケットを受信するのに１サイクルかかる。そして、コマンドは、１パケットである。すなわち、ライトレスポンスの取得にかかるサイクル数は１サイクルとなる。
【００３１】
また、リードレスポンスの取得にかかるサイクル数は、コマンドを受信するサイクル数と、データを受信するサイクル数の和である。また、１回のリードレスポンスで送られるパケット数は情報処理装置１００に応じて予め決められている。本実施例では、１回のリードレスポンスで送られるパケット数が８パケットの場合で説明する。この場合、リードレスポンスの取得にかかるサイクル数は、コマンドの１サイクルとデータの８サイクルを加算して９サイクルとなる。
【００３２】
また、Ｉ／Ｆ選択部２３は、Ｉ／Ｆ２５及び２６のそれぞれのライトコマンドの発行状態を送信部２２から取得する。Ｉ／Ｆ選択部２３は、Ｉ／Ｆ２５及び２６のいずれもライトコマンドの発行中の場合、１サイクル待機し、再度Ｉ／Ｆ２５及び２６のコマンド発行状態を取得する。
【００３３】
これに対して、Ｉ／Ｆ２５又は２６のいずれか一方がライトコマンドの発行中でない場合、Ｉ／Ｆ選択部２３は、ライトコマンドを発行していないＩ／Ｆをコマンドを送信するＩ／Ｆとして選択する。このライトコマンドを発行していないＩ／Ｆが、「未使用経路」の一例にあたる。また、コマンドを送信するＩ／Ｆが、「使用出力経路」の一例にあたる。
【００３４】
一方、Ｉ／Ｆ２５及び２６の双方がライトコマンドの発行中でない場合、Ｉ／Ｆ選択部２３は、コマンドを送信するＩ／Ｆの選択処理を行う。具体的には、Ｉ／Ｆ選択部２３は、レスポンス管理部２４から受信したＩ／Ｆ２５及び２６のそれぞれにおけるリードレスポンスの待ち数にリードレスポンスの取得にかかるサイクル数を乗算し、全てのリードレスポンスの取得に係るサイクル数を算出する。また、Ｉ／Ｆ選択部２３は、レスポンス管理部２４から受信したＩ／Ｆ２５及び２６のそれぞれにおけるライトレスポンスの待ち数にライトレスポンスの取得にかかるサイクル数を乗算し、全てのライトレスポンスの取得に係るサイクル数を算出する。
【００３５】
次に、Ｉ／Ｆ選択部２３は、Ｉ／Ｆ２５における全てのリードレスポンスの取得に係るサイクル数と全てのライトレスポンスの取得に係るサイクル数とを合計し、Ｉ／Ｆ２５における全てのリクエストのレスポンスの取得に係るサイクル数の合計を算出する。また、Ｉ／Ｆ選択部２３は、Ｉ／Ｆ２６における全てのリードレスポンスの取得に係るサイクル数と全てのライトレスポンスの取得に係るサイクル数とを合計し、Ｉ／Ｆ２６における全てのリクエストのレスポンスの取得に係るサイクル数の合計を算出する。
【００３６】
Ｉ／Ｆ２５における全てのリクエストのレスポンスの取得に係るサイクル数の合計とＩ／Ｆ２６における全てのリクエストのレスポンスの取得に係るサイクル数の合計とが等しい場合、Ｉ／Ｆ選択部２３は、リクエストが指定するアドレスを送信部２２から取得する。ここで、Ｉ／Ｆ選択部２３は、各メモリに対する直属のＩ／ＦがＩ／Ｆ２５又は２６のいずれであるかを予め記憶している。ここで、直属のＩ／Ｆには、各メモリに対する読み書きのレイテンシが最も小さいＩ／Ｆが割り当てられる。Ｉ／Ｆ選択部２３は、Ｉ／Ｆ２５又は２６の中から取得したアドレスを有するメモリの直属のＩ／Ｆを特定し、特定したＩ／Ｆをコマンドを送信するＩ／Ｆとして選択する。
【００３７】
そして、Ｉ／Ｆ選択部２３は、送信部２２が受信したリクエストがライトリクエストの場合、Ｉ／Ｆ２５及びＩ／Ｆ２６のうち、全てのリクエストのレスポンスの取得に係るサイクル数の合計が小さい方をコマンドを送信するＩ／Ｆとして選択する。
【００３８】
また、Ｉ／Ｆ選択部２３は、送信部２２が受信したリクエストがリードリクエストの場合、Ｉ／Ｆ２５及びＩ／Ｆ２６のうち、全てのリクエストのレスポンスの取得に係るサイクル数の合計が大きい方をコマンドを送信するＩ／Ｆとして選択する。このＩ／Ｆ選択部２３が、「選択部」の一例にあたる。
【００３９】
ここで、ライトリクエストの送信にかかるサイクル数は、コマンドを送信するサイクル数と、データを送信するサイクル数との和である。ここで、送信部２２が１パケットを送るのに１サイクルかかる。そして、１回のライトリクエストで送信するパケット数は、１回のリードレスポンスで送られるパケット数と同じである。そこで、リードレスポンスの取得にかかるサイクル数は、コマンドの１サイクルとデータの８サイクルを加算して９サイクルとなる。
【００４０】
また、リードリクエストの送信にかかるサイクル数は、コマンドを送信するサイクル数のみである。すなわち、リードリクエストの送信にかかるサイクル数は１サイクルとなる。
【００４１】
このように、ライトリクエストの送信には、リードリクエストの送信に比べて長い時間がかかる。そこで、ライトリクエストは、既に送信されたリクエストの処理が完了するまでの時間が長いＩ／Ｆへ送出し、リードリクエストは、既に送信されたリクエストの処理が完了するまでの時間が短いＩ／Ｆへ送出する。これにより、Ｉ／Ｆ２５及びＩ／Ｆ２６の使用率を平準化できる。
【００４２】
レスポンス管理部２４は、ＨＭＣ３から送信されたライトレスポンス又はリードレスポンスをＩ／Ｆ２５又はＩ／Ｆ２６を介して受信する。ここで、レスポンス管理部２４がレスポンスの取得に用いるＩ／Ｆは、そのレスポンスの元となるコマンドを送信するのに送信部２２が用いたＩ／Ｆと一致する。
【００４３】
さらに、レスポンス管理部２４は、送信したリクエストの識別情報を送信部２２から受信する。次に、レスポンス管理部２４は、受信したレスポンスの情報を用いて、ライトレスポンスの待ち数及びリードレスポンスの待ち数を求める。そして、レスポンス管理部２４は、ライトレスポンスの待ち数及びリードレスポンスの待ち数をＩ／Ｆ選択部２３へ送信する。このレスポンス管理部２４が、「応答受信部」の一例にあたる。
【００４４】
ＨＭＣ３は、図２に示すようにリンク３１及び３２、スイッチ３３、メモリコントローラ３０１〜３０４及びメモリ３１１〜３１４を有している。このＨＭＣ３が、「記憶措置」の一例にあたる。図２は、ＨＭＣの詳細を表すブロック図である。
【００４５】
メモリ３１１〜３１４は、例えばＤＲＡＭである。そして、メモリ３１１〜３１４は、それぞれ異なるアドレスが割り当てられている。以下では、メモリ３１１〜３１４のそれぞれを区別しない場合、「メモリ３１０」という。
【００４６】
メモリコントローラ３０１〜３０４は、それぞれメモリ３１１〜３１４に接続されて、接続されたメモリを管理する。以下では、メモリコントローラ３０１〜３０４のそれぞれを区別しない場合、「メモリコントローラ３００」という。メモリコントローラ３００は、ライトリクエスト及びリードリクエストを受けて、管理するメモリ３１０に対してデータの読み書きを行う。
【００４７】
ライトリクエストの場合、メモリコントローラ３００は、管理するメモリ３１０への書き込み処理が完了すると、処理完了を通知するレスポンスをコマンドの送信元のリンク３１又は３２に送信する。また、リードリクエストの場合、メモリコントローラ３００は、管理するメモリ３１０への書き込み処理が完了すると、読み出したデータを送信するレスポンスをコマンドの送信元のリンク３１又は３２に送信する。
【００４８】
スイッチ３３は、リンク３１及び３２とメモリコントローラ３００との接続経路を切り替えるスイッチである。スイッチ３３は、例えばリンク３１にコマンドが入力された場合、そのコマンドで指定されたアドレスを有するメモリ３１０に接続するメモリコントローラ３００に、リンク３１が接続するように接続を切り替える。
【００４９】
リンク３１は、Ｉ／Ｆ２５と接続するためのＨＭＣ３のインタフェースである。リンク３２は、Ｉ／Ｆ２６と接続するためのＨＭＣ３のインタフェースである。ここでは、リンク３１を例に説明する。リンク３１は、Ｉ／Ｆ２５又は２６を介して送信部２２から送られたコマンドを受信する。そして、リンク３１は、コマンドで指定されたアドレスを有するメモリ３１０を管理するメモリコントローラ３００に接続するようにスイッチ３３を切り替える。そして、リンク３１は、受信したコマンドをスイッチ３３を介してメモリコントローラ３００へ送信する。
【００５０】
その後、リンク３１は、送信したコマンドに対するレスポンスをメモリコントローラ３００から受信する。具体的には、ライトリクエストの場合、リンク３１は、処理完了の通知のレスポンスを受信する。また、リードリクエストの場合、リンク３１は、リードコマンドにしたがいメモリ３１０から読み出されたデータを受信する。そして、リンク３１は、受信したレスポンスをメモリコントローラ２へ送信する。
【００５１】
ここで、リンク３１及び３２は各メモリコントローラ３００との接続経路の距離に差がある。そして、通常は通信距離が短いほどレイテンシは短くなる。すなわち、リンク３１及び３２は、それぞれ最もレイテンシが短くなるメモリコントローラ３００を有する。メモリコントローラ３００は、メモリ３１０に一対一に対応しているので、各メモリ３１０は、リンク３１及び３２のうち最もレイテンシが短いリンク有する。そして、リンク３１はＩ／Ｆ２５に対応し、リンク３２はＩ／Ｆ２６に対応する。すなわち、各メモリ３１０は、それぞれ最もレイテンシが短いＩ／Ｆを有する。そこで、本実施例では、各メモリ３００に対して、最もレイテンシが短いＩ／Ｆを直属のＩ／Ｆとして割り当てられている。例えば、本実施例では、メモリ３１１及び３１２には、Ｉ／Ｆ２５が直属のＩ／Ｆとして割り当てられている。また、メモリ３１３及び３１４には、Ｉ／Ｆ２６が直属のＩ／Ｆとして割り当てられている。
【００５２】
次に、図３を参照して、本実施例に係る情報処理装置によるコマンド発行処理の流れについて説明する。図３は、実施例１に係る情報処理装置によるコマンド発行処理のフローチャートである。ここでは、Ｉ／Ｆ２５及び２６のそれぞれを区別しない場合、「Ｉ／Ｆ２０」という。
【００５３】
リクエストキュー２１が、プロセッサ１から出力されたリクエストを受信する（ステップＳ１）。
【００５４】
受信されたリクエストがリクエストキュー２１に格納される（ステップＳ２）。
【００５５】
送信部２２は、リクエストキュー２１の先頭からリクエストを取得する（ステップＳ３）。さらに、送信部２２は、取得したリクエストの種類をＩ／Ｆ選択部２３に送信する。
【００５６】
Ｉ／Ｆ選択部２３は、Ｉ／Ｆ２５及び２６の双方がライトコマンドを発行中か否かを判定する（ステップＳ４）。双方がライトコマンドを発行中の場合（ステップＳ４：肯定）、Ｉ／Ｆ選択部２３は、１サイクル待機し（ステップＳ５）、ステップＳ４へ戻る。
【００５７】
これに対して、少なくともいずれか一方がライトコマンドを発行していない場合（ステップＳ４：否定）、Ｉ／Ｆ選択部２３は、ライトコマンドを発行中でないＩ／Ｆ２０が１つのみか否かを判定する（ステップＳ６）。ライトコマンドを発行中のＩ／Ｆ２０が１つのみの場合（ステップＳ６：肯定）、Ｉ／Ｆ選択部２３は、ライトコマンドを発行中でないＩ／Ｆ２０を、コマンドを送信するＩ／Ｆとして選択する（ステップＳ７）。その後、処理はステップＳ１５へ進む。
【００５８】
これに対して、ライトコマンドを発行中でないＩ／Ｆ２０が複数ある場合（ステップＳ６：否定）、Ｉ／Ｆ選択部２３は、各Ｉ／Ｆ２０のリードレスポンス待ち数及びライトレスポンス待ち数をレスポンス管理部２４から取得する。そして、Ｉ／Ｆ選択部２３は、Ｉ／Ｆ２０毎における返っていないレスポンスのサイクル数の合計を算出する（ステップＳ８）。
【００５９】
そして、Ｉ／Ｆ選択部２３は、送信部２２が受信したリクエストがライトリクエストか否かを判定する（ステップＳ９）。リクエストがライトリクエストの場合（ステップＳ９：肯定）、Ｉ／Ｆ選択部２３は、返っていないレスポンスのサイクル合計が最多のＩ／Ｆ２０は１つのみか否かを判定する（ステップＳ１０）。
【００６０】
返っていないレスポンスのサイクル合計が最多のＩ／Ｆ２０が１つのみの場合（ステップＳ１０：肯定）、Ｉ／Ｆ選択部２３は、返っていないレスポンスのサイクル合計が最多のＩ／Ｆ２０を、コマンドを送信するＩ／Ｆとして選択する（ステップＳ１１）。
【００６１】
これに対して、返っていないレスポンスのサイクル合計が最多のＩ／Ｆ２０が複数ある場合（ステップＳ１０：否定）、Ｉ／Ｆ選択部２３は、リクエストで指定されたアドレスを有するメモリ３００に直属のＩ／Ｆ２０を抽出する。そして、Ｉ／Ｆ選択部２３は、抽出したＩ／Ｆ２０を、コマンドを送信するＩ／Ｆとして選択する（ステップＳ１４）。
【００６２】
一方、リクエストがリードリクエストの場合（ステップＳ９：否定）、Ｉ／Ｆ選択部２３は、返っていないレスポンスのサイクル合計が最小のＩ／Ｆ２０は１つのみか否かを判定する（ステップＳ１２）。
【００６３】
返っていないレスポンスのサイクル合計が最小のＩ／Ｆ２０は１つのみの場合（ステップＳ１２：肯定）、Ｉ／Ｆ選択部２３は、返っていないレスポンスのサイクル合計が最小のＩ／Ｆ２０を、コマンドを送信するＩ／Ｆとして選択する（ステップＳ１３）。
【００６４】
これに対して、返っていないレスポンスのサイクル合計が最小のＩ／Ｆ２０が複数ある場合（ステップＳ１２：否定）、Ｉ／Ｆ選択部２３は、リクエストで指定されたアドレスを有するメモリ３００に直属のＩ／Ｆ２０を抽出する。そして、Ｉ／Ｆ選択部２３は、抽出したＩ／Ｆ２０を、コマンドを送信するＩ／Ｆとして選択する（ステップＳ１４）。
【００６５】
送信部２２は、Ｉ／Ｆ選択部２３により選択されたＩ／Ｆ２０を用いてコマンドをＨＭＣ３へ発行する（ステップＳ１５）。
【００６６】
以上に説明したように、本実施例に係る情報処理装置は、各Ｉ／Ｆにおける返っていないレスポンスのサイクル合計を基に、コマンドを発行するＩ／Ｆを決定する。これにより、Ｉ／Ｆ毎の使用量が平準化され、メモリのバンド幅の性能を最大限に生かすことができる。
【実施例２】
【００６７】
図４は、実施例２に係る情報処理装置のブロック図である。本実施例に係る情報処理装置は、ライトリクエストの順番を保証することが実施例１と異なる。以下では、リクエストの順番の保証のための処理について主に説明する。また、実施例１と同じ各部の機能については説明を省略する。
【００６８】
実施例１の場合、Ｉ／Ｆが同じ場合は、同じアドレスに対するリクエストの処理の順序は守られる。しかし、リクエストを別々のＩ／Ｆから送信した場合、処理の順番が保証されない。その場合、例えば、先発のライトリクエストよりも後発のリードリクエストが先に処理され、更新前のデータが読み込まれてしまう。また、先発のライトリクエストよりも後発のライトリクエストが先の処理された場合、データが古いデータに更新されてしまう。そこで、先発のライトリクエストに対する後発のリクエストの順番を保証することが好ましい。
【００６９】
送信部２２は、ＨＭＣ３に送信したライトコマンドに対応するリクエストの識別子とともに、そのライトリクエストが指定するアドレスをレスポンス管理部２４へ送信する。
【００７０】
レスポンス管理部２４は、ＨＭＣ３に送信したライトコマンドに対応するリクエストの識別子とともに、そのライトリクエストが指定するアドレスを送信部２２から受信する。
【００７１】
そして、レスポンス管理部２４は、受信したライトリクエストが指定するアドレスをそのリクエストの識別子とともに格納する。その後、レスポンス管理部２４は、ライトレスポンスを受信した場合、格納している情報の中から、そのライトレスポンスに対応するリクエストの識別子及び指定されたアドレスを削除する。すなわち、レスポンス管理部２４は、コマンド発行済で且つライトレスポンスが返ってきていないライトリクエストが指定するアドレスを記憶するといえる。
【００７２】
リクエストキュー２１は、レスポンス管理部２４が記憶するコマンド発行済で且つライトレスポンスが返ってきていないライトリクエストが指定するアドレスを取得する。そして、リクエストキュー２１は、取得したアドレスと一致するアドレスを指定しているライトリクエスト及びリードリクエストを送信部２２の取得対象から外す。
【００７３】
ここで、レスポンス管理部２４がライトレスポンスを受信すれば、レスポンス管理部２４が記憶する情報からそのライトレスポンスに対応するライトリクエストのアドレスが削除される。その場合、リクエストキュー２１は、そのライトリクエストが指定するアドレスと同じアドレスを指定するリクエストを送信部２２の取得対象に戻す。
【００７４】
送信部２２は、コマンド発行済で且つライトレスポンスが返ってきていないライトリクエスト及びリードリクエストを除くリクエストの中で、最もキューの先頭にあるリクエスト、すなわち格納されたタイミングが最も古いリクエストを取得する。そして、送信部２２は、実施例１と同様のコマンドを送信するＩ／Ｆの選択処理を行い、取得したリクエストを選択したＩ／Ｆを用いてＨＭＣ３へ送信する。
【００７５】
これにより、先発のライトリクエストと同じアドレスを指定する後発のライトリクエスト及びリードリクエストは、その先発のライトリクエストより先に処理されることはなくなる。
【００７６】
次に、図５を参照して、本実施例に係る情報処理装置によるリクエストの処理順序の保証処理の流れについて説明する。図５は、実施例２に係る情報処理装置によるリクエストの処理順序の保証処理のフローチャートである。フローチャートで示される処理は、例えば、図３のフローチャートにおけるステップＳ３で行われる。
【００７７】
リクエストキュー２１は、レスポンス管理部２４が記憶するコマンド発行済で且つライトレスポンスが返ってきていないライトリクエストが指定するアドレスを取得する。そして、リクエストキュー２１は、格納中のリクエストが指定するアドレスの中に発行済みでライトレスポンスのないライトリクエストが指定するアドレスと同じアドレスが存在するか否かを判定する（ステップＳ１０１）。
【００７８】
同じアドレスが存在しない場合（ステップＳ１０１：否定）、送信部２２は、リクエストキュー２１の全てのリクエストのうち先頭にあるリクエストを取得する（ステップＳ１０２）。
【００７９】
これに対して、同じアドレスが存在する場合（ステップＳ１０１：肯定）、リクエストキュー２１は、アドレスが一致するライトリクエスト及びリードリクエストを送信部２２の取得対象から外す。そして、送信部２２は、発行済みでライトレスポンスのないリクエストが指定したアドレスと同じアドレスを指定するリクエスト以外のリクエストのうち一番先頭にあるものを取得する（ステップＳ１０３）。
【００８０】
以上に説明したように、本実施例に係る情報処理装置は、先発のライトリクエストの処理順序を保証する。これにより、誤った処理がデータの読み出しや書き込みを回避することができる。
【００８１】
また、実施例２では先発のライトレスポンスの順序の保証を対象としたが、それに加えて、先発のリードレスポンスの順序の保証を行ってもよい。例えば、先発のリードリクエストに対してもライトリクエストの場合と同様の処理を行い、リクエストキュー２１、リードレスポンスのないリクエストが指定したアドレスと同じアドレスを指定するリクエストも送信部２２の取得対象から外してもよい。
【００８２】
これにより、先発のリードレスポンス対しても処理の順序を保証することができる。例えば、先発のリードリクエストより後発のライトリクエストが先に処理された場合、更新前のデータを読み出すはずが更新後のデータを読み出してしまうという状態を回避することができる。
【００８３】
また、以上の説明では、プロセッサ１とメモリコントローラ２とを別に設けたが、実装方法はこれに限らない。例えば、プロセッサ１の中にメモリコントローラ２が搭載されてもよい。その場合、プロセッサ１の機能は、プロセッサ１に搭載されたプロセッサコアが実行する。
【００８４】
また、以上の説明は記憶装置としてＨＭＣを例に説明したが、メモリコントローラとの間に複数のインタフェースを有する記憶装置であればこれに限らない。
【符号の説明】
【００８５】
１  プロセッサ
２  メモリコントローラ
３  ＨＭＣ
２１  リクエストキュー
２２  送信部
２３  Ｉ／Ｆ選択部
２４  レスポンス管理部
２５，２６  Ｉ／Ｆ
３１，３２  リンク
３３  スイッチ
３０１〜３０４  メモリコントローラ
３１１〜３１４  メモリ
【図１】
0006331944.tif 000002
【図２】
0006331944.tif 000003
【図３】
0006331944.tif 000004
【図４】
0006331944.tif 000005
【図５】
0006331944.tif 000006