JP5834997B2 - ベクトルプロセッサ、ベクトルプロセッサの処理方法 - Google Patents

ベクトルプロセッサ、ベクトルプロセッサの処理方法 Download PDF

Info

Publication number
JP5834997B2
JP5834997B2 JP2012037825A JP2012037825A JP5834997B2 JP 5834997 B2 JP5834997 B2 JP 5834997B2 JP 2012037825 A JP2012037825 A JP 2012037825A JP 2012037825 A JP2012037825 A JP 2012037825A JP 5834997 B2 JP5834997 B2 JP 5834997B2
Authority
JP
Japan
Prior art keywords
instruction
element data
processing
divided
issued
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
JP2012037825A
Other languages
English (en)
Other versions
JP2013174961A (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.)
Socionext Inc
Original Assignee
Socionext Inc
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 Socionext Inc filed Critical Socionext Inc
Priority to JP2012037825A priority Critical patent/JP5834997B2/ja
Priority to US13/733,524 priority patent/US9262165B2/en
Publication of JP2013174961A publication Critical patent/JP2013174961A/ja
Application granted granted Critical
Publication of JP5834997B2 publication Critical patent/JP5834997B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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; CALCULATING OR 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/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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; CALCULATING OR 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/30112Register structure comprising data of variable length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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/3017Runtime instruction translation, e.g. macros
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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, look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
    • G06F9/3873Variable length pipelines, e.g. elastic pipeline
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]

Description

