説明

メモリアクセス制御装置、プロセッサ及びメモリアクセス制御方法

【課題】メモリアクセス制御装置におけるメモリ帯域の利用効率をさらに向上させる。
【解決手段】命令発行部311は、RAM11に格納された要素データにアクセスするメモリアクセス命令を発行する。監視部231は、RAM11に対するアクセスの混雑度を監視する。保持部324は、監視部231で監視された混雑度に応じて検出されたメモリアクセス命令を保持する。生成部325は、保持部324に保持されたメモリアクセス命令のうち、所定の条件を満たす複数のメモリアクセス命令を圧縮してアクセスリクエストを生成する。リプライデータ処理部331は、生成部325で生成されたアクセスリクエストに対するリプライデータを、圧縮前の複数のメモリアクセス命令各々のリプライデータに分解する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、メモリアクセス制御装置、プロセッサ及びメモリアクセス制御方法に関する。
【背景技術】
【0002】
近年、半導体技術の向上により、LSI(Large Scale Integration)に搭載される論理回路の数が飛躍的に増加している。論理回路の数の増加に伴い、CPU(Central Processing Unit)の演算性能が大きく向上している。しかし、メモリ帯域の向上は、RAM(Random Access Memory)の性能とLSIのピン数に依存するので、CPUの演算性能の向上に見合うだけのメモリ帯域の向上を実現するのは困難な状況である。また、マルチコアを搭載するCPUでは、各コアがメモリ帯域を共有している。このようなCPUでは、各コアが実行するアプリケーションに応じてコア間でメモリ帯域の利用に偏りが生じた場合には、CPUの演算性能が低下する。このため、メモリ帯域の利用効率の向上が望まれている。
【0003】
例えば、特許文献1開示された情報処理装置は、メモリバンク幅内の複数の要素データにアクセスするベクトルロード命令に対して、要素データ毎のメモリアクセスリクエストを生成することなく、メモリバンク単位で圧縮されたメモリアクセスリクエストを生成する。これにより、プロセッサ内での処理量を削減することができる。
【0004】
特許文献2に開示されたベクトルロード処理方式では、複素数データに対するベクトルロード命令において、実部のデータと虚部のデータとを異なるロードバッファに格納して、同時に処理する。こうすることで、主記憶読み出しリクエストを効率的に処理することができる。
【0005】
特許文献3に開示されたベクトル処理装置は、複素数データにおける実部データと虚部データとを連続データに整列し、1つのベクトルロード命令又はベクトルストア命令で実部データと虚部データとを扱う。これにより、複素数データの処理を高速化することができる。
【0006】
特許文献4には、同一のメモリバンクで競合する複数のメモリアクセスリクエストを1つに圧縮することによって制御信号数を削減するコンピュータ装置が開示されている。
【0007】
特許文献5には、同一のアドレスベクトル要素に対する主記憶装置へのデータ読み出しアクセスを圧縮することによって主記憶装置へのアクセス回数を減らすことができるリストベクトル処理システムが開示されている。
【先行技術文献】
【特許文献】
【0008】
【特許文献1】特開2010−218350号公報
【特許文献2】特許3786182号公報
【特許文献3】特許3961461号公報
【特許文献4】特開2007−249651号公報
【特許文献5】特許2908331号公報
【発明の概要】
【発明が解決しようとする課題】
【0009】
ところが、上記特許文献1に開示された情報処理装置では、複数のベクトルロード命令を1つに圧縮することができず、また、アクセスする複数の要素データがメモリバンク幅内でなければならない。上記特許文献2及び3に開示されたベクトルロード処理方式等では、効率的に処理できるのが複素数データに限られる。上記特許文献4又は5に開示されたコンピュータ装置等では、圧縮の対象となるのが、同一のメモリバンクで競合するメモリアクセスリクエスト又は同一のアドレスベクトル要素に対するデータ読み出しアクセスに限られる。
【0010】
このように上記特許文献1乃至5で開示された情報処理装置等では、圧縮の対象となるメモリアクセス命令に制限があり、メモリ帯域の利用効率の向上が限定的であった。
【0011】
本発明は、上記実情に鑑みてなされたものであり、メモリ帯域の利用効率をさらに向上させることができるメモリアクセス制御装置、プロセッサ及びメモリアクセス制御方法を提供することを目的とする。
【課題を解決するための手段】
【0012】
上記目的を達成するため、本発明の第1の観点に係るメモリアクセス制御装置は、
複数の要素データ各々をアドレスに対応付けて格納するメモリと、
前記メモリに格納された前記複数の要素データにアクセスするメモリアクセス命令を発行する命令発行部と、
前記メモリに対するアクセスの混雑度を監視する監視部と、
前記命令発行部によって発行された複数のメモリアクセス命令を保持して、前記監視部で監視された混雑度に応じて保持するメモリアクセス命令の数を増減させる保持部と、
前記保持部に保持された前記メモリアクセス命令のうち、所定の条件を満たす複数のメモリアクセス命令を圧縮してアクセスリクエストを生成する生成部と、
前記生成部で生成された前記アクセスリクエストに対するリプライデータを、圧縮前の前記複数のメモリアクセス命令各々のリプライデータに分解するリプライデータ処理部と、
を備える。
【0013】
また、本発明の第2の観点に係るプロセッサは、
複数のメモリアクセス制御装置を備えるプロセッサであって、
前記メモリアクセス制御装置各々は、
複数の要素データ各々をアドレスに対応付けて格納するメモリに格納された前記複数の要素データにアクセスするメモリアクセス命令を発行する命令発行部と、
前記メモリに対するアクセスの混雑度を監視する監視部と、
前記命令発行部によって発行された複数のメモリアクセス命令を保持して、前記監視部で監視された混雑度に応じて保持するメモリアクセス命令の数を増減させる保持部と、
前記保持部に保持された前記メモリアクセス命令のうち、所定の条件を満たす複数のメモリアクセス命令を圧縮してアクセスリクエストを生成する生成部と、
前記生成部で生成された前記アクセスリクエストに対するリプライデータを、圧縮前の前記複数のメモリアクセス命令各々のリプライデータに分解するリプライデータ処理部と、
を備える。
【0014】
また、本発明の第3の観点に係るメモリアクセス制御方法は、
複数の要素データ各々をアドレスに対応付けて格納するメモリに格納された前記複数の要素データにアクセスするメモリアクセス命令を発行する命令発行工程と、
前記メモリに対するアクセスの混雑度を監視する監視工程と、
前記命令発行工程において発行された複数のメモリアクセス命令を保持して、前記監視工程で監視された混雑度に応じて保持するメモリアクセス命令の数を増減させる保持工程と、
前記保持工程で保持された前記メモリアクセス命令のうち、所定の条件を満たす複数のメモリアクセス命令を圧縮してアクセスリクエストを生成する生成工程と、
前記生成工程で生成された前記アクセスリクエストに対するリプライデータを、圧縮前の前記複数のメモリアクセス命令各々のリプライデータに分解するリプライデータ処理工程と、
を含む。
【発明の効果】
【0015】
本発明によれば、メモリに対するアクセスの混雑度に応じて保持されたメモリアクセス命令が所定の条件を満たす場合に圧縮される。これにより、メモリに対するアクセスの回数を減らすことができるので、メモリ帯域の利用効率をさらに向上させることができる。
【図面の簡単な説明】
【0016】
【図1】実施形態1に係るメモリアクセス制御装置の構成を示すブロック図である。
【図2】ベクトルロード命令のフォーマットを示す図である。
【図3】保持部に記憶されるテーブルの例を示す図である。
【図4】実施形態1に係るベクトルロード命令に関する図である。
【図5】実施形態1に係る圧縮されたアクセスリクエストのフォーマットを示す図である。
【図6】実施形態1に係るアクセスリクエストの生成処理のタイミングチャートである。
【図7】実施形態2に係るメモリアクセス命令に関する図である。
【図8】実施形態2に係るアクセスリクエストの生成処理のタイミングチャートである。
【図9】実施形態2に係る圧縮されたアクセスリクエストのフォーマットを示す図である。
【図10】実施形態3に係る圧縮されたアクセスリクエストのフォーマットを示す図である。
【図11】実施形態4に係る圧縮されたアクセスリクエストのフォーマットを示す図である。
【図12】実施形態5に係る圧縮されたアクセスリクエストのフォーマットを示す図である。
【発明を実施するための形態】
【0017】
本発明の実施形態について、図面を参照して詳細に説明する。
【0018】
(実施形態1)
図1は、本実施形態に係るメモリアクセス制御装置100の構成を示す。メモリアクセス制御装置100は、メモリ10及びCPU20を備える。
【0019】
メモリ10は、RAM11、RAM12を備える。RAM11は、複数の要素データ各々をアドレスに対応付けて格納する。RAM11には、64バイト毎にバンクが設けられており、0バイトから63バイトをバンク0、64バイトから127バイトをバンク1とする。RAM12は、RAM11と同じであるため、説明を省略する。
【0020】
CPU20は、自身が発行するメモリアクセス命令に基づいて、RAM11、12に格納された各要素データにアクセスする。
【0021】
メモリアクセス命令には、ベクトルロード命令及びベクトルストア命令が含まれる。ベクトルロード命令は、RAM11、12に格納された複数の要素データを読み出す命令である。本実施形態では、ベクトルロード命令は、指定されたアドレスから8バイトの要素データを読み出すものとする。ベクトルストア命令は、RAM11、12に複数の要素データを格納する命令である。
【0022】
例えば、図2に示すように、ベクトルロード命令のフォーマットでは、オペレーションコードとして「VLD」が定義される。ベクトルロード命令のフォーマットは、3オペランド形式である。ベクトルロード命令のフォーマットでは、Xフィールドにディスティネーションレジスタ、Yフィールドにベースアドレス、Zフィールドにディスタンスが定義される。
【0023】
ベクトルロード命令は、RAM11、12に格納された要素データの内、ベースアドレスで指定されたアドレスに対応する要素データからディスタンスで指定されたアドレス間隔で複数の要素データを1命令で読み出す。1命令で処理する要素数は、ベクトル長としてCPU20内のベクトル長設定レジスタ(不図示)に設定される。本実施形態では、ベクトル長設定レジスタの値は、0〜256をとるものとする。
【0024】
図1に戻り、CPU20は、メモリ制御部210と、メモリ制御部220と、ネットワーク部230と、コア300と、コア400とを備える。
【0025】
メモリ制御部210、220は、メモリアクセス命令に基づいて生成されたアクセスリクエストをRAM11、12に出力する。メモリ制御部210、220は、アクセスリクエストに対してRAM11、12によって入力されたデータをネットワーク部230に出力する。
【0026】
ネットワーク部230は、コア300、400によって入力されたアクセスリクエストをメモリ制御部210、220に出力する。ネットワーク部230は、監視部231を備える。監視部231は、RAM11、12に対するアクセスの混雑度を監視する。例えば、監視部231は、混雑度として、RAM11、12に対する仕掛かり中のアクセスリクエスト数を監視する。監視部231は、混雑度をコア300、400に出力する。
【0027】
コア300は、スカラ処理部310と、アドレス制御部320と、ベクトル処理部330とを備える。コア400は、スカラ処理部410と、アドレス制御部420と、ベクトル処理部430とを備える。コア400は、コア300と同じであるため、以下ではコア300について詳細に説明する。
【0028】
スカラ処理部310は、プログラムの命令をその実行順にデコードしてメモリアクセス命令を発行する。スカラ処理部310は、命令発行部311を備える。命令発行部311は、RAM11、12に格納された複数の要素データにアクセスするメモリアクセス命令を発行する。命令発行部311から発行されたメモリアクセス命令は、アドレス制御部320及びベクトル処理部330に出力される。
【0029】
アドレス制御部320は、命令検出部321と、圧縮制御部322と、出力制御部323とを備える。
【0030】
命令検出部321は、命令発行部311によって発行されたメモリアクセス命令の中から、先行する未処理のメモリアクセス命令との間で、アクセスするアドレスが依存しないメモリアクセス命令を検出する。
【0031】
これにより、圧縮されるメモリアクセス命令の候補が検出される。「アドレスが依存しない」とは、複数のメモリアクセス命令間でアクセスするアドレスが重複しないことをいう。命令検出部321が、先行する未処理のメモリアクセス命令との間でアクセスするアドレスが依存しないメモリアクセス命令を検出するのは、例えば、メモリアクセス命令が圧縮された結果、先行するベクトルストア命令Aを追い越した後続のベクトルロード命令Bによって要素データが読み出されると、読み出された要素データは、ベクトルストア命令Aで格納されるはずだった要素データと異なり問題となるからである。
【0032】
命令検出部321は、メモリアクセス命令を圧縮制御部322に出力する。命令検出部321により検出されたメモリアクセス命令を圧縮制御部322に出力する場合は、命令検出部321は、当該メモリアクセス命令と、当該メモリアクセス命令が圧縮の候補であることを示す圧縮候補フラグとを出力する。
【0033】
圧縮制御部322は、保持部324と、生成部325とを備える。保持部324は、命令発行部311によって発行された複数のメモリアクセス命令を保持して、監視部231で監視された混雑度に応じて保持するメモリアクセス命令の数を増減させる。
【0034】
例えば、保持部324は、仕掛かり中のアクセスリクエスト数に対応するクロック数だけメモリアクセス命令を保持する。保持部324は、図3に示すように、仕掛かり中のアクセスリクエスト数と待ち合わせるクロック数とが対応付けられたテーブルを記憶する。保持部324は、当該テーブルを参照して、監視部231から出力された仕掛かり中のアクセスリクエスト数に対応するクロック数を取得する。
【0035】
例えば、監視部231から出力された仕掛かり中のアクセスリクエスト数が「4」の場合、待ち合わせるクロック数は「8」なので、保持部324は、8クロック経過するまで発行されたメモリアクセス命令を保持する。
【0036】
なお、保持部324は、仕掛かり中のアクセスリクエスト数に対応する数の後続のメモリアクセス命令を保持するようにしてもよい。例えば、仕掛かり中のアクセスリクエスト数が1〜3の場合には、保持部324は、後続の1つのメモリアクセス命令を待ち合わせ、仕掛かり中のアクセスリクエスト数が4〜7の場合には、後続の2つのメモリアクセス命令を待ち合わせるようにしてもよい。
【0037】
生成部325は、保持部324に保持されたメモリアクセス命令のうち、所定の条件としての圧縮条件を満たす複数のメモリアクセス命令を圧縮してアクセスリクエストを生成する。所定の条件としての圧縮条件は、命令検出部321で検出されたメモリアクセス命令であって、各メモリアクセス命令のフォーマットに含まれる各ベースアドレスの差がRAM11のバンクのサイズ内であって、各メモリアクセス命令のフォーマットに含まれる各ディスタンスが一致し、各メモリアクセス命令のフォーマットに含まれる各ベクトル長に一致する範囲があることである。
【0038】
より具体的には、生成部325は、命令検出部321から圧縮候補フラグとともに出力された複数のメモリアクセス命令が、上記各メモリアクセス命令のフォーマットに含まれるベースアドレス、ディスタンス、ベクトル長に関する条件を満たすか否かを判定する。生成部325は、各メモリアクセス命令が圧縮条件を満たす場合に各メモリアクセス命令を圧縮する。
【0039】
より具体的に、図4に示す2つの異なるベクトルロード命令を圧縮して1つのアクセスリクエストを生成する場合を説明する。
【0040】
発行された順序が1番であるベクトルロード命令「ベクトルロードA」は、ベースアドレスが「000」、ディスタンスが「16バイト」、ベクトル長が「256バイト」である。発行された順序が2番であるベクトルロード命令「ベクトルロードB」は、ベースアドレスが「008」、ディスタンスが「16バイト」、ベクトル長が「256バイト」である。ベクトルロード命令Aがアクセスするアドレスは、「000〜007」、「016〜023」、・・・「224〜231」、「240〜247」である。一方、ベクトルロード命令Bがアクセスするアドレスは、「008〜015」、「024〜031」、・・・「232〜238」、「248〜255」である。
【0041】
ベクトルロード命令Aは、先行する未処理のメモリアクセス命令との間でアドレスの依存がないものとする。よって、ベクトルロード命令Aは、アドレス依存が「無し」となる。ベクトルロード命令Bは、先行する未処理のベクトルロード命令Aとの間でアドレスの依存ないため、アドレス依存が「無し」である。ベースアドレス、ディスタンス、ベクトル長に関する条件について検討すると、ベースアドレスの差が8バイトであるため、RAM11のバンクのサイズ「64バイト」以内であって、ディスタンスはともに「16バイト」で一致しており、ベクトル長はともに「256バイト」で一致する範囲がある。このため、ベクトルロード命令Bは、ベクトルロード命令Aと圧縮可能である。
【0042】
圧縮されたアクセスリクエストのフォーマットについて、図5を参照して説明する。図5には、アクセスリクエストのフォーマットにおける先頭の128バイトまでが例示されている。本実施形態では、ベクトルロード命令は、指定されたアドレスから8バイトの要素データを読み出すため、アドレス8バイト毎にゾーンが割り当てられている。アドレス「000〜007」、「008〜015」、「016〜023」、「024〜031」、「032〜039」、「040〜047」、「048〜055」、「056〜063」各々には、バンク内での位置を示すゾーン番号「0」、「1」、「2」、「3」、「4」、「5」、「6」、「7」が割り当てられている。ゾーン有効バイトは、リプライデータを要求するか否かを示す。リプライデータを要求するゾーンに対応するゾーン有効バイトは、「1」であって、リプライデータを要求しないゾーンに対応するゾーン有効バイトは、「0」である。
【0043】
例えば、図4で例示したベクトルロード命令Aは、ベースアドレスが「000」であって、ディスタンスが「16バイト」であって、ベクトル長が「256バイト」であるため、バンク0乃至3各々のゾーン番号「0、2、4、6」に対応するゾーン有効ビットが「1」である。ベクトルロード命令Bは、ベースアドレスが「008」であって、ディスタンスが「16バイト」であって、ベクトル長が「256バイト」であるため、バンク0乃至3各々のゾーン番号「1、3、5、7」に対応するゾーン有効ビットが「1」である。
【0044】
ベクトルロード命令Aとベクトルロード命令Bとが圧縮されたアクセスリクエストは、バンク0乃至3各々のゾーン番号「0、1、2、3、4、5、6、7」に対応するゾーン有効ビットが「1」となる。
【0045】
RAM11、12へのアクセスはバンク単位で行われるため、ベクトルロード命令A、Bが圧縮されない場合は、先頭のアドレスが8バイトずれた飛びアクセスを要求するアクセスリクエストが2回発行され、同じバンクに対して2回のアクセスが行われる。一方、ベクトルロード命令A、Bが圧縮された場合は、連続アクセスを要求するアクセスリクエストが1回で済むのでアクセスリクエスト数が半分に削減される。
【0046】
生成部325は、生成したアクセスリクエスト、ベースアドレス、ディスタンス、ベクトル長を出力制御部323に出力するとともに、生成部325は、複数のメモリアクセス命令各々がアクセスするアドレスをベクトル処理部330に出力する。より具体的には、生成部325は、ベクトルロード命令Aがアクセスするゾーンの有効ビットが「1」である各バンクのゾーン番号「0、2、4、6」及びベクトルロード命令Bがアクセスするゾーンの有効ビットが「1」である各バンクのゾーン番号「1、3、5、7」をベクトル処理部330に出力する。
【0047】
先行する未処理のメモリアクセス命令との間でアドレスの依存があるメモリアクセス命令及び圧縮条件を満たさないメモリアクセス命令については、生成部325は、当該メモリアクセス命令を圧縮することなく、当該メモリアクセス命令に基づいてアクセスリクエストを生成し、先のアクセスリクエストが処理されてからアクセスリクエストを出力制御部323に出力する。これとともに、生成部325は、メモリアクセス命令を圧縮しないことをベクトル処理部330に通知する。
【0048】
なお、生成部325によって圧縮された個々のメモリアクセス命令に基づくアクセスリクエストは生成されない。
【0049】
出力制御部323は、生成部325により入力されたアクセスリクエスト、ベースアドレス、ディスタンス、ベクトル長に基づいてバンクのサイズ毎のアクセスリクエストに分解後、ネットワーク部230にアクセスリクエストを出力する。
【0050】
ベクトル処理部330は、リプライデータ処理部331を備える。リプライデータ処理部331は、生成部325で生成されたアクセスリクエストに対するリプライデータを、圧縮前の複数のメモリアクセス命令各々のリプライデータに分解する。より具体的には、リプライデータ処理部331は、ネットワーク部230からリプライデータを受け付けると、生成部325から出力されたゾーン番号に基づいて、リプライデータを圧縮前のベクトルロード命令A、B各々のリプライデータに分解する。分解されたリプライデータに基づいて、コア300はベクトルロード命令A、B各々によって読み出す要素データを取得できる。
【0051】
次に、図4に示すベクトルロード命令A、Bを例に用いて、図6を参照しながらアクセスリクエストの生成処理を詳細に説明する。前提として、監視部231から出力される仕掛かり中のアクセスリクエスト数は4とする。また、ベクトルロード命令Aが発行されてから、4クロック後にベクトルロード命令Bが発行されるものとする。
【0052】
クロックt(n)において、命令発行部311は、ベクトルロード命令Aをアドレス制御部320に発行する。命令検出部321は、先行する未処理のメモリアクセス命令との間でアドレスが依存しないメモリアクセス命令としてベクトルロード命令Aを検出する。命令検出部321は、圧縮候補フラグとともにベクトルロード命令Aを圧縮制御部322に出力する。
【0053】
保持部324は、テーブルを参照して、監視部231から出力された仕掛かり中のアクセスリクエスト数「4」に対応する待ち合わせるクロック数「8」を取得する。
【0054】
保持部324は、8クロック経過するまでベクトルロード命令Aを保持する。
【0055】
クロックt(n+4)になると、命令発行部311は、ベクトルロード命令Bをアドレス制御部320に発行する。命令検出部321は、先行する未処理のベクトルロード命令Aとの間でアドレスが依存しないメモリアクセス命令としてベクトルロード命令Bを検出する。命令検出部321は、圧縮候補フラグとともにベクトルロード命令Bを圧縮制御部322に出力する。
【0056】
保持部324は、ベクトルロード命令Aを保持してから8クロック経過するまでベクトルロード命令Bを保持する。
【0057】
クロックt(n+8)になると、ベクトルロード命令Aを保持してから8クロックが経過したため、生成部325は、圧縮候補フラグとともに出力されたベクトルロード命令A、Bが圧縮可能か否かを判定する。上記で検討したように、ベクトルロード命令A、Bは圧縮可能と判定される。生成部325は、ベクトルロード命令A、Bを圧縮してアクセスリクエストを生成する。生成部325は、生成したアクセスリクエスト等を出力制御部323に出力するとともに、ベクトルロード命令A、Bがアクセスするゾーン番号をベクトル処理部330に出力する。
【0058】
出力制御部323は、アクセスリクエスト等に基づいてバンクのサイズ毎のアクセスリクエストに分解後、ネットワーク部230にアクセスリクエストを出力する。リプライデータ処理部331は、ネットワーク部230を介してリプライデータを受け付けると、生成部325から出力されたゾーン番号に基づいて、リプライデータを圧縮前のベクトルロード命令A、B各々のリプライデータに分解する。分解されたリプライデータに基づいて、コア300はベクトルロード命令A、B各々によって読み出す要素データを取得できる。
【0059】
(実施形態2)
本実施形態2では、図7に示すような8つのメモリアクセス命令(6つのベクトルロード命令及び2つのベクトルストア命令)が命令発行部311によって発行された場合を説明する。ベクトルロード命令A、B、C、E、F、Gは、ベースアドレスがそれぞれ「000」、「008」、「016」、「024」、「032」、「040」であって、ディスタンスが「64バイト」、ベクトル長が「256バイト」である。ベクトルストア命令D、Hは、ベースアドレスがそれぞれ「40000」、「40008」であって、ディスタンスが「16バイト」、ベクトル長が「256バイト」である。発行される順序は、ベクトルロード命令A、B、C、ベクトルストア命令D、ベクトルロード命令E、F、G、ベクトルストア命令Hである。
【0060】
ベクトルロード命令Aは、先行する未処理のメモリアクセス命令との間でアドレスの依存がないものとする。よって、ベクトルロード命令Aは、アドレス依存が「無し」となる。ベクトルロード命令Bは、先行する未処理のベクトルロード命令Aとの間でアドレスの依存がないため、アドレス依存が「無し」である。ベクトルロード命令Cは、先行する未処理のベクトルロード命令A、Bとの間でアドレスの依存がないため、アドレス依存が「無し」である。
【0061】
ベクトルストア命令Dは、アクセスするアドレスが「4000」以降であるのに対し、ベクトルロード命令A、B、C各々がアクセスするアドレスは「000〜007」、「008〜015」、「016〜023」であるので、ベクトルストア命令Dは、先行する未処理のベクトルロード命令A、B、Cとの間でアドレスの依存がない。このため、ベクトルストア命令Dは、アドレス依存が「無し」である。以下同様に、ベクトルロード命令E、F、G、Hは、先行する未処理のメモリアクセス命令との間でアドレスの依存がないため、アドレス依存が「無し」である。
【0062】
ベースアドレス、ディスタンス、ベクトル長に関する条件について検討すると、ベクトルロード命令A、B、C、E、F、Gについては、ベースアドレスの差がRAM11のバンクのサイズ内である。また、ディスタンスはいずれも64バイトで一致する。また、ベクトル長がどちらも256バイトであって、一致する範囲がある。以上より、ベクトルロード命令B、C、E、F、Gはベクトルロード命令Aと圧縮可能である。ベクトルストア命令D、Hは、ベクトルロード命令A、B、C、E、F、Gとのベースアドレスの差がRAM11のバンクのサイズ内でないので、圧縮できない。以上より、ベクトルロード命令E、F、Gは、ベクトルストア命令Dを追い越して、ベクトルロード命令A、B、Cと圧縮されてもよい。
【0063】
図7に示すベクトルロード命令A、B、C、ベクトルストア命令D、ベクトルロード命令E、F、G、ベクトルストア命令Hを例に用いて、図8を参照しながらアクセスリクエストの生成処理を詳細に説明する。前提として、監視部231から出力される仕掛かり中のアクセスリクエスト数は24とする。また、ベクトルロード命令Aが発行されてから、4クロック毎に順次7つのメモリアクセス命令が発行されるものとする。
【0064】
クロックt(n)において、命令発行部311は、ベクトルロード命令Aをアドレス制御部320に発行する。命令検出部321は、ベクトルロード命令Aを圧縮候補フラグとともに圧縮制御部322に出力する。
【0065】
保持部324は、テーブルを参照して、監視部231から出力された仕掛かり中のアクセスリクエスト数「24」に対応する待ち合わせるクロック数「48」を取得する。
【0066】
保持部324は、48クロック経過するまでベクトルロード命令Aを保持する。
【0067】
以後、保持部324は、ベクトルロード命令Aを保持してから48クロック経過するまで、クロックt(n+4)、t(n+8)・・・t(n+28)に発行されるベクトルロード命令B、C、ベクトルストア命令D、ベクトルロード命令E、F、G、ベクトルストア命令Hを保持する。
【0068】
クロックt(n+48)になると、ベクトルロード命令Aを保持してから48クロックが経過したため、生成部325は、圧縮候補フラグとともに出力されたベクトルロード命令A、B、C、ベクトルストア命令D、ベクトルロード命令E、F、G、ベクトルストア命令Hが圧縮可能か否かを判定する。上記で検討したように、ベクトルロード命令B、C、E、F、Gはベクトルロード命令Aと圧縮可能であると判定される。図9に示すように、生成部325は、ベクトルロード命令A、B、C、E、F、Gを圧縮してアクセスリクエストを生成する。生成部325は、生成したアクセスリクエスト等を出力制御部323に出力する。これとともに、生成部325は、ベクトルロード命令A、B、C、E、F、G各々がアクセスするゾーンの有効ビットが「1」である各バンクのゾーン番号「0」、「1」、「2」、「3」、「4」、「5」をベクトル処理部330に出力する。
【0069】
t(n+49)、t(n+50)の各クロックでは、生成部325は、圧縮できないと判定されたベクトルストア命令D、Hに基づいてアクセスリクエストを生成し、各アクセスリクエストを出力制御部323に出力する。これとともに、生成部325は、ベクトルロード命令等を圧縮しないことをベクトル処理部330に通知する。
【0070】
ベクトルロード命令A、B、C、E、F、Gが圧縮されない場合は、先頭のアドレスが8バイトずれた飛びアクセスを要求するアクセスリクエストが6回発行され、同じバンクに対して6回のアクセスが行われる。しかし、6つのベクトルロード命令が圧縮された場合は、連続アクセスを要求するアクセスリクエストが1回で済むのでアクセスリクエスト数が1/6に削減される。
【0071】
(実施形態3)
図10は、上記実施形態1のアクセスリクエストの生成処理によって、8つのベクトルロード命令A乃至Hを圧縮したアクセスリクエストを示す。ベクトルロード命令A乃至Hの各ベースアドレスは、「000」、「008」、「016」、「024」、「032」、「040」、「048」、「056」であって、各ディスタンスは「64バイト」、各ベクトル長は「256バイト」である。
【0072】
8つのベクトルロード命令が圧縮されない場合は、先頭のアドレスが8バイトずれた飛びアクセスを要求するアクセスリクエストが8回発行され、同じバンクに対して8回のアクセスが行われる。一方、8つのベクトルロード命令が圧縮された場合は、連続アクセスを要求するアクセスリクエストが1回で済むのでアクセスリクエスト数が1/8に削減される。
【0073】
(実施形態4)
図11は、上記実施形態1のアクセスリクエストの生成処理によって、2つのベクトルロード命令A、Bを圧縮したアクセスリクエストを示す。ベクトルロード命令A、Bの各ベースアドレスは、「000」、「032」であって、各ディスタンスは「64バイト」、各ベクトル長は「256バイト」である。
【0074】
このように、2つのベクトルロード命令A、Bが圧縮されたアクセスリクエストが連続アクセスにならなくても、アクセスするアドレスが同一バンク内であれば自由に圧縮することができる。
【0075】
(実施形態5)
本実施形態では、2つのベクトルロード命令のベクトル長が完全に一致しない場合のアクセスリクエストの生成処理を説明する。図12は、上記実施形態1のアクセスリクエストの生成処理によって、2つのベクトルロード命令A、Bを圧縮したアクセスリクエストを示す。ベクトルロード命令Aのベースアドレスは、「000」であって、ディスタンスは「16バイト」、ベクトル長は「64バイト」である。ベクトルロード命令Bのベースアドレスは、「008」であって、ディスタンスは「16バイト」、ベクトル長は「256バイト」である。この場合、生成部325は、ベクトルロード命令A、Bのバンク0内のアドレスにアクセスするベクトルロード命令を圧縮して、アクセスリクエストを生成する。生成部325は、圧縮されなかったベクトルロード命令Bのバンク1内のアドレスにアクセスするベクトルロード命令については、圧縮せずに、別のアクセスリクエストとして生成する。
【0076】
このようにすることで、ベクトル長が完全に一致しないベクトルロード命令でも圧縮することが可能であり、バンク0に対するアクセスリクエストは1回で済むのでアクセスリクエスト数が削減される。
【0077】
以上詳細に説明したように、上記各実施形態によれば、RAM11、12に対するアクセスの混雑度に応じて保持されたメモリアクセス命令が所定の条件を満たす場合に圧縮される。これにより、RAM11、12に対するアクセスの回数を減らすことができるので、メモリ帯域の利用効率をさらに向上させることができる。
【0078】
また、上記各実施形態によれば、監視部231は、RAM11、12に対する仕掛かり中のアクセスリクエスト数を監視するようにした。これによりアクセスリクエスト数が0の場合は、生成部325は、圧縮せずに個々のベクトルロード命令に基づくアクセスリクエストを生成する。アクセスリクエスト数が少ない場合は、生成部325は、少ない数のベクトルロード命令を圧縮してアクセスリクエストを生成する。このため、多数のアクセスが集中してメモリ帯域が混雑していないときに、後続するベクトルロード命令を必要以上に待ち合わせることによるメモリアクセスレイテンシンの増加を防ぐことができる。
【0079】
また、ベクトルロード命令をバンク毎のアクセスリクエストに分解してから圧縮するか否かを判定する場合、例えば、ベクトル長が256バイトのときに、ディスタンスにもよるが、最大で256のアクセスリクエストになるため、これらアクセスリクエストを圧縮するか否か判定するには、巨大なバッファと大量のデータ処理が必要となる。しかし、上記各実施形態によれば、ベクトルロード命令をバンク毎のアクセスリクエストに分解することなくベクトルロード命令を圧縮するか否かが判定されるため、少ない処理工程で多数のベクトルロード命令を圧縮対象とすることができる。
【0080】
また、上記各実施形態によれば、アクセスリクエスト数を減らすことによって、メモリアクセス制御装置1の消費電力も削減できる。
【0081】
なお、上記実施形態では、監視部231は、RAM11、12に対するアクセスの混雑度を監視するために、混雑度として、仕掛かり中のアクセスリクエスト数を監視することとしたが、コア300、400から出力されるアクセスリクエスト数の合計を監視してもよいし、コア300、400各々から出力されるアクセスリクエスト数を個別に監視してもよい。また、上記実施形態では、ネットワーク部230が監視部231を備えるようにしたが、メモリ制御部210、220が監視部231を備えるようにしてもよい。
【0082】
また、監視部231は、メモリ制御部210、220における仕掛かり中のアクセスリクエスト数を別個に監視して、圧縮制御部322、422に通知し、メモリアクセス命令がアクセスするアドレス毎に待ち合わせるクロック数を設定してもよい。
【0083】
なお、ベクトル処理部330が監視部231を備え、監視部231は、混雑度として、アクセスリクエストが生成部325で生成されてからリプライデータを受け付けるまでの時間を監視してもよい。より詳細には、監視部231は、出力制御部323がアクセスリクエストを出力してから、そのアクセスリクエストに対するリプライデータをベクトル処理部330が受け付けるまでの時間を監視する。例えば、監視部231は、アクセスリクエストが出力されてからリプライデータを受け付けるまでの時間の理論値と実際の時間とを比較する。この場合、実際の時間が理論値の時間よりも遅くなればなるほど混雑度が高くなる。
【0084】
なお、上記各実施形態では、ベクトルロード命令を圧縮する場合を説明したが、ベクトルストア命令を圧縮してもよい。また、上記実施形態では、コア300におけるアクセスリクエストの生成処理を説明したが、コア400も同じくアクセスリクエストの生成処理が可能である。
【0085】
なお、コア300、400は、1つであっても、3つ以上であってもよい。また、メモリ制御部210、220は、1つであっても、3つ以上であってもよい。また、RAM11、12は、1つであっても、3つ以上であってもよい。
【0086】
なお、本実施形態では、ベクトルロード命令は、指定されたアドレスから8バイトの要素データを読み出すものとしたが、指定されたアドレスから4バイトの要素データを読み出すようにしてもよい。
【0087】
なお、本発明は、上記実施形態及び図面によって限定されるものではない。本発明の要旨を変更しない範囲で実施形態及び図面に変更を加えることができるのはもちろんである。
【0088】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【0089】
(付記1)
複数の要素データ各々をアドレスに対応付けて格納するメモリと、
前記メモリに格納された前記複数の要素データにアクセスするメモリアクセス命令を発行する命令発行部と、
前記メモリに対するアクセスの混雑度を監視する監視部と、
前記命令発行部によって発行された複数のメモリアクセス命令を保持して、前記監視部で監視された混雑度に応じて保持するメモリアクセス命令の数を増減させる保持部と、
前記保持部に保持された前記メモリアクセス命令のうち、所定の条件を満たす複数のメモリアクセス命令を圧縮してアクセスリクエストを生成する生成部と、
前記生成部で生成された前記アクセスリクエストに対するリプライデータを、圧縮前の前記複数のメモリアクセス命令各々のリプライデータに分解するリプライデータ処理部と、
を備えるメモリアクセス制御装置。
【0090】
(付記2)
前記監視部は、
前記混雑度として、仕掛かり中のアクセスリクエスト数、又は前記アクセスリクエストが前記生成部で生成されてからリプライデータを受け付けるまでの時間を監視し、
前記保持部は、
仕掛かり中のアクセスリクエスト数に対応するクロック数、又はアクセスリクエストが前記生成部で生成されてからリプライデータを受け付けるまでの時間に対応するクロック数だけメモリアクセス命令を保持する、
ことを特徴とする付記1に記載のメモリアクセス制御装置。
【0091】
(付記3)
前記保持部は、
仕掛かり中のアクセスリクエスト数に対応する数の後続のメモリアクセス命令を保持する、
ことを特徴とする付記2に記載のメモリアクセス制御装置。
【0092】
(付記4)
前記命令発行部によって発行されたメモリアクセス命令の中から、先行する未処理のメモリアクセス命令との間で、アクセスするアドレスが依存しないメモリアクセス命令を検出する命令検出部とをさらに備え、
前記所定の条件は、
前記命令検出部で検出されたメモリアクセス命令であって、前記複数のメモリアクセス命令のフォーマットに含まれる各ベースアドレスの差が前記メモリのバンクのサイズ内であって、前記複数のメモリアクセス命令のフォーマットに含まれる各ディスタンスが一致し、前記複数のメモリアクセス命令のフォーマットに含まれる各ベクトル長に一致する範囲がある、
ことを特徴とする付記1乃至3のいずれかに記載のメモリアクセス制御装置。
【0093】
(付記5)
前記メモリアクセス命令は、
前記メモリに格納された複数の要素データを読み出すベクトルロード命令及び前記メモリに複数の要素データを格納するベクトルストア命令を含むメモリアクセス命令を含む、
ことを特徴とする付記1乃至4のいずれかに記載のメモリアクセス制御装置。
【0094】
(付記6)
複数のメモリアクセス制御装置を備えるプロセッサであって、
前記メモリアクセス制御装置各々は、
複数の要素データ各々をアドレスに対応付けて格納するメモリに格納された前記複数の要素データにアクセスするメモリアクセス命令を発行する命令発行部と、
前記メモリに対するアクセスの混雑度を監視する監視部と、
前記命令発行部によって発行された複数のメモリアクセス命令を保持して、前記監視部で監視された混雑度に応じて保持するメモリアクセス命令の数を増減させる保持部と、
前記保持部に保持された前記メモリアクセス命令のうち、所定の条件を満たす複数のメモリアクセス命令を圧縮してアクセスリクエストを生成する生成部と、
前記生成部で生成された前記アクセスリクエストに対するリプライデータを、圧縮前の前記複数のメモリアクセス命令各々のリプライデータに分解するリプライデータ処理部と、
を備えることを特徴とするプロセッサ。
【0095】
(付記7)
複数の要素データ各々をアドレスに対応付けて格納するメモリに格納された前記複数の要素データにアクセスするメモリアクセス命令を発行する命令発行工程と、
前記メモリに対するアクセスの混雑度を監視する監視工程と、
前記命令発行工程において発行された複数のメモリアクセス命令を保持して、前記監視工程で監視された混雑度に応じて保持するメモリアクセス命令の数を増減させる保持工程と、
前記保持工程で保持された前記メモリアクセス命令のうち、所定の条件を満たす複数のメモリアクセス命令を圧縮してアクセスリクエストを生成する生成工程と、
前記生成工程で生成された前記アクセスリクエストに対するリプライデータを、圧縮前の前記複数のメモリアクセス命令各々のリプライデータに分解するリプライデータ処理工程と、
を含むメモリアクセス制御方法。
【符号の説明】
【0096】
10 メモリ
11、12 RAM
20 CPU
100 メモリアクセス制御装置
210、220 メモリ制御部
230 ネットワーク部
231 監視部
300、400 コア
310、410 スカラ処理部
311、411 命令発行部
320、420 アドレス制御部
321、421 命令検出部
322、422 圧縮制御部
323、423 出力制御部
324、424 保持部
325、425 生成部
330、430 ベクトル処理部
331、431 リプライデータ処理部

【特許請求の範囲】
【請求項1】
複数の要素データ各々をアドレスに対応付けて格納するメモリと、
前記メモリに格納された前記複数の要素データにアクセスするメモリアクセス命令を発行する命令発行部と、
前記メモリに対するアクセスの混雑度を監視する監視部と、
前記命令発行部によって発行された複数のメモリアクセス命令を保持して、前記監視部で監視された混雑度に応じて保持するメモリアクセス命令の数を増減させる保持部と、
前記保持部に保持された前記メモリアクセス命令のうち、所定の条件を満たす複数のメモリアクセス命令を圧縮してアクセスリクエストを生成する生成部と、
前記生成部で生成された前記アクセスリクエストに対するリプライデータを、圧縮前の前記複数のメモリアクセス命令各々のリプライデータに分解するリプライデータ処理部と、
を備えるメモリアクセス制御装置。
【請求項2】
前記監視部は、
前記混雑度として、仕掛かり中のアクセスリクエスト数、又は前記アクセスリクエストが前記生成部で生成されてからリプライデータを受け付けるまでの時間を監視し、
前記保持部は、
仕掛かり中のアクセスリクエスト数に対応するクロック数、又はアクセスリクエストが前記生成部で生成されてからリプライデータを受け付けるまでの時間に対応するクロック数だけメモリアクセス命令を保持する、
ことを特徴とする請求項1に記載のメモリアクセス制御装置。
【請求項3】
前記保持部は、
仕掛かり中のアクセスリクエスト数に対応する数の後続のメモリアクセス命令を保持する、
ことを特徴とする請求項2に記載のメモリアクセス制御装置。
【請求項4】
前記命令発行部によって発行されたメモリアクセス命令の中から、先行する未処理のメモリアクセス命令との間で、アクセスするアドレスが依存しないメモリアクセス命令を検出する命令検出部とをさらに備え、
前記所定の条件は、
前記命令検出部で検出されたメモリアクセス命令であって、前記複数のメモリアクセス命令のフォーマットに含まれる各ベースアドレスの差が前記メモリのバンクのサイズ内であって、前記複数のメモリアクセス命令のフォーマットに含まれる各ディスタンスが一致し、前記複数のメモリアクセス命令のフォーマットに含まれる各ベクトル長に一致する範囲がある、
ことを特徴とする請求項1乃至3のいずれか一項に記載のメモリアクセス制御装置。
【請求項5】
前記メモリアクセス命令は、
前記メモリに格納された複数の要素データを読み出すベクトルロード命令及び前記メモリに複数の要素データを格納するベクトルストア命令を含むメモリアクセス命令を含む、
ことを特徴とする請求項1乃至4のいずれか一項に記載のメモリアクセス制御装置。
【請求項6】
複数のメモリアクセス制御装置を備えるプロセッサであって、
前記メモリアクセス制御装置各々は、
複数の要素データ各々をアドレスに対応付けて格納するメモリに格納された前記複数の要素データにアクセスするメモリアクセス命令を発行する命令発行部と、
前記メモリに対するアクセスの混雑度を監視する監視部と、
前記命令発行部によって発行された複数のメモリアクセス命令を保持して、前記監視部で監視された混雑度に応じて保持するメモリアクセス命令の数を増減させる保持部と、
前記保持部に保持された前記メモリアクセス命令のうち、所定の条件を満たす複数のメモリアクセス命令を圧縮してアクセスリクエストを生成する生成部と、
前記生成部で生成された前記アクセスリクエストに対するリプライデータを、圧縮前の前記複数のメモリアクセス命令各々のリプライデータに分解するリプライデータ処理部と、
を備えるプロセッサ。
【請求項7】
複数の要素データ各々をアドレスに対応付けて格納するメモリに格納された前記複数の要素データにアクセスするメモリアクセス命令を発行する命令発行工程と、
前記メモリに対するアクセスの混雑度を監視する監視工程と、
前記命令発行工程において発行された複数のメモリアクセス命令を保持して、前記監視工程で監視された混雑度に応じて保持するメモリアクセス命令の数を増減させる保持工程と、
前記保持工程で保持された前記メモリアクセス命令のうち、所定の条件を満たす複数のメモリアクセス命令を圧縮してアクセスリクエストを生成する生成工程と、
前記生成工程で生成された前記アクセスリクエストに対するリプライデータを、圧縮前の前記複数のメモリアクセス命令各々のリプライデータに分解するリプライデータ処理工程と、
を含むメモリアクセス制御方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate