JP6307975B2 - 演算処理装置及び演算処理装置の制御方法 - Google Patents

演算処理装置及び演算処理装置の制御方法 Download PDF

Info

Publication number
JP6307975B2
JP6307975B2 JP2014068415A JP2014068415A JP6307975B2 JP 6307975 B2 JP6307975 B2 JP 6307975B2 JP 2014068415 A JP2014068415 A JP 2014068415A JP 2014068415 A JP2014068415 A JP 2014068415A JP 6307975 B2 JP6307975 B2 JP 6307975B2
Authority
JP
Japan
Prior art keywords
register
renaming
instruction
reg
basic
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.)
Active
Application number
JP2014068415A
Other languages
English (en)
Other versions
JP2015191463A (ja
Inventor
亮平 岡崎
亮平 岡崎
秋月 康伸
康伸 秋月
猛一 田端
猛一 田端
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2014068415A priority Critical patent/JP6307975B2/ja
Priority to US14/665,405 priority patent/US20150277905A1/en
Publication of JP2015191463A publication Critical patent/JP2015191463A/ja
Application granted granted Critical
Publication of JP6307975B2 publication Critical patent/JP6307975B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions

Landscapes

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

Description

本発明は,演算処理装置及び演算処理装置の制御方法に関する。
演算処理装置であるCPU(Central Processing Unit)は,様々な高速化処理技術を採用する。高速化処理技術の一例として,例えば,連続する命令を複数のステージまたはサイクルに分けて順次処理するパイプライン処理方式,演算処理を並列に実行可能にするスーパースカラ方式,プログラムが指定する順番通り,すなわち,命令をインオーダに実行せず,命令実行に必要な入力データや演算器などの準備がそろった命令から実行を行うアウトオブオーダ実行方式などがある。
そして,アウトオブオーダ実行方式において,命令の実行が完了した出力データをリネーミングレジスタに一時的に格納し,処理順序が先の命令が完了した時点で命令が演算結果を保持するレジスタとして指定するデスティネーションレジスタに格納するレジスタリネーミング技術がある。
さらに,複数の処理を並列に行うことで処理を高速化する技術として,1命令で複数のデータの処理を並列に実行する処理方式として,SIMD(Single Instruction Multiple Data)処理方式がある。SIMD処理方式を実現するCPUは,1命令で4つのデータの処理を並列に行う4-SIMDの場合,1つの命令コード(オペコード)をデコードし,同じアドレスで指定されたソース側の第1〜第4のレジスタからデータ(ソースオペランドデータ)をそれぞれ読み出し,第1〜第4の演算器にそれぞれ入力し,それらの4つの演算結果をデスティネーション先(格納先)の第1〜第4のレジスタにそれぞれ出力する。
アウトオブオーダ方式とSIMD処理方式を取り入れたCPUは,アウトオブオーダ方式のために,処理結果を最終的に格納するレジスタとして命令が指定するデスティネーションレジスタ(格納先レジスタ)に加えて,一時的に処理結果を格納するリネーミングレジスタを有し,SIMD処理方式のために,演算器と,デスティネーションレジスタと,リネーミングレジスタと,デスティネーションレジスタとリネーミングレジスタの対応付けを記憶するレジスタリネーミング部を含むセットを,SIMDで並列処理可能な数のセットだけ有する。
アウトオブオーダ方式とSIMD方式を取り入れたCPUについては,例えば,以下の特許文献に記載されている。
特開2011−34450号公報 特開2007−234011号公報
アウトオブオーダ方式とSIMD処理方式を取り入れたCPUは,1つの命令で複数のデータを処理するSIMD命令(またはマルチデータ命令と称する)を処理するために拡張して設けられている演算器やレジスタを,1命令で1つのデータを処理する非SIMD命令(または非マルチデータ命令と称する)を実行する場合にも,有効に利用することが望ましい。ハードウエアリソースを有効に活用することで,より多くの非SIMD命令(または非マルチデータ命令)を処理することができるからである。
しかしながら,SIMD命令(またはマルチデータ命令)を処理するために設けられた複数セットの演算器,デスティネーションレジスタ,リネーミングレジスタ,レジスタリネーミング部を,全て,非SIMD命令の処理でも利用できるようにハードウエアリソース利用の自由度を高めようとすると,ハードウエア回路の回路量が大規模化する。特に,レジスタの対応関係を記憶するレジスタリネーミング部の回路量の増大は,SIMD命令(マルチデータ命令)を処理する場合にレジスタリネーミング部のマップが全てのレジスタの対応関係を参照する必要はないので,無視できない。
すなわち,SIMD処理の並列度をより高くすることで,大量のデータを演算する命令を実行するアプリケーションの処理を高速化することができるが,同時に非SIMD命令(非マルチデータ命令)の処理に対するハードウエアリソース利用の高い自由度を確保しようとすると,ハードウエア回路の規模が大規模化する。したがって,SIMD処理の並列度をより高くすると共に,ハードウエア回路の規模をリーズナブルなレベルに抑制することが必要になる。
そこで,本発明の目的は,SIMD処理の並列度を高めることと非SIMD処理の自由度を高めることをハードウエア規模の拡大を抑制しつつ実現する演算処理装置と演算処理装置の制御方法を提供することにある。
本実施の形態の第1の側面は,命令をデコードする命令デコーダと,
前記命令デコーダがデコードした命令が,複数のデータを1つの命令で並列処理するマルチデータ命令の場合に,前記複数のデータを並列に処理し,単数のデータを1つの命令で処理する非マルチデータ命令の場合に,前記単数のデータを個別に処理する3個以上の複数の演算器と,
前記複数の演算器それぞれに対応して設けられ,前記演算器の演算結果を格納可能な複数の格納先レジスタ群と,
前記複数の演算器それぞれに対応して設けられ,前記演算結果を格納可能な複数のリネーミングレジスタ群と,
前記格納先レジスタ群のうち命令により指定された指定格納先レジスタと,前記リネーミングレジスタ群から割り当てられた割当リネーミングレジスタとの対応関係を記憶するレジスタリネーミング部とを有し,
前記格納先レジスタ群と前記リネーミングレジスタ群を有するレジスタのセットが,前記マルチデータ命令の演算と前記非マルチデータ命令の演算で使用される基本レジスタセットに加えて,前記マルチデータ命令の演算と前記非マルチデータ命令の演算で使用される第1拡張レジスタセットと,前記マルチデータ命令の演算で使用され且つ前記非マルチデータ命令の演算で使用されない第2拡張レジスタセットとを有し,
前記レジスタリネーミング部が,前記基本レジスタセットの前記対応関係と,前記第1拡張レジスタセットの前記対応関係とを記憶する演算処理装置である。
第1の側面によれば,SIMD処理の並列度を高めることと非SIMD処理の自由度を高めることをハードウエア規模の拡大を抑制しつつ実現することができる。
本実施の形態における演算処理装置を搭載した情報処理装置を示す図である。 本実施の形態におけるCPUコア(演算処理部)の構成を示す図である。 2-SIMD構成における非SIMD命令のレジスタリネーミング処理を示す図である。 2-SIMD構成におけるSIMD命令のレジスタリネーミング処理を示す図である。 2-SIMD構成における非SIMD命令の別のレジスタリネーミング処理を示す図である。 2-SIMD構成におけるSIMD命令の別のレジスタリネーミング処理を示す図である。 3-SIMD構成における非SIMD命令の別のレジスタリネーミング処理を示す図である。 3-SIMD構成におけるSIMD命令の別のレジスタリネーミング処理を示す図である。 本実施の形態におけるCPUコアの構成を示す図である。 第1の実施の形態における3-SIMD構成における非SIMD命令のレジスタリネーミング処理を示す図である。 第1の実施の形態における3-SIMD構成におけるSIMD命令のレジスタリネーミング処理を示す図である。 第2の実施の形態における3-SIMD構成におけるSIMD命令のレジスタリネーミング処理を示す図である。 本実施の形態における浮動小数点SIMD演算命令を実行する場合のパイプライン処理を説明する図である。 本実施の形態における浮動小数点SIMD演算命令を実行する場合のパイプライン処理を説明する図である。 本実施の形態における非SIMD演算命令を実行する場合のパイプライン処理を説明する図である。 本実施の形態における非SIMD演算命令を実行する場合のパイプライン処理を説明する図である。
図1は,本実施の形態における演算処理装置を搭載した情報処理装置を示す図である。コンピュータなどの情報処理装置10は,CPU/メモリボード12と,大容量の記憶装置であるハードディスク11とを有する。CPU/メモリボード12は,CPUチップである演算処理装置20と,演算処理装置20と外部のハードディスク11などを接続するインタコネクタ13と,DRAM等のメインメモリ14とを有する。
演算処理装置20は,例えば,4つのCPUコア(演算処理部)30A−30Dと,4つのCPUコアで共有される二次キャッシュ24と,入出力インタフェース26と,メインメモリ14へのアクセスを制御するメモリアクセスコントローラ(Memory Access Controller : MAC)28とを有する。
図2は,本実施の形態におけるCPUコア(演算処理部)の構成を示す図である。図2に示したCPUコア30は,準備が整った命令から実行を行うアウトオブオーダ命令実行機能と,アウトオブオーダで実行された命令をプログラムの順番で,つまりインオーダで完了するために,レジスタ競合による実行ストールを回避するレジスタリネーミング機能を有する。
特に,図2のCPUコア30は,浮動小数点演算,浮動小数点ロード(メモリの読み出し),または浮動小数点ストア(メモリへの書き込み)を複数のデータに対して実行するマルチデータ命令(以下SIMD命令と称する)に応じたSIMD処理を行うことができる。もちろん,1つのデータに対して実行する非マルチデータ命令(以下非SIMD命令と称する)に応じた処理も行うことができる。
図2のCPUコア30は,プログラムカウンタPCまたは分岐予測機構が予測する分岐先アドレスのいずれかを選択する命令フェッチアドレス生成器301と,分岐命令の分岐予測を行う分岐予測部302と,命令が記憶されている一次命令キャッシュ303と,一次命令キャッシュから読み出した命令を一時的に格納する命令バッファ304と,命令をデコードする命令デコーダ305を有する。命令デコーダ305は,後述するとおり,命令に対応する制御信号を生成すると共に,命令で指定されている格納先レジスタにリネーミングレジスタを割り当てる。
更に,CPUコア30は,格納先レジスタに割り当てられたリネーミングレジスタとの対応関係を記憶するレジスタリネーミング部REG_RENと,主記憶オペランド生成用リザベーションステーション(Reservation Station for Address generate : RSA)と,固定小数点演算用リザベーションステーション(Reservation Station for Execute: RSE)と,浮動小数点演算用リザベーションステーション(Reservation Station for Floating : RSF)と,分岐用Reservation Station(Reservation Station for Branch : RSBR)と,コミットスタックエントリ(Commit Stack Entry : CSE)とを有する。
各リザベーションステーションRSは,命令デコーダ305から発行された命令のキューであり,命令を実行する実行ユニットに対応して設けられる。特に,固定小数点演算用リザベーションステーションRSEと浮動小数点演算用リザベーションステーションRSFは,アウトオブオーダで,つまり入力データや演算器の準備が整った命令から対応する演算器に命令を発行する。一方,コミットスタックエントリCSEは,全ての命令のエントリについて命令の完了を判定し,アウトオブオーダで開始された命令をインオーダで完了させる。
そして,CPUコア30は,オペランドデータ選択部310と,オペランドアドレス生成器311と,一次データキャッシュ部312と,ストアバッファ部313とを有する。また,CPUコア30は,固定小数点演算を行う演算器320と,浮動小数点演算を行うSIMD演算器330と,固定小数点リネーミングレジスタ321と,浮動小数点リネーミングレジスタFR_REGと,固定小数点レジスタ322と,浮動小数点SIMDレジスタFS_REGと,プログラムカウンタPCとを有する。
命令フェッチアドレス生成器301は,プログラムカウンタPCのカウント値または分岐予測部302からの情報を基に命令アドレスを選択し,一次命令キャッシュ303に対して命令フェッチリクエストを発行する。分岐予測部302は,分岐リザベーションステーションRSBRのエントリに基づいて分岐予測を行う。一次命令キャッシュ303は,命令フェッチリクエストに応じて読み出した命令を命令バッファ304に格納する。そして,命令バッファ304から命令デコーダに対し,プログラムにより指定された命令の順番通りに,すなわちインオーダで命令が供給され,命令デコーダ305は命令バッファ304から供給された命令をインオーダでデコードする。
命令デコーダ305は,デコードした命令の種類に応じて4つのリザベーションステーションRSA,RSE,RSF,またはRSBRに対して,必要なエントリを作成する。これとともに命令デコーダ305は,コミットスタックエントリCSEに対して,デコードしたすべての命令に対応するエントリを作成する。また,命令デコーダ305は,命令が指定するアーキテクチャレジスタ内のレジスタに,リネーミングレジスタ内のレジスタを割り当てる。
レジスタリネーミング部REG_RENは,リザベーションステーションRSA,RSEまたはRSFのいずれかにエントリが作成された時に,命令が指定するアーキテクチャレジスタに割り当てられたリネーミングレジスタのアドレスを記憶する。指定されたアーキテクチャレジスタと割当リネーミングレジスタとの対応関係はレジスタリネーミング部内のリネーミングマップに登録される。CPUコアは,アーキテクチャレジスタとして,固定小数点レジスタ322および浮動小数点SIMDレジスタFS_REGを有する。これらのレジスタは,演算処理結果を格納する格納レジスタとして,命令により指定される。またリネーミングレジスタとして,固定小数点リネーミングレジスタ321および浮動小数点リネーミングレジスタFR_REGを有する。
命令デコーダ305は,固定小数点レジスタ322が格納先のレジスタとして使用される場合には,リネーミングレジスタとして固定小数点リネーミングレジスタ321のアドレスを割り当てる。また,命令デコーダ305は,浮動小数点SIMDレジスタが格納先のレジスタとして使用される場合には,リネーミングレジスタとして浮動小数点リネーミングレジスタFR_REGを割り当てる。前述の格納先レジスタのアドレスに対して割り当てられたリネーミングレジスタのアドレスは,対応関係として,その命令に対応するリザベーションステーションRSA,RSE,RSFと,コミットスタックエントリCSEに出力される。
リザベーションステーションRSA,RSE,RSFは,保持されたエントリのうち,処理に必要な資源,例えばデータや演算器の準備ができたものから順次出力し,後段の演算器などのブロックに対してエントリに対応する処理を実行させる。これにより,命令がアウトオブオーダで実行開始され,命令の処理結果は,固定小数点リネーミングレジスタ321または浮動小数点リネーミングレジスタFR_REGに一時的に格納される。
浮動小数点リザベーションステーションRSFには,例えば浮動小数点演算命令に対応するエントリが格納される。演算器330は,リザベーションステーションRSFからのエントリに基づいて,演算の対象となる入力データを選択し,浮動小数点演算を実行する。浮動小数点命令の実行時には,SIMD演算器330の演算結果は浮動小数点リネーミングレジスタFR_REGに一時的に格納される。
また,浮動小数点ストア命令の実行時には,SIMD演算器330は演算対象として選択したデータをストアバッファ部313に出力する。そして,ストアバッファ部313は,オペランドアドレス生成器311から出力されたオペランドアドレスを指定して,SIMD演算器330から出力されたデータを一次データキャッシュ部に書き込む。
コミットスタックエントリCSEは,命令デコーダ305によりデコードされたすべての命令に対応するエントリを保持し,各エントリに対応する処理の実行状況を管理し,これらの命令をインオーダで完了させる。例えば,コミットスタックエントリCSEは,次に完了させるべきエントリに対応する処理の結果が,固定小数点リネーミングレジスタ321または浮動小数点リネーミングレジスタFR_REGに格納されると共に,前の順番の命令が完了したと判定すると,リネーミングレジスタに格納されたデータを固定小数点レジスタ322または浮動小数点SIMDレジスタFS_REGに出力させる。これにより,各リザベーションステーションでアウトオブオーダで実行された命令がインオーダで完了する。
固定小数点リネーミングレジスタ321及び浮動小数点リネーミングレジスタFR_REGは,コミットスタックエントリCSEのエントリの数と同じか,それより少ない数の複数のレジスタを有する。
そして,SIMD演算器330は,基本演算器と拡張演算器を有する。基本演算器は,例えばより多くの演算を実行できる演算回路を有する。一方,拡張演算器は,一部の演算に対応できる演算回路を有する。例えば,1つの命令で4つの組のデータを並列処理できる4-SIMD処理に対応する場合は,SIMD演算器330は,1つの基本演算器と3つの拡張演算器を有する。
そして,浮動小数点SIMDレジスタFS_REGは,それぞれ同数の基本レジスタおよび拡張レジスタを有する。同様に,浮動小数点リネーミングレジスタFR_REGも,それぞれ同数の基本リネーミングレジスタおよび拡張リネーミングレジスタを有する。
図2において,演算器320と固定小数点レジスタ322と固定小数点リネーミングレジスタ321を有する固定小数点演算ユニットを,SIMD処理に対応できるように,基本演算器と拡張演算器,基本レジスタと拡張レジスタ,基本リネーミングレジスタと拡張リネーミングレジスタを有しても良い。但し,図2では,浮動小数点処理に対してのみSIMD処理ができるように構成されている。
図2の浮動小数点演算ユニットを構成する浮動小数点リザベーションステーションRSFと,SIMD演算器330と,浮動小数点SIMDレジスタFS_REGと,浮動小数点リネーミングレジスタFR_REGは,SIMD命令と非SIMD命令を次のように処理する。SIMD命令の場合は,SIMD演算器330内の基本演算器と拡張演算器が並行して処理を行い,それぞれに対して割り当てられている浮動小数点リネーミングレジスタFR_REG内の基本レジスタ及び拡張レジスタに処理結果を一時的に格納する。そして,コミットスタックエントリCSEが順番が前の命令の完了と現在の命令の完了を検出すると,浮動小数点リネーミングレジスタFR_REG内の基本レジスタ及び拡張レジスタに一時的に格納された処理結果が,浮動小数点SIMDレジスタFS_REG内の基本レジスタ及び拡張レジスタに格納される。
一方,非SIMD命令に対しても,同様に演算器の処理結果が浮動小数点リネーミングレジスタFR_ERGに一時的に格納され,コミットスタックエントリCSEが前述の命令完了を検出すると,浮動小数点リネーミングレジスタFR_ERG内のレジスタに一時的に格納された処理結果が,浮動小数点SIMDレジスタFS_REG内のレジスタに格納される。
[SIMD処理の並列度向上と非SIMD処理の自由度向上の問題点]
次に,SIMD処理の並列度を高めることと非SIMD処理の自由度を高めることを同時に追求した場合の問題点について説明する。
図3は,2-SIMD構成における非SIMD命令のレジスタリネーミング処理を示す図である。図4は,2-SIMD構成におけるSIMD命令のレジスタリネーミング処理を示す図である。図3,図4に示されるとおり,2-SIMD構成に対応して,浮動小数点SIMDレジスタFR_ERGは,1つの基本レジスタB_REGの群と,1つの拡張レジスタE_REGの群とを有する。基本レジスタB_REGと拡張レジスタE_REGの群は,それぞれ8バイトのビット幅を有し,それぞれ同じ数のレジスタを有する。図3,4では128個のレジスタを有する。
同様に,浮動小数点リネーミングレジスタFR_ERGも,1つの基本リネーミングレジスタBR_REGの群と,1つの拡張リネーミングレジスタER_REGの群とを有する。基本リネーミングレジスタBR_REGと拡張リネーミングレジスタER_REGの群は,それぞれ8バイトのビット幅を有し,それぞれ同じ数のレジスタを有する。図3,4では128個以下の数のレジスタを有する。
一方,レジスタリネーミング部REG_RENは,1つの基本レジスタリネーミングマップBRRMを有する。基本レジスタリネーミングマップBRRMは,浮動小数点SIMDレジスタFS_ERG内の基本レジスタB_REGの0〜127に対応するエントリを有し,基本レジスタB_REGそれぞれに割り当てられた基本リネーミングレジスタBR_REGのレジスタ番号またはアドレスを保持する。この基本リネーミングレジスタの割当処理は,前述のとおり,命令デコーダ305が行う。
図3,4の2-SIMD構成では,非SIMD命令実行時は,浮動小数点SIMDレジスタFS_REG内の基本レジスタB_REGと,それに対して割り当てられている浮動小数点リネーミングレジスタREN_REG内の基本リネーミングレジスタBR_REGとのレジスタのセットが使用される。一方,SIMD命令実行時は,浮動小数点SIMDレジスタFS_REG内の基本レジスタB_REG及び拡張レジスタE_REGと,それに対して割り当てられている浮動小数点リネーミングレジスタREN_REG内の基本リネーミングレジスタBR_REGと拡張リネーミングレジスタER_REGとのレジスタのセットが使用される。
図3の非SIMD命令実行時におけるレジスタリネーミング処理を説明する。非SIMD命令が実行された場合,CPUコアは1つのまたは1組の8バイトデータに対して一つの処理を実行する。この場合,浮動小数点SIMDレジスタFR_REGでは基本レジスタB_REGのみが使われ,拡張レジスタE_REGは使用されない。例えば,非SIMD命令は,ディスティネーションオペランドとして,浮動小数点SIMDレジスタFS_REG内の128個の基本レジスタB_REGの群のうち一つのレジスタを指定する。この場合,例えば,ディスティネーションオペランドとして,浮動小数点SIMDレジスタFS_REG内の基本レジスタB_REGの群内の一つのレジスタが0〜127のレジスタ番号により指定される。一方,レジスタリネーミング部REG_REN内の基本レジスタリネーミングマップBRRMには,非SIMD命令により指定された基本レジスタB_REGに対して割り当てられた基本リネーミングレジスタBR_REGのレジスタ番号またはアドレスが記憶される。浮動小数点SIMDレジスタFS_REG内の拡張レジスタE_REGは非SIMD演算では使用されないため,レジスタリネーミングREG_RENには,拡張レジスタリネーミングマップは必要なく,拡張リネーミングレジスタER_REGは使用されない。
次に,図4のSIMD命令実行時におけるレジスタリネーミング処理を説明する。SIMD演算が実行された場合,浮動小数点SIMDレジスタFS_REGにおいては,0〜127のレジスタ番号のうち同じレジスタ番号を有する基本レジスタB_REGと拡張レジスタE_REGとがセットで使用される。そして,SIMD命令に応じて並列処理される2つのまたは2組の8バイトデータのうち,1つ目のデータにより基本レジスタB_REGが使用され,2つ目のデータにより基本レジスタB_REGと同じレジスタ番号を有する拡張レジスタE_REGが使用される。
一方,浮動小数点リネーミングレジスタFR_ERGにおいても,0からある数までのレジスタ番号のうち同じレジスタ番号を有する基本リネーミングレジスタBR_REGと拡張リネーミングレジスタER_REGとがセットで使用される。並列処理される2つまたは2組の8バイトデータのうち,1つ目のデータにより基本リネーミングレジスタBR_REGが使用され,2つ目のデータにより同じレジスタ番号を有する拡張リネーミングレジスタER_REGが使用される。
そして,レジスタリネーミング部REG_RENでは,基本レジスタリネーミングマップBRRMの,浮動小数点SIMDレジスタFS_REGの指定されたレジスタ番号に対応するエントリ内に,割り当てられた浮動小数点リネーミングレジスタREN_REG内のレジスタ番号が記憶される。割り当てるレジスタ番号は,必ずしも浮動小数点SIMDレジスタのレジスタ番号と同じである必要はない。
図4に示される例では,例えばSIMD命令によりディスティネーションオペランドとして浮動小数点SIMDレジスタFS_REGのレジスタ番号“0”が指定された場合,CPUコアはSIMD命令により指定された2つまたは2組の8バイトデータに対して同じ処理を並列に実行する。そして,処理結果のデータは,一旦,浮動小数点リネーミングレジスタに書き込まれた後,順番が前の命令が完了し現在の命令を完了できるときに,浮動小数点リネーミングレジスタREN_REG内の基本,拡張リネーミングレジスタの2つの処理結果が,浮動小数点SIMDレジスタFS_REG内のレジスタ番号”0”の基本レジスタB_REGと拡張レジスタE_REGに書き込まれる。これにより,アウトオブオーダで開始された命令の処理は,インオーダで完了する。
一方,レジスタリネーミング部REG_RENでは,レジスタ番号”0”を有する基本レジスタB_REGおよび拡張レジスタE_REGに対して,同じレジスタ番号”0”を有するまたは異なるレジスタ番号を有する基本リネーミングレジスタBR_REGおよび拡張リネーミングレジスタER_REGが割り当てられる。図4の例ではレジスタ番号“0”の基本レジスタR_REG,拡張レジスタE_REGに対して同じレジスタ番号“0”の基本リネーミングレジスタBR_REG,拡張リネーミングレジスタER_REGが割り当てられている。
図5は,2-SIMD構成における非SIMD命令の別のレジスタリネーミング処理を示す図である。図6は,2-SIMD構成におけるSIMD命令の別のレジスタリネーミング処理を示す図である。図5,図6の図3,4と異なる構成は,次の通りである。まず,2-SIMD構成に対応して,浮動小数点SIMDレジスタFR_ERGは,1つの基本レジスタB_REGの群と,1つの拡張レジスタE_REGの群とを有し,非SIMD命令実行時には,基本レジスタB_REGと拡張レジスタE_REGとはそれぞれ独立して個別に非SIMD命令により指定される。それに対応して,浮動小数点リネーミングレジスタREN_REG内の基本リネーミングレジスタBR_REGと拡張リネーミングレジスタER_REGも,それぞれ個別に命令デコーダにより割り当てられる。それに伴って,レジスタリネーミング部REG_RENは,1つの基本レジスタリネーミングマップBRRMと,1つの拡張レジスタリネーミングマップERRMとを有する。
レジスタリネーミング部REG_REN内の基本,拡張レジスタリネーミングマップBRRM,ERRMは,浮動小数点SIMDレジスタFS_ERG内の基本レジスタB_REGの0〜127に対応するエントリと,拡張レジスタE_REGに対応するエントリとを有する。基本レジスタリネーミングマップBRRMは,基本レジスタB_REGそれぞれに割り当てられた基本リネーミングレジスタBR_REGのレジスタ番号またはアドレスを保持する。また,拡張レジスタリネーミングマップERRMは,拡張レジスタE_REGそれぞれに割り当てられた拡張リネーミングレジスタER_REGのレジスタ番号またはアドレスを保持する。
図5,6の2-SIMD構成では,非SIMD命令実行時は,浮動小数点SIMDレジスタFS_REG内の基本レジスタB_REGとそれに割り当てられている浮動小数点リネーミングレジスタREN_REG内の基本リネーミングレジスタBR_REGとのレジスタのセットまたは,拡張レジスタE_REGとそれに割り当てられている拡張リネーミングレジスタER_REGとのレジスタのセットのいずれかが使用される。一方,SIMD命令実行時は,浮動小数点SIMDレジスタFS_REG内の基本レジスタB_REG及び拡張レジスタE_REGと,それに対して割り当てられている浮動小数点リネーミングレジスタREN_REG内の基本リネーミングレジスタBR_REGと拡張リネーミングレジスタER_REGとのレジスタのセットが使用される。
図5の非SIMD命令実行時におけるレジスタリネーミング処理を説明する。非SIMD命令が実行された場合,CPUコアは1つの8バイトデータに対して1つの処理を実行する。この場合,浮動小数点SIMDレジスタFS_REGでは基本レジスタB_REGおよび拡張レジスタE_REGはそれぞれ独立したレジスタとして扱われ,これらの256個のレジスタのうち一つが非SIMD処理で使用される。例えば,非SIMD命令ではディスティネーションオペランドとして浮動小数点SIMDレジスタ内の256個のレジスタのうち1つを指定できる。この場合,例えばディスティネーションオペランドとして,浮動小数点SIMDレジスFS_REG内のレジスタが0〜255のレジスタ番号により指定される。
一方,レジスタリネーミング部REG_RENでは,非SIMD命令により指定された基本レジスタB_REGまたは拡張レジスタE_REGに対して,それぞれ基本リネーミングレジスタBR_REGまたは拡張リネーミングレジスタER_REGのレジスタ番号またはアドレスが割り当てられる。図5の例では,レジスタ番号128の拡張レジスタE_REGに対して,レジスタ番号“1”の拡張リネーミングレジスタER_REGが割り当てられている。
そして,浮動小数点SIMD演算器330内の基本SIMD演算器または拡張SIMD演算器のうち,拡張SIMD演算器が使用され,処理結果がレジスタ番号”1”の拡張リネーミングレジスタER_REGに格納され,処理完了時にレジスタ番号128の拡張レジスタE_REGに処理結果が格納される。
このように,非SIMD命令実行時に,拡張レジスタE_REGと拡張リネーミングレジスタER_REGも使用することができるので,非SIMD命令におけるハードウエアリソースの自由度を高めることができる。
図6の2-SIMD命令実行時におけるレジスタリネーミング処理を説明する。SIMD命令が実行された場合,浮動小数点SIMDレジスタFS_REGにおいては,0〜127のレジスタ番号のうち同じレジスタ番号を有する基本レジスタB_REGと拡張レジスタE_REGとがセットで利用される。そしてSIMD命令に応じて並列処理される2つのまたは2組の8バイトデータのうち,一方のデータにより基本レジスタB_REGが使用され,他の1つのデータにより基本レジスタと同じレジスタ番号を有する拡張レジスタE_REGが使用される。
一方,浮動小数点リネーミングレジスタREN_REGでも,基本リネーミングレジスタBR_REG内の割り当てられたレジスタと,拡張リネーミングレジスタER_REG内の割り当てられたレジスタとがセットで利用される。
それに対応して,レジスタリネーミング部REG_RENの基本レジスタリネーミングマップBRRMでは,基本レジスタB_REGに対応するエントリに基本レジスタB_REGに割り当てられた基本リネーミングレジスタBR_REGのレジスタ番号が記憶され,拡張レジスタE_REGに対応するエントリに拡張レジスタE_REGに割り当てられた拡張リネーミングレジスタER_REGのレジスタ番号が記憶される。
例えば,SIMD命令によりディスティネーションオペランドとして浮動小数点SIMDレジスタFS_REGのレジスタ番号“0”が指定された場合,CPUコアはSIMD命令により指定された2つのまたは2組の8バイトデータに対して同じ処理を並列に実行する。そして,2つの処理結果のデータは,一旦,浮動小数点リネーミングレジスタ内の割り当てられた基本,拡張リネーミングレジスタBR_REG,ER_REGにそれぞれ書き込まれた後,命令を完了する時に浮動小数点SIMDレジスタFS_REG内の指定された基本レジスタB_REGと拡張レジスタE_REGに書き込まれる。この場合,浮動小数点SIMDレジスタでは処理された1つめの8バイトデータがレジスタ番号“0”の基本レジスタB_REGに格納され,他方の1つ8バイトデータがレジスタ番号“0”の拡張レジスタE_REGに格納される。
一方,レジスタリネーミング部では,同じレジスタ番号を有する基本レジスタB_REGおよび拡張レジスタE_REGに対して,異なるレジスタ番号を有する基本リネーミングレジスタBR_REGおよび拡張リネーミングレジスタER_REGをそれぞれ割り当てることが可能となっている。例えば,図6の例ではレジスタ番号“0”の基本レジスタB_REGに対して,レジスタ番号“0”基本リネーミングレジスタBR_REGが割り当てられている。一方,レジスタ番号“0”の拡張レジスタE_REGに対しては,レジスタ番号“2”の拡張リネーミングレジスタER_REGが割り当てられている。
従って,例えばSIMD命令によりディスティネーションオペランドとして浮動小数点SIMDレジスタのレジスタ番号“0”が指定され,図6のようなリネーミングレジスタの割り当てが行われた場合には,処理された1つ目の8バイトデータはレジスタ番号“0”の基本リネーミングレジスタBR_REGにいったん格納される。また,処理された2つ目の8バイトデータはレジスタ番号“2”の拡張リネーミングレジスタER_REGに格納される。そして,命令の順番に基づいてSIMD命令を完了できる時に,それらの格納された2つのデータは,レジスタ番号“0”の基本レジスタB_REGおよび拡張レジスタE_REGに転送される。これによりSIMD命令がインオーダで完了する。
図5,6の例では,SIMD命令実行時に利用する拡張レジスタE_REGと拡張リネーミングレジスタER_REGを,非SIMD命令実行時にも自由に利用できるようにしている。これにより,SIMD命令の並列度を高めるとともに,非SIMD命令でのハードウエアの利用度を高めている。
そこで,更にSIMD命令の並列度を高めて3-SIMD構成にした場合について説明する。
図7は,3-SIMD構成における非SIMD命令の別のレジスタリネーミング処理を示す図である。図8は,3-SIMD構成におけるSIMD命令の別のレジスタリネーミング処理を示す図である。図7,図8において,図5,6と異なる構成は,次の通りである。まず,3-SIMD構成に対応して,浮動小数点SIMDレジスタFS_REGは,1つの基本レジスタB_REGの群と,2つの拡張レジスタE_REG1,E_REG2の群とを有し,非SIMD命令実行時には,基本レジスタB_REGと拡張レジスタE_REG1,E_REG2の3つのレジスタはそれぞれ独立して個別に非SIMD命令により指定される。それに対応して,浮動小数点リネーミングレジスタREN_REG内の1つの基本リネーミングレジスタBR_REGと2つの拡張リネーミングレジスタER_REG1,ER_REG2も,それぞれ個別に命令デコーダにより割り当てられる。それに伴って,レジスタリネーミング部REG_RENは,基本レジスタリネーミングマップBRRMと,2つの拡張レジスタリネーミングマップERRM1,ERRM2とを有する。
レジスタリネーミング部REG_REN内の基本,第1,第2拡張レジスタリネーミングマップBRRM,ERRM1,ERRM2は,浮動小数点SIMDレジスタFS_REG内の基本レジスタB_REGの0〜127に対応するエントリと,第1,第2拡張レジスタE_REG1,E_REG2の128〜255,256〜383に対応するエントリとを有する。基本レジスタリネーミングマップBRRMは,基本レジスタB_REGそれぞれに割り当てられた基本リネーミングレジスタBR_REGのレジスタ番号またはアドレスを保持する。また,2つの拡張レジスタリネーミングマップERRM1,ERRM2は,拡張レジスタE_REG1,E_REG2それぞれに割り当てられた拡張リネーミングレジスタER_REG1,FR_REG2のレジスタ番号またはアドレスをそれぞれ保持する。
図7,8の2-SIMD構成では,非SIMD命令実行時は,浮動小数点SIMDレジスタFS_REG内の基本レジスタB_REGとそれに割り当てられている浮動小数点リネーミングレジスタREN_REG内の基本リネーミングレジスタBR_REGとのレジスタのセットか,第1拡張レジスタE_REG1とそれに割り当てられている第1拡張リネーミングレジスタER_REG1とのレジスタのセットか,第2拡張レジスタE_REG2とそれに割り当てられている第2拡張リネーミングレジスタER_REG2とのレジスタのセットかのいずれかが使用される。一方,SIMD命令実行時は,浮動小数点SIMDレジスタFS_REG内の基本レジスタB_REG及び2つの拡張レジスタE_REG1,E_REG2と,それに対して割り当てられている浮動小数点リネーミングレジスタREN_REG内の基本リネーミングレジスタBR_REGと2つの拡張リネーミングレジスタER_REG1,ER_REG2とのレジスタのセットが使用される。
図7の非SIMD命令実行時では,非SIMD命令が第1拡張レジスタE_REG1内のレジスタを指定し,第1拡張リネーミングレジスタER_REG1が割り当てられている。それに伴い,レジスタリネーミング部REG_REN内の第1拡張レジスタリネーミングマップERRM1の拡張レジスタE_REG1と同じエントリに,割り当てられた第1拡張リネーミングレジスタER_REG1のレジスタ番号”1”が記憶される。
図8のSIMD命令実行時では,SIMD命令が浮動小数点SIMDレジスタFS_REG内のレジスタ番号”0”の基本レジスタB_REGと2つの拡張レジスタE_REG1,E_REG2のセットを指定し,浮動小数点リネーミングレジスタREN_REG内の基本リネーミングレジスタBR_REGのレジスタ番号”0”のレジスタと,第1拡張リネーミングレジスタER_REG1のレジスタ番号”2”のレジスタと,第2拡張リネーミングレジスタER_REG2のレジスタ番号”3”のレジスタとが割り当てられている。それに伴い,レジスタリネーミング部REG_REN内のレジスタ番号”0”の3つのマップに割り当てられたレジスタ番号が記憶される。
図7,8のように,3-SIMD構成にしてSIMD命令の並列度を高めると同時に,非SIMD命令で全ての拡張レジスタと拡張リネーミングレジスタを利用可能にして非SIMD命令のハードウエア利用の自由度も高めると,レジスタ群とレジスタリネーミング部REG_RENの回路規模が増大する。これを,4-SIMD構成にすると更に回路規模は増大する。その場合,CPUチップである演算処理装置が処理する演算プログラムによっては,SIMD命令の並列度が高いことは必要である一方で,非SIMD命令はそれほど多くなく,非SIMD命令のハードウエア利用の自由度の必要性はそれほどでもない場合がある。
そこで,SIMD命令の並列度を高めることと非SIMD命令のハードウエア利用の自由度を高めることとを,回路規模をリーズナブルなレベルに抑制しつつ実現することが望ましい。
[本実施の形態]
図9は,本実施の形態におけるCPUコアの構成を示す図である。図9には,図2のCPUコア30のうち,レジスタリネーミング部REG_RENと,一次データキャッシュ部312と,SIMD演算器330と,浮動小数点リネーミングレジスタFR_ERGと,浮動小数点SIMDレジスタFS_REGの詳細な構成が示されている。
図9のCPUコアは,浮動小数点演算について3-SIMD構成を有する。すなわち,SIMD演算器330は,1つの基本演算器B_EXCと,2つの拡張演算器E_EXC1,E_EXC2を有し,3-SIMD命令を実行可能になっている。基本演算器B_EXCの入力側には入力データを格納するレジスタを選択する基本オペランドデータ選択器B_SELが,出力側には演算結果を格納する基本結果レジスタBr_regが設けられる。2つの拡張演算器E_EXC1,E_EXC2についても,拡張オペランドデータ選択器E_SEL1,E_SEL2と,拡張結果レジスタEr_reg1,Er_reg2が設けられる。
3つの演算器にそれぞれ対応して,浮動小数点リネーミングレジスタFR_REGは,1つの基本リネーミングレジスタBR_REGと,2つの拡張リネーミングレジスタER_REG1,ER_REG2とを有する。同様に,アーキテクチャレジスタである浮動小数点SIMDレジスタFS_REGは,1つの基本レジスタB_REGと2つの拡張レジスタE_REG1,E_REG2を有する。
更に,一次データキャッシュ部312は,図示しないキャッシュメモリとキャッシュ制御部に加えて,キャッシュメモリからロードしたデータを格納する1つの基本ロードレジスタ312_Bと,2つの拡張ロードレジスタ312_E1,312_E2とを有する。
演算器の入力データは,一次データキャッシュ部312内の3つのロードレジスタと,3つの基本結果レジスタと,3つの浮動小数点リネーミングレジスタと,3つの浮動小数点SIMDレジスタの,合計12個のレジスタのいずれかに格納されたデータから選択することができる。したがって,基本オペランドデータ選択器B_SELと2つの拡張オペランドデータ選択器E_SEL1,E_SEL2は,12個のレジスタから1つのレジスタを選択する。そして,演算器が入力可能なデータ数がN個の場合は,各演算器それぞれにN個の選択器が設けられる。
図9のCPUコア30は3-SIMD構成であるが,レジスタリネーミング部REG_RENは,1つの基本レジスタリネーミングマップBRRMと1つの拡張レジスタリネーミングマップERRM1を有する。そして,基本レジスタリネーミングマップBRRMは,命令で指定された基本レジスタB_REGのアドレスまたはレジスタ番号に対する割り当てられた基本リネーミングレジスタBR_REGのアドレスまたはレジスタ番号の第1の対応関係を記憶し,拡張レジスタリネーミングマップERRM1は,命令で指定された第1拡張レジスタE_REG1のアドレスまたはレジスタ番号に対する割り当てられた第1拡張リネーミングレジスタER_REG1のアドレスまたはレジスタ番号の第2の対応関係を記憶する。
但し,第2拡張レジスタE_REG2のアドレスまたはレジスタ番号に対する割り当てられた第2拡張リネーミングレジスタER_REG2のアドレスまたはレジスタ番号の第3の対応関係は,基本レジスタリネーミングマップBRRMに記憶されている第1の対応関係または拡張リネーミングマップERRM1に記憶されている第2の対応関係と同じになるように,命令デコーダ305がリネーミングレジスタの割当を行う。したがって,浮動小数点リザベーションステーションRSFは,第2拡張演算器E_EXC2で実行される演算結果を一時的に格納する第2拡張リネーミングレジスタER_REG2内のレジスタのアドレスまたはレジスタ番号を,基本レジスタリネーミングマップBRRMまたは拡張レジスタリネーミングマップERRM1を参照して取得する。
図9のCPUコアは,3-SIMD命令を実行する場合は,1つの基本演算器B_EXCと2つの拡張演算器E_EXC1,E_EXC2を使用し,1つの基本リネーミングレジスタBR_REGと2つの拡張リネーミングレジスタER_REG1,ER_REG2を使用し,1つの基本レジスタB_REGと2つの拡張レジスタE_REG1,E_REG2を使用する。
一方,非SIMD命令を実行する場合は,CPUコアは,基本演算器E_EXCか第1拡張演算器E_EXC1のいずれかを使用し,基本リネーミングレジスタBR_REGか第1拡張リネーミングレジスタER_REG1のいずれかを使用し,基本レジスタB_REGか第1拡張レジスタE_REG1のいずれかを使用する。したがって,非SIMD命令を実行する場合,基本リネーミングレジスタBR_REG以外に第1拡張リネーミングレジスタER_REG1を利用して,命令をアウトオブオーダで実行開始することができ,ハードウエア利用の自由度を高くすることができる。
但し,非SIMD命令を実行する場合,第2拡張リネーミングレジスタER_REG2を利用することはできない。このような制約により,レジスタリネーミング部REG_REN内には,基本レジスタリネーミングマップBRRMに加えて1つの拡張レジスタリネーミングマップERRM1を有するだけでよい。その結果,リネーミングマップの数を少なくすることができ,回路規模が膨大になるのを抑制することができる。
上記の通り,本実施の形態では,第1拡張リネーミングレジスタER_REG1は,SIMD命令の演算と非SIMD命令の演算で一時的に演算結果を格納するレジスタとして使用され,第2拡張リネーミングレジスタER_REG2は,SIMD命令の演算で一時的に演算結果を格納するレジスタとして使用されるが,非SIMD命令の演算ではそのようなレジスタとして使用されない。
言い換えると,本実施の形態のCPUコアは,浮動小数点SIMDレジスタFS_REGと浮動小数点リネーミングレジスタFR_ERGの演算結果を格納するレジスタセットとして,SIMD命令の演算と非SIMD命令の演算の両方で使用される基本レジスタセットと,SIMD命令の演算と非SIMD命令の演算の両方で使用される第1拡張レジスタセットと,SIMD命令の演算では使用されるが非SIMD命令の演算では使用されない第2拡張レジスタセットとを有する。
なお,浮動小数点SIMDレジスタと浮動小数点リネーミングレジスタのレジスタのセットは,基本レジスタB_REGと基本リネーミングレジスタBR_REGのレジスタのセット,第1拡張レジスタE_REG1と第1拡張リネーミングレジスタER_REG1のレジスタのセット,及び第2拡張レジスタE_REG1と第2拡張リネーミングレジスタER_REG2のレジスタのセットで使用される。
[第1の実施の形態]
図10は,第1の実施の形態における3-SIMD構成における非SIMD命令のレジスタリネーミング処理を示す図である。図11は,第1の実施の形態における3-SIMD構成におけるSIMD命令のレジスタリネーミング処理を示す図である。
図9と同様に,図10,図11では,浮動小数点SIMDレジスタFS_REGは,1つの基本レジスタB_REGの群と2つの拡張レジスタE_REG1,E_REG2の群とを有し,各レジスタの群は,それぞれ128個のレジスタを有する。それに対応して,浮動小数点リネーミングレジスタREN_REGは,1つの基本リネーミングレジスタBR_REGの群と2つの拡張リネーミングレジスタER_REG1,ER_REG2の群を有し,各レジスタ群は,それぞれコミットスタックエントリCSEのエントリ可能な数以下の数のレジスタをする。そして,レジスタリネーミング部REG_RENは,1つの基本レジスタリネーミングマップBRRMと1つの拡張レジスタリネーミングマップERRM1を有する。
図10の非SIMD命令実行時におけるレジスタリネーミング処理を説明する。非SIMD命令が実行された場合,CPUコアは1つのまたは1組の8バイトデータに対して1つの処理を行う。この場合,浮動小数点SIMDレジスタFS_REGでは,基本レジスタB_REGおよび第1拡張レジスタE_REG1はそれぞれ独立したレジスタとして扱われ,これらの256個のレジスタのうち一つが非SIMD処理で使用される。但し,浮動小数点SIMDレジスタFS_REG内の第2拡張レジスタE_REG2は使用されない。即ち,非SIMD命令では,ディスティネーションオペランドとして浮動小数点SIMDレジスタFS_REG内の384個のレジスタのうち,第2拡張レジスタE_REG2の128個のレジスタは使用されず,基本レジスタB_REGと第1拡張レジスタE_REG1の256個のレジスタから1つを選んで非SIMD処理で使用する。この場合,例えばディスティネーションオペランド,つまり演算結果を格納する格納レジスタとして,浮動小数点SIMDレジスタFS_REG内の256個のレジスタから0〜255のレジスタ番号で命令により指定される。
一方,レジスタリネーミング部REG_RENでは,非SIMD命令により指定された浮動小数点SIMDレジスタFS_REG内の基本レジスタB_REGまたは第1拡張レジスタE_REG1に対して割り当てられた,それぞれ基本リネーミングレジスタBR_REGまたは第1拡張リネーミングレジスタER_REG1のレジスタ番号またはアドレスが記憶される。
図10の例では,レジスタ番号“128”の第1拡張レジスタE_REG1に対してレジスタ番号“1”の第1拡張リネーミングレジスタER_REG1が割り当てられている。第2拡張レジスタE_REG2は非SIMD演算では使用されないため,第2拡張レジスタリネーミングマップは必要なく,レジスタリネーミング部REG_RENは第2拡張レジスタリネーミングマップを有していない。
図11のSIMD命令実行時におけるレジスタリネーミング処理を説明する。SIMD命令が実行された場合,CPUコアは3つのまたは3組の8バイトデータに対して1つの同じ処理を行う。この場合,浮動小数点SIMDレジスタFS_REGにおいては,0〜127のレジスタ番号のうち同じレジスタ番号を有する基本レジスタB_REGと第1拡張レジスタE_REG1,第2拡張レジスタE_REG2とがセットで使用される。そして,SIMD命令に応じて並列処理される3つのまたは3組の8バイトデータのうち,1つ目のデータにより基本レジスタB_REGが使用され,2つ目,3つ目のデータにより基本レジスタと同じ番号の第1拡張レジスタE_REG1,第2拡張レジスタE_REG2が使用される。
図11に示されるように,SIMD命令によりディスティネーションオペランドとして浮動小数点SIMDレジスタFS_REGのレジスタ番号“0”が指定された場合,CPUコアは,SIMD命令により指定された3つのまたは3組の8バイトデータに対して,3つの演算器B_EXC,E_EXC1,E_EXC2の演算ユニットが,同じ処理を並列で実行する。そして,処理結果のデータは,一旦,浮動小数点リネーミングレジスタFR_REGに書き込まれた後,その命令を完了できるタイミングで浮動小数点SIMDレジスタFS_REGに書き込まれる。この場合,浮動小数点SIMDレジスタFS_REGでは,処理された1つ目の8バイトデータがレジスタ番号“0”の基本レジスタB_REGに格納され,2つ目,3つ目のデータがレジスタ番号“0”の第1拡張レジスタE_REG1,第2拡張レジスタE_REG2にそれぞれ格納される。
一方,レジスタリネーミング部REG_RENでは,同じレジスタ番号を有する基本レジスタB_REGおよび第1拡張レジスタE_REG1に対して,異なるレジスタ番号を有する基本リネーミングレジスタBR_REGおよび第1拡張リネーミングレジスタER_REG1をそれぞれ割り当てることが可能である。但し,第2拡張レジスタE_REG2に対する第2拡張リネーミングレジスタER_REG2は,基本リネーミングレジスタBR_REGと同じ番号が割り当てられる。したがって,基本リネーミングレジスタBR_REGと第2拡張リネーミングレジスタER_REG2とは,それぞれ異なるレジスタ番号に割り当てられることはできない。
図11の例では,レジスタ番号“0”の基本レジスタB_REGに対してレジスタ番号“0”の基本リネーミングレジスタBR_REGが割り当てられ,レジスタ番号“0”の第1拡張レジスタE_REG1に対してはレジスタ番号“2”の第1拡張リネーミングレジスタER_REG1が割り当てられている。第2拡張レジスタER_REG2に対しては,基本リネーミングレジスタBR_REGと同じレジスタ番号“0”の第2拡張リネーミングレジスタER_REG2が割り当てられている。
したがって,SIMD命令によりディスティネーションオペランドとして浮動小数点SIMDレジスタFS_ERGのレジスタ番号“0”のレジスタが指定され,図11のように浮動小数点リネーミングレジスタREN_REG内の3つのリネーミングレジスタBR_REG,ER_REG1,ER_REG2が割り当てられた場合,次のように処理される。即ち,処理された一つ目の8バイトデータはレジスタ番号“0”の基本リネーミングレジスタBR_REGに一旦格納され,2つ目のデータはレジスタ番号“2”の第1拡張リネーミングレジスタER_REG1に格納され,3つ目のデータはレジスタ番号“0”の第2拡張リネーミングレジスタER_REG2に格納される。そして,命令の順番に基づいて実行中のSIMD命令を完了するタイミングで,3つのリネーミングレジスタに格納されたそれぞれのデータが,レジスタ番号“0”の基本レジスタB_REG,第1拡張レジスタE_REG1,第2拡張レジスタE_REG2にそれぞれ転送される。それによりSIMD命令がインオーダで完了する。
[第2の実施の形態]
図12は,第2の実施の形態における3-SIMD構成におけるSIMD命令のレジスタリネーミング処理を示す図である。第2の実施の形態では,レジスタリネーミング部REG_REN内のリネーミングマップに,同じレジスタ番号を有する基本レジスタB_REGおよび第1拡張レジスタE_REG1に対して,異なるレジスタ番号を有する基本リネーミングレジスタBR_REGおよび第1拡張リネーミングレジスタER_REG1をそれぞれ割り当てることが可能である。一方,第2拡張レジスタE_REG2に対する第2拡張リネーミングレジスタER_REG2には,第1拡張リネーミングレジスタER_REG1と同じ番号が割り当てられる。図11の第1の実施の形態では,第2拡張レジスタE_REG2に対する第2拡張リネーミングレジスタER_REG2に,基本リネーミングレジスタBR_REGと同じ番号が割り当てられており,この点が,第2の実施の形態の相違点である。
図12の例では,SMMD命令によりディスティネーションオペランドとして浮動小数点SIMDレジスタFS_REG内のレジスタ番号”0”が指定され,命令デコーダが,レジスタ番号”0”の基本レジスタB_REGに対してレジスタ番号”0”の基本リネーミングレジスタBR_REGを割り当て,第1拡張レジスタE_REG1と第2拡張レジスタE_REG2に対して同じレジスタ番号”2”の第1拡張リネーミングレジスタER_REG1と第2拡張リネーミングレジスタER_REG2を割り当てている。
図12のSIMD命令実行時におけるレジスタリネーミング処理は,図11の第1のSIMD命令実行時の処理と同様である。
[本実施の形態のCPUコアの動作]
次に,浮動小数点演算命令を実行する時のCPUコアの動作について具体的に説明する。以下の説明では,例として浮動小数点演算命令の動作を説明するが,浮動小数点ロード命令や浮動小数点ストア命令であってもレジスタリネーミング処理は同様である。
命令デコーダ305が浮動小数点演算命令をデコードすると,CPUコアは,ソースオペランドで指定されるレジスタからデータを読み込み,演算命令を実行し,ディスティネーションオペランドで指定されるレジスタに対して書き込みを行う。
例えば,浮動小数点演算命令の例として,演算の実行に6サイクル必要とする次の命令を実行するものとする。浮動小数点のSIMD命令(以下SIMD演算命令と呼ぶ)の命令コードは,例えば次のように記述される。
Simd-fmad %f127*%f100+%f50 = %f10
この命令では,ソースオペランドとして%f127,%f100,%f50の3つのレジスタが指定される。指定されたレジスタからはそれぞれ3つの8バイトデータが読み込まれて,3系統の乗算および加算処理が並列に実行される。つまり,それぞれ3つのデータを有する3組のデータが読み込まれて,3系統の演算器で3組のデータが並列に処理される。そして,それぞれの演算結果は,ディスティネーションオペランドである%f10で指定される浮動小数点SIMDレジスタFS_REGに書き込まれる。
一方,浮動小数点の非SIMD命令(以下非SIMD演算命令と呼ぶ)の命令コードは,オペコードが異なること以外は上記と同じ形式で記述される。この命令では,ソースオペランドで指定されるレジスタからそれぞれ1系統の演算を行い,演算結果がディスティネーションオペランドで指定される浮動小数点SIMDレジスタ内のレジスタに書き込まれる。
図11または図12のSIMD演算命令では,ディスティネーションオペランドにて0〜127のいずれかのレジスタ番号が指定される。一方,図10の非SIMD演算命令では,ディスティネーションオペランドにて0〜255のいずれかのレジスタ番号が指定される。
図13,図14は,本実施の形態における浮動小数点SIMD演算命令を実行する場合のパイプライン処理を説明する図である。
Dサイクルは命令デコードサイクルである。Dサイクルでは,命令デコーダ305が,浮動小数点SIMD命令をデコードし,デコード結果に基づいて,コミットスタックエントリCSEと,浮動小数点リザベーションステーションRSFに,それぞれ対応するエントリを登録する(S1,S2)。コミットスタックエントリCSEには,浮動小数点SIMD演算命令以外の全ての命令に対応するエントリが登録される。また,浮動小数点リザベーションステーションRSFには,浮動小数点の命令に対応するエントリが登録される。
命令デコーダ305は,主に,演算結果の書き込み先に関する情報をコミットスタックエントリCSEのエントリに登録する。また,命令デコーダ305は,書き込み先の浮動小数点SIMDレジスタFS_REG内の3つのレジスタに対して,浮動小数点リネーミングレジスタFR_ERG内の3つのレジスタを割り当て,その対応関係をレジスタリネーミング部REG_REN内の基本レジスタリネーミングマップBRRMと拡張レジスタリネーミングマップERRM1とに登録する(S3)。具体的には,命令デコーダ305は,書き込み先の浮動小数点SIMDレジスタFS_REG内の指定されたレジスタ番号に対応する両マップBRRM,ERRM1のエントリに,割り当てた基本リネーミングレジスタBR_REGと第1拡張リネーミングレジスタER_REG1のレジスタ番号またはアドレスを書き込む。そして,命令デコーダ305は,登録したリネーミングレジスタのレジスタ番号またはアドレスを,コミットスタックエントリCSEのエントリに登録する(S4)。
また,命令デコーダ305は,ソースオペランドのソースデータに関する情報を浮動小数点リザベーションステーションRSFのエントリに登録する。ソースオペランドのソースデータのアドレスが,例えば浮動小数点SIMDレジスタFS_REG内のレジスタである場合に,それに対して割り当てられている浮動小数点リネーミングレジスタに一時的に格納されているデータを入力して演算する場合は,命令デコーダ305は,レジスタリネーミング部内のマップを参照して浮動小数点リネーミングレジスタのアドレスを取得して,RSFのエントリに登録する(S4)。
Pサイクルはプライオリティサイクルである。Pサイクルでは,浮動小数点リザベーションステーションRSFは,登録されたエントリのデータの待ち合わせ制御を行う。RSFは,登録されたエントリーのうち,必要な入力データがそろったエントリの中で最も古いエントリをSIMD演算器330に発行する(S10)。次に,図14に移る。
次のBサイクルはバッファサイクルである。Bサイクルでは,基本オペランドデータ選択器B_SELと,第1,第2拡張オペランドデータ選択器E_SEL1,E_SEL2が,ソースオペランドのデータを,ロードレジスタ312_B,312_E1,312_E2と,結果レジスタBr_reg,Er_reg1,Er_reg2と,リネーミングレジスタBR_REG,ER_REG1,ER_REG2と,レジスタB_REG,E_REG1,E_REG2のいずれから選択して,対応する演算器に入力する(S11)。ロード処理または演算器での演算は終了したがCSEでの完了処理が済んでいない命令の実行結果を入力とする際は,入力データはロードレジスタ,結果レジスタまたはリネーミングレジスタから入力される。また,実行完了した命令の処理結果は,レジスタB_REG,E_REG1,E_REG2から入力される。
X1−X6は6つの演算実行サイクルである。X1−X6サイクルでは,基本演算器B_EXC,第1,第2拡張演算器E_EXC1,E_EXC2が,それぞれのオペランドデータ選択器が選択した入力データについて演算処理を実行する。そして,各演算器は,演算結果をそれぞれの結果レジスタBr_reg,Er_reg1,Er_reg2に格納する(S12)。また,各演算器は,演算結果を結果レジスタに格納すると,演算完了報告をコミットスタックエントリCSEに出力する(S13)。
Uサイクルはアップデートサイクルである。Uサイクルでは,結果レジスタに格納された演算結果が対応するリネーミングレジスタBR_REG,ER_REG1,ER_REG2に格納される(S14)。
Cサイクルは命令完了サイクルである。Cサイクルでは,コミットスタックエントリCSEは,浮動小数点SIMD演算器330からの演算報告に基づいて,SIMD演算命令が完了したことを判定する(S15)。
最後に,Wサイクルはレジスタ更新サイクルである。コミットスタックエントリCSEは,命令順に基づいて現在のSIMD演算命令を完了できるタイミングで,リネーミングレジスタBR_REG,ER_REG1,ER_REG2内の演算結果を,浮動小数点SIMDレジスタFS_REG内の3つのレジスタB_REG,E_REG1,E_REG2に格納する(S16)。コミットスタックエントリCSEは,リネーミングレジスタのどのレジスタの演算結果を,浮動小数点SIMDレジスタのどのレジスタに格納するかの情報を,リネーミングレジスタに通知する。
以上のように,浮動小数点SIMD演算命令を実行する場合は,浮動小数点SIMDレジスタFS_REG内の3つのレジスタB_REG,E_REG1,E_REG2と,それらに割り当てられた浮動小数点リネーミングレジスタFR_REG内の3つのリネーミングレジスタBR_REG,ER_REG1,ER_REG2とが使用される。
図15,図16は,本実施の形態における非SIMD演算命令を実行する場合のパイプライン処理を説明する図である。各処理の番号は,図13,14と同じである。
非SIMD演算命令を実行する場合は,浮動小数点SIMDレジスタFS_REG内の基本レジスタB_REG,または第1拡張レジスタE_REG1のいずれかと,それに割り当てられた浮動小数点リネーミングレジスタFR_REG内の基本リネーミングレジスタBR_REGまたは第1拡張リネーミングレジスタER_REG1のいずれかとが使用される。第2拡張レジスタE_REG2と第2拡張リネーミングレジスタER_REG2は使用されない。図15,16の例では,図10と同様に,第1拡張レジスタE_REG1と第1拡張リネーミングレジスタER_REG1が使用される。それに伴い,レジスタリネーミング部REG_RENでは,拡張レジスタリネーミングマップERRMに対応関係が記憶される。
Dサイクルでは,命令デコーダ305が,浮動小数点非SIMD命令をデコードし,デコード結果に基づいて,コミットスタックエントリCSEと,浮動小数点リザベーションステーションRSFに,それぞれ対応するエントリを登録する(S1,S2)。また,命令デコーダ305は,書き込み先の浮動小数点SIMDレジスタFS_REG内の第1拡張レジスタE_REG1に対して,浮動小数点リネーミングレジスタFR_REG内の第1拡張リネーミングレジスタER_REG1を割り当て,その対応関係をレジスタリネーミング部REG_REN内の拡張レジスタリネーミングマップERRM1に登録する(S3)。そして,命令デコーダ305は,登録したリネーミングレジスタのレジスタ番号またはアドレスを,コミットスタックエントリCSEのエントリに登録する(S4)。それ以外の処理は,図13のSIMD演算命令と同様である。
Pサイクルでは,浮動小数点リザベーションステーションRSFは,登録されたエントリーのうち,必要な入力データがそろったエントリの中で最も古いエントリをSIMD演算器330に発行する(S10)。次に,図16に移る。
次のBサイクルでは,第1拡張オペランドデータ選択器E_SEL1が,ソースオペランドのデータを,ロードレジスタ312_B,312_E1,312_E2と,結果レジスタBr_reg,Er_reg1,Er_reg2と,リネーミングレジスタBR_REG,ER_REG1,ER_REG2と,レジスタB_REG,E_REG1,E_REG2のいずれから選択して,第1拡張演算器E_EXC1に入力する(S11)。
X1−X6サイクルでは,第1拡張演算器E_EXC1が,オペランドデータ選択器E_SEL1が選択した入力データについて演算処理を実行する。そして,第1拡張演算器は,演算結果を結果レジスタEr_reg1に格納する(S12)。また,第1拡張演算器は,演算結果を結果レジスタに格納すると,演算完了報告をコミットスタックエントリCSEに出力する(S13)。
Uサイクルでは,結果レジスタEr_reg1に格納された演算結果が対応する第1拡張リネーミングレジスタER_REG1に格納される(S14)。
Cサイクルでは,コミットスタックエントリCSEは,浮動小数点SIMD演算器330からの演算報告に基づいて,SIMD演算命令が完了したことを判定する(S15)。
最後に,Wサイクルでは,コミットスタックエントリCSEは,命令順に基づいて現在の非SIMD演算命令を完了できるタイミングで,第1拡張リネーミングレジスタER_REG1内の演算結果を,浮動小数点SIMDレジスタFS_REG内の第1拡張レジスタE_REG1に格納する(S16)。
以上の実施の形態をまとめると,次の付記のとおりである。
(付記1)
命令をデコードする命令デコーダと,
前記命令デコーダがデコードした命令が,複数のデータを1つの命令で並列処理するマルチデータ命令の場合に,前記複数のデータを並列に処理し,単数のデータを1つの命令で処理する非マルチデータ命令の場合に,前記単数のデータを個別に処理する3個以上の複数の演算器と,
前記複数の演算器それぞれに対応して設けられ,前記演算器の演算結果を格納可能な複数の格納先レジスタ群と,
前記複数の演算器それぞれに対応して設けられ,前記演算結果を格納可能な複数のリネーミングレジスタ群と,
前記格納先レジスタ群のうち命令により指定された指定格納先レジスタと,前記リネーミングレジスタ群から割り当てられた割当リネーミングレジスタとの対応関係を記憶するレジスタリネーミング部とを有し,
前記格納先レジスタ群と前記リネーミングレジスタ群を有するレジスタのセットが,前記マルチデータ命令の演算と前記非マルチデータ命令の演算で使用される基本レジスタセットに加えて,前記マルチデータ命令の演算と前記非マルチデータ命令の演算で使用される第1拡張レジスタセットと,前記マルチデータ命令の演算で使用され且つ前記非マルチデータ命令の演算で使用されない第2拡張レジスタセットとを有し,
前記レジスタリネーミング部が,前記基本レジスタセットの前記対応関係と,前記第1拡張レジスタセットの前記対応関係とを記憶する演算処理装置。
(付記2)
前記基本レジスタセットの前記対応関係または前記第1拡張レジスタセットの前記対応関係は,前記第2拡張レジスタセットの前記対応関係と共通である付記1に記載の演算処理装置。
(付記3)
前記レジスタリネーミング部は,前記基本レジスタセットの前記対応関係を記憶する基本マップと,前記第1拡張レジスタセットの前記対応関係とを記憶する第1拡張マップとを有し,前記第2拡張レジスタセットの前記対応関係を記憶するマップを有さない付記2に記載の演算処理装置。
(付記4)
更に,
前記命令デコーダがデコードした命令を,前記命令の順番にかかわらず,前記演算器に出力するリザベーションステーションと,
前記割当リネーミングレジスタに格納された前記演算結果を,前記命令の順番に,前記割当リネーミングレジスタに対応する前記指定格納先レジスタに格納するよう制御するコミットスタックエントリとを有する付記1または2に記載の演算処理装置。
(付記5)
前記命令デコーダは,前記マルチデータ命令をデコードした場合,前記基本レジスタセットの前記対応関係と前記第1拡張レジスタセットの前記対応関係とを決定し,前記非マルチデータ命令をデコードした場合,前記基本レジスタセットの前記対応関係または前記第1拡張レジスタセットの対応関係を決定し,
前記マルチデータ命令の演算で使用される前記第2拡張レジスタセットの前記対応関係は,前記前記基本レジスタセットの前記対応関係または前記第1拡張レジスタセットの対応関係と同じである付記1または2に記載の演算処理装置。
(付記6)
前記複数の演算器は,前記マルチデータ命令を実行した場合,前記基本レジスタセットと前記第1拡張レジスタセットと前記第2拡張レジスタセット内の前記割当リネーミングレジスタに前記演算結果を格納し,
前記複数の演算器のいずれかは,前記非マルチデータ命令を実行した場合,前記基本レジスタセットまたは前記第1拡張レジスタセット内の前記割当リネーミングレジスタに前記演算結果を格納する付記1または2に記載の演算処理装置。
(付記7)
命令をデコードする命令デコーダと,
前記命令デコーダがデコードした命令が,複数のデータを1つの命令で並列処理するマルチデータ命令の場合に,前記複数のデータを並列に処理し,単数のデータを1つの命令で処理する非マルチデータ命令の場合に,前記単数のデータを個別に処理する3個以上の複数の演算器と,
前記複数の演算器それぞれに対応して設けられ,前記演算器の演算結果を格納可能な複数の格納先レジスタ群と,
前記複数の演算器それぞれに対応して設けられ,前記演算結果を格納可能な複数のリネーミングレジスタ群と,
前記格納先レジスタ群のうち命令により指定された指定格納先レジスタと,前記リネーミングレジスタ群から割り当てられた割当リネーミングレジスタとの対応関係を記憶するレジスタリネーミング部とを有する演算処理装置の制御方法であって,
前記マルチデータ命令を実行する場合,前記複数の格納先レジスタ群と前記複数のリネーミングレジスタ群とを使用する工程と,
前記非マルチデータ命令を実行する場合,前記複数の格納先レジスタ群内の基本格納先レジスタ群と,複数の拡張格納先レジスタ群の第1拡張格納先レジスタ群と,前記複数のリネーミングレジスタ群内の基本リネーミングレジスタ群と複数の拡張リネーミングレジスタ群の第1拡張リネーミングレジスタ群とを使用する工程を有する演算処理装置の制御方法。
(付記8)
前記非マルチデータ命令を実行する場合の工程では,前記複数の拡張格納先レジスタ群の第1拡張格納先レジスタ群とは異なる第2拡張格納先レジスタ群と,前記複数の拡張リネーミングレジスタ群の第1拡張リネーミングレジスタ群とは異なる第2拡張リネーミングレジスタ群とを使用しない付記7に記載の演算処理装置の制御方法。
305:命令フェッチアドレス生成器
302:分岐予測機構
303:一次命令キャッシュ
304:命令バッファ
305:命令デコーダ
REG_REN:レジスタリネーミング部
BRM:基本レジスタリネーミングマップ
ERM:拡張レジスタリネーミングマップ
RSA:主記憶オペランド生成用リザベーションステーション(アドレス生成リザベーションステーション)
RSE:固定小数点演算用リザベーションステーション
RSF:浮動小数点演算用リザベーションステーション
RSBR:分岐用リザベーションステーション
CSE:コミットスタックエントリ
310:オペランドアドレス生成器
312:一次データキャッシュ
313ストアバッファ
320:固定小数点演算器
322:固定小数点レジスタ
321:固定小数点リネーミングレジスタ
330:浮動小数点SIMD演算器
B_EXC:基本演算器
E_EXC:拡張演算器
Br_reg:基本結果レジスタ
Er_reg:拡張結果レジスタ
FS_REG:浮動小数点SIMDレジスタ
B_REG:基本レジスタ
E_REG:拡張レジスタ
FR_REG:浮動小数点リネーミングレジスタ
BR_REG:基本リネーミングレジスタ
ER_REG:拡張リネーミングレジスタ
PC:プログラムカウンタ

Claims (5)

  1. 命令をデコードする命令デコーダと,
    前記命令デコーダがデコードした命令が,複数のデータを1つの命令で並列処理するマルチデータ命令の場合に,前記複数のデータを並列に処理し,単数のデータを1つの命令で処理する非マルチデータ命令の場合に,前記単数のデータを個別に処理する3個以上の複数の演算器と,
    前記複数の演算器それぞれに対応して設けられ,前記演算器の演算結果を格納可能な複数の格納先レジスタ群と,
    前記複数の演算器それぞれに対応して設けられ,前記演算結果を格納可能な複数のリネーミングレジスタ群と,
    前記格納先レジスタ群のうち命令により指定された指定格納先レジスタと,前記リネーミングレジスタ群から割り当てられた割当リネーミングレジスタとの対応関係を記憶するレジスタリネーミング部とを有し,
    前記格納先レジスタ群と前記リネーミングレジスタ群を有するレジスタのセットが,前記マルチデータ命令の演算と前記非マルチデータ命令の演算で使用される基本レジスタセットに加えて,前記マルチデータ命令の演算と前記非マルチデータ命令の演算で使用される第1拡張レジスタセットと,前記マルチデータ命令の演算で使用され且つ前記非マルチデータ命令の演算で使用されない第2拡張レジスタセットとを有し,
    前記レジスタリネーミング部が,前記基本レジスタセットの前記対応関係と,前記第1拡張レジスタセットの前記対応関係とを記憶し,前記基本レジスタセットの前記対応関係または前記第1拡張レジスタセットの前記対応関係は,前記第2拡張レジスタセットの前記対応関係と共通である演算処理装置。
  2. 更に,
    前記命令デコーダがデコードした命令を,前記命令の順番にかかわらず,前記演算器に出力するリザベーションステーションと,
    前記割当リネーミングレジスタに格納された前記演算結果を,前記命令の順番に,前記割当リネーミングレジスタに対応する前記指定格納先レジスタに格納するよう制御するコミットスタックエントリとを有する請求項1に記載の演算処理装置。
  3. 前記命令デコーダは,前記マルチデータ命令をデコードした場合,前記基本レジスタセットの前記対応関係と前記第1拡張レジスタセットの前記対応関係とを決定し,前記非マルチデータ命令をデコードした場合,前記基本レジスタセットの前記対応関係または前記第1拡張レジスタセットの前記対応関係を決定し,
    前記マルチデータ命令の演算で使用される前記第2拡張レジスタセットの前記対応関係は,前記基本レジスタセットの前記対応関係または前記第1拡張レジスタセットの前記対応関係と同じである請求項1に記載の演算処理装置。
  4. 前記複数の演算器は,前記マルチデータ命令を実行した場合,前記基本レジスタセットと前記第1拡張レジスタセットと前記第2拡張レジスタセット内の前記割当リネーミングレジスタに前記演算結果を格納し,
    前記複数の演算器のいずれかは,前記非マルチデータ命令を実行した場合,前記基本レジスタセットまたは前記第1拡張レジスタセット内の前記割当リネーミングレジスタに前記演算結果を格納する請求項1に記載の演算処理装置。
  5. 命令をデコードする命令デコーダと,
    前記命令デコーダがデコードした命令が,複数のデータを1つの命令で並列処理するマルチデータ命令の場合に,前記複数のデータを並列に処理し,単数のデータを1つの命令で処理する非マルチデータ命令の場合に,前記単数のデータを個別に処理する3個以上の複数の演算器と,
    前記複数の演算器それぞれに対応して設けられ,前記演算器の演算結果を格納可能な複数の格納先レジスタ群と,
    前記複数の演算器それぞれに対応して設けられ,前記演算結果を格納可能な複数のリネーミングレジスタ群と,
    前記格納先レジスタ群のうち命令により指定された指定格納先レジスタと,前記リネーミングレジスタ群から割り当てられた割当リネーミングレジスタとの対応関係を記憶するレジスタリネーミング部とを有する演算処理装置の制御方法であって,
    前記マルチデータ命令を実行する場合,前記複数の格納先レジスタ群内の基本格納先レジスタ群と,第1拡張格納先レジスタ群と,第2拡張格納先レジスタ群と,前記複数のリネーミングレジスタ群内の基本リネーミングレジスタ群と,第1拡張リネーミングレジスタ群と,第2拡張リネーミングレジスタ群とを使用し,前記レジスタリネーミング部に,前記基本格納先レジスタ群と前記基本リネーミングレジスタ群の第1の対応関係と,前記第1拡張格納先レジスタ群と前記第1拡張リネーミングレジスタ群の第2の対応関係とを記憶し, 前記第2拡張格納先レジスタ群と前記第2拡張リネーミングレジスタ群の前記対応関係は,前記第1の対応関係または前記第2の対応関係のいずれかを参照する工程と,
    前記非マルチデータ命令を実行する場合,前記基本格納先レジスタ群と前記第1拡張格納先レジスタ群のいずれかと,前記基本リネーミングレジスタ群と前記第1拡張リネーミングレジスタ群のいずれかとを使用し,前記レジスタリネーミング部に,前記第1の対応関係または,前記第2の対応関係を記憶する工程を有する演算処理装置の制御方法。
JP2014068415A 2014-03-28 2014-03-28 演算処理装置及び演算処理装置の制御方法 Active JP6307975B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2014068415A JP6307975B2 (ja) 2014-03-28 2014-03-28 演算処理装置及び演算処理装置の制御方法
US14/665,405 US20150277905A1 (en) 2014-03-28 2015-03-23 Arithmetic processing unit and control method for arithmetic processing unit

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014068415A JP6307975B2 (ja) 2014-03-28 2014-03-28 演算処理装置及び演算処理装置の制御方法

Publications (2)

Publication Number Publication Date
JP2015191463A JP2015191463A (ja) 2015-11-02
JP6307975B2 true JP6307975B2 (ja) 2018-04-11

Family

ID=54190468

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014068415A Active JP6307975B2 (ja) 2014-03-28 2014-03-28 演算処理装置及び演算処理装置の制御方法

Country Status (2)

Country Link
US (1) US20150277905A1 (ja)
JP (1) JP6307975B2 (ja)

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5675759A (en) * 1995-03-03 1997-10-07 Shebanow; Michael C. Method and apparatus for register management using issue sequence prior physical register and register association validity information
JP2806346B2 (ja) * 1996-01-22 1998-09-30 日本電気株式会社 演算処理装置
US5802338A (en) * 1996-10-01 1998-09-01 International Business Machines Corporation Method of self-parallelizing and self-parallelizing multiprocessor using the method
US6609189B1 (en) * 1998-03-12 2003-08-19 Yale University Cycle segmented prefix circuits
US6230253B1 (en) * 1998-03-31 2001-05-08 Intel Corporation Executing partial-width packed data instructions
US6643763B1 (en) * 2000-02-28 2003-11-04 International Business Machines Corporation Register pipe for multi-processing engine environment
US7694114B2 (en) * 2005-06-09 2010-04-06 Qualcomm Incorporated Software selectable adjustment of SIMD parallelism
US7360063B2 (en) * 2006-03-02 2008-04-15 International Business Machines Corporation Method for SIMD-oriented management of register maps for map-based indirect register-file access
JP5481793B2 (ja) * 2008-03-21 2014-04-23 富士通株式会社 演算処理装置および同装置の制御方法
US8423983B2 (en) * 2008-10-14 2013-04-16 International Business Machines Corporation Generating and executing programs for a floating point single instruction multiple data instruction set architecture
JP5633122B2 (ja) * 2009-06-16 2014-12-03 富士通セミコンダクター株式会社 プロセッサ及び情報処理システム
JP5423217B2 (ja) * 2009-08-04 2014-02-19 富士通株式会社 演算処理装置、情報処理装置、および演算処理装置の制御方法
TWI414994B (zh) * 2009-09-24 2013-11-11 Ind Tech Res Inst 可重組態處理裝置及其系統
US8782378B2 (en) * 2010-09-14 2014-07-15 Arm Limited Dynamic instruction splitting
US20130332707A1 (en) * 2012-06-07 2013-12-12 Intel Corporation Speed up big-number multiplication using single instruction multiple data (simd) architectures
US9507599B2 (en) * 2013-07-22 2016-11-29 Globalfoundries Inc. Instruction set architecture with extensible register addressing

Also Published As

Publication number Publication date
JP2015191463A (ja) 2015-11-02
US20150277905A1 (en) 2015-10-01

Similar Documents

Publication Publication Date Title
US8595280B2 (en) Apparatus and method for performing multiply-accumulate operations
JP3724582B2 (ja) 命令実行ユニットのためのレジスタ・リネーミング回路
CN106648843B (zh) 用于改善连续的事务性存储器区的吞吐量的***、方法和装置
CN110580175A (zh) 可变格式、可变稀疏矩阵乘法指令
US9355061B2 (en) Data processing apparatus and method for performing scan operations
CN116700793A (zh) 可中断和可重启矩阵乘法指令、处理器、方法和***
KR20170016998A (ko) 벡터 소팅 알고리즘 및 다른 알고리즘들을 지원하기 위한 트리 구조를 갖춘 기능 유닛
KR102524565B1 (ko) 로드 스토어 유닛들을 바이패싱하여 스토어 및 로드 추적
JP6493088B2 (ja) 演算処理装置及び演算処理装置の制御方法
US9965275B2 (en) Element size increasing instruction
US10437594B2 (en) Apparatus and method for transferring a plurality of data structures between memory and one or more vectors of data elements stored in a register bank
CN110659115A (zh) 具有硬件辅助任务调度的多线程处理器核
US20190129718A1 (en) Packed 16 bits instruction pipeline
US11080063B2 (en) Processing device and method of controlling processing device
US11451241B2 (en) Setting values of portions of registers based on bit values
WO2014202825A1 (en) Microprocessor apparatus
US12020076B2 (en) Techniques for balancing workloads when parallelizing multiply-accumulate computations
JP6307975B2 (ja) 演算処理装置及び演算処理装置の制御方法
JP4444305B2 (ja) 半導体装置
JP6020428B2 (ja) ベクトルレジスタリネーミング制御方式、ベクトルプロセッサ、及びベクトルレジスタリネーミング制御方法
JP5786719B2 (ja) ベクトルプロセッサ
US20230273791A1 (en) Floating Point Norm Instruction
US20230297378A1 (en) Arithmetic processing device and arithmetic processing method
KR20010085353A (ko) 고속 컨텍스트 전환을 갖는 컴퓨터
JP6340887B2 (ja) 演算処理装置及び演算処理装置の制御方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20161206

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20171130

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20171205

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180201

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180226

R150 Certificate of patent or registration of utility model

Ref document number: 6307975

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150