本発明は、ベクトルプロセッサ、ベクトルプロセッサの処理方法に関する。
配列をなす大量の要素データに対し一定の演算を繰り返すベクトル処理において、ベクトルプロセッサが用いられる。ベクトルプロセッサによれば、一命令により配列の要素データを連続的に処理することで、高い演算スループットを得ることができる。
ベクトルプロセッサは、たとえば、ロード・ストア用、演算用のパイプラインを有する。演算パイプラインは、演算命令のフェッチ、デコードを一回的に行い、レジスタ(以下、ベクトルレジスタという)から要素データを順次連続して読み出し、算術演算などの演算を実行する。そして、演算パイプラインは、演算結果を示す要素データを処理順序でベクトルレジスタに格納する。
また、ベクトルプロセッサでは、要素データのビット幅(例えば、8ビット、16ビット、32ビット、64ビット等)の異なる演算命令が処理される。一般的に、演算パイプラインは、それぞれ所定ビットの演算を行う演算ユニットを複数有し、1サイクルで複数配列分の演算処理を行う。このため、要素データのビット幅が演算命令によって異なる場合、1サイクルで処理される要素データの配列数も演算命令によって異なる。ベクトルプロセッサでは、各命令の要素データの配列数は同一に設定されるため、要素データのビット幅が演算命令によって異なる場合、演算命令によって演算命令に所要の処理サイクル数が異なることを意味する。例えば、所定の条件において、要素データのビット幅が16ビットのHalfWord命令は処理に4サイクル要するのに対し、ビット幅が32ビットのWord命令は処理に8サイクル要する。
このように、要素データのビット幅の異なる演算命令を処理する場合、後続の演算命令の発行遅延が発生することがある。例えば、先行のWord命令(例えば、8サイクル)の後続に、HalfWord命令(例えば、4サイクル)が処理される場合を挙げる。また、このとき、後続のHalfWord命令は、先行のWord命令の処理対象の要素データのうち、後半4サイクルで処理される要素データを処理対象とするものとする。
このとき、先行のWord命令が発行された直後のサイクルに、後続のHalfWord命令が発行されると、先行のWord演算命令において、後続のHalfWord命令で処理対象となる要素データの処理が終了していない。このため、ベクトルプロセッサは、当該要素データの処理の終了を待って、後続のHalfWord命令を発行する。これにより、後続のHalfWord命令の発行が遅延し、演算スループットが低下する。
そこで、ベクトルプロセッサは、演算パイプラインを複数有する場合、処理サイクルの多いWord命令を例えば2つの演算命令に分割し、分割した演算命令をそれぞれ別の演算パイプラインで処理させる。これにより、後続のHalfWord命令で処理対象となる要素データの処理の終了が早くなり、ベクトルプロセッサは、後続のHalfWord命令の発行を早めることができる。これにより、演算スループットの低下が抑えられる。
ところで、複数の演算パイプラインを有するベクトルプロセッサでは、乗算器などの回路量の多い演算器や、使用頻度の低い演算器をすべての演算パイプラインに実装すると、プロセッサ全体の回路量が大きくなってしまう。そこで、回路量の多い演算器や、使用頻度の低い演算器は、複数の演算パイプラインのうち、一部の演算パイプラインにのみ実装される。
ベクトルプロセッサについては、例えば、特許文献1、2に記載される。
特許第2544770号 特開2009−193378
しかしながら、上記のように演算命令が分割され、一部の演算パイプラインを含む複数の演算パイプラインで処理された場合、後続の演算命令が当該一部の演算パイプラインでのみ処理可能な命令であったとき、ベクトルプロセッサは、当該後続の演算命令を発行することができない。そこで、ベクトルプロセッサは、一部の演算パイプラインが空くまで、後続の演算命令の発行を遅延させておく。これにより、演算スループットが低下してしまう。
本発明は、要素データのビット幅が異なる演算命令のスループットを向上させるベクトルプロセッサ、ベクトルプロセッサの処理方法を提供することにある。
第1の側面は、要素データ列の演算を行う命令をメモリから取得する命令フェッチ手段と、前記取得された命令を復号し当該復号された命令をサイクル単位に発行するデコード発行手段と、前記発行された命令をそれぞれ処理する演算ユニットを複数有する演算手段と、前記要素データ列が連続するアドレスに格納されるレジスタとを有し、前記複数の演算ユニットは、第1種命令を処理する第1の演算ユニットと、第1種命令に加えて第2種命令を処理する第2の演算ユニットとを有し、前記デコード発行手段は、発行対象の命令の要素データが分割された複数の分割命令が前記第2の演算ユニットで処理されるとき、発行対象の命令に後続する命令に前記第2種命令がない場合に前記分割命令を発行し、前記第2種命令がある場合は前記発行対象の命令を分割せずに発行する。
第1の側面によれば、演算スループットが向上する。
本実施形態が適用されるベクトルプロセッサの構成を説明する例図である。 ベクトルプロセッサで処理される命令の一例を説明する図である。 ベクトルプロセッサの演算パイプラインの処理シーケンスを説明する例図である。 演算ユニットが有する演算器の一例を示す図である。 Halfword命令のサイクル毎の要素データを説明する例図である。 Word命令の処理サイクル毎の要素データを説明する例図である。 Halfword命令とWord命令の各要素データ列について説明する図である。 Word命令の後にHalfword命令を連続して処理する場合であって、データハザードが発生する場合における各演算パイプラインの処理シーケンスを表す例図である。 Word命令の分割による後続のHalfWord命令の処理シーケンスについて説明する例図である。 命令の分割の有無による処理シーケンスを説明する例図である。 命令の要素データ列の処理順の変更による処理シーケンスを説明する例図である。 デコード発行部の命令発行制御部の構成を示す例図である。 令発行制御部の処理の詳細を説明するフローチャート図である。 命令発行可否部の処理について説明するフローチャート図である。 第2の実施の形態例の命令の分割有無による処理シーケンスを説明する例図である。 第2の実施の形態例における命令の要素データ列の処理順の変更による処理シーケンスを説明する例図である。
以下、図面にしたがって実施の形態について説明する。但し、適用される技術的範囲はこれらの実施の形態に限定されず、特許請求の範囲に記載された事項とその均等物まで及ぶものである。
[ベクトルプロセッサの概要]
図1は、本実施形態が適用されるベクトルプロセッサ1の構成を説明する例図である。ベクトルプロセッサは1、1つの命令に基づいて所定の配列をなす要素データの演算処理を行う。同図のベクトルプロセッサ1は、命令メモリ2、命令フェッチ部3、デコード発行部4、複数の演算ユニットU0〜U3、ベクトルレジスタ5、スカラレジスタ6を有する。ベクトルプロセッサ1は、たとえば、信号処理用LSI(Large Scale Integrated circuit)である。
命令メモリ(メモリ)2は、演算ユニットU0〜U3で処理される命令を格納する。命令メモリ2は、たとえばSRAMである。命令フェッチ部3は命令メモリ2から命令を読み出す。そして、デコード発行部4の命令発行制御部10は、命令フェッチ部3によって取得された命令を復号して、必要に応じて命令の分割及び変更処理を行うと共に、シーケンサS0〜S3を制御する。シーケンサS0〜S3は、命令及び命令に要する要素データをベクトルレジスタ5から読み出して、演算ユニットU0〜U3に入力する。
演算ユニットU0〜U3は、それぞれ入力される命令に従って動作する。演算ユニットU0〜U3は、加減算、乗算といった算術演算や、論理演算などの演算を実行し、演算結果を示す要素データをベクトルレジスタ5に書き込む。また、ベクトルレジスタ(レジスタ)5には、配列をなす要素データ(以下、要素データ列)が連続したアドレスに格納される。要素データ列の各要素データは、演算ユニットU0〜U3による演算用データ、及び、演算結果を示すデータである。なお、スカラレジスタ6には、配列をなさない演算用データ、及び、演算結果を示すデータが格納される。
また、図1の例において、演算ユニットU0〜U3のうち、演算ユニットU3は、各種演算に加えて、除算等の特定の演算を行う。除算器の回路は、回路量が多いことから、すべての演算ユニットに実装するとプロセッサ全体の回路量が大きくなってしまう。このため、除算器や使用頻度が少ない回路は、特定の演算ユニットU3にのみ実装される。
[ベクトルプロセッサの命令]
図2は、ベクトルプロセッサ1で処理される命令の一例を説明する図である。ベクトルプロセッサ1で処理される命令は、例えば、要素データ列同士の演算を、同じ列単位に行う命令である。同図に例示する命令C1「vadd vr1, vr2, vr0」は、配列数VL32の要素データ列vr1と要素データ列vr2とを同列同士で加算した結果を、要素データ列vr0の各要素データとして出力し、ベクトルレジスタ5に格納する命令である。
1つの命令の要素データ列vr0〜vr2は、同じビット幅の要素データαによって構成される。また、要素データ列vr0〜vr2の配列数VLは、ベクトルプロセッサ上で共通値に設定される。本実施の形態例では、要素データ列の配列数VLは32である。また、1つの命令は、ひとつの演算ユニットで処理され、命令における各列の処理順序はいずれの順でもよい。
なお、ベクトルプロセッサ1で処理される命令には、図2に例示した命令以外にも、要素データ列から最大値や最小値等を示す1の要素データαを出力する命令や、要素データ列の平均値を出力する命令等がある。この場合、演算結果は、ベクトルレジスタ5ではなく、スカラレジスタ6に格納される。
[ベクトルプロセッサの処理シーケンス]
続いて、図1のベクトルプロセッサのように、複数の演算ユニットU0〜U3を有するベクトルプロセッサにおける各演算パイプラインP0〜P3の命令の処理シーケンスについて説明する。
図3は、図1のベクトルプロセッサ1における4つの演算パイプラインP0〜P3の処理シーケンスを説明する例図である。同図の処理シーケンス図Z1において、縦軸は処理ステージを示し、横軸は時間(処理サイクル)を示す。処理シーケンス図Z1における各マス目内の数字1〜6は、処理対象の命令1〜命令6を示す。命令1〜命令6は、図2に例示したような配列同士の演算を行う命令であり、命令1から命令6に順に処理される。
本実施の形態例における演算パイプラインP0〜P3は、それぞれ3つの処理ステージを有する。3つの処理ステージは、命令のフェッチステージ「fetch」(以下、IFステージ)、命令のデコード・発行ステージ「decode」(以下、IDステージ)、演算ユニットによって命令を実行する実行ステージ「execute」(以下、EXステージ)である。なお、IDステージでは、EXステージの制御や処理対象の要素データ列のベクトルレジスタ5からの読み出し、EXステージでは演算結果のベクトルレジスタ5への書き込み処理も行われる。
このようなベクトルプロセッサ1において、1つの命令について、IFステージ及びIDステージは一回的に実行される。演算パイプラインP0〜P3は、1つの命令について、IFステージで命令をフェッチし、IDステージにてデコードし、EXステージでは必要な処理サイクル数かけて命令の演算処理を行う。図3の例では、各命令は、EXステージで4サイクルかけて処理され、3つの処理ステージによって6サイクルかけて処理される。なお、IDステージは、EXステージの制御を行うため、図3において、EXステージに要するサイクル数分、処理状態となっている。
また、本実施の形態例のベクトルプロセッサでは、処理サイクル単位に、1つの命令がフェッチされる。つまり、命令のフェッチ処理は、複数の演算パイプラインP0〜P3で同タイミングに行われない。このため、処理シーケンス図Z1において、1サイクル目、演算パイプラインP0で命令1のフェッチが行われ、次の2サイクル目で、演算パイプラインP1において命令2がフェッチされる。そして、演算パイプラインP0において、命令1の処理の終了にあわせて、5サイクル目で命令5がフェッチされる。
このように、ベクトルプロセッサ1では、命令のフェッチとデコードを一回的に行い、要素データを順次連続して処理する。これにより、命令のフェッチやデコードの時間が節減され、スループットが向上する。また、本実施の形態例において、演算ユニットU0〜U3は、それぞれに複数の演算器を備えることで、演算器の並列動作によって、さらに高いスループットを得る。図1の演算ユニットU0〜U3は、それぞれ、例えば、8つの演算器を有する。
図4は、演算ユニットU0〜U3が有する演算器U0−1〜U0−8の一例を示す図である。同図の演算ユニットU0は、例えば、図1の演算ユニットU0に対応する。また、8つの演算器U0−1〜U0−8は、それぞれ16ビットのデータの演算処理を1サイクルで行う。演算ユニットU0は、それぞれ16ビットの演算を行う演算器を8つ有することにより、1サイクルで、16×8ビットの演算を行う。なお、他の演算ユニットU1〜U3についても同様である。
ところで、ベクトルプロセッサ1で処理される命令の要素データ列における各要素データαのビット幅は、1つの命令では共通に設定されるが、命令間では異なる。命令の各要素データαのビット幅によって、各要素データαに用いられる演算器U0−1〜U0−8の数も異なる。
[命令の要素データのビット幅]
命令の要素データのビット幅は、例えば、命令によって、8ビット(Byte型)、16ビット(Halfword型)、32ビット(Word型)、64ビット(Doubleword型)等のように設定される。以下、要素データが8ビットの命令をByte命令、16ビットの命令をHalfword命令、32ビットの命令をWord命令、64ビットの命令をDoubleword命令と称する。このように、命令によって要素データαのビット幅が異なる場合、命令の各要素データαの処理に用いられる演算器U0−1〜U0−8の数が異なることにより、演算パイプラインのEXステージに要する処理サイクル数も異なる。以下、Halfword命令とWord命令の例に基づいて説明する。
まず、Halfword命令の例HW1について説明する。Halfword命令の各要素データαのビット幅は16ビットである。このため、Halfword命令の要素データαは、1つの演算器によって処理される。これは、8つの演算器U0−1〜U0−8によって、1サイクルで8列分の要素データαが処理可能であることを意味する。一方、Word命令の場合(W1)、各要素データαのビット幅は32ビットである。このため、Word命令の要素データαは、2つの演算器によって処理される。これは、8つの演算器U0−1〜U0−8によって、1サイクルで4列分の要素データαが処理可能であることを意味する。
なお、演算器U0−1〜U0−8が16ビットの演算器の場合、16ビットより要素データのビット幅の小さい命令(例えば、Byte命令)は処理の対象外となる。このため、本実施の形態例における演算器U0−1〜U0−8は、例えば、Halfword命令、Word命令、Doubleword命令を処理対象の命令とする。
このように、EXステージの1サイクルで処理可能な要素データの列数は、Halfword命令とWord命令とで異なる。また、ベクトルプロセッサ1で処理される各命令の配列数VLは共通に設定されるため、Halfword命令とWord命令とでは、EXステージに要する処理サイクル数が異なる。続いて、この相違について、具体例に基づいて説明する。
[Halfword命令のEXステージの処理例]
図5は、1つの演算パイプラインのEXステージにおけるHalfword命令のサイクル毎の要素データを説明する例図である。この例におけるHalfword命令は、例えば、図2の命令C1「vadd vr1, vr2, vr0」であり、要素データ列vr1、vr2の加算結果を要素データ列vr0に出力する命令である。また、要素データ列vr0〜vr2の各要素データαのビット幅は16ビットである。また、この例において、命令の演算処理は、図4に示した演算ユニットU0で行われることを前提とする。
なお、図5の各要素データαに示すVR0〜VR95は、当該要素データが格納されるベクトルレジスタのアドレスを示す。具体的に、要素データ列vr0をなす各要素データは、ベクトルレジスタの連続したアドレスVR0〜VR31に格納される。同様に、要素データ列vr1をなす各要素データは、ベクトルレジスタの連続したアドレスVR32〜VR63に、要素データ列vr2をなす各要素データはアドレスVR64〜VR95に格納される。
演算器U0−1〜U0−8は、1サイクルで16×8ビットの演算が可能であるため、Halfword命令の場合、1サイクルで8列分の要素データの演算が可能になる。そのため、図5の(A)において、初めのサイクル1Cyで、配列番号1〜8の要素データvr1[1〜8]とvr2[1〜8]との演算が行われ、演算結果を示す要素データvr0[1〜8]がそれぞれ出力される。具体的に、同図の(B)のように、アドレスVR32〜VR39に格納された要素データvr1[1〜8]と、アドレスVR64〜VR71に格納された要素データvr1[1〜8]とが同列間で加算された要素データvr0[0〜7]の値が、アドレスVR0〜VR7に格納される。
続いて、2サイクル目2Cyでは、図5の(A)(B)のように、アドレスVR40〜VR47に格納された要素データvr1[9〜16]と、アドレスVR72〜VR79に格納された要素データvr1[9〜16]とが同列間で加算された要素データvr0[9〜16]の値が、アドレスVR8〜VR15に格納される。3サイクル目3Cy、4サイクル目4Cyも同様である。
このように、Halfword命令の場合、演算器U0−1〜U0−8は、1サイクルで8列分の要素データ、即ち、配列数VL32のうち1/4列の要素データの演算処理を行う。これにより、4サイクル(1Cy〜4Cy)でEXステージの処理が終了する。続いて、Word命令の場合について説明する。
[Word命令のEXステージの処理例]
図6は、1つの演算パイプラインのEXステージにおけるWord命令の処理サイクル毎の要素データを説明する例図である。この例におけるWord命令は、例えば、命令「vadd vr2, vr4, vr0」であり、要素データ列vr2、vr4の加算結果を要素データ列vr0に出力する命令である。また、要素データ列vr0、vr2、vr4の各要素データαのビット幅は32ビットである。また、この例においても、命令の演算処理は、図4に示した演算ユニットU0で行われることを前提とする。
図5と同様にして、VR0〜VR191は、当該要素データが格納されるベクトルレジスタのアドレスを示す。ただし、Word命令の場合、要素データのビット幅が32ビットであるため、1つの要素データαが2つ分のレジスタに格納される。ベクトルレジスタ5の各レジスタは演算器U0−1〜U0−8の処理ビット数に対応するためである。したがって、要素データ列vr0をなす各要素データはアドレスVR0〜VR63に、要素データ列vr2をなす各要素データはアドレスVR64〜VR127に、要素データ列vr4をなす各要素データはアドレスVR128〜VR191に格納される。
演算器U0−1〜U0−8は、1サイクルで16×8ビットの演算が可能であるため、Word命令の場合、1サイクルで4列分の要素データの演算が可能になる。そのため、図6の(A)において、初めのサイクル1Cyで、配列番号1〜4の要素データvr2[1〜4]とvr4[1〜4]との演算が行われ、演算結果を示す要素データvr0[1〜4]がそれぞれ出力される。具体的に、同図の(B)のように、アドレスVR64〜VR71に格納された要素データvr2[1〜4]と、アドレスVR128〜VR135に格納された要素データvr2[1〜4]とが同列間で加算された要素データvr0[1〜4]の値が、アドレスVR8〜VR15に格納される。
同様にして、2サイクル目2Cyでは、図6の(A)(B)のように、アドレスVR8〜VR15に配列番号5〜8の演算結果が格納される。続く3サイクル目3Cyから8サイクル目8Cyについても同様である。8サイクル目8Cyには、配列番号29〜32の演算結果がアドレスVR56〜VR63に格納される。このように、Word命令の場合、演算器U0−1〜U0−8は、1サイクルで4列分の要素データ、即ち、配列数VL32のうち1/8列の要素データの演算処理を行う。これにより、8サイクル(1Cy〜8Cy)でEXステージの処理が終了する。
図5、6のとおり、要素データの配列数VLが32の場合、EXステージに要するサイクル数は、Halfword命令は4サイクル、Word命令は8サイクルである。このように、Halfword命令とWord命令とでは、処理に要するサイクル数が異なる。続いて、Halfword命令とWord命令について、要素データ列が格納されるベクトルレジスタについて、図示して説明する。
[Halfword命令、Word命令の単位ベクトルレジスタ]
図7は、ベクトルレジスタ8に格納されたHalfword命令とWord命令の各要素データ列について説明する図である。図5−1´は、図5−1を拡大した図である。図7において、VRxxが記される各マスはレジスタを、VRxxのxxはベクトルレジスタ8におけるアドレスを示す。なお、この例において、演算器U0−1〜U0−8の処理ビット数が16ビットであることから、各レジスタのビット幅は16ビットである。また、vrxxが記されるレジスタの領域は、命令の要素データ列が格納される単位ベクトルレジスタを示す。
前述したとおり、Halfword命令の場合、要素データ列の各要素データのビット幅は16ビットである。そのため、Halfword命令の要素データ列vr0[HW]、vr1[HW]、vr2[HW]は、それぞれ、16ビット幅の連続した32個のレジスタ(単位ベクトルレジスタ)に格納される。具体的に、図5−1、5−2のように、Halfword命令における要素データ列vr0[HW]は、アドレスVR0、VR1、…、VR31の計32個のレジスタに連続して格納される。要素データ列vr1[HW]、vr2[HW]についても同様である。
一方、Word命令の場合、要素データ列の各要素データのビット幅は32ビットである。この例において、各レジスタのビット幅は16ビットであるため、Word命令の各要素データはそれぞれ2つのレジスタに格納される。そのため、要素データ列vr0[W]、vr2[W]、vr4[W]は、それぞれ、16ビット幅の連続した64個のレジスタに格納される。具体的に、図5−1、5−2のように、Word命令における要素データ列vr0[W]は、アドレスVR0、VR1、…、VR63の64個のレジスタに連続して格納される。要素データ列vr2[W]、vr4[W]についても同様である。
このように、Halfword命令とWord命令とでは要素データのビット幅が異なるため、要素データ列が格納される単位ベクトルレジスタのサイズも異なる。なお、本実施の形態例において、Word命令の要素データ列vr0[W]は、Halfword命令の要素データ列vr0[HW]と要素データ列vr1[HW]とに対応する。同様にして、Word命令の要素データ列vr2[W]は、Halfword命令の要素データ列vr2[HW]と要素データ列vr3[HW]とに対応する。この例において、Word命令の要素データ列はvr2、vr4の名前は、Halfword命令の要素データ列に合わせて与えられている。
図4〜図7にかけて要素データのビット幅が異なる命令の処理及びベクトルレジスタについて、Halfword命令とWord命令を例示して説明してきた。このように、要素データのビット幅が異なる命令間では、処理に要するサイクル数、及び、要素データ列に対応する単位ベクトルレジスタのサイズが異なる。処理サイクルの異なる命令が混在して複数の演算パイプラインで処理される場合、データハザードが発生することがある。ベクトルプロセッサ1は、データハザードの回避のために、後続の命令の発行を遅延させる。続いて、データハザード及びその具体例について説明する。
[データハザード]
データハザードとは、パイプラインハザードの一種である。パイプラインハザードとは、パイプライン処理を行う場合において、複数の命令同士が持つ依存関係から後続の命令の発行を遅延せざるを得ない状況を示す。データハザードとは、パイプラインハザードのうち、処理するデータの依存関係に起因して発生するハザードを示す。
また、データハザードには、例えば、リード・アフター・ライト(RAW)ハザードと、ライト・アフター・リード(WAR)ハザードがある。RAWハザードは、命令(先行命令)の後に命令(後続命令)が処理される場合、先行命令が演算結果をレジスタに書き込む前に、後続命令が当該レジスタから値を読み出す場合に発生するハザードである。一方、WARハザードは、先行命令がレジスタからデータを読み出す前に、後続命令が当該レジスタに値を書き込む場合に発生するハザードである。データハザードが発生した場合、ベクトルプロセッサ1は、例えば、後続命令の発行を遅延させることで、データハザードを回避する。
[データハザードによる遅延の具体例]
図8は、Word命令の後にHalfword命令を連続して処理する場合であって、データハザードが発生する場合における各演算パイプラインP0〜P3の処理シーケンスを表す例図である。同図上の処理シーケンス図Z2−1はRAWハザード、同図下の処理シーケンス図Z2−2はWARハザードが発生する場合のEXステージにおける処理シーケンス図である。
図8の処理シーケンス図Z2−1、Z2−2において、マス目内の数値は、EXステージの各サイクルで処理対象となる要素データ列が格納されるベクトルレジスタのアドレス(例えば、VR0〜VR07)における初めのアドレスの数(例えば、VR0における0)を示す。例えば、この例において、処理シーケンス図Z2−1の演算パイプラインP0の1サイクル目の数値0は、ベクトルレジスタのアドレスVR0〜VR7に格納される要素データの演算処理が行われることを示す。
まず、処理シーケンス図Z2−1について説明する。同図では、演算パイプラインP0にてWord命令W1が、続いて、演算パイプラインP1にてHalfword命令HW1が処理される。具体的に、Word命令W1「vand vr2,vr4,vr0」は、要素データ列vr2と要素データ列vr4とを配列毎に加算し、要素データ列vr0として出力する命令である。そして、Halfword命令HW1「vsllh vr1,vr6,vr7」は、要素データ列vr1の各要素データについて、要素データ列vr6の同配列の要素データで指定したビット数分、左にシフトして要素データ列vr7に出力する命令である。
この例において、図8のベクトルレジスタ5−2に示すように、後続のHalfwordHW1の要素データ列vr1[HW]は、先行のWord命令W1の演算結果である要素データ列vr0[W]のうち、配列の後半の要素データ列(VR32〜VR63)に該当する。処理シーケンス図Z2−1によると、Word命令W1について、要素データ列vr0[W]の後半の要素データ列の値は、サイクル5からサイクル8にかけて確定する。このため、演算パイプラインP1は、6サイクル目以降に、後続のHalfwordHW1のEXステージの処理を開始する(RAWハザードによる遅延)。これにより、HalfwordHW1の処理は、演算パイプラインP1が処理を開始可能な2サイクル目から4サイクル分D1遅延する。
続いて、処理シーケンス図Z2−2について説明する。同図では、演算パイプラインP0にてWord命令W2が、続いて、演算パイプラインP1にてHalfword命令HW2が処理される。具体的に、Word命令W2「vand vr0,vr2,vr4」は、要素データ列vr0と要素データ列vr2とを配列毎に加算し、要素データ列vr4として出力する命令である。そして、Halfword命令HW2「vsllh vr6,vr7,vr1」は、要素データ列vr6の各要素データについて、要素データ列vr7の同配列の要素データで指定したビット数分、左にシフトして要素データ列vr1に出力する命令である。
この例において、後続のHalfwordHW2の演算結果が出力される要素データ列vr1[HW]は、先行のWord命令W2の処理対象の要素データ列vr0[W]の後半の配列の要素データ列(VR32〜VR63)に該当する。このため、Word命令W2の後半の要素データ列の読み出し処理が終了してから、後続のHalfwordHW2の要素データ列vr1[HW]への演算結果の出力が行われる必要がある。これにより、演算パイプラインP1は、6サイクル目以降に、後続のHalfwordHW2のEXステージの処理を開始する(WARハザードによる遅延)。これにより、HalfwordHW2の処理は、演算パイプラインP1が処理を開始可能な2サイクル目から4サイクル分D2遅延する。
このように、例えば、Word命令の後続にHalfWord命令が実行される場合であって、先行のWord命令の後半の要素データと、後続のHalfWord命令の要素データに依存関係がある場合、後続のHalfWord命令の発行が遅延される。このような場合、ベクトルプロセッサ1は、後続のWord命令を分割することによって、後続命令の発行の遅延を改善する。
[命令の分割]
図9は、図8のWord命令の分割による後続のHalfWord命令の処理シーケンスについて説明する例図である。同図の処理シーケンス図Z3−1は図8の処理シーケンス図Z2−1に、処理シーケンス図Z3−2は図8の処理シーケンス図Z2−2に対応する。
まず、処理シーケンス図Z3−1について説明する。同図において、Word命令W1が、2つの分割Word命令W1−1、W1−2に分割されている。分割Word命令W1−1、W1−2は、それぞれ、要素データ列vr0[W]の配列が半分に区分された区分要素データ列vr0−1[W]、vr0−2[W]を処理対象とする。具体的に、区分要素データ列vr0−1[W]は要素データ列vr0[W]の配列番号1〜16、区分要素データ列vr0−2[W]は要素データ列vr0[W]の配列番号17〜32の要素データ列に該当する。
各分割Word命令W1−1、W1−2のEXステージに要する処理サイクル数は、処理対象の要素データ列の配列数が半分になったことにより、8サイクルから4サイクルに短縮される。また、各分割Word命令W1−1、W1−2がそれぞれ別の演算パイプラインP0、P1によって処理されることにより、後続のHalfword命令HW1の処理は、3サイクル目から開始可能となる。これにより、Halfword命令HW1の遅延は1サイクルD3に抑えられる。
処理シーケンス図Z2−2についても同様である。同図において、Word命令W2が、2つの分割Word命令W2−1、W2−2に分割されている。分割Word命令W2−1、W2−2は、それぞれ、要素データ列vr0[W]の配列が半分に区分された区分要素データ列vr0−1[W]、vr0−2[W]を処理対象とする。これにより、各分割Word命令W2−1、W2−2のEXステージに要する処理サイクル数が8サイクルから4サイクルに短縮される。また、各分割Word命令W2−1、W2−2がそれぞれ別の演算パイプラインP0、P1によって処理されることにより、後続のHalfword命令HW2の処理は、3サイクル目から開始可能となる。これにより、Halfword命令HW2の遅延は1サイクルD4に抑えられる。
このように、命令の分割によって、処理のスループットが改善される。ただし、このとき、ベクトルプロセッサは命令の分割によって、別の遅延要因を生じることがある。
[命令分割による別の遅延]
図1で前述したように、本実施の形態例におけるベクトルプロセッサ1は複数の演算ユニットU0〜U3を有するが、一部の演算ユニット(以下、特定演算ユニット)U3は、通常の演算に加えて、除算演算等の特定の演算処理を行う。このため、除算命令は特定演算ユニットU3に対応する演算パイプライン(特定演算パイプライン)P3によって、処理される必要がある。しかしながら、Word命令が分割された複数の分割Word命令がそれぞれ演算パイプラインで処理されることにより、特定演算パイプラインP3が使用されることがある。このとき、Word命令の後続に除算命令がある場合、特定演算パイプラインP3が空き状態になるまで除算命令の発行が遅延され、処理のスループットが低下する。具体例に基づいて説明する。
図10は、命令の分割の有無による処理シーケンスを説明する例図である。処理シーケンス図Z4−1は命令分割を行う場合、処理シーケンス図Z4−2は命令分割を行わない場合における処理シーケンス図の一例である。同図において、マス目内の数字1〜6は命令1〜命令6を示し、各命令は、命令1から命令6にかけて順に処理される。この例において、命令3はWord命令、その他の命令1、2、4〜6はHalfWord命令である。また、命令4は除算命令であり、特定演算パイプラインP3でのみ処理可能である。
この例において、Word命令3の要素データ列(1列〜32列)のうち後半の要素データ列(17列〜32列)は、HalfWord命令5の要素データ列と依存関係にある。これにより、命令5のEXステージの処理は、命令3の後半の要素データ列の値が確定する8サイクル目から開始可能である。そこで、処理のスループットを向上するため、命令3が分割され、各分割命令が例えば演算パイプラインP2、P3で処理される。しかし、特定演算パイプラインP3が使用されることにより、かえって、除算命令4は、特定演算パイプラインP3が空き状態となるまで待機されることになる。この結果、命令5の処理は9サイクル目から開始可能となり、命令3を分割しない場合(Z4−2)に対して、開始サイクルが1サイクル遅延する。
<第1の実施の形態例>
そこで、本実施の形態例におけるベクトルプロセッサ1は、発行対象の命令の要素データが分割された複数の分割命令が特定の演算パイプラインを占有するとき、発行対象の命令に後続する命令に除算演算等の特定の演算パイプラインでのみ処理される特定命令がある場合は発行対象の命令を分割せずに発行する。一方、発行対象の命令に後続する特定命令がない場合、ベクトルプロセッサ1は、発行対象の命令を分割した複数の分割命令を発行する。
つまり、本実施の形態例におけるベクトルプロセッサ1は、分割対象の命令(図10の例では、命令3)の後続に特定演算パイプラインP3でしか処理できない特定命令(図10の例では、命令4)があり、分割対象の命令を分割して発行することにより特定パイプラインP3を占有し特定命令の発行が遅延する場合、分割対象の命令を分割することなく元の1命令として発行する。
[命令の分割の判定]
図10の処理シーケンス図Z4−2は、命令3を分割しない場合の処理シーケンス図の一例である。本実施の形態例におけるベクトルプロセッサ1は、分割対象の命令3の後続に特定パイプラインP3でのみ処理可能な命令4があり、命令3の分割命令が特定演算パイプラインP3を占有する場合、命令3の分割を行わない。これにより、命令3が1つの演算パイプラインP2で処理され、命令4は特定演算パイプラインP3で4サイクル目から処理可能となる。また、命令5は、命令3の配列後半の要素データとの依存関係に基づいて、8サイクル目から処理が開始される。
この結果、命令3を分割する場合(Z4−1)に対して、命令5の開始サイクルが1サイクル分D5早まる。これにより、処理のスループットが改善される。このように、本実施の形態例にベクトルプロセッサは、発行対象の命令の要素データが分割された複数の分割命令が特定の演算パイプラインを占有するとき、発行対象の命令に後続する命令に特定命令がある場合は、命令の分割を行わないことにより、処理のスループットを改善する。
また、本実施の形態例におけるベクトルプロセッサ1は、特定命令があることにより発行対象の命令を分割しないとき、発行対象の命令の要素データ列の処理順を、後続の命令と依存関係のある要素データ列が優先して処理されるように変更することで、処理のスループットをさらに改善する。
つまり、本実施の形態例におけるベクトルプロセッサ1は、命令3の要素データ列のうち、命令5の要素データ列と依存関係のある後半の要素データ列を優先して処理することによって、命令5の処理の開始サイクルを早めることを可能にする。続いて、具体例に基づいて説明する。
[命令の要素データの処理順の変更]
図11は、命令の要素データ列の処理順の変更による処理シーケンスを説明する例図である。図Z5−1は、命令3の要素データ列の処理順を変更しない場合、図Z5−2は、命令3の要素データ列の処理順を変更する場合における処理シーケンス図である。図11のベクトルレジスタ5−5は、命令3の配列番号1〜32の演算結果が格納される単位ベクトルレジスタ(VR0〜VR63)を示す。レジスタVR0〜VR63のうち、レジスタVR32〜VR62(vrA)には、命令5で処理対象となる要素データが格納される。
図11の処理シーケンス図Z5−1では、配列番号1〜16の要素データ列(VR0〜VR31)がサイクル3〜6で、配列番号17〜32の要素データ列vrA(VR32〜VR62)がサイクル7〜10で処理される。つまり、要素データ列が番号の小さい配列から順に処理される。このため、命令5の処理は、8サイクル目から開始可能となる。
これに対し、処理シーケンス図Z5−2では、配列番号17〜32の要素データ列vrA(VR32〜VR62)が、配列番号1〜16の要素データ列(VR0〜VR31)に優先して処理される。これにより、命令5と依存関係のある要素データ列vrAの値がサイクル3〜6で確定し、命令5の処理は4サイクル目から開始可能となる。この例では、命令4の処理開始サイクル(4サイクル目)に続く5サイクル目で、命令5の処理が開始される。これにより、命令5の処理の開始サイクルが3サイクル分D6、早くなる。
このように、本実施の形態例にベクトルプロセッサは、特定命令があることにより発行対象の命令を分割しないとき、発行対象の命令の要素データ列を区分した区分要素データ列のうち、後続の命令と依存関係にある区分要素データ列が優先して処理されるように、命令の要素データ列の処理順を変更して発行する。これにより、ベクトルプロセッサは、命令の分割を行わないことによって改善された処理のスループットをさらに改善することができる。また、命令の分割を行わないことによって処理のスループットが低下した場合であっても、処理のスループットを改善することができる。
続いて、本実施の形態例におけるベクトルプロセッサ1の処理について、ベクトルプロセッサ1のデコード発行部4の構成図と、デコード発行部4の処理のフローチャート図に基づいて順次説明する。
[本実施の形態例におけるデコード発行部の構成]
図12は、本実施の形態例のベクトルプロセッサ1におけるデコード発行部4の命令発行制御部10の構成を示す例図である。命令発行制御部10は、例えば、命令データサイズ判定部11、後続命令特定PL使用判定部12、命令分割部13、後続命令データ依存判定部14、ベクトル命令順序並び替え部15、ベクトル命令順序記憶部16、分割命令接続部17、命令発行可否判定部18、命令バッファ19を有する。
命令フェッチ部3は、命令メモリ2から読み出した命令をデコード発行部4に入力する。そして、デコード発行部4の命令発行制御部10は、命令の分割の及び要素データの処理順の変更の要否判定に基づいて必要に応じて命令を制御し、シーケンサS0〜S3を介して演算ユニットU0〜U3に入力する。続いて、デコード発行部4の命令発行制御部10における各部の処理の詳細について、フローチャート図に基づいて説明する。
[本実施の形態例におけるデコード発行部の処理の流れ]
図13は、デコード発行部4の命令発行制御部10の処理の詳細を説明するフローチャート図である。命令発行制御部10の命令データサイズ判定部11は、まず、命令フェッチ部3から取得した命令の要素データのビット幅を判定する。具体的に、命令データサイズ判定部11は、要素データのビット幅が演算器の処理ビット数と同一であるか否かを判定する(S11)。同一である場合(S11のYES)、命令の変更は行われない。これは、例えば、図4のように、演算器が16ビット演算器の例において、Halfword命令の場合を示す。
一方、要素データのビット幅が演算器の処理ビット数と異なる場合(S11のNO)、即ち、命令の要素データのビット幅が演算器の処理ビット数より大きい場合、後続命令特定PL使用判定部12は、取得した対象命令に後続する命令に特定の演算パイプラインP3でのみ処理可能な命令があるか否かを判定する(S12)。要素データのビット幅が演算器の処理ビット数より大きい命令とは、図4のような16ビット演算器の例において、Word命令またはDoubleword命令等を示す。このとき、後続命令は、多くとも、対象命令を分割した場合の複数の分割命令の処理が終了する前に発行される命令を含む。
後続する命令に特定演算パイプラインP3でのみ処理可能な特定命令がある場合(S12のYES)、後続命令特定PL使用判定部12は、さらに、対象命令を分割して発行することにより、特定演算パイプラインP3を占有するか否かを判定する(S13)。占有しない場合(S13のNO)、及び、後続する命令に特定命令がない場合(S12のNO)、命令分割部13は、対象命令を複数の分割命令に分割する(S14)。
命令の分割は、1要素データにM(M≧1)×N(N≧2)個の演算器を要する発行対象の命令(先行命令)に後続する命令(後続命令)に、1要素データにM個の演算器を要する命令であって、当該発行対象の命令の要素データ列がN個に区分された第1区分要素データ列とその後に処理される第2区分要素データ列のうち、第2区分要素データ列と依存関係がある後続命令がある場合に行われる。命令の分割によって、発行対象の先行命令は、第1、2区分要素データ列を処理対象とするN個の分割命令が生成され、発行される。このとき、後続命令は、多くとも発行対象のビット幅が後続命令のN倍である先行命令の処理が終了する前に発行される命令を含む。
例えば、図10のように、図4のような16ビット演算器の例において、先行命令がWord命令(32ビット)、後続命令がHalfword命令であるとき、次のように命令の分割が行われる。具体的に、Word命令の後続に、Word命令の要素データ列が2つ(N個)に区分された区分要素データ列のうち後に処理される区分要素データ列と依存関係があるHalfword命令がある場合に、Word命令の分割が行われる。このとき、Word命令は、2つ(N個)の区分要素データ列を処理対象とする2つの分割命令に分割され、発行される。
さらに、図4のような16ビット演算器の例において、先行命令がDoubleWord命令(64ビット)、後続命令がHalfword命令(16ビット)である場合について例示する。このとき、DoubleWord命令の後続に、DoubleWord命令の要素データ列が4つ(N個)に区分された区分要素データ列のうち、初めに処理される区分要素データ列以外の区分要素データ列と依存関係があるHalfword命令がある場合に、DoubleWord命令の分割が行われる。このとき、DoubleWord命令は、4つの区分要素データ列を処理対象とする4つ(N個)の分割命令に分割され、発行される。
なお、図4のような16ビット演算器の例において、先行命令がDoubleWord命令(64ビット)、後続命令がWord命令(32ビット)である場合について例示する。このとき、DoubleWord命令の後続に、DoubleWord命令の要素データ列が2つ(N個)に区分された区分要素データ列のうち、初めに処理される区分要素データ列以外の区分要素データ列と依存関係があるWord命令がある場合に、DoubleWord命令の分割が行われる。このとき、DoubleWord命令は2つ(N個)の分割命令に分割され、発行される。
このように、ビット幅が後続命令のN倍である先行命令がN個に分割されることによって、先行命令と後続命令の処理サイクル数が同一になる。これにより、先行及び後続の命令間で処理対象の要素データ列が重複する場合であっても、サイクル単位に命令がフェッチされるプロセッサにおいて各命令の処理サイクル数が同一化されることによりデータハザードによる遅延が回避または緩和される。従って、要素データのビット幅が異なる命令を処理するベクトルプロセッサにおいて、命令間の要素データのビット幅が異なることに起因して発生する処理のスループット低下が改善される。
フローチャート図に戻り、一方、特定の演算パイプラインを占有するとき(S13のYES)、命令分割部13は、対象命令の要素データ列を、N個の区分要素データ列に区分しておく(S15)。そして、後続命令データ依存判定部14は、初めに処理される区分要素データ列以外の区分要素データ列と、後続命令の要素データ列とに依存関係があるか否かを判定する(S16)。このとき、後続命令は、多くとも発行対象のビット幅が後続命令のN倍である先行命令の処理が終了する前に発行される命令を含む。
依存関係がある場合(S16のYES)、ベクトル命令順序並び替え部15は、対象命令の区分要素データの処理順を、依存関係のある区分要素データ列が優先して処理されるように並び替えることによって、依存関係が解消されるか否かを判定する(S17)。解消される場合(S17のYES)、ベクトル命令順序並び替え部15は、発行対象の命令の要素データ列の処理順を、依存関係のある区分要素データ列が優先して処理されるように、区分要素データ単位に並び替える(S18)。そして、ベクトル命令順序記憶部16及び分割命令接続部17は、区分要素データ列を接続した変更後の命令を命令バッファ19に記憶する。
一方、依存関係がない場合(S16のNO)、及び、依存関係が解消されない場合(S17のNO)、ベクトル命令順序並び替え部15は、対象命令の区分要素データの処理順の並び替えを行わない。そして、ベクトル命令順序記憶部16及び分割命令接続部17は、命令を変更することなく、命令バッファ19に記憶する。
続いて、命令発行可否判定部18は、命令バッファ19に記憶された命令が発行可能かを判定し、シーケンサS0〜S3を介して、演算パイプラインに入力する。この処理について、フローチャート図に基づいて説明する。
図14は、命令発行制御部10における命令発行可否部18の処理について説明するフローチャート図である。同図において、命令発行可否判定部18は、空き状態の演算パイプラインがあるか否かを判定する(S21)。空き状態の演算パイプラインがない場合(S21のNO)、命令発行可否判定部18は、命令の発行を待機させる(S25)。一方、空きの演算パイプラインがある場合(S21のYES)、命令発行可否判定部18は、発行対象の命令と、既に演算パイプラインで処理中の命令との間に、要素データ列の依存関係があるか否かを判定する(S22)。依存関係がある場合、即ち、データハザードが発生する場合(S22のYES)、命令発行可否判定部18は、命令の発行を待機する(S25)。
一方、依存関係がない場合(S22のNO)、命令発行可否判定部18は、空き状態の演算パイプラインにシーケンサを介して命令を発行する。そして、命令発行可否判定部18は、発行した命令が分割命令であって、同一の命令に基づいて生成された他の分割命令が残存している場合は(S24のYES)、同様にして空き状態の演算パイプラインがあるか否かを判定する(S21)。このようにして、必要に応じて分割または変更された命令が演算パイプラインに発行される。
以上のように、本実施の形態例におけるベクトルプロセッサは、発行対象の命令の要素データが分割された複数の分割命令が特定の演算ユニットで処理されるとき、発行対象の命令に後続する命令に特定の演算ユニットでのみ処理可能な命令がない場合には分割命令を発行する。そして、ベクトルプロセッサは、特定の演算ユニットでのみ処理可能な命令がある場合には、発行対象の命令を分割せずに発行する。
これにより、本実施の形態例におけるベクトルプロセッサは、命令の分割によって特定の演算ユニットを占有することによって、当該演算ユニットでのみ処理可能な特定の命令の発行が遅延されることを回避する。また、ベクトルプロセッサは、命令の分割をしても特定演算ユニットを占有しない場合、または、後続に特定命令がない場合は、命令を分割することによって、後続命令とのデータハザードによる遅延を改善する。
また、本実施の形態例におけるベクトルプロセッサは、発行対象の命令を分割しないとき、発行対象の要素データ列が区分された区分要素データ列のうち、初めに処理される区分要素データ列以外の区分要素データ列が後続の命令と依存関係のある場合に、当該依存関係のある区分要素データ列が優先して処理されるように前記要素データ列の処理順を変更して処理する。
これにより、本実施の形態例におけるベクトルプロセッサは、分割対象の命令が分割されず元の1の命令として発行される場合に、後続の命令と依存関係のある一部の要素データ列を優先して先に処理することによって、後続の命令の発行を早めることができる。
以上のようにして、本実施の形態例におけるベクトルプロセッサによると、要素データのビット幅の異なる命令が混在して処理される場合であっても、命令の分割に因る特定命令の発行遅延を回避すると共に、データハザードに基づく後続命令の発行遅延を回避または緩和することができる。これにより、本実施の形態例におけるベクトルプロセッサは、要素データのビット幅の異なる命令が混在して処理される場合であっても、処理のスループットを向上させることができる。
なお、図4〜図11では、演算器U0−1〜U0−8の処理ビット数が16ビットであるベクトルプロセッサについて例示したが、別の実施の形態例として、演算器の処理ビット数がそれぞれ8ビットであって、命令の配列数VLが64に設定されるベクトルプロセッサについて例示する。
<第2の実施の形態例>
演算器の処理ビット数が8ビットであるベクトルプロセッサは、例えば、要素データのビット幅が16ビットのHalfword命令、32ビットのWord命令、64ビットDoubleWord命令に加えて、8ビットのByte命令を処理対象とする。また、この例において、6つの演算パイプラインP0〜P5で処理が行われるものとする。また、演算パイプラインP5は、特定の演算命令を処理する特定演算パイプラインP5である。また、前述したとおり、配列数VLは64に設定される。この場合における命令の分割の判定、及び、要素データ列の処理順の変更について、具体例に基づいて説明する。
[命令の分割の判定]
図15は、第2の実施の形態例における命令の分割の有無による処理シーケンスを説明する例図である。処理シーケンス図Z6−1は命令分割を行う場合、処理シーケンス図Z6−2は命令分割を行わない場合における処理シーケンス図の一例である。同図において、マス目内の数字11〜16は命令11〜命令16を示し、各命令は、命令11から命令16にかけて順に処理される。また、命令13はWord命令、その他の命令11〜12、14〜16はByte命令である。また、命令14は除算命令であり、演算パイプラインP5でのみ処理可能である。
この例において、各命令の要素データ列の配列数VLは64であって、各演算ユニットは8ビット演算器を8つ有する。即ち、演算ユニットは、1サイクルに8×8ビットの処理を可能とする。したがって、要素データのビット幅が8ビットのByte命令の場合、1サイクルで8列分(8/64)の配列を処理可能とし、1つの命令は8サイクルかけて処理される。一方、要素データのビット幅が32ビットのWord命令の場合、1つの要素データの処理に4つの演算ユニットを使用することから、1サイクルで2列分(2/64)の配列を処理可能とし、1つの命令は32サイクルかけて処理される。
また、この例において、命令13の1〜64番目の配列の要素データ列のうち、4つに区分した区分要素データ列のうち、2番目に処理される区分要素データ列vrB(17〜32番目の配列の要素データ列)と、命令15の要素データ列vrBに依存関係がある。従って、命令15は、命令13の区分要素データ列vrBの値が確定するまで、処理が待機される。
そこで、処理シーケンス図Z6−1のように、命令13が4つ(N個)の分割命令に分割され、演算パイプラインP2〜5でそれぞれ処理される。しかしながら、分割命令によって特定演算パイプラインP5が使用されることにより、後続の除算命令14は、特定演算パイプラインP5が空き状態となるまで待機される。この結果、命令14の次にフェッチされる命令15の演算処理は15サイクル目から開始可能となり、命令13を分割しない場合(Z6−2)に対して、開始サイクルが3サイクルD7遅延する。
そこで、本実施の形態例におけるベクトルプロセッサ1は、分割命令が特定演算パイプラインP5を占有し、分割対象の命令13の後続に特定パイプラインP5でのみ処理可能な命令14がある場合、分割対象の命令13の分割を行わない。これにより、処理シーケンス図Z6−2のように、命令13が1つの演算パイプラインP2で処理されるため、命令14は、特定演算パイプラインP5で4サイクル目から処理可能となる。また、このとき、命令15は、命令13の要素データ列vrBとの依存関係に因り、12サイクル目から処理が開始可能となる。この結果、命令13を分割する場合よりも命令15の開始サイクルが3サイクルD7早まり、処理のスループットが改善する。
このように、分割対象の命令(この例では、命令13)の分割数が多い場合、命令が分割されることによってより多くの演算パイプラインを占有するため、特定演算パイプラインを占有する確率が高くなる。これにより、特定命令の遅延がより発生し易くなる。そのため、本実施の形態例にベクトルプロセッサは、発行対象の命令の要素データが分割された複数の分割命令が特定の演算パイプラインを占有するとき、発行対象の命令に後続する命令に特定命令がある場合は、命令の分割を行わないことにより、処理のスループットをより効果的に改善する。
続いて、第2の実施の形態例において要素データの処理順を変更する例について説明する。
[命令の要素データの処理順の変更]
図16は、第2の実施の形態例における命令の要素データ列の処理順の変更による処理シーケンス図を説明する例図である。図Z7−1は、命令13の要素データ列の処理順を変更しない場合、図Z7−2は、命令13の要素データ列の処理順を変更する場合における処理シーケンス図である。処理シーケンス図Z7−1において、命令13は、配列番号(1〜64)の小さい要素データ列から順に処理される。このため、命令15の処理は、12サイクル目から開始可能となる。
これに対し、処理シーケンス図7−2では、配列番号1〜64の要素データ列のうち、後続の命令15と依存関係のある一部の区分要素データ列が優先して処理される。命令13の要素データ列は4つの区分要素データ列(配列番号1〜16、配列番号17〜32、配列番号33〜48、配列番号49〜64)に区分される。この例において、区分要素データ列のうち、配列番号17〜32の要素データ列vrBが、命令15の要素データ列と依存関係にあるため、本実施の形態例におけるベクトルプロセッサは、配列番号17〜32の区分要素データ列vrBを優先して処理する(サイクル3〜10)。
これにより、区分要素データ列vrBの値がサイクル3〜10で確定するため、命令15の演算処理は4サイクル目から開始可能となる。この例では、命令14の処理開始サイクル(4サイクル目)に続く5サイクル目で、命令15の処理が開始される。これにより、命令15の処理の開始サイクルが7サイクルD8、早くなる。
このように、本実施の形態例にベクトルプロセッサは、特定命令があることにより発行対象の命令を分割しないとき、発行対象の命令の要素データ列を区分した区分要素データ列のうち、後続の命令と依存関係にある区分要素データ列が優先して処理されるように、命令の要素データ列の処理順を変更して発行する。これにより、本実施の形態例のように発行対象の命令に要する処理サイクル数が多い場合、ベクトルプロセッサは、処理順を変更することによって、より効果的に処理のスループットを改善できる。
以上の実施の形態をまとめると、次の付記のとおりである。
(付記1)
要素データ列の演算を行う命令をメモリから取得する命令フェッチ手段と、
前記取得された命令を復号し当該復号された命令をサイクル単位に発行するデコード発行手段と、
前記発行された命令をそれぞれ処理する演算ユニットを複数有する演算手段と、
前記要素データ列が連続するアドレスに格納されるレジスタとを有し、
前記複数の演算ユニットは、第1種命令を処理する第1の演算ユニットと、第1種命令に加えて第2種命令を処理する第2の演算ユニットとを有し、
前記デコード発行手段は、発行対象の命令の要素データが分割された複数の分割命令が前記第2の演算ユニットで処理されるとき、発行対象の命令に後続する命令に前記第2種命令がない場合に前記分割命令を発行し、前記第2種命令がある場合は前記発行対象の命令を分割せずに発行するベクトルプロセッサ。
(付記2)
付記1において、
前記演算ユニットは1つまたは複数の演算器をそれぞれ有し、
前記第1、2種命令は、さらに、要素データ列を構成する各要素データが第1ビット幅であってそれぞれM(M≧1)個の演算器によって処理される第1ビット幅命令と、前記各要素データが第1ビット幅のN(N≧2)倍であってそれぞれM×N個の演算器によって処理される第2ビット幅命令とを有し、
前記発行対象の前記第2ビット幅命令に後続する命令に、当該第2ビット幅命令の要素データ列がN個に区分された第1区分要素データ列とその後に処理される第2区分要素データ列のうち、前記第2区分要素データ列と依存関係がある前記第1ビット幅命令がある場合に、前記複数の分割命令は、前記第1、2区分要素データ列を処理対象とする前記N個の命令として分割されるベクトルプロセッサ。
(付記3)
付記2において、
前記デコード発行手段は、前記発行対象の命令を分割しないとき、前記発行対象の第2ビット幅命令の前記第2区分要素データ列が優先して処理されるように前記要素データ列の処理順を変更して第2ビット幅命令を発行するベクトルプロセッサ。
(付記4)
付記1乃至3のいずれかにおいて、
前記発行対象の命令に後続する命令には、多くとも前記複数の分割命令の処理が終了する前に発行される命令が含まれるベクトルプロセッサ。
(付記5)
付記2乃至4のいずれかにおいて、
前記発行対象の第2ビット幅命令に後続する命令には、多くとも前記発行対象の第2ビット幅命令の処理が終了する前に発行される命令が含まれるベクトルプロセッサ。
(付記6)
要素データ列の演算を行う命令をメモリから取得する命令フェッチ工程と、
前記取得された命令を復号し当該復号された命令をサイクル単位に発行するデコード発行工程と、を有し、
前記発行された命令は演算ユニットによってそれぞれ処理され、複数の前記演算ユニットのうち第1の演算ユニットは第1種命令を処理し、第2の演算ユニットは第1種命令に加えて第2種命令を処理し、前記要素データ列はレジスタの連続するアドレスに格納され、
前記デコード発行工程は、発行対象の命令の要素データが分割された複数の分割命令が前記第2の演算ユニットで処理されるとき、発行対象の命令に後続する命令に前記第2種命令がない場合に前記分割命令を発行し、前記第2種命令がある場合は前記発行対象の命令を分割せずに発行するベクトルプロセッサの処理方法。
1:ベクトルプロセッサ、2:命令メモリ、3:命令フェッチ部、4:デコード発行部、5:ベクトルレジスタ、6:スカラレジスタ、10:命令発行制御部、S0〜S3:シーケンサ、U0〜U3:演算ユニット

