JP5699554B2 - ベクトル処理回路、命令発行制御方法、及びプロセッサシステム - Google Patents

ベクトル処理回路、命令発行制御方法、及びプロセッサシステム Download PDF

Info

Publication number
JP5699554B2
JP5699554B2 JP2010252839A JP2010252839A JP5699554B2 JP 5699554 B2 JP5699554 B2 JP 5699554B2 JP 2010252839 A JP2010252839 A JP 2010252839A JP 2010252839 A JP2010252839 A JP 2010252839A JP 5699554 B2 JP5699554 B2 JP 5699554B2
Authority
JP
Japan
Prior art keywords
instruction
register
array
data
vector
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.)
Expired - Fee Related
Application number
JP2010252839A
Other languages
English (en)
Other versions
JP2012103959A (ja
Inventor
毅 葛
毅 葛
竹部 好正
好正 竹部
宏政 高橋
宏政 高橋
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 JP2010252839A priority Critical patent/JP5699554B2/ja
Priority to US13/279,482 priority patent/US8874879B2/en
Publication of JP2012103959A publication Critical patent/JP2012103959A/ja
Application granted granted Critical
Publication of JP5699554B2 publication Critical patent/JP5699554B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)

Description

本発明の実施例の一側面において開示する技術は、ベクトルレジスタファイルに格納されたデータに対してパイプライン処理を行うベクトル処理回路、及びそのベクトル処理回路を含むプロセッサシステムに関する。
データの演算処理を行う回路として、ベクトル処理回路が知られている。ベクトル処理回路は、一般にスーパーコンピュータにおいて用いられており、ベクトルレジスタファイルに格納された配列型のデータを扱う。
ベクトル処理回路は、命令に応じて所望の演算処理を行う複数のパイプライン演算器を有し、各パイプライン演算器においてマルチサイクル動作を行う。すなわち、ベクトル処理回路は、処理すべき配列データを複数の部分データごとに複数のサイクルにわたって処理し、配列データ全体に対する処理を完了するまで複数のサイクルにわたって各パイプライン演算器を占有する。
配列データのサイズ、すなわち配列要素の個数は、ベクトル長(VL)によって指定される。ベクトル長によって指定された個数の配列要素は1つの配列レジスタを構成する。ベクトル長はベクトル処理回路内に設けられたベクトル長レジスタによって指定される。各配列要素のサイズは、ベクトル処理回路が扱うデータ語長に応じて割り当てられる。データ語長は命令によって指定される。
図1は、スーパーコンピュータ向けのベクトルレジスタファイルの構成例を示す図である。図1に示したベクトルレジスタファイル101は、1ダブルワード(doubleword)×256エントリの構成を有し、ベクトル長は16である(VL=16)。
図1に示した例では、1つの配列要素102はそれぞれ64ビットのデータを格納する。16個の配列要素102により1つの配列レジスタ103が構成され、ベクトルレジスタファイル101は16個の配列レジスタ103により構成されている。各配列レジスタ103には配列データ104が格納されている。各配列要素には物理番号(0〜255)が割り当てられており、各配列レジスタには論理番号(0〜15)が割り当てられている。ベクトルレジスタファイル101に対するアクセスは、配列レジスタの論理番号を指定することにより行われるが、更に、指定された論理番号とベクトル長に基づいて、配列要素の物理番号を生成することにより行われる。
また、図1のスーパーコンピュータ向けの構成例では、ベクトル処理回路が扱う最大のデータ語長(例えば、64ビット)を基本単位として配列要素のサイズが割り当てられている。データ語長の長さが半分の場合(例えば、32ビット)には、各配列要素において前半の32ビットのみを使用し、後半の32ビットは不使用とする方法が採用されている。図1に示したように、例えば、ベクトル処理回路が倍精度処理型の命令を扱う場合には、データ語長は64ビットであり、例えば、各配列要素において64ビット全てを使用する。一方、単精度処理型の命令を扱う場合には、データ語長は32ビットであるため、各配列要素において前半の32ビットのみを使用する。
ところで、ベクトル処理回路においては、命令発行時に、先行命令と後続命令の間でレジスタ干渉の有無が判定される。これは、先行命令で指定された配列レジスタと、後続命令で指定された配列レジスタとが重複する場合、先行命令における処理結果(配列データ)を適切に後続命令における処理に反映させるために、相互の命令の発行タイミングを適切に調整する必要があるからである。
通常、各パイプライン演算器で処理される配列データは対応する配列レジスタを構成する先頭の配列要素の物理番号(または、論理番号)のみで区別することができる。配列データは同一の数の配列要素で構成され、1つの命令に対して、対応する配列レジスタを構成する複数の配列要素が一体として処理されるためである。例えば、図1に示したベクトルレジスタファイル101においては、各配列レジスタ(論理番号0〜15)の配列データの区別は、各配列レジスタの先頭の配列要素の物理番号(0,16,32,・・・,240)により可能である。
このため、先行命令と後続命令の間でレジスタ干渉の有無を判定するときには、先行命令で指定された配列レジスタの先頭の配列要素の物理番号と、後続命令で指定された配列レジスタの先頭の配列要素の物理番号を比較するのが一般的であった。
また、先行命令と後続命令の間でレジスタ干渉が検出された場合、先行命令における処理結果がレジスタファイルに書き込まれるまで一定のサイクルだけ遅延させてから後続命令を実行させる技術が知られている。
特開平10−110686号公報 特開平10−124313号公報 特公平07−86838号公報
従来、ベクトル処理回路は一般にスーパーコンピュータのようなハイパフォーマンスコンピューティングの分野において使用されてきたが、近年、ベクトル処理回路を無線ベースバンド処理のような信号処理系アプリケーションの分野に応用することが検討されている。この場合、ベクトル処理回路はDSP(Digital Signal Processor)のような組み込み機器向けのプロセッサにおいて使用されることが想定される。
また、上記の無線ベースバンド処理のような分野では、例えばデータ語長が16ビットであるハーフワード(Halfword)命令とデータ語長が32ビットであるワード(Word)命令のように、データ語長が異なる命令をプログラム中に混在させて使用するケースが頻繁に発生する。
先行命令と後続命令との間でデータ語長が異なる場合であっても、レジスタ干渉の有無を判定する必要がある。そこで、図1に示したスーパーコンピュータ向けのベクトルレジスタファイル101の構成例を使用することが考えられる。この場合、データ語長の異なる命令が混在する場合であっても、常に同じサイズの配列レジスタをアクセス単位としてベクトルレジスタファイルへのアクセスが行われるため、データ語長の違いに関わらず、レジスタ干渉の有無の判定を、命令で指定された配列レジスタの先頭の配列要素の物理番号のみを比較することによって、実行することができる。
しかしながら、半分のサイズのデータ語長の命令(ハーフワード命令)を実行する場合、各配列要素の後半部分が使用されないため、実質的にベクトルレジスタファイル101の半分の領域が使用されず、レジスタの使用に大きな無駄が生じる。このことは、限られた容量のレジスタしか搭載することができず、ベクトルレジスタファイルの全体の容量を十分に大きくすることが困難な、組み込み機器向けプロセッサにおいては大きな問題となる。
一方、データ語長の異なる命令が混在する場合には、レジスタ干渉の有無に関わらず無条件で、先行命令の処理が終了するまで後続命令をストールさせるように、後続命令の発行を遅延させることにより、レジスタ干渉が生じる危険を回避することも考えられる。
しかしながら、この場合、各パイプライン演算器において実質的にパイプライン処理が並行して実行されないことになるので、ベクトル処理回路の利点を生かすことができず、命令実行の効率が極めて悪くなる。このことは、限られた処理能力の演算器しか搭載することができず、パイプライン演算器の処理能力を十分に大きくすることが困難な、組み込み機器向けプロセッサにおいては大きな問題となる。
従って、本実施例の一側面におけるベクトル処理回路は、プログラム中にデータ語長が異なる命令が混在する場合であっても、限られたレジスタ容量のベクトルレジスタファイルを無駄なく使用しながら、データ語長が異なる命令に対してレジスタ干渉の有無の判定を正確に行うことを目的とする。さらに、レジスタ干渉の有無を正確に検出することによって先行命令と後続命令の発行タイミングを適切に調整し、命令実行の効率化を図ることを目的とする。
さらに、限られたレジスタ容量と処理能力しか持たない、組み込み機器向けプロセッサ向けのベクトル処理回路であっても、データ語長が異なる命令を効率的に実行できるようにすることを目的とする。
本実施例に係るベクトル処理回路は、複数の配列要素を含むベクトルレジスタファイルと、各々が前記配列要素に格納されたデータに対して演算処理を行う複数のパイプライン演算器と、先行命令と前記先行命令の後に続く後続命令を含む命令を発行し、前記命令に基づいて前記ベクトルレジスタファイル及び前記パイプライン演算器を制御して、パイプライン処理を制御する命令発行制御回路とを有するベクトル処理回路であって、前記パイプライン演算器の各々は、1つの命令に対して、前記命令でソースとして指定された複数の前記配列要素に格納されたデータを複数のサイクルに分けて演算し、前記演算結果を前記命令でディスティネーションとして指定された複数の前記配列要素に複数のサイクルに分けて格納し、前記命令発行制御回路は、前記命令のデータ語長に応じて前記配列要素のデータサイズを変化させ、前記先行命令のデータ語長が前記後続命令のデータ語長より長いとき、前記先行命令の非先頭のサイクルで処理される少なくとも1つの前記配列要素と、前記後続命令の先頭サイクルで処理される前記配列要素との間で、レジスタ干渉の有無を判定し、レジスタ干渉が有ると判定した場合に、前記後続命令の発行タイミングを調整することを特徴とする。
本実施例に係るベクトル処理回路では、データ語長が異なる命令が混在する場合であっても、複数のレジスタ干渉の態様に応じて、先行命令と後続命令との間でレジスタ干渉の判定を適切に行い、レジスタ干渉の有無を正確に検出することができ、正確な検出結果に基づいて、後続命令の発行タイミングを適切に調整することができる。従って、データ語長の異なる命令が混在する場合であっても、命令発行の効率化を図ることができる。
スーパーコンピュータ向けのベクトルレジスタファイルの構成例を示す図である。 第1実施例に係るベクトル処理回路の構成例を示す図である。 ベクトルレジスタファイル201の構成例を示す図である。 ベクトル処理回路200のパイプライン処理を説明するための図である。 先行命令のデータ語長と後続命令のデータ語長が同一の場合の、レジスタ干渉の判定処理を説明するための図である。 先行命令のデータ語長と後続命令のデータ語長が同一の場合の、命令発行タイミングの調整処理の一例を示す図である。 先行命令のデータ語長が後続命令のデータ語長より長い場合の、レジスタ干渉の判定処理を説明するための図である。 先行命令のデータ語長が後続命令のデータ語長より長い場合の、命令発行タイミングの調整処理の一例を示す図である。 先行命令のデータ語長が後続命令のデータ語長より長い場合の、命令発行タイミングの調整処理の一例を示す図である。 命令発行制御回路202の処理フロー1000を示す図である。 発行判定値IDの設定方法を示す図である。 第2実施例に係るベクトル処理回路の構成例を示す図である。 スカラレジスタファイル1201の詳細を示す図である。 ベクトルレジスタファイル201の内容を示す図である。 ベクトル処理回路1200の動作の一例を示す図である。 図15の命令INST1〜5に対して従来の命令発行タイミング調整処理を適用した例を示す図である。 第3実施例に係るベクトル処理回路の構成例を示す図である。 第4実施例に係るプロセッサシステムの一例を示す図である。
以下、本発明の実施例について説明する。
[1.第1実施例]
図2は、本発明の第1実施例に係るベクトル処理回路の構成例を示す図である。図2に示したように、ベクトル処理回路200はベクトルレジスタファイル201、命令発行制御回路202、4つのパイプライン演算器203〜206及び命令バッファ207を含み、後述する複数のパイプラインステージに従ってパイプライン処理を実行する。
[1−1.ベクトル処理回路の構成例]
まず、ベクトル処理回路200の構成例について、図2を用いて説明する。
命令バッファ207はベクトル処理回路200が実行する命令を格納する。命令発行制御回路202は、命令バッファ207に接続され、命令バッファ207から命令を受けとる。命令発行制御回路202は、受けとった命令に基づいてベクトルレジスタファイル201及びパイプライン演算器203〜206の動作を制御する。命令発行制御回路202は、受けとった命令(後続命令)と、すでに実行中の命令(先行命令)との間でレジスタ干渉の有無を判定し、判定結果に応じて後続命令の発行タイミングを調整する。また、命令発行制御回路210はベクトル長(VL)を指定するVLレジスタ210を含む。
ベクトルレジスタファイル201は、4つのパイプライン演算器203〜206が処理するデータを格納する。ベクトルレジスタファイル201は、命令発行制御回路202の制御の下、各パイプライン演算器203〜206に処理すべきデータを供給する。ベクトルレジスタファイル201の詳細については後述する。
ベクトルレジスタファイル201と各パイプライン演算器203〜206の間には、各パイプライン演算器が処理するデータを格納するパイプラインレジスタ208が設けられる。各パイプラインレジスタ208は、ベクトルレジスタファイル201から、対応するパイプライン演算器が処理するデータを受けとる。
各パイプライン演算器203〜206は算術論理演算ユニットALU211を含み、各ALU211は4つの演算器を含む。各演算器は対応するパイプラインレジスタ208と接続され、パイプラインレジスタ208から処理すべきデータの供給を受け、命令発行制御回路202の制御の下、所望の演算を実行する。ここで、各演算器は同時に16ビットのデータを演算することが可能な16ビット演算器である。このため、1つのALUは1サイクルで、16ビットのデータであれば4個のデータを処理することができ、32ビットのデータであれば2個のデータを処理することができる。
各パイプライン演算器203〜206はALU211の演算結果を格納するパイプラインレジスタ209を含む。パイプラインレジスタ209はベクトルレジスタファイル201を接続されている。各パイプライン演算器203〜206はパイプラインレジスタ209を介して、その演算結果をベクトルレジスタファイル201に書き戻すことができる。
[1−2.ベクトルレジスタファイル201の構成例]
次に、ベクトルレジスタファイル201の詳細について説明する。
図3はベクトルレジスタファイル201の構成例を示す図である。
上述のように、無線ベースバンド処理のような分野にベクトル処理回路を応用する場合、例えば、データ語長が16ビットであるハーフワード命令とデータ語長が32ビットであるワード(Word)命令のように、先行命令と後続命令の間でデータ語長が異なる命令が混在するケースが頻繁に発生する。
そこで、ベクトルレジスタファイル201においては、ハーフワード命令時の論理番号及び物理番号の割り当てが定められるとともに、ワード命令時の論理番号及び物理番号の割り当てが定められている。
[1−2−1.ハーフワード命令時の割り当て例]
まず、ハーフワード命令時の論理番号及び物理番号の割り当ての一例を、図3を用いて説明する。これらの論理番号及び物理番号の割り当ては命令発行制御回路202によって管理される。
図3に示したベクトルレジスタファイル201は、例えば、1ハーフワード(Halfword)×512エントリの構成を有し、ベクトル長は32である(VL=32)。
図3に示した例では、1つの配列要素302はそれぞれ16ビットのデータを格納する。32個の配列要素302により1つの配列レジスタ303が構成され、ベクトルレジスタファイル201は16個の配列レジスタ303により構成されている。各配列レジスタ303には配列データ304が格納されている。
命令発行制御回路202は各配列要素302に物理番号0〜511を割り当て、各配列レジスタ303に論理番号0〜15を割り当てる。ベクトルレジスタファイル201に対するアクセスは、配列レジスタ303の論理番号を指定することにより行われるが、更に、指定された論理番号及びベクトル長に基づいて、命令発行制御回路202が配列要素302の物理番号を生成することにより行われる。
尚、図3に示した例では、各パイプライン演算器203〜206は1サイクルで4つの配列要素302のデータを演算する。上述のとおり、各パイプライン演算器203〜206のALU211は、1サイクルで4個の16ビットデータを処理することができるからである。1つの配列レジスタ303が32個の配列要素302により構成されることから、1つの配列データ304の全ての部分データに対する演算処理を実行するためには、8(=32/4)サイクルが必要である。各パイプライン演算器203〜206のALU211は1つの配列データ304に対して、物理番号の小さいものから4個ずつ分けられた配列要素302からなる8個の部分データを、8サイクルに分けて順番に演算していく。
[1−2−2.ワード命令時の割り当て例]
次に、ワード命令時の論理番号及び物理番号の割り当ての一例を、図3を用いて説明する。これらの論理番号及び物理番号の割り当ては命令発行制御回路202によって管理される。
ワード命令時の配列レジスタの構成と対応する論理番号の割り当ては、ハーフワード命令時の配列レジスタの構成と対応する論理番号の割り当てとは異なるが、それらを利用したものとなっている。
ワード命令時においては、命令発行制御回路202は、ハーフワード命令に対して割り当てられた物理番号に関して、偶数の物理番号Aを有するものと、奇数の物理番号A+1を有するものからなる、隣接する2つの配列要素302を、1つの配列要素305として扱う。
また、命令発行制御回路202は、ハーフワード命令に対して割り当てられた論理番号に関して、偶数の論理番号Nを有するものと、奇数の論理番号N+1を有するものからなる、隣接する2つの配列レジスタ303を1つの配列レジスタ306として扱う。各配列レジスタ306には配列データ307が格納されている。
命令発行制御回路202は、各配列要素305に、対応する2つの配列要素302のうちの偶数の物理番号を有する配列要素302と同一の物理番号を割り当て、偶数のみの物理番号0,2,4,・・・,508,510を割り当てる。命令発行制御回路202は、各配列レジスタ306に、対応する2つの配列レジスタ303のうちの偶数の論理番号を有する配列レジスタ303と同一の論理番号を割り当て、偶数のみの論理番号0,2,4,・・・,12,14を割り当てる。ベクトルレジスタファイル201に対するアクセスは、配列レジスタ306の論理番号を指定することにより行われるが、更に、指定された論理番号とベクトル長に基づいて、命令発行制御回路202が配列要素305の物理番号を生成することにより行われる。
すなわち、ベクトルレジスタファイル201においては、データ語長が異なる命令が混在する場合、短い方のデータ語長に合わせて、配列要素及び配列レジスタのサイズや構成を定めておき、長い方のデータ語長に対しては、長い方のデータ語長と短い方のデータ語長の長さの比率に応じて、短い方のデータ語長に対して定められた配列要素及び配列レジスタを複数個組み合わせて、仮想的に1つの配列要素及び配列レジスタとして取り扱う方式を採用する。
これにより、ベクトルレジスタファイル201においては、データ語長が異なる命令が混在する場合であっても、各データ語長に合わせて配列要素及び配列レジスタの割り当てを最適化することができるので、ベクトルレジスタファイルにおいて使用されない配列要素のビットをなくすことができる。
従って、第1実施例に係るベクトルレジスタファイル201においては、データ語長が異なる命令が混在する場合であって、ベクトルレジスタファイル201が限られたレジスタ容量しか持たない場合であっても、これを無駄なく使用しながら、データ語長が異なる命令を適切に処理することができる。
尚、図3に示した例では、各パイプライン演算器203〜206は1サイクルで2つの配列要素305のデータを演算する。上述のとおり、各パイプライン演算器203〜206のALU211は1サイクルで2個の32ビットのデータを処理することができるからである。1つの配列レジスタ306が32個の配列要素305により構成されることから、1つの配列データ307の全ての部分データに対する演算処理を実行するためには、16(=32/2)サイクルが必要である。各パイプライン演算器203〜206のALU211は1つの配列データ307に対して、物理番号の小さいものから2個ずつ分けられた配列要素305からなる16個の部分データを、16サイクルに分けて順番に演算していく。
[1−3.ベクトル処理回路200のパイプライン処理]
図4は、ベクトル処理回路200のパイプライン処理を説明するための図である。図4において、IFは命令フェッチ(Instruction Fetch)を、IDは命令デコード(Instruction Decode)を、RRはレジスタリード(Register Read)を、EXは命令実行(Execution)を、WBは書き戻し(Write Back)を表す。すなわち、ベクトル処理回路200のパイプライン処理はIF、ID、RR、EX及びWBからなる5段のパイプラインステージを有する。5段のパイプラインステージは連続する5つのサイクルにおいて順番に実行される。
まず、IFステージにおいて、命令バッファ207は、ベクトル処理回路200の外部に設けられた命令メモリ(不図示)から、処理すべき命令を受け取る。ここで、命令は、パイプライン演算器203〜206が処理する演算の内容を示す命令コードと、演算の対象となる配列データが格納された配列レジスタの論理番号を示すソース情報と、演算結果を格納すべき配列レジスタの論理番号を示すディスティネーション情報を含む。
次に、IDステージにおいて、命令発行制御回路202は命令バッファ207から命令を受けとり、受けとった命令をデコードする。
次に、RRステージにおいて、命令発行制御回路202は、命令デコードの結果得られたソース情報に基づいて、ベクトルレジスタファイル201に対して、読み出し対象となる配列データが格納された配列レジスタの論理番号を指定する。ベクトルレジスタファイル201は、命令発行制御回路202の制御の下、指定された論理番号に対応する配列レジスタにおいて所望の配列要素を選択し、選択した配列要素のデータを、命令が実行されるパイプライン演算器に対応するパイプラインレジスタ208に格納する。
次に、EXステージにおいて、各パイプライン演算器203〜206に含まれるALU211は、命令発行制御回路202の制御の下、パイプランレジスタ208に格納されたデータに対して、デコードの結果得られた命令コードに応じた演算を実行する。各パイプライン演算器203〜206は演算結果を、対応するパイプラインレジスタ209に格納する。
次に、WBステージにおいて、各パイプライン演算器203〜206は、パイプラインレジスタ209に格納された演算結果のデータをベクトルレジスタファイル201に書き戻す。このとき、命令発行制御回路202は、命令デコードの結果得られたディスティネーション情報に基づいて、ベクトルレジスタファイル201に対して、書き込み対象となる配列レジスタの論理番号を指定する。パイプラインレジスタ209に格納された演算結果のデータは、ベクトルレジスタファイル201において、指定された論理番号に対応する配列レジスタに順次格納される。
ベクトル処理回路200は4つのパイプライン演算器203〜206を有するので、上述の5段のパイプラインステージを有するパイプライン処理をパイプライン演算器203〜206の各々において並行して実行することができる。すなわち、ベクトル処理回路200は4つの実行パイプラインを有する。
尚、上述のパイプライン処理では5段のパイプラインステージを用いたが、パイプライン処理のステージ構成はこれに限定されない。例えば、EXステージとWBステージの間に、ベクトル処理回路200の外部メモリ(不図示)に対するデータの読み出しや書き込みを行う、メモリアクセスMA(Memory Access)ステージを設けてもよい。MAステージを設けた場合には、MAステージの処理結果のデータを格納するためのパイプラインレジスタが追加で設けられる。
[1−4.先行命令のデータ語長と後続命令のデータ語長が同一の場合のベクトル処理回路の動作例]
ここで、まず、先行命令のデータ語長と後続命令のデータ語長が同一の場合の、レジスタ干渉の判定処理と命令発行タイミングの調整処理について説明する。ここでは、図3に示したベクトルレジスタファイル201が用いられる。
尚、この明細書において、配列レジスタの先頭の配列要素とは、配列レジスタを構成する複数の配列要素の中で、各パイプライン演算器が実行する複数の処理サイクルの先頭サイクルで処理される配列要素のことをいい、例えば、配列レジスタを構成する複数の配列要素のうちで最も小さい物理番号を有する配列要素のことである。非先頭の配列要素とは、配列レジスタを構成する複数の配列要素の中で、各パイプライン演算器が実行する複数の処理サイクルの非先頭のサイクルで処理される配列要素のことをいい、例えば、ある特定の非先頭サイクルで処理される配列要素のうちで最も小さい物理番号を有する配列要素のことである。
[1−4−1.レジスタ干渉の判定処理]
以下、先行命令のデータ語長と後続命令のデータ語長が同一の場合のレジスタ干渉の判定処理の一例を説明する。
図5は、先行命令のデータ語長と後続命令のデータ語長が同一の場合の、レジスタ干渉の判定処理を説明するための図である。図5においては、先行命令と後続命令がともにハーフワード命令であり、先行命令のディスティネーションが配列レジスタvrN(N=0〜15)であり、後続命令のソースが配列レジスタvrM(M=0〜15)であるものとする。ここで、例えば、vrNとは、ハーフワード命令に対して割り当てられた論理番号がNである配列レジスタ303を表す。
この場合、配列レジスタvrNの先頭の配列要素の物理番号Aは、論理番号Nとベクトル長VLを乗算することにより得ることができ、配列レジスタvrMの先頭の配列要素の物理番号Bは、論理番号Mとベクトル長VLを乗算することにより得ることができる。そして、これらの2つの物理番号AとBが一致する場合に、命令発行制御回路202は、2つの配列レジスタvrNとvrMが互いに干渉していると判定する。
配列レジスタvrNとvrMに格納された配列データ304はそれぞれ、対応する配列レジスタ303を構成する先頭の配列要素の物理番号A及びBのみで区別することができる。同じ数の配列要素302から構成されており、1つの命令に対して、これらの配列要素が一体として処理されるためである。よって、命令発行制御回路202は、先行命令で指定された配列レジスタの先頭の配列要素の物理番号Aと、後続命令で指定された配列レジスタの先頭の配列要素の物理番号Bを比較することにより、先行命令と後続命令の間のレジスタ干渉の有無を判定することが可能である。
尚、図5に示した例では、先行命令のディスティネーションと後続命令のソースの間でレジスタ干渉の有無を判定する例を示したが、レジスタ干渉の判定が行われるケースはこれに限定されない。先行命令のディスティネーションと、後続命令のディスティネーションの間においても、レジスタ干渉の判定を行うようにすることができる。また、後続命令のディスティネーションと、先行命令のソースとの間においても、レジスタ干渉の判定を行うようにすることができる。先行命令か後続命令かによらず、ディスディネーションとなる配列レジスタに対しては、配列データの書き換えが行われるからである。
尚、図5に示した例では、先行命令で指定された配列レジスタvrNの先頭の配列要素と、後続命令で指定された配列レジスタvrMの先頭の配列要素を比較する例を示したが、比較の対象とする配列要素の組合せはこれに限定されない。配列レジスタvrNとvrMの間の対応する位置にある配列要素同士であれば比較の対象とすることができる。例えば、配列レジスタvrNとvrMにおいて、2〜8番目の非先頭サイクルで処理される、対応する配列要素同士を比較の対象とすることも可能である。
[1−4−2.命令発行タイミングの調整処理]
図6は、先行命令のデータ語長と後続命令のデータ語長が同一の場合の、命令発行タイミングの調整処理の一例を示す図である。図6に示した例では、命令はすべてハーフワード命令である。命令INST1とINST2は、命令発行制御回路202の制御の下、図2のパイプライン演算器203〜206のうちの2つにおいて実行される。命令INST3とINST4も同様である。
図6に示した例では、先行ハーフワード命令INST1として加算命令(vaddh)が発行され、そのソースとしてvr0とvr2が指定され、そのディスティネーションとしてvr4が指定されている。すなわち、命令発行制御回路202は、図3に示したベクトルレジスタファイル201における論理番号0の配列レジスタvr0の配列データ304と論理番号2の配列レジスタvr2の配列データ304を加算し(vaddh)、加算結果のデータを論理番号4の配列レジスタvr4に格納する命令を発行する。
上述のように、各パイプライン演算器203〜206のALU211において、1つの配列データ304の全ての部分データに対する処理を実行するためには8サイクルが必要である。このため、命令INST1の加算演算は、ソースとなる配列レジスタvr0とvr2の各々の先頭配列要素から順番に、8サイクルに分けて実行される。図6には、命令INST1の加算演算がサイクル1〜8の合計8サイクルにわたって実行される様子が図示されている。命令INST2〜4についても同様である。
また、後続ハーフワード命令INST2として乗算命令(vmulh)が発行され、そのソースとしてvr4とvr2が指定され、そのディスティネーションとしてvr6が指定されている。すなわち、命令発行制御回路202は、図3に示したベクトルレジスタファイル201における論理番号4の配列レジスタvr4の配列データ304と論理番号2の配列レジスタvr2の配列データ304を乗算し(vmulh)、乗算結果のデータを論理番号6の配列レジスタvr6に格納する命令を発行する。
図6に示した例では、配列レジスタvr4が先行命令INST1のディスティネーションとして指定されるとともに、後続命令INST2のソースとしても指定されている。この場合、先行命令INST1のディスティネーションの先頭配列要素の物理番号Aと、後続命令INST2のソースの先頭配列要素の物理番号Bがともに128(論理番号4×ベクトル長32)となり、互いに一致する。このため、命令発行制御回路202によって、配列レジスタvr4において、先行命令INST1と後続命令INST2の間にレジスタ干渉が有ることが判定される。
ここで、図4で説明したように、各パイプライン演算器203〜206においては、EXステージでALU211により演算されたデータをベクトルレジスタファイル201に書き戻すために、WBステージの処理を実行する必要がある。加えて、EXステージの前にベクトルレジスタファイル201から演算対象のデータを読み出すために、さらに1サイクル(RRステージ)が必要である。すなわち、各パイプライン演算器203〜206は、配列データ304の1つの部分データに対する処理を実行するのに、少なくとも3サイクル(RRステージ、EXステージ、WBステージ)を要する。よって、後続命令INST2において先行命令INST1の演算結果を利用することができるのは、先行命令INST1のRRステージを実行したサイクルの少なくとも3サイクル後のサイクルということになる。
従って、図6で示した例では、後続命令INST2の処理(RRステージ)が、先行命令INST1の先頭サイクル(RRステージ)であるサイクル1の、3サイクル後であるサイクル4で始まるように、命令発行制御回路202が後続命令INST2の発行タイミングを調整している。
すなわち、命令発行制御回路202は、先行命令と後続命令の間にレジスタ干渉が有る場合、後続命令に対し、先行命令に応じたペナルティサイクルPC1を挿入する発行タイミング調整処理を行う。ペナルティサイクルPC1の数は先行命令の種別に応じて設定される。例えば、上述の加算命令の場合は、命令の先頭サイクル(RRステージ)からWBステージが終了するまでに、さらに2サイクル(EXステージとWBステージ)が必要となることから、ペナルティサイクルの数は2である(PC1=2)。
一方、先行命令INST3と後続命令INST4の間においては、先行命令のディスティネーションとして指定された配列レジスタvr8は後続命令のソースとして指定されていない。この場合、先行命令INST3のディスティネーションの先頭配列要素の物理番号A=256(論理番号8×ベクトル長32)と、後続命令INST4のソースの2つの先頭配列要素の物理番号B=320(論理番号10×ベクトル長32)、192(論理番号6×ベクトル長32)は互いに一致しない。このため、命令発行制御回路202によって、レジスタ干渉は無いと判定される。
従って、この場合は、後続命令INST4が、先行命令INST3の先頭サイクルであるサイクル1の次のサイクル(サイクル2)で始まるように、命令発行制御回路202が後続命令INST4の発行タイミングを調整している。すなわち、命令発行制御回路202はペナルティサイクルを挿入しない。
[1−5.先行命令のデータ語長が後続命令のデータ語長より長い場合のベクトル処理回路の動作例]
次に、先行命令のデータ語長が後続命令のデータ語長より長い場合の、レジスタ干渉の判定処理及び命令発行タイミングの調整処理について説明する。ここでは、図3に示したベクトルレジスタファイル201が用いられる。
[1−5−1.レジスタ干渉の判定処理]
以下、先行命令のデータ語長が後続命令のデータ語長より長い場合のレジスタ干渉の判定処理の一例を説明する。
図7は、先行命令のデータ語長が後続命令のデータ語長より長い場合の、レジスタ干渉の判定処理を説明するための図である。図7においては、先行命令がワード命令であり、後続命令がハーフワード命令であり、先行ワード命令のディスティネーションが配列レジスタvrwN(N=0,2,・・・,14)であり、後続命令のソースが配列レジスタvrM(M=0〜15)であるものとする。ここで、例えば、vrwNとは、ワード命令に対して割り当てられた論理番号がN(Nは偶数)である配列レジスタ306を表し、vrMとは、ハーフワード命令に対して割り当てられた論理番号がMである配列レジスタ303を表す。
ここで、上述のとおり、ワード命令においてアクセスされる1つの配列レジスタ306は、ハーフワード命令時にアクセスされる2つの配列レジスタ303から構成される。すなわち、先行ワード命令においてアクセスされる配列レジスタvrwNは、ハーフワード命令でアクセス対象となり得る、配列レジスタvrNと配列レジスタvrN+1から構成されている。
従って、後続ハーフワード命令でアクセスされる配列レジスタvrMに関しては、前半の配列レジスタvrNと後半の配列レジスタvrN+1の両方に対して、レジスタ干渉の有無を判定することが必要である。すなわち、この場合、先行ワード命令の前半の配列レジスタが干渉する態様と、後半の配列レジスタが干渉する態様の2つのレジスタ干渉の態様が存在する。
しかしながら、ここでデータ語長が同一の場合のレジスタ干渉の判定処理を単に採用しただけでは、上述の先行ワード命令と後続ハーフワード命令の間のレジスタ干渉の有無を正確に判定することはできない。すなわち、先行ワード命令で指定された配列レジスタ306の先頭配列要素305の物理番号と、後続ハーフワード命令で指定された配列レジスタ303の先頭の配列要素302の物理番号を比較するだけでは、先行ワード命令と後続ハーフワード命令の間で、レジスタ干渉の有無を正確に判定することができない。
その理由を以下で説明する。配列レジスタvrwNの先頭の配列要素305の物理番号A1は配列レジスタvrNの先頭の配列要素302の物理番号と同一である。従って、命令発行制御回路202は、配列レジスタvrwNの先頭の配列要素305の物理番号A1と、配列レジスタvrMの先頭の配列要素302の物理番号Bを比較することにより、先行ワード命令に関する前半の配列レジスタvrNと後続ハーフワード命令に関する配列レジスタvrMについては、レジスタ干渉の有無を判定することができる。
しかしながら、上記の判定処理では、後半の配列レジスタvrN+1については全く考慮されていないため、命令発行制御回路202によって、配列レジスタvrMとのレジスタ干渉が判定されない。このため、先行ワード命令に関する配列レジスタvrN+1は、後続ハーフワード命令に関する配列レジスタvrMとの干渉を生じる可能性がある。
そこで、図7に示した例では、命令発行制御回路202は、配列レジスタvrN+1の先頭の配列要素の物理番号A2と、後続ハーフワード命令で指定された配列レジスタvrMの先頭の配列要素の物理番号Bとの比較も行う。物理番号Bを有する配列要素は後続ハーフワード命令の先頭のサイクルで処理されるのに対し、物理番号A2を有する配列要素は、配列レジスタvrNの全ての配列要素に対する演算処理を実行するのに8サイクルを要することから、先行ワード命令の9番目のサイクルで処理される。
この比較により、命令発行制御回路202は、先行ワード命令に関する配列レジスタvrN+1と後続ハーフワード命令に関する配列レジスタvrMについても、レジスタ干渉の有無を判定する。すなわち、命令発行制御回路202は、配列レジスタvrwNの先頭の配列要素の物理番号A1に加えて、非先頭の配列要素の物理番号A2と、配列レジスタvrMの先頭の配列要素の物理番号Bを比較することにより、レジスタ干渉の有無を判定する。
この場合、配列レジスタvrwNの先頭の配列要素の物理番号A1は、論理番号Nとベクトル長VLを乗算することにより得ることができ、非先頭の配列要素の物理番号A2は、論理番号Nとベクトル長VLを乗算し、さらにベクトル長VLを加算することにより得ることができる。配列レジスタvrMの先頭の配列要素の物理番号Bは、論理番号Mとベクトル長VLを乗算することにより得ることができる。そして、命令発行制御回路202は、物理番号A1とBが一致する場合に、前半の配列レジスタvrNにおいて配列レジスタvrwNとvrMが互いに干渉していると判定し、物理番号A2とBが一致する場合に、後半の配列レジスタvrN+1において配列レジスタvrwNとvrMが互いに干渉していると判定する。
これにより、第1実施例に係るベクトル処理回路200においては、先行命令のデータ語長が後続命令のデータ語長より長い場合であっても、複数のレジスタ干渉の態様に応じて、先行命令で指定された配列レジスタと後続命令で指定された配列レジスタの間で、レジスタ干渉の判定を適切に行い、レジスタ干渉の有無を正確に検出することができる。
ここで、上記のレジスタ干渉の判定において、比較の対象とすべき非先頭の配列要素の位置や数は、ベクトルレジスタファイル201の構成やデータ語長等によって変化する。図7に示した例では、先行命令がワード命令であり、後続命令がハーフワード命令であって、ワード命令のデータ語長がハーフワード命令のデータ語長の2倍の長さを有するため、配列レジスタvrwNの先頭に位置する配列要素(配列レジスタvrNの先頭配列要素)に加えて、配列レジスタvrwNの中間に位置する配列要素(配列レジスタvrN+1の先頭配列要素)だけを比較の対象とすれば十分である。
これに対し、例えば、先行命令がダブルワード命令であり、後続命令がハーフワード命令である場合は、ダブルワード命令のデータ語長がハーフワード命令のデータ語長の4倍の長さを有し、後続ハーフワード命令に対する、隣接する4つの配列要素を1つの配列要素として扱う。この場合、先行ダブルワード命令で指定される配列レジスタは、後続ハーフワード命令でアクセス対象となり得る配列レジスタを4つ含むことになる。このため、先行ダブルワード命令で指定される配列レジスタの中間(1/2)に位置する配列要素だけでなく、配列レジスタ全体の1/4及び3/4に位置する配列要素についても比較の対象とする必要がある。すなわち、先行ダブルワード命令で指定される配列レジスタにおいては、後続ハーフワード命令で指定される配列レジスタに対する演算処理を実行するのに必要となるサイクル数の1倍、2倍及び3倍に対応する3つのサイクルで処理される配列要素についても比較の対象とされる。
尚、図7に示した例では、先行命令のディスティネーションと後続命令のソースの間でレジスタ干渉の有無を判定する例を示したが、レジスタ干渉の判定が行われるケースはこれに限定されない。先行命令のディスティネーションと、後続命令のディスティネーションの間においても、レジスタ干渉の判定を行うようにすることができる。また、後続命令のディスティネーションと、先行命令のソースとの間においても、レジスタ干渉の判定を行うようにすることができる。先行命令か後続命令かによらず、ディスディネーションとなる配列レジスタに対しては、配列データの書き換えが行われるからである。
尚、図7に示した例では、先行命令で指定された配列レジスタvrN+1の先頭の配列要素と、後続命令で指定された配列レジスタvrMの先頭の配列要素を比較する例を示したが、比較の対象とする配列要素の組合せはこれに限定されない。配列レジスタvrN+1とvrMの間の対応する位置にある配列要素同士であれば比較の対象とすることができる。例えば、配列レジスタvrN+1とvrMにおいて、各々の2〜8番目の非先頭サイクルで処理される、対応する配列要素同士を比較の対象とすることも可能である。
[1−5−2.命令発行タイミングの調整処理]
図8と図9は、先行命令のデータ語長が後続命令のデータ語長より長い場合の、命令発行タイミングの調整処理の一例を示す図である。
まず、図8(A)に、先行ワード命令と後続ハーフワード命令の間で、先行ワード命令の前半の配列レジスタにおいてレジスタ干渉が生じる例を示す。
図8(A)に示した例では、先行命令はワード命令であるのに対し、後続命令はハーフワード命令である。命令INST1とINST2は、命令発行制御回路202の制御の下、図2のパイプライン演算器203〜206のうちの2つにおいて実行される。命令INST3とINST4、INST5とINST6、INST7とINST8も同様である。
図8(A)に示した例では、先行ワード命令INST1として、ワード命令の加算命令(vadd)が発行され、そのソースとしてvrw0とvrw2が指定され、そのディスティネーションとしてvrw4が指定されている。すなわち、命令発行制御回路202は、図3に示したベクトルレジスタファイル201における論理番号0の配列レジスタvrw0の配列データ307と論理番号2の配列レジスタvrw2の配列データ307を加算し(vadd)、加算結果のデータを論理番号4の配列レジスタvrw4に格納する命令を発行する。
上述のように、各パイプライン演算器203〜206のALU211においては、1つの配列データ307の全ての部分データに対する処理を実行するためには16サイクルが必要である。このため、命令INST1の加算演算は、ソースとなる配列レジスタvrw0とvrw2の各々の先頭配列要素から順番に、16サイクルに分けて実行される。図8では、命令INST1の加算演算がサイクル1〜16の合計16サイクルにわたって実行される様子が図示されている。命令INST3、5、7についても同様である。
さらに、ワード命令においてアクセスされる1つの配列レジスタ306は、ハーフワード命令時にアクセスされる2つの配列レジスタ303から構成される。このため、命令INST1は、前半の8サイクルにおいて、論理番号0の配列レジスタvr0の配列データ304と論理番号2の配列レジスタvr2の配列データ304を加算し、加算結果のデータを論理番号4の配列レジスタvr4に格納するとともに、後半の8サイクルにおいて、論理番号1の配列レジスタvr1の配列データ304と論理番号3の配列レジスタvr3の配列データ304を加算し、加算結果のデータを論理番号5の配列レジスタvr5に格納する。
また、後続ハーフワード命令INST2として、ハーフワード命令の加算命令(vaddh)が発行され、そのソースとしてvr4とvr10が指定され、そのディスティネーションとしてvr11が指定されている。すなわち、命令発行制御回路202は、図3に示したベクトルレジスタファイル201における論理番号4の配列レジスタvr4の配列データ304と論理番号10の配列レジスタvr10の配列データ304を加算し(vaddh)、加算結果のデータを論理番号11の配列レジスタvr11に格納する命令を発行する。
命令INST2の実行については、図6における命令INST1と同様である。図8(A)では、命令INST2の加算演算がサイクル3〜10の合計8サイクルにわたって実行される様子が図示されている。命令INST4、6、8についても同様である。
図8(A)に示した例では、先行ワード命令のディスティネーションとして指定された配列レジスタvrw4を構成する、前半の配列レジスタvr4が、後続ハーフワード命令INST2のソースとしても指定されている。この場合、先行命令INST1のディスティネーションの先頭配列要素305の物理番号A1と、後続命令INST2のソースの先頭配列要素302の物理番号Bがともに128(論理番号4×ベクトル長32)であり、互いに一致する。このため、命令発行制御回路202によって、前半の配列レジスタvr4において、先行命令INST1と後続命令INST2の間にレジスタ干渉が有ることが判定される。
一方、配列レジスタvrw4を構成する後半の配列レジスタvr5は、後続ハーフワード命令のソースとして指定されていない。この場合、先行命令INST1のディスティネーションの中間の配列要素305の物理番号A2=160(論理番号5×ベクトル長32)と、後続命令INST2のソースの先頭配列要素302の物理番号B=128(論理番号4×ベクトル長32)、320(論理番号10×ベクトル長32)は互いに一致しない。このため、命令発行制御回路202は、後半の配列レジスタvr5においては、レジスタ干渉は無いと判定する。
よって、前半の配列レジスタvr4が干渉しているので、図8(A)で示した例では、後続ハーフワード命令INST2の処理(RRステージ)が、先行ワード命令INST1の前半の配列レジスタvr4に対する処理開始サイクル(RRステージ、先行ワード命令INST1の先頭サイクル)であるサイクル1の、3サイクル後に位置するサイクル4で始まるように、命令発行制御回路202が後続命令INST2の発行タイミングを調整している。ここで、後続命令を3サイクル遅延させる理由は、図6に示した例の場合と同様である。
すなわち、命令発行制御回路202は、先行ワード命令の前半の配列レジスタと後続ハーフワード命令の配列レジスタとの間にレジスタ干渉が有る場合、後続ハーフワード命令に対し、先行ワード命令に応じたペナルティサイクルPC1を挿入する発行タイミング調整処理を行う。ペナルティサイクルPC1の数は先行命令の種別に応じて設定される。例えば、上述の加算命令の場合は、命令の先頭サイクル(RRステージ)からWBステージが終了するまでに、さらに2サイクル(EXステージとWBステージ)が必要となることから、ペナルティサイクルPC1の数は2である(PC1=2)。
ここで、比較例として、図9(B)に、先行命令のデータ語長が後続命令のデータ語長より長い場合に、従来の命令発行タイミング調整処理を適用した例を示す。図9(B)に示したように、従来の命令発行タイミング調整処理を適用した場合、命令発行制御回路202は、レジスタ干渉の有無に関わらず無条件で、後続ハーフワード命令INST8を先行ワード命令INST7の処理が終了するまでストールさせるように、後続命令INST8の発行を遅延させる。このため、後続ハーフワード命令INST8の処理はサイクル17から始まる。
よって、図8(A)に示した例では、第1実施例に係るレジスタ干渉の判定処理及び後続命令の発行タイミング調整処理を用いることにより、比較例と比べて、後続ハーフワード命令の先頭サイクル(処理開始サイクル)を13サイクル早めることができる。従って、先行命令のデータ語長が後続命令のデータ語長より長い場合であっても、レジスタ干渉の判定を適切に行い、レジスタ干渉の有無を正確に検出することにより、命令発行の効率化を図ることができる。
次に、図8(B)に、先行ワード命令と後続ハーフワード命令の間で、先行ワード命令の後半の配列レジスタにおいてレジスタ干渉が生じる例を示す。
図8(B)に示した例では、先行ワード命令INST3として、ワード命令の加算命令(vadd)が発行され、そのソースとしてvrw0とvrw2が指定され、そのディスティネーションとしてvrw4が指定されている。すなわち、命令発行制御回路202は、図3に示したベクトルレジスタファイル201における論理番号0の配列レジスタvrw0の配列データ307と論理番号2の配列レジスタvrw2の配列データ307を加算し(vadd)、加算結果のデータを論理番号4の配列レジスタvrw4に格納する命令を発行する。
命令INST3は、前半の8サイクルにおいて、論理番号0の配列レジスタvr0の配列データ304と論理番号2の配列レジスタvr2の配列データ304を加算し、加算結果のデータを論理番号4の配列レジスタvr4に格納するとともに、後半の8サイクルにおいて、論理番号1の配列レジスタvr1の配列データ304と論理番号3の配列レジスタvr3の配列データ304を加算し、加算結果のデータを論理番号5の配列レジスタvr5に格納する。
また、後続ハーフワード命令INST4として、ハーフワード命令の加算命令(vaddh)が発行され、そのソースとしてvr5とvr10が指定され、そのディスティネーションとしてvr11が指定されている。すなわち、命令発行制御回路202は、図3に示したベクトルレジスタファイル201における論理番号5の配列レジスタvr5の配列データ304と論理番号10の配列レジスタvr10の配列データ304を加算し(vaddh)、加算結果のデータを論理番号11の配列レジスタvr11に格納する命令を発行する。
図8(B)に示した例では、先行ワード命令のディスティネーションとして指定された配列レジスタvrw4を構成する、前半の配列レジスタvr4は、後続ハーフワード命令のソースとして指定されていない。この場合、先行命令INST3のディスティネーションの先頭の配列要素305の物理番号A1=128(論理番号4×ベクトル長32)と、後続命令INST4のソースの先頭配列要素302の物理番号B=128(論理番号4×ベクトル長32)、320(論理番号10×ベクトル長32)が互いに一致しない。このため、命令発行制御回路202は、前半の配列レジスタvr5においては、レジスタ干渉は無いと判定する。
一方、配列レジスタvrw4を構成する、後半の配列レジスタvr5は、後続ハーフワード命令INST4のソースとしても指定されている。この場合、先行命令INST3のディスティネーションの中間の配列要素305の物理番号A2と、後続命令INST4のソースの先頭配列要素302の物理番号Bがともに160(=論理番号5×ベクトル長32)であり、互いに一致する。このため、命令発行制御回路202によって、後半の配列レジスタvr5において、先行命令INST1と後続命令INST2の間にレジスタ干渉が有ることが判定される。
よって、先行ワード命令の後半の配列レジスタvr5が干渉しているので、図8(B)で示した例では、後続ハーフワード命令INST4の処理(RRステージ)が、先行ワード命令INST1の後半の配列レジスタvr5に対する処理開始サイクル(RRステージ、先行ワード命令INST1の非先頭サイクル)であるサイクル9の、3サイクル後に位置するサイクル12で始まるように、命令発行制御回路202が後続命令INST4の発行タイミングを調整している。ここで、後続命令を3サイクル遅延させる理由は、図6に示した例の場合と同様である。
すなわち、命令発行制御回路202は、先行ワード命令の後半の配列レジスタと後続ハーフワード命令の配列レジスタとの間にレジスタ干渉が有る場合、後続ハーフワード命令に対し、先行ワード命令に応じたペナルティサイクルPC1に、先行ワード命令の前半の配列レジスタvr4に対する処理開始サイクル(先行ワード命令の先頭サイクル)から後半の配列レジスタvr5に対する処理開始サイクル(先行ワード命令の非先頭サイクル)までのサイクル数に応じたペナルティサイクルPC2を加えたペナルティサイクルPCを挿入する発行タイミング調整処理を行う(PC=PC1+PC2)。
ペナルティサイクルPC1の数は先行命令の種別に応じて設定される。例えば、上述の加算命令の場合は、命令の先頭サイクル(RRステージ)からWBステージが終了するまでに、さらに2サイクル(EXステージとWBステージ)が必要となることから、ペナルティサイクルPC1の数は2である(PC1=2)。
また、ペナルティサイクルPC2の数は、各パイプライン演算器203〜206のALU211において、先行ワード命令の前半の配列レジスタの配列データ304を処理するのに必要となるサイクル数であり、ALU211が1サイクルで演算することができる配列要素302の数によって決まる。ペナルティサイクルPC2は、ベクトル長をVLとし、各パイプライン演算器203〜206の演算器並列度(ALU211が有する演算器の数)をPAとすると、VLをPAで除算することにより得られる(PC2=VL/PA)。例えば、図8(B)に示し例では、ベクトル長が32であり(VL=32)、演算器並列度が4であるので(PA=4)、ペナルティサイクルPC2は8となる(PC2=8)。
ここで、上述のように、図9(B)に示した比較例においては、後続ハーフワード命令はサイクル17から開始される。
よって、図8(B)に示した例では、第1実施例に係るレジスタ干渉の判定処理及び後続命令の発行タイミング調整処理を用いることにより、比較例と比べて、後続ハーフワード命令の先頭サイクル(処理開始サイクル)を5サイクル早めることができる。従って、先行命令のデータ語長が後続命令のデータ語長より長い場合であっても、レジスタ干渉の判定を適切に行い、レジスタ干渉の有無を正確に検出することにより、命令発行の効率化を図ることができる。
次に、図9(A)に、先行ワード命令と後続ハーフワード命令の間で、レジスタ干渉が生じない例を示す。
図9(A)に示した例では、先行ワード命令INST5として、ワード命令の加算命令(vadd)が発行され、そのソースとしてvrw0とvrw2が指定され、そのディスティネーションとしてvrw4が指定されている。すなわち、命令発行制御回路202は、図3に示したベクトルレジスタファイル201における論理番号0の配列レジスタvrw0の配列データ307と論理番号2の配列レジスタvrw2の配列データ307を加算し(vadd)、加算結果のデータを論理番号4の配列レジスタvrw4に格納する命令を発行する。
また、後続ハーフワード命令INST6として、ハーフワード命令の加算命令(vaddh)が発行され、そのソースとしてvr6とvr10が指定され、そのディスティネーションとしてvr11が指定されている。すなわち、命令発行制御回路202は、図3に示したベクトルレジスタファイル201における論理番号6の配列レジスタvr6の配列データ304と論理番号10の配列レジスタvr10の配列データ304を加算し(vaddh)、加算結果のデータを論理番号11の配列レジスタvr11に格納する命令を発行する。
図9(A)に示した例では、先行ワード命令のディスティネーションとして指定された配列レジスタvrw4は前半の配列レジスタvr4と後半の配列レジスタvr5により構成されるが、配列レジスタvr4とvr5はともに後続ハーフワード命令のソースとして指定されていない。この場合、先行命令INST5のディスティネーションの先頭の配列要素305の物理番号A1=128(論理番号4×ベクトル長32)と、後続命令INST4のソースの先頭配列要素302の物理番号B=192(論理番号6×ベクトル長32)、320(論理番号10×ベクトル長32)は互いに一致しない。このため、命令発行制御回路202は、レジスタ干渉は無いと判定する。
従って、この場合は、後続ハーフワード命令INST6の処理(RRステージ)が、先行命令INST5の先頭サイクル(RRステージ)であるサイクル1の次のサイクル(サイクル2)で始まるように、命令発行制御回路202が後続命令INST6の発行タイミングを調整している。すなわち、命令発行制御回路202はペナルティサイクルを挿入しない。
ここで、上述のように、図9(B)に示した比較例においては、後続ハーフワード命令はサイクル17から開始される。
従って、図9(A)に示した例では、第1実施例に係るレジスタ干渉の判定処理及び後続命令の発行タイミング調整処理を用いることにより、比較例と比べて、後続ハーフワード命令の開始サイクルを15サイクル早めることができる。よって、先行命令のデータ語長が後続命令のデータ語長より長い場合であっても、レジスタ干渉の判定を適切に行い、レジスタ干渉の有無を正確に検出することにより、命令発行の効率化を図ることができる。
以上説明したように、第1実施例に係るベクトル処理回路200においては、先行命令のデータ語長が後続命令のデータ語長より長い場合であっても、複数のレジスタ干渉の態様に応じて、先行命令で指定された配列レジスタと後続命令で指定された配列レジスタの間で、レジスタ干渉の判定を適切に行い、レジスタ干渉の有無を正確に検出することができ、正確な検出結果に基づいて、後続命令の発行タイミングを適切に調整することができる。従って、データ語長の異なる命令が混在する場合であっても、命令発行の効率化を図ることができる。
[1−6.命令発行制御回路202の処理]
上述したレジスタ干渉の判定処理及び後続命令の発行タイミング調整処理は命令発行制御回路202によって実行される。命令発行制御回路202は命令バッファ207から後続命令を受けとった後、その後続命令に関し、各パイプライン演算器203〜206において実行中の全ての先行命令に対して、レジスタ干渉の判定を行う。命令発行制御回路202は、その判定結果に基づいて後続命令の発行タイミングを調整する。
図10は、第1実施例に係る命令発行制御回路202の処理フロー1000を示す図である。図10では、発行される命令に、データ語長の異なるワード命令とハーフワード命令が混在するものとする。図10に示したS1001〜S1014からなる一連の処理は命令発行制御回路202において、各処理サイクルごとに実行されるものである。
まず、ステップS1001において、命令発行制御回路202は後続命令を受けとり、一連の処理を開始する。
次に、ステップS1002において、命令発行制御回路202は各パイプライン演算器203〜206において実行中の全ての先行命令に対して、発行判定値IDを設定したか否かをチェックする。実行中の全ての先行命令に対して発行判定値IDの設定を完了した場合は、命令発行制御回路202の処理はステップ1010に移行する。未完了の場合は、命令発行制御回路202は発行判定値IDの設定対象となる対象先行命令を特定し、その処理はステップ1003に移行する。
ステップS1003において、命令発行制御回路202は、対象先行命令に対して発行判定値IDの設定処理を実行する。ステップS1003では、実行中の先行命令が複数有る場合は、その先行命令と同じ数の発行設定値が設定される。ステップS1003の処理はステップS1004〜S1009の処理から構成される。
まず、ステップS1004において、命令発行制御回路202は発行判定値IDの設定処理を開始する。
次に、ステップS1005において、後続命令がハーフワード命令であるか否かを判定する。後続命令がハーフワード命令である場合は、ステップS1006に移行する。そうでない場合はステップS1008に移行する。
次に、ステップS1006において、対象先行命令がワード命令であるか否かを判定する。対象先行命令がワード命令である場合は、ステップS1007に移行する。そうでない場合はステップS1008に移行する。
次に、ステップS1007において、命令発行制御回路202は先行ワード命令と後続ハーフワード命令の間でレジスタ干渉の判定を行う。ここでは、図7で説明したように、後続ハーフワード命令でアクセスされる配列レジスタvrMに関して、先行ワード命令でアクセスされる前半の配列レジスタvrNと後半の配列レジスタvrN+1の両方に対して、レジスタ干渉の有無を判定する。その判定結果に基づいて、命令発行制御回路202は図11(A)に示した対応関係に従って、発行判定値IDを設定する。発行判定値IDの設定後、ステップS1009に移行する。
また、ステップS1008において、命令発行制御回路202は先行命令と後続命令の間でレジスタ干渉の判定を行う。その判定結果に基づいて、命令発行制御回路202は図11(B)に示した対応関係に従って、発行判定値IDを設定する。発行判定値IDの設定後、ステップS1009に移行する。
ここで、発行判定値IDの詳細について説明する。発行判定値IDは後続命令を次のサイクルで発行するか否かを判定するためのパラメータであり、発行判定値IDが0以下となったとき(ID≦0)、命令発行制御回路202は後続命令を次のサイクルで発行する。
図11は、発行判定値IDの設定方法を示す図である。発行判定値IDは、先行命令の種別に応じて設定されるペナルティサイクルPC1、先行命令の前半の配列レジスタに対する処理開始サイクル(先行命令の先頭サイクル)から後半の配列レジスタに対する処理開始サイクル(先行命令の非先頭サイクル)までのサイクル数に応じたペナルティサイクルPC2、及び対象先行ワード命令の先頭サイクルと現在のサイクル(処理フロー1000を実行しているサイクル)との間の差分サイクルDCにより決定される。ペナルティサイクルPC1及びPC2については、図6及び図8で説明したとおりである。差分サイクルDCは、対象先行ワード命令の先頭サイクルが、処理フロー1000を実行中の現在のサイクルから見て何サイクル前であるかを表すものであり、対象先行ワード命令と現在のサイクルとの距離を表すものである。
図11は、ワード命令とハーフワード命令が混在する場合の発行判定値IDの設定例を示すものである。発行判定値IDの設定は混在する命令のデータ語長の組合せによって異なり、発行判定値IDはデータ語長の組合せに応じて適宜設定されるものである。
図11(A)は、 先行命令のデータ語長が後続命令のデータ語長よりも長く、先行命令がワード命令であり、後続命令がハーフワード命令である場合の発行判定値IDの設定例を示す図である。
命令発行制御回路202によって、先行ワード命令と後続ハーフワード命令の間にレジスタ干渉が無いと判定されたときは、発行判定値IDは0である。これは、命令発行制御回路202が後続ハーフワード命令を先行命令の先頭サイクル(処理開始サイクル)の次のサイクルで発行することを意味する。
一方、命令発行制御回路202によって、先行ワード命令でアクセスされる前半の配列レジスタvrNと後続ハーフワード命令でアクセスされる配列レジスタvrMの間でレジスタ干渉が有ると判定されたときは、発行判定値IDは、ペナルティサイクルPC1に対して差分サイクルDCを減算したものとなる(ID=PC1−DC)。これは、命令発行制御回路202が先行ワード命令の先頭サイクル(処理開始サイクル)の次のサイクルから、更にペナルティサイクルPC1分だけ後のサイクルで、後続ハーフワード命令を発行することを意味する。
また、命令発行制御回路202によって、先行ワード命令でアクセスされる後半の配列レジスタvrN+1と後続ハーフワード命令でアクセスされる配列レジスタvrMの間でレジスタ干渉が有ると判定されたときは、発行判定値IDは、発行判定値はペナルティサイクルPC1に対して、ペナルティサイクルPC2を加算し、差分サイクルDCを減算したものとなる(ID=PC1+PC2−DC)。これは、命令発行制御回路202が先行ワード命令の後半の配列レジスタvrN+1に対する処理開始サイクル(先行ワード命令の非先頭サイクル)の次のサイクルから、更にペナルティサイクルPC1分だけ後のサイクルで、後続ハーフワード命令を発行することを意味する。
図11(B)は、先行命令のデータ語長と後続命令のデータ語長が同一の場合の発行判定値IDの設定例を示す図である。命令発行制御回路202によって、先行命令と後続命令の間に、レジスタ干渉が無いと判定された場合は、発行判定値IDは0である。これは、命令発行制御回路202は後続命令を先行命令の先頭サイクル(処理開始サイクル)の次のサイクルで発行することを意味する。
一方、命令発行制御回路202によって、レジスタ干渉が有ると判定されたときは、発行判定値IDはペナルティサイクルPC1に対して差分サイクルDCを減算したものとなる(ID=PC1−DC)。これは、命令発行制御回路202が先行命令の開始サイクルの次のサイクルから、ペナルティサイクルPC1分だけ後のサイクルで、後続命令を発行することを意味する。
図10に戻って、ステップS1009において、命令発行制御回路202は発行判定値IDの設定処理を終了する。終了後、ステップS1002に移行する。ステップS1002において、実行中の全ての先行命令に対して発行判定値IDの設定を完了したと判断された場合は、ステップS1010に移行し、未完了と判断された場合は、S1003に移行し、再度発行判定値IDの設定処理が行われる。
ステップS1010において、ステップS1003で設定された発行判定値IDのうち、1つでもその値が1以上のものが有るか否かをチェックする。発行設定値IDが1以上のものが有る場合は、S1011に移行する。発行設定値IDが1以上のものが無い場合(全ての発行設定値IDが0以下である場合)は、S1013に移行する。
ステップS1011において、命令発行制御回路202は後続命令に、先行命令とのレジスタ干渉に起因する発行制約が有ると判断する。その後、ステップS1012に移行する。
ステップS1012においては、命令発行制御回路202は、処理フロー1000を実行中の現在のサイクルの次のサイクルにおいては、後続命令を発行しないことを決定する。更に、命令発行制御回路202は同一の後続命令に対して再度同じ一連の処理を実行することを決定する。その後、ステップS1001に戻る。
また、ステップS1013において、命令発行制御回路202は後続命令に、先行命令とのレジスタ干渉に起因する発行制約は無いと判断する。その後、ステップS1014に移行する。
ステップS1014では、後続命令の発行に関し、レジスタ干渉以外の発行制約の有無の判定を行う。レジスタ干渉以外の発行制約としては、例えばベクトル処理回路200における、ベクトルレジスタファイル以外のハードウェア資源の競合等がある。レジスタ干渉以外の発行制約も無いと判定された場合には、命令発行制御回路202は後続命令を現在のサイクルの次のサイクルで発行する。
以上説明したように、第1実施例に係る命令発行制御回路202は、後続命令を受けとった後、各サイクルごとに、その後続命令に関し、実行中の全ての先行命令に対するレジスタ干渉の判定処理を行う。命令発行制御回路202は、その判定結果に基づいて発行判定値IDを設定することにより、後続命令が次のサイクルで実行できるか否かを判断する。発行設定値IDは、レジスタ干渉が生じる複数の態様に応じて適切に設定される。
従って、第1実施例に係るベクトル処理回路200では、先行命令のデータ語長が後続命令のデータ語長より長い場合であっても、複数のレジスタ干渉の態様に応じてレジスタ干渉の有無を正確に検出することができ、正確な検出結果に基づいて、後続命令の発行タイミングを適切に調整することができる。よって、データ語長の異なる命令が混在する場合であっても、命令発行の効率化を図ることができる。
[2.第2実施例]
図12は、本発明の第2実施例に係るベクトル処理回路の構成例を示す図である。図12に示した第2実施例のベクトル処理回路1200は、図2に示した第1実施例のベクトル処理回路200と、スカラレジスタファイル1201とデータメモリ1202を有する点で異なるが、その他の部分については同様である。図2に示したベクトル処理回路200と同一又は対応する部分には同一の符号が付されている。
レジスタファイル群1203は、スカラレジスタファイル1201とベクトルレジスタファイル201を含む。スカラレジスタファイル1201はデータメモリ1202のアドレス情報を格納し、命令発行制御回路202の要求に応じてそのアドレス情報を供給する。スカラレジスタファイル1201の詳細については後述する。
命令発行制御回路202は、スカラレジスタファイル1201から、データメモリ1202のアドレス情報を受けとり、受けとったアドレス情報に基づいて、データメモリ1202に対して読み出し対象となるデータのアドレスを指定する。
データメモリ1202は各パイプライン演算器203〜206が処理するデータを格納する。データメモリ1202は、命令発行制御回路202によって指定されたアドレス情報に対応するデータをパイプラインレジスタ209に供給する。パイプラインレジスタ209はデータメモリ1202からデータを受けとり、受けとったデータをベクトルレジスタファイル201に供給する。
ベクトル処理回路1200で行われるパイプライン処理は、図2に示したベクトル処理回路200のそれと同一であり、命令発行制御回路202で行われるレジスタ干渉の判定処理及び後続命令の発行タイミング調整処理も互いに同一である。
図13はスカラレジスタファイル1201の詳細を示す図である。スカラレジスタファイル1201は32個のスカラレジスタ1302から構成されており、1つのスカラレジスタ1302は1個の32ビットのデータを格納するレジスタ要素から構成されている。各スカラレジスタ1302はデータメモリ1202上のアドレス情報を格納する。
図14はベクトルレジスタファイル201の内容を示す図である。図3に示したベクトルレジスタファイル201には、論理番号8の配列レジスタvr8の配列データ304として、図14に示したデータが格納されているものとする。配列レジスタvr8では、偶数の物理番号を有する配列要素302はすべて“0”のデータを有する。
続いて、第2実施例におけるベクトル処理回路1200の動作例を説明する。図15は、第2実施例におけるベクトル処理回路1200の動作の一例を示す図である。
まず、命令INST1として、ロード命令(vld)が発行され、そのソースとしてスカラレジスタvsr1が指定され、そのディスティネーションとして配列レジスタvrw0が指定されている。すなわち、命令発行制御回路202は、図13に示したスカラレジスタファイル1201のスカラレジスタvsr1に格納された32ビットデータが指し示すデータメモリ1202上のアドレスから32個の32ビットのデータをロードし(vld)、パイプラインレジスタ209を介して、ベクトルレジスタファイル201の論理番号0の配列レジスタvr0と論理番号1の配列レジスタvr1からなるペアレジスタに格納する命令を発行する。
次に、命令INST2として、ロード命令(vld)が発行され、そのソースとしてスカラレジスタvsr2が指定され、そのディスティネーションとして配列レジスタvrw2が指定されている。すなわち、命令発行制御回路202は、図13に示したスカラレジスタファイル1201のスカラレジスタvsr2に格納された32ビットデータが指し示すデータメモリ1202上のアドレスから32個の32ビットのデータをロードし(vld)、パイプラインレジスタ209を介して、ベクトルレジスタファイル201の論理番号2の配列レジスタvr2と論理番号3の配列レジスタvr3からなるペアレジスタに格納する命令を発行する。
次に、命令INST3として、ワード命令の加算命令(vadd)が発行され、そのソースとして配列レジスタvrw0とvrw2が指定され、そのディスティネーションとして配列レジスタvrw4が指定されている。すなわち、命令発行制御回路202は、図3に示したベクトルレジスタファイル201における論理番号0の配列レジスタvrw0の配列データ307と論理番号2の配列レジスタvrw2の配列データ307を加算し(vadd)、加算結果のデータを論理番号4の配列レジスタvrw4に格納する命令を発行する。
命令INST3は、前半の8サイクルにおいて、論理番号0の配列レジスタvr0の配列データ304と論理番号2の配列レジスタvr2の配列データ304を加算し、加算結果のデータを論理番号4の配列レジスタvr4に格納するとともに、後半の8サイクルにおいて、論理番号1の配列レジスタvr1の配列データ304と論理番号3の配列レジスタvr3の配列データ304を加算し、加算結果のデータを論理番号5の配列レジスタvr5に格納する。
次に、命令INST4として、ハーフワード命令のAND命令(vandh)が発行され、そのソースとして配列レジスタvr4とvr8が指定され、そのディスティネーションとして配列要素vr6が指定されている。すなわち、命令発行制御回路202は、図3に示したベクトルレジスタファイル201における論理番号4の配列レジスタvr4の配列データ304と論理番号8の配列レジスタvr8の配列データ304についてAND演算(vand)を行い、演算結果のデータを論理番号6の配列レジスタvr6に格納する命令を発行する。
次に、命令INST5として、ハーフワード命令のAND命令(vandh)が発行され、そのソースとして配列レジスタvr5とvr8が指定され、そのディスティネーションとして配列要素vr7が指定されている。すなわち、命令発行制御回路202は、図3に示したベクトルレジスタファイル201における論理番号5の配列レジスタvr4の配列データ304と論理番号8の配列レジスタvr8の配列データ304についてAND演算(vand)を行い、演算結果のデータを論理番号7の配列レジスタvr7に格納する命令を発行する。
以上の命令INST1〜5によって行われる処理をまとめると、以下のとおりである。ベクトル処理回路1200は、命令INST1とINST2により、スカラレジスタファイル1201の2つの値が指し示すデータメモリ1202上のアドレスから2組の32個の32ビットのデータ(32個のワードデータ)をロード命令で、ベクトルレジスタファイル201の2個の配列レジスタ306にそれぞれ格納し、各パイプライン演算器203〜206で演算可能な状態にする。続いて、ベクトル処理回路1200は、命令INST3により、それら2個の配列レジスタ306に格納したワードデータ同士を加算する。続いて、命令INST4とINST5により、加算の結果得られたワードデータ(32ビットデータ)の各々に対して前半のハーフワードデータ(16ビットデータ)をマスクする処理を行う。このような処理は、無線ベースバンド処理のような信号処理系アプリケーションにおいて、頻繁に行われるものである。
図15に示した例では、ワード命令INST3のディスティネーションとして配列レジスタvrw4が指定され、その配列レジスタvrw4を構成する前半の配列レジスタvr4が、ハーフワード命令INST4のソースとしても指定されている。この場合、命令発行制御回路202によって、前半の配列レジスタvr4において、先行のワード命令INST3と後続のハーフワード命令INST4の間にレジスタ干渉が有ることが判定される。また、配列レジスタvrw4を構成する後半の配列レジスタvr5が、ハーフワード命令INST5のソースとしても指定されている。この場合、命令発行制御回路202によって、後半の配列レジスタvr5において、先行のワード命令INST3と後続のハーフワード命令INST5の間にレジスタ干渉が有ることが判定される。レジスタ干渉の判定処理については、図7にした例において説明したとおりである。
図15に示した例では、上記のレジスタ干渉の判定結果に基づいて、命令発行制御回路202によって、命令INST4とINST5の発行タイミングが命令INST3に対して調整されており、命令INST4の処理(RRステージ)はサイクル6から始まり、命令INST5の処理(RRステージ)はサイクル14から始まる。命令発行タイミングの調整処理については、図6、図8〜図11に示した例において説明したとおりである。その結果、命令INST1〜5までの全ての処理を21サイクルで実行することができる。
これに対して、比較例として、図16に、命令INST1〜5に対して従来の命令発行タイミング調整処理を適用した例を示す。図16に示したように、従来の命令発行タイミング調整処理を適用した場合、命令発行制御回路202は、レジスタ干渉の有無に関わらず無条件で、後続ハーフワード命令INST4を先行ワード命令INST3の処理が終了するまでストールさせるように、後続ハーフワード命令ISNT4の発行を遅延させる。そのため、後続のハーフワード命令INST4の処理はサイクル19から始まり、後続のハーフワード命令INST5はサイクル20から始まる。その結果、命令INST1〜5までの全ての処理を実行するのに、27サイクルが必要となる。
従って、図15に示した例では、ベクトル処理回路1200は、第1実施例に係るレジスタ干渉の判定処理及び命令発行タイミングの調整処理を用いることにより、無線ベースバンド処理のような信号処理系アプリケーションにおいて頻繁に発生する処理において、従来の場合と比べて、約1.3倍(≒27/21倍)の処理性能の向上を達成することができる。
これにより、データ語長の異なる命令が混在する場合であっても、命令発行の効率化を図ることができる。
[3.第3実施例]
図17は、本発明の第3実施例に係るベクトル処理回路の構成例を示す図である。図17に示した第3実施例のベクトル処理回路1700は、図2に示した第1実施例のベクトル処理回路200と、フォワーディング回路1701と選択回路1702を有する点で異なるが、その他の部分については同様である。図2に示したベクトル処理回路200と同一又は対応する部分には同一の符号が付されている。
図17に示したベクトル処理回路1700は、パイプライン処理においてフォワーディング処理を行うことができるが、フォワーディング処理を行う点を除いては、図3に示したベクトル処理回路200と同一の動作を行う。すなわち、ベクトル処理回路1700で行われるパイプライン処理は、フォワーディング処理が追加される点を除いては、図2に示したベクトル処理回路200のそれを同一であり、命令発行制御回路202で行われるレジスタ干渉の有無の判定及び後続命令の発行タイミング調整の処理も互いに同一である。
フォワーディング処理とは、レジスタファイルファイル201に未だ書き戻されていないが、パイプライン演算器203〜206においてすでに生成されている演算結果を次のサイクルで発行される命令のソースとして使用するように制御する処理である。図17に示した例では、フォワーディング回路1701と選択回路1702が協働してフォワーディング処理を行う。
フォワーディング回路1701は、ALU211の演算結果を格納する4つのパイプラインレジスタ209のデータを受けとる。また、フォワーディング回路1701は4つのALU211の演算結果のデータを、パイプラインレジスタ209を経由することなく受けとる。フォワーディング回路1701は受けとったデータを、ベクトルレジスタファイル201を経由することなく、各選択回路1702に供給する。
選択回路1702はベクトルレジスタファイル201とパイプラインレジスタ208の間に、各パイプライン演算器203〜206ごとに設けられる。選択回路1702は、フォワーディング回路1701とベクトルレジスタファイル201からデータを受けとり、命令発行制御回路202の制御に基づいて、受けとった複数のデータの中から1つのデータを選択し、対応するALU211に供給する。
図17に示したベクトル処理回路1700では、フォワーディング回路1701と選択回路1702によりフォワーディング処理を行うため、EXステージにおいてALU211が実行した演算の結果を、ベクトルレジスタファイル201に書き戻すことなく、使用することができる。このため、ベクトル処理回路1700では、後続命令が先行命令の演算結果のデータを使用するとき、その演算結果のデータをベクトルレジスタファイル201に書き戻すためのWBステージの処理が終了するのを待つ必要がない。
よって、ベクトル処理回路1700においては、先行命令と後続命令の間でレジスタ干渉が有る場合であっても、後続命令を発行するときに、先行命令のWBステージの処理が終了するのを待つ必要がなくなる。すなわち、フォワーディング処理が上述の4つのパイプラインレジスタ209のデータを対象とするものである場合には、WBステージの処理を行うのに必要な1サイクル分を考慮する必要がなくなる。また、フォワーディング処理が上述の4つのALU211の演算結果のデータを対象とするものである場合には、EX、WBステージの処理を行うのに必要な2サイクル分を考慮する必要がなくなる。
従って、EX、WBステージの処理を行うのに必要なサイクルをペナルティサイクルとして考慮する必要がなくなることから、図6、図8、図11及び図15等におけるペナルティサイクルPC1の数を減らすことができる。
従って、図17に示した第3実施例に係るベクトル処理回路1700においては、図6、図8、図11及び図15等において説明した第1実施例に係る命令発行タイミングの調整処理に、フォワーディング処理を組み合わせることにより、先行命令と後続命令の間でレジスタ干渉が有る場合に後続命令に対して挿入されるペナルティサイクルの数を減らすことができ、それによって、第1実施例に係るベクトル処理回路200よりも、後続命令の発行タイミングをさらに早めることができる。従って、データ語長の異なる命令が混在する場合であっても、命令発行の効率をより高めることができる。
尚、図3に示したベクトル処理回路200と同様に、ベクトル処理回路1700においても、例えば、EXステージとWBステージの間に、ベクトル処理回路1700の外部メモリ(不図示)に対するデータの読み出しや書き込みを行う、メモリアクセスMA(MemoryAccess)ステージを設けることができる。MAステージを設けた場合には、MAステージの処理結果を格納するためのパイプラインレジスタが設けられるので、フォワーディング回路1701がそのパイプラインレジスタのデータを、ベクトルレジスタファイル201を経由することなく受けとり、各選択回路1702に供給するようにしてもよい。
[4.第4実施例]
図18は、本発明の第4実施例に係るプロセッサシステムの一例を示す図である。図18に示したプロセッサシステム1800は、ベクトル処理回路1801、スカラ処理回路1802、命令メモリ1803、データメモリ1804、及びバスインターフェース1805を含む。
スカラ処理回路1802は例えばCPU(中央処理装置)であり、命令メモリ1803とデータメモリ1804に接続される。スカラ処理回路1802は、命令メモリ1803から命令を受けとり、受けとった命令に応じた処理を実行する。また、スカラ処理回路1802は、受けとった命令に基づいてベクトル処理回路1801に実行させるべき処理があると判断した場合には、ベクトル処理回路1801に対してその処理を実行させるための内部命令を供給する。
ベクトル処理回路1801は、スカラ処理回路1802とデータメモリ1804に接続される。ベクトル処理回路1801はスカラ処理回路1802から上述の内部命令を受けとり、受けとった内部命令に応じた処理を実行する。スカラ処理回路1802とベクトル処理回路1801はデータメモリ1804を介して、上述の内部命令に応じた処理に必要なデータのやり取りを行う。ベクトル処理回路1801としては、図2、図12、図17に示したベクトル処理回路200、1200、1700のいずれかが用いられる。
命令メモリ1803及びデータメモリ1804は例えばRAMであり、バスインターフェース1805に接続される。バスインターフェース1805はバス1806に接続される。命令メモリ1803は、バス1806及びバスインターフェース1805を介して命令を受けとる。
図18に示したプロセッサシステム1800は、組み込み機器向けに用いられるものであり、スカラ処理回路1802が主処理装置として機能し、ベクトル処理回路1801はスカラ処理回路1802を補助する副処理装置として機能する。ベクトル処理回路1801は、スカラ処理回路1802が行うべき処理のうちの一部の処理を、スカラ処理回路1802からの内部命令を受けて担当する。ベクトル処理回路1801は例えば、無線ベースバンド処理のような特定の信号処理を行う。
図18に示した例では、ベクトル処理回路1801は組み込み機器向けのプロセッサシステムにおける副処理装置として位置付けられるものである。このため、ベクトル処理回路1801は、限られた容量のレジスタしか搭載することができず、限られた処理能力の演算器しか搭載することができない。
これに対して、ベクトル処理回路1801として用いられるベクトル処理回路200、1200、1700ではいずれも、図2、図12及び図17で説明したように、データ語長の異なる命令が混在する場合であっても、ベクトルレジスタファイル201の限られたレジスタ容量を無駄なく使用しながら、データ語長が異なる命令を適切に処理することができる。さらに、複数のレジスタ干渉の態様の違いに応じてレジスタ干渉の判定を適切に行うことにより、レジスタ干渉の有無を正確に検出することができ、正確な検出結果に基づいて、後続命令の発行タイミングを適切に調整することができる。
従って、限られたレジスタ容量と処理能力しか持たない、組み込み機器向けプロセッサシステム向けのベクトル処理回路1801においても、データ語長が異なる命令を効率的に実行することができる。
以上の第1乃至第4実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
複数の配列要素を含むベクトルレジスタファイルと、
各々が前記配列要素に格納されたデータに対して演算処理を行う複数のパイプライン演算器と、
命令を発行し、前記命令に基づいて前記ベクトルレジスタファイル及び前記パイプライン演算器の動作を制御することにより、パイプライン処理を制御する命令発行制御回路と
を有するベクトル処理回路であって、
前記パイプライン演算器の各々は、前記命令発行制御回路によって発行された1つの前記命令に対して、ソースとして指定された複数の前記配列要素に格納されたデータを複数のサイクルに分けて演算し、前記演算結果をディスティネーションとして指定された複数の前記配列要素に複数のサイクルに分けて格納し、
前記命令発行制御回路は、前記命令のデータ語長に応じて前記配列要素のデータサイズを変化させ、前記命令として先行命令と前記先行命令の後に続く後続命令を発行し、前記先行命令のデータ語長が前記後続命令のデータ語長より長いとき、前記先行命令の非先頭のサイクルで処理される少なくとも1つの前記配列要素と、前記後続命令の先頭サイクルで処理される前記配列要素との間で、レジスタ干渉の有無を判定し、前記レジスタ干渉の判定結果に基づいて前記後続命令の発行タイミングを調整する
ことを特徴とするベクトル処理回路。
(付記2)
前記複数の配列レジスタ要素の各々には物理番号が割り当てられ、
前記レジスタ干渉の判定は、前記先行命令の非先頭サイクルで処理される前記少なくとも1つの配列要素の物理番号と、前記後続命令の先頭サイクルで処理される前記配列要素の物理番号が一致する否かを判定することにより行われることを特徴とする付記1記載のベクトル処理回路。
(付記3)
前記命令発行制御回路は、前記レジスタ干渉の判定によりレジスタ干渉が有ると判定した場合に、前記先行命令の種別に応じて設定される第1ペナルティサイクルと、前記先行命令の先頭サイクルから前記非先頭サイクルまでのサイクル数に応じて設定される第2ペナルティサイクルを挿入することにより、前記後続する命令の発行タイミングを遅延させることを特徴とする付記1又は2記載のベクトル処理回路。
(付記4)
前記命令発行制御回路は、前記先行命令のデータ語長が前記後続命令のデータ語長より長いとき、前記先行命令の先頭のサイクルで処理される前記配列要素と、前記後続命令の先頭サイクルで処理される前記配列要素との間で、さらにレジスタ干渉の有無を判定することを特徴とする付記1ないし3のいずれか一つに記載のベクトル処理回路。
(付記5)
前記先行命令のデータ語長は、前記後続命令のデータ語長の2倍の長さであり、
前記命令発行制御回路は、前記先行命令の後半サイクルで処理される前記配列要素と、前記後続命令の先頭サイクルで処理される前記配列要素との間で、レジスタ干渉の有無を判定することを特徴とする付記1ないし4のいずれか一つに記載のベクトル処理回路。
(付記6)
前記ベクトルレジスタファイルは、前記配列要素がベクトル長に応じてグループ化されて構成された複数の配列レジスタを含み、
前記パイプライン演算器の各々は、前記命令発行制御回路によって発行された1つの前記命令に対して、ソースとして指定された前記配列レジスタに格納されたデータを複数のサイクルに分けて演算し、前記演算結果をディスティネーションとして指定された前記配列レジスタに複数のサイクルに分けて格納し、
前記命令発行制御回路は、前記先行命令のデータ語長に応じて前記配列レジスタのデータサイズを変化させ、前記先行命令のデータ語長が前記後続命令のデータ語長より長いとき、前記先行命令の非先頭サイクルで処理される前記配列レジスタと、前記後続命令の先頭サイクルで処理される前記配列レジスタとの間で、レジスタ干渉の有無を判定する
ことを特徴とする付記1ないし5のいずれか一つに記載のベクトル処理回路。
(付記7)
前記複数の配列要素の各々には物理番号が割り当てられ、
前記複数の配列レジスタの各々には論理番号が割り当てられ、
前記レジスタ干渉の有無の判定は、前記先行命令で指定された論理番号を有する前記配列レジスタの中で、前記先行命令の非先頭サイクルで処理される前記配列要素の物理番号と、前記後続命令で指定された論理番号を有する前記配列レジスタの中で、前記後続命令の先頭サイクルで処理される前記配列レジスタ要素の物理番号が一致する否かを判定することにより行われる
ことを特徴とする付記6記載のベクトル処理回路。
(付記8)
前記命令は、命令コード、前記命令コードのソースとなる前記配列レジスタを示すソース情報、及び前記命令コードのディスティネーションとなる前記配列レジスタを示すディスティネーション情報を含み、
前記命令発行制御回路は、前記先行命令及び前記後続命令の少なくとも一方のディスティネーション情報によって示される前記配列レジスタと、他方のソース情報又はディスティネーション情報によって示される前記配列レジスタとの間で、レジスタ干渉の有無を判定することを特徴とする付記6又は7記載のベクトル処理回路。
(付記9)
前記先行命令はワード命令であり、
前記後続命令はハーフワード命令であり、
前記命令発行制御回路は、前記ワード命令時に、前記ハーフワード命令に対して割り当てられた前記物理番号が連続する2つの配列要素を1つの配列要素として扱い、前記ハーフワード命令に対して割り当てられた前記論理番号が連続する2つの配列レジスタを1つの配列レジスタとして扱い、
前記レジスタ干渉の判定は、前記ワード命令で指定された論理番号を有する前記配列レジスタの中で、前記ワード命令の後半サイクルで最初に処理される前記配列要素の物理番号と、前記ハーフワード命令で指定された論理番号を有する前記配列レジスタの中で、前記ハーフワード命令の先頭サイクルで処理される前記配列レジスタ要素の物理番号とが一致する否かを判定することにより、行われる
ことを特徴とする付記7又は8記載のベクトル処理回路。
(付記10)
前記先行命令はダブルワード命令であり、
前記後続命令はハーフワード命令であり、
前記命令発行制御回路は、前記ダブルワード命令時に、前記ハーフワード命令に対して割り当てられた前記物理番号が連続する4つの配列要素を1つの配列要素として扱い、前記ハーフワード命令に対して割り当てられた前記論理番号が連続する4つの配列レジスタを1つの配列レジスタとして扱い、
前記レジスタ干渉の判定は、前記ダブルワード命令で指定された論理番号を有する前記配列レジスタの中で、前記ダブルワード命令の2番目ないし4番目の四半サイクルでそれぞれ最初に処理される前記配列要素の物理番号と、前記ハーフワード命令で指定された論理番号を有する前記配列レジスタの中で、前記ハーフワード命令の先頭サイクルで処理される前記配列レジスタ要素の物理番号とが一致する否かを判定することにより、行われる
ことを特徴とする付記7又は8記載のベクトル処理回路。
(付記11)
前記パイプライン処理は少なくとも、前記配列要素に格納されたデータを演算する演算ステージと、前記演算結果のデータを前記ベクトルレジスタに格納する書き戻しステージを有し、
前記命令発行制御回路は、前記レジスタ干渉の判定によりレジスタ干渉が有ると判定したとき、少なくとも、レジスタ干渉が有ると判定された前記配列要素に対する前記先行命令の前記演算ステージの結果が、前記書き戻しステージで前記ベクトルレジスタファイルに格納されるまで、前記後続命令を発行しないように、前記後続命令の発行タイミングを調整することを特徴とする付記1乃至10のいずれか一つに記載のベクトル処理回路。
(付記12)
複数のスカラレジスタを含むスカラレジスタファイルと、
データを格納するデータメモリと
をさらに有し、
前記スカラレジスタによって指定された、前記データメモリ内のデータが前記ベクトルレジスタファイルに供給されることを特徴とする付記1乃至11のいずれか一つに記載のベクトル処理回路。
(付記13)
前記パイプライン演算器の演算処理結果のデータを、前記ベクトルレジスタファイルを経由することなく受けとるフォワーディング回路をさらに有し、
前記フォワーディング回路は受けとったデータを、前記パイプライン演算器に、前記ベクトルレジスタファイルを経由することなく供給することを特徴とする付記1乃至12のいずれか一つに記載のベクトル処理回路。
(付記14)
複数の配列要素を含むベクトルレジスタファイルと、
各々が前記配列要素に格納されたデータに対して演算処理を行う複数のパイプライン演算器と、
命令を発行し、前記命令に基づいて前記ベクトルレジスタファイル及び前記パイプライン演算器の動作を制御することにより、パイプライン処理を制御する命令発行制御回路と
を有するベクトル処理回路であって、
前記パイプライン演算器の各々は、前記命令発行制御回路によって発行された1つの前記命令に対して、ソースとして指定された複数の前記配列要素に格納されたデータを複数のサイクルに分けて演算し、前記演算結果をディスティネーションとして指定された複数の前記配列要素に複数のサイクルに分けて格納し、
前記命令発行制御回路は、前記命令のデータ語長に応じて前記配列要素のデータサイズを変化させ、前記命令として先行命令と前記先行命令の後に続く後続命令を発行し、前記先行命令のデータ語長が前記後続命令のデータ語長より長いとき、前記後続命令のX番目(Xは1以上の整数)のサイクルで処理される前記配列要素と、前記先行命令のY番目(YはXより大きな整数)のサイクルで処理される少なくとも1つの前記配列要素との間で、レジスタ干渉の有無を判定し、前記レジスタ干渉の判定結果に基づいて前記後続命令の発行タイミングを調整する
ことを特徴とするベクトル処理回路。
(付記15)
前記整数Yは、前記後続命令で指定された複数の前記配列要素の演算処理を実行するのに必要なサイクル数Z(Zは1以上の整数)よりも大きいことを特徴とする付記14記載のベクトル処理回路。
(付記16)
前記整数Yは、nを1以上の整数としたとき、前記整数X及びZに対して、Y=X+n×Zの関係を満たすことを特徴とする付記15記載のベクトル処理回路。
(付記17)
複数の配列要素を含むベクトルレジスタファイルと、
各々が前記配列要素に格納されたデータに対して演算処理を行う複数のパイプライン演算器と、
を有するベクトル処理回路において、命令を発行し、前記命令に基づいて前記ベクトルレジスタファイル及び前記パイプライン演算器の動作を制御することにより、パイプライン処理を制御する命令発行制御方法であって、
前記パイプライン演算器の各々によって、発行された1つの前記命令に対して、ソースとして指定された複数の前記配列要素に格納されたデータを複数のサイクルに分けて演算し、前記演算結果をディスティネーションとして指定された複数の前記配列要素に複数のサイクルに分けて格納し、
前記命令のデータ語長に応じて前記配列要素のデータサイズを変化させ、
前記命令として前記先行命令と前記先行命令の後に続く後続命令を発行し、
前記先行命令のデータ語長が前記後続命令のデータ語長より長いとき、制御回路によって、前記先行命令の非先頭のサイクルで処理される少なくとも1つの前記配列要素と、前記後続命令の先頭サイクルで処理される前記配列要素との間で、レジスタ干渉の有無を判定し、
前記レジスタ干渉の判定によりレジスタ干渉が有ると判定された場合に、前記制御回路によって、前記後続命令の発行タイミングを調整する
ことを特徴とする命令発行制御方法。
(付記18)
前記レジスタ干渉の判定において、前記制御回路によって、前記先行命令に対して、前記先行命令の種別と、前記先行命令の先頭サイクルから前記非先頭サイクルまでのサイクル数と、前記先行命令の先頭サイクルと現在のサイクルとの間の差分に基づいて発行判定値を設定し、
前記発行判定値に基づいて前記後続命令の発行タイミングを決定することを特徴とする付記17記載の命令発行制御方法。
(付記19)
バスと、
バスインターフェースと、
前記バスに前記バスインターフェースを介して接続され、命令を格納する命令メモリと、
前記命令メモリに接続され、前記命令メモリに格納された命令を受けてデータの処理を実行するスカラ処理回路と、
前記スカラ処理回路に接続され、前記スカラ処理回路からの命令を受けてデータの処理を実行するベクトル処理回路と、
前記バスに前記バスインターフェースを介して接続され、前記スカラ処理回路及び前記ベクトル処理回路に対して、前記データの送受信を行うデータメモリを有するプロセッサシステムであって、前記ベクトル処理回路は、
複数の配列要素を含むベクトルレジスタファイルと、
各々が前記配列要素に格納されたデータに対して演算処理を行う複数のパイプライン演算器と、
命令を発行し、前記命令に基づいて前記ベクトルレジスタファイル及び前記パイプライン演算器の動作を制御することにより、パイプライン処理を制御する命令発行制御回路と
を有するベクトル処理回路であって、
前記パイプライン演算器の各々は、前記命令発行制御回路によって発行された1つの前記命令に対して、ソースとして指定された複数の前記配列要素に格納されたデータを複数のサイクルに分けて演算し、前記演算結果をディスティネーションとして指定された複数の前記配列要素に複数のサイクルに分けて格納し、
前記命令発行制御回路は、前記命令のデータ語長に応じて前記配列要素のデータサイズを変化させ、前記命令として先行命令と前記先行命令の後に続く後続命令を発行し、前記先行命令のデータ語長が前記後続命令のデータ語長より長いとき、前記先行命令の非先頭のサイクルで処理される少なくとも1つの前記配列要素と、前記後続命令の先頭サイクルで処理される前記配列要素との間で、レジスタ干渉の有無を判定し、前記レジスタ干渉の判定結果に基づいて前記後続命令の発行タイミングを調整する
ことを特徴とするプロセッサシステム。
200 ベクトル処理回路
201 ベクトルレジスタファイル
202 命令発行制御回路
203〜206 パイプライン演算器
207 命令バッファ
208、209 パイプラインレジスタ
210 VLレジスタ
211 ALU
302、305 配列要素
303、306 配列レジスタ
304、307 配列データ
1200 ベクトル処理回路
1201 スカラレジスタファイル
1202 データメモリ
1203 レジスタファイル群
1302 スカラレジスタ
1700 ベクトル処理回路
1701 フォワーディング回路
1702 選択回路
1800 プロセッサシステム
1801 ベクトル処理回路
1802 スカラ処理回路
1803 命令メモリ
1804 データメモリ
1805 バスインターフェース

Claims (9)

  1. 複数の配列レジスタ要素を含み、各配列レジスタ要素の各々には物理番号が割り当てられているベクトルレジスタファイルと、
    各々が前記配列レジスタ要素に格納されたデータに対して演算処理を行う複数のパイプライン演算器と、
    命令を発行し、前記命令に基づいて前記ベクトルレジスタファイル及び前記パイプライ
    ン演算器の動作を制御することにより、パイプライン処理を制御する命令発行制御回路と
    を有するベクトル処理回路であって、
    前記パイプライン演算器の各々は、前記命令発行制御回路によって発行された1つの前記命令に対して、ソースとして指定された複数の前記配列レジスタ要素に格納されたデータを複数のサイクルに分けて演算し、前記演算結果をディスティネーションとして指定された複数の前記配列レジスタ要素に複数のサイクルに分けて格納し、
    前記命令発行制御回路は、前記命令のデータ語長に応じて前記配列レジスタ要素のデータサイズを変化させ、前記命令として先行命令と前記先行命令の後に続く後続命令を発行し、前記先行命令のデータ語長が前記後続命令のデータ語長より長いとき、前記先行命令の非先頭サイクルで処理される少なくとも1つの前記配列レジスタ要素の物理番号と、前記後続命令の先頭サイクルで処理される前記配列レジスタ要素の物理番号が一致するか否かを判定することによりレジスタ干渉の有無を判定し、前記レジスタ干渉の判定結果に基づいて前記後続命令の発行タイミングを調整することを特徴とするベクトル処理回路。
  2. 前記命令発行制御回路は、前記レジスタ干渉の判定によりレジスタ干渉が有ると判定した場合に、前記先行命令の種別に応じて設定される第1ペナルティサイクルと、
    前記先行命令の先頭サイクルから前記非先頭サイクルまでのサイクル数に応じて設定される第2ペナルティサイクルを挿入することにより、前記後続命令の発行タイミングを遅延させることを特徴とする請求項1に記載のベクトル処理回路。
  3. 前記ベクトルレジスタファイルは、前記配列レジスタ要素がベクトル長に応じてグループ化されて構成された複数の配列レジスタを含み、
    前記パイプライン演算器の各々は、
    前記命令発行制御回路によって発行された1つの前記命令に対して、ソースとして指定された前記配列レジスタに格納されたデータを複数のサイクルに分けて演算し、
    前記演算結果をディスティネーションとして指定された前記配列レジスタに複数のサイクルに分けて格納し、
    前記命令発行制御回路は、前記先行命令のデータ語長に応じて前記配列レジスタのデータサイズを変化させ、
    前記先行命令のデータ語長が前記後続命令のデータ語長より長いとき、前記先行命令の非先頭サイクルで処理される前記配列レジスタと、前記後続命令の先頭サイクルで処理される前記配列レジスタとの間で、レジスタ干渉の有無を判定する
    ことを特徴とする請求項1又は2に記載のベクトル処理回路。
  4. 前記複数の配列レジスタの各々には論理番号が割り当てられ、
    前記レジスタ干渉の有無の判定は、
    前記先行命令で指定された論理番号を有する前記配列レジスタの中で、
    前記先行命令の非先頭サイクルで処理される前記配列レジスタ要素の物理番号と、
    前記後続命令で指定された論理番号を有する前記配列レジスタの中で、前記後続命令の先頭サイクルで処理される前記配列レジスタ要素の物理番号が一致する否かを判定することにより行われることを特徴とする請求項3に記載のベクトル処理回路。
  5. 前記命令は、命令コード、前記命令コードのソースとなる前記配列レジスタを示すソース情報、及び前記命令コードのディスティネーションとなる前記配列レジスタを示すディスティネーション情報を含み、
    前記命令発行制御回路は、前記先行命令及び前記後続命令の少なくとも一方のディスティネーション情報によって示される前記配列レジスタと、他方のソース情報又はディスティネーション情報によって示される前記配列レジスタとの間で、レジスタ干渉の有無を判定することを特徴とする請求項3又は4に記載のベクトル処理回路。
  6. 前記パイプライン処理は少なくとも、前記配列レジスタ要素に格納されたデータを演算する演算ステージと、前記演算結果のデータを前記ベクトルレジスタに格納する書き戻しステージを有し、
    前記命令発行制御回路は、前記レジスタ干渉の判定によりレジスタ干渉が有ると判定したとき、少なくとも、レジスタ干渉が有ると判定された前記配列レジスタ要素に対する前記先行命令の前記演算ステージの結果が、前記書き戻しステージで前記ベクトルレジスタファイルに格納されるまで、前記後続命令を発行しないように、前記後続命令の発行タイミングを調整することを特徴とする請求項1乃至5のいずれかに記載のベクトル処理回路。
  7. 前記パイプライン演算器の演算処理結果のデータを、前記ベクトルレジスタファイルを経由することなく受けとるフォワーディング回路をさらに有し、
    前記フォワーディング回路は受けとったデータを、
    前記パイプライン演算器に、
    前記ベクトルレジスタファイルを経由することなく供給することを特徴とする請求項1乃至6のいずれかに記載のベクトル処理回路。
  8. 複数の配列レジスタ要素を含み、各配列レジスタ要素の各々には物理番号が割り当てられているベクトルレジスタファイルと、
    各々が前記配列レジスタ要素に格納されたデータに対して演算処理を行う複数のパイプライン演算器と、
    を有するベクトル処理回路において、
    命令を発行し、前記命令に基づいて前記ベクトルレジスタファイル及び前記パイプライン演算器の動作を制御することにより、パイプライン処理を制御する命令発行制御方法であって、
    前記パイプライン演算器の各々によって、発行された1つの前記命令に対して、ソースとして指定された複数の前記配列レジスタ要素に格納されたデータを複数のサイクルに分けて演算し、前記演算結果をディスティネーションとして指定された複数の前記配列レジスタ要素に複数のサイクルに分けて格納し、
    前記命令のデータ語長に応じて前記配列レジスタ要素のデータサイズを変化させ、
    前記命令として先行命令と前記先行命令の後に続く後続命令を発行し、
    前記先行命令のデータ語長が前記後続命令のデータ語長より長いとき、制御回路によって、前記先行命令の非先頭サイクルで処理される少なくとも1つの前記配列レジスタ要素の物理番号と、前記後続命令の先頭サイクルで処理される前記配列レジスタ要素の物理番号とが一致するか否かを判定することによりレジスタ干渉の有無を判定し、
    前記レジスタ干渉の判定によりレジスタ干渉が有ると判定された場合に、前記制御回路によって、前記後続命令の発行タイミングを調整することを特徴とする命令発行制御方法。
  9. バスと、
    バスインターフェースと、
    前記バスに前記バスインターフェースを介して接続され、命令を格納する命令メモリと、
    前記命令メモリに接続され、前記命令メモリに格納された命令を受けてデータの処理を実行するスカラ処理回路と、
    前記スカラ処理回路に接続され、前記スカラ処理回路からの命令を受けてデータの処理を実行するベクトル処理回路と、
    前記バスに前記バスインターフェースを介して接続され、前記スカラ処理回路及び前記ベクトル処理回路に対して、前記データの送受信を行うデータメモリを有するプロセッサシステムであって、前記ベクトル処理回路は、
    複数の配列レジスタ要素を含み、各配列レジスタ要素の各々には物理番号が割り当てられているベクトルレジスタファイルと、
    各々が前記配列レジスタ要素に格納されたデータに対して演算処理を行う複数のパイプライン演算器と、
    命令を発行し、前記命令に基づいて前記ベクトルレジスタファイル及び前記パイプライン演算器の動作を制御することにより、パイプライン処理を制御する命令発行制御回路と
    を有するベクトル処理回路であって、
    前記パイプライン演算器の各々は、前記命令発行制御回路によって発行された1つの前記命令に対して、ソースとして指定された複数の前記配列レジスタ要素に格納されたデータを複数のサイクルに分けて演算し、前記演算結果をディスティネーションとして指定された複数の前記配列レジスタ要素に複数のサイクルに分けて格納し、
    前記命令発行制御回路は、前記命令のデータ語長に応じて前記配列レジスタ要素のデータサイズを変化させ、前記命令として先行命令と前記先行命令の後に続く後続命令を発行し、前記先行命令のデータ語長が前記後続命令のデータ語長より長いとき、前記先行命令の非先頭サイクルで処理される少なくとも1つの前記配列レジスタ要素の物理番号と、前記後続命令の先頭サイクルで処理される前記配列レジスタ要素の物理番号とが一致するか否かを判定することによりレジスタ干渉の有無を判定し、前記レジスタ干渉の判定結果に基づいて前記後続命令の発行タイミングを調整することを特徴とするプロセッサシステム。
