JP3779602B2 - Simd演算方法およびsimd演算装置 - Google Patents

Simd演算方法およびsimd演算装置 Download PDF

Info

Publication number
JP3779602B2
JP3779602B2 JP2001363307A JP2001363307A JP3779602B2 JP 3779602 B2 JP3779602 B2 JP 3779602B2 JP 2001363307 A JP2001363307 A JP 2001363307A JP 2001363307 A JP2001363307 A JP 2001363307A JP 3779602 B2 JP3779602 B2 JP 3779602B2
Authority
JP
Japan
Prior art keywords
instruction
calculation
bit
simd
bit length
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 - Lifetime
Application number
JP2001363307A
Other languages
English (en)
Other versions
JP2003167728A (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.)
Panasonic Corp
Panasonic Holdings Corp
Original Assignee
Panasonic Corp
Matsushita Electric Industrial Co 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 Panasonic Corp, Matsushita Electric Industrial Co Ltd filed Critical Panasonic Corp
Priority to JP2001363307A priority Critical patent/JP3779602B2/ja
Priority to US10/304,341 priority patent/US7237089B2/en
Publication of JP2003167728A publication Critical patent/JP2003167728A/ja
Application granted granted Critical
Publication of JP3779602B2 publication Critical patent/JP3779602B2/ja
Priority to US12/491,163 priority patent/USRE46277E1/en
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/3804Details
    • G06F2207/3808Details concerning the type of numbers or the way they are handled
    • G06F2207/3828Multigauge devices, i.e. capable of handling packed numbers without unpacking them

Landscapes

  • Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)

Description

【0001】
【発明の属する技術分野】
本発明は、マイクロプロセッサにおいて、一つの命令で複数のオペランドに対して同一演算を施すことことで処理速度の高速化を図る技術であるSIMD(Single Instruction Multiple Data; 単一命令複数データ)に関する。
【0002】
【従来の技術】
画像や音声を扱うマルチメディアデータ処理では、例えば、画像全体にフィルターをかけて色調や画質等を変化させるような、膨大な量のデータに同じ計算処理を施す作業が必要になる。
SIMDを実装しない通常のプロセッサは、1データ毎に1命令を実行しなくてはならず、マルチメディアデータ処理に膨大な時間がかかる。
【0003】
これに対して、SIMDを実装したプロセッサは、1命令で複数のデータを同時に処理することが可能なので、マルチメディアデータ処理の時間を大幅に短縮できる。
このようにSIMDはマルチメディアデータ処理に極めて有効な技術であり、近年、マルチメディア機器の台頭に伴って各種のプロセッサがSIMD演算命令を実装する傾向がある。
【0004】
例えば、64ビット幅の加算器を備えるプロセッサは、並列加算演算を実行するSIMD演算命令として、8ビットデータの加算を同時に8並列実行するADDS8命令、16ビットデータの加算を同時に4並列実行するADDS16命令、及び、32ビットデータの加算を同時に2並列実行するADDS32命令の3種類を実装する。
【0005】
【発明が解決しようとする課題】
SIMD演算命令の総命令数は、並列演算の対象とするデータサイズのパターン数と演算の種別数との積となるので、データサイズのパターン数が複数ある場合には命令数が飛躍的に増えてしまう。
命令数が増えると、機械語命令のビット割付を圧迫し、またプロセッサにおいては命令デコーダ回路が大規模化してコスト及び消費電力の増加を招く。
【0006】
さらには、もとより演算命令を数十個程度しか実装せず命令数が少ないことを利点とするRISC命令セットアーキテクチャにおいて、SIMD演算命令を実装する場合に極めて大きな問題となる。
そこで、本発明は、命令数の増加を抑えつつSIMD演算を実装することができる演算方法、演算装置、当該演算装置用にプログラムを変換するプログラム変換装置、当該演算装置用のプログラムを生成するコンパイル装置、プログラム変換方法、コンパイル方法、プログラム変換プログラム、コンパイルプログラム、演算プログラム、及び、演算プログラムを記録した記録媒体を提供することを目的とする。
【0007】
【課題を解決するための手段】
上記目的を達成するために、本発明に係る演算方法は、Nを2以上の整数としMを1以上の整数とする時、MビットのオペランドN個に対して並列に演算を施してMビットの演算結果をN個得る処理をコンピュータに実行させる演算方法であって、前記MビットのオペランドN個を連結したN×Mビットを1個の仮オペランドとして前記演算を施すことによってN×Mビットの仮演算結果を1個得ると共に当該仮演算結果のMビット毎の前記演算によって及ぼされる各隣接桁からの影響に基づいて補正情報を生成する演算ステップと、前記Mビットの演算結果をN個得る場合に前記仮演算結果をMビット単位で前記補正情報を用いて補正する補正ステップとを備えることを特徴とする。
【0008】
これによって、N個のMビットオペランドをまとめて演算して、補正情報を用いて補正することによってN個のMビット演算結果を得ることができ、膨大な量のデータに同じ演算を施す場合に時間を大幅に短縮できる。
また、当該演算方法を用いるプロセッサにおいては、演算用の命令は既存演算とSIMD演算とで共有でき、補正用の命令は演算の種類に依存しないので、命令数が演算の種類毎に増えないため、従来のSIMD演算命令を実装する場合に較べて、機械語命令のビット割付を圧迫したり、命令デコーダ回路が大規模化してコスト及び消費電力の増加を招くことが少ない。
【0009】
従って、命令数の増加を抑えつつSIMD演算を実装することができる。
また、本発明に係る演算装置において、前記演算には複数の種類があり、前記演算ステップは、さらに、前記演算の種類を保持し、前記補正ステップは、前記仮演算結果を前記演算ステップにおいて保持された演算の種類に応じて補正することを特徴とすることもできる。
【0010】
これによって、演算の際に演算の種類を保持し、仮演算結果を、保持した演算の種類に応じて補正することができるので、演算の種類を考慮せずに補正情報を生成することができる。
上記目的を達成するために、本発明に係る演算方法は、Nを2以上の整数とする時、N個のオペランドに対して並列に演算を施してN個の演算結果を得る処理をコンピュータに実行させる演算方法であって、前記N個のオペランドを連結して1個の仮オペランドとして前記演算を施すことによって前記演算結果のN倍の大きさの仮演算結果を1個得ると共に当該仮演算結果と前記N個の演算結果を連結した1個の仮演算結果との差分に相当する補正情報を生成する演算ステップと、前記N個の演算結果を得る場合に前記仮演算結果を前記補正情報を用いて補正しN個に分割する補正ステップとを備えることを特徴とする。
【0011】
これによって、N個のオペランドをまとめて演算して、補正情報を用いて補正することによってN個の演算結果を得ることができ、膨大な量のデータに同じ演算を施す場合に時間を大幅に短縮できる。
また、当該演算方法を用いるプロセッサにおいては、演算用の命令は既存演算とSIMD演算とで共有でき、補正用の命令は演算の種類に依存しないので、命令数が演算の種類毎に増えないため、従来のSIMD演算命令を実装する場合に較べて、機械語命令のビット割付を圧迫したり、命令デコーダ回路が大規模化してコスト及び消費電力の増加を招くことが少ない。
【0012】
従って、命令数の増加を抑えつつSIMD演算を実装することができる。
上記目的を達成するために、本発明に係る演算装置は、所定ビット長の第1ビット長オペランド1個に演算を施す既存演算と前記所定ビット長よりも短い第2ビット長オペランドの複数に対して並列に前記演算を施すSIMD(Single Instruction Multiple Data)演算とを実行する演算装置であって、前記1個の第1ビット長オペランドに、又は、前記複数の第2ビット長オペランドを連結して1個の第1ビット長オペランドと見なして、前記演算を施すことを指示する演算命令と、前記演算命令による演算結果を前記SIMD演算の演算結果に補正することを指示するSIMD補正命令とを実装することを特徴とする。
【0013】
これによって、当該演算装置は、1個の長オペランド、又は、複数の短オペランドを1個の長オペランドと見なして演算する演算命令と、演算結果をSIMD演算の演算結果に補正するSIMD補正命令とを実装することができる。
また、演算命令は既存演算とSIMD演算とで共有でき、SIMD補正命令は演算の種類に依存しないので、命令数が演算の種類毎に増えないため、従来のSIMD演算命令を実装する場合に較べて、機械語命令のビット割付を圧迫したり、命令デコーダ回路が大規模化してコスト及び消費電力の増加を招くことが少ない。
【0014】
従って、命令数の増加を抑えつつSIMD演算を実装することができる。
また、本発明に係る演算装置において、Nを2以上の整数としMを1以上の整数とする時、N×Mビットの第1ビット長オペランド1個に前記演算を施してN×Mビットの第1ビット長演算結果を1個得る既存演算とMビットの第2ビット長オペランドN個に対して並列に前記演算を施してMビットの第2ビット長演算結果をN個得るN並列SIMD演算とを実行するものであり、前記第1ビット長演算結果、及び、前記補正に用いられる補正情報を保持する保持手段と、前記演算命令、及び、N並列SIMD補正命令を解読する解読手段と、前記演算命令が解読された場合に前記1個の第1ビット長オペランドに、又は、前記N個の前記第2ビット長オペランドを連結して1個の第1ビット長オペランドと見なして、前記演算を施すことによってN×Mビットの第1ビット長演算結果を1個得てこれを前記保持手段に保持すると共に当該第1ビット長演算結果のMビット毎の前記演算によって及ぼされる各隣接桁からの影響に基づいて前記補正情報を生成してこれを前記保持手段に保持し、前記N並列SIMD補正命令が解読された場合に前記保持手段に保持された第1ビット長演算結果をMビット単位で前記保持手段に保持された補正情報を用いて補正することによって前記第2ビット長演算結果をN個得る実行手段とを備えることを特徴とすることもできる。
【0015】
これによって、N個のMビットオペランドをまとめて演算して、補正情報を用いて補正することによってN個のMビット演算結果を得ることができ、膨大な量のデータに同じ演算を施す場合に時間を大幅に短縮できる。
また、本発明に係る演算装置において、前記演算には複数の種類があり、前記実行手段は、前記演算の種類を前記保持手段に保持し、前記N並列SIMD補正命令が解読された場合に前記保持手段に保持された第1ビット長演算結果を前記保持手段に保持された演算の種類に応じて補正することを特徴とすることもできる。
【0016】
これによって、演算の際に演算の種類を保持し、第1ビット長演算結果を、保持した演算の種類に応じて補正することができるので、演算の種類を考慮せずに補正情報を生成することができる。
また、本発明に係る演算装置において、Nを2以上の整数とする時、1個の第1ビット長オペランドに前記演算を施して1個の第1ビット長演算結果を得る既存演算とN個の第2ビット長オペランドに対して並列に前記演算を施してN個の第2ビット長演算結果を得るN並列SIMD演算とを実行するものであり、前記長演算結果、及び、前記補正に用いられる補正情報を保持する保持手段と、前記演算命令、及び、前記N並列SIMD補正命令を解読する解読手段と、前記演算命令が解読された場合に前記1個の第1ビット長オペランドに、又は、前記N個の第2ビット長オペランドを連結した1個を第1ビット長オペランドと見なして、前記演算を施すことによって第1ビット長演算結果を得てこれを前記保持手段に保持すると共に当該第1ビット長演算結果と前記N個の第2ビット長演算結果を連結した1個の第1ビット長演算結果との差分に相当する前記補正情報を生成してこれを前記保持手段に保持し、前記N並列SIMD補正命令が解読された場合に前記保持手段に保持された第1ビット長演算結果を前記保持手段に保持された補正情報を用いて補正することによって前記N並列SIMD演算の第2ビット長演算結果をN個得る実行手段とを備えることを特徴とすることもできる。
【0017】
これによって、N個のオペランドをまとめて演算して、補正情報を用いて補正することによってN個の演算結果を得ることができ、膨大な量のデータに同じ演算を施す場合に時間を大幅に短縮できる。
上記目的を達成するために、本発明に係るプログラム変換装置は、所定ビット長のオペランドの複数に対して並列に演算を施すSIMD(Single Instruction Multiple Data)演算命令及び他の演算命令からなるプログラムを変換するプログラム変換装置であって、前記プログラム中の演算命令を解析する解析手段と、前記解析手段により前記SIMD演算命令が解析された場合に当該SIMD演算命令を前記所定ビット長のオペランドの複数を連結して1個のオペランドと見なして前記演算を施すことを指示する演算命令、及び、前記演算命令による演算結果を前記SIMD演算命令の演算結果に補正することを指示するSIMD補正命令に変換する変換手段とを備えることを特徴とする。
【0018】
上記目的を達成するために、本発明に係るプログラム変換方法は、所定ビット長のオペランドの複数に対して並列に演算を施すSIMD(Single Instruction Multiple Data)演算命令及び他の演算命令からなるプログラムを変換するプログラム変換方法であって、前記プログラム中の演算命令を解析する解析ステップと、前記解析ステップにより前記SIMD演算命令が解析された場合に当該SIMD演算命令を前記所定ビット長のオペランドの複数を連結して1個のオペランドと見なして前記演算を施すことを指示する演算命令、及び、前記演算命令による演算結果を前記SIMD演算命令の演算結果に補正することを指示するSIMD補正命令に変換する変換ステップとを含むことを特徴とする。
【0019】
上記目的を達成するために、本発明に係るプログラム変換プログラムは、所定ビット長のオペランドの複数に対して並列に演算を施すSIMD(Single Instruction Multiple Data)演算命令及び他の演算命令からなるプログラムを変換するプログラム変換プログラムであって、コンピュータに、前記プログラム中の演算命令を解析する解析ステップと、前記解析ステップにより前記SIMD演算命令が解析された場合に当該SIMD演算命令を前記所定ビット長のオペランドの複数を連結して1個のオペランドと見なして前記演算を施すことを指示する演算命令、及び、前記演算命令による演算結果を前記SIMD演算命令の演算結果に補正することを指示するSIMD補正命令に変換する変換ステップとを実行させることを特徴とする。
【0020】
これらによって、SIMD演算命令を他の演算命令とSIMD補正命令とに変換することができる。
従って、プロセッサに、演算の種別によらずにデータ幅の種別数によるSIMD補正命令を従来の演算命令に追加して実装させるだけで複数の演算の種別に対するSIMD演算を実行させることができるので、命令数の増加を飛躍的に抑えることができる分だけ命令語長が短くなり、プログラムのコードサイズを縮小することができる。
【0021】
上記目的を達成するために、本発明に係るコンパイル装置は、所定ビット長のオペランドの複数に対して並列に演算を施すSIMD(Single Instruction Multiple Data)演算を演算装置に実行させるべき構文を含む高級言語プログラムを前記演算装置が実行可能な複数の機械語命令からなる機械語プログラムにコンパイルするコンパイル装置であって、前記高級言語プログラムの構文を解析する解析手段と、前記解析手段により解析された構文を機械語命令列に変換することにより機械語プログラムを生成するコンパイル手段とを備え、前記コンパイル手段は、前記解析手段により前記SIMD演算を実行させるべき構文が解析された場合に当該構文を前記所定ビット長のオペランドの複数を連結して1個のオペランドと見なして前記演算を施すことを指示する演算機械語命令、及び、前記演算機械語命令による演算結果を前記SIMD演算の演算結果に補正することを指示するSIMD補正機械語命令を含む機械語命令列に変換することを特徴とする。
【0022】
上記目的を達成するために、本発明に係るコンパイル方法は、所定ビット長のオペランドの複数に対して並列に演算を施すSIMD(Single Instruction Multiple Data)演算を演算装置に実行させるべき構文を含む高級言語プログラムを前記演算装置が実行可能な複数の機械語命令からなる機械語プログラムにコンパイルするコンパイル方法であって、前記高級言語プログラムの構文を解析する解析ステップと、前記解析手段により解析された構文を機械語命令列に変換することにより機械語プログラムを生成するコンパイルステップとを備え、前記コンパイルステップは、前記解析ステップにより前記SIMD演算を実行させるべき構文が解析された場合に当該構文を前記所定ビット長のオペランドの複数を連結して1個のオペランドと見なして前記演算を施すことを指示する演算機械語命令、及び、前記演算機械語命令による演算結果を前記SIMD演算の演算結果に補正することを指示するSIMD補正機械語命令を含む機械語命令列に変換することを特徴とする。
【0023】
上記目的を達成するために、本発明に係るコンパイルプログラムは、所定ビット長のオペランドの複数に対して並列に演算を施すSIMD(Single Instruction Multiple Data)演算を演算装置に実行させるべき構文を含む高級言語プログラムを前記演算装置が実行可能な複数の機械語命令からなる機械語プログラムにコンパイルするコンパイルプログラムであって、コンピュータに、前記高級言語プログラムの構文を解析する解析ステップと、前記解析手段により解析された構文を機械語命令列に変換することにより機械語プログラムを生成するコンパイルステップとを備え、前記コンパイルステップは、前記解析ステップにより前記SIMD演算を実行させるべき構文が解析された場合に当該構文を前記所定ビット長のオペランドの複数を連結して1個のオペランドと見なして前記演算を施すことを指示する演算機械語命令、及び、前記演算機械語命令による演算結果を前記SIMD演算の演算結果に補正することを指示するSIMD補正機械語命令を含む機械語命令列に変換することを実行させることを特徴とする。
【0024】
これらによって、SIMD演算の構文を、演算機械語命令とSIMD補正機械語命令とに変換することができる。
従って、プロセッサに、演算の種別によらずにデータ幅の種別数によるSIMD補正機械語命令を従来の演算機械語命令に追加して実装させるだけで複数の演算の種別に対するSIMD演算を実行させることができるので、命令数の増加を飛躍的に抑えることができる分だけ命令語長が短くなり、プログラムのコードサイズを縮小することができる。
【0025】
上記目的を達成するために、本発明に係る演算プログラムは、Nを2以上の整数としMを1以上の整数とする時、MビットのオペランドN個に対して並列に演算を施してMビットの演算結果をN個得る処理をコンピュータに実行させる演算プログラムであって、コンピュータに、前記MビットのオペランドN個を連結したN×Mビットを1個の仮オペランドとして前記演算を施すことによってN×Mビットの仮演算結果を1個得ると共に当該仮演算結果のMビット毎の前記演算によって及ぼされる各隣接桁からの影響に基づいて補正情報を生成する演算ステップと、前記Mビットの演算結果をN個得る場合に前記仮演算結果をMビット単位で前記補正情報を用いて補正する補正ステップとを実行させることを特徴とする。
【0026】
上記目的を達成するために、本発明に係る演算プログラムを記録したコンピュータ読み取り可能な記録媒体は、Nを2以上の整数としMを1以上の整数とする時、MビットのオペランドN個に対して並列に演算を施してMビットの演算結果をN個得る処理をコンピュータに実行させる演算プログラムを記録したコンピュータ読み取り可能な記録媒体であって、コンピュータに、前記MビットのオペランドN個を連結したN×Mビットを1個の仮オペランドとして前記演算を施すことによってN×Mビットの仮演算結果を1個得ると共に当該仮演算結果のMビット毎の前記演算によって及ぼされる各隣接桁からの影響に基づいて補正情報を生成する演算ステップと、前記Mビットの演算結果をN個得る場合に前記仮演算結果をMビット単位で前記補正情報を用いて補正する補正ステップとを実行させることを特徴とする演算プログラムを記録する。
【0027】
これによって、N個のMビットオペランドをまとめて演算して、補正情報を用いて補正することによってN個のMビット演算結果を得ることができ、膨大な量のデータに同じ演算を施す場合に時間を大幅に短縮できる。
また、当該演算方法を用いるプロセッサにおいては、演算用の命令は既存演算とSIMD演算とで共有でき、補正用の命令は演算の種類に依存しないので、命令数が演算の種類毎に増えないため、従来のSIMD演算命令を実装する場合に較べて、機械語命令のビット割付を圧迫したり、命令デコーダ回路が大規模化してコスト及び消費電力の増加を招くことが少ない。
【0028】
従って、命令数の増加を抑えつつSIMD演算を実装することができる。
上記目的を達成するために、本発明に係る演算プログラムは、Nを2以上の整数とする時、N個のオペランドに対して並列に演算を施してN個の演算結果を得る処理をコンピュータに実行させる演算プログラムであって、コンピュータに、前記N個のオペランドを連結して1個の仮オペランドとして前記演算を施すことによって前記演算結果のN倍の大きさの仮演算結果を1個得ると共に当該仮演算結果と前記N個の演算結果を連結した1個の仮演算結果との差分に相当する補正情報を生成する演算ステップと、前記N個の演算結果を得る場合に前記仮演算結果を前記補正情報を用いて補正しN個に分割する補正ステップとを実行させることを特徴とする。
【0029】
上記目的を達成するために、本発明に係る演算プログラムを記録したコンピュータ読み取り可能な記録媒体は、Nを2以上の整数とする時、N個のオペランドに対して並列に演算を施してN個の演算結果を得る処理をコンピュータに実行させる演算プログラムを記録したコンピュータ読み取り可能な記録媒体であって、コンピュータに、前記N個のオペランドを連結して1個の仮オペランドとして前記演算を施すことによって前記演算結果のN倍の大きさの仮演算結果を1個得ると共に当該仮演算結果と前記N個の演算結果を連結した1個の仮演算結果との差分に相当する補正情報を生成する演算ステップと、前記N個の演算結果を得る場合に前記仮演算結果を前記補正情報を用いて補正しN個に分割する補正ステップとを実行させることを特徴とする演算プログラムを記録する。
【0030】
これによって、N個のオペランドをまとめて演算して、補正情報を用いて補正することによってN個の演算結果を得ることができ、膨大な量のデータに同じ演算を施す場合に時間を大幅に短縮できる。
また、当該演算方法を用いるプロセッサにおいては、演算用の命令は既存演算とSIMD演算とで共有でき、補正用の命令は演算の種類に依存しないので、命令数が演算の種類毎に増えないため、従来のSIMD演算命令を実装する場合に較べて、機械語命令のビット割付を圧迫したり、命令デコーダ回路が大規模化してコスト及び消費電力の増加を招くことが少ない。
【0031】
従って、命令数の増加を抑えつつSIMD演算を実装することができる。
上記目的を達成するために、本発明に係る演算プログラムは、コンピュータに所定ビット長の第1ビット長オペランド1個に演算を施す既存演算と前記所定ビット長よりも短い第2ビット長オペランドの複数に対して並列に前記演算を施すSIMD(Single Instruction Multiple Data)演算とを実行させる演算プログラムであって、前記1個の第1ビット長オペランドに、又は、前記複数の第2ビット長オペランドを連結して1個の第1ビット長オペランドと見なして、前記演算を施すことをコンピュータに指示する演算命令と、前記演算命令による演算結果を前記SIMD演算の演算結果に補正することをコンピュータに指示するSIMD補正命令とを含むことを特徴とする。
【0032】
上記目的を達成するために、本発明に係る演算プログラムを記録したコンピュータ読み取り可能な記録媒体は、コンピュータに所定ビット長の第1ビット長オペランド1個に演算を施す既存演算と前記所定ビット長よりも短い第2ビット長オペランドの複数に対して並列に前記演算を施すSIMD(Single Instruction Multiple Data)演算とを実行させる演算プログラムを記録したコンピュータ読み取り可能な記録媒体であって、前記1個の第1ビット長オペランドに、又は、前記複数の第2ビット長オペランドを連結して1個の第1ビット長オペランドと見なして、前記演算を施すことをコンピュータに指示する演算命令と、前記演算命令による演算結果を前記SIMD演算の演算結果に補正することをコンピュータに指示するSIMD補正命令とを含むことを特徴とする演算プログラムを記録する。
【0033】
これによって、当該演算装置は、1個の長オペランド、又は、複数の短オペランドを1個の長オペランドと見なして演算する演算命令と、演算結果をSIMD演算の演算結果に補正するSIMD補正命令とを実装することができる。
また、演算命令は既存演算とSIMD演算とで共有でき、SIMD補正命令は演算の種類に依存しないので、命令数が演算の種類毎に増えないため、従来のSIMD演算命令を実装する場合に較べて、機械語命令のビット割付を圧迫したり、命令デコーダ回路が大規模化してコスト及び消費電力の増加を招くことが少ない。
【0034】
従って、命令数の増加を抑えつつSIMD演算を実装することができる。
【0035】
【発明の実施の形態】
(実施の形態1)
<概要>
本発明の実施の形態1は、SIMD演算命令を、非並列演算用の演算命令と、非並列演算用の演算命令の演算結果からSIMD演算命令の演算結果へ補正する補正命令とで実現するものである。
【0036】
本発明の実施の形態1のプロセッサは、非並列演算用の演算命令の実行時に、演算結果と共に、並列演算の対象とするデータサイズの最小単位毎に桁上げの結果を保持しておき、続いて補正命令の実行時に、演算結果に対して、保持しておいた桁上げの結果に基づいて必要な桁位置のみを補正することによりSIMD演算命令の演算結果を得る。
【0037】
ここで非並列演算用の演算命令は、SIMD演算命令とは無関係に実装されるものなので、この演算命令による命令数の増加はない。
また補正命令は、並列演算の対象とするデータサイズのパターン数分だけ用意すればよいので、演算の種別数との積とはならず命令数が飛躍的に増えることがない。
【0038】
<構成>
図1は、本実施の形態1に係るSIMD演算装置の構成を示す図である。
図1に示すSIMD演算装置10は、命令フェッチステージ(以下、「IFステージ」と記す)、解読およびレジスタ読出しステージ(以下、「DECステージ」と記す)、及び、実行ステージ(以下、「EXステージ」と記す)の3つのステージからなる3段パイプライン構造を成し、ROM1、IR2、DEC3、レジスタファイル4、EXT5、AR6、BR7、ALU8、及び、CR9を備える。
【0039】
ROM1は記録媒体であり、機械語命令プログラムを格納する。
IR2は命令レジスタであり、ROM1からフェッチされた機械語命令を保持する。
DEC3は命令解読器であり、IR2に保持された機械語命令を解読してSIMD演算装置内の各部を制御する。
【0040】
ここではDEC3は、ニ数加算命令“ADD D0,D1”、ニ数減算命令“SUB D0,D1”、1加算命令“INC D1”、1減算命令“DEC D1”、8ビットSIMD補正命令“SIMD8 D1”、16ビットSIMD補正命令“SIMD16 D1”、及び、32ビットSIMD補正命令“SIMD32 D1”を解読する。
レジスタファイル4は複数のレジスタの集合であり、それぞれ64ビット幅のD0レジスタからD15レジスタまでの16本のレジスタを内部に持つ。
【0041】
EXT5は拡張器であり、16ビットSIMD補正命令がIR2により解読された結果としてCR9に格納された8つの8ビットデータのうちの4つを16ビットデータに符号拡張する16ビット符号拡張と、32ビットSIMD補正命令がIR2により解読された結果としてCR9に格納された8つの8ビットデータのうちの2つを32ビットデータに符号拡張する32ビット符号拡張を実施し、8ビットSIMD補正命令“SIMD8 D1”がIR2により解読された場合にはCR9に格納された8つの8ビットデータに対する符号拡張は行わずにBR7に格納する。
【0042】
例えば、“0x??00??01??02??03”を16ビット符号拡張すると“0x0000000100020003”になり、“0x??FF??FE??FD??FC”を16ビット符号拡張すると“0xFFFFFFFEFFFDFFFC”になり、また、“0x??????01??????02”を32ビット符号拡張すると“0x0000000100000002”になり、“0x??????FF??????FE”を32ビット符号拡張すると“0xFFFFFFFFFFFFFFFE”になる。
【0043】
なお、“0x”は値が16進数表示であることを意味し、“?”はここが何であっても結果が同じであることを意味する。
AR6は64ビット幅のレジスタであり、レジスタファイル4からの出力を保持する。
ここではAR6は、ニ数加算命令“ADD D0,D1”、ニ数減算命令“SUB D0,D1”、1加算命令“INC D1”、1減算命令“DEC D1”、8ビットSIMD補正命令“SIMD8 D1”、16ビットSIMD補正命令“SIMD16 D1”、及び、32ビットSIMD補正命令“SIMD32 D1”の場合に、D1レジスタからの出力を保持する。
【0044】
BR7は64ビット幅のレジスタであり、レジスタファイル4からの出力、“0x0000000000000001”、又は、EXT5の出力を機械語命令に応じて選択して保持する。
ここではBR7は、ニ数加算命令“ADD D0,D1”及びニ数減算命令“SUB D0,D1”を実行する場合にはD0レジスタからの出力を、1加算命令“INC D1”及び1減算命令“DEC D1”を実行する場合には“0x0000000000000001”を、8ビットSIMD補正命令“SIMD8 D1”、16ビットSIMD補正命令“SIMD16 D1”及び32ビットSIMD補正命令“SIMD32 D1”を実行する場合にはEXT5の出力を選択して保持する。
【0045】
ALU8は64ビット幅の加減算器であり、AR6の内容とBR7の内容とをそれぞれA入力とB入力として、演算命令実行時にはA+Bの加算又はA−Bの減算を行い演算結果をレジスタに保持させると共に、並列演算の対象とするデータサイズの最小単位である8ビット毎の桁上げの結果を示す桁上げ情報を生成してCR9に保持させ、また、SIMD補正命令実行時には他のSIMD演算結果に影響を及ばさないようにA−Bの減算を行い当該演算結果を各SIMD演算結果に補正する。
【0046】
ここではALU8は、ニ数加算命令“ADD D0,D1”及び1加算命令“INC D1”を実行する場合にはA+Bの加算を行い演算結果を得てD1レジスタに保持させると共に、ニ数加算命令では8ビット毎に桁上げが無い場合は0を示し桁上げが有る場合は1を示す桁上げ情報を生成し、1加算命令では8ビット毎に桁上げが無い場合は−1を示し桁上げが有る場合は0を示す桁上げ情報を生成し、また、ニ数減算命令“SUB D0,D1”及び1減算命令“DEC D1”を実行する場合にはA−Bの減算を行い演算結果を得ると共に、ニ数減算命令では8ビット毎に桁上げが無い場合は−1を示し桁上げが有る場合は0を示す桁上げ情報を生成し、1減算命令では8ビット毎に桁上げが無い場合は0を示し桁上げが有る場合は1を示す桁上げ情報を生成する。さらにALU8は、8ビットSIMD補正命令“SIMD8 D1”、16ビットSIMD補正命令“SIMD16 D1”及び32ビットSIMD補正命令“SIMD32 D1”を実行する場合には、対応するビット数毎に他に影響を及ばさないようにA−Bの減算を行い、D1レジスタに保持していた演算結果を各SIMD演算結果に補正してD1レジスタに保持させる。
【0047】
CR9は、桁上げ情報を保持する64ビット幅のレジスタである。
ここで、機械語命令をROM1からフェッチし命令レジスタ2へ書込む処理はIFステージで行われ、DEC3における機械語命令の解読とEXT5符号拡張とレジスタファイル4又はEXT5からの出力とはDECステージで行われ、ALU8における演算とCR9への桁上げ情報の保持はEXステージで行われる。
【0048】
<動作>
図2(a)〜(d)は、CR9に保持される桁上げ情報のビット構成の一例を示す図である。
図2の各図において、横軸方向に付された“63,56,55,48,47,40,39,32,31,24,23,16,15,8,7,0”の数字はビット位置を表し、ビット位置0はLSB(最下位ビット)を、ビット位置63はMSB(最上位ビット)を意味する。
【0049】
図2(a)はニ数加算演算命令(ADD命令)を実行した時の桁上げ情報を示し、演算結果におけるビット位置7からの桁上げを桁上げ情報のビット位置8に記録し(図中のC7)、演算結果におけるビット位置15からの桁上げを桁上げ情報のビット位置16に記録し(図中のC15)、演算結果におけるビット位置23からの桁上げを桁上げ情報のビット位置24に記録し(図中のC23)、演算結果におけるビット位置31からの桁上げを桁上げ情報のビット位置32に記録し(図中のC31)、演算結果におけるビット位置39からの桁上げを桁上げ情報のビット位置40に記録し(図中のC39)、演算結果におけるビット位置47からの桁上げを桁上げ情報のビット位置48に記録し(図中のC47)、演算結果におけるビット位置55からの桁上げを桁上げ情報のビット位置56に記録し(図中のC55)、桁上げ情報のその他のビット位置に値0を記録する。
【0050】
図2(b)はニ数減算演算命令(SUB命令)を実行した時の桁上げ情報を示し、演算結果におけるビット位置7からの桁上げがないときは値0の反転値FFを、有るときは値0を桁上げ情報のビット位置8から15に記録し(図中の上線を施したC7)、演算結果におけるビット位置15からの桁上げがないときは値0の反転値FFを、有るときは値0を桁上げ情報のビット位置16から23に記録し(図中の上線を施したC15)、演算結果におけるビット位置23からの桁上げがないときは値0の反転値FFを、有るときは値0を桁上げ情報のビット位置24から31に記録し(図中の上線を施したC23)、演算結果におけるビット位置31からの桁上げがないときは値0の反転値FFを、有るときは値0を桁上げ情報のビット位置32から39に記録し(図中の上線を施したC31)、演算結果におけるビット位置39からの桁上げがないときは値0の反転値FFを、有るときは値0を桁上げ情報のビット位置40から47に記録し(図中の上線を施したC39)、演算結果におけるビット位置47からの桁上げがないときは値0の反転値FFを、有るときは値0を桁上げ情報のビット位置48から55に記録し(図中の上線を施したC47)、演算結果におけるビット位置55からの桁上げがないときは値0の反転値FFを、有るときは値0を桁上げ情報のビット位置56から63に記録し(図中の上線を施したC55)、ビット位置0から7に値0を記録する。
【0051】
図2(c)は1加算演算命令(INC命令)を実行した時の桁上げ情報を示し、図2(b)の場合と同様である。
図2(d)は1減算演算命令(DEC命令)を実行した時の桁上げ情報を示し、図2(a)の場合と同様である。
なお、SUB命令およびDEC命令の実行時における桁上げとは、ALU8においてA−Bの減算をA+(Bのビット反転)+1で実現した場合の桁上げ(キャリ)を意味し、減算時のいわゆる桁下がり(ボロー)ではない。また、ここで反転とは値0を値1に、値1を値0にすることを意味する。
【0052】
以下にSIMD演算装置の動作例を、マシンサイクルと呼ばれる動作タイミングに沿って、3つのステージ別に説明する。
<動作例1>
8ビットデータ同士を8個並列にニ数加算する8×8SIMDニ数加算演算の場合の動作例を説明する。
【0053】
加算すべき一方の8ビットデータのそれぞれを8個連結した64ビットデータをD0レジスタに格納し、同様に、加算すべきもう一方の8ビットデータのそれぞれを8個連結した64ビットデータをD1レジスタに格納している場合には、8×8SIMDニ数加算演算は以下の2つの命令を実行することにより実現される。
ADD D0,D1
SIMD8 D1
ここで、加算すべき一方の8ビットデータのそれぞれを“0x12”、“0x34”、“0x56”、“0x78”、“0x9A”、“0xBC”、“0xDE”、“0xF0”とし、加算すべきもう一方の8ビットデータを全て“0x80”とすると、D0レジスタには“0x123456789ABCDEF0”、D1レジスタには“0x8080808080808080”が予め格納されていることになる。
【0054】
図3(a)は8×8SIMDニ数加算演算時の各レジスタの内容を示す図である。(1)動作タイミング1
・EXステージ、
関知しない。
・DECステージ、
関知しない。
・IFステージ:ADD命令、
ニ数加算命令“ADD D0,D1”がROM1からフェッチされ、IR2に格納される。
(2)動作タイミング2
・EXステージ、
関知しない。
・DECステージ:ADD命令、
IR2に格納されたニ数加算命令“ADD D0,D1”がDEC3により解読される。解読された結果として64ビットデータのニ数加算操作を実行すべきであることが判明する。この解読に基づいてDOレジスタの内容“0x123456789ABCDEF0”が読み出されBR7に格納され、またD1レジスタの内容“0x8080808080808080”が読み出されAR6に格納される。
・IFステージ:SIMD命令、
SIMD補正命令“SIMD8 D1”がROM1からフェッチされ、IR2に格納される。
(3)動作タイミング3
・EXステージ:ADD命令、
動作タイミング2においてDEC3により解読された結果に基づき、ALU8において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とを加算する64ビット桁上げ伝播加算が行われ、演算結果“0x92B4D6F91B3D5F70”がレジスタファイル4のD1レジスタに格納され、また、8ビット毎の桁上げが、C7=1, C15=1, C23=1, C31=1, C39=0, C47=0, C55=0であることから図3(a)に示すような桁上げ情報“0x0000000101010100”がCR9に格納される。
【0055】
Figure 0003779602
・DECステージ:SIMD命令、IR2に格納されたSIMD補正命令“SIMD8 D1”がDEC3により解読される。解読された結果として8ビットデータの8並列のSIMD補正操作を実行すべきであることが判明する。この解読に基づいて、EXステージで書込まれるD1レジスタの内容“0x92B4D6F91B3D5F70”が読み出されてAR6に格納され、またEXステージで書込まれるCR9の内容“0x0000000101010100”が読み出され、EXT5による符号拡張は行われずにBR7に格納される。
・IFステージ、
関知しない。
(4)動作タイミング4
・EXステージ:SIMD命令、
動作タイミング3においてDEC3により解読された結果に基づき、ALU8において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とに対して8ビット単位にのみ桁上げが伝播する減算演算を行い、演算結果“0x92B4D6F81A3C5E70”をD1レジスタに格納する。
【0056】
Figure 0003779602
この演算結果は、D0レジスタとD1レジスタとに予め格納されていた内容をそれぞれ8ビットデータ8個とし、対応する8ビットデータ同志をニ数加算するSIMD演算結果となる。
【0057】
以下に、上記SIMD演算結果を示す。
Figure 0003779602
・DECステージ、
関知しない。
・IFステージ、
関知しない。
【0058】
<動作例2>
16ビットデータ同士を4個並列にニ数加算する16×4SIMDニ数加算演算の場合の動作例を説明する。
加算すべき一方の16ビットデータのそれぞれを4個連結した64ビットデータをD0レジスタに格納し、同様に、加算すべきもう一方の16ビットデータのそれぞれを4個連結した64ビットデータをD1レジスタに格納している場合には、16×4SIMDニ数加算演算は以下の2つの命令を実行することにより実現される。
【0059】
ADD D0,D1
SIMD16 D1
ここで、加算すべき一方の16ビットデータのそれぞれを“0x1234”、“0x5678”、“0x9ABC”、“0xDEF0”とし、加算すべきもう一方の16ビットデータを全て“0x8080”とすると、D0レジスタには“0x123456789ABCDEF0”、D1レジスタには“0x8080808080808080”が予め格納されていることになる。
【0060】
図3(b)は16×4SIMDニ数加算演算時の各レジスタの内容を示す図である。
(1)動作タイミング1
・EXステージ、
関知しない。
・DECステージ、
関知しない。
・IFステージ:ADD命令、
ニ数加算命令“ADD D0,D1”がROM1からフェッチされ、IR2に格納される。
(2)動作タイミング2
・EXステージ、
関知しない。
・DECステージ:ADD命令、
IR2に格納されたニ数加算命令“ADD D0,D1”がDEC3により解読される。解読された結果として64ビットデータのニ数加算操作を実行すべきであることが判明する。この解読に基づいてDOレジスタの内容“0x123456789ABCDEF0”が読み出されBR7に格納され、またD1レジスタの内容“0x8080808080808080”が読み出されAR6に格納される。
・IFステージ:SIMD命令、
SIMD補正命令“SIMD16 D1”がROM1からフェッチされ、IR2に格納される。
(3)動作タイミング3
・EXステージ:ADD命令、
動作タイミング2においてDEC3により解読された結果に基づき、ALU8において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とを加算する64ビット桁上げ伝播加算が行われ、演算結果“0x92B4D6F91B3D5F70”がレジスタファイル4のD1レジスタに格納され、また、8ビット毎の桁上げが、C7=1, C15=1, C23=1, C31=1, C39=0, C47=0, C55=0であることから図3(b)に示すような桁上げ情報“0x0000000101010100”がCR9に格納される。
【0061】
Figure 0003779602
・DECステージ:SIMD命令、
IR2に格納されたSIMD補正命令“SIMD16 D1”がDEC3により解読される。解読された結果として16ビットデータの4並列のSIMD補正操作を実行すべきであることが判明する。この解読に基づいて、EXステージで書込まれるD1レジスタの内容“0x92B4D6F91B3D5F70”が読み出されてAR6に格納され、またEXステージで書込まれるCR9の内容“0x0000000101010100”が読み出され、EXT5による16ビット符号拡張が行われて“0x0000000100010000”となりBR7に格納される。
・IFステージ、
関知しない。
(4)動作タイミング4
・EXステージ:SIMD命令、
動作タイミング3においてDEC3により解読された結果に基づき、ALU8において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とに対して16ビット単位にのみ桁上げが伝播する減算演算を行い、演算結果“0x92B4D6F81B3C5F70”をD1レジスタに格納する。
【0062】
Figure 0003779602
この演算結果は、D0レジスタとD1レジスタとに予め格納されていた内容をそれぞれ16ビットデータ4個とし、対応する16ビットデータ同志をニ数加算するSIMD演算結果となる。
【0063】
以下に、上記SIMD演算結果を示す。
Figure 0003779602
・DECステージ、
関知しない。
・IFステージ、
関知しない。
【0064】
<動作例3>
32ビットデータ同士を2個並列にニ数加算する32×2SIMDニ数加算演算の場合の動作例を説明する。
加算すべき一方の32ビットデータのそれぞれを2個連結した64ビットデータをD0レジスタに格納し、同様に、加算すべきもう一方の32ビットデータのそれぞれを2個連結した64ビットデータをD1レジスタに格納している場合には、32×2SIMDニ数加算演算は以下の2つの命令を実行することにより実現される。
【0065】
ADD D0,D1
SIMD32 D1
ここで、加算すべき一方の32ビットデータのそれぞれを“0x12345678”、“0x9ABCDEF0”とし、加算すべきもう一方の32ビットデータを全て“0x80808080”とすると、D0レジスタには“0x123456789ABCDEF0”、D1レジスタには“0x8080808080808080”が予め格納されていることになる。
【0066】
図3(c)は32×2SIMDニ数加算演算時の各レジスタの内容を示す図である。
(1)動作タイミング1
・EXステージ、
関知しない。
・DECステージ、
関知しない。
・IFステージ:ADD命令、
ニ数加算命令“ADD D0,D1”がROM1からフェッチされ、IR2に格納される。
(2)動作タイミング2
・EXステージ、
関知しない。
・DECステージ:ADD命令、
IR2に格納されたニ数加算命令“ADD D0,D1”がDEC3により解読される。解読された結果として64ビットデータの加算操作を実行すべきであることが判明する。この解読に基づいてDOレジスタの内容“0x123456789ABCDEF0”が読み出されBR7に格納され、またD1レジスタの内容“0x8080808080808080”が読み出されAR6に格納される。
・IFステージ:SIMD命令、
SIMD補正命令“SIMD32 D1”がROM1からフェッチされ、IR2に格納される。
(3)動作タイミング3
・EXステージ:ADD命令、
動作タイミング2においてDEC3により解読された結果に基づき、ALU8において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とを加算する64ビット桁上げ伝播加算が行われ、演算結果“0x92B4D6F91B3D5F70”がレジスタファイル4のD1レジスタに格納され、また、8ビット毎の桁上げが、C7=1, C15=1, C23=1, C31=1, C39=0, C47=0, C55=0であることから図3(c)に示すような桁上げ情報“0x0000000101010100”がCR9に格納される。
【0067】
Figure 0003779602
・DECステージ:SIMD命令、
IR2に格納されたSIMD補正命令“SIMD32 D1”がDEC3により解読される。解読された結果として32ビットデータの2並列のSIMD補正操作を実行すべきであることが判明する。この解読に基づいて、EXステージで書込まれるD1レジスタの内容“0x92B4D6F91B3D5F70”が読み出されてAR6に格納され、またEXステージで書込まれるCR9の内容“0x0000000101010100”が読み出され、EXT5による32ビット符号拡張が行われて“0x0000000100000000”となりBR7に格納される。
・IFステージ、
関知しない。
(4)動作タイミング4
・EXステージ:SIMD命令、
動作タイミング3においてDEC3により解読された結果に基づき、ALU8において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とに対して32ビット単位にのみ桁上げが伝播する減算演算を行い、演算結果“0x92B4D6F81B3D5F70”をD1レジスタに格納する。
【0068】
Figure 0003779602
この演算結果は、D0レジスタとD1レジスタとに予め格納されていた内容をそれぞれ32ビットデータ2個とし、対応する32ビットデータ同志をニ数加算するSIMD演算結果となる。
【0069】
以下に、上記SIMD演算結果を示す。
Figure 0003779602
・DECステージ、
関知しない。
・IFステージ、
関知しない。
【0070】
<動作例4>
8ビットデータから8ビットデータを8個並列にニ数減算する8×8SIMDニ数減算演算の場合の動作例を説明する。
減算されるべき8ビットデータのそれぞれを8個連結した64ビットデータをD0レジスタに格納し、同様に、減算すべき8ビットデータのそれぞれを8個連結した64ビットデータをD1レジスタに格納している場合には、8×8SIMDニ数減算演算は以下の2つの命令を実行することにより実現される。
【0071】
SUB D0,D1
SIMD8 D1
ここで、減算されるべき8ビットデータのそれぞれを“0x12”、“0x34”、“0x56”、“0x78”、“0x9A”、“0xBC”、“0xDE”、“0xF0”とし、減算すべき8ビットデータを全て“0x70”とすると、D0レジスタには“0x123456789ABCDEF0”、D1レジスタには“0x7070707070707070”が予め格納されていることになる。
【0072】
図4(a)は8×8SIMDニ数減算演算時の各レジスタの内容を示す図である。(1)動作タイミング1
・EXステージ、
関知しない。
・DECステージ、
関知しない。
・IFステージ:SUB命令、
ニ数減算命令“SUB D0,D1”がROM1からフェッチされ、IR2に格納される。
(2)動作タイミング2
・EXステージ、
関知しない。
・DECステージ:SUB命令、
IR2に格納されたニ数減算命令“SUB D0,D1”がDEC3により解読される。解読された結果として64ビットデータのニ数減算操作を実行すべきであることが判明する。この解読に基づいてDOレジスタの内容“0x123456789ABCDEF0”が読み出されBR7に格納され、またD1レジスタの内容“0x7070707070707070”が読み出されAR6に格納される。
・IFステージ:SIMD命令、
SIMD補正命令“SIMD8 D1”がROM1からフェッチされ、IR2に格納される。
(3)動作タイミング3
・EXステージ:SUB命令、
動作タイミング2においてDEC3により解読された結果に基づき、ALU8において、BR7の内容をA入力としAR6の内容をB入力として、A入力からB入力を減算する64ビット桁上げ伝播減算が行われ、演算結果“0xA1C3E6082A4C6E80”がレジスタファイル4のD1レジスタに格納され、また、8ビット毎の桁上げが、C7=1, C15=1, C23=1, C31=1, C39=1, C47=0, C55=0であることから図4(a)に示すような桁上げ情報“0xFFFF000000000000”がCR9に格納される。
【0073】
ここでは、A−Bの減算をA+(Bのビット反転)+1で実現するので、B入力“0x7070707070707070”をビット反転し+1した“0x8F8F8F8F8F8F8F90”(2の補数)をA入力に加算する。
Figure 0003779602
・DECステージ:SIMD命令、
IR2に格納されたSIMD補正命令“SIMD8 D1”がDEC3により解読される。解読された結果として8ビットデータの8並列のSIMD補正操作を実行すべきであることが判明する。この解読に基づいて、EXステージで書込まれるD1レジスタの内容“0xA1C3E6082A4C6E80”が読み出されてAR6に格納され、またEXステージで書込まれるCR9の内容“0xFFFF000000000000”が読み出され、EXT5による符号拡張は行われずにBR7に格納される。
・IFステージ、
関知しない。
(4)動作タイミング4
・EXステージ:SIMD命令、
動作タイミング3においてDEC3により解読された結果に基づき、ALU8において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とに対して8ビット単位にのみ桁上げが伝播する減算演算を行い、演算結果“0xA2C4E6082A4C6E80”をD1レジスタに格納する。
【0074】
Figure 0003779602
この演算結果は、D0レジスタとD1レジスタとに予め格納されていた内容をそれぞれ8ビットデータ8個とし、対応する8ビットデータ同志をニ数減算するSIMD演算結果となる。
【0075】
以下に、上記SIMD演算結果を示す。
Figure 0003779602
・DECステージ、
関知しない。
・IFステージ、
関知しない。
【0076】
<動作例5>
16ビットデータから16ビットデータを4個並列にニ数減算する16×4SIMDニ数減算演算の場合の動作例を説明する。
減算されるべき16ビットデータのそれぞれを4個連結した64ビットデータをD0レジスタに格納し、同様に、減算すべき16ビットデータのそれぞれを4個連結した64ビットデータをD1レジスタに格納している場合には、16×4SIMDニ数減算演算は以下の2つの命令を実行することにより実現される。
【0077】
SUB D0,D1
SIMD16 D1
ここで、減算されるべき16ビットデータのそれぞれを“0x1234”、“0x5678”、“0x9ABC”、“0xDEF0”とし、減算すべき16ビットデータを全て“0x7070”とすると、D0レジスタには“0x123456789ABCDEF0”、D1レジスタには“0x7070707070707070”が予め格納されていることになる。
【0078】
図4(b)は16×4SIMDニ数減算演算時の各レジスタの内容を示す図である。
(1)動作タイミング1
・EXステージ、
関知しない。
・DECステージ、
関知しない。
・IFステージ:SUB命令、
ニ数減算命令“SUB D0,D1”がROM1からフェッチされ、IR2に格納される。
(2)動作タイミング2
・EXステージ、
関知しない。
・DECステージ:SUB命令、
IR2に格納されたニ数減算命令“SUB D0,D1”がDEC3により解読される。解読された結果として64ビットデータのニ数減算操作を実行すべきであることが判明する。この解読に基づいてDOレジスタの内容“0x123456789ABCDEF0”が読み出されBR7に格納され、またD1レジスタの内容“0x7070707070707070”が読み出されAR6に格納される。
・IFステージ:SIMD命令、
SIMD補正命令“SIMD16 D1”がROM1からフェッチされ、IR2に格納される。
(3)動作タイミング3
・EXステージ:SUB命令、
動作タイミング2においてDEC3により解読された結果に基づき、ALU8において、BR7の内容をA入力としAR6の内容をB入力として、A入力からB入力を減算する64ビット桁上げ伝播減算が行われ、演算結果“0xA1C3E6082A4C6E80”がレジスタファイル4のD1レジスタに格納され、また、8ビット毎の桁上げが、C7=1, C15=1, C23=1, C31=1, C39=1, C47=0, C55=0であることから図4(b)に示すような桁上げ情報“0xFFFF000000000000”がCR9に格納される。
【0079】
ここでは、A−Bの減算をA+(Bのビット反転)+1で実現するので、B入力“0x7070707070707070”をビット反転し+1した“0x8F8F8F8F8F8F8F90”(2の補数)をA入力に加算する。
Figure 0003779602
・DECステージ:SIMD命令、
IR2に格納されたSIMD補正命令“SIMD16 D1”がDEC3により解読される。解読された結果として16ビットデータの4並列のSIMD補正操作を実行すべきであることが判明する。この解読に基づいて、EXステージで書込まれるD1レジスタの内容“0xA1C3E6082A4C6E80”が読み出されてAR6に格納され、またEXステージで書込まれるCR9の内容“0xFFFF000000000000”が読み出され、EXT5による16ビット符号拡張が行われて“0xFFFF000000000000”となりBR7に格納される。
・IFステージ、
関知しない。
(4)動作タイミング4
・EXステージ:SIMD命令、
動作タイミング3においてDEC3により解読された結果に基づき、ALU8において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とに対して16ビット単位にのみ桁上げが伝播する減算演算を行い、演算結果“0xA1C4E6082A4C6E80”をD1レジスタに格納する。
【0080】
Figure 0003779602
この演算結果は、D0レジスタとD1レジスタとに予め格納されていた内容をそれぞれ8ビットデータ8個とし、対応する8ビットデータ同志をニ数減算するSIMD演算結果となる。
【0081】
以下に、上記SIMD演算結果を示す。
Figure 0003779602
・DECステージ、
関知しない。
・IFステージ、
関知しない。
【0082】
<動作例6>
32ビットデータから32ビットデータを2個並列にニ数減算する32×2SIMDニ数減算演算の場合の動作例を説明する。
減算されるべき32ビットデータのそれぞれを2個連結した64ビットデータをD0レジスタに格納し、同様に、減算すべき32ビットデータのそれぞれを2個連結した64ビットデータをD1レジスタに格納している場合には、32×2SIMDニ数減算演算は以下の2つの命令を実行することにより実現される。
【0083】
SUB D0,D1
SIMD32 D1
ここで、減算されるべき32ビットデータのそれぞれを“0x12345678”、“0x9ABCDEF0”とし、減算すべき32ビットデータを全て“0x70707070”とすると、D0レジスタには“0x123456789ABCDEF0”、D1レジスタには“0x7070707070707070”が予め格納されていることになる。
【0084】
図4(c)は32×2SIMDニ数減算演算時の各レジスタの内容を示す図である。
(1)動作タイミング1
・EXステージ、
関知しない。
・DECステージ、
関知しない。
・IFステージ:SUB命令、
ニ数減算命令“SUB D0,D1”がROM1からフェッチされ、IR2に格納される。
(2)動作タイミング2
・EXステージ、
関知しない。
・DECステージ:SUB命令、
IR2に格納されたニ数減算命令“SUB D0,D1”がDEC3により解読される。解読された結果として64ビットデータのニ数減算操作を実行すべきであることが判明する。この解読に基づいてDOレジスタの内容“0x123456789ABCDEF0”が読み出されBR7に格納され、またD1レジスタの内容“0x7070707070707070”が読み出されAR6に格納される。
・IFステージ:SIMD命令、
SIMD補正命令“SIMD32 D1”がROM1からフェッチされ、IR2に格納される。
(3)動作タイミング3
・EXステージ:SUB命令、
動作タイミング2においてDEC3により解読された結果に基づき、ALU8において、BR7の内容をA入力としAR6の内容をB入力として、A入力からB入力を減算する64ビット桁上げ伝播減算が行われ、演算結果“0xA1C3E6082A4C6E80”がレジスタファイル4のD1レジスタに格納され、また、8ビット毎の桁上げが、C7=1, C15=1, C23=1, C31=1, C39=1, C47=0, C55=0であることから図4(c)に示すような桁上げ情報“0xFFFF000000000000”がCR9に格納される。
【0085】
ここでは、A−Bの減算をA+(Bのビット反転)+1で実現するので、B入力“0x7070707070707070”をビット反転し+1した“0x8F8F8F8F8F8F8F90”(2の補数)をA入力に加算する。
Figure 0003779602
・DECステージ:SIMD命令、
IR2に格納されたSIMD補正命令“SIMD32 D1”がDEC3により解読される。解読された結果として32ビットデータの2並列のSIMD補正操作を実行すべきであることが判明する。この解読に基づいて、EXステージで書込まれるD1レジスタの内容“0xA1C3E6082A4C6E80”が読み出されてAR6に格納され、またEXステージで書込まれるCR9の内容“0xFFFF000000000000”が読み出され、EXT5による32ビット符号拡張が行われて“0x0000000000000000”となりBR7に格納される。
・IFステージ、
関知しない。
(4)動作タイミング4
・EXステージ:SIMD命令、
動作タイミング3においてDEC3により解読された結果に基づき、ALU8において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とに対して32ビット単位にのみ桁上げが伝播する減算演算を行い、演算結果“0xA1C3E6082A4C6E80”をD1レジスタに格納する。
【0086】
Figure 0003779602
この演算結果は、D0レジスタとD1レジスタとに予め格納されていた内容をそれぞれ8ビットデータ8個とし、対応する8ビットデータ同志をニ数減算するSIMD演算結果となる。
【0087】
以下に、上記SIMD演算結果を示す。
Figure 0003779602
・DECステージ、
関知しない。
・IFステージ、
関知しない。
【0088】
<動作例7>
8ビットデータを8個並列に1加算する8×8SIMD1加算演算の場合の動作例を説明する。
1加算されるべき8ビットデータのそれぞれを8個連結した64ビットデータをD1レジスタに格納している場合には、8×8SIMD1加算演算は以下の2つの命令を実行することにより実現される。
【0089】
INC D1
SIMD8 D1
ここで、1加算されるべき8ビットデータのそれぞれを“0x12”、“0x34”、“0x56”、“0x78”、“0x9A”、“0xBC”、“0xDE”、“0xF0”とすると、D1レジスタには“0x123456789ABCDEF0”が予め格納されていることになる。
【0090】
図5(a)は8×8SIMD1加算演算時の各レジスタの内容を示す図である。
(1)動作タイミング1
・EXステージ、
関知しない。
・DECステージ、
関知しない。
・IFステージ:INC命令、
1加算命令“INC D1”がROM1からフェッチされ、IR2に格納される。
(2)動作タイミング2
・EXステージ、
関知しない。
・DECステージ:INC命令、
IR2に格納された1加算命令“INC D1”がDEC3により解読される。解読された結果として64ビットデータの1加算操作を実行すべきであることが判明する。この解読に基づいてD1レジスタの内容“0x123456789ABCDEF0”が読み出されBR7に格納され、また“0x0000000000000001”がAR6に格納される。
・IFステージ:SIMD命令、
SIMD補正命令“SIMD8 D1”がROM1からフェッチされ、IR2に格納される。
(3)動作タイミング3
・EXステージ:INC命令、
動作タイミング2においてDEC3により解読された結果に基づき、ALU8において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とを加算する64ビット桁上げ伝播加算が行われ、演算結果“0x123456789ABCDEF1”がレジスタファイル4のD1レジスタに格納され、また、8ビット毎の桁上げが、C7=0, C15=0, C23=0, C31=0, C39=0, C47=0, C55=0であることから図5(a)に示すような桁上げ情報“0xFFFFFFFFFFFFFF00”がCR9に格納される。
【0091】
Figure 0003779602
・DECステージ:SIMD命令、
IR2に格納されたSIMD補正命令“SIMD8 D1”がDEC3により解読される。解読された結果として8ビットデータの8並列のSIMD補正操作を実行すべきであることが判明する。この解読に基づいて、EXステージで書込まれるD1レジスタの内容“0x123456789ABCDEF1”が読み出されてAR6に格納され、またEXステージで書込まれるCR9の内容“0xFFFFFFFFFFFFFF00”が読み出され、EXT5による符号拡張は行われずにBR7に格納される。
・IFステージ、
関知しない。
(4)動作タイミング4
・EXステージ:SIMD命令、
動作タイミング3においてDEC3により解読された結果に基づき、ALU8において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とに対して8ビット単位にのみ桁上げが伝播する減算演算を行い、演算結果“0x133557799BBDDFF1”をD1レジスタに格納する。
【0092】
Figure 0003779602
この演算結果は、D0レジスタに予め格納されていた内容を8ビットデータ8個とし、それぞれの8ビットデータを1加算するSIMD演算結果となる。
【0093】
以下に、上記SIMD演算結果を示す。
Figure 0003779602
・DECステージ、
関知しない。
・IFステージ、
関知しない。
【0094】
なお、1加算されるべき8ビットデータのそれぞれを8個連結した64ビットデータをD1レジスタに格納している場合には、8×8SIMD1加算演算は以下の2つの命令を実行することによっても実現される。
MOV 0xFFFFFFFFFFFFFFFF,CR
SIMD8 D1
ここで“MOV 0xFFFFFFFFFFFFFFFF,CR”は、CR9に“0xFFFFFFFFFFFFFFFF”を格納する命令である。
【0095】
<動作例8>
16ビットデータを4個並列に1加算する16×4SIMD1加算演算の場合の動作例を説明する。
1加算されるべき16ビットデータのそれぞれを4個連結した64ビットデータをD1レジスタに格納している場合には、16×4SIMD1加算演算は以下の2つの命令を実行することにより実現される。
【0096】
INC D1
SIMD16 D1
ここで、1加算されるべき16ビットデータのそれぞれを“0x1234”、“0x5678”、“0x9ABC”、“0xDEF0”とすると、D1レジスタには“0x123456789ABCDEF0”が予め格納されていることになる。
【0097】
図5(b)は16×4SIMD1加算演算時の各レジスタの内容を示す図である。(1)動作タイミング1
・EXステージ、
関知しない。
・DECステージ、
関知しない。
・IFステージ:INC命令、
1加算命令“INC D1”がROM1からフェッチされ、IR2に格納される。
(2)動作タイミング2
・EXステージ、
関知しない。
・DECステージ:INC命令、
IR2に格納された1加算命令“INC D1”がDEC3により解読される。解読された結果として64ビットデータの1加算操作を実行すべきであることが判明する。この解読に基づいてD1レジスタの内容“0x123456789ABCDEF0”が読み出されBR7に格納され、また“0x0000000000000001”がAR6に格納される。
・IFステージ:SIMD命令、
SIMD補正命令“SIMD16 D1”がROM1からフェッチされ、IR2に格納される。
(3)動作タイミング3
・EXステージ:INC命令、
動作タイミング2においてDEC3により解読された結果に基づき、ALU8において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とを加算する64ビット桁上げ伝播加算が行われ、演算結果“0x123456789ABCDEF1”がレジスタファイル4のD1レジスタに格納され、また、8ビット毎の桁上げが、C7=0, C15=0, C23=0, C31=0, C39=0, C47=0, C55=0であることから図5(b)に示すような桁上げ情報“0xFFFFFFFFFFFFFF00”がCR9に格納される。
【0098】
Figure 0003779602
・DECステージ:SIMD命令、
IR2に格納されたSIMD補正命令“SIMD16 D1”がDEC3により解読される。解読された結果として16ビットデータの4並列のSIMD補正操作を実行すべきであることが判明する。この解読に基づいて、EXステージで書込まれるD1レジスタの内容“0x123456789ABCDEF1”が読み出されてAR6に格納され、またEXステージで書込まれるCR9の内容“0xFFFFFFFFFFFFFF00”が読み出され、EXT5による16ビット符号拡張が行われて“0xFFFFFFFFFFFF0000”となりBR7に格納される。
・IFステージ、
関知しない。
(4)動作タイミング4
・EXステージ:SIMD命令、
動作タイミング3においてDEC3により解読された結果に基づき、ALU8において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とに対して16ビット単位にのみ桁上げが伝播する減算演算を行い、演算結果“0x123556799ABDDEF1”をD1レジスタに格納する。
【0099】
Figure 0003779602
この演算結果は、D0レジスタに予め格納されていた内容を16ビットデータ4個とし、それぞれの16ビットデータを1加算するSIMD演算結果となる。
【0100】
以下に、上記SIMD演算結果を示す。
Figure 0003779602
・DECステージ、
関知しない。
・IFステージ、
関知しない。
【0101】
なお、1加算されるべき16ビットデータのそれぞれを4個連結した64ビットデータをD1レジスタに格納している場合には、16×4SIMD1加算演算は以下の2つの命令を実行することによっても実現される。
MOV 0xFFFFFFFFFFFFFFFF,CR
SIMD16 D1
ここで“MOV 0xFFFFFFFFFFFFFFFF,CR”は、CR9に“0xFFFFFFFFFFFFFFFF”を格納する命令である。
【0102】
<動作例9>
32ビットデータを2個並列に1加算する32×2SIMD1加算演算の場合の動作例を説明する。
1加算されるべき32ビットデータのそれぞれを2個連結した64ビットデータをD1レジスタに格納している場合には、32×2SIMD1加算演算は以下の2つの命令を実行することにより実現される。
【0103】
INC D1
SIMD32 D1
ここで、1加算されるべき32ビットデータのそれぞれを“0x12345678”、“0x9ABCDEF0”とすると、D1レジスタには“0x123456789ABCDEF0”が予め格納されていることになる。
【0104】
図5(c)は32×2SIMD1加算演算時の各レジスタの内容を示す図である。(1)動作タイミング1
・EXステージ、
関知しない。
・DECステージ、
関知しない。
・IFステージ:INC命令、
1加算命令“INC D1”がROM1からフェッチされ、IR2に格納される。
(2)動作タイミング2
・EXステージ、
関知しない。
・DECステージ:INC命令、
IR2に格納された1加算命令“INC D1”がDEC3により解読される。解読された結果として64ビットデータの1加算操作を実行すべきであることが判明する。この解読に基づいてD1レジスタの内容“0x123456789ABCDEF0”が読み出されBR7に格納され、また“0x0000000000000001”がAR6に格納される。
・IFステージ:SIMD命令、
SIMD補正命令“SIMD16 D1”がROM1からフェッチされ、IR2に格納される。
(3)動作タイミング3
・EXステージ:INC命令、
動作タイミング2においてDEC3により解読された結果に基づき、ALU8において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とを加算する64ビット桁上げ伝播加算が行われ、演算結果“0x123456789ABCDEF1”がレジスタファイル4のD1レジスタに格納され、また、8ビット毎の桁上げが、C7=0, C15=0, C23=0, C31=0, C39=0, C47=0, C55=0であることから図5(c)に示すような桁上げ情報“0xFFFFFFFFFFFFFF00”がCR9に格納される。
【0105】
Figure 0003779602
・DECステージ:SIMD命令、
IR2に格納されたSIMD補正命令“SIMD16 D1”がDEC3により解読される。解読された結果として32ビットデータの2並列のSIMD補正操作を実行すべきであることが判明する。この解読に基づいて、EXステージで書込まれるD1レジスタの内容“0x123456789ABCDEF1”が読み出されてAR6に格納され、またEXステージで書込まれるCR9の内容“0xFFFFFFFFFFFFFF00”が読み出され、EXT5による32ビット符号拡張が行われて“0xFFFFFFFF00000000”となりBR7に格納される。
・IFステージ、
関知しない。
(4)動作タイミング4
・EXステージ:SIMD命令、
動作タイミング3においてDEC3により解読された結果に基づき、ALU8において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とに対して16ビット単位にのみ桁上げが伝播する減算演算を行い、演算結果“0x123456799ABCDEF1”をD1レジスタに格納する。
【0106】
Figure 0003779602
この演算結果は、D0レジスタに予め格納されていた内容を32ビットデータ2個とし、それぞれの32ビットデータを1加算するSIMD演算結果となる。
【0107】
以下に、上記SIMD演算結果を示す。
Figure 0003779602
・DECステージ、
関知しない。
・IFステージ、
関知しない。
【0108】
なお、1加算されるべき32ビットデータのそれぞれを2個連結した64ビットデータをD1レジスタに格納している場合には、32×2SIMD1加算演算は以下の2つの命令を実行することによっても実現される。
MOV 0xFFFFFFFFFFFFFFFF,CR
SIMD32 D1
ここで“MOV 0xFFFFFFFFFFFFFFFF,CR”は、CR9に“0xFFFFFFFFFFFFFFFF”を格納する命令である。
【0109】
<動作例10>
8ビットデータを8個並列に1減算する8×8SIMD1減算演算の場合の動作例を説明する。
1減算されるべき8ビットデータのそれぞれを8個連結した64ビットデータをD1レジスタに格納している場合には、8×8SIMD1減算演算は以下の2つの命令を実行することにより実現される。
【0110】
DEC D1
SIMD8 D1
ここで、1減算されるべき8ビットデータのそれぞれを“0x12”、“0x34”、“0x56”、“0x78”、“0x9A”、“0xBC”、“0xDE”、“0xF0”とすると、D1レジスタには“0x123456789ABCDEF0”が予め格納されていることになる。
【0111】
図6(a)は8×8SIMD1減算演算時の各レジスタの内容を示す図である。
(1)動作タイミング1
・EXステージ、
関知しない。
・DECステージ、
関知しない。
・IFステージ:DEC命令、
1減算命令“DEC D1”がROM1からフェッチされ、IR2に格納される。
(2)動作タイミング2
・EXステージ、
関知しない。
・DECステージ:DEC命令、
IR2に格納された1減算命令“DEC D1”がDEC3により解読される。解読された結果として64ビットデータの1減算操作を実行すべきであることが判明する。この解読に基づいてD1レジスタの内容“0x123456789ABCDEF0”が読み出されBR7に格納され、また“0x0000000000000001”がAR6に格納される。
・IFステージ:SIMD命令、
SIMD補正命令“SIMD8 D1”がROM1からフェッチされ、IR2に格納される。
(3)動作タイミング3
・EXステージ:DEC命令、
動作タイミング2においてDEC3により解読された結果に基づき、ALU8において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とを加算する64ビット桁上げ伝播減算が行われ、演算結果“0x123456789ABCDEEF”がレジスタファイル4のD1レジスタに格納され、また、8ビット毎の桁上げが、C7=1, C15=1, C23=1, C31=1, C39=1, C47=1, C55=1であることから図6(a)に示すような桁上げ情報“0x0101010101010100”がCR9に格納される。
【0112】
ここでは、A−Bの減算をA+(Bのビット反転)+1で実現するので、B入力“0x0000000000000001”をビット反転し+1した“0xFFFFFFFFFFFFFFFF”(2の補数)をA入力に加算する。
Figure 0003779602
・DECステージ:SIMD命令、
IR2に格納されたSIMD補正命令“SIMD8 D1”がDEC3により解読される。解読された結果として8ビットデータの8並列のSIMD補正操作を実行すべきであることが判明する。この解読に基づいて、EXステージで書込まれるD1レジスタの内容“0x123456789ABCDEEF”が読み出されてAR6に格納され、またEXステージで書込まれるCR9の内容“0x0101010101010100”が読み出され、EXT5による符号拡張は行われずにBR7に格納される。
・IFステージ、
関知しない。
(4)動作タイミング4
・EXステージ:SIMD命令、
動作タイミング3においてDEC3により解読された結果に基づき、ALU8において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とに対して8ビット単位にのみ桁上げが伝播する減算演算を行い、演算結果“0x1133557799BBDDEF”をD1レジスタに格納する。
【0113】
Figure 0003779602
この演算結果は、D0レジスタに予め格納されていた内容を8ビットデータ8個とし、それぞれの8ビットデータを1減算するSIMD演算結果となる。
【0114】
以下に、上記SIMD演算結果を示す。
Figure 0003779602
・DECステージ、
関知しない。
・IFステージ、
関知しない。
【0115】
なお、1加算されるべき8ビットデータのそれぞれを8個連結した64ビットデータをD1レジスタに格納している場合には、8×8SIMD1減算演算は以下の2つの命令を実行することによっても実現される。
MOV 0x0101010101010101,CR
SIMD8 D1
ここで“MOV 0x0101010101010101,CR”は、CR9に“0x0101010101010101”を格納する命令である。
【0116】
<動作例11>
16ビットデータを4個並列に1減算する16×4SIMD1減算演算の場合の動作例を説明する。
1減算されるべき16ビットデータのそれぞれを4個連結した64ビットデータをD1レジスタに格納している場合には、16×4SIMD1減算演算は以下の2つの命令を実行することにより実現される。
【0117】
DEC D1
SIMD16 D1
ここで、1減算されるべき16ビットデータのそれぞれを“0x1234”、“0x5678”、“0x9ABC”、“0xDEF0”とすると、D1レジスタには“0x123456789ABCDEF0”が予め格納されていることになる。
【0118】
図6(b)は16×4SIMD1減算演算時の各レジスタの内容を示す図である。(1)動作タイミング1
・EXステージ、
関知しない。
・DECステージ、
関知しない。
・IFステージ:DEC命令、
1減算命令“DEC D1”がROM1からフェッチされ、IR2に格納される。
(2)動作タイミング2
・EXステージ、
関知しない。
・DECステージ:DEC命令、
IR2に格納された1減算命令“DEC D1”がDEC3により解読される。解読された結果として64ビットデータの1減算操作を実行すべきであることが判明する。この解読に基づいてD1レジスタの内容“0x123456789ABCDEF0”が読み出されBR7に格納され、また“0x0000000000000001”がAR6に格納される。
・IFステージ:SIMD命令、
SIMD補正命令“SIMD16 D1”がROM1からフェッチされ、IR2に格納される。
(3)動作タイミング3
・EXステージ:DEC命令、
動作タイミング2においてDEC3により解読された結果に基づき、ALU8において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とを加算する64ビット桁上げ伝播減算が行われ、演算結果“0x123456789ABCDEEF”がレジスタファイル4のD1レジスタに格納され、また、8ビット毎の桁上げが、C7=1, C15=1, C23=1, C31=1, C39=1, C47=1, C55=1であることから図6(b)に示すような桁上げ情報“0x0101010101010100”がCR9に格納される。
【0119】
ここでは、A−Bの減算をA+(Bのビット反転)+1で実現するので、B入力“0x0000000000000001”をビット反転し+1した“0xFFFFFFFFFFFFFFFF”(2の補数)をA入力に加算する。
Figure 0003779602
・DECステージ:SIMD命令、
IR2に格納されたSIMD補正命令“SIMD16 D1”がDEC3により解読される。解読された結果として16ビットデータの4並列のSIMD補正操作を実行すべきであることが判明する。この解読に基づいて、EXステージで書込まれるD1レジスタの内容“0x123456789ABCDEEF”が読み出されてAR6に格納され、またEXステージで書込まれるCR9の内容“0x0101010101010100”が読み出され、EXT5による16ビット符号拡張が行われて“0x0001000100010000”となりBR7に格納される。
・IFステージ、
関知しない。
(4)動作タイミング4
・EXステージ:SIMD命令、
動作タイミング3においてDEC3により解読された結果に基づき、ALU8において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とに対して16ビット単位にのみ桁上げが伝播する減算演算を行い、演算結果“0x123356779ABBDEEF”をD1レジスタに格納する。
【0120】
Figure 0003779602
この演算結果は、D0レジスタに予め格納されていた内容を16ビットデータ4個とし、それぞれの16ビットデータを1減算するSIMD演算結果となる。
【0121】
以下に、上記SIMD演算結果を示す。
Figure 0003779602
・DECステージ、
関知しない。
・IFステージ、
関知しない。
【0122】
なお、1加算されるべき16ビットデータのそれぞれを4個連結した64ビットデータをD1レジスタに格納している場合には、16×4SIMD1減算演算は以下の2つの命令を実行することによっても実現される。
MOV 0x0101010101010101,CR
SIMD16 D1
ここで“MOV 0x0101010101010101,CR”は、CR9に“0x0101010101010101”を格納する命令である。
【0123】
<動作例12>
32ビットデータを2個並列に1減算する32×2SIMD1減算演算の場合の動作例を説明する。
1減算されるべき32ビットデータのそれぞれを2個連結した64ビットデータをD1レジスタに格納している場合には、32×2SIMD1減算演算は以下の2つの命令を実行することにより実現される。
【0124】
DEC D1
SIMD32 D1
ここで、1減算されるべき32ビットデータのそれぞれを“0x12345678”、“0x9ABCDEF0”とすると、D1レジスタには“0x123456789ABCDEF0”が予め格納されていることになる。
【0125】
図6(c)は32×2SIMD1減算演算時の各レジスタの内容を示す図である。(1)動作タイミング1
・EXステージ、
関知しない。
・DECステージ、
関知しない。
・IFステージ:DEC命令、
1減算命令“DEC D1”がROM1からフェッチされ、IR2に格納される。
(2)動作タイミング2
・EXステージ、
関知しない。
・DECステージ:DEC命令、
IR2に格納された1減算命令“DEC D1”がDEC3により解読される。解読された結果として64ビットデータの1減算操作を実行すべきであることが判明する。この解読に基づいてD1レジスタの内容“0x123456789ABCDEF0”が読み出されBR7に格納され、また“0x0000000000000001”がAR6に格納される。
・IFステージ:SIMD命令、
SIMD補正命令“SIMD32 D1”がROM1からフェッチされ、IR2に格納される。
(3)動作タイミング3
・EXステージ:DEC命令、
動作タイミング2においてDEC3により解読された結果に基づき、ALU8において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とを加算する64ビット桁上げ伝播減算が行われ、演算結果“0x123456789ABCDEEF”がレジスタファイル4のD1レジスタに格納され、また、8ビット毎の桁上げが、C7=1, C15=1, C23=1, C31=1, C39=1, C47=1, C55=1であることから図6(c)に示すような桁上げ情報“0x0101010101010100”がCR9に格納される。
【0126】
ここでは、A−Bの減算をA+(Bのビット反転)+1で実現するので、B入力“0x0000000000000001”をビット反転し+1した“0xFFFFFFFFFFFFFFFF”(2の補数)をA入力に加算する。
Figure 0003779602
・DECステージ:SIMD命令、
IR2に格納されたSIMD補正命令“SIMD32 D1”がDEC3により解読される。解読された結果として32ビットデータの2並列のSIMD補正操作を実行すべきであることが判明する。この解読に基づいて、EXステージで書込まれるD1レジスタの内容“0x123456789ABCDEEF”が読み出されてAR6に格納され、またEXステージで書込まれるCR9の内容“0x0101010101010100”が読み出され、EXT5による32ビット符号拡張が行われて“0x0000000100000000”となりBR7に格納される。
・IFステージ、
関知しない。
(4)動作タイミング4
・EXステージ:SIMD命令、
動作タイミング3においてDEC3により解読された結果に基づき、ALU8において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とに対して32ビット単位にのみ桁上げが伝播する減算演算を行い、演算結果“0x123456779ABCDEEF”をD1レジスタに格納する。
【0127】
Figure 0003779602
この演算結果は、D0レジスタに予め格納されていた内容を32ビットデータ2個とし、それぞれの32ビットデータを1減算するSIMD演算結果となる。
【0128】
以下に、上記SIMD演算結果を示す。
Figure 0003779602
・DECステージ、
関知しない。
・IFステージ、
関知しない。
【0129】
なお、1加算されるべき32ビットデータのそれぞれを2個連結した64ビットデータをD1レジスタに格納している場合には、32×2SIMD1減算演算は以下の2つの命令を実行することによっても実現される。
MOV 0x0101010101010101,CR
SIMD32 D1
ここで“MOV 0x0101010101010101,CR”は、CR9に“0x0101010101010101”を格納する命令である。
【0130】
以上のように、本発明の実施の形態1のプロセッサは、演算の種別数によらないSIMD8、SIMD16及びSIMD32というデータ幅の種別数によるSIMD補正命令を従来の命令に追加して実装するだけで複数の演算の種別に対するSIMD演算を実行することができるので、命令数の増加を飛躍的に抑えることができる。
(実施の形態2)
<概要>
上記の実施の形態1では、SIMD補正命令の実行の際に減算による補正を行っているが、本発明の実施の形態2は、加算による補正を行う。
【0131】
以下に、SIMD補正命令の実行の際に加算による補正を行う場合について説明する。
<構成>
図7は、本実施の形態2に係るSIMD演算装置の構成を示す図である。
図7に示すSIMD演算装置20の構成は、実施の形態1で説明したSIMD演算装置10が備えるALU8がALU21に置き換わったものである。なお、SIMD演算装置10と同様の構成要素には同一符号を付し、それらの説明を省略する。
【0132】
ALU21は64ビット幅の加減算器であり、AR6の内容とBR7の内容とをそれぞれA入力とB入力として、演算命令実行時にはA+Bの加算又はA−Bの減算を行い演算結果をレジスタに保持させると共に、並列演算の対象とするデータサイズの最小単位である8ビット毎の桁上げの結果を示す桁上げ情報を生成してCR9に保持させ、また、SIMD補正命令実行時には他のSIMD演算結果に影響を及ばさないようにA+Bの加算を行い当該演算結果を各SIMD演算結果に補正する。
【0133】
ここではALU21は、ニ数加算命令“ADD D0,D1”及び1加算命令“INC D1”を実行する場合にはA+Bの加算を行い演算結果を得てD1レジスタに保持させると共に、ニ数加算命令では8ビット毎に桁上げが無い場合は0を示し桁上げが有る場合は−1を示す桁上げ情報を生成し、1加算命令では8ビット毎に桁上げが無い場合は1を示し桁上げが有る場合は0を示す桁上げ情報を生成し、また、ニ数減算命令“SUB D0,D1”及び1減算命令“DEC D1”を実行する場合にはA−Bの減算を行い演算結果を得ると共に、ニ数減算命令では8ビット毎に桁上げが無い場合は1を示し桁上げが有る場合は0を示す桁上げ情報を生成し、1減算命令では、8ビット毎に桁上げが無い場合は0を示し桁上げが有る場合は−1を示す桁上げ情報を生成する。さらにALU8は、8ビットSIMD補正命令“SIMD8 D1”、16ビットSIMD補正命令“SIMD16 D1”及び32ビットSIMD補正命令“SIMD32 D1”を実行する場合には、対応するビット数毎に他に影響を及ばさないようにA+Bの加算を行い、D1レジスタに保持していた演算結果を各SIMD演算結果に補正してD1レジスタに保持させる。
【0134】
ここで、機械語命令をROM1からフェッチし命令レジスタ2へ書込む処理はIFステージで行われ、DEC3における機械語命令の解読とEXT5符号拡張とレジスタファイル4又はEXT5からの出力とはDECステージで行われ、ALU21における演算とCR9への桁上げ情報の保持はEXステージで行われる。
【0135】
<動作>
図8(a)〜(d)は、CR9に保持される桁上げ情報のビット構成の一例を示す図である。
図8の各図において、横軸方向に付された“63,56,55,48,47,40,39,32,31,24,23,16,15,8,7,0”の数字はビット位置を表し、ビット位置0はLSB(最下位ビット)を、ビット位置63はMSB(最上位ビット)を意味する。
【0136】
図8(a)はニ数加算演算命令(ADD命令)を実行した時の桁上げ情報を示し、演算結果におけるビット位置7からの桁上げがないときは値0を、有るときは値0の反転値FFを桁上げ情報のビット位置8に記録し(図中のC7)、演算結果におけるビット位置15からの桁上げがないときは値0を、有るときは値0の反転値FFを桁上げ情報のビット位置16に記録し(図中のC15)、演算結果におけるビット位置23からの桁上げがないときは値0を、有るときは値0の反転値FFを桁上げ情報のビット位置24に記録し(図中のC23)、演算結果におけるビット位置31からの桁上げがないときは値0を、有るときは値0の反転値FFを桁上げ情報のビット位置32に記録し(図中のC31)、演算結果におけるビット位置39からの桁上げがないときは値0を、有るときは値0の反転値FFを桁上げ情報のビット位置40に記録し(図中のC39)、演算結果におけるビット位置47からの桁上げがないときは値0を、有るときは値0の反転値FFを桁上げ情報のビット位置48に記録し(図中のC47)、演算結果におけるビット位置55からの桁上げがないときは値0を、有るときは値0の反転値FFを桁上げ情報のビット位置56に記録し(図中のC55)、ビット位置0から7に値0を記録する。
【0137】
図8(b)はニ数減算演算命令(SUB命令)を実行した時の桁上げ情報を示し、演算結果におけるビット位置7からの桁上げがないときは値1を、有るときは値0を桁上げ情報のビット位置8に記録し(図中の上線を施したC7)、演算結果におけるビット位置15からの桁上げがないときは値1を、有るときは値0を桁上げ情報のビット位置16に記録し(図中の上線を施したC15)、演算結果におけるビット位置23からの桁上げがないときは値1を、有るときは値0を桁上げ情報のビット位置24に記録し(図中の上線を施したC23)、演算結果におけるビット位置31からの桁上げがないときは値1を、有るときは値0を桁上げ情報のビット位置32に記録し(図中の上線を施したC31)、演算結果におけるビット位置39からの桁上げがないときは値1を、有るときは値0を桁上げ情報のビット位置40に記録し(図中の上線を施したC39)、演算結果におけるビット位置47からの桁上げがないときは値1を、有るときは値0を桁上げ情報のビット位置48に記録し(図中の上線を施したC47)、演算結果におけるビット位置55からの桁上げがないときは値1を、有るときは値0を桁上げ情報のビット位置56に記録し(図中の上線を施したC55)、桁上げ情報のその他のビット位置に値0を記録する。
【0138】
図8(c)は1加算演算命令(INC命令)を実行した時の桁上げ情報を示し、図8(b)の場合と同様である。
図8(d)は1減算演算命令(DEC命令)を実行した時の桁上げ情報を示し、図8(a)の場合と同様である。
<動作例1>
8ビットデータ同士を8個並列にニ数加算する8×8SIMDニ数加算演算の場合の動作例を説明する。
【0139】
加算すべき一方の8ビットデータのそれぞれを8個連結した64ビットデータをD0レジスタに格納し、同様に、加算すべきもう一方の8ビットデータのそれぞれを8個連結した64ビットデータをD1レジスタに格納している場合には、8×8SIMDニ数加算演算は以下の2つの命令を実行することにより実現される。
ADD D0,D1
SIMD8 D1
ここで、加算すべき一方の8ビットデータのそれぞれを“0x12”、“0x34”、“0x56”、“0x78”、“0x9A”、“0xBC”、“0xDE”、“0xF0”とし、加算すべきもう一方の8ビットデータを全て“0x80”とすると、D0レジスタには“0x123456789ABCDEF0”、D1レジスタには“0x8080808080808080”が予め格納されていることになる。
【0140】
図9(a)は8×8SIMDニ数加算演算時の各レジスタの内容を示す図である。(1)動作タイミング1
・EXステージ、
関知しない。
・DECステージ、
関知しない。
・IFステージ:ADD命令、
ニ数加算命令“ADD D0,D1”がROM1からフェッチされ、IR2に格納される。
(2)動作タイミング2
・EXステージ、
関知しない。
・DECステージ:ADD命令、
IR2に格納されたニ数加算命令“ADD D0,D1”がDEC3により解読される。解読された結果として64ビットデータのニ数加算操作を実行すべきであることが判明する。この解読に基づいてDOレジスタの内容“0x123456789ABCDEF0”が読み出されBR7に格納され、またD1レジスタの内容“0x8080808080808080”が読み出されAR6に格納される。
・IFステージ:SIMD命令、
SIMD補正命令“SIMD8 D1”がROM1からフェッチされ、IR2に格納される。
(3)動作タイミング3
・EXステージ:ADD命令、
動作タイミング2においてDEC3により解読された結果に基づき、ALU21において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とを加算する64ビット桁上げ伝播加算が行われ、演算結果“0x92B4D6F91B3D5F70”がレジスタファイル4のD1レジスタに格納され、また、8ビット毎の桁上げが、C7=1, C15=1, C23=1, C31=1, C39=0, C47=0, C55=0であることから図9(a)に示すような桁上げ情報“0x000000FFFFFFFF00”がCR9に格納される。
【0141】
Figure 0003779602
・DECステージ:SIMD命令、
IR2に格納されたSIMD補正命令“SIMD8 D1”がDEC3により解読される。解読された結果として8ビットデータの8並列のSIMD補正操作を実行すべきであることが判明する。この解読に基づいて、EXステージで書込まれるD1レジスタの内容“0x92B4D6F91B3D5F70”が読み出されてAR6に格納され、またEXステージで書込まれるCR9の内容“0x000000FFFFFFFF00”が読み出され、EXT5による符号拡張は行われずにBR7に格納される。
・IFステージ、
関知しない。
(4)動作タイミング4
・EXステージ:SIMD命令、
動作タイミング3においてDEC3により解読された結果に基づき、ALU21において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とに対して8ビット単位にのみ桁上げが伝播する加算演算を行い、演算結果“0x92B4D6F81A3C5E70”をD1レジスタに格納する。
【0142】
Figure 0003779602
この演算結果は、D0レジスタとD1レジスタとに予め格納されていた内容をそれぞれ8ビットデータ8個とし、対応する8ビットデータ同志をニ数加算するSIMD演算結果となる。
【0143】
以下に、上記SIMD演算結果を示す。
Figure 0003779602
・DECステージ、
関知しない。
・IFステージ、
関知しない。
【0144】
<動作例2>
16ビットデータ同士を4個並列にニ数加算する16×4SIMDニ数加算演算の場合の動作例を説明する。
加算すべき一方の16ビットデータのそれぞれを4個連結した64ビットデータをD0レジスタに格納し、同様に、加算すべきもう一方の16ビットデータのそれぞれを4個連結した64ビットデータをD1レジスタに格納している場合には、16×4SIMDニ数加算演算は以下の2つの命令を実行することにより実現される。
【0145】
ADD D0,D1
SIMD16 D1
ここで、加算すべき一方の16ビットデータのそれぞれを“0x1234”、“0x5678”、“0x9ABC”、“0xDEF0”とし、加算すべきもう一方の16ビットデータを全て“0x8080”とすると、D0レジスタには“0x123456789ABCDEF0”、D1レジスタには“0x8080808080808080”が予め格納されていることになる。
【0146】
図9(b)は16×4SIMDニ数加算演算時の各レジスタの内容を示す図である。
(1)動作タイミング1
・EXステージ、
関知しない。
・DECステージ、
関知しない。
・IFステージ:ADD命令、
ニ数加算命令“ADD D0,D1”がROM1からフェッチされ、IR2に格納される。
(2)動作タイミング2
・EXステージ、
関知しない。
・DECステージ:ADD命令、
IR2に格納されたニ数加算命令“ADD D0,D1”がDEC3により解読される。解読された結果として64ビットデータのニ数加算操作を実行すべきであることが判明する。この解読に基づいてDOレジスタの内容“0x123456789ABCDEF0”が読み出されBR7に格納され、またD1レジスタの内容“0x8080808080808080”が読み出されAR6に格納される。
・IFステージ:SIMD命令、
SIMD補正命令“SIMD16 D1”がROM1からフェッチされ、IR2に格納される。
(3)動作タイミング3
・EXステージ:ADD命令、
動作タイミング2においてDEC3により解読された結果に基づき、ALU21において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とを加算する64ビット桁上げ伝播加算が行われ、演算結果“0x92B4D6F91B3D5F70”がレジスタファイル4のD1レジスタに格納され、また、8ビット毎の桁上げが、C7=1, C15=1, C23=1, C31=1, C39=0, C47=0, C55=0であることから図9(b)に示すような桁上げ情報“0x000000FFFFFFFF00”がCR9に格納される。
【0147】
Figure 0003779602
・DECステージ:SIMD命令、
IR2に格納されたSIMD補正命令“SIMD16 D1”がDEC3により解読される。解読された結果として16ビットデータの4並列のSIMD補正操作を実行すべきであることが判明する。この解読に基づいて、EXステージで書込まれるD1レジスタの内容“0x92B4D6F91B3D5F70”が読み出されてAR6に格納され、またEXステージで書込まれるCR9の内容“0x000000FFFFFFFF00”が読み出され、EXT5による16ビット符号拡張が行われて“0x0000FFFFFFFF0000”となりBR7に格納される。
・IFステージ、
関知しない。
(4)動作タイミング4
・EXステージ:SIMD命令、
動作タイミング3においてDEC3により解読された結果に基づき、ALU21において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とに対して16ビット単位にのみ桁上げが伝播する加算演算を行い、演算結果“0x92B4D6F81B3C5F70”をD1レジスタに格納する。
【0148】
Figure 0003779602
この演算結果は、D0レジスタとD1レジスタとに予め格納されていた内容をそれぞれ16ビットデータ4個とし、対応する16ビットデータ同志をニ数加算するSIMD演算結果となる。
【0149】
以下に、上記SIMD演算結果を示す。
Figure 0003779602
・DECステージ、
関知しない。
・IFステージ、
関知しない。
【0150】
<動作例3>
32ビットデータ同士を2個並列にニ数加算する32×2SIMDニ数加算演算の場合の動作例を説明する。
加算すべき一方の32ビットデータのそれぞれを2個連結した64ビットデータをD0レジスタに格納し、同様に、加算すべきもう一方の32ビットデータのそれぞれを2個連結した64ビットデータをD1レジスタに格納している場合には、32×2SIMDニ数加算演算は以下の2つの命令を実行することにより実現される。
【0151】
ADD D0,D1
SIMD32 D1
ここで、加算すべき一方の32ビットデータのそれぞれを“0x12345678”、“0x9ABCDEF0”とし、加算すべきもう一方の32ビットデータを全て“0x80808080”とすると、D0レジスタには“0x123456789ABCDEF0”、D1レジスタには“0x8080808080808080”が予め格納されていることになる。
【0152】
図9(c)は32×2SIMDニ数加算演算時の各レジスタの内容を示す図である。
(1)動作タイミング1
・EXステージ、
関知しない。
・DECステージ、
関知しない。
・IFステージ:ADD命令、
ニ数加算命令“ADD D0,D1”がROM1からフェッチされ、IR2に格納される。
(2)動作タイミング2
・EXステージ、
関知しない。
・DECステージ:ADD命令、
IR2に格納されたニ数加算命令“ADD D0,D1”がDEC3により解読される。解読された結果として64ビットデータのニ数加算操作を実行すべきであることが判明する。この解読に基づいてDOレジスタの内容“0x123456789ABCDEF0”が読み出されBR7に格納され、またD1レジスタの内容“0x8080808080808080”が読み出されAR6に格納される。
・IFステージ:SIMD命令、
SIMD補正命令“SIMD32 D1”がROM1からフェッチされ、IR2に格納される。
(3)動作タイミング3
・EXステージ:ADD命令、
動作タイミング2においてDEC3により解読された結果に基づき、ALU21において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とを加算する64ビット桁上げ伝播加算が行われ、演算結果“0x92B4D6F91B3D5F70”がレジスタファイル4のD1レジスタに格納され、また、8ビット毎の桁上げが、C7=1, C15=1, C23=1, C31=1, C39=0, C47=0, C55=0であることから図9(c)に示すような桁上げ情報“0x000000FFFFFFFF00”がCR9に格納される。
【0153】
Figure 0003779602
・DECステージ:SIMD命令、
IR2に格納されたSIMD補正命令“SIMD32 D1”がDEC3により解読される。解読された結果として32ビットデータの2並列のSIMD補正操作を実行すべきであることが判明する。この解読に基づいて、EXステージで書込まれるD1レジスタの内容“0x92B4D6F91B3D5F70”が読み出されてAR6に格納され、またEXステージで書込まれるCR9の内容“0x000000FFFFFFFF00”が読み出され、EXT5による32ビット符号拡張が行われて“0xFFFFFFFF00000000”となりBR7に格納される。
・IFステージ、
関知しない。
(4)動作タイミング4
・EXステージ:SIMD命令、
動作タイミング3においてDEC3により解読された結果に基づき、ALU21において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とに対して32ビット単位にのみ桁上げが伝播する加算演算を行い、演算結果“0x92B4D6F81B3D5F70”をD1レジスタに格納する。
【0154】
Figure 0003779602
この演算結果は、D0レジスタとD1レジスタとに予め格納されていた内容をそれぞれ32ビットデータ2個とし、対応する32ビットデータ同志をニ数加算するSIMD演算結果となる。
【0155】
以下に、上記SIMD演算結果を示す。
Figure 0003779602
・DECステージ、
関知しない。
・IFステージ、
関知しない。
【0156】
<動作例4>
8ビットデータから8ビットデータを8個並列にニ数減算する8×8SIMDニ数減算演算の場合の動作例を説明する。
減算されるべき8ビットデータのそれぞれを8個連結した64ビットデータをD0レジスタに格納し、同様に、減算すべき8ビットデータのそれぞれを8個連結した64ビットデータをD1レジスタに格納している場合には、8×8SIMDニ数減算演算は以下の2つの命令を実行することにより実現される。
【0157】
SUB D0,D1
SIMD8 D1
ここで、減算されるべき8ビットデータのそれぞれを“0x12”、“0x34”、“0x56”、“0x78”、“0x9A”、“0xBC”、“0xDE”、“0xF0”とし、減算すべき8ビットデータを全て“0x70”とすると、D0レジスタには“0x123456789ABCDEF0”、D1レジスタには“0x7070707070707070”が予め格納されていることになる。
【0158】
図10(a)は8×8SIMDニ数減算演算時の各レジスタの内容を示す図である。
(1)動作タイミング1
・EXステージ、
関知しない。
・DECステージ、
関知しない。
・IFステージ:SUB命令、
ニ数減算命令“SUB D0,D1”がROM1からフェッチされ、IR2に格納される。
(2)動作タイミング2
・EXステージ、
関知しない。
・DECステージ:SUB命令、
IR2に格納されたニ数減算命令“SUB D0,D1”がDEC3により解読される。解読された結果として64ビットデータのニ数減算操作を実行すべきであることが判明する。この解読に基づいてDOレジスタの内容“0x123456789ABCDEF0”が読み出されBR7に格納され、またD1レジスタの内容“0x7070707070707070”が読み出されAR6に格納される。
・IFステージ:SIMD命令、
SIMD補正命令“SIMD8 D1”がROM1からフェッチされ、IR2に格納される。
(3)動作タイミング3
・EXステージ:SUB命令、
動作タイミング2においてDEC3により解読された結果に基づき、ALU21において、BR7の内容をA入力としAR6の内容をB入力として、A入力からB入力を減算する64ビット桁上げ伝播減算が行われ、演算結果“0xA1C3E6082A4C6E80”がレジスタファイル4のD1レジスタに格納され、また、8ビット毎の桁上げが、C7=1, C15=1, C23=1, C31=1, C39=1, C47=0, C55=0であることから図10(a)に示すような桁上げ情報“0x0101000000000000”がCR9に格納される。
【0159】
ここでは、A−Bの減算をA+(Bのビット反転)+1で実現するので、B入力“0x7070707070707070”をビット反転し+1した“0x8F8F8F8F8F8F8F90”(2の補数)をA入力に加算する。
Figure 0003779602
・DECステージ:SIMD命令、
IR2に格納されたSIMD補正命令“SIMD8 D1”がDEC3により解読される。解読された結果として8ビットデータの8並列のSIMD補正操作を実行すべきであることが判明する。この解読に基づいて、EXステージで書込まれるD1レジスタの内容“0xA1C3E6082A4C6E80”が読み出されてAR6に格納され、またEXステージで書込まれるCR9の内容“0x0101000000000000”が読み出され、EXT5による符号拡張は行われずにBR7に格納される。
・IFステージ、
関知しない。
(4)動作タイミング4
・EXステージ:SIMD命令、
動作タイミング3においてDEC3により解読された結果に基づき、ALU21において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とに対して8ビット単位にのみ桁上げが伝播する加算演算を行い、演算結果“0xA2C4E6082A4C6E80”をD1レジスタに格納する。
【0160】
Figure 0003779602
この演算結果は、D0レジスタとD1レジスタとに予め格納されていた内容をそれぞれ8ビットデータ8個とし、対応する8ビットデータ同志をニ数減算するSIMD演算結果となる。
【0161】
以下に、上記SIMD演算結果を示す。
Figure 0003779602
・DECステージ、
関知しない。
・IFステージ、
関知しない。
【0162】
<動作例5>
16ビットデータから16ビットデータを4個並列にニ数減算する16×4SIMDニ数減算演算の場合の動作例を説明する。
減算されるべき16ビットデータのそれぞれを4個連結した64ビットデータをD0レジスタに格納し、同様に、減算すべき16ビットデータのそれぞれを4個連結した64ビットデータをD1レジスタに格納している場合には、16×4SIMDニ数減算演算は以下の2つの命令を実行することにより実現される。
【0163】
SUB D0,D1
SIMD16 D1
ここで、減算されるべき16ビットデータのそれぞれを“0x1234”、“0x5678”、“0x9ABC”、“0xDEF0”とし、減算すべき16ビットデータを全て“0x7070”とすると、D0レジスタには“0x123456789ABCDEF0”、D1レジスタには“0x7070707070707070”が予め格納されていることになる。
【0164】
図10(b)は16×4SIMDニ数減算演算時の各レジスタの内容を示す図である。
(1)動作タイミング1
・EXステージ、
関知しない。
・DECステージ、
関知しない。
・IFステージ:SUB命令、
ニ数減算命令“SUB D0,D1”がROM1からフェッチされ、IR2に格納される。
(2)動作タイミング2
・EXステージ、
関知しない。
・DECステージ:SUB命令、
IR2に格納されたニ数減算命令“SUB D0,D1”がDEC3により解読される。解読された結果として64ビットデータのニ数減算操作を実行すべきであることが判明する。この解読に基づいてDOレジスタの内容“0x123456789ABCDEF0”が読み出されBR7に格納され、またD1レジスタの内容“0x7070707070707070”が読み出されAR6に格納される。
・IFステージ:SIMD命令、
SIMD補正命令“SIMD16 D1”がROM1からフェッチされ、IR2に格納される。
(3)動作タイミング3
・EXステージ:SUB命令、
動作タイミング2においてDEC3により解読された結果に基づき、ALU21において、BR7の内容をA入力としAR6の内容をB入力として、A入力からB入力を減算する64ビット桁上げ伝播減算が行われ、演算結果“0xA1C3E6082A4C6E80”がレジスタファイル4のD1レジスタに格納され、また、8ビット毎の桁上げが、C7=1, C15=1, C23=1, C31=1, C39=1, C47=0, C55=0であることから図10(b)に示すような桁上げ情報“0x0101000000000000”がCR9に格納される。
【0165】
ここでは、A−Bの減算をA+(Bのビット反転)+1で実現するので、B入力“0x7070707070707070”をビット反転し+1した“0x8F8F8F8F8F8F8F90”(2の補数)をA入力に加算する。
Figure 0003779602
・DECステージ:SIMD命令、
IR2に格納されたSIMD補正命令“SIMD16 D1”がDEC3により解読される。解読された結果として16ビットデータの4並列のSIMD補正操作を実行すべきであることが判明する。この解読に基づいて、EXステージで書込まれるD1レジスタの内容“0xA1C3E6082A4C6E80”が読み出されてAR6に格納され、またEXステージで書込まれるCR9の内容“0x0101000000000000”が読み出され、EXT5による16ビット符号拡張が行われて“0x0001000000000000”となりBR7に格納される。
・IFステージ、
関知しない。
(4)動作タイミング4
・EXステージ:SIMD命令、
動作タイミング3においてDEC3により解読された結果に基づき、ALU21において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とに対して16ビット単位にのみ桁上げが伝播する加算演算を行い、演算結果“0xA1C4E6082A4C6E80”をD1レジスタに格納する。
【0166】
Figure 0003779602
この演算結果は、D0レジスタとD1レジスタとに予め格納されていた内容をそれぞれ8ビットデータ8個とし、対応する8ビットデータ同志をニ数減算するSIMD演算結果となる。
【0167】
以下に、上記SIMD演算結果を示す。
Figure 0003779602
・DECステージ、
関知しない。
・IFステージ、
関知しない。
【0168】
<動作例6>
32ビットデータから32ビットデータを2個並列にニ数減算する32×2SIMDニ数減算演算の場合の動作例を説明する。
減算されるべき32ビットデータのそれぞれを2個連結した64ビットデータをD0レジスタに格納し、同様に、減算すべき32ビットデータのそれぞれを2個連結した64ビットデータをD1レジスタに格納している場合には、32×2SIMDニ数減算演算は以下の2つの命令を実行することにより実現される。
【0169】
SUB D0,D1
SIMD32 D1
ここで、減算されるべき32ビットデータのそれぞれを“0x12345678”、“0x9ABCDEF0”とし、減算すべき32ビットデータを全て“0x70707070”とすると、D0レジスタには“0x123456789ABCDEF0”、D1レジスタには“0x7070707070707070”が予め格納されていることになる。
【0170】
図10(c)は32×2SIMDニ数減算演算時の各レジスタの内容を示す図である。
(1)動作タイミング1
・EXステージ、
関知しない。
・DECステージ、
関知しない。
・IFステージ:SUB命令、
ニ数減算命令“SUB D0,D1”がROM1からフェッチされ、IR2に格納される。
(2)動作タイミング2
・EXステージ、
関知しない。
・DECステージ:SUB命令、
IR2に格納されたニ数減算命令“SUB D0,D1”がDEC3により解読される。解読された結果として64ビットデータのニ数減算操作を実行すべきであることが判明する。この解読に基づいてDOレジスタの内容“0x123456789ABCDEF0”が読み出されBR7に格納され、またD1レジスタの内容“0x7070707070707070”が読み出されAR6に格納される。
・IFステージ:SIMD命令、
SIMD補正命令“SIMD32 D1”がROM1からフェッチされ、IR2に格納される。
(3)動作タイミング3
・EXステージ:SUB命令、
動作タイミング2においてDEC3により解読された結果に基づき、ALU21において、BR7の内容をA入力としAR6の内容をB入力として、A入力からB入力を減算する64ビット桁上げ伝播減算が行われ、演算結果“0xA1C3E6082A4C6E80”がレジスタファイル4のD1レジスタに格納され、また、8ビット毎の桁上げが、C7=1, C15=1, C23=1, C31=1, C39=1, C47=0, C55=0であることから図10(c)に示すような桁上げ情報“0x0101000000000000”がCR9に格納される。
【0171】
ここでは、A−Bの減算をA+(Bのビット反転)+1で実現するので、B入力“0x7070707070707070”をビット反転し+1した“0x8F8F8F8F8F8F8F90”(2の補数)をA入力に加算する。
Figure 0003779602
・DECステージ:SIMD命令、
IR2に格納されたSIMD補正命令“SIMD32 D1”がDEC3により解読される。解読された結果として32ビットデータの2並列のSIMD補正操作を実行すべきであることが判明する。この解読に基づいて、EXステージで書込まれるD1レジスタの内容“0xA1C3E6082A4C6E80”が読み出されてAR6に格納され、またEXステージで書込まれるCR9の内容“0x0101000000000000”が読み出され、EXT5による32ビット符号拡張が行われて“0x0000000000000000”となりBR7に格納される。
・IFステージ、
関知しない。
(4)動作タイミング4
・EXステージ:SIMD命令、
動作タイミング3においてDEC3により解読された結果に基づき、ALU21において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とに対して32ビット単位にのみ桁上げが伝播する加算演算を行い、演算結果“0xA1C3E6082A4C6E80”をD1レジスタに格納する。
【0172】
Figure 0003779602
この演算結果は、D0レジスタとD1レジスタとに予め格納されていた内容をそれぞれ8ビットデータ8個とし、対応する8ビットデータ同志をニ数減算するSIMD演算結果となる。
【0173】
以下に、上記SIMD演算結果を示す。
Figure 0003779602
・DECステージ、
関知しない。
・IFステージ、
関知しない。
【0174】
<動作例7>
8ビットデータを8個並列に1加算する8×8SIMD1加算演算の場合の動作例を説明する。
1加算されるべき8ビットデータのそれぞれを8個連結した64ビットデータをD1レジスタに格納している場合には、8×8SIMD1加算演算は以下の2つの命令を実行することにより実現される。
【0175】
INC D1
SIMD8 D1
ここで、1加算されるべき8ビットデータのそれぞれを“0x12”、“0x34”、“0x56”、“0x78”、“0x9A”、“0xBC”、“0xDE”、“0xF0”とすると、D1レジスタには“0x123456789ABCDEF0”が予め格納されていることになる。
【0176】
図11(a)は8×8SIMD1加算演算時の各レジスタの内容を示す図である。(1)動作タイミング1
・EXステージ、
関知しない。
・DECステージ、
関知しない。
・IFステージ:INC命令、
1加算命令“INC D1”がROM1からフェッチされ、IR2に格納される。
(2)動作タイミング2
・EXステージ、
関知しない。
・DECステージ:INC命令、
IR2に格納された1加算命令“INC D1”がDEC3により解読される。解読された結果として64ビットデータの1加算操作を実行すべきであることが判明する。この解読に基づいてD1レジスタの内容“0x123456789ABCDEF0”が読み出されBR7に格納され、また“0x0000000000000001”がAR6に格納される。
・IFステージ:SIMD命令、
SIMD補正命令“SIMD8 D1”がROM1からフェッチされ、IR2に格納される。
(3)動作タイミング3
・EXステージ:INC命令、
動作タイミング2においてDEC3により解読された結果に基づき、ALU21において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とを加算する64ビット桁上げ伝播加算が行われ、演算結果“0x123456789ABCDEF1”がレジスタファイル4のD1レジスタに格納され、また、8ビット毎の桁上げが、C7=0, C15=0, C23=0, C31=0, C39=0, C47=0, C55=0であることから図11(a)に示すような桁上げ情報“0x0101010101010100”がCR9に格納される。
【0177】
Figure 0003779602
・DECステージ:SIMD命令、
IR2に格納されたSIMD補正命令“SIMD8 D1”がDEC3により解読される。解読された結果として8ビットデータの8並列のSIMD補正操作を実行すべきであることが判明する。この解読に基づいて、EXステージで書込まれるD1レジスタの内容“0x123456789ABCDEF1”が読み出されてAR6に格納され、またEXステージで書込まれるCR9の内容“0x0101010101010100”が読み出され、EXT5による符号拡張は行われずにBR7に格納される。
・IFステージ、
関知しない。
(4)動作タイミング4
・EXステージ:SIMD命令、
動作タイミング3においてDEC3により解読された結果に基づき、ALU21において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とに対して8ビット単位にのみ桁上げが伝播する加算演算を行い、演算結果“0x133557799BBDDFF1”をD1レジスタに格納する。
【0178】
Figure 0003779602
この演算結果は、D0レジスタに予め格納されていた内容を8ビットデータ8個とし、それぞれの8ビットデータを1加算するSIMD演算結果となる。
【0179】
以下に、上記SIMD演算結果を示す。
Figure 0003779602
・DECステージ、
関知しない。
・IFステージ、
関知しない。
【0180】
なお、1加算されるべき8ビットデータのそれぞれを8個連結した64ビットデータをD1レジスタに格納している場合には、8×8SIMD1加算演算は以下の2つの命令を実行することによっても実現される。
MOV 0x0101010101010101,CR
SIMD8 D1
ここで“MOV 0x0101010101010101,CR”は、CR9に“0x0101010101010101”を格納する命令である。
【0181】
<動作例8>
16ビットデータを4個並列に1加算する16×4SIMD1加算演算の場合の動作例を説明する。
1加算されるべき16ビットデータのそれぞれを4個連結した64ビットデータをD1レジスタに格納している場合には、16×4SIMD1加算演算は以下の2つの命令を実行することにより実現される。
【0182】
INC D1
SIMD16 D1
ここで、1加算されるべき16ビットデータのそれぞれを“0x1234”、“0x5678”、“0x9ABC”、“0xDEF0”とすると、D1レジスタには“0x123456789ABCDEF0”が予め格納されていることになる。
【0183】
図11(b)は16×4SIMD1加算演算時の各レジスタの内容を示す図である。
(1)動作タイミング1
・EXステージ、
関知しない。
・DECステージ、
関知しない。
・IFステージ:INC命令、
1加算命令“INC D1”がROM1からフェッチされ、IR2に格納される。
(2)動作タイミング2
・EXステージ、
関知しない。
・DECステージ:INC命令、
IR2に格納された1加算命令“INC D1”がDEC3により解読される。解読された結果として64ビットデータの1加算操作を実行すべきであることが判明する。この解読に基づいてD1レジスタの内容“0x123456789ABCDEF0”が読み出されBR7に格納され、また“0x0000000000000001”がAR6に格納される。
・IFステージ:SIMD命令、
SIMD補正命令“SIMD16 D1”がROM1からフェッチされ、IR2に格納される。
(3)動作タイミング3
・EXステージ:INC命令、
動作タイミング2においてDEC3により解読された結果に基づき、ALU21において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とを加算する64ビット桁上げ伝播加算が行われ、演算結果“0x123456789ABCDEF1”がレジスタファイル4のD1レジスタに格納され、また、8ビット毎の桁上げが、C7=0, C15=0, C23=0, C31=0, C39=0, C47=0, C55=0であることから図11(b)に示すような桁上げ情報“0x0101010101010100”がCR9に格納される。
【0184】
Figure 0003779602
・DECステージ:SIMD命令、
IR2に格納されたSIMD補正命令“SIMD16 D1”がDEC3により解読される。解読された結果として16ビットデータの4並列のSIMD補正操作を実行すべきであることが判明する。この解読に基づいて、EXステージで書込まれるD1レジスタの内容“0x123456789ABCDEF1”が読み出されてAR6に格納され、またEXステージで書込まれるCR9の内容“0x0101010101010100”が読み出され、EXT5による16ビット符号拡張が行われて“0x0001000100010000”となりBR7に格納される。
・IFステージ、
関知しない。
(4)動作タイミング4
・EXステージ:SIMD命令、
動作タイミング3においてDEC3により解読された結果に基づき、ALU21において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とに対して16ビット単位にのみ桁上げが伝播する加算演算を行い、演算結果“0x123556799ABDDEF1”をD1レジスタに格納する。
【0185】
Figure 0003779602
この演算結果は、D0レジスタに予め格納されていた内容を16ビットデータ4個とし、それぞれの16ビットデータを1加算するSIMD演算結果となる。
【0186】
以下に、上記SIMD演算結果を示す。
Figure 0003779602
・DECステージ、
関知しない。
・IFステージ、
関知しない。
【0187】
なお、1加算されるべき16ビットデータのそれぞれを4個連結した64ビットデータをD1レジスタに格納している場合には、16×4SIMD1加算演算は以下の2つの命令を実行することによっても実現される。
MOV 0x0101010101010101,CR
SIMD16 D1
ここで“MOV 0x0101010101010101,CR”は、CR9に“0x0101010101010101”を格納する命令である。
【0188】
<動作例9>
32ビットデータを2個並列に1加算する32×2SIMD1加算演算の場合の動作例を説明する。
1加算されるべき32ビットデータのそれぞれを2個連結した64ビットデータをD1レジスタに格納している場合には、32×2SIMD1加算演算は以下の2つの命令を実行することにより実現される。
【0189】
INC D1
SIMD32 D1
ここで、1加算されるべき32ビットデータのそれぞれを“0x12345678”、“0x9ABCDEF0”とすると、D1レジスタには“0x123456789ABCDEF0”が予め格納されていることになる。
【0190】
図11(c)は32×2SIMD1加算演算時の各レジスタの内容を示す図である。
(1)動作タイミング1
・EXステージ、
関知しない。
・DECステージ、
関知しない。
・IFステージ:INC命令、
1加算命令“INC D1”がROM1からフェッチされ、IR2に格納される。
(2)動作タイミング2
・EXステージ、
関知しない。
・DECステージ:INC命令、
IR2に格納された1加算命令“INC D1”がDEC3により解読される。解読された結果として64ビットデータの1加算操作を実行すべきであることが判明する。この解読に基づいてD1レジスタの内容“0x123456789ABCDEF0”が読み出されBR7に格納され、また“0x0000000000000001”がAR6に格納される。
・IFステージ:SIMD命令、
SIMD補正命令“SIMD16 D1”がROM1からフェッチされ、IR2に格納される。
(3)動作タイミング3
・EXステージ:INC命令、
動作タイミング2においてDEC3により解読された結果に基づき、ALU21において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とを加算する64ビット桁上げ伝播加算が行われ、演算結果“0x123456789ABCDEF1”がレジスタファイル4のD1レジスタに格納され、また、8ビット毎の桁上げが、C7=0, C15=0, C23=0, C31=0, C39=0, C47=0, C55=0であることから図11(c)に示すような桁上げ情報“0x0101010101010100”がCR9に格納される。
【0191】
Figure 0003779602
・DECステージ:SIMD命令、
IR2に格納されたSIMD補正命令“SIMD16 D1”がDEC3により解読される。解読された結果として32ビットデータの2並列のSIMD補正操作を実行すべきであることが判明する。この解読に基づいて、EXステージで書込まれるD1レジスタの内容“0x123456789ABCDEF1”が読み出されてAR6に格納され、またEXステージで書込まれるCR9の内容“0x0101010101010100”が読み出され、EXT5による32ビット符号拡張が行われて“0x0000000100000000”となりBR7に格納される。
・IFステージ、
関知しない。
(4)動作タイミング4
・EXステージ:SIMD命令、
動作タイミング3においてDEC3により解読された結果に基づき、ALU21において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とに対して16ビット単位にのみ桁上げが伝播する加算演算を行い、演算結果“0x123456799ABCDEF1”をD1レジスタに格納する。
【0192】
Figure 0003779602
この演算結果は、D0レジスタに予め格納されていた内容を32ビットデータ2個とし、それぞれの32ビットデータを1加算するSIMD演算結果となる。
【0193】
以下に、上記SIMD演算結果を示す。
Figure 0003779602
・DECステージ、
関知しない。
・IFステージ、
関知しない。
【0194】
なお、1加算されるべき32ビットデータのそれぞれを2個連結した64ビットデータをD1レジスタに格納している場合には、32×2SIMD1加算演算は以下の2つの命令を実行することによっても実現される。
MOV 0x0101010101010101,CR
SIMD32 D1
ここで“MOV 0x0101010101010101,CR”は、CR9に“0x0101010101010101”を格納する命令である。
【0195】
<動作例10>
8ビットデータを8個並列に1減算する8×8SIMD1減算演算の場合の動作例を説明する。
1減算されるべき8ビットデータのそれぞれを8個連結した64ビットデータをD1レジスタに格納している場合には、8×8SIMD1減算演算は以下の2つの命令を実行することにより実現される。
【0196】
DEC D1
SIMD8 D1
ここで、1減算されるべき8ビットデータのそれぞれを“0x12”、“0x34”、“0x56”、“0x78”、“0x9A”、“0xBC”、“0xDE”、“0xF0”とすると、D1レジスタには“0x123456789ABCDEF0”が予め格納されていることになる。
【0197】
図12(a)は8×8SIMD1減算演算時の各レジスタの内容を示す図である。(1)動作タイミング1
・EXステージ、
関知しない。
・DECステージ、
関知しない。
・IFステージ:DEC命令、
1減算命令“DEC D1”がROM1からフェッチされ、IR2に格納される。
(2)動作タイミング2
・EXステージ、
関知しない。
・DECステージ:DEC命令、
IR2に格納された1減算命令“DEC D1”がDEC3により解読される。解読された結果として64ビットデータの1減算操作を実行すべきであることが判明する。この解読に基づいてD1レジスタの内容“0x123456789ABCDEF0”が読み出されBR7に格納され、また“0x0000000000000001”がAR6に格納される。
・IFステージ:SIMD命令、
SIMD補正命令“SIMD8 D1”がROM1からフェッチされ、IR2に格納される。
(3)動作タイミング3
・EXステージ:DEC命令、
動作タイミング2においてDEC3により解読された結果に基づき、ALU21において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とを加算する64ビット桁上げ伝播減算が行われ、演算結果“0x123456789ABCDEEF”がレジスタファイル4のD1レジスタに格納され、また、8ビット毎の桁上げが、C7=1, C15=1, C23=1, C31=1, C39=1, C47=1, C55=1であることから図12(a)に示すような桁上げ情報“0xFFFFFFFFFFFFFF00”がCR9に格納される。
【0198】
ここでは、A−Bの減算をA+(Bのビット反転)+1で実現するので、B入力“0x0000000000000001”をビット反転し+1した“0xFFFFFFFFFFFFFFFF”(2の補数)をA入力に加算する。
Figure 0003779602
・DECステージ:SIMD命令、
IR2に格納されたSIMD補正命令“SIMD8 D1”がDEC3により解読される。解読された結果として8ビットデータの8並列のSIMD補正操作を実行すべきであることが判明する。この解読に基づいて、EXステージで書込まれるD1レジスタの内容“0x123456789ABCDEEF”が読み出されてAR6に格納され、またEXステージで書込まれるCR9の内容“0xFFFFFFFFFFFFFF00”が読み出され、EXT5による符号拡張は行われずにBR7に格納される。
・IFステージ、
関知しない。
(4)動作タイミング4
・EXステージ:SIMD命令、
動作タイミング3においてDEC3により解読された結果に基づき、ALU21において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とに対して8ビット単位にのみ桁上げが伝播する加算演算を行い、演算結果“0x1133557799BBDDEF”をD1レジスタに格納する。
【0199】
Figure 0003779602
この演算結果は、D0レジスタに予め格納されていた内容を8ビットデータ8個とし、それぞれの8ビットデータを1減算するSIMD演算結果となる。
【0200】
以下に、上記SIMD演算結果を示す。
Figure 0003779602
・DECステージ、
関知しない。
・IFステージ、
関知しない。
【0201】
なお、1加算されるべき8ビットデータのそれぞれを8個連結した64ビットデータをD1レジスタに格納している場合には、8×8SIMD1減算演算は以下の2つの命令を実行することによっても実現される。
MOV 0xFFFFFFFFFFFFFFFF,CR
SIMD8 D1
ここで“MOV 0xFFFFFFFFFFFFFFFF,CR”は、CR9に“0xFFFFFFFFFFFFFFFF”を格納する命令である。
【0202】
<動作例11>
16ビットデータを4個並列に1減算する16×4SIMD1減算演算の場合の動作例を説明する。
1減算されるべき16ビットデータのそれぞれを4個連結した64ビットデータをD1レジスタに格納している場合には、16×4SIMD1減算演算は以下の2つの命令を実行することにより実現される。
【0203】
DEC D1
SIMD16 D1
ここで、1減算されるべき16ビットデータのそれぞれを“0x1234”、“0x5678”、“0x9ABC”、“0xDEF0”とすると、D1レジスタには“0x123456789ABCDEF0”が予め格納されていることになる。
【0204】
図12(b)は16×4SIMD1減算演算時の各レジスタの内容を示す図である。
(1)動作タイミング1
・EXステージ、
関知しない。
・DECステージ、
関知しない。
・IFステージ:DEC命令、
1減算命令“DEC D1”がROM1からフェッチされ、IR2に格納される。
(2)動作タイミング2
・EXステージ、
関知しない。
・DECステージ:DEC命令、
IR2に格納された1減算命令“DEC D1”がDEC3により解読される。解読された結果として64ビットデータの1減算操作を実行すべきであることが判明する。この解読に基づいてD1レジスタの内容“0x123456789ABCDEF0”が読み出されBR7に格納され、また“0x0000000000000001”がAR6に格納される。
・IFステージ:SIMD命令、
SIMD補正命令“SIMD16 D1”がROM1からフェッチされ、IR2に格納される。
(3)動作タイミング3
・EXステージ:DEC命令、
動作タイミング2においてDEC3により解読された結果に基づき、ALU21において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とを加算する64ビット桁上げ伝播減算が行われ、演算結果“0x123456789ABCDEEF”がレジスタファイル4のD1レジスタに格納され、また、8ビット毎の桁上げが、C7=1, C15=1, C23=1, C31=1, C39=1, C47=1, C55=1であることから図12(b)に示すような桁上げ情報“0xFFFFFFFFFFFFFF00”がCR9に格納される。
【0205】
ここでは、A−Bの減算をA+(Bのビット反転)+1で実現するので、B入力“0x0000000000000001”をビット反転し+1した“0xFFFFFFFFFFFFFFFF”(2の補数)をA入力に加算する。
Figure 0003779602
・DECステージ:SIMD命令、
IR2に格納されたSIMD補正命令“SIMD16 D1”がDEC3により解読される。解読された結果として16ビットデータの4並列のSIMD補正操作を実行すべきであることが判明する。この解読に基づいて、EXステージで書込まれるD1レジスタの内容“0x123456789ABCDEEF”が読み出されてAR6に格納され、またEXステージで書込まれるCR9の内容“0xFFFFFFFFFFFFFF00”が読み出され、EXT5による16ビット符号拡張が行われて“0xFFFFFFFFFFFF0000”となりBR7に格納される。
・IFステージ、
関知しない。
(4)動作タイミング4
・EXステージ:SIMD命令、
動作タイミング3においてDEC3により解読された結果に基づき、ALU21において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とに対して16ビット単位にのみ桁上げが伝播する加算演算を行い、演算結果“0x123356779ABBDEEF”をD1レジスタに格納する。
【0206】
Figure 0003779602
この演算結果は、D0レジスタに予め格納されていた内容を16ビットデータ4個とし、それぞれの16ビットデータを1減算するSIMD演算結果となる。
【0207】
以下に、上記SIMD演算結果を示す。
Figure 0003779602
・DECステージ、
関知しない。
・IFステージ、
関知しない。
【0208】
なお、1加算されるべき16ビットデータのそれぞれを4個連結した64ビットデータをD1レジスタに格納している場合には、16×4SIMD1減算演算は以下の2つの命令を実行することによっても実現される。
MOV 0xFFFFFFFFFFFFFFFF,CR
SIMD16 D1
ここで“MOV 0xFFFFFFFFFFFFFFFF,CR”は、CR9に“0xFFFFFFFFFFFFFFFF”を格納する命令である。
【0209】
<動作例12>
32ビットデータを2個並列に1減算する32×2SIMD1減算演算の場合の動作例を説明する。
1減算されるべき32ビットデータのそれぞれを2個連結した64ビットデータをD1レジスタに格納している場合には、32×2SIMD1減算演算は以下の2つの命令を実行することにより実現される。
【0210】
DEC D1
SIMD32 D1
ここで、1減算されるべき32ビットデータのそれぞれを“0x12345678”、“0x9ABCDEF0”とすると、D1レジスタには“0x123456789ABCDEF0”が予め格納されていることになる。
【0211】
図12(c)は32×2SIMD1減算演算時の各レジスタの内容を示す図である。
(1)動作タイミング1
・EXステージ、
関知しない。
・DECステージ、
関知しない。
・IFステージ:DEC命令、
1減算命令“DEC D1”がROM1からフェッチされ、IR2に格納される。
(2)動作タイミング2
・EXステージ、
関知しない。
・DECステージ:DEC命令、
IR2に格納された1減算命令“DEC D1”がDEC3により解読される。解読された結果として64ビットデータの1減算操作を実行すべきであることが判明する。この解読に基づいてD1レジスタの内容“0x123456789ABCDEF0”が読み出されBR7に格納され、また“0x0000000000000001”がAR6に格納される。
・IFステージ:SIMD命令、
SIMD補正命令“SIMD32 D1”がROM1からフェッチされ、IR2に格納される。
(3)動作タイミング3
・EXステージ:DEC命令、
動作タイミング2においてDEC3により解読された結果に基づき、ALU21において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とを加算する64ビット桁上げ伝播減算が行われ、演算結果“0x123456789ABCDEEF”がレジスタファイル4のD1レジスタに格納され、また、8ビット毎の桁上げが、C7=1, C15=1, C23=1, C31=1, C39=1, C47=1, C55=1であることから図12(c)に示すような桁上げ情報“0xFFFFFFFFFFFFFF00”がCR9に格納される。
【0212】
ここでは、A−Bの減算をA+(Bのビット反転)+1で実現するので、B入力“0x0000000000000001”をビット反転し+1した“0xFFFFFFFFFFFFFFFF”(2の補数)をA入力に加算する。
Figure 0003779602
・DECステージ:SIMD命令、
IR2に格納されたSIMD補正命令“SIMD32 D1”がDEC3により解読される。解読された結果として32ビットデータの2並列のSIMD補正操作を実行すべきであることが判明する。この解読に基づいて、EXステージで書込まれるD1レジスタの内容“0x123456789ABCDEEF”が読み出されてAR6に格納され、またEXステージで書込まれるCR9の内容“0xFFFFFFFFFFFFFF00”が読み出され、EXT5による32ビット符号拡張が行われて“0xFFFFFFFF00000000”となりBR7に格納される。
・IFステージ、
関知しない。
(4)動作タイミング4
・EXステージ:SIMD命令、
動作タイミング3においてDEC3により解読された結果に基づき、ALU21において、BR7の内容をA入力としAR6の内容をB入力として、A入力とB入力とに対して32ビット単位にのみ桁上げが伝播する加算演算を行い、演算結果“0x123456779ABCDEEF”をD1レジスタに格納する。
【0213】
Figure 0003779602
この演算結果は、D0レジスタに予め格納されていた内容を32ビットデータ2個とし、それぞれの32ビットデータを1減算するSIMD演算結果となる。
【0214】
以下に、上記SIMD演算結果を示す。
Figure 0003779602
・DECステージ、
関知しない。
・IFステージ、
関知しない。
【0215】
なお、1加算されるべき32ビットデータのそれぞれを2個連結した64ビットデータをD1レジスタに格納している場合には、32×2SIMD1減算演算は以下の2つの命令を実行することによっても実現される。
MOV 0xFFFFFFFFFFFFFFFF,CR
SIMD32 D1
ここで“MOV 0xFFFFFFFFFFFFFFFF,CR”は、CR9に“0xFFFFFFFFFFFFFFFF”を格納する命令である。
【0216】
以上のように、本発明の実施の形態2のプロセッサは、演算の種別数によらないSIMD8、SIMD16及びSIMD32というデータ幅の種別数によるSIMD補正命令を従来の命令に追加して実装するだけで複数の演算の種別に対するSIMD演算を実行することができるので、命令数の増加を飛躍的に抑えることができる。
(実施の形態3)
<概要>
上記の実施の形態1及び2では、加算及び減算の場合について説明したが、本発明の実施の形態3は、乗算及び除算等の他の演算の場合について説明する。
【0217】
<構成>
図13は、本実施の形態3に係るSIMD演算装置の構成を示す図である。
図13に示すSIMD演算装置30の構成は、実施の形態1で説明したSIMD演算装置10が備えるDEC3がDEC31に、AR6がAR32に、BR7がBR33に、ALU8がALU34に、CR9がCR35、CR36に置き換わり、EXT5が無くなったものである。なお、SIMD演算装置10と同様の構成要素には同一符号を付し、それらの説明を省略する。
【0218】
DEC31は命令解読器であり、IR2に保持された機械語命令を解読してSIMD演算装置内の各部を制御する。
ここではDEC31は、2数乗算命令“MUL D0,D1”、2数除算命令“DIV D0,D1”8ビットSIMD補正命令“SIMD8 D1”、16ビットSIMD補正命令“SIMD16 D1”、及び、他の演算命令を解読する。
【0219】
AR32は64ビット幅のレジスタであり、レジスタファイル4からの出力を保持する。
ここではAR32は、2数乗算命令“MUL D0,D1”、2数除算命令“DIV D0,D1”、8ビットSIMD補正命令“SIMD8 D1”、16ビットSIMD補正命令“SIMD16 D1”、及び、他の演算命令の場合にD1レジスタからの出力を保持する。
【0220】
BR33は64ビット幅のレジスタであり、レジスタファイル4からの出力、CR35、及び、CR36の出力のうち一つを機械語命令に応じて選択して保持する。
ここではBR33は、2数乗算命令“MUL D0,D1”、2数除算命令“DIV D0,D1”及び他の演算命令を実行する場合にはD0レジスタからの出力を、8ビットSIMD補正命令“SIMD8 D1”を実行する場合にはCR35の出力を、16ビットSIMD補正命令“SIMD16 D1”を実行する場合にはCR36の出力を選択して保持する。
【0221】
ALU34は64ビット幅の加減算器、乗算器、除算器、及び他の演算器であり、AR32の内容をA入力、BR33の内容をB入力として、演算命令実行時にはA×Bの乗算、A÷Bの除算又は他の演算を行い演算結果をレジスタに保持させると共に、当該演算結果を各SIMD演算の演算結果に補正するための各補正データを生成してCR35及びCR36に保持し、また、SIMD補正命令実行時にはA−Bの減算を行い当該演算結果を各SIMD演算結果に補正する。
【0222】
ここではALU34は、2数乗算命令“MUL D0,D1”を実行する場合にはA×Bの乗算を行い、2数除算命令“DIV D0,D1”を実行する場合にはA÷Bの除算を行い、他の演算命令を実行する場合にはそれぞれの演算を行い演算結果をレジスタに保持させると共に、ここで得られた演算結果と8ビットSIMD演算の演算結果との差分である8ビット補正データを生成してCR35に保持させ、ここで得られた演算結果と16ビットSIMD演算の演算結果との差分である16ビット補正データを生成してCR36に保持させる。さらにALU34は、8ビットSIMD補正命令“SIMD8 D1”、及び、16ビットSIMD補正命令“SIMD16 D1”を実行する場合には、A−Bの減算を行い、D1レジスタに保持していた演算結果を各SIMD演算結果に補正してD1レジスタに保持させる。
【0223】
CR35及びCR36は、それぞれ補正データを保持する64ビット幅のレジスタであり、CR35は8ビットSIMD補正用の補正データを保持し、CR36は16ビットSIMD補正用の補正データを保持する。
ここで、機械語命令をROM1からフェッチし命令レジスタ2へ書込む処理はIFステージで行われ、DEC31における機械語命令の解読と、レジスタファイル4、CR35又はCR36からの出力とはDECステージで行われ、ALU34における演算とCR35及びCR36への補正データの保持はEXステージで行われる。
【0224】
<動作>
<動作例1>
8ビットデータ同士を4個並列に2数乗算する8×4SIMD2数乗算演算の場合の動作例を説明する。
乗算すべき一方の8ビットデータのそれぞれを4個連結した32ビットデータをD0レジスタの下位に格納し、同様に、乗算すべきもう一方の8ビットデータのそれぞれを4個連結した32ビットデータをD1レジスタの下位に格納している場合には、8×4SIMD2数乗算演算は以下の2つの命令を実行することにより実現される。
【0225】
MUL D0,D1
SIMD8 D1
ここで、乗算すべき一方の8ビットデータのそれぞれを“0x12”、“0x34”、“0x56”、“0x78”とし、乗算すべきもう一方の8ビットデータを全て“0x88”とすると、D0レジスタには“0x0000000012345678”、D1レジスタには“0x0000000088888888”が予め格納されていることになる。
【0226】
図14は8×4SIMD2数乗算演算時の各レジスタの内容を示す図である。
(1)動作タイミング1
・EXステージ、
関知しない。
・DECステージ、
関知しない。
・IFステージ:MUL命令、
2数乗算命令“MUL D0,D1”がROM1からフェッチされ、IR2に格納される。
(2)動作タイミング2
・EXステージ、
関知しない。
・DECステージ:MUL命令、
IR2に格納された2数乗算命令“MUL D0,D1”がDEC31により解読される。解読された結果として32ビットデータの2数乗算操作を実行すべきであることが判明する。この解読に基づいてDOレジスタの内容“0x0000000012345678”が読み出されBR33に格納され、またD1レジスタの内容“0x0000000088888888”が読み出されAR32に格納される。
・IFステージ:SIMD8命令、
SIMD補正命令“SIMD8 D1”がROM1からフェッチされ、IR2に格納される。
(3)動作タイミング3(構成次第では数クロック必要となるので、このような場合は動作タイミング3〜3+αとする。)
・EXステージ:MUL命令、
動作タイミング2においてDEC31により解読された結果に基づき、ALU34において、BR33の内容をA入力としAR32の内容をB入力として、A入力とB入力とを乗算する符号なし64ビット乗算が行われ、演算結果“0x09B58373297DAFC0”がレジスタファイル4のD1レジスタに格納される。
【0227】
Figure 0003779602
また、8ビット補正データ及び16ビット補正データを生成し、それぞれCR35、及び、CR36に格納する。
【0228】
以下に、16ビット補正データの算出方法の一例を示す。
BR33の内容“0x0000000012345678”の下位16ビットにマスクをかけて、“0x0000000012345678”and“0xFFFFFFFFFFFF0000”=“0x0000000012340000”・・・≪1≫。
AR32の内容“0x0000000088888888”の下位16ビット以外にマスクをかけて、“0x0000000088888888”and“0x000000000000FFFF”=“0x0000000000008888”・・・≪2≫。
【0229】
≪1≫と≪2≫とを乗算して、
Figure 0003779602
【0230】
BR33の内容“0x0000000012345678”の下位16ビット以外にマスクをかけて、“0x0000000012345678”and“0x000000000000FFFF”=“0x0000000000005678”・・・≪4≫。
AR32の内容“0x0000000088888888”の下位16ビットにマスクをかけて、“0x0000000088888888”and“0xFFFFFFFFFFFF0000”=“0x0000000088880000”・・・≪5≫。
【0231】
≪4≫と≪5≫とを乗算して、
Figure 0003779602
【0232】
≪3≫と≪6≫とを加算して、
Figure 0003779602
【0233】
この≪7≫が16ビット補正データであり、これをCR36に格納する。
従って、ALU34は以上のような計算を実行する演算器を含んでいる。
以下に、8ビット補正データの算出方法の一例を示す。
BR33の内容“0x0000000012345678”の下位8ビットにマスクをかけて、“0x0000000012345678”and“0xFFFFFFFFFFFFFF00”=“0x0000000012345600”・・・≪8≫。
【0234】
AR32の内容“0x0000000088888888”の下位8ビット以外にマスクをかけて、“0x0000000088888888”and“0x00000000000000FF”=“0x0000000000000088”・・・≪9≫。
≪8≫と≪9≫とを乗算して、
Figure 0003779602
【0235】
BR33の内容“0x0000000012345678”下位8ビット目から15ビット目までにマスクをかけて、“0x0000000012345678”and“0xFFFFFFFFFFFF00FF”=“0x0000000012340078”・・・≪11≫。
AR32の内容“0x0000000088888888”の下位8ビット目から15ビット目まで以外にマスクをかけて、“0x0000000088888888”and“0x000000000000FF00”=“0x0000000000008800”・・・≪12≫。
6)≪11≫と≪12≫とを乗算して、
Figure 0003779602
【0236】
BR33の内容“0x0000000012345678”の下位16ビット目から23ビット目までにマスクをかけて、“0x0000000012345678”and“0xFFFFFFFFFF00FFFF”=“0x0000000012005678”・・・≪14≫。
AR32の内容“0x0000000088888888”の下位16ビット目から23ビット目まで以外にマスクをかけて、“0x0000000088888888”and“0x0000000000FF0000”=“0x0000000000880000”・・・≪15≫。
【0237】
≪14≫と≪15≫とを乗算して、
Figure 0003779602
【0238】
BR33の内容“0x0000000012345678”の下位24ビット目から31ビット目までにマスクをかけて、“0x0000000012345678”and“0xFFFFFFFF00FFFFFF”=“0x0000000000345678”・・・≪17≫。
AR32の内容“0x0000000088888888”の下位24ビット目から31ビット目まで以外にマスクをかけて、“0x0000000088888888”and“0x00000000FF000000”=“0x0000000088000000”・・・≪18≫。
【0239】
≪17≫と≪18≫とを乗算して、
Figure 0003779602
【0240】
≪10≫、≪13≫、≪16≫及び≪19≫を加算して、
Figure 0003779602
【0241】
この≪20≫が8ビット補正データであり、これをCR35に格納する。
従って、ALU34は以上のような計算を実行する演算器を含んでいる。
・DECステージ:SIMD8命令、
IR2に格納されたSIMD補正命令“SIMD8 D1”がDEC31により解読される。解読された結果として8ビットデータの4並列のSIMD補正操作を実行すべきであることが判明する。この解読に基づいて、EXステージで書込まれるD1レジスタの内容“0x09B58373297DAFC0”が読み出されてAR32に格納され、またEXステージで書込まれるCR35の内容である8ビット補正データ“0x002567D2FBCD7000”が読み出されBR33に格納される。
・IFステージ、
関知しない。
(4)動作タイミング4(動作タイミング3〜3+αの場合は動作タイミング4+α)
・EXステージ:SIMD8命令、
動作タイミング3(又は動作タイミング3+α)においてDEC31により解読された結果に基づき、ALU34において、BR33の内容をA入力としAR32の内容をB入力として、A入力とB入力とに対して減算演算を行い、演算結果“0x09901BA02DB03FC0”をD1レジスタに格納する。
【0242】
Figure 0003779602
この演算結果“0x098F8A91C9F3FFC0”を16ビット毎に4個に分割した“0x0990”、“0x1BA0”、“0x2DB0”及び“0x3FC0”は、D0レジスタとD1レジスタとに予め格納されていた内容をそれぞれ8ビットデータ4個とし、対応する符号なし8ビットデータ同志を2数乗算するSIMD演算結果となる。
【0243】
以下に、上記SIMD演算結果を示す。
Figure 0003779602
・DECステージ、
関知しない。
・IFステージ、
関知しない。
【0244】
<動作例2>
16ビットデータ同士を2個並列に2数乗算する16×2SIMD2数乗算演算の場合の動作例を説明する。
乗算すべき一方の16ビットデータのそれぞれを2個連結した32ビットデータをD0レジスタの下位に格納し、同様に、乗算すべきもう一方の16ビットデータのそれぞれを2個連結した32ビットデータをD1レジスタの下位に格納している場合には、16×2SIMD2数乗算演算は以下の2つの命令を実行することにより実現される。
【0245】
MUL D0,D1
SIMD16 D1
ここで、乗算すべき一方の16ビットデータのそれぞれを“0x1234”、“0x5678”とし、乗算すべきもう一方の16ビットデータを全て“0x8888”とすると、D0レジスタには“0x0000000012345678”、D1レジスタには“0x0000000088888888”が予め格納されていることになる。
【0246】
図15は16×2SIMD2数乗算演算時の各レジスタの内容を示す図である。
(1)動作タイミング1
・EXステージ、
関知しない。
・DECステージ、
関知しない。
・IFステージ:MUL命令、
2数乗算命令“MUL D0,D1”がROM1からフェッチされ、IR2に格納される。
(2)動作タイミング2
・EXステージ、
関知しない。
・DECステージ:MUL命令、
IR2に格納された2数乗算命令“MUL D0,D1”がDEC31により解読される。解読された結果として32ビットデータの2数乗算操作を実行すべきであることが判明する。この解読に基づいてDOレジスタの内容“0x0000000012345678”が読み出されBR33に格納され、またD1レジスタの内容“0x0000000088888888”が読み出されAR32に格納される。
・IFステージ:SIMD16命令、
SIMD補正命令“SIMD16 D1”がROM1からフェッチされ、IR2に格納される。
(3)動作タイミング3(構成次第では数クロック必要となるので、このような場合は動作タイミング3〜3+αとする。)
・EXステージ:MUL命令、
動作タイミング2においてDEC31により解読された結果に基づき、ALU34において、BR33の内容をA入力としAR32の内容をB入力として、A入力とB入力とを乗算する符号なし64ビット乗算が行われ、演算結果“0x09B58373297DAFC0”がレジスタファイル4のD1レジスタに格納される。
【0247】
また、8ビット補正データ及び16ビット補正データを生成する。
なお、ここでの演算方法、8ビット補正データ及び16ビット補正データの生成方法は動作例1と同じなので、詳細な説明は省略する。
・DECステージ:SIMD16命令、
IR2に格納されたSIMD補正命令“SIMD16 D1”がDEC31により解読される。解読された結果として16ビットデータの2並列のSIMD補正操作を実行すべきであることが判明する。この解読に基づいて、EXステージで書込まれるD1レジスタの内容“0x09B58373297DAFC0”が読み出されてAR32に格納され、またEXステージで書込まれるCR36の内容である16ビット補正データ“0x000037D2FB600000”が読み出されBR33に格納される。
・IFステージ、
関知しない。
(4)動作タイミング4(動作タイミング3〜3+αの場合は動作タイミング4+α)
・EXステージ:SIMD16命令、
動作タイミング3(又は動作タイミング3+α)においてDEC31により解読された結果に基づき、ALU34において、BR33の内容をA入力としAR32の内容をB入力として、A入力とB入力とに対して減算演算を行い、演算結果“0x”をD1レジスタに格納する。
【0248】
Figure 0003779602
この演算結果“0x09B54BA02E1DAFC0”を16ビット毎に2個に分割した“0x09B54BA0”及び“0x2E1DAFC0”は、D0レジスタとD1レジスタとに予め格納されていた内容をそれぞれ16ビットデータ2個とし、対応する符号なし16ビットデータ同志を2数乗算するSIMD演算結果となる。
【0249】
以下に、上記SIMD演算結果を示す。
Figure 0003779602
・DECステージ、
関知しない。
・IFステージ、
関知しない。
【0250】
以上のように、本発明の実施の形態3のプロセッサは、演算の種別数によらないSIMD8及びSIMD16というデータ幅の種別数によるSIMD補正命令を従来の命令に追加して実装するだけで複数の演算の種別に対するSIMD演算を実行することができるので、命令数の増加を飛躍的に抑えることができる。
なお、実施の形態1〜2では、ALU8又はALU21による演算命令実行時に、演算結果の7つのビット位置からの桁上げの有無を用いて演算の種類別に桁上げ情報を生成してCR9に保持させており、また実施の形態3では、ALU34による演算命令実行時に、補正データを生成してCR35及びCR36させているが、必ずしも演算命令実行時に桁上げ情報や補正データを生成しなくてもよい。例えば、実施の形態1〜2においてはALU8又はALU21による演算命令実行時には7つのビット位置(C7、C15、C23、C31、C39、C47、C55)からの桁上げの結果と演算の種類(ADD、SUB、INC及びDEC等)とを記録しておき、SIMD補正命令実行時に記録しておいた内容に基づいて桁上げ情報を生成したり、また、実施の形態3においてはALU34による演算命令実行時には補正データの元になるデータと演算の種類とを記録しておき、SIMD補正命令実行時に記録しておいた内容に基づいて補正データを生成してもよい。
【0251】
図16は、演算命令実行時には桁上げの結果と演算の種類とを記録しておき、SIMD補正命令実行時に桁上げ情報を生成するSIMD演算装置の構成を示す図である。
図16に示すSIMD演算装置40は、図1に示すSIMD演算装置10のALU8の代わりにALU41を、EXT5の代わりにEXT42を、CR9の代わりにCR43及びOPR44を備える。
【0252】
ALU41は64ビット幅の加減算器であり、AR6の内容とBR7の内容とをそれぞれA入力とB入力として、演算命令実行時にはA+Bの加算又はA−Bの減算を行い演算結果をレジスタに保持させると共に、桁上げの結果をCR43に、演算の種類をOPR44に保持させ、また、SIMD補正命令実行時にはEXT42により生成される桁上げ情報に基づいて当該演算結果を各SIMD演算結果に補正する。
【0253】
EXT42は桁上げ情報生成器兼拡張器であり、8ビットSIMD補正命令がIR2により解読された結果としてCR43に格納された桁上げの結果とOPR44に格納された演算の種類とから8ビット用の桁上げ情報を生成し、16ビットSIMD補正命令がIR2により解読された結果としてCR43に格納された桁上げの結果を16ビット符号拡張したものとOPR44に格納された演算の種類とから16ビット用の桁上げ情報を生成し、32ビットSIMD補正命令がIR2により解読された結果としてCR43に格納された桁上げの結果を32ビット符号拡張したものとOPR44に格納された演算の種類とから32ビット用の桁上げ情報を生成し、BR7に格納する。
【0254】
CR43は、演算命令実行時に桁上げの結果を保持する少なくとも7ビットのレジスタである。
OPR44は、演算命令実行時に演算の種類を保持するレジスタである。
また、CR9、CR35、CR36、CR43及びOPR44の内容を割込み受付時や他のコンテキスト切り換え時等にメモリ等に退避し、割込みからの復帰時や元のコンテキスト切り換え時等にこれらを復元する機能を追加することにより、演算命令とSIMD補正命令との間で矛盾なく割込みを受付けることができ、またリアルタイム性を維持したままでマルチタスク処理に対応させること等が可能となる。
【0255】
また各実施の形態では、ADD、SUB、INC、DEC、MUL及びDIV等の演算命令にSIMD補正命令を対応させているが、SIMD補正命令によるSIMD演算とSIMD専用命令によるSIMD演算とを混在させてもよい。例えば、SIMD補正命令に対応するのはADDとSUBの2つの命令とし、1加算および1減算は専用のSIMD専用命令を実装してもよい。
【0256】
例えば1加算SIMD専用命令は、INCS8(8ビットデータの8並列実行)、INCS16(16ビットデータの4並列実行)及びINCS32(32ビットデータの2並列実行)とし、1減算SIMD専用命令は、DECS8(8ビットデータの8並列実行)、DECS16(16ビットデータの4並列実行)及びDECS32(32ビットデータの2並列実行)とすればよい。
【0257】
このような場合においても、4つの演算の全てについてSIMD専用命令を実装する場合と比べて、総命令数を3命令分少なくすることができる。
以下に、図1に示す各構成要素を用いて、INCS8命令の動作例を説明する。
(1)INCS8命令がDEC3により解読されると、命令でオペランド指定されるレジスタがレジスタファイル4から読み出されてAR6に保持されると同時に、値0x0101010101010101がBR7に保持される。
(2)続いてALU8においてAR6の内容とBR7の内容とが加算される。このとき、ビット位置7からビット位置8への桁上げ伝播、ビット位置15からビット位置16への桁上げ伝播、ビット位置23からビット位置24への桁上げ伝播、ビット位置31からビット位置32への桁上げ伝播、ビット位置39からビット位置40への桁上げ伝播、ビット位置47からビット位置48への桁上げ伝播、及び、ビット位置55からビット位置56への桁上げ伝播が切断され、ALU8からの演算結果は命令語により指定されるレジスタに格納される。
【0258】
INCS8以外のSIMD専用命令については、BR7に保持される値が、DECS8ではINCS8と同様、INCS16とDECS16とでは0x0001000100010001、INCS32とDECS32とでは0x0000000100000001であり、ALU8における演算が、INCS16とINCS32とではINCS8と同様、DECS8とDECS16とDECS32とでは減算であり、桁上げ伝播の切断の箇所が、DECS8ではINCS8と同様、INCS16とDECS16とではビット位置15からビット位置16への桁上げ伝播とビット位置31からビット位置32への桁上げ伝播とビット位置47からビット位置48への桁上げ伝播とを切断、INCS32とDECS32とではビット位置31からビット位置32への桁上げ伝播を切断であり、その他の動作はINCS8と同様である。
【0259】
このように1加算および1減算のSIMD専用命令を実装することにより、複数のアドレスを同時に一括して増減したり複数の画像データの輝度や色調を同時に一括して制御するという用途が高速に実現できる。
また各実施の形態のSIMD演算装置は、64ビットの加減算器等の演算器を用いて8ビットデータの8並列演算と、16ビットデータの4並列演算と、32ビットデータの2並列演算との3種類のSIMD演算を実装しているが、もっと多くの種類のSIMD演算を実装してもよいし、一部のSIMD演算だけを実装してもよい。例えば、演算器を32ビットとして8ビットデータの4並列演算及び16ビットデータの2並列演算を実装してもよいし、演算器を128ビットとして8ビットデータの16並列演算、16ビットデータの8並列演算、32ビットデータの4並列演算及び64ビットデータの2並列演算の全部、又は、一部を実装してもよい。
【0260】
また上記のいずれの場合であっても、実装するSIMD演算の最小のデータ幅ごとに対応する桁上げ情報を演算実行時に記録することとする。例えば、SIMD演算の最小データ幅が16ビットの場合には、桁上げC15, C31, C47,,,C(16n-1)に基づいて桁上げ情報を生成する。
また各実施の形態では、桁上げ情報の下位8ビットは常に0であり補正に用いられないので、下位8ビットは保持しなくてもよい。
【0261】
また各実施の形態のSIMD演算装置では1マシンサイクルに1命令を処理するシングルスカラアーキテクチャ方式を採っているが、1マシンサイクルに複数の命令を処理するスーパースカラアーキテクチャ方式やVLIW(Very Long Instruction Word、長語命令)アーキテクチャ方式を採るものであってもよい。
また、各実施の形態のプロセッサは、命令フェッチ、解読、実行の3段パイプラインで構成されるとしているが、パイプラインの段数は何段であってもよいし、パイプライン構成を採らなくてもよい。
(実施の形態4)
<概要>
本発明の実施の形態4は、SIMD演算命令を、非並列演算用の演算命令と、非並列演算用の演算命令の演算結果からSIMD演算命令の演算結果へ補正する補正命令とで実現する実施の形態1〜3のプロセッサ用の機械語命令プログラムを生成するコンパイラ装置である。
【0262】
<構成>
図17は、本実施の形態4に係るコンパイラ装置の構成を示す図である。
図17が示すコンパイラ装置100は、ファイル読込み部101、読込み用バッファ102、構文解析部103、中間コード用バッファ104、機械語命令生成部105、出力用バッファ106、及び、ファイル出力部107を備える。
【0263】
ファイル読込み部101は、ハードディスク等の外部記録媒体に記録されたC言語プログラムのファイルを読込み用バッファ102に読込む。
図18は、読込み用バッファ102に読込まれるC言語プログラムの一例を示す図である。
図18に示すC言語プログラムは、データの配列の型がchar型である配列変数a[i]、配列変数b[i]、及び、配列変数c[i]において、配列変数a[i]と配列変数b[i]との和を求め、その結果を配列変数c[i]に格納するループであり、ここではiの値が0から63までなので64個の配列が操作されている。
【0264】
構文解析部103は、読込み用バッファ102に読込みまれたC言語プログラムの構文を解析して中間コードプログラムを生成し、中間コード用バッファ104に書き込む。ここで中間コードプログラムとは、プロセッサに依存しない形式の中間コードからなるプログラムであり、ここではSIMD演算を示す中間コードを含まない。
【0265】
図19は、図18に示すC言語プログラムから生成される中間コードプログラムの一例を示す図である。
図19に示す中間コードプログラム中の各中間コードについて、以下に説明する。
(中間コード1)
変数iに0を代入する。
【0266】
(中間コード2)
char型の配列変数aのi番目と、char型の配列変数bのi番目とを加算し、その結果をchar型の配列変数cのi番目に格納する。
(中間コード3)
変数iの値を1増加させる。
【0267】
(中間コード4)
変数iから64を減算した結果により各フラグの値が更新される。
(中間コード5)
各フラグの値により、前記結果が「0以下」を示す場合、つまり中間コード4において、「i−64≦0」であった場合に、中間コード2へ分岐する。
機械語命令生成部105は、中間コード用バッファ104に格納された中間コードプログラムを入力として、SIMD演算を示す機械語命令を含む機械語命令プログラムを生成し、出力用バッファ106に書き込む。ここで機械語命令プログラムとは、プロセッサに依存する形式の機械語命令からなるプログラムであり、ここではSIMD演算を示す機械語命令を含む。
【0268】
ファイル出力部107は、出力用バッファ106に格納された機械語命令プログラムをハードディスク等の外部記録媒体に出力する。
図20は、機械語命令生成部105の詳細な構成を示す図である。
図20に示す機械語命令生成部105は、SIMD演算抽出部110、SIMD中間コード生成部111、及び、機械語命令出力部112を備える。
【0269】
SIMD演算抽出部110は、中間コード用バッファ104から入力される中間コードプログラムを走査して、配列の操作を行うべき中間コードを検索し、変形中間コードプログラムを生成する。ここで変形中間コードプログラムとは、中間コードプログラム中のデータの配列の操作行う中間コードを、データの配列の型に応じた所定数毎にまとめたSIMD演算を示す変形中間コードに変換したプログラムである。
【0270】
図21は、図19に示す中間コードプログラムから生成される変形中間コードプログラムの一例を示す図である。
図21に示す変形中間コードプログラム中の各変形中間コードについて、以下に説明する。
(変形中間コード1)
変数iに0を代入する(中間コード1と同じ)。
【0271】
(変形中間コード2)
char型の配列変数aのi番目から(i+7)番目までの8個の配列要素と、char型の配列変数bのi番目から(i+7)番目までの8個の配列要素とを加算し、その結果をchar型の配列変数cのi番目から(i+7)番目までの8個の配列要素に格納する。
【0272】
(変形中間コード3)
変数iの値を8増加させる。
(変形中間コード4)
変数iから64を減算した結果により各フラグの値が更新される(中間コード4と同じ)。
【0273】
(変形中間コード5)
各フラグの値により、前記結果が「0以下」を示す場合、つまり変形中間コード4において、「i−64≦0」であった場合に、変形中間コード2へ分岐する。
SIMD中間コード生成部111は、SIMD演算抽出部110により生成された変形中間コードプログラムを用いてSIMD中間コードプログラムを生成する。ここでSIMD中間コードプログラムとは、SIMD演算を示す中間コードを含むSIMD中間コードプログラムである。
【0274】
図22は、図21に示す変形中間コードプログラムから生成されるSIMD中間コードプログラムの一例を示す図である。
図22に示すSIMD中間コードプログラム中の各中間コードについて、以下に説明する。
(SIMD中間コード1)
変数iに0を代入する(中間コード1、変形中間コード1と同じ)。
【0275】
(SIMD中間コード2)
変形中間コード2におけるchar型の配列変数aの8個の配列要素の読み出しに相当し、ポインタAが示すメモリ領域から64ビット分のデータを取り出して変数aに格納する。
(SIMD中間コード3)
変形中間コード2におけるchar型の配列変数bの8個の配列要素の読み出しに相当し、ポインタBが示すメモリ領域から64ビット分のデータを取り出して変数bに格納する。
【0276】
(SIMD中間コード4)
変形中間コード2におけるchar型の配列変数aの8個の配列要素とchar型の配列変数bの8個の配列要素との加算に相当し、変数aと変数bとを8ビットずつSIMD加算し、結果を変数cに格納する。
(SIMD中間コード5)
変形中間コード2におけるchar型の配列変数cの8個の配列要素の書き込みに相当し、変数cをポインタCが示すメモリ領域の64ビット分に書き込む。
【0277】
(SIMD中間コード6)
変形中間コード3における変数iの値の増加に伴う配列変数a用のポインタAの増加に相当し、ポインタAの値を8増加させる。
(SIMD中間コード7)
変形中間コード3における変数iの値の増加に伴う配列変数b用のポインタBの増加に相当し、ポインタBの値を8増加させる。
【0278】
(SIMD中間コード8)
変形中間コード3における変数iの値の増加に伴う配列変数c用のポインタCの増加に相当し、ポインタCの値を8増加させる。
(SIMD中間コード9)
変数iの値を8増加させる(変形中間コード3と同じ)。
【0279】
(SIMD中間コード10)
変数iから64を減算した結果により各フラグの値が更新される(中間コード4、変形中間コード4と同じ)。
(SIMD中間コード11)
各フラグの値により、前記結果が「0以下」を示す場合、つまりSIMD中間コード4において、「i−64≦0」であった場合に、SIMD中間コード2へ分岐する。
機械語命令出力部112は、SIMD中間コード生成部111により生成されたSIMD中間コードプログラムを用いて、SIMD演算を示す機械語命令を含む機械語命令プログラムを生成する。
【0280】
図23は、図22に示すSIMD中間コードプログラムから生成される機械語命令プログラムの一例を示す図である。
図23に示す機械語命令プログラム中の各機械語命令について、以下に説明する。
(機械語命令1)
SIMD中間コード1に対応し、SIMD中間コード1における変数iをレジスタD0に割り付け、レジスタD0の内容からレジスタD0の内容を減算することにより、レジスタD0の内容をクリアして0にする。
【0281】
(機械語命令2)
SIMD中間コード2に対応し、SIMD中間コード2におけるポインタAをレジスタD1に割り付け、変数aをレジスタD2に割り付け、レジスタD1の内容により示される64ビットのメモリ領域からデータをロードしてレジスタD2に格納する。
【0282】
(機械語命令3)
SIMD中間コード3に対応し、SIMD中間コード3におけるポインタBをレジスタD3に割り付け、変数bをレジスタD4に割り付け、レジスタD3の内容により示される64ビットのメモリ領域からデータをロードしてレジスタD4に格納する。
【0283】
ここでSIMD中間コード4は、通常の演算命令である機械語命令4と、通常の演算命令の演算結果をSIMD演算の結果に補正するSIMD補正命令である機械語命令5とに分解される。
(機械語命令4)
SIMD中間コード4の前半部に対応し、SIMD中間コード4における変数cをレジスタD4に割り付け、レジスタD2の内容とレジスタD4の内容とを加算して、その結果をレジスタD4に格納すると共に、加算時の8ビット毎の桁上げ情報を暗黙に決められている暗黙レジスタに格納する。
【0284】
(機械語命令5)
SIMD中間コード4の後半部に対応し、機械語命令4において暗黙レジスタに格納されている桁上げ情報を用いて、レジスタD4の内容を8ビット毎に補正して、8ビットのSIMD加算結果を得て、これをレジスタD4に格納する。
(機械語命令6)
SIMD中間コード5に対応し、SIMD中間コード5におけるポインタCをレジスタD5に割り付け、レジスタD4の内容をレジスタD5の内容により示される64ビットのメモリ領域にストアする。
【0285】
(機械語命令7)
SIMD中間コード6に対応し、レジスタD1の内容を8増加させる。
(機械語命令8)
SIMD中間コード7に対応し、レジスタD3の内容を8増加させる。
(機械語命令9)
SIMD中間コード8に対応し、レジスタD5の内容を8増加させる。
【0286】
(機械語命令10)
SIMD中間コード9に対応し、レジスタD0の内容を8増加させる。
(機械語命令11)
SIMD中間コード10に対応し、レジスタD0の内容から64を減算した結果により各フラグの値が更新される。
【0287】
(機械語命令12)
SIMD中間コード11に対応し、各フラグの値により、前記結果が「0以下」を示す場合、つまりゼロフラグ(Z)、オーバーフローフラグ(V)、及び、ネガティブフラグ(N)との関係において、「Z or (V xor N)=1」を満たす場合に、10個前の命令である機械語命令2に分岐する。
【0288】
なお、上記各プログラム例においては、演算対象であるデータの配列の型がchar型である8ビットデータの場合を例にとって説明し、当該データを8個毎にまとめ64ビットとしたが、当該配列の型はchar型以外であってもよい、例えば、short型である16ビットデータの場合には当該データを4個毎にまとめ64ビットとし、int型である16ビットデータの場合には当該データを2個毎にまとめ64ビットとする。
【0289】
<動作>
図24は、SIMD演算抽出部110が行う変形中間コードプログラムを生成する処理の動作の概要を示す図である。
当該処理は、演算対象であるデータの配列の型が、char型、short型、及び、int型の何れであるかに応じて、データの操作を、それぞれ8つ、4つ、及び、2つ毎にまとめるものである。ここで、対象プロセッサは1つの演算命令でデータ幅が64ビットのデータを一度に演算することができるものとし、char型のデータは8ビット、short型のデータは16ビット、int型のデータは32ビットのデータ幅であるものとする。
【0290】
以下に図24を用いて、変形中間コードプログラムを生成する処理の概要を説明する。
(1)中間コード用バッファ104に格納された中間コードプログラム中に未処理の中間コードが在るか否かを判定する(ステップS1)。未処理の中間コードが無い場合は、当該処理を終了する。
(2)未処理の中間コードが在る場合は、未処理の中間コードの1行を処理対象コードとし、処理対象コードが配列の操作を行うものであるか否かを判定する(ステップS2)。処理対象コードが配列の操作を行うものでない場合は、残りの中間コードを処理するために戻る。
(3)処理対象コードが配列の操作を行うものである場合は、処理対象コードがchar型のデータの配列の操作を行うものであるか否かを判定する(ステップS3)。
(4)処理対象コードがchar型のデータの配列の操作を行うものである場合は、他のchar型のデータの配列の操作を行う処理対象コードを検索し、8つ毎にまとめてchar型用変形中間コードに変換し、残りの中間コードを処理するために戻る(ステップS4)。
(5)処理対象コードがchar型のデータの配列の操作を行うものでない場合は、処理対象コードがshort型のデータの配列の操作を行うものであるか否かを判定する(ステップS5)。
(6)処理対象コードがshort型のデータの配列の操作を行うものである場合は、他のshort型のデータの配列の操作を行う処理対象コードを検索し、4つ毎にまとめてshort型用変形中間コードに変換し、残りの中間コードを処理するために戻る(ステップS6)。
(7)処理対象コードがshort型のデータの配列の操作を行うものでない場合は、処理対象コードがint型のデータの配列の操作を行うものであるか否かを判定する(ステップS7)。
(8)処理対象コードがint型のデータの配列の操作を行うものである場合は、他のint型のデータの配列の操作を行う処理対象コードを検索し、2つ毎にまとめてint型用変形中間コードに変換し、残りの中間コードを処理するために戻る(ステップS8)。
(9)処理対象コードがint型のデータの配列の操作を行うものでない場合は、処理対象コードがlong型のデータの配列の操作を行うものであるとして、何もせずに、残りの中間コードを処理するために戻る(ステップS9)。
【0291】
以上のように、本発明の実施の形態4のコンパイラ装置は、従来のSIMD演算を通常の演算命令とSIMD補正命令とに分解することができるので、実施の形態1〜3のような各プロセッサに対応する機械語命令プログラムを生成することができ、さらには、演算の種別によらずにデータ幅の種別数によるSIMD補正命令を従来の命令に追加して実装するだけで複数の演算の種別に対するSIMD演算を実行することができるので、命令数の増加を飛躍的に抑えることができる分だけ命令語長が短くなり、プログラムのコードサイズを縮小することができる。
【0292】
ここで実施の形態4では、C言語プログラムを機械語命令プログラムに翻訳するコンパイラ装置を開示しているが、翻訳される方のプログラムはC言語プログラムに限られず高級言語プログラムであれば何であってもよく、また、翻訳した結果生成される方のプログラムは機械語命令プログラムに限られず、当該高級言語プログラムよりも高級ではないプログラムであれば何であってもよい。さらには、本発明ではSIMD演算に相当する部分を通常の演算命令とSIMD補正命令とに分解するような変換をすれば足りるので、必ずしもプログラム言語全体を翻訳しなくてもよい。例えば、SIMD演算に相当する構文を含む高級言語プログラムを、当該構文の代わりに演算命令及びSIMD補正命令を含む同一又は他の高級言語プログラムに変換するプログラム変換装置であってもよいし、SIMD演算命令を含む機械語命令プログラムを、当該SIMD演算命令の代わりに演算命令及びSIMD補正命令を含む同一又は他の機械語命令プログラムに変換するプログラム変換装置であってもよい。
【0293】
なお、本発明の実施の形態4の各プログラムがコンピュータ読み取り可能な記録媒体に記録されて流通したり、ネットワークで直接転送されたりして、取り引きの対象となりうる。
また、コンピュータに本発明の実施の形態1〜4のような動作を実行させることができるプログラムが、コンピュータ読み取り可能な記録媒体に記録されて流通したり、ネットワークで直接転送されたりして、取り引きの対象となりうる。
【0294】
ここでコンピュータ読み取り可能な記録媒体とは、例えば、フレキシブルディスク、CD、MO、DVD、メモリーカード等の着脱可能な記録媒体、ハードディスク、半導体メモリ等の固定記録媒体等であり、特に限定されるものではない。
【0295】
【発明の効果】
本発明に係る演算方法は、Nを2以上の整数としMを1以上の整数とする時、MビットのオペランドN個に対して並列に演算を施してMビットの演算結果をN個得る処理をコンピュータに実行させる演算方法であって、前記MビットのオペランドN個を連結したN×Mビットを1個の仮オペランドとして前記演算を施すことによってN×Mビットの仮演算結果を1個得ると共に当該仮演算結果のMビット毎の前記演算によって及ぼされる各隣接桁からの影響に基づいて補正情報を生成する演算ステップと、前記Mビットの演算結果をN個得る場合に前記仮演算結果をMビット単位で前記補正情報を用いて補正する補正ステップとを備えることを特徴とする。
【0296】
これによって、N個のMビットオペランドをまとめて演算して、補正情報を用いて補正することによってN個のMビット演算結果を得ることができ、膨大な量のデータに同じ演算を施す場合に時間を大幅に短縮できる。
また、当該演算方法を用いるプロセッサにおいては、演算用の命令は既存演算とSIMD演算とで共有でき、補正用の命令は演算の種類に依存しないので、命令数が演算の種類毎に増えないため、従来のSIMD演算命令を実装する場合に較べて、機械語命令のビット割付を圧迫したり、命令デコーダ回路が大規模化してコスト及び消費電力の増加を招くことが少ない。
【0297】
従って、命令数の増加を抑えつつSIMD演算を実装することができる。
また、演算方法において、前記補正ステップは、前記仮演算結果のうちの最下位のMビットを除く部分を補正することを特徴とすることもできる。
これによって、仮演算結果のうちの最下位のMビットを除く部分を補正することができるので、キャリーフラグを用いた前の演算からの桁上がりを考慮しない場合において、演算によって影響を及ぼされることのない最下位のMビットを補正しないで済む。
【0298】
また、演算方法は、さらに、Pを2以上且つN/2以下の整数とする時、M×PビットのオペランドN/P個に対して並列に前記演算を施してM×Pビットの演算結果をN/P個得ることができ、前記演算ステップは前記MビットのオペランドN個を、又は、前記N×PビットのオペランドN/P個を連結したN×Mビットを1個の仮オペランドとして、前記演算を施すことによってN×Mビットの仮演算結果を1個得ると共に前記補正情報を生成し、前記補正ステップは前記M×Pビットの演算結果をN/P個得る場合に前記仮演算結果をM×Pビット単位で前記補正情報中のM×Pビット毎の影響に対応する部分のみを用いて補正することを特徴とすることもできる。
【0299】
これによって、さらに、N/P個のM×Pビットオペランドをまとめて演算して、補正情報中のM×Pビット毎の対応する部分のみを用いて補正することによって、前記N/P個のM×Pビット演算結果を得ることができる。
また、当該演算方法を用いるプロセッサにおいては、演算用の命令は既存演算とSIMD演算とで共有でき、各データ幅の種別毎の補正用の命令は演算の種類に依存しないので、命令数が演算の種類とデータ幅の種別数の積では決まらず命令数が飛躍的に増えないため、従来のSIMD演算命令を実装する場合に較べて、機械語命令のビット割付を圧迫したり、命令デコーダ回路が大規模化してコスト及び消費電力の増加を招くことが極めて少ない。
【0300】
従って、命令数の飛躍的な増加を抑えつつSIMD演算を実装することができる。また、演算方法において、前記Nは8であり前記Mは8であり前記Pは2、4又は2と4の両方であること、あるいは、前記Nは4であり前記Mは16であり前記Pは2であることを特徴とすることもできる。
これによって、64ビットマイクロプロセッサにおいて、8個の8ビットオペランド、4個の16ビットオペランド、又は、2個の32ビットオペランドをまとめて演算して、補正情報中の対応する8ビット、16ビット、又は、32ビット毎に補正することによって、8個の8ビット演算結果、4個の16ビット演算結果、又は、2個の32ビット演算結果を得ることができる。
【0301】
また、演算方法において、前記演算には複数の種類があり、前記演算ステップは、Lを0からN−1までのN個の整数とし最下位桁を1番目の桁とする時、Mビット毎に前記演算の種類と前記演算によって各M×L番目の桁から各M×L+1番目の桁への桁上げの有無とに基づいて各M×L+1番目の桁が0及び1のいずれかである、又は、0及び−1のいずれかである補正情報を生成し、前記補正ステップは、前記Mビットの演算結果をN個得る場合に前記演算の種類に関わらず前記仮演算結果にMビット単位で前記補正情報を加算又は減算することを特徴とすることもできる。
【0302】
これによって、演算の種類と、Mビット毎の各桁の桁上げの有無とに基づいて、Mビット毎に0及び1のいずれかである、又は、0及び−1のいずれかである補正情報を生成し、仮演算結果にMビット単位で補正情報を加算及び減算のいずれかを施すことによってN個のMビット演算結果を得ることができる。
また、演算方法において、前記演算の種類は1加算、1減算、ニ数加算、及び、ニ数減算のうちの少なくとも1つを含み、前記演算ステップは、前記演算の種類が1加算である時には桁上げが無かったM×L+1番目の桁を−1桁上げが有ったM×L+1番目の桁を0とする補正情報を生成し、前記演算の種類が1減算である時には桁上げが無かったM×L+1番目の桁を0桁上げが有ったM×L+1番目の桁を1とする補正情報を生成し、前記演算の種類がニ数加算である時には加算すべき一方のMビットのオペランドN個を連結したN×Mビットを一方の1個の仮オペランドとし加算すべき他方のMビットのオペランドN個を連結したN×Mビットを他方の1個の仮オペランドとしてこれら2個の仮オペランドをニ数加算することによってN×Mビットの仮演算結果を1個得ると共に桁上げが無かったM×L+1番目の桁を0桁上げが有ったM×L+1番目の桁を1とする補正情報を生成し、前記演算の種類がニ数減算である時には減算されるべきMビットのオペランドN個を連結したN×Mビットを減算されるべき1個の仮オペランドとし減算すべきMビットのオペランドN個を連結したN×Mビットを減算すべき1個の仮オペランドとしてこれら2個の仮オペランドをニ数減算することによってN×Mビットの仮演算結果を1個得ると共に桁上げが無かったM×L+1番目の桁を−1桁上げが有ったM×L+1番目の桁を0とする補正情報を生成し、前記補正ステップは、前記Mビットの演算結果をN個得る場合に前記仮演算結果からMビット単位で前記補正情報を減算することを特徴とすることもできる。
【0303】
これによって、演算の種類が1加算である時、及び、ニ数減算である時には、桁上げが無かったM×L+1番目の桁を−1、桁上げが有ったM×L+1番目の桁を0とする補正情報を生成し、演算の種類が1減算である時、及び、ニ数加算である時には、桁上げが無かったM×L+1番目の桁を0、桁上げが有ったM×L+1番目の桁を1とする補正情報を生成し、仮演算結果からMビット単位で補正情報を減算することによって、前記N個のMビット演算結果を得ることができる。
【0304】
また、演算方法において、前記演算の種類は1加算、1減算、ニ数加算、及び、ニ数減算のうちの少なくとも1つを含み、前記演算ステップは、前記演算の種類が1加算である時には桁上げが無かったM×L+1番目の桁を1桁上げが有ったM×L+1番目の桁を0とする補正情報を生成し、前記演算の種類が1減算である時には桁上げが無かったM×L+1番目の桁を0桁上げが有ったM×L+1番目の桁を−1とする補正情報を生成し、前記演算の種類がニ数加算である時には加算すべき一方のMビットのオペランドN個を連結したN×Mビットを一方の1個の仮オペランドとし加算すべき他方のMビットのオペランドN個を連結したN×Mビットを他方の1個の仮オペランドとしてこれら2個の仮オペランドをニ数加算することによってN×Mビットの仮演算結果を1個得ると共に桁上げが無かったM×L+1番目の桁を0桁上げが有ったM×L+1番目の桁を−1とする補正情報を生成し、前記演算の種類がニ数減算である時には減算されるべきMビットのオペランドN個を連結したN×Mビットを減算されるべき1個の仮オペランドとし減算すべきMビットのオペランドN個を連結したN×Mビットを減算すべき1個の仮オペランドとしてこれら2個の仮オペランドをニ数減算することによってN×Mビットの仮演算結果を1個得ると共に桁上げが無かったM×L+1番目の桁を1桁上げが有ったM×L+1番目の桁を0とする補正情報を生成し、前記補正ステップは、前記Mビットの演算結果をN個得る場合に前記仮演算結果にMビット単位で前記補正情報を加算することを特徴とすることもできる。
【0305】
これによって、演算の種類が1加算である時、及び、ニ数減算である時には、桁上げが無かったM×L+1番目の桁を1、桁上げが有ったM×L+1番目の桁を0とする補正情報を生成し、演算の種類が1減算である時、及び、ニ数加算である時には、桁上げが無かったM×L+1番目の桁を0、桁上げが有ったM×L+1番目の桁を−1とする補正情報を生成し、仮演算結果からMビット単位で補正情報を加算することによって、前記N個のMビット演算結果を得ることができる。
【0306】
また、演算方法において、前記演算には複数の種類があり、前記演算ステップは、さらに、前記演算の種類を保持し、前記補正ステップは、前記仮演算結果を前記演算ステップにおいて保持された演算の種類に応じて補正することを特徴とすることもできる。
これによって、演算の際に演算の種類を保持し、仮演算結果を、保持した演算の種類に応じて補正することができるので、演算の種類を考慮せずに補正情報を生成することができる。
【0307】
また、演算方法において、前記演算ステップは、前記演算によって各下位桁から各上位桁へ及ぼされた桁上げの有無を補正情報として生成することを特徴とすることもできる。
これによって、演算の種類を保持すると共に、各下位桁から各上位桁へ及ぼされた桁上げの有無を補正情報として保持することができるので、後で、保持した補正情報を保持した演算の種類に応じて変換することにより、仮演算結果を正しく補正することができる。
【0308】
また、演算方法において、前記演算の種類は1加算、1減算、ニ数加算、及び、ニ数減算のうちの少なくとも1つを含み、前記補正ステップは、前記Mビットの演算結果をN個得る場合であってLを0からN−1までのN個の整数とし最下位桁を1番目の桁とする時、前記演算ステップにおいて保持された演算の種類が、1加算、及び、ニ数減算のいずれかである場合には前記演算ステップにより生成された補正情報に基づいて前記仮演算結果の桁上げが無かったM×L+1番目の桁に1を加算し、前記演算ステップにおいて保持された演算の種類が1減算、及び、ニ数加算のいずれかである場合には前記演算ステップにより生成された補正情報に基づいて前記仮演算結果の桁上げが有ったM×L+1番目の桁から1を減算することを特徴とすることもできる。
【0309】
これによって、保持された演算の種類が1加算である時、及び、ニ数減算である場合には桁上げが無かったM×L+1番目の桁に1を加算し、保持された演算の種類が1減算である場合には桁上げが有ったM×L+1番目の桁から1を減算することにより、保持された演算の種類に応じて仮演算結果を正しく補正することができる。
【0310】
本発明に係る演算方法は、Nを2以上の整数とする時、N個のオペランドに対して並列に演算を施してN個の演算結果を得る処理をコンピュータに実行させる演算方法であって、前記N個のオペランドを連結して1個の仮オペランドとして前記演算を施すことによって前記演算結果のN倍の大きさの仮演算結果を1個得ると共に当該仮演算結果と前記N個の演算結果を連結した1個の仮演算結果との差分に相当する補正情報を生成する演算ステップと、前記N個の演算結果を得る場合に前記仮演算結果を前記補正情報を用いて補正しN個に分割する補正ステップとを備えることを特徴とする。
【0311】
これによって、N個のオペランドをまとめて演算して、補正情報を用いて補正することによってN個の演算結果を得ることができ、膨大な量のデータに同じ演算を施す場合に時間を大幅に短縮できる。
また、当該演算方法を用いるプロセッサにおいては、演算用の命令は既存演算とSIMD演算とで共有でき、補正用の命令は演算の種類に依存しないので、命令数が演算の種類毎に増えないため、従来のSIMD演算命令を実装する場合に較べて、機械語命令のビット割付を圧迫したり、命令デコーダ回路が大規模化してコスト及び消費電力の増加を招くことが少ない。
【0312】
従って、命令数の増加を抑えつつSIMD演算を実装することができる。
また、演算方法において、Mを1以上の整数とする時、前記オペランドのビット長はMビットであり前記演算結果のビット長はM×2ビットであり、前記演算ステップは、前記N個のオペランドを連結したN×Mビットを1個の仮オペランドとして前記演算を施すことによってN×M×2ビットの仮演算結果を1個得ると共に当該仮演算結果のM×2ビット毎の前記演算によって及ぼされる他のM×2ビットからの影響に基づいて補正情報を生成することを特徴とすることもできる。
【0313】
これによって、N個のMビットオペランドをまとめて演算して、補正情報を用いて補正することによってN個のM×2ビット演算結果を得ることができる。
また、演算方法は、さらに、Pを2以上、且つ、N/2以下の整数とする時、M×PビットのオペランドN/P個に対して並列に前記演算を施してM×P×2ビットの演算結果をN/P個得ることができ、前記演算ステップは、前記MビットのオペランドN個、又は、前記N×PビットのオペランドN/P個を連結したN×Mビットを1個の仮オペランドとして、前記演算を施すことによってN×M×2ビットの仮演算結果を1個得ると共に、Lを1からN−1までのN−1個の整数とし最下位桁を1番目の桁とする時、M×2ビット毎に前記演算によって各M×2×L番目の桁以下と各M×2×L+1桁番目の以上との間で及ぼしあうN−1個の影響に基づいて第1補正情報を生成しM×2×Pビット毎に前記演算によって各M×2×P×L番目の桁以下とM×2×L+1番目の桁以上との間で及ぼしあうN/P−1個の影響に基づいて第2補正情報を生成し、前記補正ステップは、前記M×2ビットの演算結果をN個得る場合に前記仮演算結果を前記第1補正情報を用いて補正し、前記M×P×2ビットの演算結果をN/P個得る場合に前記仮演算結果を前記第2補正情報を用いて補正することを特徴とすることもできる。
【0314】
これによって、N個のMビットオペランド、又は、N/P個のM×Pビットオペランドをまとめて演算して、第1補正情報及び第2補正情報を生成し、第1補正情報を用いて補正することによってN個のMビット演算結果を得ることができ、又は、第2補正情報を用いて補正することによってN/P個のM×Pビット演算結果を得ることができる。
【0315】
また、演算方法において、前記Nは8であり、前記Mは4であり、前記Pは2であり、前記演算は乗算であることを特徴とすることもできる。
これによって、64ビットマイクロプロセッサにおいて、4個の8ビットオペランド、又は、2個の16ビットオペランドをまとめて演算して、第1補正情報を用いて補正することによって4個の16(=8×2)ビット演算結果を得ることができ、また、第2補正情報を用いて補正することによって2個の32(=16×2)ビット演算結果を得ることができる。
【0316】
本発明に係る演算装置は、所定ビット長の第1ビット長オペランド1個に演算を施す既存演算と前記所定ビット長よりも短い第2ビット長オペランドの複数に対して並列に前記演算を施すSIMD(Single Instruction Multiple Data)演算とを実行する演算装置であって、前記1個の第1ビット長オペランドに、又は、前記複数の第2ビット長オペランドを連結して1個の第1ビット長オペランドと見なして、前記演算を施すことを指示する演算命令と、前記演算命令による演算結果を前記SIMD演算の演算結果に補正することを指示するSIMD補正命令とを実装することを特徴とする。
【0317】
これによって、当該演算装置は、1個の長オペランド、又は、複数の短オペランドを1個の長オペランドと見なして演算する演算命令と、演算結果をSIMD演算の演算結果に補正するSIMD補正命令とを実装することができる。
また、演算命令は既存演算とSIMD演算とで共有でき、SIMD補正命令は演算の種類に依存しないので、命令数が演算の種類毎に増えないため、従来のSIMD演算命令を実装する場合に較べて、機械語命令のビット割付を圧迫したり、命令デコーダ回路が大規模化してコスト及び消費電力の増加を招くことが少ない。
【0318】
従って、命令数の増加を抑えつつSIMD演算を実装することができる。
また、演算装置において、Nを2以上の整数としMを1以上の整数とする時、N×Mビットの第1ビット長オペランド1個に前記演算を施してN×Mビットの第1ビット長演算結果を1個得る既存演算とMビットの第2ビット長オペランドN個に対して並列に前記演算を施してMビットの第2ビット長演算結果をN個得るN並列SIMD演算とを実行するものであり、前記第1ビット長演算結果、及び、前記補正に用いられる補正情報を保持する保持手段と、前記演算命令、及び、N並列SIMD補正命令を解読する解読手段と、前記演算命令が解読された場合に前記1個の第1ビット長オペランドに、又は、前記N個の前記第2ビット長オペランドを連結して1個の第1ビット長オペランドと見なして、前記演算を施すことによってN×Mビットの第1ビット長演算結果を1個得てこれを前記保持手段に保持すると共に当該第1ビット長演算結果のMビット毎の前記演算によって及ぼされる各隣接桁からの影響に基づいて前記補正情報を生成してこれを前記保持手段に保持し、前記N並列SIMD補正命令が解読された場合に前記保持手段に保持された第1ビット長演算結果をMビット単位で前記保持手段に保持された補正情報を用いて補正することによって前記第2ビット長演算結果をN個得る実行手段とを備えることを特徴とすることもできる。
【0319】
これによって、N個のMビットオペランドをまとめて演算して、補正情報を用いて補正することによってN個のMビット演算結果を得ることができ、膨大な量のデータに同じ演算を施す場合に時間を大幅に短縮できる。
また、演算装置において、前記実行手段は、前記N並列SIMD補正命令が解読された場合に前記第1ビット長演算結果のうちの最下位のMビットを除く部分を補正することを特徴とすることもできる。
【0320】
これによって、第1ビット長演算結果のうちの最下位のMビットを除く部分を補正することができるので、キャリーフラグを用いた前の演算からの桁上がりを考慮しない場合において演算によって影響を及ぼされることのない最下位のMビットを補正しないで済む。
また、演算装置は、さらに、Pを2以上且つN/2以下の整数とする時、M×Pビットの第3ビット長オペランドN/P個に対して並列に前記演算を施してM×Pビットの第3ビット長演算結果をN/P個得るN/P並列SIMD演算を実行することができ、前記解読手段は、さらに、N/P並列SIMD補正命令を解読し、前記実行手段は、前記演算命令が解読された場合に前記1個の第1ビット長オペランドに前記N個の前記第2ビット長オペランドを連結して1個の第1ビット長オペランドと見なして、又は、前記N/P個の第3ビット長オペランドを連結して1個の第1ビット長オペランドと見なして、前記演算を施すことによって第1ビット長演算結果を得てこれを前記保持手段に保持すると共に当該第1ビット長演算結果のMビット毎の前記演算によって及ぼされる各隣接桁からの影響に基づいて前記補正情報を生成してこれを前記保持手段に保持し、前記N/P並列SIMD演算が解読された場合に前記保持手段に保持された第1ビット長演算結果をM×Pビット単位で前記保持手段に保持された補正情報中のM×Pビット毎の影響に対応する部分のみを用いて補正することを特徴とすることもできる。
【0321】
これによって、さらに、N/P個のM×Pビットオペランドをまとめて演算して、補正情報中のM×Pビット毎の対応する部分のみを用いて補正することによって、前記N/P個のM×Pビット演算結果を得ることができる。
また、演算用の命令は既存演算とSIMD演算とで共有でき、各データ幅の種別毎の補正用の命令は演算の種類に依存しないので、命令数が演算の種類とデータ幅の種別数の積では決まらず命令数が飛躍的に増えないため、従来のSIMD演算命令を実装する場合に較べて、機械語命令のビット割付を圧迫したり、命令デコーダ回路が大規模化してコスト及び消費電力の増加を招くことが極めて少ない。
【0322】
従って、命令数の飛躍的な増加を抑えつつSIMD演算を実装することができる。また、演算装置において、前記Nは8であり前記Mは8であり前記Pは2、4又は2と4の両方であること、あるいは、前記Nは4であり前記Mは16であり前記Pは2であることを特徴とすることもできる。
これによって、64ビットマイクロプロセッサにおいて、8個の8ビットオペランド、4個の16ビットオペランド、又は、2個の32ビットオペランドをまとめて演算して、補正情報中の対応する8ビット、16ビット、又は、32ビット毎に補正することによって、8個の8ビット演算結果、4個の16ビット演算結果、又は、2個の32ビット演算結果を得ることができる。
【0323】
また、演算装置において、前記演算には複数の種類があり、前記実行手段は、Lを0からN−1までのN個の整数とし最下位桁を1番目の桁とする時、前記演算命令が解読された場合にMビット毎に前記演算の種類と前記演算によって各M×L番目の桁から各M×L+1番目の桁への桁上げの有無とに基づいて各M×L+1番目の桁が0及び1のいずれかである、又は、0及び−1のいずれかである補正情報を生成し、前記SIMD補正命令が解読された場合に前記演算の種類に関わらず前記保持手段に保持された第1ビット長演算結果にMビット単位で前記保持手段に保持された補正情報を加算又は減算することによって前記第2ビット長演算結果をN個得ることを特徴とすることもできる。
【0324】
これによって、演算の種類と、Mビット毎の各桁の桁上げの有無とに基づいて、Mビット毎に0及び1のいずれかである、又は、0及び−1のいずれかである補正情報を生成し、仮演算結果にMビット単位で補正情報を加算及び減算のいずれかを施すことによってN個のMビット演算結果を得ることができる。
また、演算装置において、前記演算の種類は1加算、1減算、ニ数加算、及び、ニ数減算のうちの少なくとも1つを含み、前記実行手段は、前記演算命令が解読された場合で、且つ、前記演算の種類が1加算である時には前記第1ビット長オペランドに1加算して第1ビット長演算結果を得ると共に桁上げが無かったM×L+1番目の桁を−1桁上げが有ったM×L+1番目の桁を0とする補正情報を生成し、前記演算命令が解読された場合で、且つ、前記演算の種類が1減算である時には前記第1ビット長オペランドから1減算して第1ビット長演算結果を得ると共に桁上げが無かったM×L+1番目の桁を0桁上げが有ったM×L+1番目の桁を1として補正情報を生成し、前記演算命令が解読された場合で、且つ、前記演算の種類がニ数加算である時には加算すべき一方のN個の第2ビット長オペランドを連結して一方の1個の第1ビット長オペランドと見なし加算すべき他方のN個の第2ビット長オペランドを連結して他方の1個の第1ビット長オペランドと見なしてこれら2個の第1ビット長オペランドをニ数加算することによって第1ビット長演算結果を得ると共に桁上げが無かったM×L+1番目の桁を0桁上げが有ったM×L+1番目の桁を1とする補正情報を生成し、前記演算命令が解読された場合で、且つ、前記演算の種類がニ数減算である時には減算されるべきN個の第2ビット長オペランドを連結して減算されるべき1個の第1ビット長オペランドと見なし減算すべきN個の第2ビット長オペランドを連結して減算すべき1個の第1ビット長オペランドと見なしてこれら2個の第1ビット長オペランドをニ数減算することによって第1ビット長演算結果を得ると共に桁上げが無かったM×L+1番目の桁を−1桁上げが有ったM×L+1番目の桁を0として補正情報を生成し、前記SIMD補正命令が解読された場合に前記保持手段に保持された第1ビット長演算結果からMビット単位で前記保持手段に保持された補正情報を減算することによって前記第2ビット長演算結果をN個得ることを特徴とすることもできる。
【0325】
これによって、演算の種類が1加算である時、及び、ニ数減算である時には、桁上げが無かったM×L+1番目の桁を−1、桁上げが有ったM×L+1番目の桁を0とする補正情報を生成し、演算の種類が1減算である時、及び、ニ数加算である時には、桁上げが無かったM×L+1番目の桁を0、桁上げが有ったM×L+1番目の桁を1とする補正情報を生成し、仮演算結果からMビット単位で補正情報を減算することによって、前記N個のMビット演算結果を得ることができる。
【0326】
また、演算装置において、前記演算の種類は1加算、1減算、ニ数加算、及び、ニ数減算のうちの少なくとも1つを含み、前記実行手段は、前記演算命令が解読された場合で、且つ、前記演算の種類が1加算である時には前記第1ビット長オペランドに1加算して第1ビット長演算結果を得ると共に桁上げが無かったM×L+1番目の桁を1、桁上げが有ったM×L+1番目の桁を0とする補正情報を生成し、前記演算命令が解読された場合で、且つ、前記演算の種類が1減算である時には前記第1ビット長オペランドから1減算して第1ビット長演算結果を得ると共に桁上げが無かったM×L+1番目の桁を0桁上げが有ったM×L+1番目の桁を−1として補正情報を生成し、前記演算命令が解読された場合で、且つ、前記演算の種類がニ数加算である時には加算すべき一方のN個の第2ビット長オペランドを連結して一方の1個の第1ビット長オペランドと見なし加算すべき他方のN個の第2ビット長オペランドを連結して他方の1個の第1ビット長オペランドと見なしてこれら2個の第1ビット長オペランドをニ数加算することによって第1ビット長演算結果を得ると共に桁上げが無かったM×L+1番目の桁を0桁上げが有ったM×L+1番目の桁を−1とする補正情報を生成し、前記演算命令が解読された場合で、且つ、前記演算の種類がニ数減算である時には減算されるべきN個の第2ビット長オペランドを連結して減算されるべき1個の第1ビット長オペランドと見なし減算すべきN個の第2ビット長オペランドを連結して減算すべき1個の第1ビット長オペランドと見なしてこれら2個の第1ビット長オペランドをニ数減算することによって第1ビット長演算結果を得ると共に桁上げが無かったM×L+1番目の桁を1桁上げが有ったM×L+1番目の桁を0として補正情報を生成し、前記N並列SIMD補正命令が解読された場合に前記保持手段に保持された第1ビット長演算結果からMビット単位で前記保持手段に保持された補正情報を減算することによって前記第2ビット長演算結果をN個得ることを特徴とすることもできる。
【0327】
これによって、演算の種類が1加算である時、及び、ニ数減算である時には、桁上げが無かったM×L+1番目の桁を1、桁上げが有ったM×L+1番目の桁を0とする補正情報を生成し、演算の種類が1減算である時、及び、ニ数加算である時には、桁上げが無かったM×L+1番目の桁を0、桁上げが有ったM×L+1番目の桁を−1とする補正情報を生成し、仮演算結果からMビット単位で補正情報を加算することによって、前記N個のMビット演算結果を得ることができる。
【0328】
また、演算装置において、前記演算には複数の種類があり、前記実行手段は、前記演算の種類を前記保持手段に保持し、前記N並列SIMD補正命令が解読された場合に前記保持手段に保持された第1ビット長演算結果を前記保持手段に保持された演算の種類に応じて補正することを特徴とすることもできる。
これによって、演算の際に演算の種類を保持し、第1ビット長演算結果を、保持した演算の種類に応じて補正することができるので、演算の種類を考慮せずに補正情報を生成することができる。
【0329】
また、演算装置において、前記実行手段は、前記演算命令が解読された場合に、前記演算によって各下位桁から各上位桁へ及ぼされた桁上げの有無を補正情報として生成することを特徴とすることもできる。
これによって、演算の種類を保持すると共に、各下位桁から各上位桁へ及ぼされた桁上げの有無を補正情報として保持することができるので、後で、保持した補正情報を保持した演算の種類に応じて変換することにより、仮演算結果を正しく補正することができる。
【0330】
また、演算装置において、前記演算の種類は1加算、1減算、ニ数加算、及び、ニ数減算のうちの少なくとも1つを含み、前記実行手段は、前記N並列SIMD補正命令が解読された場合であってLを0からN−1までのN個の整数とし最下位桁を1番目の桁とする時、前記保持手段に保持された演算の種類が1加算、及び、ニ数減算のいずれかである場合には前記演算命令が解読された場合に生成された補正情報に基づいて前記仮演算結果の桁上げが無かったM×L+1番目の桁に1を加算し、前記保持手段に保持された演算の種類が1減算、及び、ニ数加算のいずれかである場合には前記演算命令が解読された場合に生成された補正情報に基づいて前記仮演算結果の桁上げが有ったM×L+1番目の桁から1を減算することを特徴とすることもできる。
【0331】
これによって、保持された演算の種類が1加算である時、及び、ニ数減算である場合には桁上げが無かったM×L+1番目の桁に1を加算し、保持された演算の種類が1減算である場合には桁上げが有ったM×L+1番目の桁から1を減算することにより、保持された演算の種類に応じて第2ビット長演算結果を正しく補正することができる。
【0332】
また、演算装置において、Nを2以上の整数とする時、1個の第1ビット長オペランドに前記演算を施して1個の第1ビット長演算結果を得る既存演算とN個の第2ビット長オペランドに対して並列に前記演算を施してN個の第2ビット長演算結果を得るN並列SIMD演算とを実行するものであり、前記長演算結果、及び、前記補正に用いられる補正情報を保持する保持手段と、前記演算命令、及び、前記N並列SIMD補正命令を解読する解読手段と、前記演算命令が解読された場合に前記1個の第1ビット長オペランドに、又は、前記N個の第2ビット長オペランドを連結した1個を第1ビット長オペランドと見なして、前記演算を施すことによって第1ビット長演算結果を得てこれを前記保持手段に保持すると共に当該第1ビット長演算結果と前記N個の第2ビット長演算結果を連結した1個の第1ビット長演算結果との差分に相当する前記補正情報を生成してこれを前記保持手段に保持し、前記N並列SIMD補正命令が解読された場合に前記保持手段に保持された第1ビット長演算結果を前記保持手段に保持された補正情報を用いて補正することによって前記N並列SIMD演算の第2ビット長演算結果をN個得る実行手段とを備えることを特徴とすることもできる。
【0333】
これによって、N個のオペランドをまとめて演算して、補正情報を用いて補正することによってN個の演算結果を得ることができ、膨大な量のデータに同じ演算を施す場合に時間を大幅に短縮できる。
また、演算装置において、Mを1以上の整数とする時、前記第1ビット長オペランドのビット長はN×Mビットであり前記第2ビット長オペランドのビット長はMビットであり前記第1ビット長演算結果のビット長はN×M×2ビットであり前記第2ビット長演算結果のビット長はM×2ビットであり、前記実行手段は、前記演算命令が解読された場合に前記1個の第1ビット長オペランドに、又は、前記N個の第2ビット長オペランドを連結した1個を第1ビット長オペランドと見なして、前記演算を施すことによって前記N×M×2ビットの第1ビット長演算結果を1個得てこれを前記保持手段に保持すると共に当該第1ビット長演算結果のM×2ビット毎の前記演算によって及ぼされる他のM×2ビットからの影響に基づいて補正情報を生成してこれを前記保持手段に保持することを特徴とすることもできる。
【0334】
これによって、N個のMビットオペランドをまとめて演算して、補正情報を用いて補正することによってN個のM×2ビット演算結果を得ることができる。
また、演算装置は、さらに、Pを2以上、且つ、N/2以下の整数とする時、M×Pビットの第3ビット長オペランドN/P個に対して並列に前記演算を施してM×P×2ビットの第3ビット長演算結果をN/P個得るN/P並列SIMD演算を実行することができ、前記解読手段は、さらに、N/P並列SIMD補正命令を解読し、前記実行手段は、前記演算命令が解読された場合に前記1個の第1ビット長オペランドに前記N個の第2ビット長オペランドを連結して1個の第1ビット長オペランドと見なして、又は、前記N/P個の第3ビット長オペランドを連結して1個の第1ビット長オペランドと見なして、前記演算を施すことによってN×M×2ビットの第1ビット長演算結果を1個得てこれを前記保持手段に保持すると共に、Lを1からN−1までのN−1個の整数とし最下位桁を1番目の桁とする時、M×2ビット毎に前記演算によって各M×2×L番目の桁以下と各M×2×L+1番目の桁以上との間で及ぼしあうN−1個の影響に基づいて第1補正情報を生成しM×2×Pビット毎に前記演算によって各M×2×P×L番目の桁以下とM×2×L+1番目の桁以上との間で及ぼしあうN/P−1個の影響に基づいて第2補正情報を生成してこれらを前記保持手段に保持し、前記N並列SIMD補正命令が解読された場合に前記保持手段に保持された第1ビット長演算結果を前記保持手段に保持された第1補正情報を用いて補正し、前記N/P並列SIMD補正命令が解読された場合に前記保持手段に保持された第1ビット長演算結果を前記保持手段に保持された第2補正情報を用いて補正することを特徴とすることもできる。
【0335】
これによって、N個のMビットオペランド、又は、N/P個のM×Pビットオペランドをまとめて演算して、第1補正情報及び第2補正情報を生成し、第1補正情報を用いて補正することによってN個のMビット演算結果を得ることができ、又は、第2補正情報を用いて補正することによってN/P個のM×Pビット演算結果を得ることができる。
【0336】
また、演算装置において、前記Nは8であり、前記Mは4であり、前記Pは2であり、前記演算は乗算であることを特徴とすることもできる。
これによって、64ビットマイクロプロセッサにおいて、4個の8ビットオペランド、又は、2個の16ビットオペランドをまとめて演算して、第1補正情報を用いて補正することによって4個の16(=8×2)ビット演算結果を得ることができ、また、第2補正情報を用いて補正することによって2個の32(=16×2)ビット演算結果を得ることができる。
【0337】
また、演算装置は、さらに、割込み受付時、又は、他のコンテキストへの切り換え時に、前記保持手段に保持された内容を当該演算装置の外部の記憶装置に退避する退避手段と、前記割込みからの復帰時、又は、元のコンテキストへの切り換え時に、前記記憶装置に退避されている内容を前記保持手段に復元する復元手段とを備えることを特徴とすることもできる。
【0338】
これによって、割込み受付時又は他のコンテキストへの切り換え時に保持手段に保持された内容を退避し、割込みからの復帰時又は元のコンテキストへの切り換え時に復元することができるので、演算命令の実行とSIMD補正命令の実行との間で割込みやコンテキストへの切り換えを受け付けても矛盾が生じない。
従って、リアルタイム性を悪化させずマルチメディア処理を好適に行うことができ、マルチタスク処理に対応させることができる。
【0339】
本発明に係る演算装置は、Nを2以上の整数としMを1以上の整数とする時、MビットのオペランドN個に対して並列に演算を施してMビットの演算結果をN個得るN並列SIMD(Single Instruction Multiple Data)演算を実行する演算装置であって、N個のMビットのオペランドのそれぞれに1を加えるN並列SIMD1加算命令を実装し、前記N並列SIMD1加算命令を解読する解読手段と、前記N並列SIMD1加算命令が解読された場合にLを1からN−1までのN−1個の整数とし最下位桁を1番目の桁とする時、N個のMビットのオペランドを結合したデータとそれぞれがMビットからなる1を表すデータをN個結合したデータとの加算を各M×L番目の桁から各M×L+1番目の桁への桁上げ伝播を切断して行う実行手段とを備えることを特徴とする。
【0340】
これによって、演算装置がN並列SIMD1加算命令を解読し実行することができる。
従って、複数のアドレスを同時に一括して増加させたり、複数の画像データの輝度や色調を同時に変化させるような処理を高速に実現できる。
本発明に係る演算装置は、Nを2以上の整数としMを1以上の整数とする時、MビットのオペランドN個に対して並列に演算を施してMビットの演算結果をN個得るN並列SIMD(Single Instruction Multiple Data)演算を実行する演算装置であって、N個のMビットのオペランドのそれぞれから1を引くN並列SIMD1減算命令を実装し、前記N並列SIMD1減算命令を解読する解読手段と、前記N並列SIMD1減算命令が解読された場合にLを1からN−1までのN−1個の整数とし最下位桁を1番目の桁とする時、N個のMビットのオペランドを結合したデータからそれぞれがMビットからなる1を表すデータをN個結合したデータを引く減算を各M×L番目の桁から各M×L+1番目の桁への桁上げ伝播を切断して行う実行手段とを備えることを特徴とする。
【0341】
これによって、演算装置がN並列SIMD1減算命令を解読し実行することができる。
従って、複数のアドレスを同時に一括して減少させたり、複数の画像データの輝度や色調を同時に変化させるような処理を高速に実現できる。
本発明に係るプログラム変換装置は、所定ビット長のオペランドの複数に対して並列に演算を施すSIMD(Single Instruction Multiple Data)演算命令及び他の演算命令からなるプログラムを変換するプログラム変換装置であって、前記プログラム中の演算命令を解析する解析手段と、前記解析手段により前記SIMD演算命令が解析された場合に当該SIMD演算命令を前記所定ビット長のオペランドの複数を連結して1個のオペランドと見なして前記演算を施すことを指示する演算命令、及び、前記演算命令による演算結果を前記SIMD演算命令の演算結果に補正することを指示するSIMD補正命令に変換する変換手段とを備えることを特徴とする。
【0342】
本発明に係るプログラム変換方法は、所定ビット長のオペランドの複数に対して並列に演算を施すSIMD(Single Instruction Multiple Data)演算命令及び他の演算命令からなるプログラムを変換するプログラム変換方法であって、前記プログラム中の演算命令を解析する解析ステップと、前記解析ステップにより前記SIMD演算命令が解析された場合に当該SIMD演算命令を前記所定ビット長のオペランドの複数を連結して1個のオペランドと見なして前記演算を施すことを指示する演算命令、及び、前記演算命令による演算結果を前記SIMD演算命令の演算結果に補正することを指示するSIMD補正命令に変換する変換ステップとを含むことを特徴とする。
【0343】
本発明に係るプログラム変換プログラムは、所定ビット長のオペランドの複数に対して並列に演算を施すSIMD(Single Instruction Multiple Data)演算命令及び他の演算命令からなるプログラムを変換するプログラム変換プログラムであって、コンピュータに、前記プログラム中の演算命令を解析する解析ステップと、前記解析ステップにより前記SIMD演算命令が解析された場合に当該SIMD演算命令を前記所定ビット長のオペランドの複数を連結して1個のオペランドと見なして前記演算を施すことを指示する演算命令、及び、前記演算命令による演算結果を前記SIMD演算命令の演算結果に補正することを指示するSIMD補正命令に変換する変換ステップとを実行させることを特徴とする。
【0344】
これらによって、SIMD演算命令を他の演算命令とSIMD補正命令とに変換することができる。
従って、プロセッサに、演算の種別によらずにデータ幅の種別数によるSIMD補正命令を従来の演算命令に追加して実装させるだけで複数の演算の種別に対するSIMD演算を実行させることができるので、命令数の増加を飛躍的に抑えることができる分だけ命令語長が短くなり、プログラムのコードサイズを縮小することができる。
【0345】
本発明に係るコンパイル装置は、所定ビット長のオペランドの複数に対して並列に演算を施すSIMD(Single Instruction Multiple Data)演算を演算装置に実行させるべき構文を含む高級言語プログラムを前記演算装置が実行可能な複数の機械語命令からなる機械語プログラムにコンパイルするコンパイル装置であって、前記高級言語プログラムの構文を解析する解析手段と、前記解析手段により解析された構文を機械語命令列に変換することにより機械語プログラムを生成するコンパイル手段とを備え、前記コンパイル手段は、前記解析手段により前記SIMD演算を実行させるべき構文が解析された場合に当該構文を前記所定ビット長のオペランドの複数を連結して1個のオペランドと見なして前記演算を施すことを指示する演算機械語命令、及び、前記演算機械語命令による演算結果を前記SIMD演算の演算結果に補正することを指示するSIMD補正機械語命令を含む機械語命令列に変換することを特徴とする。
【0346】
本発明に係るコンパイル方法は、所定ビット長のオペランドの複数に対して並列に演算を施すSIMD(Single Instruction Multiple Data)演算を演算装置に実行させるべき構文を含む高級言語プログラムを前記演算装置が実行可能な複数の機械語命令からなる機械語プログラムにコンパイルするコンパイル方法であって、前記高級言語プログラムの構文を解析する解析ステップと、前記解析手段により解析された構文を機械語命令列に変換することにより機械語プログラムを生成するコンパイルステップとを備え、前記コンパイルステップは、前記解析ステップにより前記SIMD演算を実行させるべき構文が解析された場合に当該構文を前記所定ビット長のオペランドの複数を連結して1個のオペランドと見なして前記演算を施すことを指示する演算機械語命令、及び、前記演算機械語命令による演算結果を前記SIMD演算の演算結果に補正することを指示するSIMD補正機械語命令を含む機械語命令列に変換することを特徴とする。
【0347】
本発明に係るコンパイルプログラムは、所定ビット長のオペランドの複数に対して並列に演算を施すSIMD(Single Instruction Multiple Data)演算を演算装置に実行させるべき構文を含む高級言語プログラムを前記演算装置が実行可能な複数の機械語命令からなる機械語プログラムにコンパイルするコンパイルプログラムであって、コンピュータに、前記高級言語プログラムの構文を解析する解析ステップと、前記解析手段により解析された構文を機械語命令列に変換することにより機械語プログラムを生成するコンパイルステップとを備え、前記コンパイルステップは、前記解析ステップにより前記SIMD演算を実行させるべき構文が解析された場合に当該構文を前記所定ビット長のオペランドの複数を連結して1個のオペランドと見なして前記演算を施すことを指示する演算機械語命令、及び、前記演算機械語命令による演算結果を前記SIMD演算の演算結果に補正することを指示するSIMD補正機械語命令を含む機械語命令列に変換することを実行させることを特徴とする。
【0348】
これらによって、SIMD演算の構文を、演算機械語命令とSIMD補正機械語命令とに変換することができる。
従って、プロセッサに、演算の種別によらずにデータ幅の種別数によるSIMD補正機械語命令を従来の演算機械語命令に追加して実装させるだけで複数の演算の種別に対するSIMD演算を実行させることができるので、命令数の増加を飛躍的に抑えることができる分だけ命令語長が短くなり、プログラムのコードサイズを縮小することができる。
【0349】
また、コンパイル装置において、前記コンパイル手段は、前記解析手段により前記SIMD演算を実行させるべき構文が解析された場合に当該構文を前記SIMD演算を示す中間言語コードを含む中間言語コード列に変換する一次変換手段と、前記SIMD演算を示す中間言語コードを前記演算機械語命令、及び、SIMD補正機械語命令に変換する二次変換手段とを含むことを特徴とすることもできる。
【0350】
また、コンパイル方法において、前記コンパイルステップは、前記解析ステップにより前記SIMD演算を実行させるべき構文が解析された場合に当該構文を前記SIMD演算を示す中間言語コードを含む中間言語コード列に変換する一次変換サブステップと、前記SIMD演算を示す中間言語コードを前記演算機械語命令、及び、SIMD補正機械語命令に変換する二次変換サブステップとを含むことを特徴とすることもできる。
【0351】
また、コンパイルプログラムにおいて、前記コンパイルステップは、前記解析ステップにより前記SIMD演算を実行させるべき構文が解析された場合に当該構文を前記SIMD演算を示す中間言語コードを含む中間言語コード列に変換する一次変換サブステップと、前記SIMD演算を示す中間言語コードを前記演算機械語命令、及び、SIMD補正機械語命令に変換する二次変換サブステップとを含むことを特徴とすることもできる。
【0352】
これらによって、SIMD演算の構文を、一旦SIMD演算を示す中間言語コードを含む中間言語コード列に変換し、SIMD演算を示す中間言語コードを演算機械語命令とSIMD補正機械語命令とに変換することができる。
本発明に係る演算プログラムは、Nを2以上の整数としMを1以上の整数とする時、MビットのオペランドN個に対して並列に演算を施してMビットの演算結果をN個得る処理をコンピュータに実行させる演算プログラムであって、コンピュータに、前記MビットのオペランドN個を連結したN×Mビットを1個の仮オペランドとして前記演算を施すことによってN×Mビットの仮演算結果を1個得ると共に当該仮演算結果のMビット毎の前記演算によって及ぼされる各隣接桁からの影響に基づいて補正情報を生成する演算ステップと、前記Mビットの演算結果をN個得る場合に前記仮演算結果をMビット単位で前記補正情報を用いて補正する補正ステップとを実行させることを特徴とする。
【0353】
本発明に係る演算プログラムを記録したコンピュータ読み取り可能な記録媒体は、Nを2以上の整数としMを1以上の整数とする時、MビットのオペランドN個に対して並列に演算を施してMビットの演算結果をN個得る処理をコンピュータに実行させる演算プログラムを記録したコンピュータ読み取り可能な記録媒体であって、コンピュータに、前記MビットのオペランドN個を連結したN×Mビットを1個の仮オペランドとして前記演算を施すことによってN×Mビットの仮演算結果を1個得ると共に当該仮演算結果のMビット毎の前記演算によって及ぼされる各隣接桁からの影響に基づいて補正情報を生成する演算ステップと、前記Mビットの演算結果をN個得る場合に前記仮演算結果をMビット単位で前記補正情報を用いて補正する補正ステップとを実行させることを特徴とする演算プログラムを記録する。
【0354】
これによって、N個のMビットオペランドをまとめて演算して、補正情報を用いて補正することによってN個のMビット演算結果を得ることができ、膨大な量のデータに同じ演算を施す場合に時間を大幅に短縮できる。
また、当該演算方法を用いるプロセッサにおいては、演算用の命令は既存演算とSIMD演算とで共有でき、補正用の命令は演算の種類に依存しないので、命令数が演算の種類毎に増えないため、従来のSIMD演算命令を実装する場合に較べて、機械語命令のビット割付を圧迫したり、命令デコーダ回路が大規模化してコスト及び消費電力の増加を招くことが少ない。
【0355】
従って、命令数の増加を抑えつつSIMD演算を実装することができる。
また、演算プログラムにおいて、前記補正ステップは、前記仮演算結果のうちの最下位のMビットを除く部分を補正することを特徴とすることもできる。
また、演算プログラムを記録したコンピュータ読み取り可能な記録媒体において、前記補正ステップは、前記仮演算結果のうちの最下位のMビットを除く部分を補正することを特徴とすることもできる。
【0356】
これによって、仮演算結果のうちの最下位のMビットを除く部分を補正することができるので、キャリーフラグを用いた前の演算からの桁上がりを考慮しない場合において、演算によって影響を及ぼされることのない最下位のMビットを補正しないで済む。
本発明に係る演算プログラムは、Nを2以上の整数とする時、N個のオペランドに対して並列に演算を施してN個の演算結果を得る処理をコンピュータに実行させる演算プログラムであって、コンピュータに、前記N個のオペランドを連結して1個の仮オペランドとして前記演算を施すことによって前記演算結果のN倍の大きさの仮演算結果を1個得ると共に当該仮演算結果と前記N個の演算結果を連結した1個の仮演算結果との差分に相当する補正情報を生成する演算ステップと、前記N個の演算結果を得る場合に前記仮演算結果を前記補正情報を用いて補正しN個に分割する補正ステップとを実行させることを特徴とする。
【0357】
本発明に係る演算プログラムを記録したコンピュータ読み取り可能な記録媒体は、Nを2以上の整数とする時、N個のオペランドに対して並列に演算を施してN個の演算結果を得る処理をコンピュータに実行させる演算プログラムを記録したコンピュータ読み取り可能な記録媒体であって、コンピュータに、前記N個のオペランドを連結して1個の仮オペランドとして前記演算を施すことによって前記演算結果のN倍の大きさの仮演算結果を1個得ると共に当該仮演算結果と前記N個の演算結果を連結した1個の仮演算結果との差分に相当する補正情報を生成する演算ステップと、前記N個の演算結果を得る場合に前記仮演算結果を前記補正情報を用いて補正しN個に分割する補正ステップとを実行させることを特徴とする演算プログラムを記録する。
【0358】
これによって、N個のオペランドをまとめて演算して、補正情報を用いて補正することによってN個の演算結果を得ることができ、膨大な量のデータに同じ演算を施す場合に時間を大幅に短縮できる。
また、当該演算方法を用いるプロセッサにおいては、演算用の命令は既存演算とSIMD演算とで共有でき、補正用の命令は演算の種類に依存しないので、命令数が演算の種類毎に増えないため、従来のSIMD演算命令を実装する場合に較べて、機械語命令のビット割付を圧迫したり、命令デコーダ回路が大規模化してコスト及び消費電力の増加を招くことが少ない。
【0359】
従って、命令数の増加を抑えつつSIMD演算を実装することができる。
本発明に係る演算プログラムは、コンピュータに所定ビット長の第1ビット長オペランド1個に演算を施す既存演算と前記所定ビット長よりも短い第2ビット長オペランドの複数に対して並列に前記演算を施すSIMD(Single Instruction Multiple Data)演算とを実行させる演算プログラムであって、前記1個の第1ビット長オペランドに、又は、前記複数の第2ビット長オペランドを連結して1個の第1ビット長オペランドと見なして、前記演算を施すことをコンピュータに指示する演算命令と、前記演算命令による演算結果を前記SIMD演算の演算結果に補正することをコンピュータに指示するSIMD補正命令とを含むことを特徴とする。
【0360】
本発明に係る演算プログラムを記録したコンピュータ読み取り可能な記録媒体は、コンピュータに所定ビット長の第1ビット長オペランド1個に演算を施す既存演算と前記所定ビット長よりも短い第2ビット長オペランドの複数に対して並列に前記演算を施すSIMD(Single Instruction Multiple Data)演算とを実行させる演算プログラムを記録したコンピュータ読み取り可能な記録媒体であって、前記1個の第1ビット長オペランドに、又は、前記複数の第2ビット長オペランドを連結して1個の第1ビット長オペランドと見なして、前記演算を施すことをコンピュータに指示する演算命令と、前記演算命令による演算結果を前記SIMD演算の演算結果に補正することをコンピュータに指示するSIMD補正命令とを含むことを特徴とする演算プログラムを記録する。
【0361】
これによって、当該演算装置は、1個の長オペランド、又は、複数の短オペランドを1個の長オペランドと見なして演算する演算命令と、演算結果をSIMD演算の演算結果に補正するSIMD補正命令とを実装することができる。
また、演算命令は既存演算とSIMD演算とで共有でき、SIMD補正命令は演算の種類に依存しないので、命令数が演算の種類毎に増えないため、従来のSIMD演算命令を実装する場合に較べて、機械語命令のビット割付を圧迫したり、命令デコーダ回路が大規模化してコスト及び消費電力の増加を招くことが少ない。
【0362】
従って、命令数の増加を抑えつつSIMD演算を実装することができる。
【図面の簡単な説明】
【図1】本実施の形態1に係るSIMD演算装置の構成を示す図である。
【図2】(a)〜(d)は、CR9に保持される桁上げ情報のビット構成の一例を示す図である。
【図3】(a)〜(c)はSIMDニ数加算演算時の各レジスタの内容を示す図である。
【図4】(a)〜(c)はSIMDニ数減算演算時の各レジスタの内容を示す図である。
【図5】(a)〜(c)はSIMD1加算演算時の各レジスタの内容を示す図である。
【図6】(a)〜(c)はSIMD1減算演算時の各レジスタの内容を示す図である。
【図7】本実施の形態2に係るSIMD演算装置の構成を示す図である。
【図8】(a)〜(d)は、CR9に保持される桁上げ情報のビット構成の一例を示す図である。
【図9】(a)〜(c)はSIMDニ数加算演算時の各レジスタの内容を示す図である。
【図10】(a)〜(c)はSIMDニ数減算演算時の各レジスタの内容を示す図である。
【図11】(a)〜(c)はSIMD1加算演算時の各レジスタの内容を示す図である。
【図12】(a)〜(c)はSIMD1減算演算時の各レジスタの内容を示す図である。
【図13】本実施の形態3に係るSIMD演算装置の構成を示す図である。
【図14】8×4SIMD2数乗算演算時の各レジスタの内容を示す図である。
【図15】16×2SIMD2数乗算演算時の各レジスタの内容を示す図である。
【図16】演算命令実行時には桁上げの結果と演算の種類とを記録しておき、SIMD補正命令実行時に桁上げ情報を生成するSIMD演算装置の構成を示す図である。
【図17】本実施の形態4に係るコンパイラ装置の構成を示す図である。
【図18】読込み用バッファ102に読込まれるC言語プログラムの一例を示す図である。
【図19】図18に示すC言語プログラムから生成される中間コードプログラムの一例を示す図である。
【図20】機械語命令生成部105の詳細な構成を示す図である。
【図21】図19に示す中間コードプログラムから生成される変形中間コードプログラムの一例を示す図である。
【図22】図21に示す変形中間コードプログラムから生成されるSIMD中間コードプログラムの一例を示す図である。
【図23】図22に示すSIMD中間コードプログラムから生成される機械語命令プログラムの一例を示す図である。
【図24】 SIMD演算抽出部110が行う変形中間コードプログラムを生成する処理の動作の概要を示す図である。
【符号の説明】
1 ROM
2 IR
3 DEC
4 レジスタファイル
5 EXT
6 AR
7 BR
8 ALU
9 CR
10 SIMD演算装置
20 SIMD演算装置
21 ALU
30 SIMD演算装置
31 DEC
32 AR
33 BR
34 ALU
35 CR
36 CR
40 SIMD演算装置
41 ALU
42 EXT
43 CR
44 OPR
100 コンパイラ装置
101 ファイル読込み部
102 読込み用バッファ
103 構文解析部
104 中間コード用バッファ
105 機械語命令生成部
106 出力用バッファ
107 ファイル出力部
110 SIMD演算抽出部
111 SIMD中間コード生成部
112 機械語命令出力部

