(57)【特許請求の範囲】
【請求項１】
複数のＣＰＵと、複数のバンク構成を有するメモリとを有するコンピュータの、前記メモリに対してメモリリクエストを出力するメモリアクセス制御装置であって、
前記複数のＣＰＵから受信したメモリリクエストを格納するリクエスト格納バッファと、
前記メモリリクエストを選択するためのリクエストセレクト信号を前記複数のＣＰＵの各々に対して生成するリクエスト選択回路と、
前記複数のＣＰＵの間での優先順位を決定して優先順位信号を生成すると共に、前記メモリにメモリリクエストが出力されるたびに前記優先順位を変更するＣＰＵ優先順位制御回路と、
前記リクエストセレクト信号によって前記複数のＣＰＵの各々に対して前記リクエスト格納バッファに格納されたメモリリクエストを選択するＣＰＵセレクタと、
前記ＣＰＵセレクタによって選択されたメモリリクエストの中から前記優先順位信号によって前記メモリに出力するメモリリクエストを選択するメインセレクタと
を有すると共に、
前記ＣＰＵ優先順位制御回路は、前記優先順位を変更する際、前記メモリに出力されたメモリリクエストに該当するＣＰＵの優先順位が次にメモリリクエストが出力されるときには最も低い順位となり、かつ予め与えられた前記複数のＣＰＵの間での円環状の順番を保持するように変更することを特徴とするメモリアクセス制御装置。
【請求項２】
前記リクエスト格納バッファが、前記メモリリクエストを最も若いワード番号から順に格納することを特徴とする、請求項１に記載のメモリアクセス制御装置。
【請求項３】
前記リクエスト格納バッファに前記メモリリクエストが格納されるたびに、それまでに前記リクエスト格納バッファに格納されているメモリリクエストおよび新規にリクエスト格納バッファに格納されるメモリリクエストの全てに対して同一のアドレスに対するメモリリクエストがあるか否かをチェックして比較結果を前記リクエスト選択回路に対して送信するアドレス比較回路を有し、
前記リクエスト選択回路は前記比較結果に基づいて前記同一のアドレスに対するメモリリクエストを選択しないことを特徴とする、請求項２に記載のメモリアクセス制御装置。
【請求項４】
出力された前記メモリリクエストに該当する前記バンクに対応するバンクビジー信号を前記リクエスト選択回路に対して一定時間送出するバンクビジー制御回路を有し、
前記リクエスト選択回路は前記バンクビジー信号が発せられている前記バンクに対するメモリリクエストを選択しないことを特徴とする、請求項１に記載のメモリアクセス制御装置。
【請求項５】
複数のＣＰＵと、
複数のバンク構成を有するメモリと、
前記メモリにメモリリクエストを出力するメモリアクセス制御装置とを有するコンピュータであって、
前記メモリアクセス制御装置が請求項１ないし請求項４のうちいずれか１項に記載のメモリアクセス制御装置であることを特徴とするコンピュータ。
【請求項６】
複数のＣＰＵと、複数のバンク構成を有するメモリと、リクエスト格納バッファとを含むメモリアクセス制御装置を有するコンピュータにあって、
前記複数のＣＰＵからメモリリクエストを受信する受信工程と、
前記受信したメモリリクエストを前記リクエスト格納バッファに格納する格納工程と、
前記格納されたメモリリクエストを選択するためのリクエストセレクト信号を前記複数のＣＰＵの各々に対して生成するセレクト信号生成工程と、
前記複数のＣＰＵの間での優先順位を決定して優先順位信号を生成すると共に、前記メモリにメモリリクエストが出力されるたびに前記優先順位を変更する優先順位信号生成工程と、
前記リクエストセレクト信号によって前記複数のＣＰＵの各々に対して前記リクエスト格納バッファに格納されたメモリリクエストを選択するＣＰＵ選択工程と、
前記ＣＰＵ選択工程で複数のＣＰＵの各々に対して選択されたメモリリクエストの中から前記優先順位信号によって前記メモリリクエストを選択するメイン選択工程と、
選択された前記メモリリクエストを前記メモリに対して出力する出力工程と
を有すると共に、
前記優先順位信号生成工程は、前記優先順位を変更する際、前記メモリに出力されたメモリリクエストに該当するＣＰＵの優先順位が次にメモリリクエストが出力されるときには最も低い順位となり、かつ予め与えられた前記複数のＣＰＵの間での円環状の順番を保持するように変更することを特徴とするメモリアクセス制御方法。
【請求項７】
複数のＣＰＵと、複数のバンク構成を有するメモリと、リクエスト格納バッファとを含むメモリアクセス制御装置を有するコンピュータにあって、前記メモリアクセス制御装置が備えるコンピュータに、
前記複数のＣＰＵからメモリリクエストを受信する処理と、
前記受信したメモリリクエストを前記リクエスト格納バッファに格納する処理と、
前記格納されたメモリリクエストを選択するためのリクエストセレクト信号を生成する処理と、
前記複数のＣＰＵの間での優先順位を決定して優先順位信号を生成すると共に、前記メモリにメモリリクエストが出力されるたびに前記優先順位を変更する処理と、
前記リクエストセレクト信号によって前記複数のＣＰＵの各々に対して前記リクエスト格納バッファに格納されたメモリリクエストを選択する処理と、
前記複数のＣＰＵの各々に対して選択されたメモリリクエストの中から前記優先順位信号によって前記メモリリクエストを選択する処理と、
選択された前記メモリリクエストを前記メモリに対して出力する処理と
を実行させると共に、
前記優先順位信号を変更する処理は、前記メモリに出力されたメモリリクエストに該当するＣＰＵの優先順位が次にメモリリクエストが出力されるときには最も低い順位となり、かつ予め与えられた前記複数のＣＰＵの間での円環状の順番を保持するように変更することを特徴とするメモリアクセス制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサシステムにおけるメモリアクセス制御装置に関し、特にＣＰＵ間のリクエスト処理時間の偏りを軽減するメモリアクセス制御装置に関する。
【背景技術】
【０００２】
１台のコンピュータ装置に複数のＣＰＵを搭載したものをマルチプロセッサシステムという。マルチプロセッサシステムは、タスクを複数のＣＰＵで分担して処理することによって、処理性能を向上させることができる。また、ＣＰＵ以外の部分を、複数のＣＰＵの間で共用することにより、システムを複数台用意するのに比べて低コストであるというメリットがある。このようなマルチプロセッサシステムで、特にＲＡＭなどのメモリを複数のＣＰＵで共用するために、ＣＰＵからのメモリリクエスト（以後単にリクエストということがある）の順番を制御してメモリに出力するメモリアクセス制御装置が使われる。
【０００３】
マルチプロセッサシステムのメモリアクセス制御装置に関する従来技術としては、たとえば以下のような文献がある。特許文献１には、バンクビジーにより、リクエスト格納バッファにメモリリクエストが格納されているとき、該メモリリクエストのアドレスを比較するメモリアクセス制御装置が開示されている。特許文献２には、リクエスト抑止制御手段を有し、主記憶リクエスト受付側でもリクエストの優先順序の主導権を握る主記憶リクエスト制御装置が開示されている。
【０００４】
特許文献１について、より詳しく説明する。図５は、特許文献１に係る従来のメモリアクセス制御装置３１０の構成を示すブロック図である。メモリアクセス制御装置３１０は、リクエスト格納バッファ３１１、バンクビジー制御回路３１２、アドレス比較回路３１３、リフレッシュ回路３１４、リクエスト選択回路３１５、セレクタ３１８から構成される。
【０００５】
リクエスト格納バッファ３１１はバンクビジー時、リフレッシュビジー時、更にリクエスト格納バッファ３１１にリクエストが格納されている場合にリクエスト発行部から受信したリクエストを格納する。バンクビジー制御回路３１２はメモリ制御部に発行されたリクエストのバンクアドレスからバンクビジー時間をカウントしてバンクビジー信号を生成する。アドレス比較回路３１３はリクエスト格納バッファ内のリクエスト間で同一アドレスのリクエストがあるかどうかアドレス比較を行う。リフレッシュ回路３１４はＤＲＡＭがデータを保持するのに必要なリフレッシュリクエストを一定間隔でメモリに発行する。
【０００６】
リクエスト選択回路３１５はバンクビジー、リフレッシュリクエスト、アドレス比較結果、リクエスト格納バッファに格納されているリクエストのアクセス先バンクアドレスからリクエストセレクト信号を生成する。セレクタ３１８はリクエストセレクト信号によりリクエストを選択してメモリ制御部に出力する。
【０００７】
メモリアクセス制御装置３１０では、メモリへのリクエストはリクエスト格納バッファ３１１に格納され、バンクビジーチェックおよびアドレスチェックを行い、出力可能なリクエストの中からリクエスト格納バッファ３１１に格納された順番が一番古いものから出力する。この時、出力したリクエストはバッファ内の先行していたリクエストよりも速く出力される（これをリクエスト追い越しという）ことが多々ある。このような構成を取ることにより、バッファから出力可能な条件をパスしたリクエストから出力することで、リクエストを間断なく出力することができ、故にメモリスループット性能が向上する。
【０００８】
【特許文献１】特開２０００−１７２５５２号公報
【特許文献２】特開平０７−２９５８７８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、図５に示した特許文献１に係るメモリアクセス制御装置を用いると、リクエスト追い越しが頻繁に起きてしまい、その結果として各ＣＰＵ間のリクエストの処理時間に偏りが出てくる。リクエストの処理を待っているＣＰＵは、その間は計算を行うことができないので、リクエストの処理時間が長くなると計算能力が低下することになる。そのため、装置全体としての性能が低下するという問題がある。
【００１０】
図６は、図５に示した従来のメモリアクセス制御装置３１０の具体的な動作を示すタイムチャートである。ここでメモリアクセス制御装置３１０はリクエスト発行部３３１として４個のＣＰＵ（ＣＰＵ０〜ＣＰＵ３）を有し、メモリ３３２にはリクエストの出力先としてバンクＡ〜バンクＤの４つのバンクを有する。リクエスト格納バッファ３１１はアドレス比較結果が全て不一致となる１２個のリクエストが格納されている。
【００１１】
また、説明を簡略化するため、リクエスト発行部からはリクエストは来ないものとし、バンクビジー時間を３Ｔとする。バンクビジー状態となったバンクは、３Ｔの間アクセスできない。なお、Ｔはクロック周期であり、時刻Ｔ０の１周期後をＴ１、２周期後をＴ２…などのようにしてクロック周期に対応した時刻を表す。
【００１２】
時刻Ｔ０において、リクエスト格納バッファ３１１には、以下に示すワード０〜ワード１１という１２ワードのリクエストが格納されている。ワード番号はリクエスト格納バッファ３１１に格納された順番を表し、番号が小さいほど先にバッファに格納されたリクエストである。ある一つのリクエストにおいて、Ｗ０〜Ｗ１１の数字は、リクエスト格納バッファ３１１内部の状態に合わせて変化していくが、Ｒ０〜Ｒ１１の数字はメモリ３３２に出力されるまで変化しない。
【００１３】
Ｗ０−ＣＰＵ０からバンクＡへのリクエスト（Ｒ０）
Ｗ１−ＣＰＵ１からバンクＡへのリクエスト（Ｒ１）
Ｗ２−ＣＰＵ２からバンクＡへのリクエスト（Ｒ２）
Ｗ３−ＣＰＵ０からバンクＢへのリクエスト（Ｒ３）
Ｗ４−ＣＰＵ１からバンクＢへのリクエスト（Ｒ４）
Ｗ５−ＣＰＵ３からバンクＢへのリクエスト（Ｒ５）
Ｗ６−ＣＰＵ０からバンクＣへのリクエスト（Ｒ６）
Ｗ７−ＣＰＵ１からバンクＣへのリクエスト（Ｒ７）
Ｗ８−ＣＰＵ３からバンクＣへのリクエスト（Ｒ８）
Ｗ９−ＣＰＵ２からバンクＤへのリクエスト（Ｒ９）
Ｗ１０−ＣＰＵ２からバンクＤへのリクエスト（Ｒ１０）
Ｗ１１−ＣＰＵ３からバンクＤへのリクエスト（Ｒ１１）
【００１４】
なお、図６においては、たとえばＷ０に格納されている「ＣＰＵ０からバンクＡへのリクエストであるＲ０」を、「Ｒ０（０／Ａ）」と表記する。同様に、「ＣＰＵ１からバンクＢへのリクエストであるＲ４」を、「Ｒ４（１／Ｂ）」と表記する。図６では、すべてこの表記法に従っている。
【００１５】
時刻Ｔ０ではバンクビジー状態のバンクがないので全てのリクエストが出力可能である。セレクタ３１８は、リクエスト選択回路３１５からのリクエストセレクト信号により、リクエスト格納バッファ３１１に格納されている中で最も先に格納されたリクエストであるＷ０（Ｒ０）を選択してメモリ３３２に出力する。
【００１６】
Ｗ０のリクエストが出力されると時刻Ｔ１においてリクエスト格納バッファ３１１内のＷ１〜Ｗ１１のリクエストはワード番号を１つずつ減少させたＷ０〜Ｗ１０に移動し、バンクビジー制御回路３１２には出力されたリクエストのバンクＡに対してバンクビジー時間がセットされる。これによりバンクＡは３Ｔの間（Ｔ１〜Ｔ３）アクセスできなくなる。
【００１７】
次にバンクビジー制御回路３１２からバンクＡのみバンクビジー状態であるバンクビジー信号、アドレス比較回路３１３からアドレス比較結果をリクエスト選択回路３１５に送り、リクエスト選択回路３１５はそれらの条件をパスする最もワード番号の小さいリクエストを選択し、リクエストセレクト信号を送出する。セレクタ３１８はリクエストセレクト信号より、出力可能な中で最も先に格納されたリクエストであるＷ２（Ｒ３）を選択してメモリ３３２に出力する。
【００１８】
Ｗ２のリクエストが出力されると時刻Ｔ２においてリクエスト格納バッファ３１１内のＷ０〜Ｗ１のリクエストは現状のワード番号に格納されたままで、Ｗ３〜Ｗ１０のリクエストはワード番号を１つずつ減少させたＷ２〜Ｗ９に移動し、バンクビジー制御回路３１２には出力されたリクエストのバンクＢに対してバンクビジー時間（Ｔ２〜Ｔ４）をセットする。
【００１９】
次にバンクビジー制御回路３１２からバンクＡおよびバンクＢがバンクビジー状態であるバンクビジー信号、アドレス比較回路３１３からアドレス比較結果をリクエスト選択回路３１５に送り、リクエスト選択回路３１５はそれらの条件をパスする最もワード番号の小さいリクエストを選択し、リクエストセレクト信号を送出する。セレクタ３１８は前述のセレクト信号より、出力可能な中で最も先に格納されたリクエストであるＷ４（Ｒ６）を選択してメモリ３３２に出力する。
【００２０】
以降同様に制御を行なっていくと、時刻Ｔ１１で全てのリクエストがメモリ３３２に出力される。ここでリクエストの出力順のＣＰＵ番号に着目すると、ＣＰＵ０のリクエストはＴ０、Ｔ１、Ｔ２で出力されている。ＣＰＵ１のリクエストはＴ４、Ｔ５、Ｔ６で出力されている。ＣＰＵ２のリクエストはＴ３、Ｔ７、Ｔ８で出力されている。ＣＰＵ３のリクエストはＴ９、Ｔ１０、Ｔ１１で出力されている。
【００２１】
ＣＰＵ０のリクエストは時刻Ｔ０〜Ｔ２ですべて出力されているが、ＣＰＵ３のリクエストは時刻Ｔ９〜Ｔ１１で出力されている。つまりＣＰＵ３は、少なくとも時刻Ｔ０〜Ｔ８の間、メモリアクセス制御装置３１０においてリクエストが処理されるまで待ち続けることになり、その間は何の処理もできない。このように、ＣＰＵ間においてリクエストの処理時間に偏りがあると、処理待ちによる計算能力の低下が生じる。
【００２２】
実際にはリクエスト発行部３３１からはメモリアクセス制御装置３１０に対して長時間にわたって頻繁にリクエストが来続けるものであるので、ＣＰＵ間のリクエスト処理時間の偏りは図６で示した例よりもずっと大きくなる。ＣＰＵ間においてリクエストの処理時間に偏りがあると、前述のように装置全体としての性能が低下することがある。
【００２３】
なお、特許文献２の技術は、各々のＣＰＵに対する処理リクエストの個数に応じて、各々のＣＰＵに対する優先順位を決定している。従って、前述のようなＣＰＵ間のリクエスト処理時間の偏りを軽減することのできる構成を備えたものではない。
【００２４】
本発明の目的は、マルチプロセッサシステムにおいてＣＰＵ間のリクエスト処理時間の偏りに伴う性能の低下を軽減するメモリアクセス制御装置、メモリアクセス制御方法およびメモリアクセス制御プログラムを提供することにある。
【課題を解決するための手段】
【００２５】
上記目的を達成するため、本発明に係るメモリアクセス制御装置は、複数のＣＰＵと、複数のバンク構成を有するメモリとを有するコンピュータの、メモリに対してメモリリクエストを出力するメモリアクセス制御装置であって、複数のＣＰＵから受信したメモリリクエストを格納するリクエスト格納バッファと、メモリリクエストを選択するためのリクエストセレクト信号を複数のＣＰＵの各々に対して生成するリクエスト選択回路と、複数のＣＰＵの間での優先順位を決定して優先順位信号を生成すると共に、メモリにメモリリクエストが出力されるたびに優先順位を変更するＣＰＵ優先順位制御回路と、リクエストセレクト信号によって複数のＣＰＵの各々に対してリクエスト格納バッファに格納されたメモリリクエストを選択するＣＰＵセレクタと、ＣＰＵセレクタによって選択されたメモリリクエストの中から優先順位信号によってメモリに出力するメモリリクエストを選択するメインセレクタとを有すると共に、ＣＰＵ優先順位制御回路は、優先順位を変更する際、メモリに出力されたメモリリクエストに該当するＣＰＵの優先順位が次にメモリリクエストが出力されるときには最も低い順位となり、かつ予め与えられた複数のＣＰＵの間での円環状の順番を保持するように変更することを特徴とする。
【００２６】
上記目的を達成するため、本発明に係るコンピュータは、複数のＣＰＵと、複数のバンク構成を有するメモリと、メモリにメモリリクエストを出力するメモリアクセス制御装置とを有するコンピュータであって、メモリアクセス制御装置が請求項１ないし請求項４のうちいずれか１項に記載のメモリアクセス制御装置であることを特徴とする。
【００２７】
上記目的を達成するため、本発明に係るメモリアクセス制御方法は、複数のＣＰＵと、複数のバンク構成を有するメモリと、リクエスト格納バッファとを含むメモリアクセス制御装置を有するコンピュータにあって、複数のＣＰＵからメモリリクエストを受信する受信工程と、受信したメモリリクエストをリクエスト格納バッファに格納する格納工程と、格納されたメモリリクエストを選択するためのリクエストセレクト信号を複数のＣＰＵの各々に対して生成するセレクト信号生成工程と、複数のＣＰＵの間での優先順位を決定して優先順位信号を生成すると共に、メモリにメモリリクエストが出力されるたびに優先順位を変更する優先順位信号生成工程と、リクエストセレクト信号によって複数のＣＰＵの各々に対してリクエスト格納バッファに格納されたメモリリクエストを選択するＣＰＵ選択工程と、ＣＰＵ選択工程で複数のＣＰＵの各々に対して選択されたメモリリクエストの中から優先順位信号によってメモリリクエストを選択するメイン選択工程と、選択されたメモリリクエストをメモリに対して出力する出力工程とを有すると共に、優先順位信号生成工程は、優先順位を変更する際、メモリに出力されたメモリリクエストに該当するＣＰＵの優先順位が次にメモリリクエストが出力されるときには最も低い順位となり、かつ予め与えられた複数のＣＰＵの間での円環状の順番を保持するように変更することを特徴とする。
【００２８】
上記目的を達成するため、本発明に係るメモリアクセス制御プログラムは、複数のＣＰＵと、複数のバンク構成を有するメモリと、リクエスト格納バッファとを含むメモリアクセス制御装置を有するコンピュータにあって、メモリアクセス制御装置が備えるコンピュータに、複数のＣＰＵからメモリリクエストを受信する処理と、受信したメモリリクエストをリクエスト格納バッファに格納する処理と、格納されたメモリリクエストを選択するためのリクエストセレクト信号を生成する処理と、複数のＣＰＵの間での優先順位を決定して優先順位信号を生成すると共に、メモリにメモリリクエストが出力されるたびに優先順位を変更する処理と、リクエストセレクト信号によって複数のＣＰＵの各々に対してリクエスト格納バッファに格納されたメモリリクエストを選択する処理と、複数のＣＰＵの各々に対して選択されたメモリリクエストの中から優先順位信号によってメモリリクエストを選択する処理と、選択されたメモリリクエストをメモリに対して出力する処理と
を実行させると共に、優先順位信号を変更する処理は、メモリに出力されたメモリリクエストに該当するＣＰＵの優先順位が次にメモリリクエストが出力されるときには最も低い順位となり、かつ予め与えられた複数のＣＰＵの間での円環状の順番を保持するように変更することを特徴とする。
【発明の効果】
【００２９】
本発明は、上記したように複数のＣＰＵの間での優先順位を決定し、その優先順位に従ってリクエストを選択するように構成したので、ＣＰＵ間のリクエスト処理時間の偏りを軽減することができる。これによって、マルチプロセッサシステムにおいてＣＰＵ間のリクエスト処理時間の偏りに伴う性能の低下を軽減することのできる、従来にない優れたメモリアクセス制御装置、メモリアクセス制御方法およびメモリアクセス制御プログラムを提供することができる。
【発明を実施するための最良の形態】
【００３０】
図１は、本発明の実施の形態に係るコンピュータ１の主要部分の構成を示すブロック図である。コンピュータ１は、４個のＣＰＵ（ＣＰＵ０〜ＣＰＵ３）からなるリクエスト発行部３１と、バンクＡ〜バンクＤの４つのバンクを有するメモリ３２と、ＣＰＵ０〜ＣＰＵ３からのメモリ３２へのリクエストを制御するメモリアクセス制御装置１０とからなる。なお、コンピュータ１を構成するこれら以外の要素については公知であり、以後の説明において言及する必要は特にないので、図示および説明を省略する。
【００３１】
図２は、図１に示したメモリアクセス制御装置１０の構成を示すブロック図である。メモリアクセス制御装置１０は、リクエスト格納バッファ１１、バンクビジー制御回路１２、アドレス比較回路１３、リフレッシュ回路１４、リクエスト選択回路１５、ＣＰＵ優先順位制御回路１７、メインセレクタ１８、ＣＰＵセレクタ２１〜２４から構成される。
【００３２】
メモリアクセス制御装置１０は４個のＣＰＵ（ＣＰＵ０〜ＣＰＵ３）を有するリクエスト発行部３１からのリクエストを、メモリ３２に出力する。なお、リクエスト発行元のＣＰＵ数を、図５〜６と同様にＣＰＵ０〜３の４個とする。ＣＰＵセレクタ２１〜２４は、ＣＰＵ０〜３に各々対応する。
【００３３】
リクエスト格納バッファ１１は、バンクビジー時、リフレッシュビジー時、そして先行するリクエストと同一アドレスであった場合にリクエストを退避するバッファである。リクエスト格納バッファ１１はリクエストを最大１２個（１１ワード、ワード０〜ワード１１）格納可能で、ワード番号の若いワードに順番に格納される。以後、ワード０をＷ０、ワード１をＷ１…などのように表す。
【００３４】
例えばＷ５が出力された場合、Ｗ４以下に格納されているリクエストはそのままのワード番号に保持され、Ｗ６〜Ｗ１１に格納されていたリクエストは１つずつ小さいワード番号にシフトし、Ｗ５〜Ｗ１０として格納される。リクエスト格納バッファ１１にはリクエストが最も若いワード番号から順に格納されていくので、途中でリクエストが格納されていないワードがある歯抜け状態になることはない。
【００３５】
バンクビジー制御回路１２は、バンクと同数のバンクビジーカウンタを有し、該バンクビジーカウンタに、メモリ制御部に送出するリクエストのバンクアドレスおよびコマンドからあらかじめ決められているバンクビジー時間をセットする。そしてクロック周期毎にカウンタ値をディクリメント（１ずつ減算）していく。バンクビジーカウンタの値が０以外である場合、リクエスト選択回路１５に対してバンクビジーであることを通知するバンクビジー信号を送出する。この状態をバンクビジー状態といい、該バンクにアクセスすることは不可能である。バンクビジーカウンタの値が０になるとバンクビジー解除となり、該バンクにアクセス可能となる。
【００３６】
また、メモリが同一メモリ素子に複数バンクを持つＳＤＲＡＭである場合は、バンクビジー制御回路１２はバンク間ビジーカウンタを持つ。バンク間ビジーカウンタも前述のバンクビジーカウンタ同様に、メモリ制御部に送出するリクエストのバンクアドレス、コマンドからあらかじめ決められているバンクビジー時間をセットし、クロック周期毎にカウンタ値をディクリメントし、カウンタの値が０以外のとき、リクエスト選択回路１５に対してバンクビジー信号を送出する。
【００３７】
アドレス比較回路１３は、リクエスト格納バッファ１１に格納されている各々のリクエストのアドレスを比較し、先行しているリクエストの中に同一アドレスに対するリクエストがあるか否かをチェックする。例えばリクエスト格納バッファ１１にＷ７が格納された場合、Ｗ７のアドレスとＷ０〜Ｗ６のアドレス全てと比較し、全てのワードで不一致ならば出力可能である情報をリクエスト選択回路１５に送り、１箇所でも一致した場合は先行するリクエストに同一アドレスのリクエストがあるということなので出力不可能といった情報を送る。
【００３８】
このチェックは、リクエスト発行部３１からリクエストを受信するたびに、リクエスト格納バッファ１１に格納しているリクエストの全ワードに対して行われる。なお、アドレス比較は全アドレスの比較だけでなく部分的な比較、例えばバンクアドレスのみの比較といったことも可能である。
【００３９】
リフレッシュ回路１４は、各種リクエストの中で最も優先度の高いリフレッシュリクエストを一定間隔で生成し、リクエスト選択回路１５に送る。
【００４０】
リクエスト選択回路１５は、メモリ制御部に送るリクエストを選択するためのリクエストセレクト信号をＣＰＵ単位に生成する。この場合、リクエスト選択回路１５には、リクエスト格納バッファ１１からＣＰＵ情報とバンクアドレス情報、バンクビジー制御回路１２からのバンクビジー信号、アドレス比較回路１３からのアドレス比較結果、リフレッシュ回路１４からのリフレッシュ信号が入力される。
【００４１】
このときのリクエスト選択の優先順位はリフレッシュ、リクエスト格納バッファ１１に格納されているワード番号の若い順、リクエスト発行部からの入力リクエストである。また、リクエストセレクト信号生成に必要な条件は、アクセス先のバンクがビジーでなく、かつ先行するリクエストに同一アドレスのリクエストが存在しないことである。リクエスト選択回路１５は、これらの条件を満たす最も優先順位の高いリクエストをＣＰＵ単位に選択し、リクエストセレクト信号をＣＰＵセレクタ２１〜２４に出力する。
【００４２】
ＣＰＵセレクタ２１〜２４はリクエスト選択回路１５からのＣＰＵ単位のリクエストセレクト信号によりＣＰＵごとにリクエストを選択し、メインセレクタ１８に送出する。
【００４３】
ＣＰＵ優先順位制御回路１７は、リクエストの優先順位をＣＰＵ番号で制御する。ＣＰＵ番号の優先順位は固定ではなく可変であり、優先順位が変わるタイミングはリクエストが出力される時である。この時、優先順位は出力したリクエストのＣＰＵ番号が次に最も優先順位が低くなるように、かつＣＰＵ０→ＣＰＵ１→ＣＰＵ２→ＣＰＵ３→ＣＰＵ０…の円環状の順番を保持するように設定する。具体的には、優先順位がＣＰＵ０＞ＣＰＵ１＞ＣＰＵ２＞ＣＰＵ３の場合、ＣＰＵ１のリクエストがメモリ制御部に送出されたとき、次のリクエスト選択時のＣＰＵ優先順位はＣＰＵ２＞ＣＰＵ３＞ＣＰＵ０＞ＣＰＵ１となる。
【００４４】
仮に、優先順位が最も高いＣＰＵ番号のリクエストがない場合は、次に優先順位が高いＣＰＵ番号から出力可能なリクエストを選択する。それでも出力可能なリクエストがない場合は優先順位を１つずつ下げて出力可能なリクエストを選択する。例えば、ＣＰＵ０＞ＣＰＵ１＞ＣＰＵ２＞ＣＰＵ３の時、リクエスト格納バッファ１１に出力可能なＣＰＵ０からのリクエストがなかった場合は、次に優先順位の高いＣＰＵ１からのリクエストから出力可能なリクエストを選択する。それでもない場合はＣＰＵ２、ＣＰＵ３と優先順位に従って選択する。
【００４５】
なお、ＣＰＵ優先順位制御回路１７は、必ずしもＣＰＵ０→ＣＰＵ１→ＣＰＵ２→ＣＰＵ３→ＣＰＵ０…の円環状の順番を保持するようにする必要はない。たとえばＣＰＵ０＞ＣＰＵ１＞ＣＰＵ２＞ＣＰＵ３の状態でＣＰＵ１からのリクエストを出力した場合、次のリクエスト選択時のＣＰＵ優先順位は、単純にＣＰＵ１のみを最下位に移動してＣＰＵ０＞ＣＰＵ２＞ＣＰＵ３＞ＣＰＵ１というようにしてもよい。
【００４６】
メインセレクタ１８は、ＣＰＵ優先順位制御回路１７からのセレクト信号により、セレクタ２１〜２４によって選択された各ＣＰＵのリクエストの中から最も優先順位の高いＣＰＵのリクエストを選択し、メモリ３２に送出する。
【００４７】
図３は、図２に示したメモリアクセス制御装置１０がリクエストに対して実行する処理を表すフローチャートである。リクエスト発行部３１からリクエストが発行されて処理を開始すると（ステップＳ１００）、まずリクエスト格納バッファ１１内にリクエストが格納されているか否かをチェックする（ステップＳ１０１）。
【００４８】
ステップＳ１０１でリクエスト格納バッファ１１にリクエストが格納されていなければ、続いてリクエスト発行部３１から受信したリクエストのアクセス先バンクがバンクビジー状態であるか否かを、バンクビジー制御回路１２によってチェックする（ステップＳ１０２）。バンクビジー状態でなければ、受信したリクエストはそのままメモリ３２に送出して（ステップＳ１０３）処理を終了する（ステップＳ１１３）。バンクビジー状態であれば、該リクエストをリクエスト格納バッファ１１に格納し（ステップＳ１０４）して処理を終了する（ステップＳ１１３）。
【００４９】
ステップ１０１でリクエストがリクエスト格納バッファ１１に格納されている場合、格納されているリクエストと受信したリクエストのアクセス先バンクがビジー状態であるかどうか、バンクビジー制御回路１２によってチェックする（ステップＳ１０５）。次にバッファに格納されているリクエストと受信したリクエスト各々のアドレスを比較し、受信したリクエストと同一アドレスの先行リクエストがリクエスト格納バッファ１１に存在しているか否かのチェックをアドレス比較回路１３によって行ない、格納されているすべてのリクエストについてのアドレス比較結果を出力する（ステップＳ１０６）。
【００５０】
リクエスト選択回路１５は、上記のチェックをパスしたリクエストの中から最も小さいワード番号のリクエストをＣＰＵごとに選択し（ステップＳ１０７）、ＣＰＵごとのリクエストセレクトを生成する（ステップＳ１０８）。そして該リクエストセレクトの中から、ＣＰＵ優先順位制御回路１７で設定されている優先順位の最も高いＣＰＵのリクエストを選択し、メモリ３２に出力する（ステップＳ１０９）。
【００５１】
次にリクエスト格納バッファ１１は、リクエストの出力されたことに伴い、バッファ内のリクエストの移動を行なう（ステップＳ１１０）。バンクビジー制御回路１２は、出力されるリクエストのバンクアドレス、コマンドから対応するバンクビジーカウンタにバンクビジー時間をセットする（ステップＳ１１１）。ＣＰＵ優先順位制御回路１７は、ステップ１０９でリクエストの出力されたＣＰＵを、最も低い優先順位に変更する（ステップＳ１１２）。以上で処理を終了する（ステップＳ１１３）。
【００５２】
なお、図３で示したフローチャートに係る各ステップの動作内容は、メモリアクセス制御装置１０があらかじめ備えるコンピュータで動作するプログラムとして実行させるようソフトウェア的に構成してもよいし、また論理演算などによってハードウェア的に構成してもよい。
【００５３】
図４は、図２〜３に示したメモリアクセス制御装置１０の具体的な動作を示すタイムチャートである。図５〜６と同様にリクエスト発行元のＣＰＵ数は４個、バンク数も４個、リクエスト格納バッファ内１１内のリクエストも、図６の説明で利用した例と全て同一のＷ０〜Ｗ１１である。図４における各リクエストの表記法は、図６におけるそれと同一である。たとえば「ＣＰＵ０からバンクＡへのリクエストであるＲ０」を、「Ｒ０（０／Ａ）」と表記する。また、新たなリクエストは受信しないこと、および同一バンクビジー時間は３Ｔとするという条件も、図６の説明で利用した例と同一である。
【００５４】
さらに、ＣＰＵ優先順位制御回路１７において、時刻Ｔ０におけるＣＰＵの優先順位はＣＰＵ０＞ＣＰＵ１＞ＣＰＵ２＞ＣＰＵ３と初期設定されている。なお、図４では、ＣＰＵの優先順位を「ＣＰＵ」の文字を省略して表記する。たとえば「０＞１＞２＞３」と表記されていれば、「ＣＰＵ０＞ＣＰＵ１＞ＣＰＵ２＞ＣＰＵ３」という優先順位を表す。
【００５５】
時刻Ｔ０においてはバンクビジー状態のバンクがないので、全リクエストが出力可能である。バンクビジー制御回路１２はバンクビジー信号を、アドレス比較回路１３はアドレス比較結果を、それぞれリクエスト選択回路１５に送る。リクエスト選択回路１５は、図３のステップ１０７に示したように、それらの条件をパスする最も小さいワード番号のリクエストを選択し、ＣＰＵごとのリクエストセレクト信号をＣＰＵセレクタ２１〜２４に送出する。
【００５６】
ＣＰＵごとのリクエストセレクト信号により、ＣＰＵ０用ＣＰＵセレクタ２１はＣＰＵ０のリクエストの中から出力可能な最もワード番号の小さいＷ０のリクエスト（Ｒ０）を選択する。ＣＰＵ１用ＣＰＵセレクタ２２はＣＰＵ１のリクエストの中から出力可能な最もワード番号の小さいＷ１のリクエスト（Ｒ１）を選択する。ＣＰＵ２用ＣＰＵセレクタ２３はＣＰＵ２のリクエストの中から出力可能な最もワード番号の小さいＷ２のリクエスト（Ｒ２）を選択する。ＣＰＵ３用ＣＰＵセレクタ２４はＣＰＵ３のリクエストの中から出力可能な最もワード番号の小さいＷ５のリクエスト（Ｒ５）を選択する。以上が、図３のステップ１０８で生成されるＣＰＵごとのリクエストセレクトである。
【００５７】
ここで時刻Ｔ０の時点でのＣＰＵ優先順位はＣＰＵ０＞ＣＰＵ１＞ＣＰＵ２＞ＣＰＵ３であるので、ＣＰＵ優先順位制御回路１７からのセレクト信号により、メインセレクタ１８はＣＰＵ０のリクエストを選択する。従って、Ｗ０のリクエスト（Ｒ０）がメモリ３２に出力される。
【００５８】
Ｗ０のリクエストが出力されると、その１周期後の時刻Ｔ１において、リクエスト格納バッファ１１内のＷ１〜Ｗ１１のリクエストはワード番号を１つずつ減少させたＷ０〜Ｗ１０に移動し、バンクビジー制御回路１２には出力されたリクエストのバンクＡに対してバンクビジー時間がセットされる。これによりバンクＡは３Ｔの間（Ｔ１〜Ｔ３）アクセスできなくなる。ＣＰＵ優先順位制御回路１７には出力したリクエストのＣＰＵ情報、具体的にはＣＰＵ０のリクエストを出力した旨の情報が送られる。
【００５９】
ＣＰＵ０のリクエストが出力されたので、ＣＰＵ優先順位制御回路１７は、次の時刻Ｔ１ではＣＰＵ０の順位が一番低い、ＣＰＵ１＞ＣＰＵ２＞ＣＰＵ３＞ＣＰＵ０という優先順位を設定する。次にバンクビジー制御回路１２からバンクＡのみバンクビジー状態である旨のバンクビジー信号、アドレス比較回路１３からアドレス比較結果がそれぞれリクエスト選択回路１５に送られ、リクエスト選択回路１５はそれらの条件をパスする最もワード番号の小さいワードを選択するリクエストセレクト信号を送出する。
【００６０】
ＣＰＵごとのリクエストセレクト信号により、ＣＰＵ０用ＣＰＵセレクタ２１はＣＰＵ０のリクエストの中から出力可能な最もワード番号の小さいＷ２のリクエスト（Ｒ３）を選択する。ＣＰＵ１用ＣＰＵセレクタ２２はＣＰＵ１のリクエストの中から出力可能な最もワード番号の小さいＷ３のリクエスト（Ｒ４）を選択する。ＣＰＵ２用ＣＰＵセレクタ２３はＣＰＵ２のリクエストの中から出力可能な最もワード番号の小さいＷ８のリクエスト（Ｒ９）を選択する。ＣＰＵ３用ＣＰＵセレクタ２４はＣＰＵ３のリクエストの中から出力可能な最もワード番号の小さいＷ４のリクエスト（Ｒ５）を選択する。以上がＣＰＵごとのリクエストセレクトとなる。
【００６１】
時刻Ｔ１のＣＰＵ優先順位はＣＰＵ１＞ＣＰＵ２＞ＣＰＵ３＞ＣＰＵ０であるので、ＣＰＵ優先順位制御回路１７からのセレクト信号により、メインセレクタ１８はＣＰＵ１のリクエストを選択する。従って、Ｗ３のリクエスト（Ｒ４）がメモリ３２に出力される。
【００６２】
Ｗ３のリクエストが出力されると時刻Ｔ２においてリクエスト格納バッファ１１内のＷ０〜Ｗ２のリクエストは現状のワード番号に格納されたままで、Ｗ４〜Ｗ１０のリクエストはワード番号を１つずつ減少させたＷ３〜Ｗ９に移動し、バンクビジー制御回路１２には出力されたリクエストのバンクＢに対してバンクビジー時間がセットされ、バンクＢは３Ｔの間（Ｔ２〜Ｔ４）アクセスできなくなる。ＣＰＵ優先順位制御回路１７には出力したリクエストのＣＰＵ情報、具体的にはＣＰＵ１のリクエストを出力した旨の情報が送られる。
【００６３】
ＣＰＵ１のリクエストが出力されたので、ＣＰＵ優先順位制御回路１７は、次の時刻Ｔ２ではＣＰＵ１の順位が一番低い、ＣＰＵ２＞ＣＰＵ３＞ＣＰＵ０＞ＣＰＵ１という優先順位を設定する。次にバンクビジー制御回路１２からバンクＡおよびバンクＢがバンクビジー状態である旨のバンクビジー信号、アドレス比較回路１３からアドレス比較結果がそれぞれリクエスト選択回路１５に送られ、リクエスト選択回路１５はそれらの条件をパスする最もワード番号の小さいワードを選択するリクエストセレクト信号を送出する。
【００６４】
ＣＰＵごとのリクエストセレクト信号によりＣＰＵ０用ＣＰＵセレクタ２１はＣＰＵ０のリクエストの中から出力可能な最もワード番号の小さいＷ４のリクエスト（Ｒ６）を選択する。ＣＰＵ１用ＣＰＵセレクタ２２はＣＰＵ１のリクエストの中から出力可能な最もワード番号の小さいＷ５のリクエスト（Ｒ７）を選択する。ＣＰＵ２用ＣＰＵセレクタ２３はＣＰＵ２のリクエストの中から出力可能な最もワード番号の小さいＷ７のリクエスト（Ｒ９）を選択する。ＣＰＵ３用ＣＰＵセレクタ２４はＣＰＵ３のリクエストの中から出力可能な最もワード番号の小さいＷ６のリクエスト（Ｒ８）を選択する。以上がＣＰＵごとのリクエストセレクトとなる。
【００６５】
時刻Ｔ２のＣＰＵ優先順位はＣＰＵ２＞ＣＰＵ３＞ＣＰＵ０＞ＣＰＵ１であるので、ＣＰＵ優先順位制御回路１７からのセレクト信号により、メインセレクタ１８はＣＰＵ２のリクエストを選択し、Ｗ７のリクエスト（Ｒ９）がメモリ３２に出力される。
【００６６】
Ｗ７のリクエストが出力されると時刻Ｔ３においてリクエスト格納バッファ１１内のＷ０〜Ｗ６のリクエストは現状のワード番号に格納されたままで、Ｗ８〜Ｗ９のリクエストはワード番号を１つずつ減少させたＷ７〜Ｗ８に移動し、バンクビジー制御回路１２には出力されたリクエストのバンクＤに対してバンクビジー時間がセットされ、バンクＤは３Ｔの間（Ｔ３〜Ｔ５）アクセスできなくなる。ＣＰＵ優先順位制御回路１７には出力したリクエストのＣＰＵ情報、具体的にはＣＰＵ２のリクエストを出力した旨の情報が送られる。
【００６７】
ＣＰＵ２のリクエストが出力されたので、ＣＰＵ優先順位制御回路１７は、次の時刻Ｔ３ではＣＰＵ２の順位が一番低い、ＣＰＵ３＞ＣＰＵ０＞ＣＰＵ１＞ＣＰＵ２という優先順位を設定する。
【００６８】
以降同様に制御を行なっていくと時刻Ｔ１１で全てのリクエストがメモリ３２に出力される。ここで図４のリクエスト出力順のＣＰＵ番号に着目すると、ＣＰＵ０のリクエストはＴ０、Ｔ７、Ｔ９で出力されている。ＣＰＵ１のリクエストはＴ１、Ｔ４、Ｔ１１で出力されている。ＣＰＵ２のリクエストはＴ２、Ｔ６、Ｔ８で出力されている。ＣＰＵ３のリクエストはＴ３、Ｔ５、Ｔ１０で出力されている。
【００６９】
つまり、図６のようなＣＰＵ間のリクエスト処理時間の偏りがなくなっており、平均化していることがわかる。また、本実施の形態でも図６同様に全ての出力が時刻Ｔ１１までに完了しているので、メモリスループット性能は低下していない。それでいてＣＰＵ間においてリクエストの処理時間の偏りを軽減しているので、装置全体としての性能を向上することが可能である。
【００７０】
以上、ＣＰＵおよびバンクが各々４つずつの例を示したが、これは本発明の概念をわかりやすく示すためにそのような例を示したに過ぎない。実際には、さらに多数のＣＰＵおよびバンクを有するマルチプロセッサシステムに本発明を適用して、性能の向上に寄与することができる。また、ＣＰＵの数とバンクの数とが同数である必要もない。
【００７１】
これまで本発明について図面に示した特定の実施の形態をもって説明してきたが、本発明は図面に示した実施の形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができることは言うまでもないことである。
【産業上の利用可能性】
【００７２】
本発明は、マルチプロセッサシステム、つまり複数のＣＰＵを搭載したコンピュータ装置に適用できる。より具体的にはスーパーコンピュータ、メインフレーム、ワークステーション、オフィスコンピュータ、パーソナルコンピュータなどのようなコンピュータ装置で、複数のＣＰＵを搭載したものに適用できる。
【図面の簡単な説明】
【００７３】
【図１】本発明の実施の形態に係るコンピュータの主要部分の構成を示すブロック図である。
【図２】図１に示したメモリアクセス制御装置の構成を示すブロック図である。
【図３】図２に示したメモリアクセス制御装置がリクエストに対して実行する処理を表すフローチャートである。
【図４】図２〜３に示したメモリアクセス制御装置の具体的な動作を示すタイムチャートである。
【図５】特許文献１に係る従来のメモリアクセス制御装置の構成を示すブロック図である。
【図６】図５に示した従来のメモリアクセス制御装置の具体的な動作を示すタイムチャートである。
【符号の説明】
【００７４】
１  コンピュータ
１０  メモリアクセス制御装置
１１  リクエスト格納バッファ
１２  バンクビジー制御回路
１３  アドレス比較回路
１４  リフレッシュ回路
１５  リクエスト選択回路
１７  ＣＰＵ優先順位制御回路
１８  メインセレクタ
２１〜２４  ＣＰＵセレクタ
３１  リクエスト発行部（複数のＣＰＵ）
３２  メモリ
【図１】
0004934857.tif 000002
【図２】
0004934857.tif 000003
【図３】
0004934857.tif 000004
【図４】
0004934857.tif 000005
【図５】
0004934857.tif 000006
【図６】
0004934857.tif 000007