JP2015108972A - 演算装置、演算装置の決定方法及びプログラム - Google Patents

演算装置、演算装置の決定方法及びプログラム Download PDF

Info

Publication number
JP2015108972A
JP2015108972A JP2013251515A JP2013251515A JP2015108972A JP 2015108972 A JP2015108972 A JP 2015108972A JP 2013251515 A JP2013251515 A JP 2013251515A JP 2013251515 A JP2013251515 A JP 2013251515A JP 2015108972 A JP2015108972 A JP 2015108972A
Authority
JP
Japan
Prior art keywords
data
address
bit
addresses
banks
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2013251515A
Other languages
English (en)
Inventor
真紀子 伊藤
Makiko Ito
真紀子 伊藤
廣瀬 佳生
Yoshio Hirose
佳生 廣瀬
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2013251515A priority Critical patent/JP2015108972A/ja
Publication of JP2015108972A publication Critical patent/JP2015108972A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

【課題】複数のバンクに対してアクセスを分散させることができる演算装置を提供することを課題とする。
【解決手段】演算装置は、並列にアクセス可能な複数のバンク(BK1〜BK4)に分割されたメモリと、前記メモリの複数のアドレスのデータに並列にアクセス可能なプロセッサ(101)と、前記プロセッサ及び前記メモリの間に設けられ、前記プロセッサから入力する複数のアドレスが属する前記バンクをアクセス可能状態に制御する制御回路(CT1〜CTm)とを有し、前記複数のバンクは、複数のデータラインのアドレスがシーケンシャルではなく不規則に振り分けられている。
【選択図】図8

Description

本発明は、演算装置、演算装置の決定方法及びプログラムに関する。
マルチデータセットにシングル命令セットのマルチスレッドを実行するためのシステムが知られている(例えば、特許文献1参照)。システムバスに少なくとも1つの第1のプロセッシングユニットを含む。各プロセッシングユニットは、プロセッシングユニットバス、プロセッシングユニットバス上のダイレクトメモリアクセスコントローラ、プロセッシングユニットバス上のプロセッサ、プロセッシングユニットバス上の複数の第2のプロセッシングユニットを含む。各第2のプロセッシングユニットは、レジスタ、命令プロセッサ、及び複数の機能ユニットを含む。各機能ユニットは、ローカルストア、浮動小数点ユニット、及び整数ユニットを含み、システムバス上のローカル出入力チャネルを含み、システムバスに接続されるネットワークインターフェースを含み、システムバスに接続される共有メモリを含む。共有メモリは、第1のプロセッシングユニットの第2のプロセッシングユニットの機能ユニットによって複数のメモリ領域に区分される。機能ユニットの各々のデータは、メモリ領域の異なるロケーションに記録され、ロケーションは、更に、機能ユニットに基づいて相互に垂直にオフセットされている。メモリ領域は、第1のプロセッシングユニットの第2のプロセッシングユニットの機能ユニットと、プロセッシングユニットバス及びシステムバスを通じ、ローカルストア及びダイレクトメモリアクセスコントローラを介して通信を行う。
また、ホスト計算機のバスに複数の専用計算機を接続した情報処理システムが知られている(例えば、特許文献2参照)。専用計算機は、自己に割り当てられたアドレス空間に該当するバス上の情報を取得するバスインターフェイスと、ホスト計算機からバスを介して取得した構成情報に基づいて論理回路を構成するプログラマブルゲートアレイと、バスに接続された他の専用計算機と共通のアドレスを保持するアドレスレジスタとを備える。アドレスレジスタに共通のアドレスを保持する複数の専用計算機が、共通アドレスの構成情報をバス上から同時に取得して、プログラマブルゲートアレイの論理回路を構成する。
また、複数のメモリバンクを有するプロセッサが知られている(例えば、特許文献3参照)。読出しアドレス生成回路は、読出しレジスタ指定および読出しレジスタ走査方向に基づいて複数のメモリバンクに対して個別に読出しアドレスを供給する。読出し制御回路は、読出しアドレスに従って複数のメモリバンクから読み出された複数の読出しデータの配置を読出しレジスタ指定および読出しレジスタ変位に基づいて制御する。演算器は、読出し制御回路によって配置制御された複数の読出しデータを対象として複数の演算処理を行う。
特開2005−310167号公報 特開2005−190070号公報 特開2005−309499号公報
複数のメモリバンクのうちの1個のメモリバンクにアクセスが集中してしまうと、メモリに対するアクセス時間が長くなってしまう。
本発明の目的は、複数のバンクに対してアクセスを分散させることができる演算装置、演算装置の決定方法及びプログラムを提供することである。
演算装置は、並列にアクセス可能な複数のバンクに分割されたメモリと、前記メモリの複数のアドレスのデータに並列にアクセス可能なプロセッサと、前記プロセッサ及び前記メモリの間に設けられ、前記プロセッサから入力する複数のアドレスが属する前記バンクをアクセス可能状態に制御する制御回路とを有し、前記複数のバンクは、複数のデータラインのアドレスがシーケンシャルではなく不規則に振り分けられている。
複数のバンクに対してアクセスを分散させることができるので、メモリに対するアクセス時間を短くすることができる。
図1は、第1の実施形態による演算装置の構成例を示す図である。 図2は、インダイレクトロード命令の実行例を示す図である。 図3は、メモリインタリーブを説明するための図である。 図4は、インダイレクトロード及びメモリインタリーブの例を示す図である。 図5は、アドレス、バンク及びデータラインの関係を示す図である。 図6は、インダイレクトロード及びメモリインタリーブの他の例を示す図である。 図7は、アドレス、バンク及びデータラインの関係を示す図である。 図8は、第1の実施形態による演算装置の構成例を示す図である。 図9は、データラインの2進数下位8ビットアドレスとバンクとの対応関係を示す図である。 図10は、図8の演算装置のインダイレクトロードの例を示す図である。 図11は、アドレス、バンク及びデータラインの関係を示す図である。 図12は、図8の演算装置の具体的な構成例を示す図である。 図13は、図12の制御回路の構成例を示す図である。 図14(A)〜(D)は、バンク選択回路の論理回路を示すカルノー図である。 図15は、第2の実施形態による演算装置の構成例を示す図である。 図16は、データラインのアドレスとバンクとの対応関係を示す図である。 図17は、第2の実施形態による制御回路の構成例を示す図である。 図18は、図17のビット切り出し回路の構成例を示す図である。 図19は、ビット数を決定するための処理方法を示すフローチャートである。 図20は、図19のビット数決定プログラムの処理例を示すフローチャートである。 図21は、図20のサイクル数を求める処理を示すフローチャートである。 図22は、図13のバイト選択信号生成回路の入出力を示す図である。
(第1の実施形態)
図1は、第1の実施形態による演算装置の構成例を示す図である。演算装置は、プロセッサ101、命令ランダムアクセスメモリ(RAM:Random Access Memory)102及びデータRAM103を有する。プロセッサ101は、プログラムカウンタ(PC)111、デコーダ112、スカラレジスタファイル113、ベクトルレジスタファイル114、加算器115及び算術論理ユニット(ALU:Arithmetic Logic Unit)118を有する。スカラレジスタファイル113は、一次元配列データを記憶する複数のレジスタを有する。ベクトルレジスタファイル114は、2次元配列データを記憶する複数のレジスタを有する。命令RAM102は、命令を記憶する。データRAM103は、データを記憶する。
プロセッサ101は、単一命令複数データ(SIMD:Single Instruction Multiple Data)型プロセッサであり、1個の命令で複数のデータを処理する。SIMD型プロセッサ101は、無線通信処理又はや動画像のデコードなど、大量のデータを高速に処理することができる。プロセッサ101は、プログラムカウンタ111が示すアドレスの命令を命令RAM102から読み出す。デコーダ112は、命令RAM102から読み出した命令をデコードし、スカラレジスタファイル113のインデックス及び/又はベクトルレジスタファイル114のインデックスを指定する。
スカラレジスタファイル113は、指定されたインデックスのレジスタの値を例えばベースアドレスとしてレジスタsに出力する。レジスタsは、ベースアドレスを記憶する。ベクトルレジスタファイル114は、指定されたインデックスのm個のレジスタの値をm個のオフセットアドレスとしてm個のレジスタvrに出力する。m個のレジスタvrは、m個のオフセットアドレスを記憶する。m個の加算器115は、それぞれ、レジスタsのベースアドレスに対して、m個のレジスタvrのオフセットアドレスを加算する。プロセッサ101は、その加算されたm個のアドレスをデータRAM103に出力し、m個のアドレスのnビットデータをデータRAM103からロードする。ロードされたm個のデータは、m個のレジスタvtにストアされる。8個のレジスタvtのデータは、例えば、ベクトルレジスタファイル114の指定されたインデックスのm個のレジスタに書き込まれる。
また、デコーダ112は、ベクトルレジスタファイル114の2個のインデックスを指定することができる。ベクトルレジスタファイル114は、デコーダ112により指定された第1のm個のレジスタの値をm個のレジスタ116に出力し、デコーダ112により指定された第2のm個のレジスタの値をm個のレジスタ117に出力する。m個のALU118は、m個のレジスタ116の値及びm個のレジスタ117の値に対して演算を行う。プロセッサ101は、演算結果のm個のnビットデータをデータRAM103にストアしたり、m個のレジスタvtにストアすることができる。m個のレジスタvtのデータは、ベクトルレジスタファイル114の指定されたインデックスにストアすることができる。
図2は、インダイレクトロード命令の実行例を示す図である。図1において、mが8であり、nが16である場合を例に説明する。レジスタsのベースアドレスは、例えば、「800000(16進数)」である。8個のオフセットアドレスのレジスタvrは、レジスタvr[0]=7(10進数)、レジスタvr[1]=3(10進数)、レジスタvr[2]=2(10進数)、レジスタvr[3]=5(10進数)、レジスタvr[4]=6(10進数)、レジスタvr[5]=4(10進数)、レジスタvr[6]=1(10進数)、レジスタvr[7]=1(10進数)を有する。データRAM103は、各アドレスに2バイトデータを記憶する。
加算器115は、s+2×vrを演算する。なお、レジスタvrの出力ビット線を1ビットシフトして加算器115に入力することにより、2×vrを実現できる。
第1の加算器115は、s+2×vr[0]を演算し、アドレス「80000e(16進数)」を出力する。プロセッサ101は、データRAM103からアドレス「80000e(16進数)」のデータ「0080」をロードし、結果データレジスタvt[0]に格納する。
第2の加算器115は、s+2×vr[1]を演算し、アドレス「800006(16進数)」を出力する。プロセッサ101は、データRAM103からアドレス「800006(16進数)」のデータ「0008」をロードし、結果データレジスタvt[1]に格納する。
第3の加算器115は、s+2×vr[2]を演算し、アドレス「800004(16進数)」を出力する。プロセッサ101は、データRAM103からアドレス「800004(16進数)」のデータ「0004」をロードし、結果データレジスタvt[2]に格納する。
第4の加算器115は、s+2×vr[3]を演算し、アドレス「80000a(16進数)」を出力する。プロセッサ101は、データRAM103からアドレス「80000a(16進数)」のデータ「0020」をロードし、結果データレジスタvt[3]に格納する。
第5の加算器115は、s+2×vr[4]を演算し、アドレス「80000c(16進数)」を出力する。プロセッサ101は、データRAM103からアドレス「80000c(16進数)」のデータ「0040」をロードし、結果データレジスタvt[4]に格納する。
第6の加算器115は、s+2×vr[5]を演算し、アドレス「800008(16進数)」を出力する。プロセッサ101は、データRAM103からアドレス「800008(16進数)」のデータ「0010」をロードし、結果データレジスタvt[5]に格納する。
第7の加算器115は、s+2×vr[6]を演算し、アドレス「800002(16進数)」を出力する。プロセッサ101は、データRAM103からアドレス「800002(16進数)」のデータ「0002」をロードし、結果データレジスタvt[6]に格納する。
第8の加算器115は、s+2×vr[7]を演算し、アドレス「800002(16進数)」を出力する。プロセッサ101は、データRAM103からアドレス「800002(16進数)」のデータ「0002」をロードし、結果データレジスタvt[7]に格納する。
8個のレジスタvt[0]〜vt[7]の結果データは、例えば、ベクトルレジスタ114の指定されたインデックスの8個のレジスタに格納される。上記のように、プロセッサ101は、データRAM103の8個のアドレスのデータに対して並列にアクセス可能である。
図3は、メモリインタリーブを説明するための図である。図1のデータRAM103は、並列にアクセス可能な複数のバンクBK1〜BK4に分割されている。mが8の場合、バンクBK1〜BK4は、連続する8個のアドレスのデータに対して同時にアクセスできるように設計される。例えば、プロセッサ101のレジスタの各データのサイズを2バイトとすると、バンクBK1〜BK4は、それぞれ、連続するアドレスの16バイトデータを1個のデータラインとして、16バイトのデータライン単位でロードするインタフェースを持つ。この場合、16バイトのデータライン内のアドレスであれば1サイクルで複数のアドレスのデータをロードできる。ただし、複数のアドレスが異なるデータラインに属する場合には、複数サイクルで複数のアドレスのデータをロードする。
第1のバンクBK1は、2進数アドレスの4ビット目が「0」であり、5ビット目が「0」であるデータラインのデータを記憶する。すなわち、図4に示すように、第1のバンクBK1は、アドレス「800000(16進数)」、「800040(16進数)」等のデータラインのデータを記憶する。
第2のバンクBK2は、2進数アドレスの4ビット目が「1」であり、5ビット目が「0」であるデータラインのデータを記憶する。すなわち、図4に示すように、第2のバンクBK2は、アドレス「800010(16進数)」、「800050(16進数)」等のデータラインのデータを記憶する。
第3のバンクBK3は、2進数アドレスの4ビット目が「0」であり、5ビット目が「1」であるデータラインのデータを記憶する。すなわち、図4に示すように、第3のバンクBK3は、アドレス「800020(16進数)」、「800060(16進数)」等のデータラインのデータを記憶する。
第4のバンクBK4は、2進数アドレスの4ビット目が「1」であり、5ビット目が「1」であるデータラインのデータを記憶する。すなわち、図4に示すように、第4のバンクBK4は、アドレス「800030(16進数)」、「800070(16進数)」等のデータラインのデータを記憶する。
図4はインダイレクトロード及びメモリインタリーブの例を示す図であり、図5はアドレス、バンク及びデータラインの関係を示す図である。レジスタsは、ベースアドレス「800000(16進数)」を記憶する。レジスタvr[0]は、オフセットアドレス「15(10進数)」を記憶する。レジスタvr[1]は、オフセットアドレス「31(10進数)」を記憶する。レジスタvr[2]は、オフセットアドレス「20(10進数)」を記憶する。レジスタvr[3]は、オフセットアドレス「0(10進数)」を記憶する。レジスタvr[4]は、オフセットアドレス「1(10進数)」を記憶する。レジスタvr[5]は、オフセットアドレス「2(10進数)」を記憶する。レジスタvr[6]は、オフセットアドレス「8(10進数)」を記憶する。レジスタvr[7]は、オフセットアドレス「9(10進数)」を記憶する。
データラインLN11〜LN41等は、それぞれ、16バイトのデータを含む。データラインLN11は、アドレス「800000(16進数)」〜「80000e(16進数)」の8個の2バイトデータを含む。データラインLN21は、アドレス「800010(16進数)」〜「80001e(16進数)」の8個の2バイトデータを含む。データラインLN31は、アドレス「800020(16進数)」〜「80002e(16進数)」の8個の2バイトデータを含む。データラインLN41は、アドレス「800030(16進数)」〜「80003e(16進数)」の8個の2バイトデータを含む。
データラインLN11は、アドレス「800000(16進数)」の16バイトデータラインであり、第1のバンクBK1に格納される。データラインLN21は、アドレス「800010(16進数)」の16バイトデータラインであり、データラインLN11に続くデータラインであり、第2のバンクBK2に格納される。データラインLN31は、アドレス「800020(16進数)」の16バイトデータラインであり、データラインLN21に続くデータラインであり、第3のバンクBK3に格納される。データラインLN41は、アドレス「800030(16進数)」の16バイトデータラインであり、データラインLN31に続くデータラインであり、第4のバンクBK4に格納される。
同様に、アドレス「800040(16進数)」の16バイトデータラインは、アドレス「800030(16進数)」のデータラインに続くデータラインであり、第1のバンクBK1に格納される。アドレス「800050(16進数)」の16バイトデータラインは、アドレス「800040(16進数)」のデータラインに続くデータラインであり、第2のバンクBK2に格納される。アドレス「800060(16進数)」の16バイトデータラインは、アドレス「800050(16進数)」のデータラインに続くデータラインであり、第3のバンクBK3に格納される。アドレス「800070(16進数)」の16バイトデータラインは、アドレス「800060(16進数)」のデータラインに続くデータラインであり、第4のバンクBK4に格納される。以上のように、複数のバンクBK1〜BK4は、複数のデータラインのアドレスがシーケンシャルに振り分けられる。
第1の加算器115は、s+2×vr[0]を演算し、アドレス「80001e(16進数)」を出力する。図5に示すように、アドレス「80001e(16進数)」のデータは、第2のバンクBK2のアドレス「800010(16進数)」のデータラインLN21に含まれるデータである。
第2の加算器115は、s+2×vr[1]を演算し、アドレス「80003e(16進数)」を出力する。図5に示すように、アドレス「80003e(16進数)」のデータは、第4のバンクBK4のアドレス「800030(16進数)」のデータラインLN41に含まれるデータである。
第3の加算器115は、s+2×vr[2]を演算し、アドレス「800028(16進数)」を出力する。図5に示すように、アドレス「800028(16進数)」のデータは、第3のバンクBK3のアドレス「800020(16進数)」のデータラインLN31に含まれるデータである。
第4の加算器115は、s+2×vr[3]を演算し、アドレス「800000(16進数)」を出力する。図5に示すように、アドレス「800000(16進数)」のデータは、第1のバンクBK1のアドレス「800000(16進数)」のデータラインLN11に含まれるデータである。
第5の加算器115は、s+2×vr[4]を演算し、アドレス「800002(16進数)」を出力する。図5に示すように、アドレス「800002(16進数)」のデータは、第1のバンクBK1のアドレス「800000(16進数)」のデータラインLN11に含まれるデータである。
第6の加算器115は、s+2×vr[5]を演算し、アドレス「800004(16進数)」を出力する。図5に示すように、アドレス「800004(16進数)」のデータは、第1のバンクBK1のアドレス「800000(16進数)」のデータラインLN11に含まれるデータである。
第7の加算器115は、s+2×vr[6]を演算し、アドレス「800010(16進数)」を出力する。図5に示すように、アドレス「800010(16進数)」のデータは、第2のバンクBK2のアドレス「800010(16進数)」のデータラインLN21に含まれるデータである。
第8の加算器115は、s+2×vr[7]を演算し、アドレス「800012(16進数)」を出力する。図5に示すように、アドレス「800012(16進数)」のデータは、第2のバンクBK2のアドレス「800010(16進数)」のデータラインLN21に含まれるデータである。
バンクBK1〜BK4は、それぞれ、1サイクルで1個のデータラインをロードすることができ、データライン単位でデータを入出力することができる。また、プロセッサ101は、バンクBK1〜BK4の各データラインを並列にロードすることができる。具体的には、プロセッサ101は、第1のバンクBK1のデータラインLN11、第2のバンクBK2のデータラインLN21、第3のバンクBK3のデータラインLN31及び第4のバンクBK4のデータラインLN41を1サイクルで並列にロードする。
次に、プロセッサ101は、ロードしたデータラインLN21内のアドレス「80001e(16進数)」のデータを結果データレジスタvt[0]に格納する。また、プロセッサ101は、ロードしたデータラインLN41内のアドレス「80003e(16進数)」のデータを結果データレジスタvt[1]に格納する。また、プロセッサ101は、ロードしたデータラインLN31内のアドレス「800028(16進数)」のデータを結果データレジスタvt[2]に格納する。また、プロセッサ101は、ロードしたデータラインLN11内のアドレス「800000(16進数)」のデータを結果データレジスタvt[3]に格納する。また、プロセッサ101は、ロードしたデータラインLN11内のアドレス「800002(16進数)」のデータを結果データレジスタvt[4]に格納する。また、プロセッサ101は、ロードしたデータラインLN11内のアドレス「800004(16進数)」のデータを結果データレジスタvt[5]に格納する。また、プロセッサ101は、ロードしたデータラインLN21内のアドレス「800010(16進数)」のデータを結果データレジスタvt[6]に格納する。また、プロセッサ101は、ロードしたデータラインLN21内のアドレス「800012(16進数)」のデータを結果データレジスタvt[7]に格納する。
以上のように、8個のレジスタvr[0]〜vr[7]に基づく8個のアドレスのデータのロードがバンクBK1〜BK4に分散すると、1サイクルで全データをロードすることができ、ロード時間を短くすることができる。
図6はインダイレクトロード及びメモリインタリーブの他の例を示す図であり、図7はアドレス、バンク及びデータラインの関係を示す図である。レジスタsは、ベースアドレス「800000(16進数)」を記憶する。レジスタvr[0]は、オフセットアドレス「0(10進数)」を記憶する。レジスタvr[1]は、オフセットアドレス「33(10進数)」を記憶する。レジスタvr[2]は、オフセットアドレス「66(10進数)」を記憶する。レジスタvr[3]は、オフセットアドレス「99(10進数)」を記憶する。レジスタvr[4]は、オフセットアドレス「132(10進数)」を記憶する。レジスタvr[5]は、オフセットアドレス「165(10進数)」を記憶する。レジスタvr[6]は、オフセットアドレス「198(10進数)」を記憶する。レジスタvr[7]は、オフセットアドレス「231(10進数)」を記憶する。
第1の加算器115は、s+2×vr[0]を演算し、アドレス「800000(16進数)」を出力する。図7に示すように、アドレス「800000(16進数)」のデータは、第1のバンクBK1のアドレス「800000(16進数)」のデータラインに含まれるデータである。
第2の加算器115は、s+2×vr[1]を演算し、アドレス「800042(16進数)」を出力する。図7に示すように、アドレス「800042(16進数)」のデータは、第1のバンクBK1のアドレス「800040(16進数)」のデータラインに含まれるデータである。
第3の加算器115は、s+2×vr[2]を演算し、アドレス「800086(16進数)」を出力する。図7に示すように、アドレス「800086(16進数)」のデータは、第1のバンクBK1のアドレス「800080(16進数)」のデータラインに含まれるデータである。
第4の加算器115は、s+2×vr[3]を演算し、アドレス「8000c6(16進数)」を出力する。図7に示すように、アドレス「8000c6(16進数)」のデータは、第1のバンクBK1のアドレス「8000c0(16進数)」のデータラインに含まれるデータである。
第5の加算器115は、s+2×vr[4]を演算し、アドレス「800108(16進数)」を出力する。図7に示すように、アドレス「800108(16進数)」のデータは、第1のバンクBK1のアドレス「800100(16進数)」のデータラインに含まれるデータである。
第6の加算器115は、s+2×vr[5]を演算し、アドレス「80014a(16進数)」を出力する。図7に示すように、アドレス「80014a(16進数)」のデータは、第1のバンクBK1のアドレス「800140(16進数)」のデータラインに含まれるデータである。
第7の加算器115は、s+2×vr[6]を演算し、アドレス「80018c(16進数)」を出力する。図7に示すように、アドレス「80018c(16進数)」のデータは、第1のバンクBK1のアドレス「800180(16進数)」のデータラインに含まれるデータである。
第8の加算器115は、s+2×vr[7]を演算し、アドレス「8001ce(16進数)」を出力する。図7に示すように、アドレス「8001ce(16進数)」のデータは、第1のバンクBK1のアドレス「8001c0(16進数)」のデータラインに含まれるデータである。
バンクBK1〜BK4は、それぞれ、1サイクルで1個のデータラインしかロードできない。まず、プロセッサ101は、第1のバンクBK1のアドレス「800000(16進数)」のデータラインをロードし、アドレス「800000(16進数)」のデータライン内のアドレス「800000(16進数)」のデータを結果データレジスタvt[0]に格納する。次に、プロセッサ101は、第1のバンクBK1のアドレス「800040(16進数)」のデータラインをロードし、アドレス「800040(16進数)」のデータライン内のアドレス「800042(16進数)」のデータを結果データレジスタvt[1]に格納する。次に、プロセッサ101は、第1のバンクBK1のアドレス「800080(16進数)」のデータラインをロードし、アドレス「800080(16進数)」のデータライン内のアドレス「800086(16進数)」のデータを結果データレジスタvt[2]に格納する。次に、プロセッサ101は、第1のバンクBK1のアドレス「8000c0(16進数)」のデータラインをロードし、アドレス「8000c0(16進数)」のデータライン内のアドレス「8000c6(16進数)」のデータを結果データレジスタvt[3]に格納する。次に、プロセッサ101は、第1のバンクBK1のアドレス「800100(16進数)」のデータラインをロードし、アドレス「800100(16進数)」のデータライン内のアドレス「800108(16進数)」のデータを結果データレジスタvt[4]に格納する。次に、プロセッサ101は、第1のバンクBK1のアドレス「800140(16進数)」のデータラインをロードし、アドレス「800140(16進数)」のデータライン内のアドレス「80014a(16進数)」のデータを結果データレジスタvt[5]に格納する。次に、プロセッサ101は、第1のバンクBK1のアドレス「800180(16進数)」のデータラインをロードし、アドレス「800180(16進数)」のデータライン内のアドレス「80018c(16進数)」のデータを結果データレジスタvt[6]に格納する。次に、プロセッサ101は、第1のバンクBK1のアドレス「8001c0(16進数)」のデータラインをロードし、アドレス「8001c0(16進数)」のデータライン内のアドレス「8001ce(16進数)」のデータを結果データレジスタvt[7]に格納する。
以上のように、8個のレジスタvr[0]〜vr[7]に基づく8個のアドレスのデータのロードが第1のバンクBK1に集中すると、8サイクルのロードが必要になり、ロード時間が長くなってしまう。以上のように、一定間隔のアドレスのデータをロードする場合には、1個のバンクへのアクセスが集中し易く、アクセス時間が長くなってしまう。この課題を解決するための実施形態を、以下、説明する。
図8は、第1の実施形態による演算装置の構成例を示す図である。演算装置は、プロセッサ101、制御回路CT、調停回路AR、第1のバンクBK1、第2のバンクBK2、第3のバンクBK3及び第4のバンクBK4を有する。プロセッサ101は、図1のプロセッサ101と同じ構成を有し、図1と同様に、命令RAM102内の命令を読み出してデコードする。バンクBK1〜BK4は、図1のデータRAM103に含まれる。データRAM103は、並列にアクセス可能な複数のバンクBK1〜BK4に分割されている。
第1のバンクBK1は、2進数アドレスの下位8ビットが「00000000」、「01110000」、「10100000」及び「11010000」のデータラインを記憶する。すなわち、図10に示すように、第1のバンクBK1は、アドレス「800000(16進数)」、「800070(16進数)」、「8000a0(16進数)」、「8000d0(16進数)」等のデータラインのデータを記憶する。
第2のバンクBK2は、2進数アドレスの下位8ビットが「00010000」、「01000000」、「10110000」及び「11100000」のデータラインを記憶する。すなわち、図10に示すように、第2のバンクBK2は、アドレス「800010(16進数)」、「800040(16進数)」、「8000b0(16進数)」、「8000e0(16進数)」等のデータラインのデータを記憶する。
第3のバンクBK3は、2進数アドレスの下位8ビットが「00100000」、「01010000」、「10000000」及び「11110000」のデータラインを記憶する。すなわち、図10に示すように、第3のバンクBK3は、アドレス「800020(16進数)」、「800050(16進数)」、「800080(16進数)」、「8000f0(16進数)」等のデータラインのデータを記憶する。
第4のバンクBK4は、2進数アドレスの下位8ビットが「00110000」、「01100000」、「10010000」及び「11000000」のデータラインを記憶する。すなわち、図10に示すように、第4のバンクBK4は、アドレス「800030(16進数)」、「800060(16進数)」、「800090(16進数)」、「8000c0(16進数)」等のデータラインのデータを記憶する。
図9は、データラインの2進数下位8ビットアドレスとバンクBK1〜BK4との対応関係を示す図である。図3の演算装置では、複数のバンクBK1〜BK4は、複数のデータラインのアドレスがシーケンシャルに振り分けられている。これに対し、図8の演算装置では、複数のバンクBK1〜BK4は、複数のデータラインのアドレスがシーケンシャルではなく、アドレスaddr[6]及びaddr[7]が同一の4つのラインが、バンクBK1〜KB4に不規則に振り分けられている。
具体的には、2進数下位8ビットのデータラインアドレス「00000000」、「00010000」、「00100000」及び「00110000」は、バンクBK1〜BK4の中で相互に異なるバンクに振り分けられる。同様に、2進数下位8ビットのデータラインアドレス「01000000」、「01010000」、「01100000」及び「01110000」は、バンクBK1〜BK4の中で相互に異なるバンクに振り分けられる。同様に、2進数下位8ビットのデータラインアドレス「10000000」、「10010000」、「10100000」及び「10110000」は、バンクBK1〜BK4の中で相互に異なるバンクに振り分けられる。同様に、2進数下位8ビットのデータラインアドレス「11000000」、「11010000」、「11100000」及び「11110000」は、バンクBK1〜BK4の中で相互に異なるバンクに振り分けられる。図8の演算装置は、図3の演算装置に対して、上記の条件下で、データラインのアドレスとバンクBK1〜BK4との対応関係を不規則にシャッフルしたものである。
図10は図8の演算装置のインダイレクトロードの例を示す図であり、図11はアドレス、バンク及びデータラインの関係を示す図である。レジスタs及びレジスタvr[0]〜vr[7]の記憶内容は、図6と同じである。
第1の加算器115は、s+2×vr[0]を演算し、アドレス「800000(16進数)」を出力する。図11に示すように、アドレス「800000(16進数)」のデータは、第1のバンクBK1のアドレス「800000(16進数)」のデータラインLN11に含まれるデータである。
第2の加算器115は、s+2×vr[1]を演算し、アドレス「800042(16進数)」を出力する。図11に示すように、アドレス「800042(16進数)」のデータは、第2のバンクBK2のアドレス「800040(16進数)」のデータラインLN21に含まれるデータである。
第3の加算器115は、s+2×vr[2]を演算し、アドレス「800086(16進数)」を出力する。図11に示すように、アドレス「800086(16進数)」のデータは、第3のバンクBK3のアドレス「800080(16進数)」のデータラインLN31に含まれるデータである。
第4の加算器115は、s+2×vr[3]を演算し、アドレス「8000c6(16進数)」を出力する。図11に示すように、アドレス「8000c6(16進数)」のデータは、第4のバンクBK4のアドレス「8000c0(16進数)」のデータラインLN41に含まれるデータである。
第5の加算器115は、s+2×vr[4]を演算し、アドレス「800108(16進数)」を出力する。図11に示すように、アドレス「800108(16進数)」のデータは、第1のバンクBK1のアドレス「800100(16進数)」のデータラインLN12に含まれるデータである。
第6の加算器115は、s+2×vr[5]を演算し、アドレス「80014a(16進数)」を出力する。図11に示すように、アドレス「80014a(16進数)」のデータは、第2のバンクBK2のアドレス「800140(16進数)」のデータラインLN22に含まれるデータである。
第7の加算器115は、s+2×vr[6]を演算し、アドレス「80018c(16進数)」を出力する。図11に示すように、アドレス「80018c(16進数)」のデータは、第3のバンクBK3のアドレス「800180(16進数)」のデータラインLN32に含まれるデータである。
第8の加算器115は、s+2×vr[7]を演算し、アドレス「8001ce(16進数)」を出力する。図11に示すように、アドレス「8001ce(16進数)」のデータは、第4のバンクBK4のアドレス「8001c0(16進数)」のデータラインLN42に含まれるデータである。
まず、プロセッサ101は、第1のバンクBK1のアドレス「800000(16進数)」のデータラインLN11、第2のバンクBK2のアドレス「800040(16進数)」のデータラインLN21、第3のバンクBK3のアドレス「800080(16進数)」のデータラインLN31、及び第4のバンクBK4のアドレス「8000c0(16進数)」のデータラインLN41を1サイクルで並列にロードする。次に、プロセッサ101は、データラインLN11内のアドレス「800000(16進数)」のデータを結果データレジスタvt[0]に格納する。また、プロセッサ101は、データラインLN21内のアドレス「800042(16進数)」のデータを結果データレジスタvt[1]に格納する。また、プロセッサ101は、データラインLN31内のアドレス「800086(16進数)」のデータを結果データレジスタvt[2]に格納する。また、プロセッサ101は、データラインLN41内のアドレス「8000c6(16進数)」のデータを結果データレジスタvt[3]に格納する。
次に、プロセッサ101は、第1のバンクBK1のアドレス「800100(16進数)」のデータラインLN12、第2のバンクBK2のアドレス「800140(16進数)」のデータラインLN22、第3のバンクBK3のアドレス「800180(16進数)」のデータラインLN32、及び第4のバンクBK4のアドレス「8001c0(16進数)」のデータラインLN42を1サイクルで並列にロードする。次に、プロセッサ101は、データラインLN12内のアドレス「800108(16進数)」のデータを結果データレジスタvt[4]に格納する。また、プロセッサ101は、データラインLN22内のアドレス「80014a(16進数)」のデータを結果データレジスタvt[5]に格納する。また、プロセッサ101は、データラインLN32内のアドレス「80018c(16進数)」のデータを結果データレジスタvt[6]に格納する。また、プロセッサ101は、データラインLN42内のアドレス「8001ce(16進数)」のデータを結果データレジスタvt[7]に格納する。
以上のように、8個のレジスタvr[0]〜vr[7]に基づく8個のアドレスのデータのロードが4個のバンクBK1〜BK4に分散し、2サイクルの短時間でロードすることができる。
図12は、図8の演算装置の具体的な構成例を示す図である。図1のデータRAM103は、並列にアクセス可能な複数のバンクBK1〜BK4に分割されている。複数のバンクBK1〜BK4は、上記のように、複数のデータラインのアドレスがシーケンシャルではなく不規則に振り分けられている。プロセッサ101は、データRAM103の複数のアドレスのデータに並列にアクセス可能である。m個の制御回路CT1〜CTmは、プロセッサ101及びデータRAM103の間に設けられ、図9に示すように、プロセッサ101から入力するm個のアドレスが属するバンクBK1〜BK4をアクセス可能状態に制御する。調停回路AR1〜AR4の数は、バンクBK1〜BK4の数と同じである。調停回路AR1〜AR4は、それぞれ、バンクBK1〜BK4に対応して設けられる。また、調停回路AR1〜AR4は、制御回路CT1〜CTm及びバンクBK1〜BK4の間に設けれ、複数のバンクBK1〜BK4のアクセスを調停する。プロセッサ101が並列に出力するアドレスの数mは、バンクBK1〜BK4の数よりも多いことが好ましい。
図13は、図12の制御回路CT1の構成例を示す図である。制御回路CT1は、プロセッサ101に対して、レジスタvr[0]を基に、アドレスaddrを入力し、ストアデータdata_inを入力し、書き込み制御信号wrを入力し、ロードデータdata_outを出力する。書き込み制御信号wrは、例えば、「1」がストアデータdata_inのストアを示し、「0」がロードデータdata_outのロードを示す。
また、制御回路CT1は、第1の調停回路AR1に対して、アドレスaddr0を出力し、ストアデータdata_in0を出力し、ロードデータdata_out0を入力し、書き込み制御信号wr0を出力し、バイトイネーブル信号byte_en0を出力する。
また、制御回路CT1は、第2の調停回路AR2に対して、アドレスaddr1を出力し、ストアデータdata_in1を出力し、ロードデータdata_out1を入力し、書き込み制御信号wr1を出力し、バイトイネーブル信号byte_en1を出力する。
また、制御回路CT1は、第3の調停回路AR3に対して、アドレスaddr2を出力し、ストアデータdata_in2を出力し、ロードデータdata_out2を入力し、書き込み制御信号wr2を出力し、バイトイネーブル信号byte_en2を出力する。
また、制御回路CT1は、第4の調停回路AR4に対して、アドレスaddr3を出力し、ストアデータdata_in3を出力し、ロードデータdata_out3を入力し、書き込み制御信号wr3を出力し、バイトイネーブル信号byte_en3を出力する。
書き込み制御信号wr0〜wr3は、書き込み制御信号wrと同じである。アドレスaddr0〜addr3は、nビットアドレスaddrのうちの6ビット目からn−1ビット目のアドレスaddr[6]〜addr[n−1]である。ストアデータdata_in0〜data_in3は、ストアデータdata_inと同じである。
バンク選択回路1301は、図9に従い、nビットアドレスaddrのうちの4ビット目から7ビット目のアドレスaddr[4]〜addr[7]に応じて、イネーブル信号en0〜en3のうちのいずれか1つを「1」にする。バイト選択信号生成回路1311は、図22に示すように、nビットアドレスaddrのうちの1ビット目から3ビット目のアドレスaddr[1]〜addr[3]に応じて、出力信号を出力する。論理積(AND)回路1307〜1310は、それぞれ、バイト選択信号生成回路1311の出力信号とイネーブル信号en0〜en3の論理積信号を、バイトイネーブル信号byte_en0〜byte_en3として出力する。
例えば、バンク選択回路1301は、図14(A)〜(D)のカルノー図で表現される論理回路であり、4ビットアドレスaddr[4]〜addr[7]を入力し、4ビットのイネーブル信号en0〜en3を出力する。イネーブル信号en0〜en3の「1」は、それぞれ、バンクBK1〜BK4がイネーブル状態であることを示す。イネーブル信号en0〜en3の「0」は、それぞれ、バンクBK1〜BK4がイネーブル状態でないことを示す。図14(A)はイネーブル信号en0のカルノー図であり、図14(B)はイネーブル信号en1のカルノー図であり、図14(C)はイネーブル信号en2のカルノー図であり、図14(D)はイネーブル信号en3のカルノー図である。
図13において、バンクBK1〜BK4は、それぞれ、書き込み制御信号wr0〜wr3が「0」の場合には、アドレスaddr0〜addr3のデータラインからバイトイネーブル信号byte_en0〜byte_en3が「1」となっているビットに対応する位置のデータをロードし、ロードデータdata_out0〜data_out3を出力する。
また、バンクBK1〜BK4は、それぞれ、書き込み制御信号wr0〜wr3が「1」の場合には、アドレスaddr0〜addr3のデータラインのバイトイネーブル信号byte_en0〜byte_en3が「1」となっているビットに対応する位置にストアデータdata_in0〜data_in3のデータをストアする。
論理積(AND)回路1302は、イネーブル信号en0及びロードデータdata_out0の論理積信号を出力する。論理積回路1303は、イネーブル信号en1及びロードデータdata_out1の論理積信号を出力する。論理積回路1304は、イネーブル信号en2及びロードデータdata_out2の論理積信号を出力する。論理積回路1305は、イネーブル信号en3及びロードデータdata_out3の論理積信号を出力する。論理和(OR)回路1306は、論理積回路1302〜1305の出力信号の論理和信号をロードデータdata_outとして出力する。すなわち、イネーブル状態になっている1個のバンクのロードデータのみがプロセッサ101に出力される。
以上、制御回路CT1について説明したが、制御回路CT2〜CTmも制御回路CT1と同様の構成を有する。ただし、制御回路CT2〜CTmは、それぞれ、プロセッサ101に対して、レジスタvr[1]〜vr[m−1]に応じた情報を入出力する。
図12の調停回路AR1〜AR4は、それぞれ、制御回路CT1〜CTmからバンクBK1〜BK4の情報を入力し、それらの情報を調停し、各バンクBK1〜BK4に対していずれか1個のデータラインのアドレスをバンクBK1〜BK4に出力する。制御回路CTiのデータラインアドレスにアクセスする場合、制御回路CTiの書き込み制御信号wr0〜wr3が「0」のときには、バイトイネーブル信号byte_en信号が「1」となっているバイト位置のデータを切り出して制御回路CTiに返す。また、書き込み制御信号wr0〜wr3が「1」のときには、バイトイネーブルbyte_en信号が「1」となっているバイト位置に制御回路CTiからのデータをストアする。図10の場合、調停回路AR1〜AR4は、バンクBK1〜BK4に対して、第1のサイクルでは、データラインLN11、LN21、LN31及びLN41をロードし、その次の第2のサイクルでは、データラインLN12、LN22、LN32及びLN42をロードする。
本実施形態によれば、複数のバンクBK1〜BK4は、複数のデータラインのアドレスがシーケンシャルではなく不規則に振り分けられているので、複数のバンクBK1〜BK4に対してアクセスを分散させることができ、データRAN103のアクセス時間を短縮することができる。
(第2の実施形態)
図15は、第2の実施形態による演算装置の構成例を示す図である。図15の演算装置は、図8の演算装置に対して、2ビット1505の位置を可変にしたものである。以下、本実施形態が第1の実施形態と異なる点を説明する。2ビット1504は、図8の4ビット目及び5ビット目のアドレスaddr[4]及びaddr[5]に対応する。2ビット1505は、図8の6ビット目及び7ビット目のアドレスaddr[6]及びaddr[7]に対応する。ビット1501は、2ビット1504及び2ビット1505の間に設けられる。ビット1501の数は、可変である。制御回路CTは、切り替えレジスタ1502及びビット数指定レジスタファイル1503を有する。ビット数指定レジスタファイル1503は、ビット1501の数として指定可能な0以上の整数を記憶する複数のレジスタを有し、切り替えレジスタ1502の値に応じたインデックスのレジスタの値を出力する。切り替えレジスタ1502の値を書き換えることにより、ビット1501の数を変更することができる。
なお、ビット数指定レジスタファイル1503のインデックスが0のレジスタは、ビット1501の数として0を記憶するようにしてもよい。また、ビット数指定レジスタファイル1503のレジスタ数は、特に限定しない。ただし、ビット数指定レジスタファイル1503のレジスタ数が1の場合は、切り替えレジスタ1502を設けず、レジスタ数が1個であるビット数指定レジスタファイル1503のみを設けてもよい。
プロセッサ101がアクセスするアドレスパターンによっては、第1の実施形態の場合でも特定のバンクにアクセスが集中してアクセスの衝突が頻発することがある。本実施形態では、アプリケーションのアクセスアドレスパターンに応じて、シャッフル対象のビット1505の位置を切り替えるようにする。
図16は、図9に対応し、データラインのアドレスとバンクBK1〜BK4との対応関係を示す図である。図15の演算装置では、複数のバンクBK1〜BK4は、複数のデータラインのアドレスがシーケンシャルではなく不規則に振り分けられている。
第1の実施形態(図8)では、4ビット目及び5ビット目のアドレスaddr[4]及びaddr[5]並びに6ビット目及び7ビット目のアドレスaddr[6]及びaddr[7]に応じて、バンクBK1〜BK4の振り分けが行われる。
本実施形態(図15)では、ビット1501の数をxとすると、4ビット目及び5ビット目のアドレスaddr[4]及びaddr[5]並びにx+6ビット目及びx+7ビット目のアドレスaddr[x+6]及びaddr[x+7]に応じて、バンクBK1〜BK4の振り分けが行われる。
図16の4ビット目及び5ビット目のアドレスaddr[4]及びaddr[5]は、図9の4ビット目及び5ビット目のアドレスaddr[4]及びaddr[5]に対応する。図16のx+6ビット目及びx+7ビット目のアドレスaddr[x+6]及びaddr[x+7]は、図9の6ビット目及び7ビット目のアドレスaddr[6]及びaddr[7]に対応する。すなわち、ビット1501の数xを0にすると、本実施形態と第1の実施形態は同じになる。
図17は、本実施形態による図12の制御回路CT1の構成例を示す図である。図17の制御回路CT1は、図13の制御回路CT1に対して、切り替えレジスタ1502、ビット数指定レジスタファイル1503及びビット切り出し回路1701を追加したものである。以下、図17の制御回路CT1が図13の制御回路CT1と異なる点を説明する。
ビット数指定レジスタファイル1503は、ビット1501の数として指定可能な0以上の整数を記憶する複数のレジスタを有する。プロセッサ101は、ビット数指定レジスタファイル1503に対して、書き込み制御信号w_enに応じて、ストアデータbit_cnt_inをストアし、ロードデータbit_cnt_outをロードする。
切り替えレジスタ1502は、ビット数指定レジスタファイル1503内の複数のレジスタのうちのいずれかのインデックスを記憶する。プロセッサ101は、切り替えレジスタ1502に対して、書き込み制御信号w_enに応じて、ストアデータsel_inをストアし、ロードデータsel_outをロードする。
ビット数指定レジスタファイル1503は、切り替えレジスタ1502が記憶するインデックスを入力し、そのインデックスのレジスタが記憶するビット数bit_cntを出力する。ビット切り出し回路1701は、プロセッサ101からアドレスaddrをアドレスaddr_inとして入力し、ビット数bit_cntに応じて、アドレスaddr_inから切り出した4ビットアドレスaddr_selをバンク選択回路1301に出力する。なお、制御回路CT2〜CTmも制御回路CT1と同様の構成を有する。
図18は、図17のビット切り出し回路1701の構成例を示す図である。ビット切り出し回路1701は、セレクタ1801を有し、4ビットアドレスaddr_sel[0]〜addr_sel[3]を出力する。アドレスaddr_sel[0]は、アドレスaddr_in[4]と同じビット値である。アドレスaddr_sel[1]は、アドレスaddr_in[5]と同じビット値である。
セレクタ1801は、ビット数bit_cntに応じて、2ビットアドレスaddr_in[6],addr_in[7]、2ビットアドレスaddr_in[7],addr_in[8]、・・・、2ビットアドレスaddr_in[n−2],addr_in[n−1]のうちのいずれか1個を選択し、2ビットアドレスaddr_sel[2],addr_sel[3]を出力する。例えば、ビット数bit_cntが0である場合、2ビットアドレスaddr_sel[2],addr_sel[3]は、2ビットアドレスaddr_in[6],addr_in[7]と同じになる。ビット数bit_cntが1である場合、2ビットアドレスaddr_sel[2],addr_sel[3]は、2ビットアドレスaddr_in[7],addr_in[8]と同じになる。すなわち、ビット数bit_cntをビット数xとすると、セレクタ1801は、図16のように、2ビットアドレスaddr[x+6],addr[x+7]を2ビットアドレスaddr_sel[2],addr_sel[3]として出力する。
図19は、ビット数xを決定するための処理方法を示すフローチャートである。プロセッサ101は、命令RAM102内のターゲットプログラム1901を実行することにより、データRAM103にアクセスする。最適なビット数xは、プロセッサ101が実行するターゲットプログラム1901により異なる。シミュレータ1902は、例えばコンピュータであり、ターゲットプログラム1901の実行によりシミュレーションを行い、その結果として、データRAM103のアクセスパターン1903を出力する。アクセスパターン1903は、ターゲットプログラム1901のうちのデータRAM103に対するアクセス命令の命令カウント値、ベースアドレス及びオフセットアドレスの組みを含む。これにより、データRAM103にアクセスするベースアドレス及びオフセットアドレスを得ることができる。次に、コンピュータは、ビット数決定プログラム1904を実行することにより、アクセスパターン1903を基にビット数1905(ビット数x)を決定して出力(表示)する。
図20は、図19のビット数決定プログラム1904の処理例を示すフローチャートである。ステップS2001では、コンピュータは、ビット数xを0から指定可能なビット数の上限まで変化させるループ処理を開始する。次に、ステップS2002では、コンピュータは、ビット数xの全サイクル数[x]の変数を0にリセットする。次に、ステップS2003では、コンピュータは、各アクセスパターン1903についてのループ処理を開始する。次に、ステップS2004では、コンピュータは、指定されたビット数x及びアクセスパターン1903についてのサイクル数を求め、そのサイクル数を全サイクル数[x]の変数に累積加算する。サイクル数を求める処理は、後に図21を参照しながら説明する。次に、ステップS2005では、コンピュータは、アクセスパターン1903のループ処理を終了し、ステップS2003に戻り、次のアクセスパターン1903の処理を繰り返す。すべてのアクセスパターン1903の処理が終了すると、ステップS2006では、コンピュータは、ビット数xのループ処理を終了し、ステップS2001に戻り、次のビット数xの処理を繰り返す。すべてのビット数xの処理が終了すると、ステップS2007では、コンピュータは、全サイクル数[x]の変数が最小となるビット数xを探索し、最も少ないサイクル数でアクセスするビット数xを出力する。
図21は、図20のステップS2004のサイクル数を求める処理を示すフローチャートである。ステップS2101では、コンピュータは、バンク番号iを0から3まで変化させるループ処理を開始する。次に、ステップS2102では、コンピュータは、バンク番号iのアクセスアドレス集合bank[i]の変数を空にリセットする。次に、ステップS2103では、コンピュータは、バンク番号iのループ処理を終了し、ステップS2101に戻り、次のバンク番号iの処理を繰り返す。
次に、ステップS2104では、コンピュータは、アクセスパターン1903内の各オフセットアドレスについてのループ処理を開始する。次に、ステップS2105では、コンピュータは、オフセットアドレスを2倍した値にベースアドレスを加算し、その加算結果をアドレスaddrとする。次に、コンピュータは、指定されたビット数x及びアドレスaddrが属するバンク番号を変数tに格納する。次に、コンピュータは、指定されたビット数x及びアドレスaddrが属するデータラインアドレスを変数aに格納する。次に、コンピュータは、データラインアドレスaをアクセスアドレス集合bank[i]に追加する。次に、ステップS2106では、コンピュータは、オフセットアドレスのループ処理を終了し、ステップS2104に戻り、次のオフセットアドレスの処理を繰り返す。すべてのオフセットアドレスの処理が終了すると、ステップS2107に進む。
ステップS2107では、コンピュータは、アクセスアドレス集合bank[0]〜bank[3]の各々の中でユニークな要素(データラインアドレス)の数を求め、そのユニークな要素の数の最大値をサイクル数とする。すなわち、同一データラインのアクセスは1サイクルで行えるため、各バンクのアクセスアドレス集合bank[0]〜bank[3]の中から、重複しないデータラインアドレスの数を求め、その値の最大値をサイクル数として返す。
なお、第1及び第2の実施形態では、4個のバンクBK1〜BK4の例を説明したが、4個に限定されない。データRAM103は、2p(pは自然数)個のバンクに分割することができる。2p個のバンクは、データRAM103のアドレスのうちの2×pビットの値に応じて、複数のデータラインのアドレスが振り分けられる。制御回路CT1〜CTmは、プロセッサ101から入力するアドレスのうちの2×pビットの値に応じて、プロセッサ101から入力するアドレスが属するバンクをアクセス可能状態に制御する。第1の実施形態では、上記のアドレスのうちの2×pビットは、相互に隣接した2×pビットである。
第2の実施形態では、上記のアドレスのうちの2×pビットは、相互に隣接した第1のpビット1504と、相互に隣接した第2のpビット1505とを有し、第1のpビット1504及び第2のpビット1505は、相互に隣接していない。第1のpビット1504と第2のpビット1505との間隔は、変更可能である。
第1及び第2の実施形態によれば、複数のバンクBK1〜BK4に対してアクセスを分散させることができるので、データRAM103に対するアクセス時間を短くすることができる。
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
101 プロセッサ
102 命令RAM
103 データRAM
111 プログラムカウンタ
112 デコーダ
113 スカラレジスタファイル
114 ベクトルレジスタファイル
115 加算器
118 算術論理ユニット
BK1〜BK4 バンク
CT1〜CTm 制御回路
AR1〜AR4 調停回路

Claims (10)

  1. 並列にアクセス可能な複数のバンクに分割されたメモリと、
    前記メモリの複数のアドレスのデータに並列にアクセス可能なプロセッサと、
    前記プロセッサ及び前記メモリの間に設けられ、前記プロセッサから入力する複数のアドレスが属する前記バンクをアクセス可能状態に制御する制御回路とを有し、
    前記複数のバンクは、複数のデータラインのアドレスがシーケンシャルではなく不規則に振り分けられていることを特徴とする演算装置。
  2. 前記メモリは、2p(pは自然数)個のバンクに分割され、
    前記2p個のバンクは、前記メモリのアドレスのうちの2×pビットの値に応じて、前記複数のデータラインのアドレスが振り分けられ、
    前記制御回路は、前記プロセッサから入力するアドレスのうちの2×pビットの値に応じて、前記プロセッサから入力するアドレスが属する前記バンクをアクセス可能状態に制御することを特徴とする請求項1記載の演算装置。
  3. 前記アドレスのうちの2×pビットは、相互に隣接した2×pビットであることを特徴とする請求項2記載の演算装置。
  4. 前記アドレスのうちの2×pビットは、相互に隣接した第1のpビットと、相互に隣接した第2のpビットとを有し、
    前記第1のpビット及び前記第2のpビットは、相互に隣接していないことを特徴とする請求項2記載の演算装置。
  5. 前記第1のpビットと前記第2のpビットとの間隔は、変更可能であることを特徴とする請求項4記載の演算装置。
  6. 前記プロセッサが並列に出力するアドレスの数は、前記バンクの数よりも多いことを特徴とする請求項1〜5のいずれか1項に記載の演算装置。
  7. さらに、前記制御回路及び前記メモリの間に設けれ、前記複数のバンクのアクセスを調停する調停回路を有することを特徴とする請求項1〜6のいずれか1項に記載の演算装置。
  8. 前記複数のバンクは、それぞれ、前記データライン単位でデータを入出力することを特徴とする請求項1〜7のいずれか1項に記載の演算装置。
  9. 並列にアクセス可能な複数のバンクに分割されたメモリと、
    前記メモリの複数のアドレスのデータに並列にアクセス可能なプロセッサと、
    前記プロセッサ及び前記メモリの間に設けられ、前記プロセッサから入力する複数のアドレスが属する前記バンクをアクセス可能状態に制御する制御回路とを有する演算装置の決定方法であって、
    前記複数のバンクは、複数のデータラインのアドレスがシーケンシャルではなく不規則に振り分けられ、
    前記メモリは、2p(pは自然数)個のバンクに分割され、
    前記2p個のバンクは、前記メモリのアドレスのうちの2×pビットの値に応じて、前記複数のデータラインのアドレスが振り分けられ、
    前記制御回路は、前記プロセッサから入力するアドレスのうちの2×pビットの値に応じて、前記プロセッサから入力するアドレスが属する前記バンクをアクセス可能状態に制御し、
    前記アドレスのうちの2×pビットは、相互に隣接した第1のpビットと、相互に隣接した第2のpビットとを有し、
    前記第1のpビット及び前記第2のpビットは、相互に隣接しておらず、
    コンピュータにより、前記第1のpビットと前記第2のpビットとの間隔を変えることにより、アクセスパターンについてのサイクル数が最も少なくなる前記第1のpビットと前記第2のpビットとの間隔を探索して決定する演算装置の決定方法。
  10. 並列にアクセス可能な複数のバンクに分割されたメモリと、
    前記メモリの複数のアドレスのデータに並列にアクセス可能なプロセッサと、
    前記プロセッサ及び前記メモリの間に設けられ、前記プロセッサから入力する複数のアドレスが属する前記バンクをアクセス可能状態に制御する制御回路とを有する演算装置の決定方法のプログラムであって、
    前記複数のバンクは、複数のデータラインのアドレスがシーケンシャルではなく不規則に振り分けられ、
    前記メモリは、2p(pは自然数)個のバンクに分割され、
    前記2p個のバンクは、前記メモリのアドレスのうちの2×pビットの値に応じて、前記複数のデータラインのアドレスが振り分けられ、
    前記制御回路は、前記プロセッサから入力するアドレスのうちの2×pビットの値に応じて、前記プロセッサから入力するアドレスが属する前記バンクをアクセス可能状態に制御し、
    前記アドレスのうちの2×pビットは、相互に隣接した第1のpビットと、相互に隣接した第2のpビットとを有し、
    前記第1のpビット及び前記第2のpビットは、相互に隣接しておらず、
    前記第1のpビットと前記第2のpビットとの間隔を変えることにより、アクセスパターンについてのサイクル数が最も少なくなる前記第1のpビットと前記第2のpビットとの間隔を探索して決定する処理をコンピュータに実行させるプログラム。