Claims (6)

  1. 要素データ列の演算を行う命令をメモリから取得する命令フェッチ手段と、
    前記取得された命令を復号し当該復号された命令をサイクル単位に発行するデコード発行手段と、
    前記発行された命令をそれぞれ処理する複数の演算ユニットを有する演算手段と、
    前記要素データ列が連続するアドレスに格納されるレジスタとを有し、
    前記複数の演算ユニットは、第1種命令を処理する第1の演算ユニットと、前記第1種命令に加えて第2種命令を処理する第2の演算ユニットとを有し、
    前記デコード発行手段は、発行対象の命令の要素データが分割された複数の分割命令が前記第2の演算ユニットで処理されるとき、前記発行対象の命令に後続する命令に前記第2種命令がない場合に前記分割命令を発行し、前記第2種命令がある場合は前記発行対象の命令を分割せずに発行するベクトルプロセッサ。
  2. 請求項1において、
    前記演算ユニットは1つまたは複数の演算器をそれぞれ有し、
    前記第1、2種命令は、さらに、前記要素データ列を構成する各要素データが第1ビット幅であってそれぞれM(M≧1)個の演算器によって処理される第1ビット幅命令と、前記各要素データが前記第1ビット幅のN(N≧2)倍であってそれぞれM×N個の演算器によって処理される第2ビット幅命令とを有し、
    前記発行対象の前記第2ビット幅命令に後続する命令に、当該第2ビット幅命令の要素データ列がN個に区分された第1区分要素データ列とその後に処理される第2区分要素データ列のうち、前記第2区分要素データ列を処理対象とする前記第1ビット幅命令がある場合に、前記複数の分割命令は、前記第1、2区分要素データ列を処理対象とする前記N個の命令として分割されるベクトルプロセッサ。
  3. 請求項2において、
    前記デコード発行手段は、前記発行対象の命令を分割しないとき、前記発行対象の第2ビット幅命令の前記第2区分要素データ列が優先して処理されるように前記要素データ列の処理順を変更して前記第2ビット幅命令を発行するベクトルプロセッサ。
  4. 請求項1乃至3のいずれかにおいて、
    前記発行対象の命令に後続する命令は、前記複数の分割命令の処理が終了する前に発行される命令であるベクトルプロセッサ。
  5. 請求項2乃至4のいずれかにおいて、
    前記発行対象の第2ビット幅命令に後続する命令は、前記発行対象の第2ビット幅命令の処理が終了する前に発行される命令であるベクトルプロセッサ。
  6. 要素データ列の演算を行う命令をメモリから取得する命令フェッチ工程と、
    前記取得された命令を復号し当該復号された命令をサイクル単位に発行するデコード発行工程と、を有し、
    前記発行された命令は複数の演算ユニットによってそれぞれ処理され、前記複数の演算ユニットのうち第1の演算ユニットは第1種命令を処理し、第2の演算ユニットは前記第1種命令に加えて第2種命令を処理し、前記要素データ列はレジスタの連続するアドレスに格納され、
    前記デコード発行工程は、発行対象の命令の要素データが分割された複数の分割命令が前記第2の演算ユニットで処理されるとき、前記発行対象の命令に後続する命令に前記第2種命令がない場合に前記分割命令を発行し、前記第2種命令がある場合は前記発行対象の命令を分割せずに発行するベクトルプロセッサの処理方法。
JP2012037825A 2012-02-23 2012-02-23 ベクトルプロセッサ、ベクトルプロセッサの処理方法 Expired - Fee Related JP5834997B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2012037825A JP5834997B2 (ja) 2012-02-23 2012-02-23 ベクトルプロセッサ、ベクトルプロセッサの処理方法
US13/733,524 US9262165B2 (en) 2012-02-23 2013-01-03 Vector processor and vector processor processing method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012037825A JP5834997B2 (ja) 2012-02-23 2012-02-23 ベクトルプロセッサ、ベクトルプロセッサの処理方法

Publications (2)

Publication Number Publication Date
JP2013174961A JP2013174961A (ja) 2013-09-05
JP5834997B2 true JP5834997B2 (ja) 2015-12-24

Family

ID=49158805

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012037825A Expired - Fee Related JP5834997B2 (ja) 2012-02-23 2012-02-23 ベクトルプロセッサ、ベクトルプロセッサの処理方法

Country Status (2)

Country Link
US (1) US9262165B2 (ja)
JP (1) JP5834997B2 (ja)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20150002319A (ko) * 2013-06-28 2015-01-07 삼성전자주식회사 비대칭형 클러스터 구조의 프로세서
US10192162B2 (en) * 2015-05-21 2019-01-29 Google Llc Vector computation unit in a neural network processor
EP3349670B1 (en) 2015-09-18 2020-09-09 Microvention, Inc. Releasable delivery system
CN107315564B (zh) * 2016-04-26 2020-07-17 中科寒武纪科技股份有限公司 一种用于执行向量超越函数运算的装置和方法
US10489479B1 (en) 2016-09-12 2019-11-26 Habana Labs Ltd. Matrix multiplication engine
KR102343652B1 (ko) * 2017-05-25 2021-12-24 삼성전자주식회사 벡터 프로세서의 서열 정렬 방법
US10713214B1 (en) 2017-09-27 2020-07-14 Habana Labs Ltd. Hardware accelerator for outer-product matrix multiplication
US10853070B1 (en) 2017-10-23 2020-12-01 Habana Labs Ltd. Processor suspension buffer and instruction queue
US11321092B1 (en) 2017-11-08 2022-05-03 Habana Labs Ltd. Tensor-based memory access
US10915297B1 (en) 2017-11-15 2021-02-09 Habana Labs Ltd. Hardware accelerator for systolic matrix multiplication
KR102080161B1 (ko) * 2018-02-01 2020-02-21 사회복지법인 삼성생명공익재단 개인 맞춤형 의료를 위한 유전자 패널, 그를 구성하는 방법, 및 그를 이용한 개인 맞춤형 치료 방법
CN108388446A (zh) * 2018-02-05 2018-08-10 上海寒武纪信息科技有限公司 运算模块以及方法

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2544770B2 (ja) 1988-03-04 1996-10-16 日本電気株式会社 ベクトル演算命令発行制御方式
US5396634A (en) * 1992-09-30 1995-03-07 Intel Corporation Method and apparatus for increasing the decoding speed of a microprocessor
US6272257B1 (en) * 1997-04-30 2001-08-07 Canon Kabushiki Kaisha Decoder of variable length codes
US6542982B2 (en) * 2000-02-24 2003-04-01 Hitachi, Ltd. Data processer and data processing system
US20080313438A1 (en) * 2007-06-14 2008-12-18 David Arnold Luick Unified Cascaded Delayed Execution Pipeline for Fixed and Floating Point Instructions
JP4985452B2 (ja) 2008-02-14 2012-07-25 エヌイーシーコンピュータテクノ株式会社 ベクトル処理装置

Also Published As

Publication number Publication date
JP2013174961A (ja) 2013-09-05
US20130246745A1 (en) 2013-09-19
US9262165B2 (en) 2016-02-16

Similar Documents

Publication Publication Date Title
JP5834997B2 (ja) ベクトルプロセッサ、ベクトルプロセッサの処理方法
US10776127B2 (en) Reducing data hazards in pipelined processors to provide high processor utilization
US7376812B1 (en) Vector co-processor for configurable and extensible processor architecture
JP5699554B2 (ja) ベクトル処理回路、命令発行制御方法、及びプロセッサシステム
JP2002333978A (ja) Vliw型プロセッサ
JP5209933B2 (ja) データ処理装置
WO2010087144A1 (ja) 並列比較選択演算装置、プロセッサ及び並列比較選択演算方法
CN109416633B (zh) 用于执行重新排列操作的设备及方法
JP2011090592A (ja) 情報処理装置とその命令デコーダ
GB2540940A (en) An apparatus and method for transferring a plurality of data structures between memory and one or more vectors of data elements stored in a register bank
JPH06242953A (ja) データ・プロセッサ
US20240004663A1 (en) Processing device with vector transformation execution
CN112074810B (zh) 并行处理设备
KR101715456B1 (ko) 스레드 오프셋 카운터
CN110914801A (zh) 在数据处理设备中的向量交叉
US9934036B2 (en) Compiler method, parallel processing method, and compiler apparatus
JP5659772B2 (ja) 演算処理装置
CN109416634B (zh) 数据处理设备和用于制造该设备的方法
JP5786719B2 (ja) ベクトルプロセッサ
US20030191928A1 (en) Multi-way select instructions using accumulated condition codes
JPS63293638A (ja) データ処理装置
JP4151497B2 (ja) パイプライン処理装置
JPH0769805B2 (ja) データ処理装置
JP2007079711A (ja) マイクロプロセッサ

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20141030

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150508

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150519

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20150610

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150716

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: 20151006

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20151019

R150 Certificate of patent or registration of utility model

Ref document number: 5834997

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees