(57)【要約】【課題】複数のバンクに対してアクセスを分散させることができる演算装置を提供することを課題とする。【解決手段】演算装置は、並列にアクセス可能な複数のバンク（ＢＫ１〜ＢＫ４）に分割されたメモリと、前記メモリの複数のアドレスのデータに並列にアクセス可能なプロセッサ（１０１）と、前記プロセッサ及び前記メモリの間に設けられ、前記プロセッサから入力する複数のアドレスが属する前記バンクをアクセス可能状態に制御する制御回路（ＣＴ１〜ＣＴｍ）とを有し、前記複数のバンクは、複数のデータラインのアドレスがシーケンシャルではなく不規則に振り分けられている。【選択図】図８
2015108972.tif 000002
【特許請求の範囲】
【請求項１】
並列にアクセス可能な複数のバンクに分割されたメモリと、
前記メモリの複数のアドレスのデータに並列にアクセス可能なプロセッサと、
前記プロセッサ及び前記メモリの間に設けられ、前記プロセッサから入力する複数のアドレスが属する前記バンクをアクセス可能状態に制御する制御回路とを有し、
前記複数のバンクは、複数のデータラインのアドレスがシーケンシャルではなく不規則に振り分けられていることを特徴とする演算装置。
【請求項２】
前記メモリは、２p（ｐは自然数）個のバンクに分割され、
前記２p個のバンクは、前記メモリのアドレスのうちの２×ｐビットの値に応じて、前記複数のデータラインのアドレスが振り分けられ、
前記制御回路は、前記プロセッサから入力するアドレスのうちの２×ｐビットの値に応じて、前記プロセッサから入力するアドレスが属する前記バンクをアクセス可能状態に制御することを特徴とする請求項１記載の演算装置。
【請求項３】
前記アドレスのうちの２×ｐビットは、相互に隣接した２×ｐビットであることを特徴とする請求項２記載の演算装置。
【請求項４】
前記アドレスのうちの２×ｐビットは、相互に隣接した第１のｐビットと、相互に隣接した第２のｐビットとを有し、
前記第１のｐビット及び前記第２のｐビットは、相互に隣接していないことを特徴とする請求項２記載の演算装置。
【請求項５】
前記第１のｐビットと前記第２のｐビットとの間隔は、変更可能であることを特徴とする請求項４記載の演算装置。
【請求項６】
前記プロセッサが並列に出力するアドレスの数は、前記バンクの数よりも多いことを特徴とする請求項１〜５のいずれか１項に記載の演算装置。
【請求項７】
さらに、前記制御回路及び前記メモリの間に設けれ、前記複数のバンクのアクセスを調停する調停回路を有することを特徴とする請求項１〜６のいずれか１項に記載の演算装置。
【請求項８】
前記複数のバンクは、それぞれ、前記データライン単位でデータを入出力することを特徴とする請求項１〜７のいずれか１項に記載の演算装置。
【請求項９】
並列にアクセス可能な複数のバンクに分割されたメモリと、
前記メモリの複数のアドレスのデータに並列にアクセス可能なプロセッサと、
前記プロセッサ及び前記メモリの間に設けられ、前記プロセッサから入力する複数のアドレスが属する前記バンクをアクセス可能状態に制御する制御回路とを有する演算装置の決定方法であって、
前記複数のバンクは、複数のデータラインのアドレスがシーケンシャルではなく不規則に振り分けられ、
前記メモリは、２p（ｐは自然数）個のバンクに分割され、
前記２p個のバンクは、前記メモリのアドレスのうちの２×ｐビットの値に応じて、前記複数のデータラインのアドレスが振り分けられ、
前記制御回路は、前記プロセッサから入力するアドレスのうちの２×ｐビットの値に応じて、前記プロセッサから入力するアドレスが属する前記バンクをアクセス可能状態に制御し、
前記アドレスのうちの２×ｐビットは、相互に隣接した第１のｐビットと、相互に隣接した第２のｐビットとを有し、
前記第１のｐビット及び前記第２のｐビットは、相互に隣接しておらず、
コンピュータにより、前記第１のｐビットと前記第２のｐビットとの間隔を変えることにより、アクセスパターンについてのサイクル数が最も少なくなる前記第１のｐビットと前記第２のｐビットとの間隔を探索して決定する演算装置の決定方法。
【請求項１０】
並列にアクセス可能な複数のバンクに分割されたメモリと、
前記メモリの複数のアドレスのデータに並列にアクセス可能なプロセッサと、
前記プロセッサ及び前記メモリの間に設けられ、前記プロセッサから入力する複数のアドレスが属する前記バンクをアクセス可能状態に制御する制御回路とを有する演算装置の決定方法のプログラムであって、
前記複数のバンクは、複数のデータラインのアドレスがシーケンシャルではなく不規則に振り分けられ、
前記メモリは、２p（ｐは自然数）個のバンクに分割され、
前記２p個のバンクは、前記メモリのアドレスのうちの２×ｐビットの値に応じて、前記複数のデータラインのアドレスが振り分けられ、
前記制御回路は、前記プロセッサから入力するアドレスのうちの２×ｐビットの値に応じて、前記プロセッサから入力するアドレスが属する前記バンクをアクセス可能状態に制御し、
前記アドレスのうちの２×ｐビットは、相互に隣接した第１のｐビットと、相互に隣接した第２のｐビットとを有し、
前記第１のｐビット及び前記第２のｐビットは、相互に隣接しておらず、
前記第１のｐビットと前記第２のｐビットとの間隔を変えることにより、アクセスパターンについてのサイクル数が最も少なくなる前記第１のｐビットと前記第２のｐビットとの間隔を探索して決定する処理をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算装置、演算装置の決定方法及びプログラムに関する。
【背景技術】
【０００２】
マルチデータセットにシングル命令セットのマルチスレッドを実行するためのシステムが知られている（例えば、特許文献１参照）。システムバスに少なくとも１つの第１のプロセッシングユニットを含む。各プロセッシングユニットは、プロセッシングユニットバス、プロセッシングユニットバス上のダイレクトメモリアクセスコントローラ、プロセッシングユニットバス上のプロセッサ、プロセッシングユニットバス上の複数の第２のプロセッシングユニットを含む。各第２のプロセッシングユニットは、レジスタ、命令プロセッサ、及び複数の機能ユニットを含む。各機能ユニットは、ローカルストア、浮動小数点ユニット、及び整数ユニットを含み、システムバス上のローカル出入力チャネルを含み、システムバスに接続されるネットワークインターフェースを含み、システムバスに接続される共有メモリを含む。共有メモリは、第１のプロセッシングユニットの第２のプロセッシングユニットの機能ユニットによって複数のメモリ領域に区分される。機能ユニットの各々のデータは、メモリ領域の異なるロケーションに記録され、ロケーションは、更に、機能ユニットに基づいて相互に垂直にオフセットされている。メモリ領域は、第１のプロセッシングユニットの第２のプロセッシングユニットの機能ユニットと、プロセッシングユニットバス及びシステムバスを通じ、ローカルストア及びダイレクトメモリアクセスコントローラを介して通信を行う。
【０００３】
また、ホスト計算機のバスに複数の専用計算機を接続した情報処理システムが知られている（例えば、特許文献２参照）。専用計算機は、自己に割り当てられたアドレス空間に該当するバス上の情報を取得するバスインターフェイスと、ホスト計算機からバスを介して取得した構成情報に基づいて論理回路を構成するプログラマブルゲートアレイと、バスに接続された他の専用計算機と共通のアドレスを保持するアドレスレジスタとを備える。アドレスレジスタに共通のアドレスを保持する複数の専用計算機が、共通アドレスの構成情報をバス上から同時に取得して、プログラマブルゲートアレイの論理回路を構成する。
【０００４】
また、複数のメモリバンクを有するプロセッサが知られている（例えば、特許文献３参照）。読出しアドレス生成回路は、読出しレジスタ指定および読出しレジスタ走査方向に基づいて複数のメモリバンクに対して個別に読出しアドレスを供給する。読出し制御回路は、読出しアドレスに従って複数のメモリバンクから読み出された複数の読出しデータの配置を読出しレジスタ指定および読出しレジスタ変位に基づいて制御する。演算器は、読出し制御回路によって配置制御された複数の読出しデータを対象として複数の演算処理を行う。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００５−３１０１６７号公報
【特許文献２】特開２００５−１９００７０号公報
【特許文献３】特開２００５−３０９４９９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
複数のメモリバンクのうちの１個のメモリバンクにアクセスが集中してしまうと、メモリに対するアクセス時間が長くなってしまう。
【０００７】
本発明の目的は、複数のバンクに対してアクセスを分散させることができる演算装置、演算装置の決定方法及びプログラムを提供することである。
【課題を解決するための手段】
【０００８】
演算装置は、並列にアクセス可能な複数のバンクに分割されたメモリと、前記メモリの複数のアドレスのデータに並列にアクセス可能なプロセッサと、前記プロセッサ及び前記メモリの間に設けられ、前記プロセッサから入力する複数のアドレスが属する前記バンクをアクセス可能状態に制御する制御回路とを有し、前記複数のバンクは、複数のデータラインのアドレスがシーケンシャルではなく不規則に振り分けられている。
【発明の効果】
【０００９】
複数のバンクに対してアクセスを分散させることができるので、メモリに対するアクセス時間を短くすることができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、第１の実施形態による演算装置の構成例を示す図である。
【図２】図２は、インダイレクトロード命令の実行例を示す図である。
【図３】図３は、メモリインタリーブを説明するための図である。
【図４】図４は、インダイレクトロード及びメモリインタリーブの例を示す図である。
【図５】図５は、アドレス、バンク及びデータラインの関係を示す図である。
【図６】図６は、インダイレクトロード及びメモリインタリーブの他の例を示す図である。
【図７】図７は、アドレス、バンク及びデータラインの関係を示す図である。
【図８】図８は、第１の実施形態による演算装置の構成例を示す図である。
【図９】図９は、データラインの２進数下位８ビットアドレスとバンクとの対応関係を示す図である。
【図１０】図１０は、図８の演算装置のインダイレクトロードの例を示す図である。
【図１１】図１１は、アドレス、バンク及びデータラインの関係を示す図である。
【図１２】図１２は、図８の演算装置の具体的な構成例を示す図である。
【図１３】図１３は、図１２の制御回路の構成例を示す図である。
【図１４】図１４（Ａ）〜（Ｄ）は、バンク選択回路の論理回路を示すカルノー図である。
【図１５】図１５は、第２の実施形態による演算装置の構成例を示す図である。
【図１６】図１６は、データラインのアドレスとバンクとの対応関係を示す図である。
【図１７】図１７は、第２の実施形態による制御回路の構成例を示す図である。
【図１８】図１８は、図１７のビット切り出し回路の構成例を示す図である。
【図１９】図１９は、ビット数を決定するための処理方法を示すフローチャートである。
【図２０】図２０は、図１９のビット数決定プログラムの処理例を示すフローチャートである。
【図２１】図２１は、図２０のサイクル数を求める処理を示すフローチャートである。
【図２２】図２２は、図１３のバイト選択信号生成回路の入出力を示す図である。
【発明を実施するための形態】
【００１１】
（第１の実施形態）
図１は、第１の実施形態による演算装置の構成例を示す図である。演算装置は、プロセッサ１０１、命令ランダムアクセスメモリ（ＲＡＭ：Random Access Memory）１０２及びデータＲＡＭ１０３を有する。プロセッサ１０１は、プログラムカウンタ（ＰＣ）１１１、デコーダ１１２、スカラレジスタファイル１１３、ベクトルレジスタファイル１１４、加算器１１５及び算術論理ユニット（ＡＬＵ：Arithmetic Logic Unit）１１８を有する。スカラレジスタファイル１１３は、一次元配列データを記憶する複数のレジスタを有する。ベクトルレジスタファイル１１４は、２次元配列データを記憶する複数のレジスタを有する。命令ＲＡＭ１０２は、命令を記憶する。データＲＡＭ１０３は、データを記憶する。
【００１２】
プロセッサ１０１は、単一命令複数データ（ＳＩＭＤ：Single Instruction Multiple Data）型プロセッサであり、１個の命令で複数のデータを処理する。ＳＩＭＤ型プロセッサ１０１は、無線通信処理又はや動画像のデコードなど、大量のデータを高速に処理することができる。プロセッサ１０１は、プログラムカウンタ１１１が示すアドレスの命令を命令ＲＡＭ１０２から読み出す。デコーダ１１２は、命令ＲＡＭ１０２から読み出した命令をデコードし、スカラレジスタファイル１１３のインデックス及び／又はベクトルレジスタファイル１１４のインデックスを指定する。
【００１３】
スカラレジスタファイル１１３は、指定されたインデックスのレジスタの値を例えばベースアドレスとしてレジスタｓに出力する。レジスタｓは、ベースアドレスを記憶する。ベクトルレジスタファイル１１４は、指定されたインデックスのｍ個のレジスタの値をｍ個のオフセットアドレスとしてｍ個のレジスタｖｒに出力する。ｍ個のレジスタｖｒは、ｍ個のオフセットアドレスを記憶する。ｍ個の加算器１１５は、それぞれ、レジスタｓのベースアドレスに対して、ｍ個のレジスタｖｒのオフセットアドレスを加算する。プロセッサ１０１は、その加算されたｍ個のアドレスをデータＲＡＭ１０３に出力し、ｍ個のアドレスのｎビットデータをデータＲＡＭ１０３からロードする。ロードされたｍ個のデータは、ｍ個のレジスタｖｔにストアされる。８個のレジスタｖｔのデータは、例えば、ベクトルレジスタファイル１１４の指定されたインデックスのｍ個のレジスタに書き込まれる。
【００１４】
また、デコーダ１１２は、ベクトルレジスタファイル１１４の２個のインデックスを指定することができる。ベクトルレジスタファイル１１４は、デコーダ１１２により指定された第１のｍ個のレジスタの値をｍ個のレジスタ１１６に出力し、デコーダ１１２により指定された第２のｍ個のレジスタの値をｍ個のレジスタ１１７に出力する。ｍ個のＡＬＵ１１８は、ｍ個のレジスタ１１６の値及びｍ個のレジスタ１１７の値に対して演算を行う。プロセッサ１０１は、演算結果のｍ個のｎビットデータをデータＲＡＭ１０３にストアしたり、ｍ個のレジスタｖｔにストアすることができる。ｍ個のレジスタｖｔのデータは、ベクトルレジスタファイル１１４の指定されたインデックスにストアすることができる。
【００１５】
図２は、インダイレクトロード命令の実行例を示す図である。図１において、ｍが８であり、ｎが１６である場合を例に説明する。レジスタｓのベースアドレスは、例えば、「８０００００（１６進数）」である。８個のオフセットアドレスのレジスタｖｒは、レジスタｖｒ［０］＝７（１０進数）、レジスタｖｒ［１］＝３（１０進数）、レジスタｖｒ［２］＝２（１０進数）、レジスタｖｒ［３］＝５（１０進数）、レジスタｖｒ［４］＝６（１０進数）、レジスタｖｒ［５］＝４（１０進数）、レジスタｖｒ［６］＝１（１０進数）、レジスタｖｒ［７］＝１（１０進数）を有する。データＲＡＭ１０３は、各アドレスに２バイトデータを記憶する。
【００１６】
加算器１１５は、ｓ＋２×ｖｒを演算する。なお、レジスタｖｒの出力ビット線を１ビットシフトして加算器１１５に入力することにより、２×ｖｒを実現できる。
【００１７】
第１の加算器１１５は、ｓ＋２×ｖｒ［０］を演算し、アドレス「８００００ｅ（１６進数）」を出力する。プロセッサ１０１は、データＲＡＭ１０３からアドレス「８００００ｅ（１６進数）」のデータ「００８０」をロードし、結果データレジスタｖｔ［０］に格納する。
【００１８】
第２の加算器１１５は、ｓ＋２×ｖｒ［１］を演算し、アドレス「８００００６（１６進数）」を出力する。プロセッサ１０１は、データＲＡＭ１０３からアドレス「８００００６（１６進数）」のデータ「０００８」をロードし、結果データレジスタｖｔ［１］に格納する。
【００１９】
第３の加算器１１５は、ｓ＋２×ｖｒ［２］を演算し、アドレス「８００００４（１６進数）」を出力する。プロセッサ１０１は、データＲＡＭ１０３からアドレス「８００００４（１６進数）」のデータ「０００４」をロードし、結果データレジスタｖｔ［２］に格納する。
【００２０】
第４の加算器１１５は、ｓ＋２×ｖｒ［３］を演算し、アドレス「８００００ａ（１６進数）」を出力する。プロセッサ１０１は、データＲＡＭ１０３からアドレス「８００００ａ（１６進数）」のデータ「００２０」をロードし、結果データレジスタｖｔ［３］に格納する。
【００２１】
第５の加算器１１５は、ｓ＋２×ｖｒ［４］を演算し、アドレス「８００００ｃ（１６進数）」を出力する。プロセッサ１０１は、データＲＡＭ１０３からアドレス「８００００ｃ（１６進数）」のデータ「００４０」をロードし、結果データレジスタｖｔ［４］に格納する。
【００２２】
第６の加算器１１５は、ｓ＋２×ｖｒ［５］を演算し、アドレス「８００００８（１６進数）」を出力する。プロセッサ１０１は、データＲＡＭ１０３からアドレス「８００００８（１６進数）」のデータ「００１０」をロードし、結果データレジスタｖｔ［５］に格納する。
【００２３】
第７の加算器１１５は、ｓ＋２×ｖｒ［６］を演算し、アドレス「８００００２（１６進数）」を出力する。プロセッサ１０１は、データＲＡＭ１０３からアドレス「８００００２（１６進数）」のデータ「０００２」をロードし、結果データレジスタｖｔ［６］に格納する。
【００２４】
第８の加算器１１５は、ｓ＋２×ｖｒ［７］を演算し、アドレス「８００００２（１６進数）」を出力する。プロセッサ１０１は、データＲＡＭ１０３からアドレス「８００００２（１６進数）」のデータ「０００２」をロードし、結果データレジスタｖｔ［７］に格納する。
【００２５】
８個のレジスタｖｔ［０］〜ｖｔ［７］の結果データは、例えば、ベクトルレジスタ１１４の指定されたインデックスの８個のレジスタに格納される。上記のように、プロセッサ１０１は、データＲＡＭ１０３の８個のアドレスのデータに対して並列にアクセス可能である。
【００２６】
図３は、メモリインタリーブを説明するための図である。図１のデータＲＡＭ１０３は、並列にアクセス可能な複数のバンクＢＫ１〜ＢＫ４に分割されている。ｍが８の場合、バンクＢＫ１〜ＢＫ４は、連続する８個のアドレスのデータに対して同時にアクセスできるように設計される。例えば、プロセッサ１０１のレジスタの各データのサイズを２バイトとすると、バンクＢＫ１〜ＢＫ４は、それぞれ、連続するアドレスの１６バイトデータを１個のデータラインとして、１６バイトのデータライン単位でロードするインタフェースを持つ。この場合、１６バイトのデータライン内のアドレスであれば１サイクルで複数のアドレスのデータをロードできる。ただし、複数のアドレスが異なるデータラインに属する場合には、複数サイクルで複数のアドレスのデータをロードする。
【００２７】
第１のバンクＢＫ１は、２進数アドレスの４ビット目が「０」であり、５ビット目が「０」であるデータラインのデータを記憶する。すなわち、図４に示すように、第１のバンクＢＫ１は、アドレス「８０００００（１６進数）」、「８０００４０（１６進数）」等のデータラインのデータを記憶する。
【００２８】
第２のバンクＢＫ２は、２進数アドレスの４ビット目が「１」であり、５ビット目が「０」であるデータラインのデータを記憶する。すなわち、図４に示すように、第２のバンクＢＫ２は、アドレス「８０００１０（１６進数）」、「８０００５０（１６進数）」等のデータラインのデータを記憶する。
【００２９】
第３のバンクＢＫ３は、２進数アドレスの４ビット目が「０」であり、５ビット目が「１」であるデータラインのデータを記憶する。すなわち、図４に示すように、第３のバンクＢＫ３は、アドレス「８０００２０（１６進数）」、「８０００６０（１６進数）」等のデータラインのデータを記憶する。
【００３０】
第４のバンクＢＫ４は、２進数アドレスの４ビット目が「１」であり、５ビット目が「１」であるデータラインのデータを記憶する。すなわち、図４に示すように、第４のバンクＢＫ４は、アドレス「８０００３０（１６進数）」、「８０００７０（１６進数）」等のデータラインのデータを記憶する。
【００３１】
図４はインダイレクトロード及びメモリインタリーブの例を示す図であり、図５はアドレス、バンク及びデータラインの関係を示す図である。レジスタｓは、ベースアドレス「８０００００（１６進数）」を記憶する。レジスタｖｒ［０］は、オフセットアドレス「１５（１０進数）」を記憶する。レジスタｖｒ［１］は、オフセットアドレス「３１（１０進数）」を記憶する。レジスタｖｒ［２］は、オフセットアドレス「２０（１０進数）」を記憶する。レジスタｖｒ［３］は、オフセットアドレス「０（１０進数）」を記憶する。レジスタｖｒ［４］は、オフセットアドレス「１（１０進数）」を記憶する。レジスタｖｒ［５］は、オフセットアドレス「２（１０進数）」を記憶する。レジスタｖｒ［６］は、オフセットアドレス「８（１０進数）」を記憶する。レジスタｖｒ［７］は、オフセットアドレス「９（１０進数）」を記憶する。
【００３２】
データラインＬＮ１１〜ＬＮ４１等は、それぞれ、１６バイトのデータを含む。データラインＬＮ１１は、アドレス「８０００００（１６進数）」〜「８００００ｅ（１６進数）」の８個の２バイトデータを含む。データラインＬＮ２１は、アドレス「８０００１０（１６進数）」〜「８０００１ｅ（１６進数）」の８個の２バイトデータを含む。データラインＬＮ３１は、アドレス「８０００２０（１６進数）」〜「８０００２ｅ（１６進数）」の８個の２バイトデータを含む。データラインＬＮ４１は、アドレス「８０００３０（１６進数）」〜「８０００３ｅ（１６進数）」の８個の２バイトデータを含む。
【００３３】
データラインＬＮ１１は、アドレス「８０００００（１６進数）」の１６バイトデータラインであり、第１のバンクＢＫ１に格納される。データラインＬＮ２１は、アドレス「８０００１０（１６進数）」の１６バイトデータラインであり、データラインＬＮ１１に続くデータラインであり、第２のバンクＢＫ２に格納される。データラインＬＮ３１は、アドレス「８０００２０（１６進数）」の１６バイトデータラインであり、データラインＬＮ２１に続くデータラインであり、第３のバンクＢＫ３に格納される。データラインＬＮ４１は、アドレス「８０００３０（１６進数）」の１６バイトデータラインであり、データラインＬＮ３１に続くデータラインであり、第４のバンクＢＫ４に格納される。
【００３４】
同様に、アドレス「８０００４０（１６進数）」の１６バイトデータラインは、アドレス「８０００３０（１６進数）」のデータラインに続くデータラインであり、第１のバンクＢＫ１に格納される。アドレス「８０００５０（１６進数）」の１６バイトデータラインは、アドレス「８０００４０（１６進数）」のデータラインに続くデータラインであり、第２のバンクＢＫ２に格納される。アドレス「８０００６０（１６進数）」の１６バイトデータラインは、アドレス「８０００５０（１６進数）」のデータラインに続くデータラインであり、第３のバンクＢＫ３に格納される。アドレス「８０００７０（１６進数）」の１６バイトデータラインは、アドレス「８０００６０（１６進数）」のデータラインに続くデータラインであり、第４のバンクＢＫ４に格納される。以上のように、複数のバンクＢＫ１〜ＢＫ４は、複数のデータラインのアドレスがシーケンシャルに振り分けられる。
【００３５】
第１の加算器１１５は、ｓ＋２×ｖｒ［０］を演算し、アドレス「８０００１ｅ（１６進数）」を出力する。図５に示すように、アドレス「８０００１ｅ（１６進数）」のデータは、第２のバンクＢＫ２のアドレス「８０００１０（１６進数）」のデータラインＬＮ２１に含まれるデータである。
【００３６】
第２の加算器１１５は、ｓ＋２×ｖｒ［１］を演算し、アドレス「８０００３ｅ（１６進数）」を出力する。図５に示すように、アドレス「８０００３ｅ（１６進数）」のデータは、第４のバンクＢＫ４のアドレス「８０００３０（１６進数）」のデータラインＬＮ４１に含まれるデータである。
【００３７】
第３の加算器１１５は、ｓ＋２×ｖｒ［２］を演算し、アドレス「８０００２８（１６進数）」を出力する。図５に示すように、アドレス「８０００２８（１６進数）」のデータは、第３のバンクＢＫ３のアドレス「８０００２０（１６進数）」のデータラインＬＮ３１に含まれるデータである。
【００３８】
第４の加算器１１５は、ｓ＋２×ｖｒ［３］を演算し、アドレス「８０００００（１６進数）」を出力する。図５に示すように、アドレス「８０００００（１６進数）」のデータは、第１のバンクＢＫ１のアドレス「８０００００（１６進数）」のデータラインＬＮ１１に含まれるデータである。
【００３９】
第５の加算器１１５は、ｓ＋２×ｖｒ［４］を演算し、アドレス「８００００２（１６進数）」を出力する。図５に示すように、アドレス「８００００２（１６進数）」のデータは、第１のバンクＢＫ１のアドレス「８０００００（１６進数）」のデータラインＬＮ１１に含まれるデータである。
【００４０】
第６の加算器１１５は、ｓ＋２×ｖｒ［５］を演算し、アドレス「８００００４（１６進数）」を出力する。図５に示すように、アドレス「８００００４（１６進数）」のデータは、第１のバンクＢＫ１のアドレス「８０００００（１６進数）」のデータラインＬＮ１１に含まれるデータである。
【００４１】
第７の加算器１１５は、ｓ＋２×ｖｒ［６］を演算し、アドレス「８０００１０（１６進数）」を出力する。図５に示すように、アドレス「８０００１０（１６進数）」のデータは、第２のバンクＢＫ２のアドレス「８０００１０（１６進数）」のデータラインＬＮ２１に含まれるデータである。
【００４２】
第８の加算器１１５は、ｓ＋２×ｖｒ［７］を演算し、アドレス「８０００１２（１６進数）」を出力する。図５に示すように、アドレス「８０００１２（１６進数）」のデータは、第２のバンクＢＫ２のアドレス「８０００１０（１６進数）」のデータラインＬＮ２１に含まれるデータである。
【００４３】
バンクＢＫ１〜ＢＫ４は、それぞれ、１サイクルで１個のデータラインをロードすることができ、データライン単位でデータを入出力することができる。また、プロセッサ１０１は、バンクＢＫ１〜ＢＫ４の各データラインを並列にロードすることができる。具体的には、プロセッサ１０１は、第１のバンクＢＫ１のデータラインＬＮ１１、第２のバンクＢＫ２のデータラインＬＮ２１、第３のバンクＢＫ３のデータラインＬＮ３１及び第４のバンクＢＫ４のデータラインＬＮ４１を１サイクルで並列にロードする。
【００４４】
次に、プロセッサ１０１は、ロードしたデータラインＬＮ２１内のアドレス「８０００１ｅ（１６進数）」のデータを結果データレジスタｖｔ［０］に格納する。また、プロセッサ１０１は、ロードしたデータラインＬＮ４１内のアドレス「８０００３ｅ（１６進数）」のデータを結果データレジスタｖｔ［１］に格納する。また、プロセッサ１０１は、ロードしたデータラインＬＮ３１内のアドレス「８０００２８（１６進数）」のデータを結果データレジスタｖｔ［２］に格納する。また、プロセッサ１０１は、ロードしたデータラインＬＮ１１内のアドレス「８０００００（１６進数）」のデータを結果データレジスタｖｔ［３］に格納する。また、プロセッサ１０１は、ロードしたデータラインＬＮ１１内のアドレス「８００００２（１６進数）」のデータを結果データレジスタｖｔ［４］に格納する。また、プロセッサ１０１は、ロードしたデータラインＬＮ１１内のアドレス「８００００４（１６進数）」のデータを結果データレジスタｖｔ［５］に格納する。また、プロセッサ１０１は、ロードしたデータラインＬＮ２１内のアドレス「８０００１０（１６進数）」のデータを結果データレジスタｖｔ［６］に格納する。また、プロセッサ１０１は、ロードしたデータラインＬＮ２１内のアドレス「８０００１２（１６進数）」のデータを結果データレジスタｖｔ［７］に格納する。
【００４５】
以上のように、８個のレジスタｖｒ［０］〜ｖｒ［７］に基づく８個のアドレスのデータのロードがバンクＢＫ１〜ＢＫ４に分散すると、１サイクルで全データをロードすることができ、ロード時間を短くすることができる。
【００４６】
図６はインダイレクトロード及びメモリインタリーブの他の例を示す図であり、図７はアドレス、バンク及びデータラインの関係を示す図である。レジスタｓは、ベースアドレス「８０００００（１６進数）」を記憶する。レジスタｖｒ［０］は、オフセットアドレス「０（１０進数）」を記憶する。レジスタｖｒ［１］は、オフセットアドレス「３３（１０進数）」を記憶する。レジスタｖｒ［２］は、オフセットアドレス「６６（１０進数）」を記憶する。レジスタｖｒ［３］は、オフセットアドレス「９９（１０進数）」を記憶する。レジスタｖｒ［４］は、オフセットアドレス「１３２（１０進数）」を記憶する。レジスタｖｒ［５］は、オフセットアドレス「１６５（１０進数）」を記憶する。レジスタｖｒ［６］は、オフセットアドレス「１９８（１０進数）」を記憶する。レジスタｖｒ［７］は、オフセットアドレス「２３１（１０進数）」を記憶する。
【００４７】
第１の加算器１１５は、ｓ＋２×ｖｒ［０］を演算し、アドレス「８０００００（１６進数）」を出力する。図７に示すように、アドレス「８０００００（１６進数）」のデータは、第１のバンクＢＫ１のアドレス「８０００００（１６進数）」のデータラインに含まれるデータである。
【００４８】
第２の加算器１１５は、ｓ＋２×ｖｒ［１］を演算し、アドレス「８０００４２（１６進数）」を出力する。図７に示すように、アドレス「８０００４２（１６進数）」のデータは、第１のバンクＢＫ１のアドレス「８０００４０（１６進数）」のデータラインに含まれるデータである。
【００４９】
第３の加算器１１５は、ｓ＋２×ｖｒ［２］を演算し、アドレス「８０００８６（１６進数）」を出力する。図７に示すように、アドレス「８０００８６（１６進数）」のデータは、第１のバンクＢＫ１のアドレス「８０００８０（１６進数）」のデータラインに含まれるデータである。
【００５０】
第４の加算器１１５は、ｓ＋２×ｖｒ［３］を演算し、アドレス「８０００ｃ６（１６進数）」を出力する。図７に示すように、アドレス「８０００ｃ６（１６進数）」のデータは、第１のバンクＢＫ１のアドレス「８０００ｃ０（１６進数）」のデータラインに含まれるデータである。
【００５１】
第５の加算器１１５は、ｓ＋２×ｖｒ［４］を演算し、アドレス「８００１０８（１６進数）」を出力する。図７に示すように、アドレス「８００１０８（１６進数）」のデータは、第１のバンクＢＫ１のアドレス「８００１００（１６進数）」のデータラインに含まれるデータである。
【００５２】
第６の加算器１１５は、ｓ＋２×ｖｒ［５］を演算し、アドレス「８００１４ａ（１６進数）」を出力する。図７に示すように、アドレス「８００１４ａ（１６進数）」のデータは、第１のバンクＢＫ１のアドレス「８００１４０（１６進数）」のデータラインに含まれるデータである。
【００５３】
第７の加算器１１５は、ｓ＋２×ｖｒ［６］を演算し、アドレス「８００１８ｃ（１６進数）」を出力する。図７に示すように、アドレス「８００１８ｃ（１６進数）」のデータは、第１のバンクＢＫ１のアドレス「８００１８０（１６進数）」のデータラインに含まれるデータである。
【００５４】
第８の加算器１１５は、ｓ＋２×ｖｒ［７］を演算し、アドレス「８００１ｃｅ（１６進数）」を出力する。図７に示すように、アドレス「８００１ｃｅ（１６進数）」のデータは、第１のバンクＢＫ１のアドレス「８００１ｃ０（１６進数）」のデータラインに含まれるデータである。
【００５５】
バンクＢＫ１〜ＢＫ４は、それぞれ、１サイクルで１個のデータラインしかロードできない。まず、プロセッサ１０１は、第１のバンクＢＫ１のアドレス「８０００００（１６進数）」のデータラインをロードし、アドレス「８０００００（１６進数）」のデータライン内のアドレス「８０００００（１６進数）」のデータを結果データレジスタｖｔ［０］に格納する。次に、プロセッサ１０１は、第１のバンクＢＫ１のアドレス「８０００４０（１６進数）」のデータラインをロードし、アドレス「８０００４０（１６進数）」のデータライン内のアドレス「８０００４２（１６進数）」のデータを結果データレジスタｖｔ［１］に格納する。次に、プロセッサ１０１は、第１のバンクＢＫ１のアドレス「８０００８０（１６進数）」のデータラインをロードし、アドレス「８０００８０（１６進数）」のデータライン内のアドレス「８０００８６（１６進数）」のデータを結果データレジスタｖｔ［２］に格納する。次に、プロセッサ１０１は、第１のバンクＢＫ１のアドレス「８０００ｃ０（１６進数）」のデータラインをロードし、アドレス「８０００ｃ０（１６進数）」のデータライン内のアドレス「８０００ｃ６（１６進数）」のデータを結果データレジスタｖｔ［３］に格納する。次に、プロセッサ１０１は、第１のバンクＢＫ１のアドレス「８００１００（１６進数）」のデータラインをロードし、アドレス「８００１００（１６進数）」のデータライン内のアドレス「８００１０８（１６進数）」のデータを結果データレジスタｖｔ［４］に格納する。次に、プロセッサ１０１は、第１のバンクＢＫ１のアドレス「８００１４０（１６進数）」のデータラインをロードし、アドレス「８００１４０（１６進数）」のデータライン内のアドレス「８００１４ａ（１６進数）」のデータを結果データレジスタｖｔ［５］に格納する。次に、プロセッサ１０１は、第１のバンクＢＫ１のアドレス「８００１８０（１６進数）」のデータラインをロードし、アドレス「８００１８０（１６進数）」のデータライン内のアドレス「８００１８ｃ（１６進数）」のデータを結果データレジスタｖｔ［６］に格納する。次に、プロセッサ１０１は、第１のバンクＢＫ１のアドレス「８００１ｃ０（１６進数）」のデータラインをロードし、アドレス「８００１ｃ０（１６進数）」のデータライン内のアドレス「８００１ｃｅ（１６進数）」のデータを結果データレジスタｖｔ［７］に格納する。
【００５６】
以上のように、８個のレジスタｖｒ［０］〜ｖｒ［７］に基づく８個のアドレスのデータのロードが第１のバンクＢＫ１に集中すると、８サイクルのロードが必要になり、ロード時間が長くなってしまう。以上のように、一定間隔のアドレスのデータをロードする場合には、１個のバンクへのアクセスが集中し易く、アクセス時間が長くなってしまう。この課題を解決するための実施形態を、以下、説明する。
【００５７】
図８は、第１の実施形態による演算装置の構成例を示す図である。演算装置は、プロセッサ１０１、制御回路ＣＴ、調停回路ＡＲ、第１のバンクＢＫ１、第２のバンクＢＫ２、第３のバンクＢＫ３及び第４のバンクＢＫ４を有する。プロセッサ１０１は、図１のプロセッサ１０１と同じ構成を有し、図１と同様に、命令ＲＡＭ１０２内の命令を読み出してデコードする。バンクＢＫ１〜ＢＫ４は、図１のデータＲＡＭ１０３に含まれる。データＲＡＭ１０３は、並列にアクセス可能な複数のバンクＢＫ１〜ＢＫ４に分割されている。
【００５８】
第１のバンクＢＫ１は、２進数アドレスの下位８ビットが「００００００００」、「０１１１００００」、「１０１０００００」及び「１１０１００００」のデータラインを記憶する。すなわち、図１０に示すように、第１のバンクＢＫ１は、アドレス「８０００００（１６進数）」、「８０００７０（１６進数）」、「８０００ａ０（１６進数）」、「８０００ｄ０（１６進数）」等のデータラインのデータを記憶する。
【００５９】
第２のバンクＢＫ２は、２進数アドレスの下位８ビットが「０００１００００」、「０１００００００」、「１０１１００００」及び「１１１０００００」のデータラインを記憶する。すなわち、図１０に示すように、第２のバンクＢＫ２は、アドレス「８０００１０（１６進数）」、「８０００４０（１６進数）」、「８０００ｂ０（１６進数）」、「８０００ｅ０（１６進数）」等のデータラインのデータを記憶する。
【００６０】
第３のバンクＢＫ３は、２進数アドレスの下位８ビットが「００１０００００」、「０１０１００００」、「１０００００００」及び「１１１１００００」のデータラインを記憶する。すなわち、図１０に示すように、第３のバンクＢＫ３は、アドレス「８０００２０（１６進数）」、「８０００５０（１６進数）」、「８０００８０（１６進数）」、「８０００ｆ０（１６進数）」等のデータラインのデータを記憶する。
【００６１】
第４のバンクＢＫ４は、２進数アドレスの下位８ビットが「００１１００００」、「０１１０００００」、「１００１００００」及び「１１００００００」のデータラインを記憶する。すなわち、図１０に示すように、第４のバンクＢＫ４は、アドレス「８０００３０（１６進数）」、「８０００６０（１６進数）」、「８０００９０（１６進数）」、「８０００ｃ０（１６進数）」等のデータラインのデータを記憶する。
【００６２】
図９は、データラインの２進数下位８ビットアドレスとバンクＢＫ１〜ＢＫ４との対応関係を示す図である。図３の演算装置では、複数のバンクＢＫ１〜ＢＫ４は、複数のデータラインのアドレスがシーケンシャルに振り分けられている。これに対し、図８の演算装置では、複数のバンクＢＫ１〜ＢＫ４は、複数のデータラインのアドレスがシーケンシャルではなく、アドレスａｄｄｒ［６］及びａｄｄｒ［７］が同一の４つのラインが、バンクＢＫ１〜ＫＢ４に不規則に振り分けられている。
【００６３】
具体的には、２進数下位８ビットのデータラインアドレス「００００００００」、「０００１００００」、「００１０００００」及び「００１１００００」は、バンクＢＫ１〜ＢＫ４の中で相互に異なるバンクに振り分けられる。同様に、２進数下位８ビットのデータラインアドレス「０１００００００」、「０１０１００００」、「０１１０００００」及び「０１１１００００」は、バンクＢＫ１〜ＢＫ４の中で相互に異なるバンクに振り分けられる。同様に、２進数下位８ビットのデータラインアドレス「１０００００００」、「１００１００００」、「１０１０００００」及び「１０１１００００」は、バンクＢＫ１〜ＢＫ４の中で相互に異なるバンクに振り分けられる。同様に、２進数下位８ビットのデータラインアドレス「１１００００００」、「１１０１００００」、「１１１０００００」及び「１１１１００００」は、バンクＢＫ１〜ＢＫ４の中で相互に異なるバンクに振り分けられる。図８の演算装置は、図３の演算装置に対して、上記の条件下で、データラインのアドレスとバンクＢＫ１〜ＢＫ４との対応関係を不規則にシャッフルしたものである。
【００６４】
図１０は図８の演算装置のインダイレクトロードの例を示す図であり、図１１はアドレス、バンク及びデータラインの関係を示す図である。レジスタｓ及びレジスタｖｒ［０］〜ｖｒ［７］の記憶内容は、図６と同じである。
【００６５】
第１の加算器１１５は、ｓ＋２×ｖｒ［０］を演算し、アドレス「８０００００（１６進数）」を出力する。図１１に示すように、アドレス「８０００００（１６進数）」のデータは、第１のバンクＢＫ１のアドレス「８０００００（１６進数）」のデータラインＬＮ１１に含まれるデータである。
【００６６】
第２の加算器１１５は、ｓ＋２×ｖｒ［１］を演算し、アドレス「８０００４２（１６進数）」を出力する。図１１に示すように、アドレス「８０００４２（１６進数）」のデータは、第２のバンクＢＫ２のアドレス「８０００４０（１６進数）」のデータラインＬＮ２１に含まれるデータである。
【００６７】
第３の加算器１１５は、ｓ＋２×ｖｒ［２］を演算し、アドレス「８０００８６（１６進数）」を出力する。図１１に示すように、アドレス「８０００８６（１６進数）」のデータは、第３のバンクＢＫ３のアドレス「８０００８０（１６進数）」のデータラインＬＮ３１に含まれるデータである。
【００６８】
第４の加算器１１５は、ｓ＋２×ｖｒ［３］を演算し、アドレス「８０００ｃ６（１６進数）」を出力する。図１１に示すように、アドレス「８０００ｃ６（１６進数）」のデータは、第４のバンクＢＫ４のアドレス「８０００ｃ０（１６進数）」のデータラインＬＮ４１に含まれるデータである。
【００６９】
第５の加算器１１５は、ｓ＋２×ｖｒ［４］を演算し、アドレス「８００１０８（１６進数）」を出力する。図１１に示すように、アドレス「８００１０８（１６進数）」のデータは、第１のバンクＢＫ１のアドレス「８００１００（１６進数）」のデータラインＬＮ１２に含まれるデータである。
【００７０】
第６の加算器１１５は、ｓ＋２×ｖｒ［５］を演算し、アドレス「８００１４ａ（１６進数）」を出力する。図１１に示すように、アドレス「８００１４ａ（１６進数）」のデータは、第２のバンクＢＫ２のアドレス「８００１４０（１６進数）」のデータラインＬＮ２２に含まれるデータである。
【００７１】
第７の加算器１１５は、ｓ＋２×ｖｒ［６］を演算し、アドレス「８００１８ｃ（１６進数）」を出力する。図１１に示すように、アドレス「８００１８ｃ（１６進数）」のデータは、第３のバンクＢＫ３のアドレス「８００１８０（１６進数）」のデータラインＬＮ３２に含まれるデータである。
【００７２】
第８の加算器１１５は、ｓ＋２×ｖｒ［７］を演算し、アドレス「８００１ｃｅ（１６進数）」を出力する。図１１に示すように、アドレス「８００１ｃｅ（１６進数）」のデータは、第４のバンクＢＫ４のアドレス「８００１ｃ０（１６進数）」のデータラインＬＮ４２に含まれるデータである。
【００７３】
まず、プロセッサ１０１は、第１のバンクＢＫ１のアドレス「８０００００（１６進数）」のデータラインＬＮ１１、第２のバンクＢＫ２のアドレス「８０００４０（１６進数）」のデータラインＬＮ２１、第３のバンクＢＫ３のアドレス「８０００８０（１６進数）」のデータラインＬＮ３１、及び第４のバンクＢＫ４のアドレス「８０００ｃ０（１６進数）」のデータラインＬＮ４１を１サイクルで並列にロードする。次に、プロセッサ１０１は、データラインＬＮ１１内のアドレス「８０００００（１６進数）」のデータを結果データレジスタｖｔ［０］に格納する。また、プロセッサ１０１は、データラインＬＮ２１内のアドレス「８０００４２（１６進数）」のデータを結果データレジスタｖｔ［１］に格納する。また、プロセッサ１０１は、データラインＬＮ３１内のアドレス「８０００８６（１６進数）」のデータを結果データレジスタｖｔ［２］に格納する。また、プロセッサ１０１は、データラインＬＮ４１内のアドレス「８０００ｃ６（１６進数）」のデータを結果データレジスタｖｔ［３］に格納する。
【００７４】
次に、プロセッサ１０１は、第１のバンクＢＫ１のアドレス「８００１００（１６進数）」のデータラインＬＮ１２、第２のバンクＢＫ２のアドレス「８００１４０（１６進数）」のデータラインＬＮ２２、第３のバンクＢＫ３のアドレス「８００１８０（１６進数）」のデータラインＬＮ３２、及び第４のバンクＢＫ４のアドレス「８００１ｃ０（１６進数）」のデータラインＬＮ４２を１サイクルで並列にロードする。次に、プロセッサ１０１は、データラインＬＮ１２内のアドレス「８００１０８（１６進数）」のデータを結果データレジスタｖｔ［４］に格納する。また、プロセッサ１０１は、データラインＬＮ２２内のアドレス「８００１４ａ（１６進数）」のデータを結果データレジスタｖｔ［５］に格納する。また、プロセッサ１０１は、データラインＬＮ３２内のアドレス「８００１８ｃ（１６進数）」のデータを結果データレジスタｖｔ［６］に格納する。また、プロセッサ１０１は、データラインＬＮ４２内のアドレス「８００１ｃｅ（１６進数）」のデータを結果データレジスタｖｔ［７］に格納する。
【００７５】
以上のように、８個のレジスタｖｒ［０］〜ｖｒ［７］に基づく８個のアドレスのデータのロードが４個のバンクＢＫ１〜ＢＫ４に分散し、２サイクルの短時間でロードすることができる。
【００７６】
図１２は、図８の演算装置の具体的な構成例を示す図である。図１のデータＲＡＭ１０３は、並列にアクセス可能な複数のバンクＢＫ１〜ＢＫ４に分割されている。複数のバンクＢＫ１〜ＢＫ４は、上記のように、複数のデータラインのアドレスがシーケンシャルではなく不規則に振り分けられている。プロセッサ１０１は、データＲＡＭ１０３の複数のアドレスのデータに並列にアクセス可能である。ｍ個の制御回路ＣＴ１〜ＣＴｍは、プロセッサ１０１及びデータＲＡＭ１０３の間に設けられ、図９に示すように、プロセッサ１０１から入力するｍ個のアドレスが属するバンクＢＫ１〜ＢＫ４をアクセス可能状態に制御する。調停回路ＡＲ１〜ＡＲ４の数は、バンクＢＫ１〜ＢＫ４の数と同じである。調停回路ＡＲ１〜ＡＲ４は、それぞれ、バンクＢＫ１〜ＢＫ４に対応して設けられる。また、調停回路ＡＲ１〜ＡＲ４は、制御回路ＣＴ１〜ＣＴｍ及びバンクＢＫ１〜ＢＫ４の間に設けれ、複数のバンクＢＫ１〜ＢＫ４のアクセスを調停する。プロセッサ１０１が並列に出力するアドレスの数ｍは、バンクＢＫ１〜ＢＫ４の数よりも多いことが好ましい。
【００７７】
図１３は、図１２の制御回路ＣＴ１の構成例を示す図である。制御回路ＣＴ１は、プロセッサ１０１に対して、レジスタｖｒ［０］を基に、アドレスａｄｄｒを入力し、ストアデータｄａｔａ＿ｉｎを入力し、書き込み制御信号ｗｒを入力し、ロードデータｄａｔａ＿ｏｕｔを出力する。書き込み制御信号ｗｒは、例えば、「１」がストアデータｄａｔａ＿ｉｎのストアを示し、「０」がロードデータｄａｔａ＿ｏｕｔのロードを示す。
【００７８】
また、制御回路ＣＴ１は、第１の調停回路ＡＲ１に対して、アドレスａｄｄｒ０を出力し、ストアデータｄａｔａ＿ｉｎ０を出力し、ロードデータｄａｔａ＿ｏｕｔ０を入力し、書き込み制御信号ｗｒ０を出力し、バイトイネーブル信号ｂｙｔｅ＿ｅｎ０を出力する。
【００７９】
また、制御回路ＣＴ１は、第２の調停回路ＡＲ２に対して、アドレスａｄｄｒ１を出力し、ストアデータｄａｔａ＿ｉｎ１を出力し、ロードデータｄａｔａ＿ｏｕｔ１を入力し、書き込み制御信号ｗｒ１を出力し、バイトイネーブル信号ｂｙｔｅ＿ｅｎ１を出力する。
【００８０】
また、制御回路ＣＴ１は、第３の調停回路ＡＲ３に対して、アドレスａｄｄｒ２を出力し、ストアデータｄａｔａ＿ｉｎ２を出力し、ロードデータｄａｔａ＿ｏｕｔ２を入力し、書き込み制御信号ｗｒ２を出力し、バイトイネーブル信号ｂｙｔｅ＿ｅｎ２を出力する。
【００８１】
また、制御回路ＣＴ１は、第４の調停回路ＡＲ４に対して、アドレスａｄｄｒ３を出力し、ストアデータｄａｔａ＿ｉｎ３を出力し、ロードデータｄａｔａ＿ｏｕｔ３を入力し、書き込み制御信号ｗｒ３を出力し、バイトイネーブル信号ｂｙｔｅ＿ｅｎ３を出力する。
【００８２】
書き込み制御信号ｗｒ０〜ｗｒ３は、書き込み制御信号ｗｒと同じである。アドレスａｄｄｒ０〜ａｄｄｒ３は、ｎビットアドレスａｄｄｒのうちの６ビット目からｎ−１ビット目のアドレスａｄｄｒ［６］〜ａｄｄｒ［ｎ−１］である。ストアデータｄａｔａ＿ｉｎ０〜ｄａｔａ＿ｉｎ３は、ストアデータｄａｔａ＿ｉｎと同じである。
【００８３】
バンク選択回路１３０１は、図９に従い、ｎビットアドレスａｄｄｒのうちの４ビット目から７ビット目のアドレスａｄｄｒ［４］〜ａｄｄｒ［７］に応じて、イネーブル信号ｅｎ０〜ｅｎ３のうちのいずれか１つを「１」にする。バイト選択信号生成回路１３１１は、図２２に示すように、ｎビットアドレスａｄｄｒのうちの１ビット目から３ビット目のアドレスａｄｄｒ［１］〜ａｄｄｒ［３］に応じて、出力信号を出力する。論理積（ＡＮＤ）回路１３０７〜１３１０は、それぞれ、バイト選択信号生成回路１３１１の出力信号とイネーブル信号ｅｎ０〜ｅｎ３の論理積信号を、バイトイネーブル信号ｂｙｔｅ＿ｅｎ０〜ｂｙｔｅ＿ｅｎ３として出力する。
【００８４】
例えば、バンク選択回路１３０１は、図１４（Ａ）〜（Ｄ）のカルノー図で表現される論理回路であり、４ビットアドレスａｄｄｒ［４］〜ａｄｄｒ［７］を入力し、４ビットのイネーブル信号ｅｎ０〜ｅｎ３を出力する。イネーブル信号ｅｎ０〜ｅｎ３の「１」は、それぞれ、バンクＢＫ１〜ＢＫ４がイネーブル状態であることを示す。イネーブル信号ｅｎ０〜ｅｎ３の「０」は、それぞれ、バンクＢＫ１〜ＢＫ４がイネーブル状態でないことを示す。図１４（Ａ）はイネーブル信号ｅｎ０のカルノー図であり、図１４（Ｂ）はイネーブル信号ｅｎ１のカルノー図であり、図１４（Ｃ）はイネーブル信号ｅｎ２のカルノー図であり、図１４（Ｄ）はイネーブル信号ｅｎ３のカルノー図である。
【００８５】
図１３において、バンクＢＫ１〜ＢＫ４は、それぞれ、書き込み制御信号ｗｒ０〜ｗｒ３が「０」の場合には、アドレスａｄｄｒ０〜ａｄｄｒ３のデータラインからバイトイネーブル信号ｂｙｔｅ＿ｅｎ０〜ｂｙｔｅ＿ｅｎ３が「１」となっているビットに対応する位置のデータをロードし、ロードデータｄａｔａ＿ｏｕｔ０〜ｄａｔａ＿ｏｕｔ３を出力する。
【００８６】
また、バンクＢＫ１〜ＢＫ４は、それぞれ、書き込み制御信号ｗｒ０〜ｗｒ３が「１」の場合には、アドレスａｄｄｒ０〜ａｄｄｒ３のデータラインのバイトイネーブル信号ｂｙｔｅ＿ｅｎ０〜ｂｙｔｅ＿ｅｎ３が「１」となっているビットに対応する位置にストアデータｄａｔａ＿ｉｎ０〜ｄａｔａ＿ｉｎ３のデータをストアする。
【００８７】
論理積（ＡＮＤ）回路１３０２は、イネーブル信号ｅｎ０及びロードデータｄａｔａ＿ｏｕｔ０の論理積信号を出力する。論理積回路１３０３は、イネーブル信号ｅｎ１及びロードデータｄａｔａ＿ｏｕｔ１の論理積信号を出力する。論理積回路１３０４は、イネーブル信号ｅｎ２及びロードデータｄａｔａ＿ｏｕｔ２の論理積信号を出力する。論理積回路１３０５は、イネーブル信号ｅｎ３及びロードデータｄａｔａ＿ｏｕｔ３の論理積信号を出力する。論理和（ＯＲ）回路１３０６は、論理積回路１３０２〜１３０５の出力信号の論理和信号をロードデータｄａｔａ＿ｏｕｔとして出力する。すなわち、イネーブル状態になっている１個のバンクのロードデータのみがプロセッサ１０１に出力される。
【００８８】
以上、制御回路ＣＴ１について説明したが、制御回路ＣＴ２〜ＣＴｍも制御回路ＣＴ１と同様の構成を有する。ただし、制御回路ＣＴ２〜ＣＴｍは、それぞれ、プロセッサ１０１に対して、レジスタｖｒ［１］〜ｖｒ［ｍ−１］に応じた情報を入出力する。
【００８９】
図１２の調停回路ＡＲ１〜ＡＲ４は、それぞれ、制御回路ＣＴ１〜ＣＴｍからバンクＢＫ１〜ＢＫ４の情報を入力し、それらの情報を調停し、各バンクＢＫ１〜ＢＫ４に対していずれか１個のデータラインのアドレスをバンクＢＫ１〜ＢＫ４に出力する。制御回路ＣＴｉのデータラインアドレスにアクセスする場合、制御回路ＣＴｉの書き込み制御信号ｗｒ０〜ｗｒ３が「０」のときには、バイトイネーブル信号ｂｙｔｅ＿ｅｎ信号が「１」となっているバイト位置のデータを切り出して制御回路ＣＴｉに返す。また、書き込み制御信号ｗｒ０〜ｗｒ３が「１」のときには、バイトイネーブルｂｙｔｅ＿ｅｎ信号が「１」となっているバイト位置に制御回路ＣＴｉからのデータをストアする。図１０の場合、調停回路ＡＲ１〜ＡＲ４は、バンクＢＫ１〜ＢＫ４に対して、第１のサイクルでは、データラインＬＮ１１、ＬＮ２１、ＬＮ３１及びＬＮ４１をロードし、その次の第２のサイクルでは、データラインＬＮ１２、ＬＮ２２、ＬＮ３２及びＬＮ４２をロードする。
【００９０】
本実施形態によれば、複数のバンクＢＫ１〜ＢＫ４は、複数のデータラインのアドレスがシーケンシャルではなく不規則に振り分けられているので、複数のバンクＢＫ１〜ＢＫ４に対してアクセスを分散させることができ、データＲＡＮ１０３のアクセス時間を短縮することができる。
【００９１】
（第２の実施形態）
図１５は、第２の実施形態による演算装置の構成例を示す図である。図１５の演算装置は、図８の演算装置に対して、２ビット１５０５の位置を可変にしたものである。以下、本実施形態が第１の実施形態と異なる点を説明する。２ビット１５０４は、図８の４ビット目及び５ビット目のアドレスａｄｄｒ［４］及びａｄｄｒ［５］に対応する。２ビット１５０５は、図８の６ビット目及び７ビット目のアドレスａｄｄｒ［６］及びａｄｄｒ［７］に対応する。ビット１５０１は、２ビット１５０４及び２ビット１５０５の間に設けられる。ビット１５０１の数は、可変である。制御回路ＣＴは、切り替えレジスタ１５０２及びビット数指定レジスタファイル１５０３を有する。ビット数指定レジスタファイル１５０３は、ビット１５０１の数として指定可能な０以上の整数を記憶する複数のレジスタを有し、切り替えレジスタ１５０２の値に応じたインデックスのレジスタの値を出力する。切り替えレジスタ１５０２の値を書き換えることにより、ビット１５０１の数を変更することができる。
【００９２】
なお、ビット数指定レジスタファイル１５０３のインデックスが０のレジスタは、ビット１５０１の数として０を記憶するようにしてもよい。また、ビット数指定レジスタファイル１５０３のレジスタ数は、特に限定しない。ただし、ビット数指定レジスタファイル１５０３のレジスタ数が１の場合は、切り替えレジスタ１５０２を設けず、レジスタ数が１個であるビット数指定レジスタファイル１５０３のみを設けてもよい。
【００９３】
プロセッサ１０１がアクセスするアドレスパターンによっては、第１の実施形態の場合でも特定のバンクにアクセスが集中してアクセスの衝突が頻発することがある。本実施形態では、アプリケーションのアクセスアドレスパターンに応じて、シャッフル対象のビット１５０５の位置を切り替えるようにする。
【００９４】
図１６は、図９に対応し、データラインのアドレスとバンクＢＫ１〜ＢＫ４との対応関係を示す図である。図１５の演算装置では、複数のバンクＢＫ１〜ＢＫ４は、複数のデータラインのアドレスがシーケンシャルではなく不規則に振り分けられている。
【００９５】
第１の実施形態（図８）では、４ビット目及び５ビット目のアドレスａｄｄｒ［４］及びａｄｄｒ［５］並びに６ビット目及び７ビット目のアドレスａｄｄｒ［６］及びａｄｄｒ［７］に応じて、バンクＢＫ１〜ＢＫ４の振り分けが行われる。
【００９６】
本実施形態（図１５）では、ビット１５０１の数をｘとすると、４ビット目及び５ビット目のアドレスａｄｄｒ［４］及びａｄｄｒ［５］並びにｘ＋６ビット目及びｘ＋７ビット目のアドレスａｄｄｒ［ｘ＋６］及びａｄｄｒ［ｘ＋７］に応じて、バンクＢＫ１〜ＢＫ４の振り分けが行われる。
【００９７】
図１６の４ビット目及び５ビット目のアドレスａｄｄｒ［４］及びａｄｄｒ［５］は、図９の４ビット目及び５ビット目のアドレスａｄｄｒ［４］及びａｄｄｒ［５］に対応する。図１６のｘ＋６ビット目及びｘ＋７ビット目のアドレスａｄｄｒ［ｘ＋６］及びａｄｄｒ［ｘ＋７］は、図９の６ビット目及び７ビット目のアドレスａｄｄｒ［６］及びａｄｄｒ［７］に対応する。すなわち、ビット１５０１の数ｘを０にすると、本実施形態と第１の実施形態は同じになる。
【００９８】
図１７は、本実施形態による図１２の制御回路ＣＴ１の構成例を示す図である。図１７の制御回路ＣＴ１は、図１３の制御回路ＣＴ１に対して、切り替えレジスタ１５０２、ビット数指定レジスタファイル１５０３及びビット切り出し回路１７０１を追加したものである。以下、図１７の制御回路ＣＴ１が図１３の制御回路ＣＴ１と異なる点を説明する。
【００９９】
ビット数指定レジスタファイル１５０３は、ビット１５０１の数として指定可能な０以上の整数を記憶する複数のレジスタを有する。プロセッサ１０１は、ビット数指定レジスタファイル１５０３に対して、書き込み制御信号ｗ＿ｅｎに応じて、ストアデータｂｉｔ＿ｃｎｔ＿ｉｎをストアし、ロードデータｂｉｔ＿ｃｎｔ＿ｏｕｔをロードする。
【０１００】
切り替えレジスタ１５０２は、ビット数指定レジスタファイル１５０３内の複数のレジスタのうちのいずれかのインデックスを記憶する。プロセッサ１０１は、切り替えレジスタ１５０２に対して、書き込み制御信号ｗ＿ｅｎに応じて、ストアデータｓｅｌ＿ｉｎをストアし、ロードデータｓｅｌ＿ｏｕｔをロードする。
【０１０１】
ビット数指定レジスタファイル１５０３は、切り替えレジスタ１５０２が記憶するインデックスを入力し、そのインデックスのレジスタが記憶するビット数ｂｉｔ＿ｃｎｔを出力する。ビット切り出し回路１７０１は、プロセッサ１０１からアドレスａｄｄｒをアドレスａｄｄｒ＿ｉｎとして入力し、ビット数ｂｉｔ＿ｃｎｔに応じて、アドレスａｄｄｒ＿ｉｎから切り出した４ビットアドレスａｄｄｒ＿ｓｅｌをバンク選択回路１３０１に出力する。なお、制御回路ＣＴ２〜ＣＴｍも制御回路ＣＴ１と同様の構成を有する。
【０１０２】
図１８は、図１７のビット切り出し回路１７０１の構成例を示す図である。ビット切り出し回路１７０１は、セレクタ１８０１を有し、４ビットアドレスａｄｄｒ＿ｓｅｌ［０］〜ａｄｄｒ＿ｓｅｌ［３］を出力する。アドレスａｄｄｒ＿ｓｅｌ［０］は、アドレスａｄｄｒ＿ｉｎ［４］と同じビット値である。アドレスａｄｄｒ＿ｓｅｌ［１］は、アドレスａｄｄｒ＿ｉｎ［５］と同じビット値である。
【０１０３】
セレクタ１８０１は、ビット数ｂｉｔ＿ｃｎｔに応じて、２ビットアドレスａｄｄｒ＿ｉｎ［６］，ａｄｄｒ＿ｉｎ［７］、２ビットアドレスａｄｄｒ＿ｉｎ［７］，ａｄｄｒ＿ｉｎ［８］、・・・、２ビットアドレスａｄｄｒ＿ｉｎ［ｎ−２］，ａｄｄｒ＿ｉｎ［ｎ−１］のうちのいずれか１個を選択し、２ビットアドレスａｄｄｒ＿ｓｅｌ［２］，ａｄｄｒ＿ｓｅｌ［３］を出力する。例えば、ビット数ｂｉｔ＿ｃｎｔが０である場合、２ビットアドレスａｄｄｒ＿ｓｅｌ［２］，ａｄｄｒ＿ｓｅｌ［３］は、２ビットアドレスａｄｄｒ＿ｉｎ［６］，ａｄｄｒ＿ｉｎ［７］と同じになる。ビット数ｂｉｔ＿ｃｎｔが１である場合、２ビットアドレスａｄｄｒ＿ｓｅｌ［２］，ａｄｄｒ＿ｓｅｌ［３］は、２ビットアドレスａｄｄｒ＿ｉｎ［７］，ａｄｄｒ＿ｉｎ［８］と同じになる。すなわち、ビット数ｂｉｔ＿ｃｎｔをビット数ｘとすると、セレクタ１８０１は、図１６のように、２ビットアドレスａｄｄｒ［ｘ＋６］，ａｄｄｒ［ｘ＋７］を２ビットアドレスａｄｄｒ＿ｓｅｌ［２］，ａｄｄｒ＿ｓｅｌ［３］として出力する。
【０１０４】
図１９は、ビット数ｘを決定するための処理方法を示すフローチャートである。プロセッサ１０１は、命令ＲＡＭ１０２内のターゲットプログラム１９０１を実行することにより、データＲＡＭ１０３にアクセスする。最適なビット数ｘは、プロセッサ１０１が実行するターゲットプログラム１９０１により異なる。シミュレータ１９０２は、例えばコンピュータであり、ターゲットプログラム１９０１の実行によりシミュレーションを行い、その結果として、データＲＡＭ１０３のアクセスパターン１９０３を出力する。アクセスパターン１９０３は、ターゲットプログラム１９０１のうちのデータＲＡＭ１０３に対するアクセス命令の命令カウント値、ベースアドレス及びオフセットアドレスの組みを含む。これにより、データＲＡＭ１０３にアクセスするベースアドレス及びオフセットアドレスを得ることができる。次に、コンピュータは、ビット数決定プログラム１９０４を実行することにより、アクセスパターン１９０３を基にビット数１９０５（ビット数ｘ）を決定して出力（表示）する。
【０１０５】
図２０は、図１９のビット数決定プログラム１９０４の処理例を示すフローチャートである。ステップＳ２００１では、コンピュータは、ビット数ｘを０から指定可能なビット数の上限まで変化させるループ処理を開始する。次に、ステップＳ２００２では、コンピュータは、ビット数ｘの全サイクル数［ｘ］の変数を０にリセットする。次に、ステップＳ２００３では、コンピュータは、各アクセスパターン１９０３についてのループ処理を開始する。次に、ステップＳ２００４では、コンピュータは、指定されたビット数ｘ及びアクセスパターン１９０３についてのサイクル数を求め、そのサイクル数を全サイクル数［ｘ］の変数に累積加算する。サイクル数を求める処理は、後に図２１を参照しながら説明する。次に、ステップＳ２００５では、コンピュータは、アクセスパターン１９０３のループ処理を終了し、ステップＳ２００３に戻り、次のアクセスパターン１９０３の処理を繰り返す。すべてのアクセスパターン１９０３の処理が終了すると、ステップＳ２００６では、コンピュータは、ビット数ｘのループ処理を終了し、ステップＳ２００１に戻り、次のビット数ｘの処理を繰り返す。すべてのビット数ｘの処理が終了すると、ステップＳ２００７では、コンピュータは、全サイクル数［ｘ］の変数が最小となるビット数ｘを探索し、最も少ないサイクル数でアクセスするビット数ｘを出力する。
【０１０６】
図２１は、図２０のステップＳ２００４のサイクル数を求める処理を示すフローチャートである。ステップＳ２１０１では、コンピュータは、バンク番号ｉを０から３まで変化させるループ処理を開始する。次に、ステップＳ２１０２では、コンピュータは、バンク番号ｉのアクセスアドレス集合ｂａｎｋ［ｉ］の変数を空にリセットする。次に、ステップＳ２１０３では、コンピュータは、バンク番号ｉのループ処理を終了し、ステップＳ２１０１に戻り、次のバンク番号ｉの処理を繰り返す。
【０１０７】
次に、ステップＳ２１０４では、コンピュータは、アクセスパターン１９０３内の各オフセットアドレスについてのループ処理を開始する。次に、ステップＳ２１０５では、コンピュータは、オフセットアドレスを２倍した値にベースアドレスを加算し、その加算結果をアドレスａｄｄｒとする。次に、コンピュータは、指定されたビット数ｘ及びアドレスａｄｄｒが属するバンク番号を変数ｔに格納する。次に、コンピュータは、指定されたビット数ｘ及びアドレスａｄｄｒが属するデータラインアドレスを変数ａに格納する。次に、コンピュータは、データラインアドレスａをアクセスアドレス集合ｂａｎｋ［ｉ］に追加する。次に、ステップＳ２１０６では、コンピュータは、オフセットアドレスのループ処理を終了し、ステップＳ２１０４に戻り、次のオフセットアドレスの処理を繰り返す。すべてのオフセットアドレスの処理が終了すると、ステップＳ２１０７に進む。
【０１０８】
ステップＳ２１０７では、コンピュータは、アクセスアドレス集合ｂａｎｋ［０］〜ｂａｎｋ［３］の各々の中でユニークな要素（データラインアドレス）の数を求め、そのユニークな要素の数の最大値をサイクル数とする。すなわち、同一データラインのアクセスは１サイクルで行えるため、各バンクのアクセスアドレス集合ｂａｎｋ［０］〜ｂａｎｋ［３］の中から、重複しないデータラインアドレスの数を求め、その値の最大値をサイクル数として返す。
【０１０９】
なお、第１及び第２の実施形態では、４個のバンクＢＫ１〜ＢＫ４の例を説明したが、４個に限定されない。データＲＡＭ１０３は、２p（ｐは自然数）個のバンクに分割することができる。２p個のバンクは、データＲＡＭ１０３のアドレスのうちの２×ｐビットの値に応じて、複数のデータラインのアドレスが振り分けられる。制御回路ＣＴ１〜ＣＴｍは、プロセッサ１０１から入力するアドレスのうちの２×ｐビットの値に応じて、プロセッサ１０１から入力するアドレスが属するバンクをアクセス可能状態に制御する。第１の実施形態では、上記のアドレスのうちの２×ｐビットは、相互に隣接した２×ｐビットである。
【０１１０】
第２の実施形態では、上記のアドレスのうちの２×ｐビットは、相互に隣接した第１のｐビット１５０４と、相互に隣接した第２のｐビット１５０５とを有し、第１のｐビット１５０４及び第２のｐビット１５０５は、相互に隣接していない。第１のｐビット１５０４と第２のｐビット１５０５との間隔は、変更可能である。
【０１１１】
第１及び第２の実施形態によれば、複数のバンクＢＫ１〜ＢＫ４に対してアクセスを分散させることができるので、データＲＡＭ１０３に対するアクセス時間を短くすることができる。
【０１１２】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【０１１３】
１０１  プロセッサ
１０２  命令ＲＡＭ
１０３  データＲＡＭ
１１１  プログラムカウンタ
１１２  デコーダ
１１３  スカラレジスタファイル
１１４  ベクトルレジスタファイル
１１５  加算器
１１８  算術論理ユニット
ＢＫ１〜ＢＫ４  バンク
ＣＴ１〜ＣＴｍ  制御回路
ＡＲ１〜ＡＲ４  調停回路
【図１】
2015108972.tif 000003
【図２】
2015108972.tif 000004
【図３】
2015108972.tif 000005
【図４】
2015108972.tif 000006
【図５】
2015108972.tif 000007
【図６】
2015108972.tif 000008
【図７】
2015108972.tif 000009
【図８】
2015108972.tif 000010
【図９】
2015108972.tif 000011
【図１０】
2015108972.tif 000012
【図１１】
2015108972.tif 000013
【図１２】
2015108972.tif 000014
【図１３】
2015108972.tif 000015
【図１４】
2015108972.tif 000016
【図１５】
2015108972.tif 000017
【図１６】
2015108972.tif 000018
【図１７】
2015108972.tif 000019
【図１８】
2015108972.tif 000020
【図１９】
2015108972.tif 000021
【図２０】
2015108972.tif 000022
【図２１】
2015108972.tif 000023
【図２２】
2015108972.tif 000024