JP2010252839A 2010-11-11 2010-11-11 ベクトル処理回路、命令発行制御方法、及びプロセッサシステム Expired - Fee Related JP5699554B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2010252839A JP5699554B2 (ja) 2010-11-11 2010-11-11 ベクトル処理回路、命令発行制御方法、及びプロセッサシステム
US13/279,482 US8874879B2 (en) 2010-11-11 2011-10-24 Vector processing circuit, command issuance control method, and processor system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010252839A JP5699554B2 (ja) 2010-11-11 2010-11-11 ベクトル処理回路、命令発行制御方法、及びプロセッサシステム

Publications (2)

Publication Number Publication Date
JP2012103959A JP2012103959A (ja) 2012-05-31
JP5699554B2 true JP5699554B2 (ja) 2015-04-15

Family

ID=46048881

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010252839A Expired - Fee Related JP5699554B2 (ja) 2010-11-11 2010-11-11 ベクトル処理回路、命令発行制御方法、及びプロセッサシステム

Country Status (2)

Country Link
US (1) US8874879B2 (ja)
JP (1) JP5699554B2 (ja)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5786719B2 (ja) * 2012-01-04 2015-09-30 富士通株式会社 ベクトルプロセッサ
JP5751181B2 (ja) * 2012-01-24 2015-07-22 富士通セミコンダクター株式会社 命令制御回路、プロセッサ、及び命令制御方法
US9098265B2 (en) * 2012-07-11 2015-08-04 Arm Limited Controlling an order for processing data elements during vector processing
JP2018518502A (ja) 2015-06-22 2018-07-12 コリウム インターナショナル, インコーポレイテッド 難溶性治療剤を含む経皮接着性組成物
US9965275B2 (en) * 2015-07-31 2018-05-08 Arm Limited Element size increasing instruction
EP3125109B1 (en) * 2015-07-31 2019-02-20 ARM Limited Vector length querying instruction
GB2540943B (en) * 2015-07-31 2018-04-11 Advanced Risc Mach Ltd Vector arithmetic instruction
IL260290B2 (en) 2015-12-30 2023-11-01 Corium Inc Systems and methods for long-term percutaneous administration
US11541018B2 (en) 2016-06-23 2023-01-03 Corium, Llc Adhesive matrix with hydrophilic and hydrophobic domains and a therapeutic agent
CN109789134A (zh) 2016-07-27 2019-05-21 考里安国际公司 与口服递送药代动力学生物等效的透皮递送系统
MX2019001104A (es) 2016-07-27 2019-10-02 Corium Int Inc Sistemas de suministro transdermico de memantina.
JP7153010B2 (ja) 2016-07-27 2022-10-13 コリウム, インコーポレイテッド 塩薬物のin situでの塩から中性の薬物変換による、低溶解度または不安定非イオン化中性薬物の経皮配合物および送達方法
GB2563878B (en) * 2017-06-28 2019-11-20 Advanced Risc Mach Ltd Register-based matrix multiplication
KR102904873B1 (ko) 2017-07-26 2025-12-29 코리움, 엘엘씨 용매가 채워진 공극을 가진 미세다공성 막을 구비한 경피 전달 시스템
JP2021506783A (ja) 2017-12-13 2021-02-22 コリウム, インコーポレイテッド 経皮薬物送達の間にデポを作成するための方法
CA3086163A1 (en) 2017-12-20 2019-06-27 Corium, Inc. Transdermal adhesive composition comprising a volatile liquid therapeutic agent having low melting point
JP6604393B2 (ja) 2018-03-08 2019-11-13 日本電気株式会社 ベクトルプロセッサ、演算実行方法、プログラム
CN108563510B (zh) * 2018-05-04 2021-07-13 湖南大学 面向e级计算的体系结构感知优化方法
US10963256B2 (en) * 2018-09-28 2021-03-30 Intel Corporation Systems and methods for performing instructions to transform matrices into row-interleaved format
AU2022305336A1 (en) 2021-06-28 2024-01-18 Corium, Llc Combination therapy treatment using transdermal delivery system
WO2023278978A2 (en) 2021-06-28 2023-01-05 Corium, Llc Corona discharge treated transdermal delivery system
WO2024145323A1 (en) 2022-12-28 2024-07-04 Corium, Llc Pre-mixing method of preparing transdermal delivery system
JP2025542470A (ja) 2022-12-28 2025-12-25 コリウム, エルエルシー 経皮送達システムを調製する方法

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4541046A (en) * 1981-03-25 1985-09-10 Hitachi, Ltd. Data processing system including scalar data processor and vector data processor
JPS59111569A (ja) * 1982-12-17 1984-06-27 Hitachi Ltd ベクトル処理装置
JPS60178580A (ja) * 1984-02-24 1985-09-12 Fujitsu Ltd 命令制御方式
US4771380A (en) * 1984-06-22 1988-09-13 International Business Machines Corp. Virtual vector registers for vector processing system
JPH0622035B2 (ja) * 1985-11-13 1994-03-23 株式会社日立製作所 ベクトル処理装置
JPH0648486B2 (ja) * 1986-10-08 1994-06-22 日本電気株式会社 ベクトルデ−タ処理装置
JP2544770B2 (ja) * 1988-03-04 1996-10-16 日本電気株式会社 ベクトル演算命令発行制御方式
JPH02291073A (ja) * 1989-04-19 1990-11-30 Koufu Nippon Denki Kk ベクトルデータ処理装置
JPH02304676A (ja) * 1989-05-19 1990-12-18 Mitsubishi Electric Corp ディジタル信号処理装置
US5544337A (en) * 1989-12-29 1996-08-06 Cray Research, Inc. Vector processor having registers for control by vector resisters
US5197130A (en) * 1989-12-29 1993-03-23 Supercomputer Systems Limited Partnership Cluster architecture for a highly parallel scalar/vector multiprocessor system
EP0482200B1 (en) 1990-03-19 2001-09-19 Fujitsu Limited Interrupt processing system
JPH0786838B2 (ja) 1990-03-19 1995-09-20 富士通株式会社 割り込み処理方式
JPH0628388A (ja) * 1992-07-07 1994-02-04 Fujitsu Ltd ベクトル計算機
JPH06110686A (ja) 1992-09-25 1994-04-22 Matsushita Electric Ind Co Ltd レジスタ干渉回避装置
US5689653A (en) * 1995-02-06 1997-11-18 Hewlett-Packard Company Vector memory operations
US5941980A (en) * 1996-08-05 1999-08-24 Industrial Technology Research Institute Apparatus and method for parallel decoding of variable-length instructions in a superscalar pipelined data processing system
JPH10124313A (ja) 1996-10-18 1998-05-15 Fujitsu Ltd 並列処理計算機
US6006315A (en) 1996-10-18 1999-12-21 Samsung Electronics Co., Ltd. Computer methods for writing a scalar value to a vector
US6065105A (en) * 1997-01-08 2000-05-16 Intel Corporation Dependency matrix
US5922066A (en) * 1997-02-24 1999-07-13 Samsung Electronics Co., Ltd. Multifunction data aligner in wide data width processor
US5881307A (en) * 1997-02-24 1999-03-09 Samsung Electronics Co., Ltd. Deferred store data read with simple anti-dependency pipeline inter-lock control in superscalar processor
US6795908B1 (en) * 2000-02-16 2004-09-21 Freescale Semiconductor, Inc. Method and apparatus for instruction execution in a data processing system
US20110087859A1 (en) * 2002-02-04 2011-04-14 Mimar Tibet System cycle loading and storing of misaligned vector elements in a simd processor
US7437521B1 (en) * 2003-08-18 2008-10-14 Cray Inc. Multistream processing memory-and barrier-synchronization method and apparatus
US7325124B2 (en) * 2004-04-21 2008-01-29 International Business Machines Corporation System and method of execution of register pointer instructions ahead of instruction issue
JP2006285721A (ja) * 2005-04-01 2006-10-19 Seiko Epson Corp 演算処理装置および演算処理方法
US7660967B2 (en) * 2007-02-01 2010-02-09 Efficient Memory Technology Result data forwarding in parallel vector data processor based on scalar operation issue order
JP4789269B2 (ja) * 2008-04-10 2011-10-12 エヌイーシーコンピュータテクノ株式会社 ベクトル処理装置及びベクトル処理方法
US20100115233A1 (en) * 2008-10-31 2010-05-06 Convey Computer Dynamically-selectable vector register partitioning
US8555034B2 (en) * 2009-12-15 2013-10-08 Oracle America, Inc. Execution of variable width vector processing instructions

