JP2004302647A - ベクトルプロセッサおよびレジスタのアドレス指定方法 - Google Patents
ベクトルプロセッサおよびレジスタのアドレス指定方法 Download PDFInfo
- Publication number
- JP2004302647A JP2004302647A JP2003092371A JP2003092371A JP2004302647A JP 2004302647 A JP2004302647 A JP 2004302647A JP 2003092371 A JP2003092371 A JP 2003092371A JP 2003092371 A JP2003092371 A JP 2003092371A JP 2004302647 A JP2004302647 A JP 2004302647A
- Authority
- JP
- Japan
- Prior art keywords
- register
- vector
- data
- address
- instruction
- 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.)
- Withdrawn
Links
- 238000000034 method Methods 0.000 title claims description 17
- 230000015654 memory Effects 0.000 description 32
- 238000010586 diagram Methods 0.000 description 19
- 230000004048 modification Effects 0.000 description 6
- 238000012986 modification Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 3
- 230000003111 delayed effect Effects 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8053—Vector processors
- G06F15/8076—Details on data register access
- G06F15/8084—Special arrangements thereof, e.g. mask or switch
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30109—Register structure having multiple operands in a single register
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30134—Register stacks; shift registers
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Complex Calculations (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
【課題】ベクトルレジスタを用いたベクトル演算を効率的に行うこと。
【解決手段】リングバッファをなすベクトルレジスタを備え、そのリングバッファにおける任意のアドレスを先頭アドレスとして指定可能である。そのため、演算対象である複数のベクトルデータが重複する場合に、ベクトルデータそれぞれを異なるベクトルレジスタに記憶することなく、1つのベクトルレジスタに記憶されたベクトルデータを循環的に読み込みあるいは書き込むことができる。したがって、同一のデータが重複して読み出されることを回避できると共に、必要となるレジスタリソースを減少させることが可能となり、ベクトルレジスタを用いたベクトル演算を効率的に行うことが可能となる。
【選択図】 図5
【解決手段】リングバッファをなすベクトルレジスタを備え、そのリングバッファにおける任意のアドレスを先頭アドレスとして指定可能である。そのため、演算対象である複数のベクトルデータが重複する場合に、ベクトルデータそれぞれを異なるベクトルレジスタに記憶することなく、1つのベクトルレジスタに記憶されたベクトルデータを循環的に読み込みあるいは書き込むことができる。したがって、同一のデータが重複して読み出されることを回避できると共に、必要となるレジスタリソースを減少させることが可能となり、ベクトルレジスタを用いたベクトル演算を効率的に行うことが可能となる。
【選択図】 図5
Description
【0001】
【発明の属する技術分野】
本発明は、ベクトルレジスタを使用して演算を行うベクトルプロセッサおよびレジスタのアドレス指定方法に関する。
【0002】
【従来の技術】
従来、科学技術計算における繰り返し演算や、画像処理における画素データの演算あるいは配列データの演算等において、ベクトル演算が行われている。
ベクトル演算においては、メモリからベクトルデータを読み出し、ベクトルレジスタに記憶した上で、ベクトルデータ同士の加算あるいは乗算等、所定のベクトル演算が行われる。
【0003】
例えば、配列において隣接する2つのデータを対象として、加算等の演算を行う場合、1つのベクトルレジスタに配列データを先頭からn個(nは自然数)分記憶し、他のベクトルレジスタには、配列データを2番目のものからn個分記憶する。そして、それら2つのベクトルレジスタを対象として加算等の演算命令を実行することにより、ベクトルレジスタ内における同一アドレス同士の各要素データが演算され、配列データの演算が一括して行われる。
【0004】
ここで、ベクトル演算に関連する技術として、特開昭60−24672号公報に記載された技術が知られている。
本号公報においては、上述のように、配列において隣接する2つのデータを対象として演算を行う際、演算処理における効率を向上させる技術が開示されている。
【0005】
即ち、上述の演算を行う場合、配列の2番目からn−1個(演算される配列データの末尾の1つ前)のデータは、2つのレジスタに記憶するために、それぞれ2度ずつ読み出されることとなる。
そこで、本号公報に記載された技術では、演算対象となる配列を先頭からn+1個(演算される配列データの末尾)まで一度だけ読み出し、所定のレジスタに記憶する。そして、そのレジスタ内のデータを複数のベクトルレジスタに分配して記憶させる分配回路によって、先頭から所定数分の配列データを格納するベクトルレジスタと、2番目のものから所定数分格納するベクトルレジスタとに振り分けて記憶する。
【0006】
このような手順とすることにより、メモリから配列データを読み出す際に、同一のデータが重複して読み出されることを回避し、効率的にベクトル演算を行おうとするものである。
【0007】
【特許文献1】
特開昭60−24672号公報
【0008】
【発明が解決しようとする課題】
しかしながら、特開昭60−24672号公報に記載された技術においては、メモリから読み出したベクトルデータを一旦、所定のレジスタに記憶した後に、2つのベクトルレジスタに分配するため、多くのレジスタリソースが必要となる。
【0009】
したがって、回路規模が大きくなるという問題や、レジスタリソースが圧迫され、処理効率が低下するという問題が生じていた。
さらに、近年、機器の低消費電力化が重要視されており、書き込みを行う場合にのみ、レジスタを構成するフリップフロップに電力を供給することが一般的である。一方、特開昭60−24673号公報に記載された技術においては、同一のデータを同時に複数のベクトルレジスタに記憶することとなるため、同時にクロックを供給する対象が増え、消費電力が増大するという問題があった。
【0010】
本発明の課題は、ベクトルレジスタを用いたベクトル演算を効率的に行うことである。
【0011】
【課題を解決するための手段】
以上の課題を解決するため、本発明は、
複数の要素データからなるベクトルデータを、レジスタを使用して演算処理するベクトルプロセッサであって、複数の要素レジスタからなるベクトルレジスタとして使用可能なレジスタ(例えば、図6のレジスタファイル40)と、該ベクトルレジスタにおける任意の要素レジスタのアドレスを先頭として、前記ベクトルレジスタのアドレスを、循環的に指定するアドレス指定回路(例えば、図10に示す第1ソースレジスタ決定回路72等)とを備えることを特徴としている。
【0012】
また、前記レジスタは、複数のスカラーレジスタが1組となり、該1組のスカラーレジスタのいずれかのアドレスが先頭として指定されることにより、該複数のスカラーレジスタそれぞれのアドレスが循環的に指定されることを特徴としている。
また、前記レジスタは、任意の要素レジスタを先頭として指定可能なベクトルレジスタによって構成されていることを特徴としている。
【0013】
また、前記レジスタに記憶されたデータを対象としてベクトル演算を行う際、前記ベクトルレジスタにおいて先頭として指定されたアドレスから、該ベクトルレジスタの要素データを順次読み出し、該ベクトルレジスタの末尾のアドレスに達した場合、先頭のアドレスに戻って要素データの読み出しを継続可能であることを特徴としている。
【0014】
また、ベクトル演算の演算結果を前記レジスタに書き込む際、前記ベクトルレジスタにおいて先頭として指定されたアドレスから、該ベクトルレジスタの要素データを順次書き込み、該ベクトルレジスタの末尾のアドレスに達した場合、先頭のアドレスに戻って要素データの書き込みを継続可能であることを特徴としている。
【0015】
また、本発明は、
複数の要素データからなるベクトルデータの演算処理に用いるレジスタのアドレス指定方法であって、所定の要素レジスタを複数の要素レジスタからなるベクトルレジスタとして取り扱い、該ベクトルレジスタにおける任意の要素レジスタのアドレスを先頭として指定すると、前記ベクトルレジスタにおける各要素レジスタのアドレスが循環的に指定されることを特徴としている。
【0016】
本発明によれば、リングバッファをなすベクトルレジスタとして使用可能なレジスタを備え、そのリングバッファにおける任意のアドレスを先頭アドレスとして指定可能である。
そのため、演算対象である複数のベクトルデータが重複する場合に、ベクトルデータそれぞれを異なるベクトルレジスタに記憶することなく、1つのベクトルレジスタに記憶されたベクトルデータを循環的に読み込みあるいは書き込むことができる。
【0017】
したがって、同一のデータが重複して読み出されることを回避できると共に、必要となるレジスタリソースを減少させることが可能となり、ベクトルレジスタを用いたベクトル演算を効率的に行うことが可能となる。
【0018】
【発明の実施の形態】
以下、図を参照して本発明に係るベクトルプロセッサの実施の形態を説明する。
本発明に係るベクトルプロセッサは、リングバッファをなすベクトルレジスタを備え、ベクトルレジスタの任意のアドレスからデータにアクセスすることを可能としている。
【0019】
したがって、初めに、本発明の基本となる考え方について説明する。なお、ここでは、配列において隣接する2つのデータを対象として加算を行う場合(例えば、画像処理において、隣接画素同士の平均値を求める処理)を例に挙げて説明する。
図1は、8つの要素レジスタR0〜R7を有するベクトルレジスタVRを示す図である。
【0020】
本発明においては、加算対象となるベクトルデータを記憶するベクトルレジスタを2つ用いることなく、1つのベクトルレジスタVRによって、2つのベクトルレジスタを用いる場合と同様の処理を行う。なお、ここでいうベクトルレジスタには、スカラーレジスタをベクトルレジスタとして使用する場合を含むものである。
【0021】
まず、ベクトルレジスタVRを備えるベクトルプロセッサに、8つの要素データx0〜x7からなるベクトルデータのロード命令と、そのロード命令から2サイクル遅れた加算命令とを与える。
すると、サイクル“0”において、ベクトルレジスタVRの要素レジスタR0に要素データx0が書き込まれ、1サイクル毎に、引き続く要素レジスタに後続の要素データが順次書き込まれていく。
【0022】
ここで、サイクル“2”において、サイクル“0”に開始されたロード命令から2サイクル遅れて、加算命令が実行される。
図2は、サイクル“2”におけるベクトルレジスタVRの状態を示す図である。
図2において、要素レジスタR0,R1には、それぞれ要素データx0,x1が既に記憶されており、さらに要素レジスタR2には、要素データx2が書き込まれている。また、図2においては、加算命令が開始されており、要素レジスタR0,R1に記憶された要素データが加算されている。
【0023】
このように、ロード命令から2サイクル遅れて加算命令を実行していくと、サイクル“7”においては、図3に示す状態となる。
図3において、ロード命令については、要素レジスタR7に要素データx7を書き込む状態であり、サイクル“0”で開始されたロード命令はサイクル“7”で終了する。なお、加算命令については、要素レジスタR5,R6に記憶された要素データが加算されている。
【0024】
次に、ベクトルプロセッサには、後続のデータを処理するため、サイクル“8”において、2つ目のロード命令が与えられる。
すると、サイクル“8”においては、ベクトルレジスタVRは、図4に示す状態となる。
図4において、ロード命令については、先頭に戻り、要素レジスタR0に要素データx8を書き込む状態であり、加算命令については、要素レジスタR6,R7に記憶された要素データが加算されている。なお、サイクル“2”で開始された加算命令は、ロード命令から2サイクル送れているため、依然として加算処理を実行している。
【0025】
続いて、サイクル“2”で開始された加算命令の8サイクル目(最終サイクル)であるサイクル“9”に移行する。
図5は、サイクル“9”におけるベクトルレジスタVRの状態を示す図である。
図5において、加算命令については、要素レジスタR7から、加算対象の1つとなる要素データx7が読み出されている。
【0026】
ここで、加算対象となる他の要素データについては、ベクトルレジスタVRの先頭に戻り、要素レジスタR0に記憶されている要素データx8が読み出されている。即ち、要素レジスタR7,R0に記憶された要素データx7,x8が加算される。
なお、この後、サイクル“0”〜“9”が適宜繰り返される。
【0027】
このように、加算命令によって、ベクトルレジスタの最終アドレスを超えた要素データが参照される場合であっても、ベクトルレジスタがリングバッファをなすことによって、参照される要素データを容易に読み出すことができ、引き続く処理を円滑に行うことができる。
また、同一の要素データをメモリ等から重複して読み出す必要がなく、また、8要素を記憶可能なベクトルレジスタを1つ用いることで、8要素を超えるベクトルデータの要素データ同士の演算を行うことができるため、ベクトル演算を効率的に行うことが可能となる。
【0028】
次に、本発明に係るベクトルプロセッサの構成を説明する。
図6は、本発明を適用したベクトルプロセッサ1の構成を示す図である。
図6において、ベクトルプロセッサ1は、メモリ10と、メモリ制御部20と、命令フェッチ部30と、レジスタファイル40と、ロードユニット50と、ストアユニット60と、演算ユニット70とを含んで構成される。
【0029】
メモリ10は、ベクトルプロセッサ1に与えられる命令コードおよび演算対象となるデータを記憶している。
図7は、命令コードのデータ形式の一例を示す図であり、(a)は、ロード命令の形式、(b)は、ストア命令の形式、(c)は、演算命令の形式を示している。図7において、各命令コードには、命令コードの命令の種類を示すオペレーションコード、命令の処理対象となるベクトルデータの要素数あるいはレジスタの指定コード等、命令を実行するために必要となる情報が含まれている。
【0030】
メモリ制御部20は、メモリ10に対するアクセス、即ち、データの読み出しや書き込みを制御する。例えば、メモリ制御部20は、ロードユニット50あるいはストアユニット60によって指定されたメモリ10のアドレスからデータを読み出したり、メモリ10から読み出されたデータをレジスタファイル40に出力したりする。
【0031】
命令フェッチ部30は、メモリ制御部20を介して、メモリ10から命令コードをフェッチし、一時的に記憶する。
レジスタファイル40は、メモリ10から読み出されたデータおよび演算結果を一時的に記憶する。
ロードユニット50は、命令フェッチ部30に記憶された命令コードがロード命令である場合に、メモリ10から命令コードあるいはデータを読み出す処理を行う。
【0032】
ストアユニット60は、命令フェッチ部30に記憶された命令コードがストア命令である場合に、メモリ10にデータを書き込む処理を行う。
演算ユニット70は、命令フェッチ部30に記憶された命令コードが所定の演算命令である場合に、レジスタファイル40に記憶された所定データを対象として演算処理を行う。
【0033】
ここで、レジスタファイル40および演算ユニット70について、詳細に説明する。
まず、レジスタファイル40について説明する。
レジスタファイル40は、図6に示すように、読み書き可能な32個のレジスタR0〜R31を含んで構成される。
【0034】
また、レジスタファイル40において、レジスタR0〜R7、レジスタR8〜R15、レジスタR16〜R23およびレジスタR24〜R31は、それぞれを1組として、リングバッファの機能を有するベクトルレジスタとして使用することが可能である。
ここで、リングバッファの機能を有するベクトルレジスタとして、レジスタR0〜R31を使用可能とするためには、ベクトルレジスタにリングバッファの機能を備え、任意のアドレスを先頭アドレスとして指定可能とすることの他、スカラーレジスタをベクトルレジスタとして用いることが可能である。
【0035】
即ち、所定のスカラーレジスタを1組とし、組単位でレジスタを指定可能とすることにより、スカラーレジスタをベクトルレジスタとして使用することが可能である。なお、この場合、1組のスカラーレジスタにおける任意のアドレスを先頭アドレスとして指定することができると共に、スカラーレジスタは本来、レジスタ毎の指定が可能であることから、リングバッファとして、循環的にアドレスを指定することができる。
【0036】
また、図6に示すレジスタファイル40において、レジスタR0〜R31には、それぞれに5ビットのコードが割り当てられている。
図8は、レジスタR0〜R31それぞれに割り当てられたコードを示す図である。
レジスタファイル40に対し、図8に示す所定のコードを選択信号として入力することにより、対応するレジスタの読み出しおよび書き込みを行うことができる。
【0037】
なお、図8において、5ビットのコードのうち、上位2ビットはベクトルレジスタを指定するコードであり、下位3ビットは、ベクトルレジスタ内のアドレスを指定するコードである。
続いて、演算ユニット70について説明する。
図9は、演算ユニット70の内部構成を示すブロック図である。
【0038】
図9において、演算ユニット70は、命令パイプライン制御部71と、第1ソースレジスタ決定回路72と、第2ソースレジスタ決定回路73と、デスティネーションレジスタ決定回路74と、演算器75と、パイプラインレジスタ(PR)76〜79とを含んで構成される。
命令パイプライン制御部71は、演算ユニット70全体を制御するものである。
【0039】
第1ソースレジスタ決定回路72は、命令コードに含まれる第1ソースレジスタ指定コードに基づいて、第1ソースレジスタを選択する信号(第1ソースレジスタ選択信号)を生成する。
第2ソースレジスタ決定回路73は、命令コードに含まれる第2ソースレジスタ指定コードに基づいて、第2ソースレジスタを選択する信号(第2ソースレジスタ選択信号)を生成する。
【0040】
デスティネーションレジスタ決定回路74は、命令コードに含まれるデスティネーションレジスタ指定コードに基づいて、デスティネーションレジスタを選択する信号(デスティネーションレジスタ選択信号)を生成する。
ここで、第1ソースレジスタ決定回路72、第2ソースレジスタ決定回路73およびデスティネーションレジスタ決定回路74の構成について説明する。
【0041】
なお、第1ソースレジスタ決定回路72、第2ソースレジスタ決定回路73およびデスティネーションレジスタ決定回路74の構成は同様であるため、第1ソースレジスタを例に挙げて説明する。
図10は、第1ソースレジスタ決定回路72の構成例を示す図である。
図10において、第1ソースレジスタ決定回路72は、制御部72aと、セレクタ72bと、インクリメンタ72cと、カウンタ72dと、レジスタ72eとを含んで構成される。
【0042】
制御部72aは、命令パイプライン制御部71によって入力される動作開始信号と、命令フェッチ部30によって入力されるベクトル要素数に基づいて、第1ソースレジスタ決定回路72全体を制御する。
セレクタ72bは、サイクル“0”においては、命令フェッチ部30から入力された第1ソースレジスタ指定コードを選択して出力し、サイクル“0”以外においては、カウンタ72dおよびレジスタ72eから入力された第1ソースレジスタ選択信号を選択して出力する。
【0043】
インクリメンタ72cは、5ビットの第1ソースレジスタ指定コードのうち、下位3ビットを受け取り、“1”加算してカウンタ72dに出力する。
カウンタ72dは、サイクル“0”において、インクリメンタ72cから入力された3ビットのコードを記憶する。
また、カウンタ72dは、制御部72aの指示によってカウントイネーブル状態が切り替えられ、カウントイネーブル状態である場合に、記憶しているコードを+1して更新するカウントアップ動作を行う。
【0044】
レジスタ72eは、第1ソースレジスタ指定コードのうち、上位2ビットを受け取り、1つのベクトル演算が行われている間、そのコードを保持する。
このような構成により、第1ソースレジスタ決定回路72においては、例えば、第1ソースレジスタ指定コードがレジスタR18を示すコード“10010”であり、ベクトル要素数が“8”である場合、第1ソースレジスタ選択信号として、順次、“10010”、“10011”、“10100”、“10101”、“10110”、“10111”が出力され、引き続き、“10000”、“10001”が出力される。即ち、第1ソースレジスタ選択信号によって、レジスタR18→レジスタR19→レジスタR20→レジスタR21→レジスタR22→レジスタR23→レジスタR16→レジスタR17の順に選択される。
【0045】
つまり、レジスタR16〜R23を、リングバッファをなすベクトルレジスタとして使用できると共に、これらのレジスタにおける任意のアドレスを先頭アドレスとして指定することが可能となる。
図9に戻り、演算器75は、命令パイプライン制御部71の指示に基づいて、実際に加算等の演算を行う。
【0046】
PR76〜79は、パイプライン処理の各ステージにおいて処理されるデータを記憶する。
次に、動作を説明する。
初めに、図6を参照して、ベクトルプロセッサ1全体の動作について説明する。
【0047】
ベクトルプロセッサ1において処理が行われる場合、メモリ制御部20を介してメモリ10から命令フェッチ部30に命令コードが読み出される。
そして、ロードユニット50、ストアユニット60および演算ユニット70のそれぞれに、命令フェッチ部30から命令コードが出力される。
命令コードが入力されたロードユニット50、ストアユニット60および演算ユニット70は、その命令コードをデコードし、それぞれのユニットに対応する命令である場合にのみ、命令を実行する。
【0048】
以下、命令コードの内容に分けて、動作を説明する。
(命令コードがロード命令である場合)
命令フェッチ部30から入力された命令コードがロード命令である場合、ロードユニット50は、命令コード(図7(a)参照)において指定された基底アドレスレジスタおよびアドレス修飾レジスタのそれぞれを選択する信号をレジスタファイル40に出力する。
【0049】
すると、それぞれのアドレスに記憶されている値(基底アドレス値およびアドレス修飾値)が、ロードユニット50に読み込まれる。
そして、ロードユニット50は、基底アドレス値およびアドレス修飾値に基づいて、メモリ10のロードアドレス(読み込み対象アドレス)を生成し、メモリ制御部20に出力する。
【0050】
ロードアドレスが入力されると、メモリ制御部20は、メモリ10における対応するアドレスのデータ(ロードデータ)を読み出し、そのロードデータをレジスタファイル40に出力する。このとき、ロードユニット50は、メモリ制御部20からレジスタファイル40にロードデータが出力されるタイミングに合わせて、命令コードにおいて指定されているデスティネーションレジスタを選択するための信号を、レジスタファイル40に出力する。
【0051】
すると、レジスタファイル40において、デスティネーションレジスタに、ロードデータが書き込まれる。
(命令コードがストア命令である場合)
命令フェッチ部30から入力された命令コードがストア命令である場合、ストアユニット60は、命令コード(図7(b)参照)において指定されたデスティネーションレジスタ選択信号をレジスタファイル40に出力する。
【0052】
すると、デスティネーションアドレスに記憶されている値(ストアデータ)がストアユニット60に読み込まれる。
そして、ストアユニット60は、読み込んだストアデータをメモリ制御部20に出力する。
また、ストアユニット60は、命令コードにおいて指定されている基底アドレスレジスタおよびアドレス修飾レジスタのそれぞれを選択する信号をレジスタファイル40に出力する。
【0053】
すると、それぞれのアドレスに記憶されている基底アドレス値およびアドレス修飾値が、ストアユニット60に読み込まれる。
そして、ストアユニット60は、基底アドレス値およびアドレス修飾値に基づいて、メモリ10のストアアドレス(書き込み対象アドレス)を生成し、ストアデータをメモリ制御部20に出力するタイミングと合わせて、ストアアドレスをメモリ制御部20に出力する。
【0054】
ストアデータおよびストアアドレスが入力されると、メモリ制御部20は、メモリ10における対応するアドレスに、ストアデータを書き込む。
(命令コードが演算命令である場合)
命令フェッチ部30から入力された命令コードが演算命令である場合、演算ユニット70は、命令コード(図7(c)参照)において指定された第1ソースレジスタ選択信号および第2ソースレジスタ選択信号をレジスタファイル40に出力する。
【0055】
すると、それぞれのアドレスに記憶されている値(第1ソースデータおよび第2ソースデータ)が、演算ユニット70に読み込まれる。
そして、演算ユニット70は、第1ソースデータと第2ソースデータとの演算を行い、演算結果をレジスタファイル40に出力する。このとき、演算ユニット70は、演算結果がレジスタファイル40に出力されるタイミングに合わせて、命令コードにおいて指定されているデスティネーションレジスタ選択信号を、レジスタファイル40に出力する。
【0056】
すると、レジスタファイル40において、デスティネーションレジスタに、演算結果が書き込まれる。
次に、演算ユニット70の動作について、図9を参照して詳細に説明する。
演算ユニット70には、まず、命令フェッチ部30からオペレーションコードおよびベクトル要素数が命令パイプライン制御部71に入力される。
【0057】
このとき入力されるベクトル要素数は、ベクトル演算を行う要素データ数を指定するコードであり、ここでは、図11に示すように、3ビットのコードである。
命令フェッチ部30から入力されたオペレーションコードが演算命令である場合、命令パイプライン制御部71が、第1ソースレジスタ決定回路72および第2ソースレジスタ決定回路73に動作開始信号を出力する。
【0058】
第1ソースレジスタ決定回路72は、命令パイプライン制御部71から動作開始信号が入力されると、命令フェッチ部30から第1ソースレジスタ指定コードおよびベクトル要素数を受け取る。
そして、第1ソースレジスタ決定回路72は、命令フェッチ部30から受け取ったベクトル要素数に応じて、所定のレジスタを選択するための第1ソースレジスタ選択信号をレジスタファイル40に順次出力する。
【0059】
すると、レジスタファイル40から、所定の第1ソースデータが、PR76に順次入力される。
また、第2ソースデータについても、第1ソースデータと同様の手順によって、PR77に順次入力される。
そして、演算器75が、PR76,77に記憶されている第1ソースデータおよび第2ソースデータの演算を行い、演算結果をレジスタファイル40に出力する。
【0060】
一方、命令フェッチ部30から入力されたデスティネーションレジスタ指定コードは、PR78に記憶され、同様にPR79に記憶されたベクトル要素数とタイミングを合わせられた上で、デスティネーションレジスタ決定回路74に入力される。
すると、デスティネーションレジスタ決定回路74は、演算器75が演算結果をレジスタファイル40に出力するタイミングに合わせて、所定のレジスタを選択するためのデスティネーションレジスタ選択信号をレジスタファイル40に出力する。
【0061】
このような手順を繰り返すことにより、レジスタファイル40において、所定のデスティネーションレジスタに演算結果が順次書き込まれる。
以上のように、本実施の形態に係るベクトルプロセッサ1は、リングバッファをなすベクトルレジスタを備え、そのリングバッファにおける任意のアドレスを先頭アドレスとして指定可能である。
【0062】
そのため、演算対象である複数のベクトルデータが重複する場合に、ベクトルデータそれぞれを異なるベクトルレジスタに記憶することなく、1つのベクトルレジスタに記憶されたベクトルデータを循環的に読み込みあるいは書き込むことができる。
したがって、同一のデータが重複して読み出されることを回避できると共に、必要となるレジスタリソースを減少させることが可能となり、ベクトルレジスタを用いたベクトル演算を効率的に行うことが可能となる。
【0063】
また、同一のデータが重複して読み出されることを回避できるため、消費電力が軽減される。さらに、必要となるレジスタリソースが減少することから、回路規模を縮小できると共に、処理効率を向上させることができる。
なお、本実施の形態においては、第1ソースデータおよび第2ソースデータの両方について、リングバッファをなすベクトルレジスタに記憶して演算を行うこととして説明したが、いずれか一方のみをリングバッファをなすベクトルレジスタに記憶し、他方は一般的なベクトルレジスタあるいはスカラーレジスタに記憶して演算することとしてもよい。
【0064】
また、本実施の形態においては、ベクトル要素数を命令コードによって指定することとして説明したが、レジスタファイル40あるいは他のレジスタにベクトル要素数を格納し、そのレジスタを指定することとしてもよい。
【図面の簡単な説明】
【図1】8つの要素レジスタR0〜R7を有するベクトルレジスタVRを示す図である。
【図2】サイクル“2”におけるベクトルレジスタVRの状態を示す図である。
【図3】サイクル“7”におけるベクトルレジスタVRの状態を示す図である。
【図4】サイクル“8”におけるベクトルレジスタVRの状態を示す図である。
【図5】サイクル“9”におけるベクトルレジスタVRの状態を示す図である。
【図6】本発明を適用したベクトルプロセッサ1の構成を示す図である。
【図7】命令コードのデータ形式の一例を示す図である。
【図8】レジスタR0〜R31それぞれに割り当てられたコードを示す図である。
【図9】演算ユニット70の内部構成を示すブロック図である。
【図10】第1ソースレジスタ決定回路72の構成例を示す図である。
【図11】ベクトル要素数のコードを示す図である。
【符号の説明】
1 ベクトルプロセッサ,10 メモリ,20 メモリ制御部,30 命令フェッチ部,40 レジスタファイル,50 ロードユニット,60 ストアユニット,70 演算ユニット,71 命令パイプライン制御部,72 ソースレジスタ決定回路,72a 制御部,72b セレクタ,72c インクリメンタ
72d カウンタ,72e レジスタ,73 ソースレジスタ決定回路,74 デスティネーションレジスタ決定回路,75 演算器,76〜79 PR(パイプラインレジスタ)
【発明の属する技術分野】
本発明は、ベクトルレジスタを使用して演算を行うベクトルプロセッサおよびレジスタのアドレス指定方法に関する。
【0002】
【従来の技術】
従来、科学技術計算における繰り返し演算や、画像処理における画素データの演算あるいは配列データの演算等において、ベクトル演算が行われている。
ベクトル演算においては、メモリからベクトルデータを読み出し、ベクトルレジスタに記憶した上で、ベクトルデータ同士の加算あるいは乗算等、所定のベクトル演算が行われる。
【0003】
例えば、配列において隣接する2つのデータを対象として、加算等の演算を行う場合、1つのベクトルレジスタに配列データを先頭からn個(nは自然数)分記憶し、他のベクトルレジスタには、配列データを2番目のものからn個分記憶する。そして、それら2つのベクトルレジスタを対象として加算等の演算命令を実行することにより、ベクトルレジスタ内における同一アドレス同士の各要素データが演算され、配列データの演算が一括して行われる。
【0004】
ここで、ベクトル演算に関連する技術として、特開昭60−24672号公報に記載された技術が知られている。
本号公報においては、上述のように、配列において隣接する2つのデータを対象として演算を行う際、演算処理における効率を向上させる技術が開示されている。
【0005】
即ち、上述の演算を行う場合、配列の2番目からn−1個(演算される配列データの末尾の1つ前)のデータは、2つのレジスタに記憶するために、それぞれ2度ずつ読み出されることとなる。
そこで、本号公報に記載された技術では、演算対象となる配列を先頭からn+1個(演算される配列データの末尾)まで一度だけ読み出し、所定のレジスタに記憶する。そして、そのレジスタ内のデータを複数のベクトルレジスタに分配して記憶させる分配回路によって、先頭から所定数分の配列データを格納するベクトルレジスタと、2番目のものから所定数分格納するベクトルレジスタとに振り分けて記憶する。
【0006】
このような手順とすることにより、メモリから配列データを読み出す際に、同一のデータが重複して読み出されることを回避し、効率的にベクトル演算を行おうとするものである。
【0007】
【特許文献1】
特開昭60−24672号公報
【0008】
【発明が解決しようとする課題】
しかしながら、特開昭60−24672号公報に記載された技術においては、メモリから読み出したベクトルデータを一旦、所定のレジスタに記憶した後に、2つのベクトルレジスタに分配するため、多くのレジスタリソースが必要となる。
【0009】
したがって、回路規模が大きくなるという問題や、レジスタリソースが圧迫され、処理効率が低下するという問題が生じていた。
さらに、近年、機器の低消費電力化が重要視されており、書き込みを行う場合にのみ、レジスタを構成するフリップフロップに電力を供給することが一般的である。一方、特開昭60−24673号公報に記載された技術においては、同一のデータを同時に複数のベクトルレジスタに記憶することとなるため、同時にクロックを供給する対象が増え、消費電力が増大するという問題があった。
【0010】
本発明の課題は、ベクトルレジスタを用いたベクトル演算を効率的に行うことである。
【0011】
【課題を解決するための手段】
以上の課題を解決するため、本発明は、
複数の要素データからなるベクトルデータを、レジスタを使用して演算処理するベクトルプロセッサであって、複数の要素レジスタからなるベクトルレジスタとして使用可能なレジスタ(例えば、図6のレジスタファイル40)と、該ベクトルレジスタにおける任意の要素レジスタのアドレスを先頭として、前記ベクトルレジスタのアドレスを、循環的に指定するアドレス指定回路(例えば、図10に示す第1ソースレジスタ決定回路72等)とを備えることを特徴としている。
【0012】
また、前記レジスタは、複数のスカラーレジスタが1組となり、該1組のスカラーレジスタのいずれかのアドレスが先頭として指定されることにより、該複数のスカラーレジスタそれぞれのアドレスが循環的に指定されることを特徴としている。
また、前記レジスタは、任意の要素レジスタを先頭として指定可能なベクトルレジスタによって構成されていることを特徴としている。
【0013】
また、前記レジスタに記憶されたデータを対象としてベクトル演算を行う際、前記ベクトルレジスタにおいて先頭として指定されたアドレスから、該ベクトルレジスタの要素データを順次読み出し、該ベクトルレジスタの末尾のアドレスに達した場合、先頭のアドレスに戻って要素データの読み出しを継続可能であることを特徴としている。
【0014】
また、ベクトル演算の演算結果を前記レジスタに書き込む際、前記ベクトルレジスタにおいて先頭として指定されたアドレスから、該ベクトルレジスタの要素データを順次書き込み、該ベクトルレジスタの末尾のアドレスに達した場合、先頭のアドレスに戻って要素データの書き込みを継続可能であることを特徴としている。
【0015】
また、本発明は、
複数の要素データからなるベクトルデータの演算処理に用いるレジスタのアドレス指定方法であって、所定の要素レジスタを複数の要素レジスタからなるベクトルレジスタとして取り扱い、該ベクトルレジスタにおける任意の要素レジスタのアドレスを先頭として指定すると、前記ベクトルレジスタにおける各要素レジスタのアドレスが循環的に指定されることを特徴としている。
【0016】
本発明によれば、リングバッファをなすベクトルレジスタとして使用可能なレジスタを備え、そのリングバッファにおける任意のアドレスを先頭アドレスとして指定可能である。
そのため、演算対象である複数のベクトルデータが重複する場合に、ベクトルデータそれぞれを異なるベクトルレジスタに記憶することなく、1つのベクトルレジスタに記憶されたベクトルデータを循環的に読み込みあるいは書き込むことができる。
【0017】
したがって、同一のデータが重複して読み出されることを回避できると共に、必要となるレジスタリソースを減少させることが可能となり、ベクトルレジスタを用いたベクトル演算を効率的に行うことが可能となる。
【0018】
【発明の実施の形態】
以下、図を参照して本発明に係るベクトルプロセッサの実施の形態を説明する。
本発明に係るベクトルプロセッサは、リングバッファをなすベクトルレジスタを備え、ベクトルレジスタの任意のアドレスからデータにアクセスすることを可能としている。
【0019】
したがって、初めに、本発明の基本となる考え方について説明する。なお、ここでは、配列において隣接する2つのデータを対象として加算を行う場合(例えば、画像処理において、隣接画素同士の平均値を求める処理)を例に挙げて説明する。
図1は、8つの要素レジスタR0〜R7を有するベクトルレジスタVRを示す図である。
【0020】
本発明においては、加算対象となるベクトルデータを記憶するベクトルレジスタを2つ用いることなく、1つのベクトルレジスタVRによって、2つのベクトルレジスタを用いる場合と同様の処理を行う。なお、ここでいうベクトルレジスタには、スカラーレジスタをベクトルレジスタとして使用する場合を含むものである。
【0021】
まず、ベクトルレジスタVRを備えるベクトルプロセッサに、8つの要素データx0〜x7からなるベクトルデータのロード命令と、そのロード命令から2サイクル遅れた加算命令とを与える。
すると、サイクル“0”において、ベクトルレジスタVRの要素レジスタR0に要素データx0が書き込まれ、1サイクル毎に、引き続く要素レジスタに後続の要素データが順次書き込まれていく。
【0022】
ここで、サイクル“2”において、サイクル“0”に開始されたロード命令から2サイクル遅れて、加算命令が実行される。
図2は、サイクル“2”におけるベクトルレジスタVRの状態を示す図である。
図2において、要素レジスタR0,R1には、それぞれ要素データx0,x1が既に記憶されており、さらに要素レジスタR2には、要素データx2が書き込まれている。また、図2においては、加算命令が開始されており、要素レジスタR0,R1に記憶された要素データが加算されている。
【0023】
このように、ロード命令から2サイクル遅れて加算命令を実行していくと、サイクル“7”においては、図3に示す状態となる。
図3において、ロード命令については、要素レジスタR7に要素データx7を書き込む状態であり、サイクル“0”で開始されたロード命令はサイクル“7”で終了する。なお、加算命令については、要素レジスタR5,R6に記憶された要素データが加算されている。
【0024】
次に、ベクトルプロセッサには、後続のデータを処理するため、サイクル“8”において、2つ目のロード命令が与えられる。
すると、サイクル“8”においては、ベクトルレジスタVRは、図4に示す状態となる。
図4において、ロード命令については、先頭に戻り、要素レジスタR0に要素データx8を書き込む状態であり、加算命令については、要素レジスタR6,R7に記憶された要素データが加算されている。なお、サイクル“2”で開始された加算命令は、ロード命令から2サイクル送れているため、依然として加算処理を実行している。
【0025】
続いて、サイクル“2”で開始された加算命令の8サイクル目(最終サイクル)であるサイクル“9”に移行する。
図5は、サイクル“9”におけるベクトルレジスタVRの状態を示す図である。
図5において、加算命令については、要素レジスタR7から、加算対象の1つとなる要素データx7が読み出されている。
【0026】
ここで、加算対象となる他の要素データについては、ベクトルレジスタVRの先頭に戻り、要素レジスタR0に記憶されている要素データx8が読み出されている。即ち、要素レジスタR7,R0に記憶された要素データx7,x8が加算される。
なお、この後、サイクル“0”〜“9”が適宜繰り返される。
【0027】
このように、加算命令によって、ベクトルレジスタの最終アドレスを超えた要素データが参照される場合であっても、ベクトルレジスタがリングバッファをなすことによって、参照される要素データを容易に読み出すことができ、引き続く処理を円滑に行うことができる。
また、同一の要素データをメモリ等から重複して読み出す必要がなく、また、8要素を記憶可能なベクトルレジスタを1つ用いることで、8要素を超えるベクトルデータの要素データ同士の演算を行うことができるため、ベクトル演算を効率的に行うことが可能となる。
【0028】
次に、本発明に係るベクトルプロセッサの構成を説明する。
図6は、本発明を適用したベクトルプロセッサ1の構成を示す図である。
図6において、ベクトルプロセッサ1は、メモリ10と、メモリ制御部20と、命令フェッチ部30と、レジスタファイル40と、ロードユニット50と、ストアユニット60と、演算ユニット70とを含んで構成される。
【0029】
メモリ10は、ベクトルプロセッサ1に与えられる命令コードおよび演算対象となるデータを記憶している。
図7は、命令コードのデータ形式の一例を示す図であり、(a)は、ロード命令の形式、(b)は、ストア命令の形式、(c)は、演算命令の形式を示している。図7において、各命令コードには、命令コードの命令の種類を示すオペレーションコード、命令の処理対象となるベクトルデータの要素数あるいはレジスタの指定コード等、命令を実行するために必要となる情報が含まれている。
【0030】
メモリ制御部20は、メモリ10に対するアクセス、即ち、データの読み出しや書き込みを制御する。例えば、メモリ制御部20は、ロードユニット50あるいはストアユニット60によって指定されたメモリ10のアドレスからデータを読み出したり、メモリ10から読み出されたデータをレジスタファイル40に出力したりする。
【0031】
命令フェッチ部30は、メモリ制御部20を介して、メモリ10から命令コードをフェッチし、一時的に記憶する。
レジスタファイル40は、メモリ10から読み出されたデータおよび演算結果を一時的に記憶する。
ロードユニット50は、命令フェッチ部30に記憶された命令コードがロード命令である場合に、メモリ10から命令コードあるいはデータを読み出す処理を行う。
【0032】
ストアユニット60は、命令フェッチ部30に記憶された命令コードがストア命令である場合に、メモリ10にデータを書き込む処理を行う。
演算ユニット70は、命令フェッチ部30に記憶された命令コードが所定の演算命令である場合に、レジスタファイル40に記憶された所定データを対象として演算処理を行う。
【0033】
ここで、レジスタファイル40および演算ユニット70について、詳細に説明する。
まず、レジスタファイル40について説明する。
レジスタファイル40は、図6に示すように、読み書き可能な32個のレジスタR0〜R31を含んで構成される。
【0034】
また、レジスタファイル40において、レジスタR0〜R7、レジスタR8〜R15、レジスタR16〜R23およびレジスタR24〜R31は、それぞれを1組として、リングバッファの機能を有するベクトルレジスタとして使用することが可能である。
ここで、リングバッファの機能を有するベクトルレジスタとして、レジスタR0〜R31を使用可能とするためには、ベクトルレジスタにリングバッファの機能を備え、任意のアドレスを先頭アドレスとして指定可能とすることの他、スカラーレジスタをベクトルレジスタとして用いることが可能である。
【0035】
即ち、所定のスカラーレジスタを1組とし、組単位でレジスタを指定可能とすることにより、スカラーレジスタをベクトルレジスタとして使用することが可能である。なお、この場合、1組のスカラーレジスタにおける任意のアドレスを先頭アドレスとして指定することができると共に、スカラーレジスタは本来、レジスタ毎の指定が可能であることから、リングバッファとして、循環的にアドレスを指定することができる。
【0036】
また、図6に示すレジスタファイル40において、レジスタR0〜R31には、それぞれに5ビットのコードが割り当てられている。
図8は、レジスタR0〜R31それぞれに割り当てられたコードを示す図である。
レジスタファイル40に対し、図8に示す所定のコードを選択信号として入力することにより、対応するレジスタの読み出しおよび書き込みを行うことができる。
【0037】
なお、図8において、5ビットのコードのうち、上位2ビットはベクトルレジスタを指定するコードであり、下位3ビットは、ベクトルレジスタ内のアドレスを指定するコードである。
続いて、演算ユニット70について説明する。
図9は、演算ユニット70の内部構成を示すブロック図である。
【0038】
図9において、演算ユニット70は、命令パイプライン制御部71と、第1ソースレジスタ決定回路72と、第2ソースレジスタ決定回路73と、デスティネーションレジスタ決定回路74と、演算器75と、パイプラインレジスタ(PR)76〜79とを含んで構成される。
命令パイプライン制御部71は、演算ユニット70全体を制御するものである。
【0039】
第1ソースレジスタ決定回路72は、命令コードに含まれる第1ソースレジスタ指定コードに基づいて、第1ソースレジスタを選択する信号(第1ソースレジスタ選択信号)を生成する。
第2ソースレジスタ決定回路73は、命令コードに含まれる第2ソースレジスタ指定コードに基づいて、第2ソースレジスタを選択する信号(第2ソースレジスタ選択信号)を生成する。
【0040】
デスティネーションレジスタ決定回路74は、命令コードに含まれるデスティネーションレジスタ指定コードに基づいて、デスティネーションレジスタを選択する信号(デスティネーションレジスタ選択信号)を生成する。
ここで、第1ソースレジスタ決定回路72、第2ソースレジスタ決定回路73およびデスティネーションレジスタ決定回路74の構成について説明する。
【0041】
なお、第1ソースレジスタ決定回路72、第2ソースレジスタ決定回路73およびデスティネーションレジスタ決定回路74の構成は同様であるため、第1ソースレジスタを例に挙げて説明する。
図10は、第1ソースレジスタ決定回路72の構成例を示す図である。
図10において、第1ソースレジスタ決定回路72は、制御部72aと、セレクタ72bと、インクリメンタ72cと、カウンタ72dと、レジスタ72eとを含んで構成される。
【0042】
制御部72aは、命令パイプライン制御部71によって入力される動作開始信号と、命令フェッチ部30によって入力されるベクトル要素数に基づいて、第1ソースレジスタ決定回路72全体を制御する。
セレクタ72bは、サイクル“0”においては、命令フェッチ部30から入力された第1ソースレジスタ指定コードを選択して出力し、サイクル“0”以外においては、カウンタ72dおよびレジスタ72eから入力された第1ソースレジスタ選択信号を選択して出力する。
【0043】
インクリメンタ72cは、5ビットの第1ソースレジスタ指定コードのうち、下位3ビットを受け取り、“1”加算してカウンタ72dに出力する。
カウンタ72dは、サイクル“0”において、インクリメンタ72cから入力された3ビットのコードを記憶する。
また、カウンタ72dは、制御部72aの指示によってカウントイネーブル状態が切り替えられ、カウントイネーブル状態である場合に、記憶しているコードを+1して更新するカウントアップ動作を行う。
【0044】
レジスタ72eは、第1ソースレジスタ指定コードのうち、上位2ビットを受け取り、1つのベクトル演算が行われている間、そのコードを保持する。
このような構成により、第1ソースレジスタ決定回路72においては、例えば、第1ソースレジスタ指定コードがレジスタR18を示すコード“10010”であり、ベクトル要素数が“8”である場合、第1ソースレジスタ選択信号として、順次、“10010”、“10011”、“10100”、“10101”、“10110”、“10111”が出力され、引き続き、“10000”、“10001”が出力される。即ち、第1ソースレジスタ選択信号によって、レジスタR18→レジスタR19→レジスタR20→レジスタR21→レジスタR22→レジスタR23→レジスタR16→レジスタR17の順に選択される。
【0045】
つまり、レジスタR16〜R23を、リングバッファをなすベクトルレジスタとして使用できると共に、これらのレジスタにおける任意のアドレスを先頭アドレスとして指定することが可能となる。
図9に戻り、演算器75は、命令パイプライン制御部71の指示に基づいて、実際に加算等の演算を行う。
【0046】
PR76〜79は、パイプライン処理の各ステージにおいて処理されるデータを記憶する。
次に、動作を説明する。
初めに、図6を参照して、ベクトルプロセッサ1全体の動作について説明する。
【0047】
ベクトルプロセッサ1において処理が行われる場合、メモリ制御部20を介してメモリ10から命令フェッチ部30に命令コードが読み出される。
そして、ロードユニット50、ストアユニット60および演算ユニット70のそれぞれに、命令フェッチ部30から命令コードが出力される。
命令コードが入力されたロードユニット50、ストアユニット60および演算ユニット70は、その命令コードをデコードし、それぞれのユニットに対応する命令である場合にのみ、命令を実行する。
【0048】
以下、命令コードの内容に分けて、動作を説明する。
(命令コードがロード命令である場合)
命令フェッチ部30から入力された命令コードがロード命令である場合、ロードユニット50は、命令コード(図7(a)参照)において指定された基底アドレスレジスタおよびアドレス修飾レジスタのそれぞれを選択する信号をレジスタファイル40に出力する。
【0049】
すると、それぞれのアドレスに記憶されている値(基底アドレス値およびアドレス修飾値)が、ロードユニット50に読み込まれる。
そして、ロードユニット50は、基底アドレス値およびアドレス修飾値に基づいて、メモリ10のロードアドレス(読み込み対象アドレス)を生成し、メモリ制御部20に出力する。
【0050】
ロードアドレスが入力されると、メモリ制御部20は、メモリ10における対応するアドレスのデータ(ロードデータ)を読み出し、そのロードデータをレジスタファイル40に出力する。このとき、ロードユニット50は、メモリ制御部20からレジスタファイル40にロードデータが出力されるタイミングに合わせて、命令コードにおいて指定されているデスティネーションレジスタを選択するための信号を、レジスタファイル40に出力する。
【0051】
すると、レジスタファイル40において、デスティネーションレジスタに、ロードデータが書き込まれる。
(命令コードがストア命令である場合)
命令フェッチ部30から入力された命令コードがストア命令である場合、ストアユニット60は、命令コード(図7(b)参照)において指定されたデスティネーションレジスタ選択信号をレジスタファイル40に出力する。
【0052】
すると、デスティネーションアドレスに記憶されている値(ストアデータ)がストアユニット60に読み込まれる。
そして、ストアユニット60は、読み込んだストアデータをメモリ制御部20に出力する。
また、ストアユニット60は、命令コードにおいて指定されている基底アドレスレジスタおよびアドレス修飾レジスタのそれぞれを選択する信号をレジスタファイル40に出力する。
【0053】
すると、それぞれのアドレスに記憶されている基底アドレス値およびアドレス修飾値が、ストアユニット60に読み込まれる。
そして、ストアユニット60は、基底アドレス値およびアドレス修飾値に基づいて、メモリ10のストアアドレス(書き込み対象アドレス)を生成し、ストアデータをメモリ制御部20に出力するタイミングと合わせて、ストアアドレスをメモリ制御部20に出力する。
【0054】
ストアデータおよびストアアドレスが入力されると、メモリ制御部20は、メモリ10における対応するアドレスに、ストアデータを書き込む。
(命令コードが演算命令である場合)
命令フェッチ部30から入力された命令コードが演算命令である場合、演算ユニット70は、命令コード(図7(c)参照)において指定された第1ソースレジスタ選択信号および第2ソースレジスタ選択信号をレジスタファイル40に出力する。
【0055】
すると、それぞれのアドレスに記憶されている値(第1ソースデータおよび第2ソースデータ)が、演算ユニット70に読み込まれる。
そして、演算ユニット70は、第1ソースデータと第2ソースデータとの演算を行い、演算結果をレジスタファイル40に出力する。このとき、演算ユニット70は、演算結果がレジスタファイル40に出力されるタイミングに合わせて、命令コードにおいて指定されているデスティネーションレジスタ選択信号を、レジスタファイル40に出力する。
【0056】
すると、レジスタファイル40において、デスティネーションレジスタに、演算結果が書き込まれる。
次に、演算ユニット70の動作について、図9を参照して詳細に説明する。
演算ユニット70には、まず、命令フェッチ部30からオペレーションコードおよびベクトル要素数が命令パイプライン制御部71に入力される。
【0057】
このとき入力されるベクトル要素数は、ベクトル演算を行う要素データ数を指定するコードであり、ここでは、図11に示すように、3ビットのコードである。
命令フェッチ部30から入力されたオペレーションコードが演算命令である場合、命令パイプライン制御部71が、第1ソースレジスタ決定回路72および第2ソースレジスタ決定回路73に動作開始信号を出力する。
【0058】
第1ソースレジスタ決定回路72は、命令パイプライン制御部71から動作開始信号が入力されると、命令フェッチ部30から第1ソースレジスタ指定コードおよびベクトル要素数を受け取る。
そして、第1ソースレジスタ決定回路72は、命令フェッチ部30から受け取ったベクトル要素数に応じて、所定のレジスタを選択するための第1ソースレジスタ選択信号をレジスタファイル40に順次出力する。
【0059】
すると、レジスタファイル40から、所定の第1ソースデータが、PR76に順次入力される。
また、第2ソースデータについても、第1ソースデータと同様の手順によって、PR77に順次入力される。
そして、演算器75が、PR76,77に記憶されている第1ソースデータおよび第2ソースデータの演算を行い、演算結果をレジスタファイル40に出力する。
【0060】
一方、命令フェッチ部30から入力されたデスティネーションレジスタ指定コードは、PR78に記憶され、同様にPR79に記憶されたベクトル要素数とタイミングを合わせられた上で、デスティネーションレジスタ決定回路74に入力される。
すると、デスティネーションレジスタ決定回路74は、演算器75が演算結果をレジスタファイル40に出力するタイミングに合わせて、所定のレジスタを選択するためのデスティネーションレジスタ選択信号をレジスタファイル40に出力する。
【0061】
このような手順を繰り返すことにより、レジスタファイル40において、所定のデスティネーションレジスタに演算結果が順次書き込まれる。
以上のように、本実施の形態に係るベクトルプロセッサ1は、リングバッファをなすベクトルレジスタを備え、そのリングバッファにおける任意のアドレスを先頭アドレスとして指定可能である。
【0062】
そのため、演算対象である複数のベクトルデータが重複する場合に、ベクトルデータそれぞれを異なるベクトルレジスタに記憶することなく、1つのベクトルレジスタに記憶されたベクトルデータを循環的に読み込みあるいは書き込むことができる。
したがって、同一のデータが重複して読み出されることを回避できると共に、必要となるレジスタリソースを減少させることが可能となり、ベクトルレジスタを用いたベクトル演算を効率的に行うことが可能となる。
【0063】
また、同一のデータが重複して読み出されることを回避できるため、消費電力が軽減される。さらに、必要となるレジスタリソースが減少することから、回路規模を縮小できると共に、処理効率を向上させることができる。
なお、本実施の形態においては、第1ソースデータおよび第2ソースデータの両方について、リングバッファをなすベクトルレジスタに記憶して演算を行うこととして説明したが、いずれか一方のみをリングバッファをなすベクトルレジスタに記憶し、他方は一般的なベクトルレジスタあるいはスカラーレジスタに記憶して演算することとしてもよい。
【0064】
また、本実施の形態においては、ベクトル要素数を命令コードによって指定することとして説明したが、レジスタファイル40あるいは他のレジスタにベクトル要素数を格納し、そのレジスタを指定することとしてもよい。
【図面の簡単な説明】
【図1】8つの要素レジスタR0〜R7を有するベクトルレジスタVRを示す図である。
【図2】サイクル“2”におけるベクトルレジスタVRの状態を示す図である。
【図3】サイクル“7”におけるベクトルレジスタVRの状態を示す図である。
【図4】サイクル“8”におけるベクトルレジスタVRの状態を示す図である。
【図5】サイクル“9”におけるベクトルレジスタVRの状態を示す図である。
【図6】本発明を適用したベクトルプロセッサ1の構成を示す図である。
【図7】命令コードのデータ形式の一例を示す図である。
【図8】レジスタR0〜R31それぞれに割り当てられたコードを示す図である。
【図9】演算ユニット70の内部構成を示すブロック図である。
【図10】第1ソースレジスタ決定回路72の構成例を示す図である。
【図11】ベクトル要素数のコードを示す図である。
【符号の説明】
1 ベクトルプロセッサ,10 メモリ,20 メモリ制御部,30 命令フェッチ部,40 レジスタファイル,50 ロードユニット,60 ストアユニット,70 演算ユニット,71 命令パイプライン制御部,72 ソースレジスタ決定回路,72a 制御部,72b セレクタ,72c インクリメンタ
72d カウンタ,72e レジスタ,73 ソースレジスタ決定回路,74 デスティネーションレジスタ決定回路,75 演算器,76〜79 PR(パイプラインレジスタ)
Claims (6)
- 複数の要素データからなるベクトルデータを、レジスタを使用して演算処理するベクトルプロセッサであって、
複数の要素レジスタからなるベクトルレジスタとして使用可能なレジスタと、
該ベクトルレジスタにおける任意の要素レジスタのアドレスを先頭として、前記ベクトルレジスタのアドレスを、循環的に指定するアドレス指定回路と、
を備えることを特徴とするベクトルプロセッサ。 - 前記レジスタは、複数のスカラーレジスタが1組となり、該1組のスカラーレジスタのいずれかのアドレスが先頭として指定されることにより、該複数のスカラーレジスタそれぞれのアドレスが循環的に指定されることを特徴とする請求項1記載のベクトルプロセッサ。
- 前記レジスタは、任意の要素レジスタを先頭として指定可能なベクトルレジスタによって構成されていることを特徴とする請求項1記載のベクトルプロセッサ。
- 前記レジスタに記憶されたデータを対象としてベクトル演算を行う際、前記ベクトルレジスタにおいて先頭として指定されたアドレスから、該ベクトルレジスタの要素データを順次読み出し、該ベクトルレジスタの末尾のアドレスに達した場合、先頭のアドレスに戻って要素データの読み出しを継続可能であることを特徴とする請求項1〜3のいずれかに記載のベクトルプロセッサ。
- ベクトル演算の演算結果を前記レジスタに書き込む際、前記ベクトルレジスタにおいて先頭として指定されたアドレスから、該ベクトルレジスタの要素データを順次書き込み、該ベクトルレジスタの末尾のアドレスに達した場合、先頭のアドレスに戻って要素データの書き込みを継続可能であることを特徴とする請求項1〜4のいずれかに記載のベクトルプロセッサ。
- 複数の要素データからなるベクトルデータの演算処理に用いるレジスタのアドレス指定方法であって、
所定の要素レジスタを複数の要素レジスタからなるベクトルレジスタとして取り扱い、該ベクトルレジスタにおける任意の要素レジスタのアドレスを先頭として指定すると、前記ベクトルレジスタにおける各要素レジスタのアドレスが循環的に指定されることを特徴とするレジスタのアドレス指定方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003092371A JP2004302647A (ja) | 2003-03-28 | 2003-03-28 | ベクトルプロセッサおよびレジスタのアドレス指定方法 |
US10/801,547 US20040243788A1 (en) | 2003-03-28 | 2004-03-17 | Vector processor and register addressing method |
EP04007010A EP1462932A3 (en) | 2003-03-28 | 2004-03-24 | Vector processor and register addressing method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003092371A JP2004302647A (ja) | 2003-03-28 | 2003-03-28 | ベクトルプロセッサおよびレジスタのアドレス指定方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004302647A true JP2004302647A (ja) | 2004-10-28 |
Family
ID=32821637
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003092371A Withdrawn JP2004302647A (ja) | 2003-03-28 | 2003-03-28 | ベクトルプロセッサおよびレジスタのアドレス指定方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20040243788A1 (ja) |
EP (1) | EP1462932A3 (ja) |
JP (1) | JP2004302647A (ja) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8364934B2 (en) * | 2006-07-11 | 2013-01-29 | Freescale Semiconductor, Inc. | Microprocessor and method for register addressing therein |
US20080028192A1 (en) * | 2006-07-31 | 2008-01-31 | Nec Electronics Corporation | Data processing apparatus, and data processing method |
US9606961B2 (en) * | 2012-10-30 | 2017-03-28 | Intel Corporation | Instruction and logic to provide vector compress and rotate functionality |
WO2022220835A1 (en) * | 2021-04-15 | 2022-10-20 | Zeku, Inc. | Shared register for vector register file and scalar register file |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0210467A (ja) * | 1988-03-01 | 1990-01-16 | Ardent Computer Corp | ベクトル・レジスタ・フアイル |
JP2002517038A (ja) * | 1998-05-27 | 2002-06-11 | エイアールエム リミテッド | 再循環レジスタファイル |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE3585972D1 (de) * | 1984-07-02 | 1992-06-11 | Nec Corp | Rechner-vektorregisterverarbeitung. |
WO1989011129A1 (en) * | 1988-05-10 | 1989-11-16 | Cray Research, Inc. | Vector tailgating in computers with vector registers |
US5197130A (en) * | 1989-12-29 | 1993-03-23 | Supercomputer Systems Limited Partnership | Cluster architecture for a highly parallel scalar/vector multiprocessor system |
US5437043A (en) * | 1991-11-20 | 1995-07-25 | Hitachi, Ltd. | Information processing apparatus having a register file used interchangeably both as scalar registers of register windows and as vector registers |
US5838984A (en) * | 1996-08-19 | 1998-11-17 | Samsung Electronics Co., Ltd. | Single-instruction-multiple-data processing using multiple banks of vector registers |
US6189094B1 (en) * | 1998-05-27 | 2001-02-13 | Arm Limited | Recirculating register file |
WO1999061997A1 (en) * | 1998-05-27 | 1999-12-02 | Arm Limited | Recirculating register file |
US6665790B1 (en) * | 2000-02-29 | 2003-12-16 | International Business Machines Corporation | Vector register file with arbitrary vector addressing |
US20040073773A1 (en) * | 2002-02-06 | 2004-04-15 | Victor Demjanenko | Vector processor architecture and methods performed therein |
-
2003
- 2003-03-28 JP JP2003092371A patent/JP2004302647A/ja not_active Withdrawn
-
2004
- 2004-03-17 US US10/801,547 patent/US20040243788A1/en not_active Abandoned
- 2004-03-24 EP EP04007010A patent/EP1462932A3/en not_active Withdrawn
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0210467A (ja) * | 1988-03-01 | 1990-01-16 | Ardent Computer Corp | ベクトル・レジスタ・フアイル |
JP2002517038A (ja) * | 1998-05-27 | 2002-06-11 | エイアールエム リミテッド | 再循環レジスタファイル |
Also Published As
Publication number | Publication date |
---|---|
US20040243788A1 (en) | 2004-12-02 |
EP1462932A2 (en) | 2004-09-29 |
EP1462932A3 (en) | 2006-07-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11669330B2 (en) | Method for performing random read access to a block of data using parallel LUT read instruction in vector processors | |
US8954941B2 (en) | Method and apparatus and record carrier | |
JP2008513903A (ja) | シャッフル演算のためのマイクロプロセッサデバイス及び方法 | |
KR100331565B1 (ko) | 매트릭스 연산 장치 및 매트릭스 연산기능을 갖는 디지털신호처리 장치 | |
JP3659252B2 (ja) | ベクトルデータのアドレス参照方法およびベクトルプロセッサ | |
JP4686435B2 (ja) | 演算装置 | |
JP4955149B2 (ja) | ビットfifoを有するディジタル信号プロセッサ | |
US20240004663A1 (en) | Processing device with vector transformation execution | |
JP2004302647A (ja) | ベクトルプロセッサおよびレジスタのアドレス指定方法 | |
JP2020527797A (ja) | データ処理装置におけるベクトル・インタリーブ | |
US20080229063A1 (en) | Processor Array with Separate Serial Module | |
JP2006072961A (ja) | 演算処理装置のメモリ回路 | |
JP2002073325A (ja) | データ処理装置及び方法 | |
JPH1153189A (ja) | 演算装置、演算方法及びコンピュータ読み取り可能な記録媒体 | |
JP4901891B2 (ja) | 画像処理プロセッサ | |
EP1251425A2 (en) | Very long instruction word information processing device and system | |
JP2004334297A (ja) | 並列演算処理装置及び並列演算処理方法 | |
JP4413905B2 (ja) | Simd型プロセッサ | |
JP2001357395A (ja) | 画像処理装置およびその方法 | |
JP2004302772A (ja) | ベクトルプロセッサおよびアドレス指定方法 | |
JP2004334306A (ja) | 演算処理回路及び演算処理方法 | |
JP2008009473A (ja) | データ処理装置及びプログラム実行方式 | |
KR100896269B1 (ko) | SIMD/SISD/Row/Column 동작을 할 수있는 SIMD 병렬 프로세서 | |
JPH1063639A (ja) | 演算装置 | |
JP2007102596A (ja) | 中央処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20060322 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060905 |
|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20061025 |