メモリ制御装置、及びメモリ制御方法
【課題】データメモリの不連続なアドレスにアクセスして要素データを読み書きする場合であっても、良好なスループットを得る。
【解決手段】
メモリ制御装置は、要素データ列が読み書きされる複数のバンクを有するメモリに、要素データ列を読み書きするためのバンクごとのアドレスを生成する第1の生成部と、前記要素データ列における演算要素データの位置と、ベクトルレジスタでの格納順序を対応付ける信号を生成する第2の生成部と、前記複数のバンクに読み出される要素データ列から演算要素データを選択してベクトルレジスタに格納し、または、ベクトルレジスタから読み出した演算要素データを要素データ列に挿入する。これにより、レイテンシを抑制し、ベクトルプロセッサの良好なスループットを得る。
【解決手段】
メモリ制御装置は、要素データ列が読み書きされる複数のバンクを有するメモリに、要素データ列を読み書きするためのバンクごとのアドレスを生成する第1の生成部と、前記要素データ列における演算要素データの位置と、ベクトルレジスタでの格納順序を対応付ける信号を生成する第2の生成部と、前記複数のバンクに読み出される要素データ列から演算要素データを選択してベクトルレジスタに格納し、または、ベクトルレジスタから読み出した演算要素データを要素データ列に挿入する。これにより、レイテンシを抑制し、ベクトルプロセッサの良好なスループットを得る。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、メモリに対するデータの読み書きを制御するメモリ制御装置等に関する。
【背景技術】
【0002】
配列をなす大量の要素データに対し一定の演算を繰り返すベクトル処理において、ベクトルプロセッサが用いられる(たとえば、特許文献1)。ベクトルプロセッサによれば、一命令により配列の要素データを連続的に処理することで、高い演算スループットを得ることができる。ベクトルプロセッサは、たとえば、ロード・ストア用、演算用のパイプラインを有する。ロード・ストアパイプラインは、要素データをデータメモリから読み出して、演算パイプラインによる処理順序でレジスタ(以下、ベクトルレジスタという)に格納する。演算パイプラインは、演算命令のフェッチ、デコードを一回的に行い、ベクトルレジスタから要素データを順次連続して読み出し、算術演算などの演算を実行する。そして、演算パイプラインは、演算結果を示す要素データを処理順序でベクトルレジスタに格納する。そして、ロード・ストアパイプラインは、演算結果を示す要素データをレジスタから読み出し、処理順序でデータメモリに格納する。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】米国特許第5809552号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
たとえばDRAM(Dynamic Random Access Memory)などの大容量のデータメモリにおいて、入力用の要素データが不連続なアドレスに格納されている場合がある。あるいは、演算結果を示す要素データを、データメモリの不連続なアドレスに格納する場合がある。すると、ロード・ストアパイプラインが要素データをデータメモリからベクトルレジスタに読み出すとき、またはベクトルレジスタからデータメモリに書き込むときに、広範なメモリ領域へのアクセスが発生する。このことはレイテンシを増大させ、スループットを圧迫する要因となる。また、たとえば、データメモリとベクトルレジスタの間にSRAM(Static Random Access Memory)などの高速のキャッシュメモリを設けてパイプライン化し、これによりレイテンシを緩和しようとした場合、回路規模の増大や高コスト化を招くおそれがある。
【0005】
本発明の目的は、データメモリの不連続なアドレスにアクセスして要素データを読み書きする場合であっても、最小限の回路構成により良好なスループットを得ることができるメモリ制御装置、及びメモリ制御方法を提供することにある。
【課題を解決するための手段】
【0006】
上記の目的を達成するために、第1の側面におけるメモリ制御装置は、読出しアドレスの入力に応答して複数の要素データを有する要素データ列が読み出される複数のバンクを有するメモリから、前記要素データ列を読み出すためのバンクごとの前記読出しアドレスを生成する第1の生成部と、前記要素データ列における選択すべき要素データの位置を示す位置信号と、前記選択すべき要素データをレジスタに格納する格納順序を示す順序信号とを生成する第2の生成部と、前記複数のバンクからそれぞれ読み出された前記要素データ列から前記位置信号に基づいて前記選択すべき要素データを選択し、当該選択した要素データを前記順序信号が示す格納順序で前記レジスタに格納するセレクタ部とを有し、前記レジスタに格納された要素データは、前記格納順序でベクトルプロセッサに処理される。
【0007】
また、第2の側面におけるメモリ制御装置は、複数の要素データを有する要素データ列が、入力された書込みアドレスに書き込まれる複数のバンクを有するメモリに、前記要素データ列を書き込むためのバンクごとの書込みアドレスを生成する第1の生成部と、ベクトルプロセッサによる処理順序でレジスタに格納された、前記メモリに書き込むべき要素データの当該レジスタにおける格納順序を示す順序信号と、前記複数のバンクにそれぞれ書き込まれる要素データ列に前記書き込むべき要素データを挿入する位置を示す位置信号とを生成する第2の生成部と、前記複数のバンクに書き込まれる要素データ列における前記位置信号が示す位置に、前記順序信号が示す順序で前記書き込むべき要素データを挿入するセレクタ部とを有し、前記書き込むべき要素データ列が格納された要素データ列が、前記バンクごとの書込みアドレスに書き込まれる。
【発明の効果】
【0008】
以下で説明する実施形態によれば、データメモリの不連続なアドレスにアクセスして要素データを読み書きする場合であっても、最小限の回路構成により良好なスループットを得ることができる。
【図面の簡単な説明】
【0009】
【図1】本実施形態が適用されるベクトルプロセッサの構成を説明する図である。
【図2】ベクトルパイプライン12_1〜4の処理シーケンスを説明する図である。
【図3】演算パイプライン12_3、12_4の動作について説明する図である。
【図4】要素データの転送の態様を模式的に示す図である。
【図5】データメモリ6における要素データの読み書きについて説明する図である。
【図6】ベクトルレジスタ8について説明する図である。
【図7】メモリ制御装置の構成を示す図である。
【図8】順序・位置信号生成部32の詳細な動作を説明するための図である。
【図9】バンクイネーブル信号BEが生成されない例を示す図である。
【図10】メモリ制御装置の構成を示す図である。
【図11】順序・位置所信号生成部32の詳細な動作を説明するための図である。
【図12】バンクイネーブル信号BEが生成されない例を示す図である。
【発明を実施するための形態】
【0010】
以下、図面にしたがって実施の形態について説明する。但し、適用される技術的範囲はこれらの実施の形態に限定されず、特許請求の範囲に記載された事項とその均等物まで及ぶものである。
【0011】
図1は、本実施形態が適用されるベクトルプロセッサの構成を説明する図である。
【0012】
ベクトルプロセッサ1は、命令メモリ2に格納された命令に従って、ベクトルパイプライン12がデータメモリ6に格納される要素データを読み出して演算を行い、演算結果を示す要素データをデータメモリ6に書き込む。ベクトルプロセッサ1は、命令メモリ2、ベクトルパイプライン12、データメモリ6のほかに、命令デコーダ4、ベクトルレジスタ8、スカラレジスタ10、及びマルチプレクサ14を有する。ベクトルプロセッサ1は、たとえば、信号処理用LSI(Large Scale Integrated circuit)である。
【0013】
命令メモリ2は、ベクトルパイプライン12に対する制御命令や演算命令を格納する。命令メモリ2は、たとえばSRAMである。命令デコーダ4は、命令メモリ2から命令を読み出してデコードし、ベクトルパイプライン12に入力する。
【0014】
ベクトルパイプライン12は、ロード・ストア処理用のロード・ストアパイプライン12_1、12_2と、各種演算用の演算パイプライン12_3、12_4を有する。ロード・ストアパイプライン12_1、12_2と、演算パイプライン12_3、12_4は、それぞれ入力される制御命令や演算命令に従って動作する。ロード・ストアパイプライン12_1、12_2は、データメモリ6にアクセスして、データメモリ6とベクトルレジスタ8の間で要素データの転送を行う。このとき、ロード・ストアパイプライン12_1、12_2は、マルチプレクサ14を制御して、転送される要素データの選別を行う。演算パイプライン12_3、12_4は、ベクトルレジスタ8に格納された要素データを読み出し、加減算、乗算といった算術演算や、論理演算などの演算を実行する。演算パイプライン12_3、12_4は、たとえば、それぞれ一または複数の演算器を有する。演算パイプライン12_3、12_4に含まれる演算器は、一命令で、配列をなす要素データに対し連続して演算を行う。
【0015】
データメモリ6は、配列をなす要素データを格納する。データメモリ6は、たとえば、SRAMである。要素データは、演算パイプライン12_3、12_4による演算用のデータである。また、要素データは、演算パイプライン12_3、12_4による演算結果を示すデータである。データメモリ6は、複数のバンク6_1、6_2、6_3、及び6_4を有する。バンク6_1〜6_4は、それぞれデータ読み書き用のアクセスポートを有する。バンク6_1〜6_4は、インターリーブ方式によりそれぞれのアドレスにアクセスされる。
【0016】
ベクトルレジスタ8は、データメモリ6から読み出されて演算パイプライン12_3、12_4に入力される要素データを格納する。また、ベクトルレジスタ8は、演算パイプライン12_3、12_4から出力されてデータメモリ6に書き込まれる要素データを格納する。なお、スカラレジスタ8には、ベクトルパイプライン12に入出力される、ベクトル処理以外の各種データが格納される。
【0017】
図2は、ベクトルパイプライン12_1〜4の処理シーケンスを説明する図である。図2(A)はロード・ストアパイプライン12_1、12_2の処理シーケンスを示し、図2(B)は演算パイプライン12_3、12_4の処理シーケンスを示す。図2(A)、(B)において、縦軸は処理ステージを示し、横軸は時間(処理サイクル)を示す。ここでは、64個の要素データを順次処理する場合が示される。各マス目の中の数字は、処理される要素データの配列番号(0〜63)を示す。
【0018】
まず、図2(A)に示すように、ロード・ストアパイプライン12_1、12_2は、命令のフェッチ「fetch」、命令のデコード「decode」、レジスタからの命令読み出し「reg.read」、命令の実行「execute」、メモリアクセス「mem.access」、及び実行結果のレジスタ書込み「writeback」の6ステージを順次、並行して実行する。各ステージは、それぞれ1処理サイクルで実行される。このとき、「fetch」と「decode」は、一回的に実行される。そして、「execute」〜「writeback」の各ステージでは、1処理サイクルで、8個の要素データが連続して処理される。このようなパイプライン処理により、64個の要素データに対する6ステージの処理が、13処理サイクルで実行される。
【0019】
また、図2(B)に示すように、演算パイプライン12_3、12_4は、「fetch」、「decode」、「reg.read」、「execute」、及び「writeback」の5ステージを順次、並行して実行する。このとき、「fetch」と「decode」は、一回的に実行される。そして、「execute」〜「writeback」の各ステージでは、1処理サイクルで、8個の要素データが連続して処理される。このようなパイプライン処理により、64個の要素データに対する5ステージの処理が、12処理サイクルで実行される。
【0020】
図3は、演算パイプライン12_3、12_4の命令の実行(「execute」)ステージでの動作について説明する図である。図3(A)は、演算パイプライン12_3、12_4が、それぞれ、たとえば1つの演算器30を有する場合を示す。演算器30は、たとえば16ビット演算器である。ここでは、演算器30が、8組の要素データを配列番号順に処理する例が示される。各要素データは、たとえば16ビット長のデータである。演算器30は、1処理サイクルで8組の要素データを処理する。演算器30は、たとえば配列番号をiとして、配列番号i=0〜7の要素データIn_1[i]、In_2[i]に対する算術演算を配列番号iの順序で連続して行い、それぞれの演算結果を示す要素データOut[i]を出力する。
【0021】
図3(B)は、演算パイプライン12_3、12_4のそれぞれが、たとえば8個の演算器30_1〜8を有する場合を示す。演算器30_1〜8は、たとえば、それぞれ16ビット演算器である。ここでは、演算器30_1〜8が、8組の16ビット長の要素データを並行して処理する例が示される。演算器30_1〜8は、たとえば、1回目の演算実行時に、それぞれ配列番号i=0〜7の要素データIn_1[i]、In_2[i]の演算を行い、演算結果を示す要素データOut[i]を出力する。次いで、2回目の演算実行時に、演算器30_1〜8は、それぞれ配列番号i=8〜15の要素データを同様に処理する。次いで3回目の演算実行時に、演算器30_1〜8は、それぞれ配列番号i=16〜23の要素データを同様にして処理する。このようにして、演算実行ごとに8個の要素データが処理される。そして、8回目の演算実行時には、演算器30_1〜8は、それぞれ配列番号i=56〜63の要素データを同様にして処理する。こうして、演算器30_1〜8は、1処理サイクルで8組の要素データの演算を8回連続して行い、64組の要素データを処理する。
【0022】
上述のように、演算パイプライン12_3、12_4は、演算命令のフェッチとデコードを一回的に行い、要素データを順次連続して処理する。そうすることで、命令のフェッチやデコードの時間を節減して高いスループットを得る。また、演算パイプライン12_3、12_4は、複数の演算器を備えることで、その並列動作によりさらに高いスループットを可能にする。
【0023】
一方で、ロード・ストアパイプライン12_1、12_2は、データメモリ6とベクトルレジスタ8との要素データの転送を行う。図4(A)〜(C)は、要素データの転送の態様を模式的に示す。図4(A)〜(C)において、データメモリ6とベクトルレジスタ8の各マス目は、それぞれ1個の要素データが格納されるアドレスを示す。また、各マス目の中の符号は、要素データを示す。
【0024】
図4(A)は、データメモリ6の連続したアドレスに対し要素データの読み書きが行われる場合を示す。かかる場合を、シーケンシャルアクセスという。シーケンシャルアクセスでは、ロード・ストアパイプライン12_1、12_2は、データメモリ6の連続したアドレスからたとえば要素データ「A1」〜「A8」、「B1」〜「B8」を読み出して、ベクトルレジスタ8に演算パイプライン12_3、12_4の処理順序で格納する。また、ロード・ストアパイプライン12_1、12_2は、要素データ「C1」〜「C8」をベクトルレジスタ8から読み出して、データメモリ6の連続したアドレスに書き込む。
【0025】
図4(B)は、データメモリ6における間欠的なアドレスに対し要素データの読み書きが行われる場合を示す。かかる場合を、ストライドアクセスという。ストライドアクセスは、たとえば、所定の間隔で並んだ要素データを抽出して処理する場合に行われる。たとえば、偶数の配列番号の要素データのみの処理を行う場合や、所定間隔ごとの配列番号の要素データのみの処理を行う場合などである。ストライドアクセスでは、ロード・ストアパイプライン12_1、12_2は、データメモリ6の間欠的なアドレスから、たとえば要素データ「A1」〜「A8」、「B1」〜「B8」を読み出して、ベクトルレジスタ8に処理順序で格納する。また、ロード・ストアパイプライン12_1、12_2は、要素データ「C1」〜「C8」をベクトルレジスタ8から読み出して、データメモリ6の間欠的なアドレスに書き込む。
【0026】
図4(C)は、データメモリ6における離散的なアドレスに対し要素データの読み書きが行われる場合を示す。かかる場合を、インダイレクトアクセスという。インダイレクトアクセスは、たとえば点在する要素データに対し処理を行う場合に実行される。インダイレクトアドレスでは、ロード・ストアパイプライン12_1、12_2は、データメモリ6の離散したアドレスから、たとえば要素データ「A1」〜「A8」、「B1」〜「B8」を読み出して、ベクトルレジスタ8に処理順序で格納する。また、ロード・ストアパイプライン12_1、12_2は、要素データ「C1」〜「C8」をベクトルレジスタ8から読み出して、データメモリ6の離散的なアドレスに書き込む。
【0027】
上記の態様において、シーケンシャルアクセス、ストライドアクセス、インダイレクトアクセスの順で、アクセスすべきアドレスが広範になる。それに伴ってアクセス回数が増加し、メモリレイテンシが増大する蓋然性が高くなる。そこで、本実施形態では、次のようにして、メモリレイテンシを抑制し、良好なスループットを得る。
【0028】
図5は、データメモリ6における要素データの読み書きについて説明する図である。データメモリ6は、インターリーブ方式でアクセスされる複数のバンク、たとえばバンク6_1〜6_4を有する。バンク6_1〜6_4は、たとえば、それぞれ128ビットのバンク幅を有する。各マス目は16ビット長の格納領域を示し、マス目の中の数字は要素データを示す。よって、1バンク幅に8個の16ビット長の要素データが格納される。
【0029】
バンク6_1〜6_4からは、読出しアドレスの入力に応答して、たとえば8個の要素データを有する要素データ列が読み出される。あるいは、バンク6_1〜6_4は、たとえば8個の要素データを有する要素データ列が、書込みアドレスに書き込まれる。たとえば、バンク6_1では、1回のアクセスで、アドレスADD1に対し、要素データ「0」〜「7」を有する要素データ列R1が読み書きされる。また、バンク6_2では、1回のアクセスで、アドレスADD2に、要素データ「40」〜「47」有する要素データ列R2が読み書きされる。また、バンク6_3では、1回のアクセスで、アドレスADD3に、要素データ「80」〜「87」を有する要素データ列R3が読み書きされる。さらに、バンク6_4では、1回のアクセスで、アドレスADD4に、要素データ「120」〜「127」を有する要素データ列R4が読み書きされる。このように、データメモリ6全体としては、1回のアクセスで、32個の要素データを有する要素データ列R1〜R4が読み書きされる。
【0030】
図6は、ベクトルレジスタ8について説明する図である。ベクトルレジスタ8には、演算パイプライン12_1、12_2による処理順序で、演算のための要素データ、または演算結果を示す要素データが格納される。ベクトルレジスタ8は、たとえば、128ビットの幅を有し、1つの行アドレスに8個の16ビット長の要素データが格納される。ここでは、各マス目は16ビット長の格納領域を示し、マス目の中の数字は格納される要素データの配列番号を示す。
【0031】
たとえば、図3(A)で示したように、演算パイプライン12_1、12_2の1つの演算器で1処理サイクルに8組の要素データを処理する場合、ベクトルレジスタ8には次のように要素データが格納される。たとえば、2つの行アドレスには演算器に順次入力される要素データの組が処理順序で格納され、別の1つの行アドレスに演算結果を示す要素データが処理順序に格納される。
【0032】
上述のように、バンク6_1〜6_4は、インターリーブ方式により、全体として32個の要素データを含む要素データ列R1〜R4が1回のアクセスで読み書きされる。これにより、レイテンシが抑制される。一方、ベクトルレジスタ8は、1つの行アドレスにつき8個の演算ための、または演算結果を示す要素データが格納される(なお、以下では、ベクトルレジスタ8に格納される要素データを演算要素データと称し、データメモリ6に格納されるその他の要素データと区別する)。よって、本実施形態では、次のようにして、バンク6_1〜6_4から読み出される要素データ列R1〜R4の32個の要素データから、ベクトルレジスタ8に格納すべき8個の演算要素データが選択される。また、ベクトルレジスタ8に格納された8個の演算要素データが、バンク6_1〜6_4に1アクセスで書き込まれる要素データ列R1〜R4に挿入され、データメモリ6に書き込まれる。
【0033】
以下では、本実施形態のメモリ制御装置について、データメモリ6から演算要素データを読み出してベクトルレジスタ8に格納する場合と、ベクトルレジスタ8から演算要素データを読み出してデータメモリ6に書き込む場合とに場合分けして説明する。
【0034】
[データメモリ6から演算要素データを読み出してベクトルレジスタ8に格納する場合]
図7は、データメモリ6から演算要素データを読み出してベクトルレジスタ8に格納するためのメモリ制御装置の構成を示す。メモリ制御装置は、データメモリ6から要素データ列R1〜R4を読み出すためのバンク6_1〜6_4ごとの読出しアドレスrADDを生成するアドレス生成部30を有する。アドレス生成部30は、たとえばロード・ストアパイプライン12_1、12_2内のモジュールである。アドレス生成部30は、命令デコーダ4から入力されるアドレス生成用データ4aに基づいて、読出しアドレスrADDを生成する。アドレス生成部30は、たとえば、シーケンシャルアクセスの場合の読出しアドレスを生成するシーケンシャルアドレス生成部30_1、インダイレクトアクセスの場合の読出しアドレスを生成するインダイレクトアドレス生成部30_2、及びストライドアクセスの場合の読出しアドレスを生成するストライドアドレス生成部30_3を有する。アドレス生成部30が生成したバンク6_1〜6_4ごとの読出しアドレスrADDは、データメモリ6のバンク6_1〜6_4にそれぞれ入力される。その一方、アドレス生成部30では、たとえば、シーケンシャルアドレス生成部30_1、インダイレクトアドレス生成部30_2、及びストライドアドレス生成部30_3により、各種処理信号PSが生成される。そして、バンク6_1〜6_4ごとの読出しアドレスrADDと各種処理信号PSは、レジスタ31に格納される。
【0035】
メモリ制御装置は、要素データ列R1〜R4における演算要素データの位置を示す位置信号S4と、演算要素データをレジスタに格納する格納順序を示す順序信号S6とを生成する順序・位置信号生成部32を有する。順序・位置信号生成部32は、たとえば、マルチプレクサ14内のモジュールである。順序・位置信号生成部32は、レジスタ31に格納された読出しアドレスrADDと各種処理信号PSとを読み出し、これらに基づいて位置信号S4と順序信号S6とを生成する。その詳細については後述する。
【0036】
また、メモリ制御装置は、複数のバンク6_1〜6_4からそれぞれ読み出された要素データ列R1〜R4から位置信号S4に基づいて演算要素データを選択し、選択した演算要素データを順序信号S6が示す格納順序でベクトルレジスタ8に格納するセレクタ部34を有する。セレクタ部34は、たとえば、マルチプレクサ14に含まれる。セレクタ部34は、たとえば、ベクトルレジスタ8の8個の格納位置ごとのセレクタ34_1〜34_8を有する。セレクタ34_1〜34_8には、それぞれ、要素データ列R1〜R4の32個の要素データが入力される。そして、セレクタ34_1〜34_8は、位置信号S4と順序信号S6とに基づいて、32個の要素データから自らが対応する格納位置に格納すべき演算要素データを選択し、ベクトルレジスタ8に格納する。
【0037】
図8は、順序・位置信号生成部32の詳細な動作を説明するための図である。ここでは、演算要素データ「A」、「B」、「C」、「D」、「E」、「F」、「G」、「H」の順に、ベクトルレジスタ8に格納する場合が示される。図8(A)には、バンク6_1〜6_4に分散して8個の演算要素データ「A」〜「H」が格納される例が示される。また、図8(A)には、演算要素データ「A」〜「H」を含む要素データ列R1〜R4の読み出しアドレスが示される。ここでは、図面の右から左へ、かつ、上から下へアドレスが昇順に変化する。バンク6_1〜6_4ごとの読出しアドレスの順序は、読み出される要素データ列R1〜R4に含まれる演算要素データ「A」〜「H」のベクトルレジスタ8における格納順序、つまり、演算パイプライン12_3、12_4による処理順序に対応する。たとえば、アドレス順に示すと、バンク6_4には、アドレス「0x30」に、演算要素データ「A」を含む要素データ列R4が格納される。また、バンク6_1には、アドレス「0x40」に、演算要素データ「B」及び「C」を含む要素データ列R1が格納される。また、バンク6_2には、アドレス「0x50」に、演算要素データ「D」、「E」、及び「F」を含む要素データ列R2が格納される。そして、バンク6_3には、アドレス「0x60」に、演算要素データ「G」及び「H」を含む要素データ列R3が格納される。
【0038】
図8(B)には、アドレス生成部30が生成するバンク6_1〜6_4ごとの読み出しアドレスrADDが示される。たとえば、バンク6_1については、読出しアドレス「0x40」が生成される。また、バンク6_2については、読出しアドレス「0x50」が生成される。また、バンク6_3については、読出しアドレス「0x60」が生成される。そして、バンク6_4については、読出しアドレス「0x30」が生成される。
【0039】
また、図8(B)には、アドレス生成部30が生成する各種処理信号PSが示される。各種処理信号PSは、バンクイネーブル信号BE、要素イネーブル信号EE、バンクオフセット信号BOである。バンクイネーブル信号BE、要素イネーブル信号EE、バンクオフセット信号BOは、読出しアドレスrADDに基づいて生成される。
【0040】
バンクイネーブル信号BEは、バンク6_1〜6_4ごとの読出しアドレスrADDの有効性を示す。バンクイネーブル信号BEは、たとえば1ビットの信号である。読出しアドレスrADDが生成された場合には、バンクイネーブル信号BEは有効性を示す値「1」となる。一方、読出しアドレスrADDが生成されない場合には、バンクイネーブル信号BEは値「0」となる。ここでは、バンク6_1〜6_4のすべてにおいて読出しアドレスrADDが生成されている。よって、バンク6_1〜6_4のすべてについて、読出しアドレスrADDの有効性を示す値「1」を有するバンクイネーブル信号BEが生成される。
【0041】
要素イネーブル信号EEは、要素データ列R1〜R4における選択すべき演算要素データの位置を示す。要素データ列R1〜R4は、それぞれ8個の要素データを含む。よって、要素イネーブル信号は、各要素データ列R1〜R4について、たとえば8ビットの信号である。ここで、図面の右側から左側に列をカウントすると、たとえば、要素データ列R1には、1列目と2列目にそれぞれ演算要素データ「B」、「C」が含まれる。よって要素データ列R1に対応する要素イネーブル信号EEの値は、1列目から8列目まで順に、「1、1、0、0、0、0、0、0」となる。また、要素データ列R2には、2列目から4列目に演算要素データ「D」、「E」、及び「F」が含まれる。よって要素データ列R2に対応する要素イネーブル信号EEの値は、1列目から8列目まで順に、「0、1、1、1、0、0、0、0」となる。また、要素データ列R3には、4列目及び5列目に演算要素データ「G」及び「H」が含まれる。よって要素データ列R3に対応する要素イネーブル信号の値は、1列目から8列目まで順に、「0、0、0、1、1、0、0、0」となる。そして、要素データ列R4には、8列目に演算要素データ「A」が含まれる。よって要素データ列R4に対応する要素イネーブル信号EEの値は、1列目から8列目まで、順に「0、0、0、0、0、0、0、1」となる。
【0042】
バンクオフセット信号BOは、要素データ列R1〜R4に含まれる演算要素データの処理順序に対応する、バンク6_1〜6_4の順序を示す。バンクオフセット信号OSの値は、各バンク6_1〜6_4の読出しアドレスrADDの順序と、要素イネーブル信号EEの積算値から、次のように求められる。
【0043】
まず、バンク6_1〜6_4ごとの読出しアドレスrADDの順序は、小さい方から次のような順序になる。
<1番目>バンク6_4の読出しアドレスrADD(「0x30」)
<2番目>バンク6_1の読出しアドレスrADD(「0x40」)
<3番目>バンク6_2の読出しアドレスrADD(「0x50」)
<4番目>バンク6_3の読出しアドレスrADD(「0x60」)
また、上記順序の各バンクの要素イネーブル信号EEの積算値は、次のようになる。
<1番目>バンク6_4の要素イネーブル信号EEの積算値「1」
<2番目>バンク6_1の要素イネーブル信号EEの積算値「2」
<3番目>バンク6_2の要素イネーブル信号EEの積算値「3」
<4番目>バンク6_3の要素イネーブル信号EEの積算値「2」
そして、各バンクのバンクオフセット信号BOの値は、1つ前の順番のバンクの、バンクオフセット信号BOの値とイネーブル信号EEの積算値の和として求められる。たとえば、次のとおりである。
<1番目>バンク6_4のバンクオフセット信号BO=「0」
<2番目>バンク6_1のバンクオフセット信号BO
=バンク6_4のバンクオフセット信号BO「0」+
バンク6_4の要素イネーブル信号EEの積算値「1」
=「1」
<3番目>バンク6_2のバンクオフセット信号BO
=バンク6_1のバンクオフセット信号BO「1」+
バンク6_1の要素イネーブル信号EEの積算値「2」
=「3」
<4番目>バンク6_3のバンクオフセット信号BO
=バンク6_2のバンクオフセット信号BO「3」+
バンク6_2の要素イネーブル信号EEの積算値「3」
=「6」
図8(C)には、順序・位置信号生成部32が生成する、バンク6_1〜6_4ごとの要素オフセット信号EO、順序信号S6、位置信号S4が示される。
【0044】
要素オフセット信号EOは、要素データ列R1〜R4ごとの、選択すべき演算要素データの順序を示す。要素オフセット信号EOの値は、バンク6_1〜6_4ごとの要素イネーブル信号EEの値を、アドレス順に積算して求められる。具体的には、次のとおりである。
<バンク6_1>
演算要素データ「B」の要素オフセット信号EO
=演算要素データ「B」の要素イネーブル信号EE「1」
演算要素データ「C」の要素オフセット信号EO
=演算要素データ「B」の要素オフセット信号EO「1」
+演算要素データ「C」の要素イネーブル信号EE「1」
=「2」
<バンク6_2>
演算要素データ「D」の要素オフセット信号EO
=演算要素データ「D」の要素イネーブル信号EE「1」
演算要素データ「E」の要素オフセット信号EO
=演算要素データ「D」の要素オフセット信号EO「1」
+演算要素データ「E」の要素イネーブル信号EE「1」
=「2」
演算要素データ「F」の要素オフセット信号EO
=演算要素データ「E」の要素オフセット信号EO「2」
+演算要素データ「F」の要素イネーブル信号EE「1」
=「3」
<バンク6_3>
演算要素データ「G」の要素オフセット信号EO
=演算要素データ「G」の要素イネーブル信号EE「1」
演算要素データ「H」の要素オフセット信号EO
=演算要素データ「G」の要素オフセット信号EO「1」
+演算要素データ「H」の要素イネーブル信号EE「1」
=「2」
<バンク6_4>
演算要素データ「A」の要素オフセット信号EO
=演算要素データ「A」の要素イネーブル信号EE「1」
次に、順序信号S6は、ベクトルレジスタ8における演算要素データの格納位置を示す。順序信号S6の値は、演算要素データが対応するバンクのバンクオフセット信号BOの値と、演算要素データの要素オフセット信号EOの値の和として求められる。具体的には、次のとおりである。
<バンク6_1>
演算要素データ「B」の順序信号S6
=バンク6_1のバンクオフセット信号BO「1」
+演算要素データ「B」の要素オフセット信号EO「1」
=「2」
演算要素データ「C」の順序信号S6
=バンク6_1のバンクオフセット信号BO「1」
+演算要素データ「C」の要素オフセット信号EO「2」
=「3」
<バンク6_2>
演算要素データ「D」の順序信号S6
=バンク6_2のバンクオフセット信号BO「3」
+演算要素データ「D」の要素オフセット信号EO「1」
=「4」
演算要素データ「E」の順序信号S6
=バンク6_2のバンクオフセット信号BO「3」
+演算要素データ「E」の要素オフセット信号EO「2」
=「5」
演算要素データ「F」の順序信号S6
=バンク6_2のバンクオフセット信号BO「3」
+演算要素データ「D」の要素オフセット信号EO「3」
=「6」
<バンク6_3>
演算要素データ「G」の順序信号S6
=バンク6_3のバンクオフセット信号BO「6」
+演算要素データ「D」の要素オフセット信号EO「1」
=「7」
演算要素データ「H」の順序信号S6
=バンク6_2のバンクオフセット信号BO「6」
+演算要素データ「E」の要素オフセット信号EO「2」
=「8」
<バンク6_4>
演算要素データ「A」の順序信号S6
=バンク6_3のバンクオフセット信号BO「0」
+演算要素データ「D」の要素オフセット信号EO「1」
=「1」
ここにおいて、演算要素データ「A」、「B」、「C」、「D」、「E」、「F」、「G」、「H」に、ベクトルレジスタ8に格納される順序「1」、「2」、「3」、「4」、「5」、「6」、「7」、「8」がそれぞれ対応付けられる。
【0045】
位置信号S4は、データ要素列R1〜R4に含まれる32個の要素データにおける、演算要素データ「A」〜「H」の位置を示す。たとえば、32個の要素データが要素データ列R1、R2、R3、R4の順にアドレス順に並べられたとして、「0」〜「31」の値が昇順に割り当てられる。そして、順序信号S6が割り当てられた演算要素データ「A」〜「H」に対し、対応する位置信号S4「1」〜「32」のいずれかが割り当てられる。たとえば、次のとおりである。
<要素データ列R1>
演算要素データ「B」:順序信号「2」、位置信号「0」
演算要素データ「C」:順序信号「3」、位置信号「1」
<要素データ列R2>
演算要素データ「D」:順序信号「4」、位置信号「9」
演算要素データ「E」:順序信号「5」、位置信号「10」
演算要素データ「F」:順序信号「6」、位置信号「11」
<要素データ列R3>
演算要素データ「G」:順序信号「7」、位置信号「19」
演算要素データ「H」:順序信号「8」、位置信号「20」
<要素データ列R4>
演算要素データ「A」:順序信号「1」、位置信号「31」
ここにおいて、演算要素データ「A」、「B」、「C」、「D」、「E」、「F」、「G」、「H」に、ベクトルレジスタ8に格納される順序「1」、「2」、「3」、「4」、「5」、「6」、「7」、「8」と、要素データR1、R2、R3、及びR4における位置とがそれぞれ対応付けられる。
【0046】
次に、図7、図8を参照して、セレクタ部34の動作について説明する。セレクタ部34は、要素データ列R1〜R4から位置信号S4に基づいて演算要素データを選択し、選択した要素データを順序信号S6が示す格納順序でベクトルレジスタ8に格納する。具体的には、次のとおりである。セレクタ34_1〜34_8には、それぞれベクトルレジスタ8の格納順序「1」〜「8」の格納位置に対応する。そして、セレクタ34_1〜34_8は、それぞれ要素データ列R1〜R4の32個の要素データが入力される。そして、セレクタ34_1〜34_8は、位置信号S4と順序信号S6とに基づいて、32個の要素データから自らが対応する格納位置に格納すべき演算要素データを選択し、ベクトルレジスタ8に格納する。たとえば、セレクタ34_1〜34_8が対応する格納順序、順序信号S6の値、位置信号S4の値、及び格納する要素データの対応は、次のとおりである。
セレクタ34_1:格納順序「1」、順序信号「1」、位置信号「31」、演算要素データ「A」
セレクタ34_2:格納順序「2」、順序信号「2」、位置信号「0」、演算要素データ「B」
セレクタ34_3:格納順序「3」、順序信号「3」、位置信号「1」、演算要素データ「C」
セレクタ34_4:格納順序「4」、順序信号「4」、位置信号「9」、演算要素データ「D」
セレクタ34_5:格納順序「5」、順序信号「5」、位置信号「10」、演算要素データ「E」
セレクタ34_6:格納順序「6」、順序信号「6」、位置信号「11」、演算要素データ「F」
セレクタ34_7:格納順序「7」、順序信号「7」、位置信号「19」、演算要素データ「G」
セレクタ34_8:格納順序「8」、順序信号「8」、位置信号「20」、演算要素データ「H」
このようにして、バンク6_1〜6_4から読み出された要素データ列R1〜R4から、演算要素データ「A」〜「H」が選択される。そして、図8(D)に示すように、演算要素データ「A」〜「H」がベクトルレジスタ8に格納順序に従って格納される。
【0047】
本実施形態によれば、バンク6_1〜6_4からは、32個の要素データを含む要素データ列R1〜R4が1回のアクセスで読み出されるので、レイテンシが抑制される。一方で、上述のような方法により、要素データ列R1〜R4の32個の要素データから、ベクトルレジスタ8に格納すべき8個の演算要素データが選択されて、処理順序でベクトルレジスタに格納される。よって、演算パイプライン12_3、12_4では、連続して要素データを処理できるので、良好なスループットを得ることができる。
【0048】
なお、順序・位置信号生成部32は、アドレス生成部30から送られるバンクイネーブル信号BEをセレクタ部34に転送することが可能である。そうすることで、セレクタ部34は、バンクイネーブル信号BEが生成されたバンクから要素データ列が読み出されると、読み出された要素データ列から演算要素データを選択する。その一方、バンクイネーブル信号BEが生成されないバンクからは要素データ列が読み出されないので、要素データ列から演算要素データを選択する動作を実行しないようにする。
【0049】
図9は、読出しアドレスの有効性を示すバンクイネーブル信号BEが生成されない例を示す。図9(A)〜(C)では、図8(A)〜(C)で示した各種信号が示される。
【0050】
この例では、図9(A)に示すように、バンク6_2〜6_4に分散して8個の演算要素データ「A」〜「H」が格納される。たとえば、アドレス順に示すと、バンク6_3には、アドレス「0x60」に、演算要素データ「A」及び「B」を含む要素データ列R3が格納される。また、バンク6_4には、アドレス「0x70」に、演算要素データ「C」、「D」、及び「E」を含む要素データ列R4が格納される。また、バンク6_2には、アドレス「0x90」に、演算要素データ「F」、「G」、及び「H」を含む要素データ列R2が格納される。そして、ここでは、バンク6_1には、演算要素データが格納されない。
【0051】
よって、図9(B)に示すように、アドレス生成部30により、バンク6_3については、読出しアドレス「0x60」が生成される。また、バンク6_4については、読出しアドレス「0x70」が生成される。また、バンク6_2については、読出しアドレス「0x90」が生成される。そして、バンク6_1については、読出しアドレスが生成されない。よって、バンク6_2〜6_4からは要素データ列R2〜R4が読み出され、バンク6_1からは要素データ列R1が読み出されない。
【0052】
ここで、読出しアドレスrADDが生成されるバンク6_2〜4についてのバンクイネーブル信号BEは、有効を示す値「1」を有する。しかし一方で、読出しアドレスrADDが生成されないバンク6_1についてのバンクイネーブル信号BEは、無効を示す値「0」となる。つまり、読出しアドレスrADDの有効性を示すバンクイネーブル信号BEが生成されない。このようなバンクイネーブル信号BEが転送されることにより、セレクタ部34は次のように動作する。なお、図9(B)の要素イネーブル信号EE、バンクオフセット信号BOは、図8(B)で示した方法と同様にして求められ、図9(C)の要素オフセット信号EO、順序信号S6、及び位置信号S4は、図8(C)で示した方法と同様にして求められる。
【0053】
セレクタ部34のセレクタ34_1〜34_8は、それぞれ要素データ列R2〜R4の24個の要素データが入力されたとき、バンクイネーブル信号BEが生成されたバンク6_2〜4に対応する要素データ列R2〜3に対し、要素データを選択する処理を行う。その一方、セレクタ部34のセレクタ34_1〜34_8は、バンクイネーブル信号BEが生成されないバンク6_1に対応する要素データ列R1が入力されないので、要素データ列R1に対して行うはずであった演算要素データを選択する処理を行わない。そうすることで、電力の無駄な消費や処理負荷を軽減することができる。
【0054】
そして、上記の処理の結果、図9(D)に示すように、演算要素データ「A」〜「H」がベクトルレジスタ8に格納順序に従って格納される。
【0055】
[ベクトルレジスタ8から演算要素データを読み出してデータメモリ6に書き込む場合]
図10は、ベクトルレジスタ8から演算要素データを読み出してデータメモリ6に書き込むためのメモリ制御装置の構成を示す。メモリ制御装置は、要素データ列R1〜R4を書き込むためのバンク6_1〜6_4ごとの書込みアドレスwADDを生成するアドレス生成部30を有する。アドレス生成部30は、たとえばロード・ストアパイプライン12_1、12_2内のモジュールである。アドレス生成部30は、命令デコーダ4から入力されるアドレス生成用データ4aに基づいて、書込みアドレスwADDを生成する。アドレス生成部30は、たとえば、シーケンシャルアクセスの場合の書込みアドレスwADDを生成するシーケンシャルアドレス生成部30_1、インダイレクトアクセスの場合の書込みアドレスwADDを生成するインダイレクトアドレス生成部30_2、及びストライドアクセスの場合の書込みアドレスwADDを生成するストライドアドレス生成部30_3を有する。アドレス生成部30が生成したバンク6_1〜6_4ごとの書込みアドレスwADDは、たとえばレジスタ40に一旦格納されてから、データメモリ6のバンク6_1〜6_4にそれぞれ入力される。その一方、アドレス生成部30では、たとえば、シーケンシャルアドレス生成部30_1、インダイレクトアドレス生成部30_2、及びストライドアドレス生成部30_3により、各種処理信号PSが生成される。そして、バンク6_1〜6_4ごとの書込みアドレスwADDと各種処理信号PSは、レジスタ31に格納される。
【0056】
メモリ制御装置は、演算パイプライン12_3、12_4による処理順序でベクトルレジスタ8に格納された、データメモリ6に書き込むべき演算要素データのベクトルレジスタ8における格納順序を示す順序信号S5と、バンク6_1〜6_4にそれぞれ書き込まれる要素データ列R1〜R4に書き込むべき要素データを挿入する位置を示す位置信号S7とを生成する順序・位置信号生成部32を有する。順序・位置信号生成部32は、たとえば、マルチプレクサ14内のモジュールである。順序・位置信号生成部32は、レジスタ31に格納された書込みアドレスwADDと各種処理信号PSとを読み出し、これらに基づいて位置信号S7と順序信号S5とを生成する。その詳細については後述する。
【0057】
また、メモリ制御装置は、バンク6_1〜6_4に書き込まれる要素データ列R1〜R4における位置信号S7が示す位置に、順序信号S5が示す順序で書き込むべき要素データを挿入するセレクタ部35を有する。セレクタ部35は、たとえば、マルチプレクサ14に含まれる。セレクタ部35は、たとえば、要素データ列R1〜R4に含まれる32個の要素データごとのセレクタ35_1〜35_32を有する。セレクタ35_1〜35_32には、それぞれ、ベクトルレジスタ8から読み出される8個の演算要素データ8aが入力される。演算要素データ8aは、たとえばレジスタ44に一旦格納されてから、セレクタ35_1〜35_32に入力される。そして、セレクタ35_1〜35_32は、位置信号S7と順序信号S5とに基づいて、8個の演算要素データ8aから自らが対応する位置に挿入すべき演算要素データを選択し、要素データ列R1〜R4に挿入する。
【0058】
さらに、セレクタ部35は、たとえば命令デコーダ4からデータマスク信号DMが入力される。データマスク信号DMは、演算要素データのデータメモリ6への書込みの許可・不許可を示す。データマスク信号DMは、たとえば8ビットの信号である。各ビットは、8個の要素データ8aの書込み許可・不許可を示す。データマスク信号DMは、たとえばレジスタ42に一旦格納されてから、セレクタ部35に入力される。
【0059】
セレクタ部35は、データマスク信号DMに基づいて、32ビットのデータマスク信号DM2を生成する。データマスク信号DM2は、バンク6_1〜6_4に、要素データ列R1〜R4の書き込みの許可・不許可を指示するための信号である。各ビットは、要素データ列R1〜R4に含まれる32個の要素データに対応する。セレクタ部35は、データマスク信号DM2を生成する32個のセレクタ36_1〜36_32を有する。セレクタ36_1〜36_32は、それぞれ要素データ列R1〜R4に含まれる32個の要素データに対応する。セレクタ36_1〜36_32には、それぞれ8ビットのデータマスク信号DMが入力される。そして、セレクタ36_1〜36_32は、位置信号S7と順序信号S5とに基づいて、自らが対応する位置への要素データの挿入許可・不許可を示す値(「1」または「0」)を生成する。このようにして8ビットのデータマスク信号DM2が生成される。データマスク信号DM2は、バンク6_1〜6_4に入力される。
【0060】
データメモリ6では、バンク6_1〜6_4が、それぞれ要素データ列R1〜R4を書込みアドレスwADDに書き込む。その際、データマスク信号DM2により許可された要素データのみが書き込まれる。データマスク信号DM2を用いることで、データメモリ6においてデータが破壊されたり不整合が生じたりすることを防止できる。
【0061】
図11は、順序・位置所信号生成部32の詳細な動作を説明するための図である。図11(A)には、アドレス生成部30が生成するバンク6_1〜6_4ごとの書込みアドレスwADDが示される。たとえば、バンク6_1については、書込みアドレス「0x40」が生成される。また、バンク6_2については、書込みアドレス「0x50」が生成される。また、バンク6_3については、書込みアドレス「0x60」が生成される。そして、バンク6_4については、書込みアドレス「0x30」が生成される。
【0062】
上記書込みアドレスwADDは、バンク6_1〜6_4に、図11(E)に示すように要素データ列R1〜R4を書き込むための書込みアドレスwADDである。要素データ列R1〜R4には、8個の演算要素データ「A」、「B」、「C」、「D」、「E」、「F」、「G」、「H」が含まれる。ここでは、図面の右から左へ、かつ、上から下へアドレスが昇順に変化する。バンク6_1〜6_4に書き込まれる演算要素データ「A」〜「H」のアドレス順は、ベクトルレジスタ8における格納順、つまり、演算パイプライン12_3、12_4による処理順序に対応する。
【0063】
また、図11(A)には、アドレス生成部30が生成する各種処理信号PSが示される。各種処理信号PSは、バンクイネーブル信号BE、要素イネーブル信号EE、バンクオフセット信号BOである。バンクイネーブル信号BE、要素イネーブル信号EE、バンクオフセット信号BOは、書込みアドレスwADDに基づいて生成される。
【0064】
バンクイネーブル信号BEは、バンク6_1〜6_4ごとの書込みアドレスwADDの有効性を示す。バンクイネーブル信号BEは、たとえば1ビットの信号である。書込みアドレスwADDが生成された場合には、バンクイネーブル信号BEは有効性を示す値「1」となる。一方、書込みアドレスrADDが生成されない場合には、バンクイネーブル信号BEは値「0」となる。ここでは、バンク6_1〜6_4のすべてにおいて書込みアドレスwADDが生成されている。よって、バンク6_1〜6_4のすべてについて、書込みアドレスwADDの有効性を示す値「1」を有するバンクイネーブル信号BEが生成される。
【0065】
要素イネーブル信号EEは、要素データ列R1〜R4に挿入すべき演算要素データの位置を示す。たとえば、図11(D)に示すように、要素データ列R1には、1列目と2列目にそれぞれ演算要素データ「B」、「C」が挿入される。よって、要素イネーブル信号EEの値は、1列目から8列目まで順に、「1、1、0、0、0、0、0、0」となる。また、要素データ列R2には、2列目から4列目に演算要素データ「D」、「E」、及び「F」が挿入される。よって要素データ列R2に対応する要素イネーブル信号EEの値は、1列目から8列目まで順に、「0、1、1、1、0、0、0、0」となる。また、要素データ列R3には、4列目及び5列目に演算要素データ「G」及び「H」が挿入される。よって要素データ列R3に対応する要素イネーブル信号の値は、1列目から8列目まで順に、「0、0、0、1、1、0、0、0」となる。そして、要素データ列R4には、8列目に演算要素データ「A」が挿入される。よって要素データ列R4に対応する要素イネーブル信号EEの値は、1列目から8列目まで、順に「0、0、0、0、0、0、0、1」となる。
【0066】
バンクオフセット信号BOは、要素データ列R1〜R4に挿入すべき演算要素データの順序に対応する、バンク6_1〜6_4の順序を示す。バンクオフセット信号BOの値は、各バンク6_1〜6_4の読出しアドレスwADDの順序と、要素イネーブル信号EEの積算値から求められる。具体的な方法は、図8(B)で示したとおりである。
【0067】
図11(B)には、順序・位置信号生成部32が生成する、バンク6_1〜6_4ごとの要素オフセット信号EO、順序信号S5、位置信号S7が示される。要素オフセット信号EOは、要素データ列R1〜R4ごとの、挿入すべき演算要素データの順序を示す。要素オフセット信号EOの値は、バンク6_1〜6_4ごとの要素イネーブル信号EEの値を、アドレス順に積算して求められる。具体的な方法は、図8(C)に示したとおりである。
【0068】
順序信号S5は、ベクトルレジスタ8における演算要素データの格納位置を示す。ベクトルレジスタ8における格納順序「1」〜「8」と演算要素データ「A」〜「H」の対応が、図11(C)に示される。なお、図11(C)には、各演算要素データの書込みの許可・不許可を規定するデータマスク信号DMが示される。順序信号S5の値は、演算要素データが対応するバンクのバンクオフセット信号BOの値と、演算要素データの要素オフセット信号EOの値の和として求められる。具体的な方法は、図8(C)で示したとおりである。
【0069】
ここにおいて、演算要素データ「A」、「B」、「C」、「D」、「E」、「F」、「G」、「H」に、ベクトルレジスタ8に格納された順序「1」、「2」、「3」、「4」、「5」、「6」、「7」、「8」がそれぞれ対応付けられる。
【0070】
位置信号S7は、データ要素列R1〜R4の32個の要素データにおける、演算要素データ「A」〜「H」を挿入すべき挿入位置を示す。たとえば、32個の要素データが要素データ列R1、R2、R3、R4の順にアドレス順に並べられ、「0」〜「31」の値が昇順に割り当てられる。そして、順序信号S5が割り当てられた演算要素データ「A」〜「H」に対し、対応する位置信号「1」〜「32」のいずれかが割り当てられる。たとえば、次のとおりである。
<要素データ列R1>
挿入すべき演算要素データ「B」:順序信号「2」、位置信号「0」
挿入すべき演算要素データ「C」:順序信号「3」、位置信号「1」
<要素データ列R2>
挿入すべき演算要素データ「D」:順序信号「4」、位置信号「9」
挿入すべき演算要素データ「E」:順序信号「5」、位置信号「10」
挿入すべき演算要素データ「F」:順序信号「6」、位置信号「11」
<要素データ列R3>
挿入すべき演算要素データ「G」:順序信号「7」、位置信号「19」
挿入すべき演算要素データ「H」:順序信号「8」、位置信号「20」
<要素データ列R4>
挿入すべき演算要素データ「A」:順序信号「1」、位置信号「31」
ここにおいて、演算要素データ「A」、「B」、「C」、「D」、「E」、「F」、「G」、「H」と、ベクトルレジスタ8に格納された順序「1」、「2」、「3」、「4」、「5」、「6」、「7」、「8」と、要素データR1、R2、R3、及びR4における挿入位置とがそれぞれ対応付けられる。
【0071】
次に、図10、図11を参照して、セレクタ部35の動作について説明する。セレクタ部35は、複数のバンク6_1〜6_4に書き込まれる要素データ列R1〜R4における位置信号S5が示す位置に、順序信号S5が示す順序で書き込むべき要素データを挿入する。具体的には、次のとおりである。
【0072】
セレクタ35_1〜35_32は、それぞれ要素データ列R1〜R4における32個の要素データの位置「0」〜「31」に対応する。セレクタ35_1〜35_32は、ベクトルレジスタ8から読み出された8個の演算要素データ8a、つまり「A」〜「H」が入力される。そして、セレクタ35_1〜35_32は、位置信号S7と順序信号S5とに基づいて、8個の演算要素データ8aから自らが対応する挿入位置に挿入すべき演算要素データを選択し、要素データ列R1〜R4に挿入する。たとえば、セレクタ35_1〜35_32のうち、演算要素データ「A」〜「H」を挿入するセレクタの順序信号S5の値、位置信号S7の値、及び挿入する要素データの対応は、次のとおりである。
<セレクタ35_2> 順序信号「2」、位置信号「0」、演算要素データ「B」
<セレクタ35_3> 順序信号「3」、位置信号「1」、演算要素データ「C」
<セレクタ35_9> 順序信号「4」、位置信号「9」、演算要素データ「D」
<セレクタ35_10> 順序信号「5」、位置信号「10」、演算要素データ「E」
<セレクタ35_11> 順序信号「6」、位置信号「11」、演算要素データ「F」
<セレクタ35_19> 順序信号「7」、位置信号「19」、演算要素データ「G」
<セレクタ35_20> 順序信号「8」、位置信号「20」、演算要素データ「H」
<セレクタ35_31> 順序信号「1」、位置信号「31」、演算要素データ「A」
なお、上記以外のセレクタ35_1、35_4〜8、35_12〜18、35_21〜30は、順序信号「0」が対応し、したがって挿入すべき演算要素データが対応しないので、挿入を行わない。このようにして、ベクトルレジスタ8から読み出された演算要素データ「A」〜「H」が、要素データ列R1〜R4に挿入される。
【0073】
図11(D)には、演算要素データ「A」〜「H」が挿入されたデータ列R1〜R4が示される。また、図11(D)には、図11(C)のデータマスク信号DMから生成されたデータマスク信号DM2が示される。データマスク信号DM2は、32ビットの信号である。書込みが許可されるデータ要素に対応するビットの値が「0」、書込みが許可されないデータ要素に対応するビットの値が「1」である。ここでは、データ要素「B」、「D」、「F」の書込みが不許可の場合が示される。
【0074】
上記のようにして演算要素データ「A」〜「H」が挿入された要素データ列R1〜R4が、図11(E)に示すように、バンク6_1〜6_4に1回のアクセスで書き込まれる。よって、レイテンシが抑制される。また、その際、要素データの書込みを許可・不許可できるので、データメモリ6のデータを保護できる。なお、図11(E)では、書込み不許可の演算要素データは「×」印が付されている。また、一方で、演算パイプライン12_3、12_4は、連続して要素データを処理して演算結果を出力できるので、パイプラインストールを低減できる。よって、良好なスループットを得ることができる。
【0075】
なお、順序・位置信号生成部32は、アドレス生成部30から送られるバンクイネーブル信号BEをセレクタ部35に転送することが可能である。セレクタ部35は、バンクイネーブル信号BEが生成されたバンクに書き込まれる要素データ列に、演算要素データを挿入する。その一方、セレクタ部35は、バンクイネーブル信号BEが生成されないバンクには要素データ列が書き込まれないので、演算要素データを挿入する処理を行わないようにする。
【0076】
図12は、書込みアドレスの有効性を示すバンクイネーブル信号BEが生成されない例を示す。図12(A)〜(E)では、図11(A)〜(E)で示した各種信号が示される。
【0077】
この例では、図12(E)に示すように、バンク6_2〜4に分散して8個の演算要素データ「A」〜「H」が書き込まれる。たとえば、アドレス順に示すと、バンク6_3には、アドレス「0x60」に、演算要素データ「A」及び「B」を含む要素データ列R3が書き込まれる。また、バンク6_4には、アドレス「0x70」に、演算要素データ「C」、「D」、及び「E」を含む要素データ列R4が書き込まれる。また、また、バンク6_2には、アドレス「0x90」に、演算要素データ「F」、「G」、及び「H」を含む要素データ列R2が書き込まれる。そして、バンク6_1には、要素データが書き込まれない。
【0078】
よって、図12(A)に示すように、アドレス生成部30により、バンク6_2、6_3、及び6_4については、それぞれ書込みアドレス「0x90」、「0x60」、及び「0x70」が生成される。そして、バンク6_1については、書込みアドレスが生成されない。すると、書込みアドレスwADDが生成されるバンク6_2〜4についてのバンクイネーブル信号BEは、有効を示す値「1」を有する。しかし一方で、書込みアドレスwADDが生成されないバンク6_1についてのバンクイネーブル信号BEは、無効を示す値「0」となる。つまり、書込みアドレスwADDの有効性を示すバンクイネーブル信号BEが生成されない。
【0079】
このようなバンクイネーブル信号BEが転送されることにより、セレクタ部35は次のように動作する。なお、図12(A)の要素イネーブル信号EE、バンクオフセット信号BOは、図11(A)で示した方法と同様にして求められ、図12(B)の要素オフセット信号EO、順序信号S5、及び位置信号S7は、図11(B)で示した方法と同様にして求められる。
【0080】
セレクタ部35のセレクタ35_1〜35_32は、それぞれ8個の演算要素データ「A」〜「H」が入力されたとき、バンクイネーブル信号BEが生成されたバンク6_2〜4に対応する要素データ列R2〜3に対しては、図12(B)に示す順序信号S5と位置信号S7とに基づいて要素データを挿入する処理を行う。しかしその一方、セレクタ35_1〜32は、バンクイネーブル信号BEが生成されないバンク6_1に対応する要素データ列R1に対しては要素データを挿入する処理を行わない。そうすることで、電力の無駄な消費や処理負荷を軽減することができる。
【0081】
上記の結果、図12(C)で示すようにベクトルレジスタ8に格納された演算要素データが、図12(E)で示すようにデータメモリ6の各バンクに書き込まれる。また、その際、図12(C)で示すマスクデータ信号DMにより演算要素データの書き込みが許可または不許可される。
【0082】
上述したベクトルプロセッサ1は、たとえば、携帯通信端末に搭載され、ベースバンド信号を要素データとしてFFT(Fast Fourier Transforms)処理などを行う信号処理装置に適用される。あるいは、これに限定されず、たとえば画素データを要素データとして画像処理を行う画像処理装置などにも適用することができる。本実施形態によれば、データメモリの不連続なアドレスにアクセスして要素データを読み書きする場合であっても、最小限の回路構成により良好なスループットを得ることができる。
【0083】
以上の実施の形態をまとめると、次の付記のとおりである。
【0084】
(付記1)
読出しアドレスの入力に応答して複数の要素データを有する要素データ列が読み出される複数のバンクを有するメモリから、前記要素データ列を読み出すためのバンクごとの前記読出しアドレスを生成する第1の生成部と、
前記要素データ列における選択すべき要素データの位置を示す位置信号と、前記選択すべき要素データをレジスタに格納する格納順序を示す順序信号とを生成する第2の生成部と、
前記複数のバンクからそれぞれ読み出された前記要素データ列から前記位置信号に基づいて前記選択すべき要素データを選択し、当該選択した要素データを前記順序信号が示す格納順序で前記レジスタに格納するセレクタ部とを有し、
前記レジスタに格納された要素データは、前記格納順序でベクトルプロセッサに処理される、メモリ制御装置。
【0085】
(付記2)
付記1において、
前記読出しアドレスの有効性を示すイネーブル信号をさらに生成し、
前記セレクタ部は、前記イネーブル信号が生成されたバンクから読み出される前記要素データ列から前記選択すべき要素データを選択し、前記イネーブル信号が生成されないバンクから読み出される前記要素データ列から前記選択すべき要素データを選択しないメモリ制御装置。
【0086】
(付記3)
付記1または2において、
前記バンクごとの読出しアドレスの順序は、当該読出しアドレスにより読み出される前記要素データ列に含まれる前記選択すべき要素データの前記格納順に対応し、
前記第2の生成部は、前記バンクごとの読出しアドレスに基づいて生成される、前記複数のバンクから読み出される要素データ列の順序を示す第1のオフセット信号と、前記複数のバンクから読み出される要素データ列ごとの前記選択すべき要素データの順序を示す第2のオフセット信号とに基づいて前記順序信号を生成するメモリ制御装置。
【0087】
(付記4)
複数の要素データを有する要素データ列が、入力された書込みアドレスに書き込まれる複数のバンクを有するメモリに、前記要素データ列を書き込むためのバンクごとの書込みアドレスを生成する第1の生成部と、
ベクトルプロセッサによる処理順序でレジスタに格納された、前記メモリに書き込むべき要素データの当該レジスタにおける格納順序を示す順序信号と、前記複数のバンクにそれぞれ書き込まれる要素データ列に前記書き込むべき要素データを挿入する位置を示す位置信号とを生成する第2の生成部と、
前記複数のバンクに書き込まれる要素データ列における前記位置信号が示す位置に、前記順序信号が示す順序で前記書き込むべき要素データを挿入するセレクタ部とを有し、
前記書き込むべき要素データ列が格納された要素データ列が、前記バンクごとの書込みアドレスに書き込まれる、メモリ制御装置。
【0088】
(付記5)
付記4において、
前記第1の生成部は、前記書込みアドレスの有効性を示すイネーブル信号をさらに生成し、
前記セレクタ部は、前記イネーブル信号が生成されたバンクに書き込まれる前記要素データ列に前記書き込むべき要素データを挿入し、前記イネーブル信号が生成されないバンクに書き込まれる前記要素データ列に前記書き込むべき要素データを挿入しないメモリ制御装置。
【0089】
(付記6)
付記4または5において、
前記セレクタ部は、前記書き込むべき要素データの書込みの許可・不許可を示すマスク信号に基づいて、前記書込みが許可された前記書き込むべき要素データを前記複数のバンクに書き込まれる要素データ列に挿入し、前記書込みが不許可の前記書込むべき要素データを前記複数のバンクに書き込まれる要素データ列に挿入しない、メモリ制御装置。
【0090】
(付記7)
付記4乃至6のいずれかにおいて、
前記バンクごとの書込みアドレスの順序は、当該書込みアドレスに書き込まれる前記要素データ列に含まれる前記書き込むべき要素データの前記格納順に対応し、
前記第2の生成部は、前記バンクごとの書込みアドレスに基づいて生成される、前記複数のバンクに書き込まれる要素データ列の順序を示す第1のオフセット信号と、前記複数のバンクに書き込まれる要素データ列ごとの前記書き込むべき要素データの順序を示す第2のオフセット信号とに基づいて前記順序信号を生成する、メモリ制御装置。
【0091】
(付記8)
読出しアドレスの入力に応答して複数の要素データを有する要素データ列が読み出される複数のバンクを有するメモリから、前記要素データ列を読み出すためのバンクごとの前記読出しアドレスを生成し、
前記要素データ列における選択すべき要素データの位置を示す位置信号と、前記選択すべき要素データをレジスタに格納する格納順序を示す順序信号とを生成し、
前記複数のバンクからそれぞれ読み出された前記要素データ列から前記位置信号に基づいて前記選択すべき要素データを選択し、当該選択した要素データを前記順序信号が示す格納順序で前記レジスタに格納し、
前記レジスタに格納された要素データは、前記格納順序に対応する単位でベクトルプロセッサに処理される、
メモリ制御方法。
【0092】
(付記9)
複数の要素データを有する要素データ列が、入力された書込みアドレスに書き込まれる複数のバンクを有するメモリに、前記要素データ列を書き込むためのバンクごとの書込みアドレスを生成し、
ベクトルプロセッサによる処理単位に対応する順序でレジスタに格納された、前記メモリに書き込むべき要素データの当該レジスタにおける格納理順序を示す順序信号と、前記複数のバンクにそれぞれ書き込まれる要素データ列に前記書き込むべき要素データを挿入する位置を示す位置信号とを生成し、
前記複数のバンクに書き込まれる要素データ列における前記位置信号が示す位置に、前記順序信号が示す順序で前記書き込むべき要素データを挿入し、
前記書き込むべき要素データ列が格納された要素データ列が、前記バンクごとの書込みアドレスに書き込まれる、
メモリ制御方法。
【符号の説明】
【0093】
1:ベクトルプロセッサ、 6:データメモリ、 6_1〜6_4:バンク、
8:ベクトルレジスタ、 12:ベクトルパイプライン、 30:アドレス生成部、
32:順序・位置信号生成部、 34、35:セレクタ部
【技術分野】
【0001】
本発明は、メモリに対するデータの読み書きを制御するメモリ制御装置等に関する。
【背景技術】
【0002】
配列をなす大量の要素データに対し一定の演算を繰り返すベクトル処理において、ベクトルプロセッサが用いられる(たとえば、特許文献1)。ベクトルプロセッサによれば、一命令により配列の要素データを連続的に処理することで、高い演算スループットを得ることができる。ベクトルプロセッサは、たとえば、ロード・ストア用、演算用のパイプラインを有する。ロード・ストアパイプラインは、要素データをデータメモリから読み出して、演算パイプラインによる処理順序でレジスタ(以下、ベクトルレジスタという)に格納する。演算パイプラインは、演算命令のフェッチ、デコードを一回的に行い、ベクトルレジスタから要素データを順次連続して読み出し、算術演算などの演算を実行する。そして、演算パイプラインは、演算結果を示す要素データを処理順序でベクトルレジスタに格納する。そして、ロード・ストアパイプラインは、演算結果を示す要素データをレジスタから読み出し、処理順序でデータメモリに格納する。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】米国特許第5809552号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
たとえばDRAM(Dynamic Random Access Memory)などの大容量のデータメモリにおいて、入力用の要素データが不連続なアドレスに格納されている場合がある。あるいは、演算結果を示す要素データを、データメモリの不連続なアドレスに格納する場合がある。すると、ロード・ストアパイプラインが要素データをデータメモリからベクトルレジスタに読み出すとき、またはベクトルレジスタからデータメモリに書き込むときに、広範なメモリ領域へのアクセスが発生する。このことはレイテンシを増大させ、スループットを圧迫する要因となる。また、たとえば、データメモリとベクトルレジスタの間にSRAM(Static Random Access Memory)などの高速のキャッシュメモリを設けてパイプライン化し、これによりレイテンシを緩和しようとした場合、回路規模の増大や高コスト化を招くおそれがある。
【0005】
本発明の目的は、データメモリの不連続なアドレスにアクセスして要素データを読み書きする場合であっても、最小限の回路構成により良好なスループットを得ることができるメモリ制御装置、及びメモリ制御方法を提供することにある。
【課題を解決するための手段】
【0006】
上記の目的を達成するために、第1の側面におけるメモリ制御装置は、読出しアドレスの入力に応答して複数の要素データを有する要素データ列が読み出される複数のバンクを有するメモリから、前記要素データ列を読み出すためのバンクごとの前記読出しアドレスを生成する第1の生成部と、前記要素データ列における選択すべき要素データの位置を示す位置信号と、前記選択すべき要素データをレジスタに格納する格納順序を示す順序信号とを生成する第2の生成部と、前記複数のバンクからそれぞれ読み出された前記要素データ列から前記位置信号に基づいて前記選択すべき要素データを選択し、当該選択した要素データを前記順序信号が示す格納順序で前記レジスタに格納するセレクタ部とを有し、前記レジスタに格納された要素データは、前記格納順序でベクトルプロセッサに処理される。
【0007】
また、第2の側面におけるメモリ制御装置は、複数の要素データを有する要素データ列が、入力された書込みアドレスに書き込まれる複数のバンクを有するメモリに、前記要素データ列を書き込むためのバンクごとの書込みアドレスを生成する第1の生成部と、ベクトルプロセッサによる処理順序でレジスタに格納された、前記メモリに書き込むべき要素データの当該レジスタにおける格納順序を示す順序信号と、前記複数のバンクにそれぞれ書き込まれる要素データ列に前記書き込むべき要素データを挿入する位置を示す位置信号とを生成する第2の生成部と、前記複数のバンクに書き込まれる要素データ列における前記位置信号が示す位置に、前記順序信号が示す順序で前記書き込むべき要素データを挿入するセレクタ部とを有し、前記書き込むべき要素データ列が格納された要素データ列が、前記バンクごとの書込みアドレスに書き込まれる。
【発明の効果】
【0008】
以下で説明する実施形態によれば、データメモリの不連続なアドレスにアクセスして要素データを読み書きする場合であっても、最小限の回路構成により良好なスループットを得ることができる。
【図面の簡単な説明】
【0009】
【図1】本実施形態が適用されるベクトルプロセッサの構成を説明する図である。
【図2】ベクトルパイプライン12_1〜4の処理シーケンスを説明する図である。
【図3】演算パイプライン12_3、12_4の動作について説明する図である。
【図4】要素データの転送の態様を模式的に示す図である。
【図5】データメモリ6における要素データの読み書きについて説明する図である。
【図6】ベクトルレジスタ8について説明する図である。
【図7】メモリ制御装置の構成を示す図である。
【図8】順序・位置信号生成部32の詳細な動作を説明するための図である。
【図9】バンクイネーブル信号BEが生成されない例を示す図である。
【図10】メモリ制御装置の構成を示す図である。
【図11】順序・位置所信号生成部32の詳細な動作を説明するための図である。
【図12】バンクイネーブル信号BEが生成されない例を示す図である。
【発明を実施するための形態】
【0010】
以下、図面にしたがって実施の形態について説明する。但し、適用される技術的範囲はこれらの実施の形態に限定されず、特許請求の範囲に記載された事項とその均等物まで及ぶものである。
【0011】
図1は、本実施形態が適用されるベクトルプロセッサの構成を説明する図である。
【0012】
ベクトルプロセッサ1は、命令メモリ2に格納された命令に従って、ベクトルパイプライン12がデータメモリ6に格納される要素データを読み出して演算を行い、演算結果を示す要素データをデータメモリ6に書き込む。ベクトルプロセッサ1は、命令メモリ2、ベクトルパイプライン12、データメモリ6のほかに、命令デコーダ4、ベクトルレジスタ8、スカラレジスタ10、及びマルチプレクサ14を有する。ベクトルプロセッサ1は、たとえば、信号処理用LSI(Large Scale Integrated circuit)である。
【0013】
命令メモリ2は、ベクトルパイプライン12に対する制御命令や演算命令を格納する。命令メモリ2は、たとえばSRAMである。命令デコーダ4は、命令メモリ2から命令を読み出してデコードし、ベクトルパイプライン12に入力する。
【0014】
ベクトルパイプライン12は、ロード・ストア処理用のロード・ストアパイプライン12_1、12_2と、各種演算用の演算パイプライン12_3、12_4を有する。ロード・ストアパイプライン12_1、12_2と、演算パイプライン12_3、12_4は、それぞれ入力される制御命令や演算命令に従って動作する。ロード・ストアパイプライン12_1、12_2は、データメモリ6にアクセスして、データメモリ6とベクトルレジスタ8の間で要素データの転送を行う。このとき、ロード・ストアパイプライン12_1、12_2は、マルチプレクサ14を制御して、転送される要素データの選別を行う。演算パイプライン12_3、12_4は、ベクトルレジスタ8に格納された要素データを読み出し、加減算、乗算といった算術演算や、論理演算などの演算を実行する。演算パイプライン12_3、12_4は、たとえば、それぞれ一または複数の演算器を有する。演算パイプライン12_3、12_4に含まれる演算器は、一命令で、配列をなす要素データに対し連続して演算を行う。
【0015】
データメモリ6は、配列をなす要素データを格納する。データメモリ6は、たとえば、SRAMである。要素データは、演算パイプライン12_3、12_4による演算用のデータである。また、要素データは、演算パイプライン12_3、12_4による演算結果を示すデータである。データメモリ6は、複数のバンク6_1、6_2、6_3、及び6_4を有する。バンク6_1〜6_4は、それぞれデータ読み書き用のアクセスポートを有する。バンク6_1〜6_4は、インターリーブ方式によりそれぞれのアドレスにアクセスされる。
【0016】
ベクトルレジスタ8は、データメモリ6から読み出されて演算パイプライン12_3、12_4に入力される要素データを格納する。また、ベクトルレジスタ8は、演算パイプライン12_3、12_4から出力されてデータメモリ6に書き込まれる要素データを格納する。なお、スカラレジスタ8には、ベクトルパイプライン12に入出力される、ベクトル処理以外の各種データが格納される。
【0017】
図2は、ベクトルパイプライン12_1〜4の処理シーケンスを説明する図である。図2(A)はロード・ストアパイプライン12_1、12_2の処理シーケンスを示し、図2(B)は演算パイプライン12_3、12_4の処理シーケンスを示す。図2(A)、(B)において、縦軸は処理ステージを示し、横軸は時間(処理サイクル)を示す。ここでは、64個の要素データを順次処理する場合が示される。各マス目の中の数字は、処理される要素データの配列番号(0〜63)を示す。
【0018】
まず、図2(A)に示すように、ロード・ストアパイプライン12_1、12_2は、命令のフェッチ「fetch」、命令のデコード「decode」、レジスタからの命令読み出し「reg.read」、命令の実行「execute」、メモリアクセス「mem.access」、及び実行結果のレジスタ書込み「writeback」の6ステージを順次、並行して実行する。各ステージは、それぞれ1処理サイクルで実行される。このとき、「fetch」と「decode」は、一回的に実行される。そして、「execute」〜「writeback」の各ステージでは、1処理サイクルで、8個の要素データが連続して処理される。このようなパイプライン処理により、64個の要素データに対する6ステージの処理が、13処理サイクルで実行される。
【0019】
また、図2(B)に示すように、演算パイプライン12_3、12_4は、「fetch」、「decode」、「reg.read」、「execute」、及び「writeback」の5ステージを順次、並行して実行する。このとき、「fetch」と「decode」は、一回的に実行される。そして、「execute」〜「writeback」の各ステージでは、1処理サイクルで、8個の要素データが連続して処理される。このようなパイプライン処理により、64個の要素データに対する5ステージの処理が、12処理サイクルで実行される。
【0020】
図3は、演算パイプライン12_3、12_4の命令の実行(「execute」)ステージでの動作について説明する図である。図3(A)は、演算パイプライン12_3、12_4が、それぞれ、たとえば1つの演算器30を有する場合を示す。演算器30は、たとえば16ビット演算器である。ここでは、演算器30が、8組の要素データを配列番号順に処理する例が示される。各要素データは、たとえば16ビット長のデータである。演算器30は、1処理サイクルで8組の要素データを処理する。演算器30は、たとえば配列番号をiとして、配列番号i=0〜7の要素データIn_1[i]、In_2[i]に対する算術演算を配列番号iの順序で連続して行い、それぞれの演算結果を示す要素データOut[i]を出力する。
【0021】
図3(B)は、演算パイプライン12_3、12_4のそれぞれが、たとえば8個の演算器30_1〜8を有する場合を示す。演算器30_1〜8は、たとえば、それぞれ16ビット演算器である。ここでは、演算器30_1〜8が、8組の16ビット長の要素データを並行して処理する例が示される。演算器30_1〜8は、たとえば、1回目の演算実行時に、それぞれ配列番号i=0〜7の要素データIn_1[i]、In_2[i]の演算を行い、演算結果を示す要素データOut[i]を出力する。次いで、2回目の演算実行時に、演算器30_1〜8は、それぞれ配列番号i=8〜15の要素データを同様に処理する。次いで3回目の演算実行時に、演算器30_1〜8は、それぞれ配列番号i=16〜23の要素データを同様にして処理する。このようにして、演算実行ごとに8個の要素データが処理される。そして、8回目の演算実行時には、演算器30_1〜8は、それぞれ配列番号i=56〜63の要素データを同様にして処理する。こうして、演算器30_1〜8は、1処理サイクルで8組の要素データの演算を8回連続して行い、64組の要素データを処理する。
【0022】
上述のように、演算パイプライン12_3、12_4は、演算命令のフェッチとデコードを一回的に行い、要素データを順次連続して処理する。そうすることで、命令のフェッチやデコードの時間を節減して高いスループットを得る。また、演算パイプライン12_3、12_4は、複数の演算器を備えることで、その並列動作によりさらに高いスループットを可能にする。
【0023】
一方で、ロード・ストアパイプライン12_1、12_2は、データメモリ6とベクトルレジスタ8との要素データの転送を行う。図4(A)〜(C)は、要素データの転送の態様を模式的に示す。図4(A)〜(C)において、データメモリ6とベクトルレジスタ8の各マス目は、それぞれ1個の要素データが格納されるアドレスを示す。また、各マス目の中の符号は、要素データを示す。
【0024】
図4(A)は、データメモリ6の連続したアドレスに対し要素データの読み書きが行われる場合を示す。かかる場合を、シーケンシャルアクセスという。シーケンシャルアクセスでは、ロード・ストアパイプライン12_1、12_2は、データメモリ6の連続したアドレスからたとえば要素データ「A1」〜「A8」、「B1」〜「B8」を読み出して、ベクトルレジスタ8に演算パイプライン12_3、12_4の処理順序で格納する。また、ロード・ストアパイプライン12_1、12_2は、要素データ「C1」〜「C8」をベクトルレジスタ8から読み出して、データメモリ6の連続したアドレスに書き込む。
【0025】
図4(B)は、データメモリ6における間欠的なアドレスに対し要素データの読み書きが行われる場合を示す。かかる場合を、ストライドアクセスという。ストライドアクセスは、たとえば、所定の間隔で並んだ要素データを抽出して処理する場合に行われる。たとえば、偶数の配列番号の要素データのみの処理を行う場合や、所定間隔ごとの配列番号の要素データのみの処理を行う場合などである。ストライドアクセスでは、ロード・ストアパイプライン12_1、12_2は、データメモリ6の間欠的なアドレスから、たとえば要素データ「A1」〜「A8」、「B1」〜「B8」を読み出して、ベクトルレジスタ8に処理順序で格納する。また、ロード・ストアパイプライン12_1、12_2は、要素データ「C1」〜「C8」をベクトルレジスタ8から読み出して、データメモリ6の間欠的なアドレスに書き込む。
【0026】
図4(C)は、データメモリ6における離散的なアドレスに対し要素データの読み書きが行われる場合を示す。かかる場合を、インダイレクトアクセスという。インダイレクトアクセスは、たとえば点在する要素データに対し処理を行う場合に実行される。インダイレクトアドレスでは、ロード・ストアパイプライン12_1、12_2は、データメモリ6の離散したアドレスから、たとえば要素データ「A1」〜「A8」、「B1」〜「B8」を読み出して、ベクトルレジスタ8に処理順序で格納する。また、ロード・ストアパイプライン12_1、12_2は、要素データ「C1」〜「C8」をベクトルレジスタ8から読み出して、データメモリ6の離散的なアドレスに書き込む。
【0027】
上記の態様において、シーケンシャルアクセス、ストライドアクセス、インダイレクトアクセスの順で、アクセスすべきアドレスが広範になる。それに伴ってアクセス回数が増加し、メモリレイテンシが増大する蓋然性が高くなる。そこで、本実施形態では、次のようにして、メモリレイテンシを抑制し、良好なスループットを得る。
【0028】
図5は、データメモリ6における要素データの読み書きについて説明する図である。データメモリ6は、インターリーブ方式でアクセスされる複数のバンク、たとえばバンク6_1〜6_4を有する。バンク6_1〜6_4は、たとえば、それぞれ128ビットのバンク幅を有する。各マス目は16ビット長の格納領域を示し、マス目の中の数字は要素データを示す。よって、1バンク幅に8個の16ビット長の要素データが格納される。
【0029】
バンク6_1〜6_4からは、読出しアドレスの入力に応答して、たとえば8個の要素データを有する要素データ列が読み出される。あるいは、バンク6_1〜6_4は、たとえば8個の要素データを有する要素データ列が、書込みアドレスに書き込まれる。たとえば、バンク6_1では、1回のアクセスで、アドレスADD1に対し、要素データ「0」〜「7」を有する要素データ列R1が読み書きされる。また、バンク6_2では、1回のアクセスで、アドレスADD2に、要素データ「40」〜「47」有する要素データ列R2が読み書きされる。また、バンク6_3では、1回のアクセスで、アドレスADD3に、要素データ「80」〜「87」を有する要素データ列R3が読み書きされる。さらに、バンク6_4では、1回のアクセスで、アドレスADD4に、要素データ「120」〜「127」を有する要素データ列R4が読み書きされる。このように、データメモリ6全体としては、1回のアクセスで、32個の要素データを有する要素データ列R1〜R4が読み書きされる。
【0030】
図6は、ベクトルレジスタ8について説明する図である。ベクトルレジスタ8には、演算パイプライン12_1、12_2による処理順序で、演算のための要素データ、または演算結果を示す要素データが格納される。ベクトルレジスタ8は、たとえば、128ビットの幅を有し、1つの行アドレスに8個の16ビット長の要素データが格納される。ここでは、各マス目は16ビット長の格納領域を示し、マス目の中の数字は格納される要素データの配列番号を示す。
【0031】
たとえば、図3(A)で示したように、演算パイプライン12_1、12_2の1つの演算器で1処理サイクルに8組の要素データを処理する場合、ベクトルレジスタ8には次のように要素データが格納される。たとえば、2つの行アドレスには演算器に順次入力される要素データの組が処理順序で格納され、別の1つの行アドレスに演算結果を示す要素データが処理順序に格納される。
【0032】
上述のように、バンク6_1〜6_4は、インターリーブ方式により、全体として32個の要素データを含む要素データ列R1〜R4が1回のアクセスで読み書きされる。これにより、レイテンシが抑制される。一方、ベクトルレジスタ8は、1つの行アドレスにつき8個の演算ための、または演算結果を示す要素データが格納される(なお、以下では、ベクトルレジスタ8に格納される要素データを演算要素データと称し、データメモリ6に格納されるその他の要素データと区別する)。よって、本実施形態では、次のようにして、バンク6_1〜6_4から読み出される要素データ列R1〜R4の32個の要素データから、ベクトルレジスタ8に格納すべき8個の演算要素データが選択される。また、ベクトルレジスタ8に格納された8個の演算要素データが、バンク6_1〜6_4に1アクセスで書き込まれる要素データ列R1〜R4に挿入され、データメモリ6に書き込まれる。
【0033】
以下では、本実施形態のメモリ制御装置について、データメモリ6から演算要素データを読み出してベクトルレジスタ8に格納する場合と、ベクトルレジスタ8から演算要素データを読み出してデータメモリ6に書き込む場合とに場合分けして説明する。
【0034】
[データメモリ6から演算要素データを読み出してベクトルレジスタ8に格納する場合]
図7は、データメモリ6から演算要素データを読み出してベクトルレジスタ8に格納するためのメモリ制御装置の構成を示す。メモリ制御装置は、データメモリ6から要素データ列R1〜R4を読み出すためのバンク6_1〜6_4ごとの読出しアドレスrADDを生成するアドレス生成部30を有する。アドレス生成部30は、たとえばロード・ストアパイプライン12_1、12_2内のモジュールである。アドレス生成部30は、命令デコーダ4から入力されるアドレス生成用データ4aに基づいて、読出しアドレスrADDを生成する。アドレス生成部30は、たとえば、シーケンシャルアクセスの場合の読出しアドレスを生成するシーケンシャルアドレス生成部30_1、インダイレクトアクセスの場合の読出しアドレスを生成するインダイレクトアドレス生成部30_2、及びストライドアクセスの場合の読出しアドレスを生成するストライドアドレス生成部30_3を有する。アドレス生成部30が生成したバンク6_1〜6_4ごとの読出しアドレスrADDは、データメモリ6のバンク6_1〜6_4にそれぞれ入力される。その一方、アドレス生成部30では、たとえば、シーケンシャルアドレス生成部30_1、インダイレクトアドレス生成部30_2、及びストライドアドレス生成部30_3により、各種処理信号PSが生成される。そして、バンク6_1〜6_4ごとの読出しアドレスrADDと各種処理信号PSは、レジスタ31に格納される。
【0035】
メモリ制御装置は、要素データ列R1〜R4における演算要素データの位置を示す位置信号S4と、演算要素データをレジスタに格納する格納順序を示す順序信号S6とを生成する順序・位置信号生成部32を有する。順序・位置信号生成部32は、たとえば、マルチプレクサ14内のモジュールである。順序・位置信号生成部32は、レジスタ31に格納された読出しアドレスrADDと各種処理信号PSとを読み出し、これらに基づいて位置信号S4と順序信号S6とを生成する。その詳細については後述する。
【0036】
また、メモリ制御装置は、複数のバンク6_1〜6_4からそれぞれ読み出された要素データ列R1〜R4から位置信号S4に基づいて演算要素データを選択し、選択した演算要素データを順序信号S6が示す格納順序でベクトルレジスタ8に格納するセレクタ部34を有する。セレクタ部34は、たとえば、マルチプレクサ14に含まれる。セレクタ部34は、たとえば、ベクトルレジスタ8の8個の格納位置ごとのセレクタ34_1〜34_8を有する。セレクタ34_1〜34_8には、それぞれ、要素データ列R1〜R4の32個の要素データが入力される。そして、セレクタ34_1〜34_8は、位置信号S4と順序信号S6とに基づいて、32個の要素データから自らが対応する格納位置に格納すべき演算要素データを選択し、ベクトルレジスタ8に格納する。
【0037】
図8は、順序・位置信号生成部32の詳細な動作を説明するための図である。ここでは、演算要素データ「A」、「B」、「C」、「D」、「E」、「F」、「G」、「H」の順に、ベクトルレジスタ8に格納する場合が示される。図8(A)には、バンク6_1〜6_4に分散して8個の演算要素データ「A」〜「H」が格納される例が示される。また、図8(A)には、演算要素データ「A」〜「H」を含む要素データ列R1〜R4の読み出しアドレスが示される。ここでは、図面の右から左へ、かつ、上から下へアドレスが昇順に変化する。バンク6_1〜6_4ごとの読出しアドレスの順序は、読み出される要素データ列R1〜R4に含まれる演算要素データ「A」〜「H」のベクトルレジスタ8における格納順序、つまり、演算パイプライン12_3、12_4による処理順序に対応する。たとえば、アドレス順に示すと、バンク6_4には、アドレス「0x30」に、演算要素データ「A」を含む要素データ列R4が格納される。また、バンク6_1には、アドレス「0x40」に、演算要素データ「B」及び「C」を含む要素データ列R1が格納される。また、バンク6_2には、アドレス「0x50」に、演算要素データ「D」、「E」、及び「F」を含む要素データ列R2が格納される。そして、バンク6_3には、アドレス「0x60」に、演算要素データ「G」及び「H」を含む要素データ列R3が格納される。
【0038】
図8(B)には、アドレス生成部30が生成するバンク6_1〜6_4ごとの読み出しアドレスrADDが示される。たとえば、バンク6_1については、読出しアドレス「0x40」が生成される。また、バンク6_2については、読出しアドレス「0x50」が生成される。また、バンク6_3については、読出しアドレス「0x60」が生成される。そして、バンク6_4については、読出しアドレス「0x30」が生成される。
【0039】
また、図8(B)には、アドレス生成部30が生成する各種処理信号PSが示される。各種処理信号PSは、バンクイネーブル信号BE、要素イネーブル信号EE、バンクオフセット信号BOである。バンクイネーブル信号BE、要素イネーブル信号EE、バンクオフセット信号BOは、読出しアドレスrADDに基づいて生成される。
【0040】
バンクイネーブル信号BEは、バンク6_1〜6_4ごとの読出しアドレスrADDの有効性を示す。バンクイネーブル信号BEは、たとえば1ビットの信号である。読出しアドレスrADDが生成された場合には、バンクイネーブル信号BEは有効性を示す値「1」となる。一方、読出しアドレスrADDが生成されない場合には、バンクイネーブル信号BEは値「0」となる。ここでは、バンク6_1〜6_4のすべてにおいて読出しアドレスrADDが生成されている。よって、バンク6_1〜6_4のすべてについて、読出しアドレスrADDの有効性を示す値「1」を有するバンクイネーブル信号BEが生成される。
【0041】
要素イネーブル信号EEは、要素データ列R1〜R4における選択すべき演算要素データの位置を示す。要素データ列R1〜R4は、それぞれ8個の要素データを含む。よって、要素イネーブル信号は、各要素データ列R1〜R4について、たとえば8ビットの信号である。ここで、図面の右側から左側に列をカウントすると、たとえば、要素データ列R1には、1列目と2列目にそれぞれ演算要素データ「B」、「C」が含まれる。よって要素データ列R1に対応する要素イネーブル信号EEの値は、1列目から8列目まで順に、「1、1、0、0、0、0、0、0」となる。また、要素データ列R2には、2列目から4列目に演算要素データ「D」、「E」、及び「F」が含まれる。よって要素データ列R2に対応する要素イネーブル信号EEの値は、1列目から8列目まで順に、「0、1、1、1、0、0、0、0」となる。また、要素データ列R3には、4列目及び5列目に演算要素データ「G」及び「H」が含まれる。よって要素データ列R3に対応する要素イネーブル信号の値は、1列目から8列目まで順に、「0、0、0、1、1、0、0、0」となる。そして、要素データ列R4には、8列目に演算要素データ「A」が含まれる。よって要素データ列R4に対応する要素イネーブル信号EEの値は、1列目から8列目まで、順に「0、0、0、0、0、0、0、1」となる。
【0042】
バンクオフセット信号BOは、要素データ列R1〜R4に含まれる演算要素データの処理順序に対応する、バンク6_1〜6_4の順序を示す。バンクオフセット信号OSの値は、各バンク6_1〜6_4の読出しアドレスrADDの順序と、要素イネーブル信号EEの積算値から、次のように求められる。
【0043】
まず、バンク6_1〜6_4ごとの読出しアドレスrADDの順序は、小さい方から次のような順序になる。
<1番目>バンク6_4の読出しアドレスrADD(「0x30」)
<2番目>バンク6_1の読出しアドレスrADD(「0x40」)
<3番目>バンク6_2の読出しアドレスrADD(「0x50」)
<4番目>バンク6_3の読出しアドレスrADD(「0x60」)
また、上記順序の各バンクの要素イネーブル信号EEの積算値は、次のようになる。
<1番目>バンク6_4の要素イネーブル信号EEの積算値「1」
<2番目>バンク6_1の要素イネーブル信号EEの積算値「2」
<3番目>バンク6_2の要素イネーブル信号EEの積算値「3」
<4番目>バンク6_3の要素イネーブル信号EEの積算値「2」
そして、各バンクのバンクオフセット信号BOの値は、1つ前の順番のバンクの、バンクオフセット信号BOの値とイネーブル信号EEの積算値の和として求められる。たとえば、次のとおりである。
<1番目>バンク6_4のバンクオフセット信号BO=「0」
<2番目>バンク6_1のバンクオフセット信号BO
=バンク6_4のバンクオフセット信号BO「0」+
バンク6_4の要素イネーブル信号EEの積算値「1」
=「1」
<3番目>バンク6_2のバンクオフセット信号BO
=バンク6_1のバンクオフセット信号BO「1」+
バンク6_1の要素イネーブル信号EEの積算値「2」
=「3」
<4番目>バンク6_3のバンクオフセット信号BO
=バンク6_2のバンクオフセット信号BO「3」+
バンク6_2の要素イネーブル信号EEの積算値「3」
=「6」
図8(C)には、順序・位置信号生成部32が生成する、バンク6_1〜6_4ごとの要素オフセット信号EO、順序信号S6、位置信号S4が示される。
【0044】
要素オフセット信号EOは、要素データ列R1〜R4ごとの、選択すべき演算要素データの順序を示す。要素オフセット信号EOの値は、バンク6_1〜6_4ごとの要素イネーブル信号EEの値を、アドレス順に積算して求められる。具体的には、次のとおりである。
<バンク6_1>
演算要素データ「B」の要素オフセット信号EO
=演算要素データ「B」の要素イネーブル信号EE「1」
演算要素データ「C」の要素オフセット信号EO
=演算要素データ「B」の要素オフセット信号EO「1」
+演算要素データ「C」の要素イネーブル信号EE「1」
=「2」
<バンク6_2>
演算要素データ「D」の要素オフセット信号EO
=演算要素データ「D」の要素イネーブル信号EE「1」
演算要素データ「E」の要素オフセット信号EO
=演算要素データ「D」の要素オフセット信号EO「1」
+演算要素データ「E」の要素イネーブル信号EE「1」
=「2」
演算要素データ「F」の要素オフセット信号EO
=演算要素データ「E」の要素オフセット信号EO「2」
+演算要素データ「F」の要素イネーブル信号EE「1」
=「3」
<バンク6_3>
演算要素データ「G」の要素オフセット信号EO
=演算要素データ「G」の要素イネーブル信号EE「1」
演算要素データ「H」の要素オフセット信号EO
=演算要素データ「G」の要素オフセット信号EO「1」
+演算要素データ「H」の要素イネーブル信号EE「1」
=「2」
<バンク6_4>
演算要素データ「A」の要素オフセット信号EO
=演算要素データ「A」の要素イネーブル信号EE「1」
次に、順序信号S6は、ベクトルレジスタ8における演算要素データの格納位置を示す。順序信号S6の値は、演算要素データが対応するバンクのバンクオフセット信号BOの値と、演算要素データの要素オフセット信号EOの値の和として求められる。具体的には、次のとおりである。
<バンク6_1>
演算要素データ「B」の順序信号S6
=バンク6_1のバンクオフセット信号BO「1」
+演算要素データ「B」の要素オフセット信号EO「1」
=「2」
演算要素データ「C」の順序信号S6
=バンク6_1のバンクオフセット信号BO「1」
+演算要素データ「C」の要素オフセット信号EO「2」
=「3」
<バンク6_2>
演算要素データ「D」の順序信号S6
=バンク6_2のバンクオフセット信号BO「3」
+演算要素データ「D」の要素オフセット信号EO「1」
=「4」
演算要素データ「E」の順序信号S6
=バンク6_2のバンクオフセット信号BO「3」
+演算要素データ「E」の要素オフセット信号EO「2」
=「5」
演算要素データ「F」の順序信号S6
=バンク6_2のバンクオフセット信号BO「3」
+演算要素データ「D」の要素オフセット信号EO「3」
=「6」
<バンク6_3>
演算要素データ「G」の順序信号S6
=バンク6_3のバンクオフセット信号BO「6」
+演算要素データ「D」の要素オフセット信号EO「1」
=「7」
演算要素データ「H」の順序信号S6
=バンク6_2のバンクオフセット信号BO「6」
+演算要素データ「E」の要素オフセット信号EO「2」
=「8」
<バンク6_4>
演算要素データ「A」の順序信号S6
=バンク6_3のバンクオフセット信号BO「0」
+演算要素データ「D」の要素オフセット信号EO「1」
=「1」
ここにおいて、演算要素データ「A」、「B」、「C」、「D」、「E」、「F」、「G」、「H」に、ベクトルレジスタ8に格納される順序「1」、「2」、「3」、「4」、「5」、「6」、「7」、「8」がそれぞれ対応付けられる。
【0045】
位置信号S4は、データ要素列R1〜R4に含まれる32個の要素データにおける、演算要素データ「A」〜「H」の位置を示す。たとえば、32個の要素データが要素データ列R1、R2、R3、R4の順にアドレス順に並べられたとして、「0」〜「31」の値が昇順に割り当てられる。そして、順序信号S6が割り当てられた演算要素データ「A」〜「H」に対し、対応する位置信号S4「1」〜「32」のいずれかが割り当てられる。たとえば、次のとおりである。
<要素データ列R1>
演算要素データ「B」:順序信号「2」、位置信号「0」
演算要素データ「C」:順序信号「3」、位置信号「1」
<要素データ列R2>
演算要素データ「D」:順序信号「4」、位置信号「9」
演算要素データ「E」:順序信号「5」、位置信号「10」
演算要素データ「F」:順序信号「6」、位置信号「11」
<要素データ列R3>
演算要素データ「G」:順序信号「7」、位置信号「19」
演算要素データ「H」:順序信号「8」、位置信号「20」
<要素データ列R4>
演算要素データ「A」:順序信号「1」、位置信号「31」
ここにおいて、演算要素データ「A」、「B」、「C」、「D」、「E」、「F」、「G」、「H」に、ベクトルレジスタ8に格納される順序「1」、「2」、「3」、「4」、「5」、「6」、「7」、「8」と、要素データR1、R2、R3、及びR4における位置とがそれぞれ対応付けられる。
【0046】
次に、図7、図8を参照して、セレクタ部34の動作について説明する。セレクタ部34は、要素データ列R1〜R4から位置信号S4に基づいて演算要素データを選択し、選択した要素データを順序信号S6が示す格納順序でベクトルレジスタ8に格納する。具体的には、次のとおりである。セレクタ34_1〜34_8には、それぞれベクトルレジスタ8の格納順序「1」〜「8」の格納位置に対応する。そして、セレクタ34_1〜34_8は、それぞれ要素データ列R1〜R4の32個の要素データが入力される。そして、セレクタ34_1〜34_8は、位置信号S4と順序信号S6とに基づいて、32個の要素データから自らが対応する格納位置に格納すべき演算要素データを選択し、ベクトルレジスタ8に格納する。たとえば、セレクタ34_1〜34_8が対応する格納順序、順序信号S6の値、位置信号S4の値、及び格納する要素データの対応は、次のとおりである。
セレクタ34_1:格納順序「1」、順序信号「1」、位置信号「31」、演算要素データ「A」
セレクタ34_2:格納順序「2」、順序信号「2」、位置信号「0」、演算要素データ「B」
セレクタ34_3:格納順序「3」、順序信号「3」、位置信号「1」、演算要素データ「C」
セレクタ34_4:格納順序「4」、順序信号「4」、位置信号「9」、演算要素データ「D」
セレクタ34_5:格納順序「5」、順序信号「5」、位置信号「10」、演算要素データ「E」
セレクタ34_6:格納順序「6」、順序信号「6」、位置信号「11」、演算要素データ「F」
セレクタ34_7:格納順序「7」、順序信号「7」、位置信号「19」、演算要素データ「G」
セレクタ34_8:格納順序「8」、順序信号「8」、位置信号「20」、演算要素データ「H」
このようにして、バンク6_1〜6_4から読み出された要素データ列R1〜R4から、演算要素データ「A」〜「H」が選択される。そして、図8(D)に示すように、演算要素データ「A」〜「H」がベクトルレジスタ8に格納順序に従って格納される。
【0047】
本実施形態によれば、バンク6_1〜6_4からは、32個の要素データを含む要素データ列R1〜R4が1回のアクセスで読み出されるので、レイテンシが抑制される。一方で、上述のような方法により、要素データ列R1〜R4の32個の要素データから、ベクトルレジスタ8に格納すべき8個の演算要素データが選択されて、処理順序でベクトルレジスタに格納される。よって、演算パイプライン12_3、12_4では、連続して要素データを処理できるので、良好なスループットを得ることができる。
【0048】
なお、順序・位置信号生成部32は、アドレス生成部30から送られるバンクイネーブル信号BEをセレクタ部34に転送することが可能である。そうすることで、セレクタ部34は、バンクイネーブル信号BEが生成されたバンクから要素データ列が読み出されると、読み出された要素データ列から演算要素データを選択する。その一方、バンクイネーブル信号BEが生成されないバンクからは要素データ列が読み出されないので、要素データ列から演算要素データを選択する動作を実行しないようにする。
【0049】
図9は、読出しアドレスの有効性を示すバンクイネーブル信号BEが生成されない例を示す。図9(A)〜(C)では、図8(A)〜(C)で示した各種信号が示される。
【0050】
この例では、図9(A)に示すように、バンク6_2〜6_4に分散して8個の演算要素データ「A」〜「H」が格納される。たとえば、アドレス順に示すと、バンク6_3には、アドレス「0x60」に、演算要素データ「A」及び「B」を含む要素データ列R3が格納される。また、バンク6_4には、アドレス「0x70」に、演算要素データ「C」、「D」、及び「E」を含む要素データ列R4が格納される。また、バンク6_2には、アドレス「0x90」に、演算要素データ「F」、「G」、及び「H」を含む要素データ列R2が格納される。そして、ここでは、バンク6_1には、演算要素データが格納されない。
【0051】
よって、図9(B)に示すように、アドレス生成部30により、バンク6_3については、読出しアドレス「0x60」が生成される。また、バンク6_4については、読出しアドレス「0x70」が生成される。また、バンク6_2については、読出しアドレス「0x90」が生成される。そして、バンク6_1については、読出しアドレスが生成されない。よって、バンク6_2〜6_4からは要素データ列R2〜R4が読み出され、バンク6_1からは要素データ列R1が読み出されない。
【0052】
ここで、読出しアドレスrADDが生成されるバンク6_2〜4についてのバンクイネーブル信号BEは、有効を示す値「1」を有する。しかし一方で、読出しアドレスrADDが生成されないバンク6_1についてのバンクイネーブル信号BEは、無効を示す値「0」となる。つまり、読出しアドレスrADDの有効性を示すバンクイネーブル信号BEが生成されない。このようなバンクイネーブル信号BEが転送されることにより、セレクタ部34は次のように動作する。なお、図9(B)の要素イネーブル信号EE、バンクオフセット信号BOは、図8(B)で示した方法と同様にして求められ、図9(C)の要素オフセット信号EO、順序信号S6、及び位置信号S4は、図8(C)で示した方法と同様にして求められる。
【0053】
セレクタ部34のセレクタ34_1〜34_8は、それぞれ要素データ列R2〜R4の24個の要素データが入力されたとき、バンクイネーブル信号BEが生成されたバンク6_2〜4に対応する要素データ列R2〜3に対し、要素データを選択する処理を行う。その一方、セレクタ部34のセレクタ34_1〜34_8は、バンクイネーブル信号BEが生成されないバンク6_1に対応する要素データ列R1が入力されないので、要素データ列R1に対して行うはずであった演算要素データを選択する処理を行わない。そうすることで、電力の無駄な消費や処理負荷を軽減することができる。
【0054】
そして、上記の処理の結果、図9(D)に示すように、演算要素データ「A」〜「H」がベクトルレジスタ8に格納順序に従って格納される。
【0055】
[ベクトルレジスタ8から演算要素データを読み出してデータメモリ6に書き込む場合]
図10は、ベクトルレジスタ8から演算要素データを読み出してデータメモリ6に書き込むためのメモリ制御装置の構成を示す。メモリ制御装置は、要素データ列R1〜R4を書き込むためのバンク6_1〜6_4ごとの書込みアドレスwADDを生成するアドレス生成部30を有する。アドレス生成部30は、たとえばロード・ストアパイプライン12_1、12_2内のモジュールである。アドレス生成部30は、命令デコーダ4から入力されるアドレス生成用データ4aに基づいて、書込みアドレスwADDを生成する。アドレス生成部30は、たとえば、シーケンシャルアクセスの場合の書込みアドレスwADDを生成するシーケンシャルアドレス生成部30_1、インダイレクトアクセスの場合の書込みアドレスwADDを生成するインダイレクトアドレス生成部30_2、及びストライドアクセスの場合の書込みアドレスwADDを生成するストライドアドレス生成部30_3を有する。アドレス生成部30が生成したバンク6_1〜6_4ごとの書込みアドレスwADDは、たとえばレジスタ40に一旦格納されてから、データメモリ6のバンク6_1〜6_4にそれぞれ入力される。その一方、アドレス生成部30では、たとえば、シーケンシャルアドレス生成部30_1、インダイレクトアドレス生成部30_2、及びストライドアドレス生成部30_3により、各種処理信号PSが生成される。そして、バンク6_1〜6_4ごとの書込みアドレスwADDと各種処理信号PSは、レジスタ31に格納される。
【0056】
メモリ制御装置は、演算パイプライン12_3、12_4による処理順序でベクトルレジスタ8に格納された、データメモリ6に書き込むべき演算要素データのベクトルレジスタ8における格納順序を示す順序信号S5と、バンク6_1〜6_4にそれぞれ書き込まれる要素データ列R1〜R4に書き込むべき要素データを挿入する位置を示す位置信号S7とを生成する順序・位置信号生成部32を有する。順序・位置信号生成部32は、たとえば、マルチプレクサ14内のモジュールである。順序・位置信号生成部32は、レジスタ31に格納された書込みアドレスwADDと各種処理信号PSとを読み出し、これらに基づいて位置信号S7と順序信号S5とを生成する。その詳細については後述する。
【0057】
また、メモリ制御装置は、バンク6_1〜6_4に書き込まれる要素データ列R1〜R4における位置信号S7が示す位置に、順序信号S5が示す順序で書き込むべき要素データを挿入するセレクタ部35を有する。セレクタ部35は、たとえば、マルチプレクサ14に含まれる。セレクタ部35は、たとえば、要素データ列R1〜R4に含まれる32個の要素データごとのセレクタ35_1〜35_32を有する。セレクタ35_1〜35_32には、それぞれ、ベクトルレジスタ8から読み出される8個の演算要素データ8aが入力される。演算要素データ8aは、たとえばレジスタ44に一旦格納されてから、セレクタ35_1〜35_32に入力される。そして、セレクタ35_1〜35_32は、位置信号S7と順序信号S5とに基づいて、8個の演算要素データ8aから自らが対応する位置に挿入すべき演算要素データを選択し、要素データ列R1〜R4に挿入する。
【0058】
さらに、セレクタ部35は、たとえば命令デコーダ4からデータマスク信号DMが入力される。データマスク信号DMは、演算要素データのデータメモリ6への書込みの許可・不許可を示す。データマスク信号DMは、たとえば8ビットの信号である。各ビットは、8個の要素データ8aの書込み許可・不許可を示す。データマスク信号DMは、たとえばレジスタ42に一旦格納されてから、セレクタ部35に入力される。
【0059】
セレクタ部35は、データマスク信号DMに基づいて、32ビットのデータマスク信号DM2を生成する。データマスク信号DM2は、バンク6_1〜6_4に、要素データ列R1〜R4の書き込みの許可・不許可を指示するための信号である。各ビットは、要素データ列R1〜R4に含まれる32個の要素データに対応する。セレクタ部35は、データマスク信号DM2を生成する32個のセレクタ36_1〜36_32を有する。セレクタ36_1〜36_32は、それぞれ要素データ列R1〜R4に含まれる32個の要素データに対応する。セレクタ36_1〜36_32には、それぞれ8ビットのデータマスク信号DMが入力される。そして、セレクタ36_1〜36_32は、位置信号S7と順序信号S5とに基づいて、自らが対応する位置への要素データの挿入許可・不許可を示す値(「1」または「0」)を生成する。このようにして8ビットのデータマスク信号DM2が生成される。データマスク信号DM2は、バンク6_1〜6_4に入力される。
【0060】
データメモリ6では、バンク6_1〜6_4が、それぞれ要素データ列R1〜R4を書込みアドレスwADDに書き込む。その際、データマスク信号DM2により許可された要素データのみが書き込まれる。データマスク信号DM2を用いることで、データメモリ6においてデータが破壊されたり不整合が生じたりすることを防止できる。
【0061】
図11は、順序・位置所信号生成部32の詳細な動作を説明するための図である。図11(A)には、アドレス生成部30が生成するバンク6_1〜6_4ごとの書込みアドレスwADDが示される。たとえば、バンク6_1については、書込みアドレス「0x40」が生成される。また、バンク6_2については、書込みアドレス「0x50」が生成される。また、バンク6_3については、書込みアドレス「0x60」が生成される。そして、バンク6_4については、書込みアドレス「0x30」が生成される。
【0062】
上記書込みアドレスwADDは、バンク6_1〜6_4に、図11(E)に示すように要素データ列R1〜R4を書き込むための書込みアドレスwADDである。要素データ列R1〜R4には、8個の演算要素データ「A」、「B」、「C」、「D」、「E」、「F」、「G」、「H」が含まれる。ここでは、図面の右から左へ、かつ、上から下へアドレスが昇順に変化する。バンク6_1〜6_4に書き込まれる演算要素データ「A」〜「H」のアドレス順は、ベクトルレジスタ8における格納順、つまり、演算パイプライン12_3、12_4による処理順序に対応する。
【0063】
また、図11(A)には、アドレス生成部30が生成する各種処理信号PSが示される。各種処理信号PSは、バンクイネーブル信号BE、要素イネーブル信号EE、バンクオフセット信号BOである。バンクイネーブル信号BE、要素イネーブル信号EE、バンクオフセット信号BOは、書込みアドレスwADDに基づいて生成される。
【0064】
バンクイネーブル信号BEは、バンク6_1〜6_4ごとの書込みアドレスwADDの有効性を示す。バンクイネーブル信号BEは、たとえば1ビットの信号である。書込みアドレスwADDが生成された場合には、バンクイネーブル信号BEは有効性を示す値「1」となる。一方、書込みアドレスrADDが生成されない場合には、バンクイネーブル信号BEは値「0」となる。ここでは、バンク6_1〜6_4のすべてにおいて書込みアドレスwADDが生成されている。よって、バンク6_1〜6_4のすべてについて、書込みアドレスwADDの有効性を示す値「1」を有するバンクイネーブル信号BEが生成される。
【0065】
要素イネーブル信号EEは、要素データ列R1〜R4に挿入すべき演算要素データの位置を示す。たとえば、図11(D)に示すように、要素データ列R1には、1列目と2列目にそれぞれ演算要素データ「B」、「C」が挿入される。よって、要素イネーブル信号EEの値は、1列目から8列目まで順に、「1、1、0、0、0、0、0、0」となる。また、要素データ列R2には、2列目から4列目に演算要素データ「D」、「E」、及び「F」が挿入される。よって要素データ列R2に対応する要素イネーブル信号EEの値は、1列目から8列目まで順に、「0、1、1、1、0、0、0、0」となる。また、要素データ列R3には、4列目及び5列目に演算要素データ「G」及び「H」が挿入される。よって要素データ列R3に対応する要素イネーブル信号の値は、1列目から8列目まで順に、「0、0、0、1、1、0、0、0」となる。そして、要素データ列R4には、8列目に演算要素データ「A」が挿入される。よって要素データ列R4に対応する要素イネーブル信号EEの値は、1列目から8列目まで、順に「0、0、0、0、0、0、0、1」となる。
【0066】
バンクオフセット信号BOは、要素データ列R1〜R4に挿入すべき演算要素データの順序に対応する、バンク6_1〜6_4の順序を示す。バンクオフセット信号BOの値は、各バンク6_1〜6_4の読出しアドレスwADDの順序と、要素イネーブル信号EEの積算値から求められる。具体的な方法は、図8(B)で示したとおりである。
【0067】
図11(B)には、順序・位置信号生成部32が生成する、バンク6_1〜6_4ごとの要素オフセット信号EO、順序信号S5、位置信号S7が示される。要素オフセット信号EOは、要素データ列R1〜R4ごとの、挿入すべき演算要素データの順序を示す。要素オフセット信号EOの値は、バンク6_1〜6_4ごとの要素イネーブル信号EEの値を、アドレス順に積算して求められる。具体的な方法は、図8(C)に示したとおりである。
【0068】
順序信号S5は、ベクトルレジスタ8における演算要素データの格納位置を示す。ベクトルレジスタ8における格納順序「1」〜「8」と演算要素データ「A」〜「H」の対応が、図11(C)に示される。なお、図11(C)には、各演算要素データの書込みの許可・不許可を規定するデータマスク信号DMが示される。順序信号S5の値は、演算要素データが対応するバンクのバンクオフセット信号BOの値と、演算要素データの要素オフセット信号EOの値の和として求められる。具体的な方法は、図8(C)で示したとおりである。
【0069】
ここにおいて、演算要素データ「A」、「B」、「C」、「D」、「E」、「F」、「G」、「H」に、ベクトルレジスタ8に格納された順序「1」、「2」、「3」、「4」、「5」、「6」、「7」、「8」がそれぞれ対応付けられる。
【0070】
位置信号S7は、データ要素列R1〜R4の32個の要素データにおける、演算要素データ「A」〜「H」を挿入すべき挿入位置を示す。たとえば、32個の要素データが要素データ列R1、R2、R3、R4の順にアドレス順に並べられ、「0」〜「31」の値が昇順に割り当てられる。そして、順序信号S5が割り当てられた演算要素データ「A」〜「H」に対し、対応する位置信号「1」〜「32」のいずれかが割り当てられる。たとえば、次のとおりである。
<要素データ列R1>
挿入すべき演算要素データ「B」:順序信号「2」、位置信号「0」
挿入すべき演算要素データ「C」:順序信号「3」、位置信号「1」
<要素データ列R2>
挿入すべき演算要素データ「D」:順序信号「4」、位置信号「9」
挿入すべき演算要素データ「E」:順序信号「5」、位置信号「10」
挿入すべき演算要素データ「F」:順序信号「6」、位置信号「11」
<要素データ列R3>
挿入すべき演算要素データ「G」:順序信号「7」、位置信号「19」
挿入すべき演算要素データ「H」:順序信号「8」、位置信号「20」
<要素データ列R4>
挿入すべき演算要素データ「A」:順序信号「1」、位置信号「31」
ここにおいて、演算要素データ「A」、「B」、「C」、「D」、「E」、「F」、「G」、「H」と、ベクトルレジスタ8に格納された順序「1」、「2」、「3」、「4」、「5」、「6」、「7」、「8」と、要素データR1、R2、R3、及びR4における挿入位置とがそれぞれ対応付けられる。
【0071】
次に、図10、図11を参照して、セレクタ部35の動作について説明する。セレクタ部35は、複数のバンク6_1〜6_4に書き込まれる要素データ列R1〜R4における位置信号S5が示す位置に、順序信号S5が示す順序で書き込むべき要素データを挿入する。具体的には、次のとおりである。
【0072】
セレクタ35_1〜35_32は、それぞれ要素データ列R1〜R4における32個の要素データの位置「0」〜「31」に対応する。セレクタ35_1〜35_32は、ベクトルレジスタ8から読み出された8個の演算要素データ8a、つまり「A」〜「H」が入力される。そして、セレクタ35_1〜35_32は、位置信号S7と順序信号S5とに基づいて、8個の演算要素データ8aから自らが対応する挿入位置に挿入すべき演算要素データを選択し、要素データ列R1〜R4に挿入する。たとえば、セレクタ35_1〜35_32のうち、演算要素データ「A」〜「H」を挿入するセレクタの順序信号S5の値、位置信号S7の値、及び挿入する要素データの対応は、次のとおりである。
<セレクタ35_2> 順序信号「2」、位置信号「0」、演算要素データ「B」
<セレクタ35_3> 順序信号「3」、位置信号「1」、演算要素データ「C」
<セレクタ35_9> 順序信号「4」、位置信号「9」、演算要素データ「D」
<セレクタ35_10> 順序信号「5」、位置信号「10」、演算要素データ「E」
<セレクタ35_11> 順序信号「6」、位置信号「11」、演算要素データ「F」
<セレクタ35_19> 順序信号「7」、位置信号「19」、演算要素データ「G」
<セレクタ35_20> 順序信号「8」、位置信号「20」、演算要素データ「H」
<セレクタ35_31> 順序信号「1」、位置信号「31」、演算要素データ「A」
なお、上記以外のセレクタ35_1、35_4〜8、35_12〜18、35_21〜30は、順序信号「0」が対応し、したがって挿入すべき演算要素データが対応しないので、挿入を行わない。このようにして、ベクトルレジスタ8から読み出された演算要素データ「A」〜「H」が、要素データ列R1〜R4に挿入される。
【0073】
図11(D)には、演算要素データ「A」〜「H」が挿入されたデータ列R1〜R4が示される。また、図11(D)には、図11(C)のデータマスク信号DMから生成されたデータマスク信号DM2が示される。データマスク信号DM2は、32ビットの信号である。書込みが許可されるデータ要素に対応するビットの値が「0」、書込みが許可されないデータ要素に対応するビットの値が「1」である。ここでは、データ要素「B」、「D」、「F」の書込みが不許可の場合が示される。
【0074】
上記のようにして演算要素データ「A」〜「H」が挿入された要素データ列R1〜R4が、図11(E)に示すように、バンク6_1〜6_4に1回のアクセスで書き込まれる。よって、レイテンシが抑制される。また、その際、要素データの書込みを許可・不許可できるので、データメモリ6のデータを保護できる。なお、図11(E)では、書込み不許可の演算要素データは「×」印が付されている。また、一方で、演算パイプライン12_3、12_4は、連続して要素データを処理して演算結果を出力できるので、パイプラインストールを低減できる。よって、良好なスループットを得ることができる。
【0075】
なお、順序・位置信号生成部32は、アドレス生成部30から送られるバンクイネーブル信号BEをセレクタ部35に転送することが可能である。セレクタ部35は、バンクイネーブル信号BEが生成されたバンクに書き込まれる要素データ列に、演算要素データを挿入する。その一方、セレクタ部35は、バンクイネーブル信号BEが生成されないバンクには要素データ列が書き込まれないので、演算要素データを挿入する処理を行わないようにする。
【0076】
図12は、書込みアドレスの有効性を示すバンクイネーブル信号BEが生成されない例を示す。図12(A)〜(E)では、図11(A)〜(E)で示した各種信号が示される。
【0077】
この例では、図12(E)に示すように、バンク6_2〜4に分散して8個の演算要素データ「A」〜「H」が書き込まれる。たとえば、アドレス順に示すと、バンク6_3には、アドレス「0x60」に、演算要素データ「A」及び「B」を含む要素データ列R3が書き込まれる。また、バンク6_4には、アドレス「0x70」に、演算要素データ「C」、「D」、及び「E」を含む要素データ列R4が書き込まれる。また、また、バンク6_2には、アドレス「0x90」に、演算要素データ「F」、「G」、及び「H」を含む要素データ列R2が書き込まれる。そして、バンク6_1には、要素データが書き込まれない。
【0078】
よって、図12(A)に示すように、アドレス生成部30により、バンク6_2、6_3、及び6_4については、それぞれ書込みアドレス「0x90」、「0x60」、及び「0x70」が生成される。そして、バンク6_1については、書込みアドレスが生成されない。すると、書込みアドレスwADDが生成されるバンク6_2〜4についてのバンクイネーブル信号BEは、有効を示す値「1」を有する。しかし一方で、書込みアドレスwADDが生成されないバンク6_1についてのバンクイネーブル信号BEは、無効を示す値「0」となる。つまり、書込みアドレスwADDの有効性を示すバンクイネーブル信号BEが生成されない。
【0079】
このようなバンクイネーブル信号BEが転送されることにより、セレクタ部35は次のように動作する。なお、図12(A)の要素イネーブル信号EE、バンクオフセット信号BOは、図11(A)で示した方法と同様にして求められ、図12(B)の要素オフセット信号EO、順序信号S5、及び位置信号S7は、図11(B)で示した方法と同様にして求められる。
【0080】
セレクタ部35のセレクタ35_1〜35_32は、それぞれ8個の演算要素データ「A」〜「H」が入力されたとき、バンクイネーブル信号BEが生成されたバンク6_2〜4に対応する要素データ列R2〜3に対しては、図12(B)に示す順序信号S5と位置信号S7とに基づいて要素データを挿入する処理を行う。しかしその一方、セレクタ35_1〜32は、バンクイネーブル信号BEが生成されないバンク6_1に対応する要素データ列R1に対しては要素データを挿入する処理を行わない。そうすることで、電力の無駄な消費や処理負荷を軽減することができる。
【0081】
上記の結果、図12(C)で示すようにベクトルレジスタ8に格納された演算要素データが、図12(E)で示すようにデータメモリ6の各バンクに書き込まれる。また、その際、図12(C)で示すマスクデータ信号DMにより演算要素データの書き込みが許可または不許可される。
【0082】
上述したベクトルプロセッサ1は、たとえば、携帯通信端末に搭載され、ベースバンド信号を要素データとしてFFT(Fast Fourier Transforms)処理などを行う信号処理装置に適用される。あるいは、これに限定されず、たとえば画素データを要素データとして画像処理を行う画像処理装置などにも適用することができる。本実施形態によれば、データメモリの不連続なアドレスにアクセスして要素データを読み書きする場合であっても、最小限の回路構成により良好なスループットを得ることができる。
【0083】
以上の実施の形態をまとめると、次の付記のとおりである。
【0084】
(付記1)
読出しアドレスの入力に応答して複数の要素データを有する要素データ列が読み出される複数のバンクを有するメモリから、前記要素データ列を読み出すためのバンクごとの前記読出しアドレスを生成する第1の生成部と、
前記要素データ列における選択すべき要素データの位置を示す位置信号と、前記選択すべき要素データをレジスタに格納する格納順序を示す順序信号とを生成する第2の生成部と、
前記複数のバンクからそれぞれ読み出された前記要素データ列から前記位置信号に基づいて前記選択すべき要素データを選択し、当該選択した要素データを前記順序信号が示す格納順序で前記レジスタに格納するセレクタ部とを有し、
前記レジスタに格納された要素データは、前記格納順序でベクトルプロセッサに処理される、メモリ制御装置。
【0085】
(付記2)
付記1において、
前記読出しアドレスの有効性を示すイネーブル信号をさらに生成し、
前記セレクタ部は、前記イネーブル信号が生成されたバンクから読み出される前記要素データ列から前記選択すべき要素データを選択し、前記イネーブル信号が生成されないバンクから読み出される前記要素データ列から前記選択すべき要素データを選択しないメモリ制御装置。
【0086】
(付記3)
付記1または2において、
前記バンクごとの読出しアドレスの順序は、当該読出しアドレスにより読み出される前記要素データ列に含まれる前記選択すべき要素データの前記格納順に対応し、
前記第2の生成部は、前記バンクごとの読出しアドレスに基づいて生成される、前記複数のバンクから読み出される要素データ列の順序を示す第1のオフセット信号と、前記複数のバンクから読み出される要素データ列ごとの前記選択すべき要素データの順序を示す第2のオフセット信号とに基づいて前記順序信号を生成するメモリ制御装置。
【0087】
(付記4)
複数の要素データを有する要素データ列が、入力された書込みアドレスに書き込まれる複数のバンクを有するメモリに、前記要素データ列を書き込むためのバンクごとの書込みアドレスを生成する第1の生成部と、
ベクトルプロセッサによる処理順序でレジスタに格納された、前記メモリに書き込むべき要素データの当該レジスタにおける格納順序を示す順序信号と、前記複数のバンクにそれぞれ書き込まれる要素データ列に前記書き込むべき要素データを挿入する位置を示す位置信号とを生成する第2の生成部と、
前記複数のバンクに書き込まれる要素データ列における前記位置信号が示す位置に、前記順序信号が示す順序で前記書き込むべき要素データを挿入するセレクタ部とを有し、
前記書き込むべき要素データ列が格納された要素データ列が、前記バンクごとの書込みアドレスに書き込まれる、メモリ制御装置。
【0088】
(付記5)
付記4において、
前記第1の生成部は、前記書込みアドレスの有効性を示すイネーブル信号をさらに生成し、
前記セレクタ部は、前記イネーブル信号が生成されたバンクに書き込まれる前記要素データ列に前記書き込むべき要素データを挿入し、前記イネーブル信号が生成されないバンクに書き込まれる前記要素データ列に前記書き込むべき要素データを挿入しないメモリ制御装置。
【0089】
(付記6)
付記4または5において、
前記セレクタ部は、前記書き込むべき要素データの書込みの許可・不許可を示すマスク信号に基づいて、前記書込みが許可された前記書き込むべき要素データを前記複数のバンクに書き込まれる要素データ列に挿入し、前記書込みが不許可の前記書込むべき要素データを前記複数のバンクに書き込まれる要素データ列に挿入しない、メモリ制御装置。
【0090】
(付記7)
付記4乃至6のいずれかにおいて、
前記バンクごとの書込みアドレスの順序は、当該書込みアドレスに書き込まれる前記要素データ列に含まれる前記書き込むべき要素データの前記格納順に対応し、
前記第2の生成部は、前記バンクごとの書込みアドレスに基づいて生成される、前記複数のバンクに書き込まれる要素データ列の順序を示す第1のオフセット信号と、前記複数のバンクに書き込まれる要素データ列ごとの前記書き込むべき要素データの順序を示す第2のオフセット信号とに基づいて前記順序信号を生成する、メモリ制御装置。
【0091】
(付記8)
読出しアドレスの入力に応答して複数の要素データを有する要素データ列が読み出される複数のバンクを有するメモリから、前記要素データ列を読み出すためのバンクごとの前記読出しアドレスを生成し、
前記要素データ列における選択すべき要素データの位置を示す位置信号と、前記選択すべき要素データをレジスタに格納する格納順序を示す順序信号とを生成し、
前記複数のバンクからそれぞれ読み出された前記要素データ列から前記位置信号に基づいて前記選択すべき要素データを選択し、当該選択した要素データを前記順序信号が示す格納順序で前記レジスタに格納し、
前記レジスタに格納された要素データは、前記格納順序に対応する単位でベクトルプロセッサに処理される、
メモリ制御方法。
【0092】
(付記9)
複数の要素データを有する要素データ列が、入力された書込みアドレスに書き込まれる複数のバンクを有するメモリに、前記要素データ列を書き込むためのバンクごとの書込みアドレスを生成し、
ベクトルプロセッサによる処理単位に対応する順序でレジスタに格納された、前記メモリに書き込むべき要素データの当該レジスタにおける格納理順序を示す順序信号と、前記複数のバンクにそれぞれ書き込まれる要素データ列に前記書き込むべき要素データを挿入する位置を示す位置信号とを生成し、
前記複数のバンクに書き込まれる要素データ列における前記位置信号が示す位置に、前記順序信号が示す順序で前記書き込むべき要素データを挿入し、
前記書き込むべき要素データ列が格納された要素データ列が、前記バンクごとの書込みアドレスに書き込まれる、
メモリ制御方法。
【符号の説明】
【0093】
1:ベクトルプロセッサ、 6:データメモリ、 6_1〜6_4:バンク、
8:ベクトルレジスタ、 12:ベクトルパイプライン、 30:アドレス生成部、
32:順序・位置信号生成部、 34、35:セレクタ部
【特許請求の範囲】
【請求項1】
読出しアドレスの入力に応答して複数の要素データを有する要素データ列が読み出される複数のバンクを有するメモリから、前記要素データ列を読み出すためのバンクごとの前記読出しアドレスを生成する第1の生成部と、
前記要素データ列における選択すべき要素データの位置を示す位置信号と、前記選択すべき要素データをレジスタに格納する格納順序を示す順序信号とを生成する第2の生成部と、
前記複数のバンクからそれぞれ読み出された前記要素データ列から前記位置信号に基づいて前記選択すべき要素データを選択し、当該選択した要素データを前記順序信号が示す格納順序で前記レジスタに格納するセレクタ部とを有し、
前記レジスタに格納された要素データは、前記格納順序でベクトルプロセッサに処理される、メモリ制御装置。
【請求項2】
複数の要素データを有する要素データ列が、入力された書込みアドレスに書き込まれる複数のバンクを有するメモリに、前記要素データ列を書き込むためのバンクごとの書込みアドレスを生成する第1の生成部と、
ベクトルプロセッサによる処理順序でレジスタに格納された、前記メモリに書き込むべき要素データの当該レジスタにおける格納順序を示す順序信号と、前記複数のバンクにそれぞれ書き込まれる要素データ列に前記書き込むべき要素データを挿入する位置を示す位置信号とを生成する第2の生成部と、
前記複数のバンクに書き込まれる要素データ列における前記位置信号が示す位置に、前記順序信号が示す順序で前記書き込むべき要素データを挿入するセレクタ部とを有し、
前記書き込むべき要素データ列が格納された要素データ列が、前記バンクごとの書込みアドレスに書き込まれる、メモリ制御装置。
【請求項3】
請求項1において、
前記読出しアドレスの有効性を示すイネーブル信号をさらに生成し、
前記セレクタ部は、前記イネーブル信号が生成されたバンクから読み出される前記要素データ列から前記選択すべき要素データを選択し、前記イネーブル信号が生成されないバンクから読み出される前記要素データ列から前記選択すべき要素データを選択しないメモリ制御装置。
【請求項4】
請求項2において、
前記第1の生成部は、前記書込みアドレスの有効性を示すイネーブル信号をさらに生成し、
前記セレクタ部は、前記イネーブル信号が生成されたバンクに書き込まれる前記要素データ列に前記書き込むべき要素データを挿入し、前記イネーブル信号が生成されないバンクに書き込まれる前記要素データ列に前記書き込むべき要素データを挿入しないメモリ制御装置。
【請求項5】
請求項2または4において、
前記セレクタ部は、前記書き込むべき要素データの書込みの許可・不許可を示すマスク信号に基づいて、前記書込みが許可された前記書き込むべき要素データを前記複数のバンクに書き込まれる要素データ列に挿入し、前記書込みが不許可の前記書込むべき要素データを前記複数のバンクに書き込まれる要素データ列に挿入しない、メモリ制御装置。
【請求項6】
読出しアドレスの入力に応答して複数の要素データを有する要素データ列が読み出される複数のバンクを有するメモリから、前記要素データ列を読み出すためのバンクごとの前記読出しアドレスを生成し、
前記要素データ列における選択すべき要素データの位置を示す位置信号と、前記選択すべき要素データをレジスタに格納する格納順序を示す順序信号とを生成し、
前記複数のバンクからそれぞれ読み出された前記要素データ列から前記位置信号に基づいて前記選択すべき要素データを選択し、当該選択した要素データを前記順序信号が示す格納順序で前記レジスタに格納し、
前記レジスタに格納された要素データは、前記格納順序に対応する単位でベクトルプロセッサに処理される、
メモリ制御方法。
【請求項7】
複数の要素データを有する要素データ列が、入力された書込みアドレスに書き込まれる複数のバンクを有するメモリに、前記要素データ列を書き込むためのバンクごとの書込みアドレスを生成し、
ベクトルプロセッサによる処理単位に対応する順序でレジスタに格納された、前記メモリに書き込むべき要素データの当該レジスタにおける格納理順序を示す順序信号と、前記複数のバンクにそれぞれ書き込まれる要素データ列に前記書き込むべき要素データを挿入する位置を示す位置信号とを生成し、
前記複数のバンクに書き込まれる要素データ列における前記位置信号が示す位置に、前記順序信号が示す順序で前記書き込むべき要素データを挿入し、
前記書き込むべき要素データ列が格納された要素データ列が、前記バンクごとの書込みアドレスに書き込まれる、
メモリ制御方法。
【請求項1】
読出しアドレスの入力に応答して複数の要素データを有する要素データ列が読み出される複数のバンクを有するメモリから、前記要素データ列を読み出すためのバンクごとの前記読出しアドレスを生成する第1の生成部と、
前記要素データ列における選択すべき要素データの位置を示す位置信号と、前記選択すべき要素データをレジスタに格納する格納順序を示す順序信号とを生成する第2の生成部と、
前記複数のバンクからそれぞれ読み出された前記要素データ列から前記位置信号に基づいて前記選択すべき要素データを選択し、当該選択した要素データを前記順序信号が示す格納順序で前記レジスタに格納するセレクタ部とを有し、
前記レジスタに格納された要素データは、前記格納順序でベクトルプロセッサに処理される、メモリ制御装置。
【請求項2】
複数の要素データを有する要素データ列が、入力された書込みアドレスに書き込まれる複数のバンクを有するメモリに、前記要素データ列を書き込むためのバンクごとの書込みアドレスを生成する第1の生成部と、
ベクトルプロセッサによる処理順序でレジスタに格納された、前記メモリに書き込むべき要素データの当該レジスタにおける格納順序を示す順序信号と、前記複数のバンクにそれぞれ書き込まれる要素データ列に前記書き込むべき要素データを挿入する位置を示す位置信号とを生成する第2の生成部と、
前記複数のバンクに書き込まれる要素データ列における前記位置信号が示す位置に、前記順序信号が示す順序で前記書き込むべき要素データを挿入するセレクタ部とを有し、
前記書き込むべき要素データ列が格納された要素データ列が、前記バンクごとの書込みアドレスに書き込まれる、メモリ制御装置。
【請求項3】
請求項1において、
前記読出しアドレスの有効性を示すイネーブル信号をさらに生成し、
前記セレクタ部は、前記イネーブル信号が生成されたバンクから読み出される前記要素データ列から前記選択すべき要素データを選択し、前記イネーブル信号が生成されないバンクから読み出される前記要素データ列から前記選択すべき要素データを選択しないメモリ制御装置。
【請求項4】
請求項2において、
前記第1の生成部は、前記書込みアドレスの有効性を示すイネーブル信号をさらに生成し、
前記セレクタ部は、前記イネーブル信号が生成されたバンクに書き込まれる前記要素データ列に前記書き込むべき要素データを挿入し、前記イネーブル信号が生成されないバンクに書き込まれる前記要素データ列に前記書き込むべき要素データを挿入しないメモリ制御装置。
【請求項5】
請求項2または4において、
前記セレクタ部は、前記書き込むべき要素データの書込みの許可・不許可を示すマスク信号に基づいて、前記書込みが許可された前記書き込むべき要素データを前記複数のバンクに書き込まれる要素データ列に挿入し、前記書込みが不許可の前記書込むべき要素データを前記複数のバンクに書き込まれる要素データ列に挿入しない、メモリ制御装置。
【請求項6】
読出しアドレスの入力に応答して複数の要素データを有する要素データ列が読み出される複数のバンクを有するメモリから、前記要素データ列を読み出すためのバンクごとの前記読出しアドレスを生成し、
前記要素データ列における選択すべき要素データの位置を示す位置信号と、前記選択すべき要素データをレジスタに格納する格納順序を示す順序信号とを生成し、
前記複数のバンクからそれぞれ読み出された前記要素データ列から前記位置信号に基づいて前記選択すべき要素データを選択し、当該選択した要素データを前記順序信号が示す格納順序で前記レジスタに格納し、
前記レジスタに格納された要素データは、前記格納順序に対応する単位でベクトルプロセッサに処理される、
メモリ制御方法。
【請求項7】
複数の要素データを有する要素データ列が、入力された書込みアドレスに書き込まれる複数のバンクを有するメモリに、前記要素データ列を書き込むためのバンクごとの書込みアドレスを生成し、
ベクトルプロセッサによる処理単位に対応する順序でレジスタに格納された、前記メモリに書き込むべき要素データの当該レジスタにおける格納理順序を示す順序信号と、前記複数のバンクにそれぞれ書き込まれる要素データ列に前記書き込むべき要素データを挿入する位置を示す位置信号とを生成し、
前記複数のバンクに書き込まれる要素データ列における前記位置信号が示す位置に、前記順序信号が示す順序で前記書き込むべき要素データを挿入し、
前記書き込むべき要素データ列が格納された要素データ列が、前記バンクごとの書込みアドレスに書き込まれる、
メモリ制御方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【公開番号】特開2012−137839(P2012−137839A)
【公開日】平成24年7月19日(2012.7.19)
【国際特許分類】
【出願番号】特願2010−288176(P2010−288176)
【出願日】平成22年12月24日(2010.12.24)
【出願人】(000005223)富士通株式会社 (25,993)
【出願人】(308014341)富士通セミコンダクター株式会社 (2,507)
【Fターム(参考)】
【公開日】平成24年7月19日(2012.7.19)
【国際特許分類】
【出願日】平成22年12月24日(2010.12.24)
【出願人】(000005223)富士通株式会社 (25,993)
【出願人】(308014341)富士通セミコンダクター株式会社 (2,507)
【Fターム(参考)】
[ Back to top ]