Also Published As

Publication number Publication date
JP2012103959A (ja) 2012-05-31
US20120124332A1 (en) 2012-05-17
US8874879B2 (en) 2014-10-28

Similar Documents

Publication Publication Date Title
JP5699554B2 (ja) ベクトル処理回路、命令発行制御方法、及びプロセッサシステム
US7594102B2 (en) Method and apparatus for vector execution on a scalar machine
US8161266B2 (en) Replicating opcode to other lanes and modifying argument register to others in vector portion for parallel operation
KR102413832B1 (ko) 벡터 곱셈 덧셈 명령
CN107810483A (zh) 验证基于块的处理器中的跳转目标
JP2000122864A (ja) デ―タ処理システムおよび集合化を用いた命令システム
JP3449186B2 (ja) パイプラインバイパス機能を有するデータ処理装置
TWI764966B (zh) 用於控制矢量記憶體存取之資料處理裝置及方法
CN107851013A (zh) 元素大小增加指令
JP5786719B2 (ja) ベクトルプロセッサ
TWI770079B (zh) 向量產生指令
JP2620511B2 (ja) データ・プロセッサ
JP2006506735A (ja) パイプラインプロセッサの方法および回路
JP5326314B2 (ja) プロセサおよび情報処理装置
US6055628A (en) Microprocessor with a nestable delayed branch instruction without branch related pipeline interlocks
US6938149B2 (en) Renaming apparatus and processor
JP4771079B2 (ja) Vliw型プロセッサ
JP3915019B2 (ja) Vliwプロセッサ、プログラム生成装置、および記録媒体
JP3743155B2 (ja) パイプライン制御型計算機
JP2011128672A (ja) スーパースカラプロセッサ及びその命令処理方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130805

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140710

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140722

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140905

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20141028

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20141113

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20150105

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20150120

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150202

R150 Certificate of patent or registration of utility model

Ref document number: 5699554

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees