(57)【特許請求の範囲】
【請求項１】
データを記憶するメモリのグループであるメモリグループを複数有する記憶装置と、
前記記憶装置に対するリクエストを発行する演算処理装置と、
前記演算処理装置が発行した未選択のリクエストである未選択リクエストを格納するバッファと、前記記憶装置に送信されたリクエストである送信済みリクエストのアドレスを保持する履歴レジスタと、前記履歴レジスタに保持された送信済みリクエストのアドレスに基づいて、前記記憶装置に送信する対象リクエストとして、前記送信済みリクエストが送信された回数が最も少ないメモリグループに送信するリクエストを、前記バッファが格納する未選択リクエストから選択するとともに、選択された前記対象リクエストを前記記憶装置に送信する選択部とを備えたメモリ制御装置とを有する情報処理装置。
【請求項２】
前記記憶装置は、前記複数のメモリグループにそれぞれ割り当てられており前記メモリ制御装置と接続する複数のインタフェースコントローラを備えることを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記複数のメモリグループのそれぞれは、複数のメモリ部を備え、
前記複数のメモリ部のそれぞれは、制御部と前記制御部により制御される複数のメモリバンクを備え、
前記メモリ制御装置は、前記送信済みリクエストが送信された回数が最も少ないメモリ部に送信するリクエストを前記未選択リクエストから選択する請求項２記載の情報処理装置。
【請求項４】
前記メモリ制御装置は、前記送信済みリクエストが送信された回数が最も少ないメモリバンクに送信するリクエストを前記未選択リクエストから選択して送信する請求項３記載の情報処理装置。
【請求項５】
前記バッファは、前記未選択リクエストを前記演算処理装置から発行された順番に格納し、選択された前記対象リクエストより古いリクエストはホールドし、選択された前記対象リクエストより新しいリクエストをシフトすることを特徴とする請求項１乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
演算処理装置が発行した未選択のリクエストである未選択リクエストを格納するバッファと、
データを記憶するメモリのグループであるメモリグループを複数有する記憶装置に送信されたリクエストである送信済みリクエストのアドレスを保持する履歴レジスタと、
前記履歴レジスタに保持された送信済みリクエストのアドレスに基づいて、前記記憶装置に送信する対象リクエストとして、前記送信済みリクエストが送信された回数が最も少ないメモリグループに送信するリクエストを、前記バッファが格納する未選択リクエストから選択するとともに、選択された前記対象リクエストを記憶装置に送信する選択部と
を備えるメモリ制御装置。
【請求項７】
データを記憶するメモリのグループであるメモリグループを複数有する記憶装置と、前記記憶装置に対するリクエストを発行する演算処理装置と、前記演算処理装置が発行した未選択のリクエストである未選択リクエストを格納するバッファと前記記憶装置に送信されたリクエストである送信済みリクエストのアドレスを保持する履歴レジスタとを備えたメモリ制御装置と、を有する情報処理装置の制御方法において、
前記メモリ制御装置が、前記履歴レジスタに保持された送信済みリクエストのアドレスに基づいて、前記記憶装置に送信する対象リクエストとして、前記送信済みリクエストが送信された回数が最も少ないメモリグループに送信するリクエストを、前記バッファが格納する未選択リクエストから選択し、
前記メモリ制御装置が、選択された前記対象リクエストを前記記憶装置に送信する情報処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、メモリ制御装置、および情報処理装置の制御方法に関する。
【背景技術】
【０００２】
近年、High Performance Computer（ＨＰＣ）、サーバ、パーソナルコンピュータ（ＰＣ）、または携帯電話等の情報処理装置が備えるプロセッサの製造プロセスの微細化が進んでいる。それにより、プロセッサ当たりの計算速度は増々向上している。これに伴い、主記憶の容量や帯域も向上していくことが望まれている。最近では、従来採用されてきたDual Inline Memory Module（ＤＩＭＭ）に替わるメモリ素子として、Hybrid Memory Cube（ＨＭＣ）に代表される、メモリコントローラを内蔵したDynamic Random Access Memory（ＤＲＡＭ）が開発されている。
【０００３】
ＨＭＣは、ＤＲＡＭの積層技術により、実装密度を向上することで大容量化を達成している。また、ＨＭＣは、複数のメモリコントローラを内蔵し、Central Processing Unit（ＣＰＵ）とメモリ間のインターフェースに高速シリアル通信を採用することで、広帯域のデータ転送を実現している。
【０００４】
ＨＭＣは、ホストと接続する複数(例えば、２つ、４つ、または８つ等)のインターフェース（Ｉ／Ｆ）と、それぞれのＩ／Ｆにアドレスによって割り当てられた複数のクアドラントとを有する。クアドラントは、複数のＶａｕｌｔを含み、各ＶａｕｌｔはＶａｕｌｔコントローラと複数のメモリバンクとを含む。具体的には、Ｖａｕｌｔとは、シリコン貫通電極（TSV：Through Silicon Via）によって接続された複数の積層メモリである複数のメモリバンクと、当該複数のメモリバンクを制御するメモリコントローラであるＶａｕｌｔコントローラとを含む単位メモリである。
【０００５】
ＨＭＣのＩ／Ｆは、ホストから受信したパケットを格納する入力バッファを備える。入力バッファからＶａｕｌｔコントローラへパケットが送信されると、送信された分のパケット数のＴｏｋｅｎパケットがホストに転送される。ホストは、Ｔｏｋｅｎレジスタを有し、Ｔｏｋｅｎレジスタのレジスタ値以内のパケット数のパケットをＨＭＣに送信することができる。ホストは、送信済みのパケット数をＴｏｋｅｎレジスタの値から減算し、ＨＭＣから転送さられてきたＴｏｋｅｎパケットが示すパケット数をＴｏｋｅｎレジスタの値に加算する。
【０００６】
プロセッサがアクセスするデータのアドレスが非連続である非連続アクセスの履歴情報を格納し、過去にアクセスしたデータのアドレスの履歴情報に基づいて非連続アクセスを予測する。そして、非連続アクセスの予測に基づいて、読み出しアドレスを出力して、メモリから読み出しアドレスに対応するデータを読み出す技術が知られている（例えば、特許文献１参照）。
【０００７】
また、メモリリード要求を発したＩ／Ｏ装置が連続メモリ領域をアクセスする傾向にある場合にのみ、メモリリード要求で指定されたメモリ領域に加え、当該指定されたメモリ領域に連続するメモリ領域のデータを先行して読み出す技術が知られている（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００６−２１５７９９号公報
【特許文献２】特開平９−１９８３００号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ホストからＨＭＣへのリクエストを含むパケットの送信時に、ＨＭＣのＩ／Ｆ全てがホストと接続されている場合、リクエストのアドレスに基づいて、アクセスするメモリバンクを含むクアドラントに直接属するＩ／Ｆにパケットを振り分ける（送信する）ことがある。一方、複数のＩ／Ｆのうち一部のＩ／Ｆのみがホストと接続している場合、パケットは接続されているＩ／Ｆに送信され、ＨＭＣ内部のスイッチを介して指定されたアドレスのメモリバンクにアクセスする。
【００１０】
アクセス対象のメモリのアドレスが複数のＶａｕｌｔに万遍なく分散している場合は入力バッファがいっぱいになることはない。しかし、同一クアドラント、同一Ｖａｕｌｔ、または同一Ｖａｕｌｔ内の同一メモリバンクへのアクセスが重ねて発生すると処理スピードが低下し、入力バッファの空き容量が減少し、ホストはこれ以上パケットを送る事ができず、スループットが低下する。
【００１１】
本発明の課題は、スループットの低下を防止することである。
【課題を解決するための手段】
【００１２】
実施の形態の情報処理装置は、記憶装置、演算処理装置、およびメモリ制御装置を備える。
【００１３】
前記記憶装置は、データを記憶するメモリのグループであるメモリグループを複数有する。
前記演算処理装置は、前記記憶装置に対するリクエストを発行する。
【００１４】
前記メモリ制御装置は、バッファと、履歴レジスタと、選択部と、を備える。前記バッファは、前記演算処理装置が発行した未選択のリクエストである未選択リクエストを格納する。前記履歴レジスタは、前記記憶装置に送信されたリクエストである送信済みリクエストのアドレスを保持する。前記選択部は、前記履歴レジスタに保持された送信済みリクエストのアドレスに基づいて、前記記憶装置に送信する対象リクエストとして、前記送信済みリクエストが送信された回数が最も少ないメモリグループに送信するリクエストを、前記バッファが格納する未選択リクエストから選択するとともに、選択された前記対象リクエストを前記記憶装置に送信する。
【発明の効果】
【００１５】
実施の形態の情報処理装置によれば、スループットの低下を防止することができる。
【図面の簡単な説明】
【００１６】
【図１】実施の形態に係る情報処理装置の構成図である。
【図２】実施の形態に係るＨＭＣの構成図である。
【図３】実施の形態に係るリクエスト発行履歴レジスタの構成図である。
【図４】実施の形態に係るリクエストセレクタの構成図である。
【図５】実施の形態に係るリクエスト選択処理のフローチャートである。
【図６】実施の形態に係るメモリコントローラのタイミングチャートである。
【発明を実施するための形態】
【００１７】
以下、図面を参照しながら実施の形態について説明する。
図１は、実施の形態に係る情報処理装置の構成図である。
【００１８】
情報処理装置１０１は、プロセッサ２０１、メモリコントローラ３０１、およびＨＭＣ４０１を備える。情報処理装置１０１は、例えば、サーバやＰＣ等のコンピュータである。
【００１９】
プロセッサ２０１は、ＨＭＣ４０１に対するリクエストを発行する。プロセッサ２０１は、例えば、Central Processing Unit（ＣＰＵ）である。
【００２０】
メモリコントローラ３０１は、プロセッサ２０１からリクエストを受信し、受信したリクエストを所定のルールに基づいて順番に、ＨＭＣ４０１に送信する。
【００２１】
メモリコントローラ３０１は、ＦＩＦＯ３１１、リクエストコントローラ３２１、リクエストセレクタ３３１、リクエスト発行履歴レジスタ３４１、ＴＯＫＥＮレジスタ３５１、Ｌｉｎｋ  ＭＡＳＴＥＲ３６１、Ｌｉｎｋ  Ｓｌａｖｅ３７１を備える。
【００２２】
ＦＩＦＯ３１１は、プロセッサから発行されたリクエストが発行順に並んだリクエストキューを格納する。ＦＩＦＯ３１１は、例えば、シフトレジスタである。ＦＩＦＯ３１１は、フリップフロップ３１２−ｍ（ｍ＝０〜７）を備える。ＦＩＦＯ３１１は、バッファの一例である。
【００２３】
フリップフロップ３１２−ｍは直列に接続されている。フリップフロップ３１２−ｍはリクエストを格納する。フリップフロップ３１２−２〜３１２−７は、それぞれ格納しているリクエストを後段のフリップフロップ３１２−０〜３１２−６に出力する。また、フリップフロップ３１２−ｍは、格納しているリクエストをリクエストセレクタ３３１に出力する。リクエストセレクタ３３１に出力される各リクエストには、リクエストキューのうちの何番目のリクエストであるかを示す情報（キュー番号）、すなわちどのフリップフロップ３１２−ｍに格納されているリクエストであるかを示す情報が含まれる。明細書及び図面において、フリップフロップ３１２−ｍに格納されているリクエストをそれぞれＱｍと表記する場合がある。
【００２４】
リクエストコントローラ３２１は、フリップフロップ３１２−ｍに格納されているリクエストへの読み書きやリクエストのシフトを制御する。リクエストコントローラ３２１は、リクエストセレクタ３３１から発行リクエストを受信し、発行リクエストに含まれているリクエストキューのうちのどのリクエストが選択されたかを示す情報（キュー番号）、すなわち選択されたリクエストを格納するフリップフロップ３１２−ｍを示す情報に基づいて、ＦＩＦＯ３１１に格納されているリクエストをシフトする。詳細には、リクエストコントローラ３２１は、選択されたリクエストより古いリクエストをホールドし、選択されたリクエストより新しいリクエストを１段シフトする。
【００２５】
リクエストセレクタ３３１は、リクエストキューに含まれる複数のリクエストから発行するリクエストを選択し、Ｌｉｎｋ  Ｍａｓｔｅｒ３６１に送信する。
【００２６】
リクエスト発行履歴レジスタ３４１は、リクエストセレクタ３３１が選択（出力）した新しい順に所定数のリクエストを格納する。詳細には、リクエスト発行履歴レジスタ３４１は、リクエストセレクタ３３１が選択した新しい順に所定数のリクエストのアドレスを格納する。
【００２７】
ＴＯＫＥＮレジスタ３５１は、メモリコントローラ３０１が送信可能なパケット数を格納する。メモリコントローラ３０１が送信可能なパケット数は、言い換えれば、ＨＭＣ４０１が受け付け可能なパケット数である。ＴＯＫＥＮレジスタ３５１は、送信したパケットのパケット数をＬｉｎｋ  ＭＡＳＴＥＲ３６１から受信し、送信可能なパケット数から送信したパケット数を減算する。ＴＯＫＥＮレジスタ３５１は、Ｌｉｎｋ  Ｓｌａｖｅ３７１からＴｏｋｅｎパケットを受信し、送信可能なパケット数にＴｏｋｅｎパケットが示すパケット数を加算する。
【００２８】
Ｌｉｎｋ  ＭＡＳＴＥＲ３６１は、リクエストセレクタ３３１から受信したリクエストにヘッダやＣＲＣを付加してパケットを生成し、ＨＭＣ４０１に送信する。また、受信したリクエストに関連するパケットを生成し、ＨＭＣ４０１に送信する。例えば、リクエストがデータの読み出しを要求するリードコマンドの場合、リードコマンドを含むパケットが生成及び送信される。例えば、リクエストがデータの書き込みを要求するライトコマンドであり且つ書き込みデータのサイズが大きい場合、書き込みデータは分割され、ライトコマンドと分割された書き込みデータの一部を含むパケット、および残りの分割された書き込みデータを含む複数のパケットが生成及び送信される。また、Ｌｉｎｋ  ＭＡＳＴＥＲ３６１は、送信したパケットの数（パケット数）をＴＯＫＥＮレジスタ３５１に通知する。
【００２９】
Ｌｉｎｋ  Ｓｌａｖｅ３７１は、ＨＭＣ４０１からＴｏｋｅｎパケットを受信し、ＴｏｋｅｎパケットをＴｏｋｅｎレジスタ３５１に送信する。また、Ｌｉｎｋ  Ｓｌａｖｅ３７１は、ＨＭＣ４０１から読み出したデータを含む応答を受信し、プロセッサ２０１に送信する。
【００３０】
ＨＭＣ４０１は、データを記憶する記憶装置である。ＨＭＣ４０１は、受信したリクエストに応じてデータの読み書きを行う。
【００３１】
図２は、実施の形態に係るＨＭＣの構成図である。
ＨＭＣ４０１は、リンクインタフェースコントローラ４１１−ｉ（ｉ＝１〜４）、スイッチ４２１、およびクアドラント（Ｑｕａｄｒａｎｔ）４３１−ｉを備える。
【００３２】
リンクインタフェースコントローラ４１１−ｉは、スイッチ４２１と接続し、クアドラント４３１−ｉと通信する場合、スイッチ４２１を介して通信する。
【００３３】
リンクインタフェースコントローラ４１１−ｉは、Ｌｉｎｋ  Ｓｌａｖｅ４１２−ｉ、入力バッファ４１３−ｉ、およびＬｉｎｋ  Ｍａｓｔｅｒ４１４−ｉを備える。
【００３４】
実施の形態では、複数のリンクインタフェースコントローラ４１１−ｉのうち、リンクインタフェースコントローラ４１１−１のみが使用され、リンクインタフェースコントローラ４１１−１はメモリコントローラ３０１と接続して通信する。尚、メモリコントローラ３０１と接続して通信するリンクインタフェースコントローラ４１１−ｉの数は、これに限られず、任意でよい。
【００３５】
スイッチ４２１は、リンクインタフェースコントローラ４１１とクアドラント４３１とを接続する。スイッチ４２１を介することにより、任意のリンクインタフェースコントローラ４１１−ｉとクアドラント４３１−ｉ間で通信を行うことができる。スイッチ４２１は、例えば、クロスバスイッチである。
【００３６】
クアドラント４３１−ｉは、Ｖａｕｌｔ４３２−ｉ−ｊ（ｊ＝１〜４）を備える。クアドラント４３１−ｉは、リンクインタフェースコントローラ４１１−ｉに関連付けられたＶａｕｌｔ４３２−ｉ−ｊの集合（グループ）である。実施の形態では、リンクインタフェースコントローラ４１１−１〜４１１−４それぞれに対し、関連付けられたクアドラント４３１−１〜４３１−４がある。リンクインタフェースコントローラ４１１−ｉに関連付けられたクアドラント４３１−ｉは、リンクインタフェースコントローラ４１１−ｉに直接属するクアドラント４３１−ｉと呼ぶ場合がある。リンクインタフェースコントローラ４１１−ｉは、直接属するクアドラント４３１−ｉに対し、直接には属しないクアドラント４３１−ｉよりも高速にアクセスできる。クアドラント４３１−ｉは、メモリグループの一例である。以下、Ｖａｕｌｔ４３２−１−１〜４３３−４−４をそれぞれＶａｕｌｔ０〜１５と表記する場合がある。
【００３７】
Ｖａｕｌｔ４３２−ｉ−ｊは、Ｖａｕｌｔコントローラ４３３−ｉ−ｊおよびメモリバンクグループ４３４−ｉ−ｊを備える。Ｖａｕｌｔ４３２−ｉ−ｊには、それぞれアドレス（Ｖａｕｌｔアドレス）が割り当てられる。Ｖａｕｌｔ４３２−ｉ−ｊは、メモリ部の一例である。
【００３８】
Ｖａｕｌｔコントローラ４３３−ｉ−ｊは、メモリバンクグループ４３４−ｉ−ｊを制御する。詳細には、Ｖａｕｌｔコントローラ４３３−ｉ−ｊは、メモリバンクグループ４３４−ｉ−ｊに含まれるメモリバンクに対する読み書き等の制御を行う。
【００３９】
メモリバンクグループ４３４−ｉ−ｊは、メモリバンクの集合である。メモリバンクグループ４３４−ｉ−ｊは、１６個のメモリバンク０〜１５を有する。
【００４０】
図３は、実施の形態に係るリクエスト発行履歴レジスタの構成図である。
リクエスト発行履歴レジスタ３４１は、ＦＩＦＯ３４２、３４５、Ｖａｕｌｔアドレスカウンタ３４４、およびＢａｎｋアドレスカウンタ３４７を備える。
【００４１】
ＦＩＦＯ３４２は、リクエストセレクタ３３１が出力したリクエストに含まれるＶａｕｌｔ４３２−ｉ−ｊのアドレス（以下、発行リクエストＶａｕｌｔアドレス）を新しい順に格納する。ＦＩＦＯ３４２は、フリップフロップ３４３−ｎ（ｎ＝０〜１４）を備える。すなわち、ＦＩＦＯ３４２は、１５個の発行リクエストＶａｕｌｔアドレスを格納する。
【００４２】
フリップフロップ３４３−１４には、リクエストセレクタ３３１が出力したリクエストが入力され、入力されたリクエストに含まれる発行リクエストＶａｕｌｔアドレスを格納する。リクエストセレクタ３３１からリクエストが出力されると、フリップフロップ３４３−１〜３４３−１４は、それぞれ格納する発行リクエストＶａｕｌｔアドレスを後段のフリップフロップ３４３−０〜３４３−１３に出力する。フリップフロップ３４３−０〜３４３−１３は、前段のフリップフロップ３４３−１〜３４３−１４から入力された発行リクエストＶａｕｌｔアドレスを格納する。このように、新しいリクエストがリクエストセレクタ３３１から発行されると、ＦＩＦＯ３４２内のデータ（発行リクエストＶａｕｌｔアドレス）はシフトし、ＦＩＦＯ３４２は、新しい順に１５個の発行リクエストＶａｕｌｔアドレスを格納する。尚、フリップフロップ３４３−ｎの数は１５に限られず、任意の数でよい。フリップフロップ３４３−ｎは、それぞれ格納する発行リクエストＶａｕｌｔアドレスをＶａｕｌｔアドレスカウンタ３４４に送信する。
【００４３】
Ｖａｕｌｔアドレスカウンタ３４４は、フリップフロップ３４３−ｎから入力された発行リクエストＶａｕｌｔアドレスを受信し、発行リクエストＶａｕｌｔアドレスが示すＶａｕｌｔ０〜１５それぞれのアドレスの数をカウントする。Ｖａｕｌｔアドレスカウンタ３４４は、カウントしたＶａｕｌｔ０〜１５それぞれのアドレスの数をＶａｌｕｌｔ０〜１５のリクエスト数としてリクエストセレクタ３３１に出力する。
【００４４】
ＦＩＦＯ３４５は、リクエストセレクタ３３１が発行したリクエストに含まれるメモリバンクのアドレス（以下、発行リクエストＢａｎｋアドレス）を新しい順に格納する。ＦＩＦＯ３４５は、フリップフロップ３４６−ｎ（ｎ＝０〜１４）を備える。すなわち、ＦＩＦＯ３４２は、１５個の発行リクエストＢａｎｋアドレスを格納する。
【００４５】
フリップフロップ３４６−１４には、リクエストセレクタ３３１が発行したリクエストが入力され、入力されたリクエストに含まれる発行リクエストＢａｎｋアドレスを格納する。リクエストセレクタ３３１からリクエストが発行されると、フリップフロップ３４６−１〜３４６−１４は、それぞれ格納する発行リクエストＢａｎｋアドレスを後段のフリップフロップ３４６−０〜３４６−１３に出力する。フリップフロップ３４６−０〜３４６−１３は、前段のフリップフロップ３４３−１〜３４３−１４から入力された発行リクエストＢａｎｋアドレスを格納する。このように、新しいリクエストがリクエストセレクタ３３１から発行されると、ＦＩＦＯ３４５内のデータ（発行リクエストＢａｎｋアドレス）はシフトし、ＦＩＦＯ３４５は、新しい順に１５個の発行リクエストＢａｎｋアドレスを格納する。尚、フリップフロップ３４６−ｎの数は１５に限られず、任意の数でよい。フリップフロップ３４６−ｎは、それぞれ格納する発行リクエストＢａｎｋアドレスをＢａｎｋアドレスカウンタ３４７に送信する。
【００４６】
Ｂａｎｋアドレスカウンタ３４７は、フリップフロップ３４６−ｎから入力された発行リクエストＢａｎｋアドレスを受信し、発行リクエストＢａｎｋアドレスが示すメモリバンク０〜１５それぞれのアドレスの数をカウントする。Ｂａｎｋアドレスカウンタ３４７は、カウントしたＢａｎｋ０〜１５それぞれのアドレスの数をＢａｎｋ０〜１５のリクエスト数としてリクエストセレクタ３３１に出力する。
【００４７】
図４は、実施の形態に係るリクエストセレクタの構成図である。
リクエストセレクタ３３１は、Ｔｏｋｅｎスレッシュホルドレジスタ３３２、比較回路３３３、リクエスト選択回路３３４、およびセレクタ３３５、３３６を備える。
【００４８】
Ｔｏｋｅｎスレッシュホルドレジスタ３３２は、閾値を格納する。尚、閾値は予め適当な値が設定されている。
【００４９】
比較回路３３３は、Ｔｏｋｅｎレジスタ３５１が格納する値（すなわち、メモリコントローラ３０１が送信可能なパケット数）とＴｏｋｅｎスレッシュホルドレジスタ３２２が格納する閾値とを比較し、比較結果をセレクタ３３６に送信する。例えば、Ｔｏｋｅｎレジスタ３５１が格納する値が閾値以上の場合、比較結果はＬ（＝０）、Ｔｏｋｅｎレジスタ３５１が格納する値が閾値未満の場合、比較結果はＨ（＝１）とする。
【００５０】
リクエスト選択回路３３４は、各リクエストに含まれるＶａｕｌｔアドレスとＢａｎｋアドレス、およびリクエスト履歴発行レジスタ３４１から入力されるＶａｌｕｔ０〜１５のリクエスト数とＢａｎｋ０〜１５のリクエスト数から、各リクエストＱ０〜Ｑ７の重みを算出する。実施の形態において、重みは９ビットで表現される。
【００５１】
各リクエストの重みは以下のように算出される。
リクエスト選択回路３３４は、リクエストが送信されるクアドラント４３１−ｉと同じクアドラント４３１−ｉに対して送信されたリクエストがリクエスト発行履歴レジスタ３４１に格納されたリクエストにあるか否か判定する。尚、リクエストがどのクアドラント４３１−ｉに送信されるかは、Ｖａｕｌｔアドレスから判定できる。また、あるクアドラント４３１−ｉに対して送信されたリクエストがリクエスト発行履歴レジスタ３４１に格納されたリクエストにあるか否かは、Ｖａｕｌｔ０〜１５のリクエスト数から判定できる。例えば、Ｖａｕｌｔ０のリクエスト数が１以上の場合、クアドラント４３１−１に対して送信されたリクエストがリクエスト発行履歴レジスタ３４１に格納されたリクエストにあると判定される。リクエストが送信されるクアドラント４３１−ｉと同じクアドラント４３１−ｉに対して送信されたリクエストがリクエスト発行履歴レジスタ３４１に格納されたリクエストにあった場合、リクエスト選択回路３３４は、重みの最上位ビットに1をセットする。無かった場合、リクエスト選択回路３３４は、重みの最上位ビットに０をセットする。重みの最上位ビットはリクエストが送信されるクアドラント４３１−ｉにコマンド発行履歴レジスタに格納されたリクエストが送信されていたか否かを示す。尚、他の実施の形態として、重みを１２ビットにして、重みの上から１〜４ビット目（下から９〜１２ビット目）に、リクエストが送信されるクアドラントにコマンド発行履歴レジスタに格納されたリクエストが送信された回数をセットしても良い。
【００５２】
リクエスト選択回路３３４は、リクエストのＶａｕｌｔアドレスと同じＶａｕｌｔのリクエスト数を重みの下から５〜８ビット目にセットする。重みの下から５〜８ビット目は、リクエストが送信されるＶａｕｌｔ４３２−ｉ−ｊに対して、コマンド発行履歴レジスタに格納されたリクエストが送信された回数を示す。
【００５３】
リクエスト選択回路３３４は、リクエストのＢａｎｋアドレスと同じＢａｎｋのリクエスト数を重みの下から１〜４ビット目にセットする。
【００５４】
リクエスト選択回路３３４は、重みが1番小さいリクエストを選択する。これより、コマンド発行履歴レジスタに格納されたリクエストが送信された回数が最も少ない若しくは送信されていないクアドラントに送信するリクエストが選択される。リクエストが送信された回数が最も少ない若しくは送信されていないクアドラントに送信するリクエストが複数ある場合には、その中で、コマンド発行履歴レジスタに格納されたリクエストが送信された回数が最も少ないＶａｕｌｔ４３２−ｉ−ｊに送信するリクエストが選択される。コマンド発行履歴レジスタに格納されたリクエストが送信された回数が最も少ないＶａｕｌｔ４３２−ｉ−ｊに送信するリクエストが複数ある場合には、その中で、コマンド発行履歴レジスタに格納されたリクエストが送信された回数が最も少ないメモリバンクに送信するリクエストが選択される。
【００５５】
リクエスト選択回路３３４は、選択したリクエストを示す選択信号をセレクタ３３５に送信する。
【００５６】
また、上述の実施の形態では、重みにそれぞれ４ビットで示されるＶａｕｌｔのリクエスト数とＢａｎｋのリクエスト数を用いていたが、それぞれ１ビットで示される同じＶａｕｌｔの有無および同じメモリバンクの有無を用いてもよい。それにより、回路規模を少なくすることが可能である。
【００５７】
セレクタ３３５には、リクエストＱ０〜Ｑ７と選択信号が入力される。セレクタ３３５は、入力された選択信号が示すリクエストを選択し、セレクタ３３６に出力する。
【００５８】
セレクタ３３６は、比較結果に基づいて、リクエストＱ０またはセレクタ３３５から出力されたリクエストのいずれかを選択し、出力する。セレクタ３３６は、比較結果がＬの場合（すなわち、Ｔｏｋｅｎレジスタ３５１が格納する値が閾値以上の場合）、リクエストＱ０を選択し、出力する。セレクタ３３６は、比較結果がＨの場合（すなわち、Ｔｏｋｅｎレジスタ３５１が格納する値が閾値未満の場合）、セレクタ３３５から出力されたリクエストを選択し、出力する。出力されたリクエストは、発行リクエストとも呼ぶ。
【００５９】
図５は、実施の形態に係るリクエスト選択処理のフローチャートである。
ステップＳ５０１において、比較回路３３３は、Ｔｏｋｅｎレジスタ３５１が格納する値（すなわち、メモリコントローラ３０１が送信可能なパケット数）とＴｏｋｅｎスレッシュホルドレジスタ３２２が格納する閾値とを比較し、比較結果をセレクタ３３６に送信する。Ｔｏｋｅｎレジスタ３５１が格納する値が閾値以上の場合、制御はステップＳ５０２に進み、Ｔｏｋｅｎレジスタ３５１が格納する値が閾値未満の場合、制御はステップＳ５０３に進む。
【００６０】
ステップＳ５０２において、セレクタ３３６は、リクエストキューの先頭のリクエストＱ０を選択し、Ｌｉｎｋ  Ｍａｓｔｅｒ３６１に出力する。
【００６１】
ステップＳ５０３において、リクエスト選択回路３３４は、リクエストＱ０〜Ｑ７のそれぞれの重みをリクエストＱ０〜Ｑ７のアドレスとＶａｕｌｔ０〜ｆのリクエスト履歴数とＢａｎｋ０〜ｆのリクエスト履歴数から算出する。
【００６２】
ステップＳ５０４において、リクエスト選択回路３３４は、一番小さい重みに対応するリクエストを示す選択信号をセレクタ３３５に出力する。セレクタ３３５は、リクエストＱ０〜Ｑ７のうち、選択信号が示すリクエストを選択し、セレクタ３３６に出力する。
【００６３】
ステップＳ５０５において、セレクタ３３６は、セレクタ３３５から入力されたリクエストを選択し、Ｌｉｎｋ  Ｍａｓｔｅｒ３６１に出力する。Ｌｉｎｋ  Ｍａｓｔｅｒ３６１は、入力されたリクエストを含むパケットを生成し、ＨＭＣ４０１に送信する。
【００６４】
図６は、実施の形態に係るメモリコントローラのタイミングチャートである。
サイクルＣ１において、ＦＩＦＯ３１１に格納されたリクエストキューのうちＱ０〜Ｑ５はそれぞれリクエストＲ０〜Ｒ５である。プロセッサ２０１からはリクエストＲ６が発行される。Ｔｏｋｅｎレジスタ３５１が格納する値が閾値以上であり、Ｔｏｋｅｎレジスタ３５１が格納する値が閾値以上であるか否かを示す比較結果はアサートされておらず、先頭のリクエストＲ０が選択され、出力される。
【００６５】
サイクルＣ２において、プロセッサ２０１からはリクエストＲ７が発行される。ＦＩＦＯ３１１に格納されたリクエストＲ０〜Ｒ５は１段シフトされる。それにより、リクエストＲ０は削除され、Ｑ０〜Ｑ５はそれぞれリクエストＲ１〜Ｒ４となる。また、リクエストＲ６は、リクエストキューの最後尾に格納されるので、Ｑ５がリクエストＲ６となる。比較結果はアサートされておらず、先頭のリクエストＲ１が選択され、出力される。
【００６６】
サイクルＣ３において、ＦＩＦＯ３１１に格納されたリクエストＲ１〜Ｒ６は１段シフトされる。それにより、リクエストＲ１は削除され、Ｑ０〜Ｑ５はそれぞれリクエストＲ２〜Ｒ６となる。また、リクエストＲ７は、リクエストキューの最後尾に格納されるので、Ｑ５がリクエストＲ７となる。Ｔｏｋｅｎレジスタ３５１が格納する値が閾値未満となり、比較結果はアサートされる。リクエスト選択回路３３４により、Ｑ３＝リクエストＲ５が選択され、出力される。
【００６７】
サイクルＣ４において、ＦＩＦＯ３１１に格納されたリクエストＲ２〜Ｒ７のうち、サイクルＣ３で選択されたリクエストＲ５より前の（古い）リクエストＲ２〜Ｒ４はホールドされ、リクエストＲ５より後の（新しい）リクエストＲ６、Ｒ７は１段シフトされる。それにより、リクエストＲ１は削除され、Ｑ０〜Ｑ４はそれぞれリクエストＲ２〜Ｒ４、Ｒ６、Ｒ７となる。比較結果はアサートされている。リクエスト選択回路３３４により、Ｑ３＝リクエストＲ６が選択され、出力される。
【００６８】
サイクルＣ５において、プロセッサ２０１からはリクエストＲ８が発行される。ＦＩＦＯ３１１に格納されたリクエストＲ２〜Ｒ４、Ｒ６、Ｒ７のうち、サイクルＣ４で選択されたリクエストＲ６より前のリクエストＲ２〜Ｒ４はホールドされ、リクエストＲ６より後のリクエストＲ７は１段シフトされる。それにより、リクエストＲ６は削除され、Ｑ０〜Ｑ３はそれぞれリクエストＲ２〜Ｒ４、Ｒ７となる。Ｔｏｋｅｎレジスタ３５１が格納する値が閾値以上となり、比較結果はネゲートされ、先頭のリクエストＲ２が選択され、出力される。
【００６９】
サイクルＣ６において、ＦＩＦＯ３１１に格納されたリクエストＲ２〜Ｒ４、Ｒ７は１段シフトされる。それにより、リクエストＲ２は削除され、Ｑ０〜Ｑ２はそれぞれリクエストＲ３、Ｒ４、Ｒ７となる。また、リクエストＲ８は、リクエストキューの最後尾に格納されるので、Ｑ３がリクエストＲ８となる。比較結果はアサートされておらず、先頭のリクエストＲ３が選択され、出力される。
【００７０】
実施の形態の情報処理装置によれば、過去のリクエストのアドレス履歴に基づいて、送信された回数が少ないクアドラント、Ｖａｕｌｔ、またはメモリバンクに対するリクエストを選択して送信することで、同一のクアドラント、同一のＶａｕｌｔ、または同一のメモリバンクへのアクセスが分散し、スループットの低下を防止することができる。
【００７１】
以上の実施の形態に関し、さらに以下の付記を開示する。
（付記１）
データを記憶する記憶装置と、
前記記憶装置に対するリクエストを発行する演算処理装置と、
前記演算処理装置が発行した未選択のリクエストである未選択リクエストを格納するバッファと、前記記憶装置に送信されたリクエストである送信済みリクエストのアドレスを保持する履歴レジスタと、前記履歴レジスタに保持された送信済みリクエストのアドレスに基づいて、前記記憶装置に送信する対象リクエストを前記バッファが格納する未選択リクエストから選択するとともに、選択された前記対象リクエストを前記記憶装置に送信する選択部とを備えたメモリ制御装置とを有する情報処理装置。
（付記２）
前記記憶装置は、前記メモリ制御装置と接続する複数のインタフェースコントローラ、および前記複数のインタフェースコントローラそれぞれに割り当てられた複数のメモリグループを備え、
前記メモリ制御装置は、前記送信済みリクエストが送信された回数が最も少ないメモリグループに送信するリクエストを前記未選択リクエストから選択することを特徴とする付記１記載の情報処理装置。
（付記３）
複数のメモリグループのそれぞれは、複数のメモリ部を備え、
前記複数のメモリ部のそれぞれは、制御部と前記制御部により制御される複数のメモリバンクを備え、
前記メモリ制御装置は、前記送信済みリクエストが送信された回数が最も少ないメモリ部に送信するリクエストを前記未選択リクエストから選択する付記２記載の情報処理装置。
（付記４）
前記メモリ制御装置は、前記送信済みリクエストが送信された回数が最も少ないメモリバンクに送信するリクエストを前記未選択リクエストから選択して送信する付記３記載の情報処理装置。
（付記５）
前記バッファは、前記未選択リクエストを前記演算処理装置から発行された順番に格納し、選択された前記対象リクエストより古いリクエストはホールドし、選択された前記対象リクエストより新しいリクエストをシフトすることを特徴とする付記１乃至４のいずれか１項に記載の情報処理装置。
（付記６）
演算処理装置が発行した未選択のリクエストである未選択リクエストを格納するバッファと、
記憶装置に送信されたリクエストである送信済みリクエストのアドレスを保持する履歴レジスタと、
前記履歴レジスタに保持された送信済みリクエストのアドレスに基づいて、前記記憶装置に送信する対象リクエストを前記バッファが格納する未選択リクエストから選択するとともに、選択された前記対象リクエストを記憶装置に送信する選択部と
を備えるメモリ制御装置。
（付記７）
前記記憶装置は、前記メモリ制御装置と接続する複数のインタフェースコントローラ、および前記複数のインタフェースコントローラそれぞれに割り当てられた複数のメモリグループを備え、
前記選択部は、前記送信済みリクエストが送信された回数が最も少ないメモリグループに送信するリクエストを前記未選択リクエストから選択することを特徴とする付記６記載のメモリ制御装置。
（付記８）
前記複数のメモリグループのそれぞれは、複数のメモリ部を備え、
前記複数のメモリ部のそれぞれは、制御部と前記制御部により制御される複数のメモリバンクを備え、
前記選択部は、前記送信済みリクエストが送信された回数が最も少ないメモリ部に送信するリクエストを前記未選択リクエストから選択する付記７記載のメモリ制御装置。
（付記９）
前記選択部は、前記送信済みリクエストが送信された回数が最も少ないメモリバンクに送信するリクエストを前記未選択リクエストから選択して送信する付記８記載のメモリ制御装置。
（付記１０）
前記バッファは、前記未選択リクエストを前記演算処理装置から発行された順番に格納し、選択された前記対象リクエストより古いリクエストはホールドし、選択された前記対象リクエストより新しいリクエストをシフトすることを特徴とする付記６乃至９のいずれか１項に記載のメモリ制御装置。
（付記１１）
データを記憶する記憶装置と、前記記憶装置に対するリクエストを発行する演算処理装置と、前記演算処理装置が発行した未選択のリクエストである未選択リクエストを格納するバッファと前記記憶装置に送信されたリクエストである送信済みリクエストのアドレスを保持する履歴レジスタとを備えたメモリ制御装置と、を有する情報処理装置の制御方法において、
前記メモリ制御装置が、前記履歴レジスタに保持された送信済みリクエストのアドレスに基づいて、前記記憶装置に送信する対象リクエストを前記バッファが格納するリクエストから選択し、
前記メモリ制御装置が、選択された前記対象リクエストを前記記憶装置に送信する情報処理装置の制御方法。
（付記１２）
前記記憶装置は、前記メモリ制御装置と接続する複数のインタフェースコントローラ、および前記複数のインタフェースコントローラそれぞれに割り当てられた複数のメモリグループを備え、
前記選択する処理は、前記送信済みリクエストが送信された回数が最も少ないメモリグループに送信するリクエストを前記未選択リクエストから選択することを特徴とする付記１１記載の制御方法。
（付記１３）
前記複数のメモリグループのそれぞれは、複数のメモリ部を備え、
前記複数のメモリ部のそれぞれは、制御部と前記制御部により制御される複数のメモリバンクを備え、
前記選択する処理は、前記送信済みリクエストが送信された回数が最も少ないメモリ部に送信するリクエストを前記未選択リクエストから選択する付記１２記載の制御方法。
（付記１４）
前記選択する処理は、前記送信済みリクエストが送信された回数が最も少ないメモリバンクに送信するリクエストを前記未選択リクエストから選択して送信する付記１３記載の制御方法。
（付記１５）
前記バッファは、前記未選択リクエストを前記演算処理装置から発行された順番に格納し、
選択された前記対象リクエストより古いリクエストはホールドし、選択された前記対象リクエストより新しいリクエストをシフトする処理をさらに備えることを特徴とする付記１１乃至１４のいずれか１項に記載の制御方法。
【符号の説明】
【００７２】
１０１    情報処理装置
２０１    プロセッサ
３０１    メモリコントローラ
３１１    ＦＩＦＯ
３２１    リクエストコントローラ
３３１    リクエストセレクタ
３３２    Ｔｏｋｅｎスレッシュホルドレジスタ
３３３    比較回路
３３４    リクエスト選択回路
３３５、３３６    セレクタ
３４１    リクエスト発行履歴レジスタ
３４２    ＦＩＦＯ
３４４    Ｖａｕｌｔアドレスカウンタ
３４５    ＦＩＦＯ
３４７    Ｂａｎｋアドレスカウンタ
３５１    ＴＯＫＥＮレジスタ
３６１    Ｌｉｎｋ  ＭＡＳＴＥＲ
３７１    Ｌｉｎｋ  Ｓｌａｖｅ
４０１    ＨＭＣ
４１１    リンクインタフェースコントローラ
４１２    Ｌｉｎｋ  Ｓｌａｖｅ
４１３    入力バッファ
４１４    Ｌｉｎｋ  Ｍａｓｔｅｒ
４２１    スイッチ
４３１    クアドラント
４３２    Ｖａｕｌｔ
４３３    Ｖａｕｌｔコントローラ
４３４    メモリバンクグループ
【図１】
0006477228.tif 000002
【図２】
0006477228.tif 000003
【図３】
0006477228.tif 000004
【図４】
0006477228.tif 000005
【図５】
0006477228.tif 000006
【図６】
0006477228.tif 000007