Claims (49)

  1. Nを2以上の整数とし、Mを1以上の整数とする時、MビットのオペランドN個に対して並列に演算を施して、Mビットの演算結果をN個得る処理をコンピュータに実行させる演算方法であって、
    前記MビットのオペランドN個を連結したN×Mビットを1個の仮オペランドとして、前記演算を施すことによって、N×Mビットの仮演算結果を1個得ると共に、当該仮演算結果のMビット毎の、前記演算によって及ぼされる各隣接桁からの影響に基づいて補正情報を生成する演算ステップと、
    前記Mビットの演算結果をN個得る場合に、前記仮演算結果を、Mビット単位で前記補正情報を用いて補正する補正ステップと
    を備えることを特徴とする演算方法。
  2. 前記補正ステップは、
    前記仮演算結果のうちの、最下位のMビットを除く部分を補正すること
    を特徴とする請求項1に記載の演算方法。
  3. 前記演算方法は、さらに、
    Pを、2以上且つN/2以下の整数とする時、M×PビットのオペランドN/P個に対して並列に前記演算を施して、M×Pビットの演算結果をN/P個得ることができ、
    前記演算ステップは、前記MビットのオペランドN個を、又は、前記N×PビットのオペランドN/P個を連結したN×Mビットを1個の仮オペランドとして、前記演算を施すことによって、N×Mビットの仮演算結果を1個得ると共に、前記補正情報を生成し、
    前記補正ステップは、前記M×Pビットの演算結果をN/P個得る場合に、前記仮演算結果を、M×Pビット単位で前記補正情報中のM×Pビット毎の影響に対応する部分のみを用いて補正すること
    を特徴とする請求項1及び2のいずれか1項に記載の演算方法。
  4. 前記Nは8であり、前記Mは8であり、前記Pは2、4又は2と4の両方であること、
    あるいは、前記Nは4であり、前記Mは16であり、前記Pは2であること
    を特徴とする請求項3に記載の演算方法。
  5. 前記演算には複数の種類があり、
    前記演算ステップは、
    Lを0からN−1までのN個の整数とし、最下位桁を1番目の桁とする時、Mビット毎に、前記演算の種類と、前記演算によって各M×L番目の桁から各M×L+1番目の桁への桁上げの有無とに基づいて、各M×L+1番目の桁が0及び1のいずれかである、又は、0及び−1のいずれかである補正情報を生成し、
    前記補正ステップは、
    前記Mビットの演算結果をN個得る場合に、前記演算の種類に関わらず、前記仮演算結果に、Mビット単位で前記補正情報を加算又は減算すること
    を特徴とする請求項1及び2のいずれか1項に記載の演算方法。
  6. 前記演算の種類は1加算、1減算、ニ数加算、及び、ニ数減算のうちの少なくとも1つを含み、
    前記演算ステップは、
    前記演算の種類が1加算である時には、桁上げが無かったM×L+1番目の桁を−1、桁上げが有ったM×L+1番目の桁を0とする補正情報を生成し、
    前記演算の種類が1減算である時には、桁上げが無かったM×L+1番目の桁を0、桁上げが有ったM×L+1番目の桁を1とする補正情報を生成し、
    前記演算の種類がニ数加算である時には、加算すべき一方のMビットのオペランドN個を連結したN×Mビットを一方の1個の仮オペランドとし、加算すべき他方のMビットのオペランドN個を連結したN×Mビットを他方の1個の仮オペランドとして、これら2個の仮オペランドをニ数加算することによって、N×Mビットの仮演算結果を1個得ると共に、桁上げが無かったM×L+1番目の桁を0、桁上げが有ったM×L+1番目の桁を1とする補正情報を生成し、
    前記演算の種類がニ数減算である時には、減算されるべきMビットのオペランドN個を連結したN×Mビットを減算されるべき1個の仮オペランドとし、減算すべきMビットのオペランドN個を連結したN×Mビットを減算すべき1個の仮オペランドとして、これら2個の仮オペランドをニ数減算することによって、N×Mビットの仮演算結果を1個得ると共に、桁上げが無かったM×L+1番目の桁を−1、桁上げが有ったM×L+1番目の桁を0とする補正情報を生成し、
    前記補正ステップは、
    前記Mビットの演算結果をN個得る場合に、前記仮演算結果から、Mビット単位で前記補正情報を減算すること
    を特徴とする請求項5に記載の演算方法。
  7. 前記演算の種類は1加算、1減算、ニ数加算、及び、ニ数減算のうちの少なくとも1つを含み、
    前記演算ステップは、
    前記演算の種類が1加算である時には、桁上げが無かったM×L+1番目の桁を1、桁上げが有ったM×L+1番目の桁を0とする補正情報を生成し、
    前記演算の種類が1減算である時には、桁上げが無かったM×L+1番目の桁を0、桁上げが有ったM×L+1番目の桁を−1とする補正情報を生成し、
    前記演算の種類がニ数加算である時には、加算すべき一方のMビットのオペランドN個を連結したN×Mビットを一方の1個の仮オペランドとし、加算すべき他方のMビットのオペランドN個を連結したN×Mビットを他方の1個の仮オペランドとして、これら2個の仮オペランドをニ数加算することによって、N×Mビットの仮演算結果を1個得ると共に、桁上げが無かったM×L+1番目の桁を0、桁上げが有ったM×L+1番目の桁を−1とする補正情報を生成し、
    前記演算の種類がニ数減算である時には、減算されるべきMビットのオペランドN個を連結したN×Mビットを減算されるべき1個の仮オペランドとし、減算すべきMビットのオペランドN個を連結したN×Mビットを減算すべき1個の仮オペランドとして、これら2個の仮オペランドをニ数減算することによって、N×Mビットの仮演算結果を1個得ると共に、桁上げが無かったM×L+1番目の桁を1、桁上げが有ったM×L+1番目の桁を0とする補正情報を生成し、
    前記補正ステップは、
    前記Mビットの演算結果をN個得る場合に、前記仮演算結果に、Mビット単位で前記補正情報を加算すること
    を特徴とする請求項5に記載の演算方法。
  8. 前記演算には複数の種類があり、
    前記演算ステップは、さらに、
    前記演算の種類を保持し、
    前記補正ステップは、
    前記仮演算結果を、前記演算ステップにおいて保持された演算の種類に応じて補正すること
    を特徴とする請求項1及び2のいずれか1項に記載の演算方法。
  9. 前記演算ステップは、
    前記演算によって各下位桁から各上位桁へ及ぼされた桁上げの有無を補正情報として生成すること
    を特徴とする請求項8に記載の演算方法。
  10. 前記演算の種類は1加算、1減算、ニ数加算、及び、ニ数減算のうちの少なくとも1つを含み、
    前記補正ステップは、
    前記Mビットの演算結果をN個得る場合であって、Lを0からN−1までのN個の整数とし、最下位桁を1番目の桁とする時、
    前記演算ステップにおいて保持された演算の種類が、1加算、及び、ニ数減算のいずれかである場合には、前記演算ステップにより生成された補正情報に基づいて、前記仮演算結果の桁上げが無かったM×L+1番目の桁に1を加算し、
    前記演算ステップにおいて保持された演算の種類が、1減算、及び、ニ数加算のいずれかである場合には、前記演算ステップにより生成された補正情報に基づいて、前記仮演算結果の桁上げが有ったM×L+1番目の桁から1を減算すること
    を特徴とする請求項9に記載の演算方法。
  11. Nを2以上の整数とする時、N個のオペランドに対して並列に演算を施して、N個の演算結果を得る処理をコンピュータに実行させる演算方法であって、
    前記N個のオペランドを連結して1個の仮オペランドとして、前記演算を施すことによって、前記演算結果のN倍の大きさの仮演算結果を1個得ると共に、当該仮演算結果と、前記N個の演算結果を連結した1個の仮演算結果との差分に相当する補正情報を生成する演算ステップと、
    前記N個の演算結果を得る場合に、前記仮演算結果を、前記補正情報を用いて補正し、N個に分割する補正ステップと
    を備えることを特徴とする演算方法。
  12. Mを1以上の整数とする時、前記オペランドのビット長はMビットであり、前記演算結果のビット長はM×2ビットであり、
    前記演算ステップは、
    前記N個のオペランドを連結したN×Mビットを1個の仮オペランドとして、前記演算を施すことによって、N×M×2ビットの仮演算結果を1個得ると共に、当該仮演算結果のM×2ビット毎の、前記演算によって及ぼされる他のM×2ビットからの影響に基づいて補正情報を生成すること
    を特徴とする請求項11に記載の演算方法。
  13. 前記演算方法は、さらに、
    Pを2以上、且つ、N/2以下の整数とする時、M×PビットのオペランドN/P個に対して並列に前記演算を施して、M×P×2ビットの演算結果をN/P個得ることができ、
    前記演算ステップは、
    前記MビットのオペランドN個、又は、前記N×PビットのオペランドN/P個を連結したN×Mビットを1個の仮オペランドとして、前記演算を施すことによって、N×M×2ビットの仮演算結果を1個得ると共に、Lを1からN−1までのN−1個の整数とし、最下位桁を1番目の桁とする時、M×2ビット毎に、前記演算によって各M×2×L番目の桁以下と各M×2×L+1桁番目の以上との間で及ぼしあうN−1個の影響に基づいて第1補正情報を生成し、M×2×Pビット毎に、前記演算によって各M×2×P×L番目の桁以下とM×2×L+1番目の桁以上との間で及ぼしあうN/P−1個の影響に基づいて第2補正情報を生成し、
    前記補正ステップは、
    前記M×2ビットの演算結果をN個得る場合に、前記仮演算結果を前記第1補正情報を用いて補正し、前記M×P×2ビットの演算結果をN/P個得る場合に、前記仮演算結果を前記第2補正情報を用いて補正すること
    を特徴とする請求項12に記載の演算方法。
  14. 前記Nは8であり、
    前記Mは4であり、
    前記Pは2であり、
    前記演算は乗算であること
    を特徴とする請求項13に記載の演算方法。
  15. 所定ビット長の第1ビット長オペランド1個に演算を施す既存演算と、前記所定ビット長よりも短い第2ビット長オペランドの複数に対して並列に前記演算を施すSIMD(Single Instruction Multiple Data)演算とを実行する演算装置であって、
    前記1個の第1ビット長オペランドに、又は、前記複数の第2ビット長オペランドを連結して1個の第1ビット長オペランドと見なして、前記演算を施すことを指示する演算命令と、
    前記演算命令による演算結果を、前記SIMD演算の演算結果に補正することを指示するSIMD補正命令と
    を実装することを特徴とする演算装置。
  16. 前記演算装置は、
    Nを2以上の整数とし、Mを1以上の整数とする時、N×Mビットの第1ビット長オペランド1個に前記演算を施してN×Mビットの第1ビット長演算結果を1個得る既存演算と、Mビットの第2ビット長オペランドN個に対して並列に前記演算を施して、Mビットの第2ビット長演算結果をN個得るN並列SIMD演算とを実行するものであり、
    前記第1ビット長演算結果、及び、前記補正に用いられる補正情報を保持する保持手段と、
    前記演算命令、及び、N並列SIMD補正命令を解読する解読手段と、
    前記演算命令が解読された場合に、前記1個の第1ビット長オペランドに、又は、前記N個の前記第2ビット長オペランドを連結して1個の第1ビット長オペランドと見なして、前記演算を施すことによって、N×Mビットの第1ビット長演算結果を1個得てこれを前記保持手段に保持すると共に、当該第1ビット長演算結果のMビット毎の、前記演算によって及ぼされる各隣接桁からの影響に基づいて前記補正情報を生成してこれを前記保持手段に保持し、前記N並列SIMD補正命令が解読された場合に、前記保持手段に保持された第1ビット長演算結果を、Mビット単位で前記保持手段に保持された補正情報を用いて補正することによって、前記第2ビット長演算結果をN個得る実行手段と
    を備えることを特徴とする請求項15に記載の演算装置。
  17. 前記実行手段は、
    前記N並列SIMD補正命令が解読された場合に、前記第1ビット長演算結果のうちの、最下位のMビットを除く部分を補正すること
    を特徴とする請求項16に記載の演算装置。
  18. 前記演算装置は、さらに、
    Pを、2以上且つN/2以下の整数とする時、M×Pビットの第3ビット長オペランドN/P個に対して並列に前記演算を施して、M×Pビットの第3ビット長演算結果をN/P個得るN/P並列SIMD演算を実行することができ、
    前記解読手段は、さらに、N/P並列SIMD補正命令を解読し、
    前記実行手段は、
    前記演算命令が解読された場合に、前記1個の第1ビット長オペランドに、前記N個の前記第2ビット長オペランドを連結して1個の第1ビット長オペランドと見なして、又は、前記N/P個の第3ビット長オペランドを連結して1個の第1ビット長オペランドと見なして、前記演算を施すことによって、第1ビット長演算結果を得てこれを前記保持手段に保持すると共に、当該第1ビット長演算結果のMビット毎の、前記演算によって及ぼされる各隣接桁からの影響に基づいて前記補正情報を生成してこれを前記保持手段に保持し、
    前記N/P並列SIMD演算が解読された場合に、前記保持手段に保持された第1ビット長演算結果を、M×Pビット単位で前記保持手段に保持された補正情報中のM×Pビット毎の影響に対応する部分のみを用いて補正すること
    を特徴とする請求項16及び17のいずれか1項に記載の演算装置。
  19. 前記Nは8であり、前記Mは8であり、前記Pは2、4又は2と4の両方であること、
    あるいは、前記Nは4であり、前記Mは16であり、前記Pは2であること
    を特徴とする請求項18に記載の演算装置。
  20. 前記演算には複数の種類があり、
    前記実行手段は、
    Lを0からN−1までのN個の整数とし、最下位桁を1番目の桁とする時、前記演算命令が解読された場合に、Mビット毎に、前記演算の種類と、前記演算によって各M×L番目の桁から各M×L+1番目の桁への桁上げの有無とに基づいて、各M×L+1番目の桁が0及び1のいずれかである、又は、0及び−1のいずれかである補正情報を生成し、前記SIMD補正命令が解読された場合に、前記演算の種類に関わらず、前記保持手段に保持された第1ビット長演算結果に、Mビット単位で前記保持手段に保持された補正情報を加算又は減算することによって、前記第2ビット長演算結果をN個得ること
    を特徴とする請求項16及び17のいずれか1項に記載の演算装置。
  21. 前記演算の種類は1加算、1減算、ニ数加算、及び、ニ数減算のうちの少なくとも1つを含み、
    前記実行手段は、
    前記演算命令が解読された場合で、且つ、前記演算の種類が1加算である時には、前記第1ビット長オペランドに1加算して第1ビット長演算結果を得ると共に、桁上げが無かったM×L+1番目の桁を−1、桁上げが有ったM×L+1番目の桁を0とする補正情報を生成し、
    前記演算命令が解読された場合で、且つ、前記演算の種類が1減算である時には、前記第1ビット長オペランドから1減算して第1ビット長演算結果を得ると共に、桁上げが無かったM×L+1番目の桁を0、桁上げが有ったM×L+1番目の桁を1として補正情報を生成し、
    前記演算命令が解読された場合で、且つ、前記演算の種類がニ数加算である時には、加算すべき一方のN個の第2ビット長オペランドを連結して一方の1個の第1ビット長オペランドと見なし、加算すべき他方のN個の第2ビット長オペランドを連結して他方の1個の第1ビット長オペランドと見なして、これら2個の第1ビット長オペランドをニ数加算することによって、第1ビット長演算結果を得ると共に、桁上げが無かったM×L+1番目の桁を0、桁上げが有ったM×L+1番目の桁を1とする補正情報を生成し、
    前記演算命令が解読された場合で、且つ、前記演算の種類がニ数減算である時には、減算されるべきN個の第2ビット長オペランドを連結して減算されるべき1個の第1ビット長オペランドと見なし、減算すべきN個の第2ビット長オペランドを連結して減算すべき1個の第1ビット長オペランドと見なして、これら2個の第1ビット長オペランドをニ数減算することによって、第1ビット長演算結果を得ると共に、桁上げが無かったM×L+1番目の桁を−1、桁上げが有ったM×L+1番目の桁を0として補正情報を生成し、
    前記SIMD補正命令が解読された場合に、前記保持手段に保持された第1ビット長演算結果から、Mビット単位で前記保持手段に保持された補正情報を減算することによって、前記第2ビット長演算結果をN個得ること
    を特徴とする請求項20に記載の演算装置。
  22. 前記演算の種類は1加算、1減算、ニ数加算、及び、ニ数減算のうちの少なくとも1つを含み、
    前記実行手段は、
    前記演算命令が解読された場合で、且つ、前記演算の種類が1加算である時には、前記第1ビット長オペランドに1加算して第1ビット長演算結果を得ると共に、桁上げが無かったM×L+1番目の桁を1、桁上げが有ったM×L+1番目の桁を0とする補正情報を生成し、
    前記演算命令が解読された場合で、且つ、前記演算の種類が1減算である時には、前記第1ビット長オペランドから1減算して第1ビット長演算結果を得ると共に、桁上げが無かったM×L+1番目の桁を0、桁上げが有ったM×L+1番目の桁を−1として補正情報を生成し、
    前記演算命令が解読された場合で、且つ、前記演算の種類がニ数加算である時には、加算すべき一方のN個の第2ビット長オペランドを連結して一方の1個の第1ビット長オペランドと見なし、加算すべき他方のN個の第2ビット長オペランドを連結して他方の1個の第1ビット長オペランドと見なして、これら2個の第1ビット長オペランドをニ数加算することによって、第1ビット長演算結果を得ると共に、桁上げが無かったM×L+1番目の桁を0、桁上げが有ったM×L+1番目の桁を−1とする補正情報を生成し、
    前記演算命令が解読された場合で、且つ、前記演算の種類がニ数減算である時には、減算されるべきN個の第2ビット長オペランドを連結して減算されるべき1個の第1ビット長オペランドと見なし、減算すべきN個の第2ビット長オペランドを連結して減算すべき1個の第1ビット長オペランドと見なして、これら2個の第1ビット長オペランドをニ数減算することによって、第1ビット長演算結果を得ると共に、桁上げが無かったM×L+1番目の桁を1、桁上げが有ったM×L+1番目の桁を0として補正情報を生成し、
    前記N並列SIMD補正命令が解読された場合に、前記保持手段に保持された第1ビット長演算結果から、Mビット単位で前記保持手段に保持された補正情報を減算することによって、前記第2ビット長演算結果をN個得ること
    を特徴とする請求項20に記載の演算装置。
  23. 前記演算には複数の種類があり、
    前記実行手段は、
    前記演算の種類を前記保持手段に保持し、
    前記N並列SIMD補正命令が解読された場合に、前記保持手段に保持された第1ビット長演算結果を、前記保持手段に保持された演算の種類に応じて補正すること
    を特徴とする請求項16に記載の演算装置。
  24. 前記実行手段は、
    前記演算命令が解読された場合に、
    前記演算によって各下位桁から各上位桁へ及ぼされた桁上げの有無を補正情報として生成すること
    を特徴とする請求項23に記載の演算装置。
  25. 前記演算の種類は1加算、1減算、ニ数加算、及び、ニ数減算のうちの少なくとも1つを含み、
    前記実行手段は、
    前記N並列SIMD補正命令が解読された場合であって、Lを0からN−1までのN個の整数とし、最下位桁を1番目の桁とする時、
    前記保持手段に保持された演算の種類が、1加算、及び、ニ数減算のいずれかである場合には、前記演算命令が解読された場合に生成された補正情報に基づいて、前記仮演算結果の桁上げが無かったM×L+1番目の桁に1を加算し、
    前記保持手段に保持された演算の種類が、1減算、及び、ニ数加算のいずれかである場合には、前記演算命令が解読された場合に生成された補正情報に基づいて、前記仮演算結果の桁上げが有ったM×L+1番目の桁から1を減算すること
    を特徴とする請求項24に記載の演算装置。
  26. 前記演算装置は、
    Nを2以上の整数とする時、1個の第1ビット長オペランドに前記演算を施して1個の第1ビット長演算結果を得る既存演算と、N個の第2ビット長オペランドに対して並列に前記演算を施してN個の第2ビット長演算結果を得るN並列SIMD演算とを実行するものであり、
    前記長演算結果、及び、前記補正に用いられる補正情報を保持する保持手段と、
    前記演算命令、及び、前記N並列SIMD補正命令を解読する解読手段と、
    前記演算命令が解読された場合に、前記1個の第1ビット長オペランドに、又は、前記N個の第2ビット長オペランドを連結した1個を第1ビット長オペランドと見なして、前記演算を施すことによって、第1ビット長演算結果を得てこれを前記保持手段に保持すると共に、当該第1ビット長演算結果と、前記N個の第2ビット長演算結果を連結した1個の第1ビット長演算結果との差分に相当する前記補正情報を生成してこれを前記保持手段に保持し、前記N並列SIMD補正命令が解読された場合に、前記保持手段に保持された第1ビット長演算結果を、前記保持手段に保持された補正情報を用いて補正することによって、前記N並列SIMD演算の第2ビット長演算結果をN個得る実行手段と
    を備えることを特徴とする請求項15に記載の演算装置。
  27. Mを1以上の整数とする時、前記第1ビット長オペランドのビット長はN×Mビットであり、前記第2ビット長オペランドのビット長はMビットであり、前記第1ビット長演算結果のビット長はN×M×2ビットであり、前記第2ビット長演算結果のビット長はM×2ビットであり、
    前記実行手段は、
    前記演算命令が解読された場合に、前記1個の第1ビット長オペランドに、又は、前記N個の第2ビット長オペランドを連結した1個を第1ビット長オペランドと見なして、前記演算を施すことによって、前記N×M×2ビットの第1ビット長演算結果を1個得てこれを前記保持手段に保持すると共に、当該第1ビット長演算結果のM×2ビット毎の、前記演算によって及ぼされる他のM×2ビットからの影響に基づいて補正情報を生成して、これを前記保持手段に保持すること
    を特徴とする請求項26に記載の演算装置。
  28. 前記演算装置は、さらに、
    Pを2以上、且つ、N/2以下の整数とする時、M×Pビットの第3ビット長オペランドN/P個に対して並列に前記演算を施して、M×P×2ビットの第3ビット長演算結果をN/P個得るN/P並列SIMD演算を実行することができ、
    前記解読手段は、さらに、N/P並列SIMD補正命令を解読し、
    前記実行手段は、
    前記演算命令が解読された場合に、前記1個の第1ビット長オペランドに、前記N個の第2ビット長オペランドを連結して1個の第1ビット長オペランドと見なして、又は、前記N/P個の第3ビット長オペランドを連結して1個の第1ビット長オペランドと見なして、前記演算を施すことによって、N×M×2ビットの第1ビット長演算結果を1個得てこれを前記保持手段に保持すると共に、Lを1からN−1までのN−1個の整数とし、最下位桁を1番目の桁とする時、M×2ビット毎に、前記演算によって各M×2×L番目の桁以下と各M×2×L+1番目の桁以上との間で及ぼしあうN−1個の影響に基づいて第1補正情報を生成し、M×2×Pビット毎に、前記演算によって各M×2×P×L番目の桁以下とM×2×L+1番目の桁以上との間で及ぼしあうN/P−1個の影響に基づいて第2補正情報を生成してこれらを前記保持手段に保持し、
    前記N並列SIMD補正命令が解読された場合に、前記保持手段に保持された第1ビット長演算結果を、前記保持手段に保持された第1補正情報を用いて補正し、前記N/P並列SIMD補正命令が解読された場合に、前記保持手段に保持された第1ビット長演算結果を、前記保持手段に保持された第2補正情報を用いて補正すること
    を特徴とする請求項27に記載の演算装置。
  29. 前記Nは8であり、
    前記Mは4であり、
    前記Pは2であり、
    前記演算は乗算であること
    を特徴とする請求項28に記載の演算装置。
  30. 前記演算装置は、さらに、
    割込み受付時、又は、他のコンテキストへの切り換え時に、前記保持手段に保持された内容を当該演算装置の外部の記憶装置に退避する退避手段と、
    前記割込みからの復帰時、又は、元のコンテキストへの切り換え時に、前記記憶装置に退避されている内容を、前記保持手段に復元する復元手段とを備えること
    を特徴とする請求項16、23、及び、26のいずれか1項に記載の演算装置。
  31. Nを2以上の整数とし、Mを1以上の整数とする時、MビットのオペランドN個に対して並列に演算を施して、Mビットの演算結果をN個得るN並列SIMD(Single Instruction Multiple Data)演算を実行する演算装置であって、
    N個のMビットのオペランドのそれぞれに1を加えるN並列SIMD1加算命令を実装し、
    前記N並列SIMD1加算命令を解読する解読手段と、
    前記N並列SIMD1加算命令が解読された場合に、Lを1からN−1までのN−1個の整数とし、最下位桁を1番目の桁とする時、N個のMビットのオペランドを結合したデータと、それぞれがMビットからなる1を表すデータをN個結合したデータとの加算を、各M×L番目の桁から各M×L+1番目の桁への桁上げ伝播を切断して行う実行手段と
    を備えることを特徴とする演算装置。
  32. Nを2以上の整数とし、Mを1以上の整数とする時、MビットのオペランドN個に対して並列に演算を施して、Mビットの演算結果をN個得るN並列SIMD(Single Instruction Multiple Data)演算を実行する演算装置であって、
    N個のMビットのオペランドのそれぞれから1を引くN並列SIMD1減算命令を実装し、
    前記N並列SIMD1減算命令を解読する解読手段と、
    前記N並列SIMD1減算命令が解読された場合に、Lを1からN−1までのN−1個の整数とし、最下位桁を1番目の桁とする時、N個のMビットのオペランドを結合したデータから、それぞれがMビットからなる1を表すデータをN個結合したデータを引く減算を、各M×L番目の桁から各M×L+1番目の桁への桁上げ伝播を切断して行う実行手段と
    を備えることを特徴とする演算装置。
  33. 所定ビット長のオペランドの複数に対して並列に演算を施すSIMD(Single Instruction Multiple Data)演算命令及び他の演算命令からなるプログラムを変換するプログラム変換装置であって、
    前記プログラム中の演算命令を解析する解析手段と、
    前記解析手段により前記SIMD演算命令が解析された場合に、当該SIMD演算命令を、前記所定ビット長のオペランドの複数を連結して1個のオペランドと見なして前記演算を施すことを指示する演算命令、及び、前記演算命令による演算結果を前記SIMD演算命令の演算結果に補正することを指示するSIMD補正命令に変換する変換手段と
    を備えることを特徴とするプログラム変換装置。
  34. 所定ビット長のオペランドの複数に対して並列に演算を施すSIMD(Single Instruction Multiple Data)演算を、演算装置に実行させるべき構文を含む高級言語プログラムを、前記演算装置が実行可能な複数の機械語命令からなる機械語プログラムにコンパイルするコンパイル装置であって、
    前記高級言語プログラムの構文を解析する解析手段と、
    前記解析手段により解析された構文を機械語命令列に変換することにより、機械語プログラムを生成するコンパイル手段とを備え、
    前記コンパイル手段は、
    前記解析手段により前記SIMD演算を実行させるべき構文が解析された場合に、当該構文を、前記所定ビット長のオペランドの複数を連結して1個のオペランドと見なして前記演算を施すことを指示する演算機械語命令、及び、前記演算機械語命令による演算結果を前記SIMD演算の演算結果に補正することを指示するSIMD補正機械語命令を含む機械語命令列に変換すること
    を特徴とするコンパイル装置。
  35. 前記コンパイル手段は、
    前記解析手段により前記SIMD演算を実行させるべき構文が解析された場合に、当該構文を、前記SIMD演算を示す中間言語コードを含む中間言語コード列に変換する一次変換手段と、
    前記SIMD演算を示す中間言語コードを、前記演算機械語命令、及び、SIMD補正機械語命令に変換する二次変換手段とを含むこと
    を特徴とする請求項34に記載のコンパイル装置。
  36. 所定ビット長のオペランドの複数に対して並列に演算を施すSIMD(Single Instruction Multiple Data)演算命令及び他の演算命令からなるプログラムを変換するプログラム変換方法であって、
    前記プログラム中の演算命令を解析する解析ステップと、
    前記解析ステップにより前記SIMD演算命令が解析された場合に、当該SIMD演算命令を、前記所定ビット長のオペランドの複数を連結して1個のオペランドと見なして前記演算を施すことを指示する演算命令、及び、前記演算命令による演算結果を前記SIMD演算命令の演算結果に補正することを指示するSIMD補正命令に変換する変換ステップと
    を含むことを特徴とするプログラム変換方法。
  37. 所定ビット長のオペランドの複数に対して並列に演算を施すSIMD(Single Instruction Multiple Data)演算を、演算装置に実行させるべき構文を含む高級言語プログラムを、前記演算装置が実行可能な複数の機械語命令からなる機械語プログラムにコンパイルするコンパイル方法であって、
    前記高級言語プログラムの構文を解析する解析ステップと、
    前記解析手段により解析された構文を機械語命令列に変換することにより、機械語プログラムを生成するコンパイルステップとを備え、
    前記コンパイルステップは、
    前記解析ステップにより前記SIMD演算を実行させるべき構文が解析された場合に、当該構文を、前記所定ビット長のオペランドの複数を連結して1個のオペランドと見なして前記演算を施すことを指示する演算機械語命令、及び、前記演算機械語命令による演算結果を前記SIMD演算の演算結果に補正することを指示するSIMD補正機械語命令を含む機械語命令列に変換すること
    を特徴とするコンパイル方法。
  38. 前記コンパイルステップは、
    前記解析ステップにより前記SIMD演算を実行させるべき構文が解析された場合に、当該構文を、前記SIMD演算を示す中間言語コードを含む中間言語コード列に変換する一次変換サブステップと、
    前記SIMD演算を示す中間言語コードを、前記演算機械語命令、及び、SIMD補正機械語命令に変換する二次変換サブステップとを含むこと
    を特徴とする請求項37に記載のコンパイル方法。
  39. 所定ビット長のオペランドの複数に対して並列に演算を施すSIMD(Single Instruction Multiple Data)演算命令及び他の演算命令からなるプログラムを変換するプログラム変換プログラムであって、
    コンピュータに、
    前記プログラム中の演算命令を解析する解析ステップと、
    前記解析ステップにより前記SIMD演算命令が解析された場合に、当該SIMD演算命令を、前記所定ビット長のオペランドの複数を連結して1個のオペランドと見なして前記演算を施すことを指示する演算命令、及び、前記演算命令による演算結果を前記SIMD演算命令の演算結果に補正することを指示するSIMD補正命令に変換する変換ステップと
    を実行させることを特徴とするプログラム変換プログラム。
  40. 所定ビット長のオペランドの複数に対して並列に演算を施すSIMD(Single Instruction Multiple Data)演算を、演算装置に実行させるべき構文を含む高級言語プログラムを、前記演算装置が実行可能な複数の機械語命令からなる機械語プログラムにコンパイルするコンパイルプログラムであって、
    コンピュータに、
    前記高級言語プログラムの構文を解析する解析ステップと、
    前記解析手段により解析された構文を機械語命令列に変換することにより、機械語プログラムを生成するコンパイルステップとを備え、
    前記コンパイルステップは、
    前記解析ステップにより前記SIMD演算を実行させるべき構文が解析された場合に、当該構文を、前記所定ビット長のオペランドの複数を連結して1個のオペランドと見なして前記演算を施すことを指示する演算機械語命令、及び、前記演算機械語命令による演算結果を前記SIMD演算の演算結果に補正することを指示するSIMD補正機械語命令を含む機械語命令列に変換すること
    を実行させることを特徴とするコンパイルプログラム。
  41. 前記コンパイルステップは、
    前記解析ステップにより前記SIMD演算を実行させるべき構文が解析された場合に、当該構文を、前記SIMD演算を示す中間言語コードを含む中間言語コード列に変換する一次変換サブステップと、
    前記SIMD演算を示す中間言語コードを、前記演算機械語命令、及び、SIMD補正機械語命令に変換する二次変換サブステップとを含むこと
    を特徴とする請求項40に記載のコンパイルプログラム。
  42. Nを2以上の整数とし、Mを1以上の整数とする時、MビットのオペランドN個に対して並列に演算を施して、Mビットの演算結果をN個得る処理を、コンピュータに実行させる演算プログラムであって、
    コンピュータに、
    前記MビットのオペランドN個を連結したN×Mビットを1個の仮オペランドとして、前記演算を施すことによって、N×Mビットの仮演算結果を1個得ると共に、当該仮演算結果のMビット毎の、前記演算によって及ぼされる各隣接桁からの影響に基づいて補正情報を生成する演算ステップと、
    前記Mビットの演算結果をN個得る場合に、前記仮演算結果を、Mビット単位で前記補正情報を用いて補正する補正ステップと
    を実行させることを特徴とする演算プログラム。
  43. 前記補正ステップは、
    前記仮演算結果のうちの、最下位のMビットを除く部分を補正すること
    を特徴とする請求項42に記載の演算プログラム。
  44. Nを2以上の整数とする時、N個のオペランドに対して並列に演算を施して、N個の演算結果を得る処理をコンピュータに実行させる演算プログラムであって、
    コンピュータに、
    前記N個のオペランドを連結して1個の仮オペランドとして、前記演算を施すことによって、前記演算結果のN倍の大きさの仮演算結果を1個得ると共に、当該仮演算結果と、前記N個の演算結果を連結した1個の仮演算結果との差分に相当する補正情報を生成する演算ステップと、
    前記N個の演算結果を得る場合に、前記仮演算結果を、前記補正情報を用いて補正し、N個に分割する補正ステップと
    を実行させることを特徴とする演算プログラム。
  45. コンピュータに、所定ビット長の第1ビット長オペランド1個に演算を施す既存演算と、前記所定ビット長よりも短い第2ビット長オペランドの複数に対して並列に前記演算を施すSIMD(Single Instruction Multiple Data)演算とを実行させる演算プログラムであって、
    前記1個の第1ビット長オペランドに、又は、前記複数の第2ビット長オペランドを連結して1個の第1ビット長オペランドと見なして、前記演算を施すことを、コンピュータに指示する演算命令と、
    前記演算命令による演算結果を、前記SIMD演算の演算結果に補正することを、コンピュータに指示するSIMD補正命令と
    を含むことを特徴とする演算プログラム。
  46. Nを2以上の整数とし、Mを1以上の整数とする時、MビットのオペランドN個に対して並列に演算を施して、Mビットの演算結果をN個得る処理を、コンピュータに実行させる演算プログラムを記録したコンピュータ読み取り可能な記録媒体であって、
    コンピュータに、
    前記MビットのオペランドN個を連結したN×Mビットを1個の仮オペランドとして、前記演算を施すことによって、N×Mビットの仮演算結果を1個得ると共に、当該仮演算結果のMビット毎の、前記演算によって及ぼされる各隣接桁からの影響に基づいて補正情報を生成する演算ステップと、
    前記Mビットの演算結果をN個得る場合に、前記仮演算結果を、Mビット単位で前記補正情報を用いて補正する補正ステップと
    を実行させることを特徴とする演算プログラムを記録したコンピュータ読み取り可能な記録媒体。
  47. 前記補正ステップは、
    前記仮演算結果のうちの、最下位のMビットを除く部分を補正すること
    を特徴とする請求項46に記載の演算プログラムを記録したコンピュータ読み取り可能な記録媒体。
  48. Nを2以上の整数とする時、N個のオペランドに対して並列に演算を施して、N個の演算結果を得る処理をコンピュータに実行させる演算プログラムを記録したコンピュータ読み取り可能な記録媒体であって、
    コンピュータに、
    前記N個のオペランドを連結して1個の仮オペランドとして、前記演算を施すことによって、前記演算結果のN倍の大きさの仮演算結果を1個得ると共に、当該仮演算結果と、前記N個の演算結果を連結した1個の仮演算結果との差分に相当する補正情報を生成する演算ステップと、
    前記N個の演算結果を得る場合に、前記仮演算結果を、前記補正情報を用いて補正し、N個に分割する補正ステップと
    を実行させることを特徴とする演算プログラムを記録したコンピュータ読み取り可能な記録媒体。
  49. コンピュータに、所定ビット長の第1ビット長オペランド1個に演算を施す既存演算と、前記所定ビット長よりも短い第2ビット長オペランドの複数に対して並列に前記演算を施すSIMD(Single Instruction Multiple Data)演算とを実行させる演算プログラムを記録したコンピュータ読み取り可能な記録媒体であって、
    前記1個の第1ビット長オペランドに、又は、前記複数の第2ビット長オペランドを連結して1個の第1ビット長オペランドと見なして、前記演算を施すことを、コンピュータに指示する演算命令と、
    前記演算命令による演算結果を、前記SIMD演算の演算結果に補正することを、コンピュータに指示するSIMD補正命令と
    を含むことを特徴とする演算プログラムを記録したコンピュータ読み取り可能な記録媒体。
JP2001363307A 2001-11-28 2001-11-28 Simd演算方法およびsimd演算装置 Expired - Lifetime JP3779602B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2001363307A JP3779602B2 (ja) 2001-11-28 2001-11-28 Simd演算方法およびsimd演算装置
US10/304,341 US7237089B2 (en) 2001-11-28 2002-11-26 SIMD operation method and SIMD operation apparatus that implement SIMD operations without a large increase in the number of instructions
US12/491,163 USRE46277E1 (en) 2001-11-28 2009-06-24 SIMD operation method and SIMD appartus that implement SIMD operations without a large increase in the number of instructions

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2001363307A JP3779602B2 (ja) 2001-11-28 2001-11-28 Simd演算方法およびsimd演算装置

Publications (2)

Publication Number Publication Date
JP2003167728A JP2003167728A (ja) 2003-06-13
JP3779602B2 true JP3779602B2 (ja) 2006-05-31

Family

ID=19173670

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001363307A Expired - Lifetime JP3779602B2 (ja) 2001-11-28 2001-11-28 Simd演算方法およびsimd演算装置

Country Status (2)

Country Link
US (2) US7237089B2 (ja)
JP (1) JP3779602B2 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3779602B2 (ja) * 2001-11-28 2006-05-31 松下電器産業株式会社 Simd演算方法およびsimd演算装置
US9047094B2 (en) 2004-03-31 2015-06-02 Icera Inc. Apparatus and method for separate asymmetric control processing and data path processing in a dual path processor
US7949856B2 (en) 2004-03-31 2011-05-24 Icera Inc. Method and apparatus for separate control processing and data path processing in a dual path processor with a shared load/store unit
US8484441B2 (en) 2004-03-31 2013-07-09 Icera Inc. Apparatus and method for separate asymmetric control processing and data path processing in a configurable dual path processor that supports instructions having different bit widths
JP2006243839A (ja) * 2005-02-28 2006-09-14 Toshiba Corp 命令生成装置及び命令生成方法
US7529918B2 (en) * 2006-07-21 2009-05-05 Broadcom Corporation System and method for efficiently performing bit-field extraction and bit-field combination operations in a processor
US8505002B2 (en) * 2006-09-29 2013-08-06 Arm Limited Translation of SIMD instructions in a data processing system
US8959501B2 (en) * 2010-12-14 2015-02-17 Microsoft Corporation Type and length abstraction for data types
CN108681465B (zh) * 2011-12-22 2022-08-02 英特尔公司 用于产生整数序列的处理器、处理器核及系统
CN106775587B (zh) * 2016-11-30 2020-04-14 上海兆芯集成电路有限公司 计算机指令的执行方法以及使用此方法的装置
EP3499362B1 (en) * 2017-12-13 2022-11-30 ARM Limited Vector add-with-carry instruction

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2077010B (en) 1980-06-02 1984-10-31 Hitachi Ltd Microprogramme control method and apparatus therefor
US4710872A (en) * 1985-08-07 1987-12-01 International Business Machines Corporation Method for vectorizing and executing on an SIMD machine outer loops in the presence of recurrent inner loops
US5001662A (en) 1989-04-28 1991-03-19 Apple Computer, Inc. Method and apparatus for multi-gauge computation
JPH03268024A (ja) 1990-03-19 1991-11-28 Hitachi Ltd マイクロプロセッサ、情報処理装置及びそれを用いた図形表示装置
US5588152A (en) * 1990-11-13 1996-12-24 International Business Machines Corporation Advanced parallel processor including advanced support hardware
US5408670A (en) * 1992-12-18 1995-04-18 Xerox Corporation Performing arithmetic in parallel on composite operands with packed multi-bit components
US5761466A (en) 1994-05-09 1998-06-02 Lsi Logic Corporation Soft programmable single-cycle/pipelined micro-programmed control system
US5504698A (en) * 1994-05-17 1996-04-02 Silicon Graphics, Inc. Compact dual function adder
US5606707A (en) * 1994-09-30 1997-02-25 Martin Marietta Corporation Real-time image processor
US7085795B2 (en) * 2001-10-29 2006-08-01 Intel Corporation Apparatus and method for efficient filtering and convolution of content data
JPH0997178A (ja) 1995-09-29 1997-04-08 Matsushita Electric Ind Co Ltd 飽和演算処理装置および方法
US5764787A (en) * 1996-03-27 1998-06-09 Intel Corporation Multi-byte processing of byte-based image data
US6092094A (en) * 1996-04-17 2000-07-18 Advanced Micro Devices, Inc. Execute unit configured to selectably interpret an operand as multiple operands or as a single operand
JP2923911B2 (ja) * 1996-10-21 1999-07-26 日本電気株式会社 動き補償加算装置
US6006316A (en) * 1996-12-20 1999-12-21 International Business Machines, Corporation Performing SIMD shift and arithmetic operation in non-SIMD architecture by operation on packed data of sub-operands and carry over-correction
US5828875A (en) 1997-05-29 1998-10-27 Telefonaktiebolaget Lm Ericsson Unroll of instructions in a micro-controller
US6047304A (en) * 1997-07-29 2000-04-04 Nortel Networks Corporation Method and apparatus for performing lane arithmetic to perform network processing
US6460134B1 (en) * 1997-12-03 2002-10-01 Intrinsity, Inc. Method and apparatus for a late pipeline enhanced floating point unit
US6173388B1 (en) * 1998-04-09 2001-01-09 Teranex Inc. Directly accessing local memories of array processors for improved real-time corner turning processing
US6282554B1 (en) * 1998-04-30 2001-08-28 Intel Corporation Method and apparatus for floating point operations and format conversion operations
US6175892B1 (en) * 1998-06-19 2001-01-16 Hitachi America. Ltd. Registers and methods for accessing registers for use in a single instruction multiple data system
US6292814B1 (en) * 1998-06-26 2001-09-18 Hitachi America, Ltd. Methods and apparatus for implementing a sign function
JP3869947B2 (ja) * 1998-08-04 2007-01-17 株式会社日立製作所 並列処理プロセッサ、および、並列処理方法
JP3139466B2 (ja) * 1998-08-28 2001-02-26 日本電気株式会社 乗算器及び積和演算器
US6529930B1 (en) * 1998-11-16 2003-03-04 Hitachi America, Ltd. Methods and apparatus for performing a signed saturation operation
US6282556B1 (en) * 1999-10-08 2001-08-28 Sony Corporation Of Japan High performance pipelined data path for a media processor
US20020135683A1 (en) * 1999-12-20 2002-09-26 Hideo Tamama Digital still camera system and method
US7191310B2 (en) * 2000-01-19 2007-03-13 Ricoh Company, Ltd. Parallel processor and image processing apparatus adapted for nonlinear processing through selection via processor element numbers
JP3779602B2 (ja) * 2001-11-28 2006-05-31 松下電器産業株式会社 Simd演算方法およびsimd演算装置
JP3857614B2 (ja) * 2002-06-03 2006-12-13 松下電器産業株式会社 プロセッサ
US20070082104A1 (en) * 2004-08-12 2007-04-12 Sophie De Baets Functional sugar replacement

Also Published As

Publication number Publication date
JP2003167728A (ja) 2003-06-13
US20030145031A1 (en) 2003-07-31
US7237089B2 (en) 2007-06-26
USRE46277E1 (en) 2017-01-17

Similar Documents

Publication Publication Date Title
JP4064989B2 (ja) パック・データの乗加算演算を実行する装置
JP3958662B2 (ja) プロセッサ
USRE46277E1 (en) SIMD operation method and SIMD appartus that implement SIMD operations without a large increase in the number of instructions
JP3790619B2 (ja) 正値化処理及び飽和演算処理からなる丸め処理を好適に行うことができるプロセッサ
KR100329339B1 (ko) 압축데이터에의한승산-가산연산수행장치
JP3974063B2 (ja) プロセッサおよびコンパイラ
KR100445542B1 (ko) 프로세서의커스텀오퍼레이션들을위한방법및장치
Busaba et al. The IBM z900 decimal arithmetic unit
JP3801545B2 (ja) コンパイラ用プログラム、コンパイラ装置及びコンパイル方法
US5644522A (en) Method, apparatus and system for multiply rounding using redundant coded multiply result
JP3547139B2 (ja) プロセッサ
US6078941A (en) Computational structure having multiple stages wherein each stage includes a pair of adders and a multiplexing circuit capable of operating in parallel
JP3505266B2 (ja) プログラム実行装置
US7509634B2 (en) SIMD instruction sequence generating program, SIMD instruction sequence generating method and apparatus
US5880979A (en) System for providing the absolute difference of unsigned values
US11635956B2 (en) Fully pipelined hardware operator logic circuit for converting human-readable decimal character sequence floating-point representations to IEEE 754-2008 binary floating-point format representations
JPH0863353A (ja) 掛け算累算命令を使用したデータ処理
TW564368B (en) Method and apparatus for arithmetic operations on vectored data
JP2006146644A (ja) プロセッサ
US20030037085A1 (en) Field processing unit
KR102586259B1 (ko) 레지스터 기반의 복소수 처리
US6338135B1 (en) Data processing system and method for performing an arithmetic operation on a plurality of signed data values
US20090248780A1 (en) Polynomial data processing operation
US5774694A (en) Method and apparatus for emulating status flag
Anand et al. Accelerating and Visualizing Modulo Arithmetic using Multiple Radices

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20041124

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20050426

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050517

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050714

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20060302

R150 Certificate of patent or registration of utility model

Ref document number: 3779602

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100310

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110310

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110310

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120310

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130310

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130310

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140310

Year of fee payment: 8

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term