JP2013251515A 2013-12-04 2013-12-04 演算装置、演算装置の決定方法及びプログラム Pending JP2015108972A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013251515A JP2015108972A (ja) 2013-12-04 2013-12-04 演算装置、演算装置の決定方法及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013251515A JP2015108972A (ja) 2013-12-04 2013-12-04 演算装置、演算装置の決定方法及びプログラム

Publications (1)

Publication Number Publication Date
JP2015108972A true JP2015108972A (ja) 2015-06-11

Family

ID=53439275

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013251515A Pending JP2015108972A (ja) 2013-12-04 2013-12-04 演算装置、演算装置の決定方法及びプログラム

Country Status (1)

Country Link
JP (1) JP2015108972A (ja)

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5279737A (en) * 1975-12-26 1977-07-05 Hitachi Ltd Memory system
JPS58220287A (ja) * 1982-06-15 1983-12-21 Nec Corp メモリアクセス制御装置
JPS6265148A (ja) * 1985-09-17 1987-03-24 Fujitsu Ltd メモリアクセス制御方式
JPH02234242A (ja) * 1989-03-08 1990-09-17 Fujitsu Ltd 部分書込み制御装置
JPH05165716A (ja) * 1991-03-19 1993-07-02 Hitachi Ltd ベクトルデータの要素を並列処理するベクトルプロセッサ
JPH06208503A (ja) * 1992-09-23 1994-07-26 Intel Corp メモリ制御装置及びメモリアレイに対してアクセスを実行する方法
JP2000021160A (ja) * 1998-07-01 2000-01-21 Hitachi Ltd 半導体集積回路及びデータ処理システム
JP2000163316A (ja) * 1998-11-27 2000-06-16 Hitachi Ltd 計算機システム
JP2000242559A (ja) * 1999-02-18 2000-09-08 Hitachi Ltd 情報処理装置及び半導体装置
JP2002342306A (ja) * 2001-05-15 2002-11-29 Nec Computertechno Ltd ベクトル処理装置のルーティングアドレス生成方式
JP2011039660A (ja) * 2009-08-07 2011-02-24 Fujitsu Ltd メモリコントローラ、画像処理システムおよびメモリアクセスの制御方法

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5279737A (en) * 1975-12-26 1977-07-05 Hitachi Ltd Memory system
JPS58220287A (ja) * 1982-06-15 1983-12-21 Nec Corp メモリアクセス制御装置
JPS6265148A (ja) * 1985-09-17 1987-03-24 Fujitsu Ltd メモリアクセス制御方式
JPH02234242A (ja) * 1989-03-08 1990-09-17 Fujitsu Ltd 部分書込み制御装置
JPH05165716A (ja) * 1991-03-19 1993-07-02 Hitachi Ltd ベクトルデータの要素を並列処理するベクトルプロセッサ
JPH06208503A (ja) * 1992-09-23 1994-07-26 Intel Corp メモリ制御装置及びメモリアレイに対してアクセスを実行する方法
JP2000021160A (ja) * 1998-07-01 2000-01-21 Hitachi Ltd 半導体集積回路及びデータ処理システム
JP2000163316A (ja) * 1998-11-27 2000-06-16 Hitachi Ltd 計算機システム
JP2000242559A (ja) * 1999-02-18 2000-09-08 Hitachi Ltd 情報処理装置及び半導体装置
JP2002342306A (ja) * 2001-05-15 2002-11-29 Nec Computertechno Ltd ベクトル処理装置のルーティングアドレス生成方式
JP2011039660A (ja) * 2009-08-07 2011-02-24 Fujitsu Ltd メモリコントローラ、画像処理システムおよびメモリアクセスの制御方法

Similar Documents

Publication Publication Date Title
JP5658556B2 (ja) メモリ制御装置、及びメモリ制御方法
KR101120398B1 (ko) 스레드 최적화된 멀티프로세서 구조
KR102185287B1 (ko) 벡터 연산 장치
US7925860B1 (en) Maximized memory throughput using cooperative thread arrays
US7313645B2 (en) Processor to reduce data rearrangement instructions for matrices in multiple memory banks
CN100480997C (zh) 选择可实质同时处理的多重线程的系统与方法
JP2625277B2 (ja) メモリアクセス装置
US20100115233A1 (en) Dynamically-selectable vector register partitioning
EP2962187B1 (en) Vector register addressing and functions based on a scalar register data value
EP3220274A1 (en) Method and apparatus for memory access
WO2014141566A1 (ja) 半導体装置及び半導体装置に対するエントリアドレス書き込み/読み出し方法
CN112506567B (zh) 数据读取方法和数据读取电路
US20060010255A1 (en) Address generation unit for a processor
US11705207B2 (en) Processor in non-volatile storage memory
US6694407B1 (en) Cache memory with data transfer control and method of operating same
Yin et al. Efficient parallel sort on avx-512-based multi-core and many-core architectures
US6704834B1 (en) Memory with vectorial access
CN110018847B (zh) 可配置寄存器及基于可配置寄存器的数据存取方法
JP2015108972A (ja) 演算装置、演算装置の決定方法及びプログラム
Zaynidinov et al. Comparative analysis of the architecture of dual-core blackfin digital signal processors
Honda et al. A warp-synchronous implementation for multiple-length multiplication on the GPU
JP6237241B2 (ja) 処理装置
US20090063808A1 (en) Microprocessor and method of processing data
Zhang et al. Progress in a novel architecture for high performance processing
JP2012128559A (ja) 演算処理装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160804

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170421

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170606

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170726

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20171219

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20180612