JP2014164659A - プロセッサ - Google Patents

プロセッサ Download PDF

Info

Publication number
JP2014164659A
JP2014164659A JP2013037032A JP2013037032A JP2014164659A JP 2014164659 A JP2014164659 A JP 2014164659A JP 2013037032 A JP2013037032 A JP 2013037032A JP 2013037032 A JP2013037032 A JP 2013037032A JP 2014164659 A JP2014164659 A JP 2014164659A
Authority
JP
Japan
Prior art keywords
instruction
output
data
arithmetic unit
selector
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.)
Pending
Application number
JP2013037032A
Other languages
English (en)
Inventor
Kazuya Ishida
一哉 石田
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.)
Renesas Electronics Corp
Original Assignee
Renesas Electronics Corp
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 Renesas Electronics Corp filed Critical Renesas Electronics Corp
Priority to JP2013037032A priority Critical patent/JP2014164659A/ja
Publication of JP2014164659A publication Critical patent/JP2014164659A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】スーパースカラプロセッサにおいて、依存関係のある複数の演算命令を同時に1サイクルで実行する。
【解決手段】プロセッサ10は、第1のデータを処理する第1の演算器51と、第1の演算器51の出力および第2のデータの一方を選択するセレクタ60と、セレクタ60の出力を処理する第2の演算器52と、命令列から選択した実行対象の命令に応じてセレクタを切替える制御回路80とを備える。
【選択図】図1

Description

この発明はプロセッサに関し、たとえば、スーパースカラプロセッサで好適に用いられる。
CPUの高速化の手法として、複数の実行ユニットでパイプライン処理を行なうスーパースカラプロセッサが提案されている。スーパースカラプロセッサは、プログラム順に隣接する命令を並列処理するインオーダ型と、プログラム順に関係なく並列処理するアウトオブオーダ型に分けられる。インオーダ型の場合には、隣接する命令のオペランドに依存関係がある場合には一般的には並列処理はできない。アウトオブオーダ型はインオーダ型に比べて並列度は高くなるが、制御回路が複雑化するために回路規模が大きくなるというディメリットがある。そこで、インオーダ型で並列度を上げる手法が提案されている。
たとえば、特開平9−311786号公報(特許文献1)に記載のデータ処理装置では、隣接する2つの2オペランド命令が1つの3オペランド命令と同等であることを検出し、その場合に2つの2オペランド命令を1つの3オペランド命令に統合して後続の実行ステージに送出する回路が命令デコーダに設けられる。
特開2004−21573号公報(特許文献2)に記載のデータ処理装置において、演算回路は、乗算、加算、および乗加算の3種を選択して実行可能とされる。この演算回路により乗算命令と加算命令の列に対して乗算−加算のデータ依存処理を高速で行なえるようにする。
特開2007−500406号公報(特許文献3)に記載のデータプロセッサは、その実行の結果オペランドレジスタの内容がデスティネーションレジスタに記憶されることになる第1の命令の実行が完了する前に、前記デスティネーションレジスタを参照する第2の命令を前記オペランドレジスタの内容を使用して実行する。
特開平9−91138号公報(特許文献4)に記載のデータ処理装置では、単一の演算器で同時に実行可能な命令対が検出され、この命令対を同時に実行させることにより命令処理時間が短縮される。たとえば、レジスタにロードする命令とレジスタの内容を加算する命令とが単一の演算器で同時に実行される。
特開2011−248539号公報(特許文献5)に記載の情報処理装置は、2つのシフト命令のシフト数を加減算するシフト数生成回路を含む。情報処理装置は、シフト数生成回路により求めたシフト数に応じてシフト演算を実行することによって、データ依存関係のある2つのシフト命令を1回のシフト演算で実行することができる。
M.Ozawa等の文献(M.Ozawa et al., "Performance Evaluation of Cascade ALU Architecture for Asynchronous Super-Scalar Processors", ASYNC 2001, p162-172,IEEE)は、複数のALU(Arithmetic Logic Unit)がカスケードに接続されることによって構成されるカスケードALUアーキテクチャを開示する。この文献のカスケードALUでは、1サイクルの長さを可変にすることで依存関係のある複数の演算処理が1サイクルに収められる。
特開平9−311786号公報 特開2004−21573号公報 特表2007−500406号公報 特開平9−91138号公報 特開2011−248539号公報
M.Ozawa et al., "Performance Evaluation of Cascade ALU Architecture for Asynchronous Super-Scalar Processors", In 7th International Symposium on Advanced Research in Asynchronous Circuits and Systems (ASYNC 2001), p162-172, IEEE Computer Society, 2001
上記の従来技術では、連続する複数の命令のオペランドに依存関係がある場合でも同時に実行することを可能にするものであるが、命令の組み合わせが限定されていたり、クロック1サイクルでの実行が前提でなかったりしていた。
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
一実施の形態によるプロセッサは、第1のデータを処理する第1の演算器と、第1の演算器の出力および第2のデータの一方を選択するセレクタと、セレクタの出力を処理する第2の演算器と、命令列から実行対象となる命令を選択し、選択した実行対象の命令に応じてセレクタを切替える制御回路とを備える。
上記の一実施の形態によれば、スーパースカラプロセッサにおいて、依存関係のある複数の演算命令を同時に1サイクルで実行できる。なお、上記の一実施の形態の技術は、インオーダ型だけでなくアウトオブオーダ型のスーパースカラプロセッサにも適用可能である。
実施の形態1による半導体装置の構成を概略的に示すブロック図である。 図1のプロセッサのより具体的な構成例を示すブロック図である。 図2の比較例としてのプロセッサの構成を示すブロック図である。 図3の比較例のプロセッサにおいて複数の命令を実行する際のタイミング図である。 図2に示す実施の形態1のプロセッサにおいて複数の命令を実行する際のタイミング図である。 実施の形態1の変形例によるプロセッサの構成を示すブロック図である。 実施の形態2によるプロセッサの構成を示すブロック図である。 実施の形態2の一変形例によるプロセッサの構成を示すブロック図である。 実施の形態2の他の変形例によるプロセッサの構成を示すブロック図である。 実施の形態3によるプロセッサの構成を示すブロック図である。 実施の形態4によるプロセッサの構成を示すブロック図である。 実施の形態5の変形例によるプロセッサの構成を示すブロック図である。 実施の形態6によるプロセッサの構成を示すブロック図である。 図13の第1命令用ALUの構成の一例を示すブロック図である。 図13の第1命令用シフト演算器の構成の一例を示すブロック図である。 実施の形態7によるプロセッサの構成を示すブロック図である。
以下、各実施の形態について図面を参照して詳しく説明する。なお、同一または相当する部分には同一の参照符号を付して、その説明を繰り返さない。
<実施の形態1>
[半導体装置の全体構成]
図1は、実施の形態1による半導体装置の構成を概略的に示すブロック図である。図1を参照して、半導体装置(マイクロコンピュータチップ)1は、プロセッサ(CPU:Central Processing Unit)10と、メモリ6(命令メモリ7およびデータメモリ8)と、図示しない入出力装置などを含む。なお、図1および後続する図2、図3、図6〜図12において、データの流れを実線の矢印で示し、命令コードおよび制御信号の流れを破線の矢印で示す。
メモリ6は、命令(プログラム)を格納する命令メモリ7とデータを格納するデータメモリ8とが分離された構成となっているが、プログラムとデータを同一のメモリに格納する構成であってもよい。後者の場合、命令またはデータを選択するための選択回路が、メモリ6とプロセッサ10との間に設けられる。
プロセッサ10は、スーパースカラプロセッサであり、クロックに同期して動作する同期プロセッサである。プロセッサ10は、レジスタファイル25と、制御回路80と、第1命令用の演算ユニット51と、第2命令用の演算ユニット52と、セレクタ60とを含む。
レジスタファイル25は、データメモリ8から読出命令(ロード命令)に従って読み出された複数のデータを保持する。レジスタファイル25は、さらに、演算ユニット51,52の演算結果を保持する。
制御回路80は、フェッチ制御部81と、命令デコーダ82と、命令選択回路83とを含む。フェッチ制御部81は、命令メモリ7に格納された命令を逐次読み出す。命令デコーダ82は、読み出した命令をデコードする。
命令選択回路83は、デコードされた命令列から、演算ユニット51および52でそれぞれ実行する実行対象となる第1命令および第2の命令を選択する。インオーダ型の場合には連続する2つの命令が選択される。すなわち、第1命令はプログラム順序において先に実行される命令であり、第2命令はプログラム順序において第1命令の次に実行される命令である。
命令選択回路83は、さらに、実行対象として選択した第1命令のオペランドに応じて、レジスタファイル25に保持されているデータDT1を選択する。データDT1は演算ユニット51で処理されるデータであり、レジスタの値でなく即値の場合もあり得る。命令選択回路83は、第1および第2命令のオペランドに依存関係が無い場合には、実行対象として選択した第2命令のオペランドに応じて、レジスタファイル25に保持されているデータDT2を選択する。データDT2は、演算ユニット52で処理されるデータであり、レジスタの値でなく即値の場合もあり得る。
命令選択回路83は、さらに、実行対象として選択した第1および第2の命令の組み合わせに応じて(たとえば、第1および第2命令のオペランドの依存関係に応じて)、セレクタ60の選択を切替える。たとえば、第1命令の出力オペランド(レジスタファイル25のレジスタ名)と、第2命令の入力オペランド(レジスタファイル25のレジスタ名)とが一致している場合には、第1命令のオペランドと第2命令のオペランドとは依存関係にある。
演算ユニット51は、データDT1を処理する。セレクタ60は、命令選択回路83の制御に従って、演算ユニット51の出力およびデータDT2のうち一方を選択して出力する。すなわち、セレクタ60は、第1および第2命令のオペランドに依存関係がある場合には演算ユニット51の出力を選択して出力し、依存関係が無い場合にはデータDT2を選択して出力する。演算ユニット52は、セレクタ60の出力を処理する。演算ユニット51および52の各々の出力は、レジスタファイル25に書き戻される。
[プロセッサの構成および動作]
図2は、図1のプロセッサのより具体的な構成例を示すブロック図である。プロセッサ10は、レジスタ群20と、第1命令用の演算ユニット51と、第2命令用の演算ユニット52と、セレクタ61,62と、制御回路とを含む。ただし、図2では図1の制御回路80の一部である命令選択回路83のみが示されている。演算ユニット51,52の各々は、ALUおよびシフト演算器(SFT)を含む。
図2のプロセッサでは、レジスタファイル25からのデータの読出しとその処理とが2サイクルに分けて実行される。このために、レジスタ群20は、図1のレジスタファイル25に加えて、レジスタファイル25から読み出されたデータを保持するレジスタ31〜34と、レジスタ31〜34にそれぞれ対応して設けられたセレクタ41〜44とを含む。セレクタ41〜44は、演算ユニット51,52の出力データOT1,OT2と、レジスタファイル25から読み出されたデータとのうち一方を選択するために設けられている。セレクタ41〜44の選択結果がレジスタ31〜34にそれぞれ入力される。
演算ユニット51は、レジスタ31および32にそれぞれ保持されているデータDT11およびDT12を処理する。セレクタ61は、演算ユニット51の出力とレジスタ33に保持されているデータDT21の一方を選択する。セレクタ62は、演算ユニット51の出力とレジスタ34に保持されているデータDT22の一方を選択する。演算ユニット52は、セレクタ61および62の出力を処理する。ALUは命令に応じて2つの入力データに対し例えば加算演算、減算演算及び種々の論理演算(論理和、論理積等)を行う。シフト演算器SFTは指定されたシフト量だけ入力データをシフトする演算を行う。
上記のレジスタファイル25からのデータの読出しと、読み出されたデータを用いた演算ユニット51,52による演算の実行とはパイプライン処理される。
具体的には、D(デコード:Decode)ステージにおいて、図1の命令デコーダ82は連続する2つの命令のデコードを行なう。命令選択回路83はデコードされた第1および第2命令を選択し、発行する。このとき、図2のプロセッサ10は、第1および第2命令のオペランドに依存関係があるかないかに関わらず二つの命令を選択する。第1命令で使用するデータがレジスタファイル25からレジスタ31,32にそれぞれ読み出され、第2命令で使用するデータがレジスタファイル25からレジスタ33,34にそれぞれ読み出される。
次に、E(実行:Execute)ステージにおいて、第1および第2命令のオペランドに依存関係が無い場合には、セレクタ61,62の入力は、レジスタ33,34側にそれぞれ切替えられる。この結果、レジスタ33,34から読み出されたデータDT21,DT22が演算ユニット52に入力される。演算ユニット51がレジスタ31,32から読み出されたデータDT11,DT12を用いて第1命令を実行し、演算ユニット52がセレクタ61,62の出力を用いて第2命令を実行する。演算ユニット51,52の実行結果OT1,OT2は、レジスタファイル25に書き戻される。ただし、次にEステージ実行される第1命令または第2命令(Dステージまで実行されている命令)が演算ユニット51または52の出力データを使用する場合には、その使用される出力データは、セレクタ41〜44を介してレジスタ31〜34のいずれかのレジスタに入力される。
一方、Eステージにおいて、第1および第2命令のオペランドに依存関係がある場合には(第2命令が第1の命令の演算結果を使用する場合には)、セレクタ61,62の少なくとも一方の入力が演算ユニット51の出力側に切替えられる。たとえば、第2命令の第1オペランド(セレクタ61によって選択される演算ユニット51への入力オペランド)が第1命令の演算結果に依存する場合には、セレクタ61の入力が演算ユニット51の出力側に切替えられ、演算ユニット51の出力とレジスタ34に保持されているデータDT22が演算ユニット52に入力される。このように、第1命令及び第2命令のオペランドに依存関係がある場合及びない場合に関わらず、それぞれのEステージに要する時間(1サイクル分の時間)は同じである。
[セレクタ61,62の動作]
次に、図2の第2命令用の演算ユニット52の入力側のセレクタ61,62の動作を具体的に説明する。
(1) 第1命令の演算結果(出力オペランド)を第2命令の入力オペランドのうち一方が参照する場合には、セレクタ61,62の一方が演算ユニット51の出力側を選択する。
たとえば、次の2つの命令(第1命令および第2命令)を同時に実行した場合について説明する。
(第1命令) add r1,r2,r3 (r1+r2の結果をr3に格納)
(第2命令) add r3,r4,r5 (r3+r4の結果をr5に格納)
第1命令は、レジスタファイル25のレジスタr1に格納されているデータと、レジスタファイル25のレジスタr2に格納されているデータの加算結果を、レジスタファイル25のレジスタr3に格納する命令である。第2命令は、レジスタファイル25のレジスタr3に格納されているデータと、レジスタファイル25のレジスタr4に格納されているデータの加算結果を、レジスタファイル25のレジスタr5に格納する命令である。
上記の2つの命令を図2のプロセッサ10で実行する場合には、セレクタ61によって第1命令の演算結果(演算ユニット51の出力)が選択され、セレクタ62によってレジスタ34(レジスタr4の値)が選択される。もしくは、セレクタ61によってレジスタ33(レジスタr4の値)が選択され、セレクタ62によって第1命令の演算結果(演算ユニット51の出力)が選択される。
(2) 第1命令の演算結果を第2命令の入力オペランドの両方が参照する場合には、セレクタ61,62の両方とも演算ユニット51の出力側を選択する。たとえば、次の2つの命令を同時に実行した場合には、両方のセレクタ61,62が第1命令の演算結果(演算ユニット51の出力)を選択する。
(第1命令) add r1,r2,r3 (r1+r2の結果をr3に格納)
(第2命令) add r3,r3,r4 (r3+r3の結果をr4に格納)
(3) 第1命令の演算結果を第2命令が参照しない場合には、セレクタ61,62はレジスタ33,34をそれぞれ選択する。たとえば、次の2つの命令を同時に実行した場合には、第2命令の入力オペランドはどちらも第1命令の演算結果とは無関係であるため、セレクタ61,62はレジスタ33,34(レジスタr5の値とレジスタr6の値)をそれぞれ選択する。
(第1命令) add r1,r2,r3 (r1+r2の結果をr3に格納)
(第2命令) add r5,r6,r7 (r5+r6の結果をr7に格納)
[セレクタ61,62が設けられていない場合との比較]
(1) 比較例の場合
図3は、図2の比較例としてのプロセッサの構成を示すブロック図である。図3のプロセッサ110は、セレクタ61,62が設けられていない点で図2のプロセッサ10と異なる。図3の場合には、演算ユニット51にレジスタ31,32に保持されているデータDT11,DT12が入力され、演算ユニット52にレジスタ33,34に保持されているデータDT21,DT22が入力される。図3のその他の点は図2の場合と同様であるので、同一または相当する部分には同一の参照符号を付して説明を繰り返さない。
図4は、図3の比較例のプロセッサにおいて複数の命令を実行する際のタイミング図である。図4では次の4つの命令(命令1〜命令4)を実行する場合のタイミング図が示される。
(命令1) add r1,r2,r3 (r1+r2の結果をr3に格納)
(命令2) add r3,r4,r5 (r3+r4の結果をr5に格納)
(命令3) add r5,r6,r7 (r5+r6の結果をr7に格納)
(命令4) add r7,r8,r9 (r7+r8の結果をr9に格納)
上記の命令列の場合には、命令1の出力結果(レジスタr3の値)を命令2が入力オペランドとして参照するために、命令1と命令2には依存関係がある。したがって、図3のプロセッサでは、命令1のEステージと命令2のEステージとを同じサイクルで実行できない。同様に、命令2の出力結果(レジスタr5の値)を命令3が入力オペランドとして参照するために、命令2と命令3には依存関係がある。したがって、命令2のEステージと命令3のEステージとを同じサイクルで実行できない。命令3の出力結果(レジスタr7の値)を命令4が入力オペランドとして参照するために、命令3と命令4には依存関係がある。したがって、命令3のEステージと命令4のEステージを同じサイクルで実行できない。以上により、図3のプロセッサでは、命令1〜4のEステージを実行するのに合計4サイクル費やす。この結果、図4に示すように、命令1,2のIF(命令フェッチ:Instruction Fetch)ステージから始めて、最後の命令4のEステージまで合計6サイクルを要する。
具体的に図3、図4を参照して、サイクル1では、命令1および命令2が図1の命令メモリ7からフェッチされる。
サイクル2では、命令1および命令2がデコードされるとともに、命令3が命令メモリ7からフェッチされる。命令1および命令2のデコード結果に応じて、命令1で使用されるレジスタファイル25のレジスタr1,r2の値がレジスタ31,32に読み出される。命令2で使用されるレジスタファイル25のレジスタr3は命令1の演算結果に依存するため、命令選択回路83は命令2を選択、発行せず、命令2はDステージでストールする。
サイクル3では、演算ユニット51においてレジスタ31,32の値(レジスタr1,r2の値)の加算演算が実行され、演算結果がセレクタ41を介してレジスタ31に格納されるとともに、レジスタファイル25のレジスタr3に書き戻される。さらに、命令2と命令3がデコードされ、命令4が命令メモリ7からフェッチされる。命令2および命令3のデコード結果に応じて、命令2で使用されるレジスタファイル25のレジスタr4の値がレジスタ32に読み出される。命令3で使用されるレジスタファイル25のレジスタr5は命令2の演算結果に依存するため、命令選択回路83は命令3を選択、発行せず、命令3はDステージでストールする。
サイクル4では、演算ユニット51においてレジスタ31,32の値(レジスタr3,r4の値)の加算演算が実行され、演算結果がセレクタ41を介してレジスタ31に格納されるとともに、レジスタファイル25のレジスタr5に書き戻される。さらに命令3と命令4がデコードされる。命令3および命令4のデコード結果に応じて、命令3で使用されるレジスタファイル25のレジスタr6の値がレジスタ32に読み出される。命令4で使用されるレジスタファイル25のレジスタr7は命令3の演算結果に依存するため、命令選択回路83は命令4を選択、発行せず、命令4はDステージでストールする。
サイクル5では、演算ユニット51においてレジスタ31,32の値(レジスタr5,r6の値)の加算演算が実行され、演算結果がセレクタ41を介してレジスタ31に格納されるとともに、レジスタファイル25のレジスタr7に書き戻される。命令4のデコード結果に応じて、命令4で使用されるレジスタファイル25のレジスタr8の値がレジスタ32に読み出される。
サイクル6では、演算ユニット51においてレジスタ31,32の値(レジスタr7,r8の値)の加算演算が実行され、演算結果がレジスタファイル25のレジスタr9に書き戻される。
(2) 実施の形態1の場合
図5は、図2に示す実施の形態1のプロセッサにおいて複数の命令を実行する際のタイミング図である。図5では、図4の場合と同じ4つの命令(命令1〜命令4)を実行する場合のタイミング図が示される。
図2のプロセッサでは、セレクタ61,62を用いることによって、依存関係にある命令1のEステージと命令2のEステージとを同じサイクルで実行することができる。同様に、依存関係にある命令3のEステージと命令4のEステージとを同じサイクルで実行することができる。したがって、図2のプロセッサでは、命令1〜4のEステージを実行するのに合計2サイクルで完了する。この結果、図5に示すように、命令1,2のIFステージから始めて最後の命令3,4のEステージまで合計4サイクルかかり、比較例の場合に比べて、命令列の実行に要するサイクル数を短縮することができる。
具体的に図2、図5を参照して、サイクル1では、命令1および命令2が図1の命令メモリ7からフェッチされる。
サイクル2では、命令1および命令2がデコードされるとともに、命令3および命令4が命令メモリ7からフェッチされる。命令1および命令2のデコード結果に応じて、命令1で使用されるレジスタファイル25のレジスタr1,r2の値がレジスタ31,32に読み出され、命令2で使用されるレジスタファイル25のレジスタr4の値がレジスタ34に読み出される。
サイクル3では、セレクタ61が演算ユニット51の出力側に切替えられ、セレクタ62がレジスタ34側に切替えられる。演算ユニット51においてレジスタ31,32の値(レジスタr1,r2の値)の加算演算が実行され、演算結果がセレクタ61を介して演算ユニット52に入力されるとともに、レジスタファイル25のレジスタr3に書き戻される。演算ユニット52においてセレクタ61,62の出力(レジスタr3,r4の値)の加算演算が実行され、演算結果がセレクタ41を介してレジスタ31に格納されるとともに、レジスタファイル25のレジスタr5に書き戻される。サイクル3では、さらに、命令3および命令4がデコードされ、命令3および命令4のデコード結果に応じて、命令3で使用されるレジスタファイル25のレジスタr6の値がレジスタ32に格納され、命令4で使用されるレジスタファイル25のレジスタr8の値がレジスタ34に格納される。
サイクル4では、演算ユニット51においてレジスタ31,32の値(レジスタr5,r6の値)の加算演算が実行され、演算結果がセレクタ61を介して演算ユニット52に入力されるとともに、レジスタファイル25のレジスタr7に書き戻される。演算ユニット52においてセレクタ61,62の出力(レジスタr7,r8の値)の加算演算が実行され、演算結果がレジスタファイル25のレジスタr9に書き戻される。
[実施の形態1の効果]
実施の形態1では、インオーダ型のスーパースカラプロセッサにおいて、先行する命令の演算結果を、後続する命令を処理する演算器の入力へバイパスする回路(セレクタ61,62)と、依存関係のある二つの命令を同時に実行するか否かを判断しバイパスを制御する命令選択回路83とが設けられる。これにより、二つの依存関係のある演算命令を同時に1サイクルで処理することができる。
さらに、実施の形態1のプロセッサによれば、スーパースカラプロセッサ向けに命令レベルの並列度を上げる最適化を行うコンパイラが無い場合であっても、図2のセレクタ61,62が設けられていない従来のスーパースカラプロセッサの場合に比べてサイクル性能を上げることができる。
[実施の形態1の変形例]
(1) 変形例1
上記の例では、加算命令(add)のみを使って説明したが、他の命令でも同様のことができる。たとえば、依存関係のある減算命令とシフト命令を図2の演算ユニット51,52で同時に実行することができる。
(2) 変形例2
インオーダ型のスーパースカラプロセッサでは、第1命令として実行できる命令と第2命令として実行できる命令を同一にしない場合がある。具体的には、実行頻度の低い命令を第1命令でしか実行しないようにする例が挙げられる。たとえば、図2の演算ユニット51はALUとシフト演算器を含み、演算ユニット52はALUのみを含んでシフト演算器を含まないようにする。これによって、第2命令用の演算器の回路面積や消費電力を少なくすることができる。このように第1命令用の演算ユニットと第2命令用の演算ユニットの構成が同一でない場合にも、本実施の形態の構成を適用することができる。
(3) 変形例3
上記の例では、連続する2命令が選択される想定で説明を行ったが、第1命令と第2命令は必ずしも連続する2命令である必要はない。本実施の形態の構成をアウトオブオーダ型のスーパースカラプロセッサに適用することもできる。
(4) 変形例4
上記の例では、同時に実行する命令が2個の場合を説明したが、3命令以上を同時に実行するプロセッサに対しても本実施の形態の構成を適用することもできる。
図6は、実施の形態1の変形例によるプロセッサの構成を示すブロック図である。図6には、3命令を同時に実行するスーパースカラプロセッサの例が示される。図6を参照して、プロセッサ10Aは、レジスタ群20Aと、第1命令用の演算ユニット51と、第2命令用の演算ユニット52と、第3命令用の演算ユニット53と、セレクタ61〜64と、制御回路とを含む。ただし、図6では図1の制御回路80の一部である命令選択回路83のみが示されている。演算ユニット51〜53の各々は、ALUおよびシフト演算器を含む。第2命令はプログラム順序において第1命令の次の命令であり、第3命令はプログラム順序において第2命令の次の命令である。
レジスタ群20Aは、図1のデータメモリ8から読み出されたデータを保持するレジスタファイル25と、レジスタファイル25から読み出されたデータを保持するレジスタ31〜36と、レジスタ31〜36にそれぞれ対応して設けられたセレクタ41〜46とを含む。セレクタ41〜46は、演算ユニット51〜53の出力データOT1〜OT3と、レジスタファイル25から読み出されたデータとのうち一方を選択するために設けられている。セレクタ41〜46の選択結果がレジスタ31〜36にそれぞれ保持される。
演算ユニット51は、レジスタ31,32にそれぞれ保持されているデータDT11,DT12を処理する。セレクタ61は、演算ユニット51の出力とレジスタ33に保持されているデータDT21の一方を選択する。セレクタ62は、演算ユニット51の出力とレジスタ34に保持されているデータDT22の一方を選択する。演算ユニット52は、セレクタ61および62の出力を処理する。セレクタ63は、演算ユニット51の出力、演算ユニット52の出力、およびレジスタ35に保持されているデータDT31のいずれか1つを選択する。セレクタ64は、演算ユニット51の出力、演算ユニット52の出力、およびレジスタ36に保持されているデータDT32のいずれか1つを選択する。演算ユニット53は、セレクタ63および64の出力を処理する。
上記のレジスタファイル25からのデータの読出しと、読み出されたデータを用いた演算の実行とはパイプライン処理される。演算ユニット51〜53のそれぞれの出力OT1,OT2,OT3は、レジスタファイル25に書き戻される。ただし、次のEステージで実行される第1命令〜第3命令(Dステージまで完了している命令)のいずれかが演算ユニット51または52または53の出力データを使用する場合には、その使用される出力データは、セレクタ41〜46のいずれかを介してレジスタ31〜36のうち対応するレジスタに入力される。
なお、図3のプロセッサ10Aにおいて、第1命令用の演算ユニット51の出力は、セレクタ61,62のみに入力され、セレクタ63,64には入力されないようにしてもよい。第2命令用の演算ユニット52の出力はセレクタ63,64には入力されないようにしてもよい。
<実施の形態2>
[プロセッサの構成]
図7は、実施の形態2によるプロセッサの構成を示すブロック図である。実施の形態2のプロセッサ11では、セレクタ61,62を用いる実施の形態1の構成が一部の演算器にのみ適用される。図7の例では、ALUに対して実施の形態1の構成が適用され、シフト演算器(SFT)については従来の構成のままである。
具体的に図7を参照して、プロセッサ11は、レジスタ群20と、第1命令用の演算ユニット51(51A,51B)と、第2命令用の演算ユニット52(52A,52B)と、セレクタ61,62,65,66と、制御回路とを含む。ただし、図7では図1の制御回路80の一部である命令選択回路83のみが示されている。レジスタ群20の構成は図2の場合と同じであるので、同一または相当する部分には同一の参照符号を付して説明を繰り返さない。
第1命令用の演算ユニットはALU51Aとシフト演算器51Bとに区分され、第2命令用の演算ユニットはALU52Aとシフト演算器52Bに区分される。ALU51Aおよびシフト演算器51Bの各々は、レジスタ31および32にそれぞれ保持されているデータDT11およびDT12を処理する。セレクタ61は、ALU51Aの出力とレジスタ33に保持されているデータDT21の一方を選択する。セレクタ62は、ALU51Aの出力とレジスタ34に保持されているデータDT22の一方を選択する。ALU52Aは、セレクタ61および62の出力を処理する。シフト演算器52Bは、レジスタ33および34にそれぞれ保持されているデータDT21およびDT22を処理する。
セレクタ65は、命令選択回路83の制御に従って、ALU51Aとシフト演算器51Bの出力OT1A,OT1Bの一方を選択し、選択結果をレジスタファイル25に書き戻す。セレクタ65の出力は、セレクタ41〜44を介してレジスタ31〜34のいずれかに書き戻し可能である。
セレクタ66は、命令選択回路83の制御に従って、ALU52Aとシフト演算器52Bの出力OT2A,OT2Bの一方を選択し、選択結果をレジスタファイル25に書き戻す。セレクタ66の出力は、セレクタ41〜44を介してレジスタ31〜34のいずれかに書き戻し可能である。
[プロセッサの動作]
ALUで実行する加算命令(add)と、シフト演算器で実行する左シフト演算命令(shll)とを組み合わせた例について説明する。実施の形態2のプロセッサ11では、実施の形態1のプロセッサ10と異なり、命令選択回路83によるDステージでの命令選択において第1および第2命令のオペランドの依存関係有無と、命令が使用する演算器の種類を考慮する。
例1:第1命令および第2命令が共に加算命令の場合には、依存関係があっても図7のプロセッサ11で同時に実行できる。たとえば、次の2つの命令は同時に実行可能である。
(第1命令) add r1,r2,r3 (r1+r2の結果をr3に格納)
(第2命令) add r3,r4,r5 (r3+r4の結果をr5に格納)
この場合、Dステージにおいて命令選択回路83は、第1および第2命令のオペランドに依存関係があるが、使用する演算器間に同時に実行するためのバイパス経路がある命令の組み合わせであることから、第1および第2命令を同時に選択、発行する。
例2: 第1命令が加算命令であり、第2命令がシフト命令であり、両者に依存関係がある場合には図7のプロセッサ11で同時に実行できない。たとえば、以下の第1命令および第2命令は同時に実行できない。第2命令は、レジスタr3の値をレジスタr4の値(ビット数)だけ左シフトした結果(「r3<<r4」と記載する)をレジスタr5に格納する命令(左シフト命令)である。
(第1命令) add r1,r2,r3 (r1+r2の結果をr3に格納)
(第2命令) shll r3,r4,r5 (r3<<r4の結果をr5に格納)
この場合、Dステージにおいて命令選択回路83は、第1および第2命令のオペランドに依存関係があり、かつ使用する演算器間に同時に実行するためのバイパス経路が無い命令の組み合わせであることから、第2命令の選択、発行を行わず、第1命令のみを選択、発行する。
例3: 上記の例2と同じ命令の組み合わせであっても、依存関係のない次の命令は図7のプロセッサ11で同時に実行できる。
(命令1) add r1,r2,r3 (r1+r2の結果をr3に格納)
(命令2) shll r5,r6,r7 (r5<<r6の結果をr7に格納)
この場合、Dステージにおいて命令選択回路83は、第1および第2命令のオペランドに依存関係がなく、同時に実行できる命令の組み合わせであることから、第1および第2命令を同時に選択、発行する。
このように一部の演算器にのみセレクタを追加した図7のスーパースカラプロセッサでは、命令種類(命令を実行する演算器)の組み合わせだけでは同時実行できるかどうかは決まらない。そのため、Dステージにある二つの命令を同時に実行できるかどうかを判断するためには、2命令間の依存関係の有無と、第1命令および第2命令の各々が特定の条件を満たすか否か(シフト演算であるか否か、すなわち、使用する第1命令用の演算ユニットの出力と、使用する第2命令用の演算ユニットの入力とがセレクタを介して接続されているか否か)を確認する必要がある。
図7のプロセッサ11の場合には、第1命令および第2命令のどちらか一方がシフト演算器を使う命令であれば、第2命令用のALU52Aの入力側に設けられているセレクタ61,62の入力を、両方ともレジスタ33,34側に切替えることができる。第1命令と第2命令のいずれもALUを使う命令である場合にのみ依存関係の有無を確認して、依存関係が有る場合にはセレクタ61,62の少なくとも一方の入力を第1命令用のALU51A側に切替える。
[実施の形態2の効果]
実施の形態2のプロセッサの構成によれば、たとえばシフト演算器の回路遅延がALUの回路遅延に比べて大きい場合に効果的である。セレクタ61,62によって第1命令用の演算ユニットの出力側を選択した場合には、演算ユニット51,52の2段分の遅延が1サイクル内に収まるようにしなければならない。このため、演算ユニット自体の遅延が大きい場合には最大動作周波数を下げなければならないこともあり得る。そのような場合に前もって遅延の大きい演算器がわかっていれば、その遅延の大きい演算器については、従来構成のままとする(第1命令用の演算ユニットと第2命令用の演算ユニットとの間にセレクタを設けない)ことで最大動作周波数を低下しないようにできる。実施の形態1の場合と比べて、スーパースカラプロセッサの並列度は若干低下するが、最大動作周波数を高く維持できるという利点がある。
[実施の形態2の変形例]
図8は、実施の形態2の一変形例によるプロセッサの構成を示すブロック図である。図8のプロセッサ11Aは、第1命令用のシフト演算器51Bの出力もセレクタ61,62に入力される点で図7のプロセッサ11と異なる。図8の構成によれば、第2命令がシフト演算でありかつ第1命令と依存関係にある場合には、第1命令と第2命令を同時に実行できないが、その他の場合には第1命令と第2命令とを同時に実行できる。
図9は、実施の形態2の他の変形例によるプロセッサの構成を示すブロック図である。図9のプロセッサ11Bは、第2命令用のシフト演算器52Bに対応するセレクタ67,68をさらに含む点で図7のプロセッサ11と異なる。セレクタ67には第1命令用のALU51Aの出力とレジスタ33の出力とが入力され、セレクタ68には第1命令用のALU51Aの出力とレジスタ34の出力とが入力される。第2命令用のシフト演算器52Bは、セレクタ67および68の出力を処理する。図9の構成によれば、第1命令がシフト演算でありかつ第2命令と依存関係にある場合には、第1命令と第2命令を同時に実行できないが、その他の場合には第1命令と第2命令とを同時に実行できる。
なお、第1命令用の演算ユニットの構成と第2命令用の演算ユニットの構成とは同じでなくてもよい。たとえば、図7から第2命令用のシフト演算器52Bを削除した構成も可能である。
<実施の形態3>
実施の形態3によるスーパースカラプロセッサ12では、乗算器および除算器などのように面積が大きくかつ遅延の大きい演算器については第1命令と第2命令で共用する構成としたものである。このような演算器の構成のプロセッサに対しても図2に示した実施の形態1の構成を適用することができる。
[プロセッサの構成]
図10は、実施の形態3によるプロセッサの構成を示すブロック図である。図10を参照して、実施の形態3によるプロセッサ12は、レジスタ群20Bと、第1命令用の演算ユニット51と、第2命令用の演算ユニット52と、第1および第2命令共用の演算ユニット54と、セレクタ61,62,65,66と、制御回路とを含む。ただし、図10では、図1の制御回路80の一部である命令選択回路83のみが示されている。
レジスタ群20Bは、レジスタ37,38とセレクタ47,48とをさらに含む点で図2のレジスタ群20と異なる。セレクタ47,48の各々には、レジスタファイル25から読み出されセレクタ41〜44を介してレジスタ31〜34に入力されるデータ(第1命令および第2命令の入力オペランドに対応するデータ)が入力される。セレクタ47,48の各々には、さらに、セレクタ65,66の出力が入力される。セレクタ47,48の選択結果がレジスタ37,38にそれぞれ入力される。
演算ユニット51,52の各々は、加算器、減算器、シフト演算器、および論理演算器を含み、乗算器および除算器を含まない。演算ユニット54は、乗算器および除算器を含み、加算器、減算器、シフト演算器、および論理演算器を含まない。演算ユニット51は、レジスタ31,32にそれぞれ保持されているデータDT11,DT12を処理する。セレクタ61は、演算ユニット51の出力とレジスタ33に保持されているデータDT21の一方を選択する。セレクタ62は、演算ユニット51の出力とレジスタ34に保持されているデータDT22の一方を選択する。演算ユニット52は、セレクタ61および62の出力を処理する。演算ユニット54は、レジスタ37,38の出力を処理する。
セレクタ65は、命令選択回路83の制御に従って、演算ユニット51と演算ユニット54の出力OT1,OT4の一方を選択し、選択結果をレジスタファイル25に書き戻す。セレクタ65の出力は、セレクタ41〜44,47,48のいずれかを介してレジスタ31〜34,37,38のいずれかに書き戻し可能である。
セレクタ66は、命令選択回路83の制御に従って、演算ユニット52と演算ユニット54の出力OT2,OT4の一方を選択し、選択結果をレジスタファイル25に書き戻す。セレクタ66の出力は、セレクタ41〜44,47,48のいずれかを介してレジスタ31〜34,37,38のいずれかに書き戻し可能である。
[プロセッサの動作]
以下、演算ユニット51,52で実行する加算命令(add)と、演算ユニット54で実行する乗算命令(mul)とを組み合わせた例について説明する。
例1:第1命令および第2命令が共に加算命令の場合には、依存関係があっても図10のプロセッサ12で同時に実行できる。たとえば、次の2つの命令は同時に実行可能である。ここで、第1命令が演算ユニット51で実行され、第2命令が演算ユニット52で実行される。
(第1命令) add r1,r2,r3 (r1+r2の結果をr3に格納)
(第2命令) add r3,r4,r5 (r3+r4の結果をr5に格納)
この場合、Dステージにおいて命令選択回路83は、第1および第2命令のオペランドに依存関係があるが、使用する演算器間に同時に実行するためのバイパス経路がある命令の組み合わせであることから、第1および第2命令を同時に選択、発行する。
例2:第1命令が加算命令であり、第2命令が乗算命令であり、両者に依存関係がある場合には図10のプロセッサ12で同時に実行できない。たとえば、以下の第1命令および第2命令は同時に実行できない。第1命令は演算ユニット51または52で実行される。第2命令は、レジスタr3の値とレジスタr4の値とを乗算した結果をレジスタr5に格納する命令(乗算命令)であり、演算ユニット54で実行される。
(第1命令) add r1,r2,r3 (r1+r2の結果をr3に格納)
(第2命令) mul r3,r4,r5 (r3*r4の結果をr5に格納)
この場合、Dステージにおいて命令選択回路83は、第1および第2命令のオペランドに依存関係があり、かつ使用する演算器間に同時に実行するためのバイパス経路が無い命令の組み合わせであることから、第2命令の選択、発行を行わず、第1命令のみを選択、発行する。
例3:上記の例2と同じ命令の組み合わせであっても、依存関係のない次の命令は図10のプロセッサ12で同時に実行できる。
(第1命令) add r1,r2,r3 (r1+r2の結果をr3に格納)
(第2命令) mul r5,r6,r7 (r5*r6の結果をr7に格納)
この場合、Dステージにおいて命令選択回路83は、第1および第2命令のオペランドに依存関係がなく、同時に実行できる命令の組み合わせであることから、第1および第2命令を同時に選択、発行する。
このように一部の演算について第1命令と第2命令の共用の演算ユニットで実行している図10のプロセッサ12の場合には、命令種類の組み合わせだけでは同時実行できるかどうかは決まらない。そのため、Dステージにある二つの命令を同時に実行できるかどうかを判断するためには、2命令間の依存関係の有無と、第1命令および第2命令の各々が特定の条件を満たすか否か(乗算命令であるか否か、すなわち、使用する第1命令用の演算ユニットの出力と第2命令用の演算ユニットの入力とがセレクタを介して接続されているか否か)を確認する必要がある。
図10のプロセッサ12の場合には、第1命令および第2命令のどちらか一方が乗算器を使う命令であれば、第2命令用の演算ユニット52の入力側に設けられているセレクタ61,62の入力を両方ともレジスタ33,34側に切替えることができる。第1命令と第2命令のいずれも演算ユニット51,52を使う命令である場合にのみ依存関係の有無を確認して、依存関係がある場合にはセレクタ61,62の少なくとも一方の入力を第1命令用の演算ユニット51の出力側に切替える。
[実施の形態3の効果]
実施の形態3のプロセッサ12によれば、実施の形態1の場合と比べて、スーパースカラプロセッサの並列度は若干低下するが、最大動作周波数を高く維持できるという利点がある。
<実施の形態4>
図11は、実施の形態4によるプロセッサの構成を示すブロック図である。実施の形態4のプロセッサ13では、乗算および除算に代えてメモリアクセスを行なう命令(ロードおよびストア)について第1命令と第2命令とで共用の演算器を設ける構成としたものである。
図11を参照して、第1命令用の演算ユニット51および第2命令用の演算ユニット52の各々は、ALUおよびシフト演算器を含む。第1および第2命令共用の演算ユニット55は、図10の演算ユニット54に代えて設けられたものであり、ロードストアユニット(LSU:Load Store Unit)を含む。
ロードストアユニットは、図1のデータメモリ8からデータをレジスタファイル25に読み出すロード命令を実行するとき、およびレジスタファイル25からデータメモリ8にデータを書き込むストア命令を実行するときに、アドレス計算を行なう。ロードストアユニットから出力されるアドレス(演算ユニット55の出力OT5)は、データメモリ8に直接出力可能な構成となっており、これによってアドレス計算を第2命令用演算ユニットの一部で行うのに比べてメモリアクセスするタイミングが早まるので、最大動作周波数を高く維持できる。
演算ユニット55の出力OT5は、さらに、セレクタ66を介してレジスタファイル25およびレジスタ31〜34,37,38に書き戻し可能な構成となっている。図11のその他の構成は図10と同様であるので、同一または相当する部分には同一の参照符号を付して説明を繰り返さない。
<実施の形態5>
図2のプロセッサ10において、演算ユニット51によって第1命令が実行されるのと同じサイクルでは、演算ユニット52によって第2命令が実行されない場合がある。たとえば、第1命令および第2命令の実行前に、第2命令で処理するデータをデータメモリ8からレジスタファイル25に読み出すロード命令が実行されているが、未だデータの読出しが完了していない場合には、第2命令は第1命令と同時に実行できない。
さらに、既に説明したように、図7のプロセッサ11において、第1および第2命令の少なくとも一方がシフト命令であり、かつ、第1および第2命令に依存関係がある場合には、第2命令は第1命令と同時に実行できない。図10のプロセッサ12において、第1および第2命令の少なくとも一方が乗算命令であり、かつ、第1および第2命令に依存関係がある場合には、第2命令は第1命令と同時に実行できない。
実施の形態5のプロセッサでは、上記のように演算ユニット51で第1命令を実行するサイクルにおいて、演算ユニット52で第2命令を実行しない場合には、命令選択回路83は、セレクタ61,62の入力がそれぞれレジスタ33,34側になるようにセレクタ61,62の切替えを制御する。この結果、演算ユニット51の演算結果に応じて演算ユニット52の出力が変化しないので、消費電力をより削減することができる。
上記以外の点については、実施の形態5のプロセッサは図2、図7、図10、図11のプロセッサ10,11,12,13のいずれか1つと同じである。
図12は、実施の形態5の変形例によるプロセッサの構成を示すブロック図である。図12のプロセッサ14は、固定値(たとえば、“00…0”)を有する信号71,72がレジスタ61,62にそれぞれ入力される点で図2のプロセッサ10と異なる。信号71,72として、プロセッサ内に設けられたレジスタに格納されている値がレジスタ61,62に入力されるように構成してもよい。セレクタ61は、演算ユニット51の出力、レジスタ33の値、および信号71の値のうちいずれか1つを選択し、選択結果を出力する。セレクタ62は、演算ユニット51の出力、レジスタ34の値、および信号72の値のうちいずれか1つを選択し、選択結果を出力する。演算ユニット51で第1命令を実行するサイクルにおいて、演算ユニット52で第2命令を実行しない場合には、命令選択回路83は、セレクタ61,62の入力が信号71,72側にそれぞれ切替わるようにセレクタ61,62を制御する。これによって、上述した実施の形態5の場合と同様の効果が得られる。
図12のその他の点は図2の場合と同じであるので、同一または相当する部分には同一の参照符号を付して説明を繰り返さない。
<実施の形態6>
[プロセッサの全体構成]
図13は、実施の形態6によるプロセッサの構成を示すブロック図である。図13のプロセッサ15は、図8のプロセッサ11Aを変形したものである。
具体的に、図13のプロセッサ15は、第1命令用の演算ユニット51(ALU51Aおよびシフト演算器51Bの各々)の出力ノードが2つに分離されている点で図8のプロセッサ11Aと異なる。第1の出力(OT1C,OT1D)は、第2命令用の演算ユニット52(52A,52B)の入力側のセレクタ61,62へつながるカスケーディング用の出力(以後、便宜上「直列出力」と記載)であり、第2の出力(OT1A,OT1B)は、セレクタ65を介してレジスタファイル25への書き戻し経路につながる出力(以後、便宜上「並列出力」と記載)である。図13のその他の構成は図8の場合と同じであるので、同一または相当する部分には同一の参照符号を付して説明を繰り返さない。
第1命令用ALU51Aに関して、直列出力OT1Cから出力されるデータは、並列出力OT1Aからも同時に出力できる。直列出力OT1Cから演算結果を出力できるのは第1命令用ALU(51A)で処理できる命令のうちの一部の命令であり、並列出力OT1Aから演算結果を出力できるのは第1命令用ALU(51A)で処理できる命令のうちの全ての命令である。
同様に、第1命令用シフト演算器51Bに関して、直列出力OT1Dから出力されるデータは、並列出力OT1Bからも同時に出力できる。直列出力OT1Dから演算結果を出力できるのは第1命令用シフト演算器51Bで処理できる命令のうちの一部の命令であり、並列出力OT1Bから演算結果を出力できるのは第1命令用シフト演算器51Bで処理できる命令のうちの全ての命令である。
[第1命令用ALUの構成例]
図14は、図13の第1命令用ALUの構成の一例を示すブロック図である。図13、図14を参照して、第1命令用ALU(51A)は、加算・論理演算器91と、セレクタ92と、選択制御回路93とを含む。
加算・論理演算器91は、レジスタ31および32にそれぞれ保持されているデータDT11およびDT12(第1命令用ALU51Aへの入力データ)に対して、加算、減算、および論理演算のうちの1つを実行する。加算・論理演算器91の演算結果は、直列出力OT1Cから出力されるとともに、セレクタ92に入力される。
セレクタ92は、選択制御回路93の指令に従って、レジスタ31および32にそれぞれ保持されているデータDT11およびDT12、ならびに加算・論理演算器91の演算結果のうちの1つを選択する。セレクタ92の選択結果は、並列出力OT1Aから出力される。
選択制御回路93は、命令選択回路83から、ALU51Aで実行する命令の種類の情報を受け、加算・論理演算器91から、サインフラグ(演算結果の正負)およびオーバフローフラグ(オーバフローの発生の有無)などの情報を受ける。選択制御回路93は、これらの情報に基づいて、セレクタ92の選択を制御する。
たとえば、MAX命令(最大値選択命令)を実行する場合、命令選択回路83の制御に従って、加算・論理演算器91は、減算(A−B)を行なう。選択制御回路93は、減算結果が正だった場合は被減数側(A)のレジスタを、負だった場合には減数(B)側のレジスタを選択するという制御をする。MIN命令(最小値選択命令)の場合には、選択制御回路93の判断が逆になる。
並列出力OT1Aから出力できるが、直列出力OT1Cから出力できない命令として、MAX(最大値選択)、MIN(最小値選択)、ABS(絶対値)、およびSAT(符号付き飽和処理:正または負のオーバーフローのときそれぞれ所定の値を出力する)などが挙げられる。
[第1命令用シフト演算器の構成例]
図15は、図13の第1命令用シフト演算器の構成の一例を示すブロック図である。図13、図15を参照して、第1命令用シフト演算器51Bは、バレルシフタ94と、マスク処理回路A(95)と、マスク処理回路B(96)と、マスク制御回路97とを含む。
バレルシフタ94は、与えられたビット数分だけ多ビットの入力データをシフトする回路である。図15の場合、シフトするビット数は、レジスタ31からデータDT11として与えられ、多ビットの入力データはレジスタ32からデータDT12として与えられる。
マスク処理回路A(95)およびマスク処理回路B(96)の各々は、マスク制御回路97から与えられたマスクデータによって、バレルシフタ94の出力にマスクをかける。マスク処理回路A(95)の処理結果は、並列出力OT1Bから出力され、マスク処理回路B(96)の処理結果は、直列出力OT1Dから出力される。したがって、直列出力OT1Dと並列出力OT1Bとは、それぞれ別のマスク処理を行った結果が出力される。
マスク制御回路97は、命令選択回路83から、シフト演算器51Bで実行する命令の種類の情報を受け、レジスタ31,32から、シフト量および入力データの情報を受ける。マスク制御回路97は、命令の種類とシフト量に応じてマスクデータを生成し、生成したマスクデータをマスク処理回路A(95)およびマスク処理回路B(96)にそれぞれ出力する。命令の種類が右シフトか左シフトかによって、上位側のビットがマスクされたマスクデータを作成するのか、下位側のビットがマスクされたマスクデータを作成するのかが変わる。マスク制御回路97は、命令の種類が論理シフト命令の場合はマスクされた部分が0になるようにする。マスク制御回路97は、命令の種類が算術右シフトの場合には、入力データ(シフトされるデータ)の最上位ビットの値に応じてマスクされた部分を0にするか1にするかを判断する。マスク制御回路97は、シフト量に応じて何ビット分マスクするのかを決定する。
並列出力OT1Bから出力できるが、直列出力OT1Cから出力できない命令として、ROTL(左回転)、ROTR(右回転)、ROLC(キャリ付き左回転)、およびROLR(キャリ付き右回転)が挙げられる。
[プロセッサの動作]
再び図13を参照して、命令選択回路83で選択した第1命令と第2命令との依存関係に応じた、プロセッサ15の動作について説明する。
第1命令と第2命令に依存関係がないとき、第1命令および第2命令は、それぞれ第1命令用演算ユニット51(51A,51B)および第2命令用演算ユニット52(52A,52B)で同時に実行可能である。
一方、第1命令と第2命令との間に依存関係があるとき、第1命令が、第1命令用演算ユニット51(51A,51B)の直列出力から演算結果を出力可能な命令である場合に、第1命令と第2命令は同時に実行可能である。この場合、命令選択回路83の制御に従って、第2命令用演算ユニット52(52A,52B)の入力側のセレクタ61および62の少なくとも一方は、第1命令用演算ユニット51(51A,51B)の演算結果を選択する。
[効果]
第1命令用演算ユニット51(51A,51B)で処理する命令のうち、相対的に処理時間がかかる命令を直列出力の対象から除くことで、最大動作周波数を高く維持することができる。直列出力の対象外とする命令に、プログラムでの実行頻度の低い命令を選ぶことができれば、全ての命令を直列出力から出力する場合に比べて性能の低下を抑えることができる。
なお、上記の説明は、図8のプロセッサ11Aの変形例として説明したが、図2および図10の第1命令用演算ユニット51の出力、図6の第1および第2命令用演算ユニット51,52の出力、ならびに図7、図9、および図11の第1命令用ALU51Aの出力についても同様に、直列出力と並列出力とに分けることができる。
<実施の形態7>
[プロセッサの全体構成]
図16は、実施の形態7によるプロセッサの構成を示すブロック図である。図16のプロセッサ16は、図2のプロセッサ10を変形したものである。
具体的に、図16を参照して、第1命令用演算ユニット51は、演算結果を出力するための出力ノードOT1Aと、演算結果の状態を表すフラグを出力するための出力ノードOT1Bとを含む。同様に、第2命令用演算ユニット52は、演算結果を出力するための出力ノードOT2Aと、演算結果の状態を表すフラグを出力するための出力ノードOT2Bとを含む。フラグとして、たとえば、C(キャリフラグ)、Z(ゼロフラグ)、S(サインフラグ)、およびO(オーバフローフラグ)がある。
第1命令用演算ユニット51の出力ノードOT1Aは、セレクタ61,62につながっている。セレクタ61は、命令選択回路83の制御に従って、第1命令用演算ユニット51の出力ノードOT1Aからの出力と、レジスタ33の出力データDT21との一方を選択する。セレクタ62は、命令選択回路83の制御に従って、第1命令用演算ユニット51の出力ノードOT1Aからの出力と、レジスタ34の出力データDT22との一方を選択する。
図16のプロセッサ16は、セレクタ69をさらに含む。第1命令用の演算ユニット51のフラグ用の出力OT1Bは、第2命令用の演算ユニット52の入力側のカスケーディング用のセレクタ61,62にはつながっておらず、このセレクタ69の入力ノードに接続される。セレクタ69は、演算ユニット51の出力ノードOT1Bから出力されたフラグと、演算ユニット52の出力ノードOT2Bから出力されたフラグとのうち一方を選択する。
図16のレジスタ群20では、フラグを保持するためのレジスタ39(プロセッサステータスワード(PSW)の一部のビットに相当する)が、レジスタファイル25とは別個に描かれている。レジスタ39には、セレクタ69の出力が入力される。レジスタ39の出力は、第1命令用演算ユニット51に入力されるとともに、セレクタ61,62を介さずに第2命令用演算ユニット52に入力される。
図16のその他の構成は図2の場合と同じであるので、同一または相当する部分には同一の参照符号を付して説明を繰り返さない。
[プロセッサの動作]
演算ユニット51で実行される第1命令がフラグの値を更新する命令であり、演算ユニット52で実行される第2命令がフラグの値を参照する命令の場合(すなわち、第1命令と第2命令とにカスケーディング経路がない場合)、第1命令と第2命令とは同時に実行できない。この場合、演算ユニット51によって第1命令が実行されたときのフラグ出力OT1Bは、レジスタ39に一旦格納される。次のサイクルに、演算ユニット51は、レジスタ39に格納されたフラグを参照することにより第2命令を実行する。
第1命令によってフラグが更新されないか、または第2命令がフラグを参照しない場合には、フラグの値に関して第1命令と第2命令とに依存関係はない。この場合に、フラグ以外のオペランドデータに関して第1命令と第2命令との間に依存関係があったとしても、演算ユニット51,52間にカスケーディング経路があるので、命令選択回路83は第1命令および第2命令を同時に発行し、第1命令および第2命令はそれぞれ同時に演算ユニット51,52で実行される。
フラグの種類ごとに、たとえば、上記の4種類のフラグ(O、S、Z、C)の各々に対して個別に依存関係を判定することは可能である。しかしながら、そうすると依存関係判定の処理時間がかかり、最大動作周波数が悪化するおそれがある。そこで、命令選択回路83は、第1命令によってフラグ(O、S、Z、C)のうちどれか1つでも更新される場合にはフラグの更新ありと判定し、第2命令によってフラグ(O、S、Z、C)のうちどれか1つでも参照される場合にはフラグの参照ありと判定する。以下、具体例を挙げて説明する。
例1:第1命令がadd(加算)命令であり、第2命令がadc(キャリ付き加算)命令の場合について説明する。なお、以下の各例において、r1〜r5はレジスタの番号を表す。
(第1命令) add r1,r2,r3 (r1+r2の結果をr3に格納)
(第2命令) adc r4,r5 (r4+r5+キャリフラグをr5に格納)
この場合、第1命令はフラグを参照しないが、演算の結果、O,S,Z,Cフラグの全てが更新される。第2命令はCフラグを参照し、演算の結果、O,S,Z,Cフラグの全てが更新される。この結果、命令選択回路83は、第1命令によってフラグの更新ありと判定し、第2命令によってフラグの参照ありと判定する。第1命令と第2命令とにフラグの依存関係があるので、命令選択回路83は、第1命令と第2命令とを同時に発行しない。
例2:第1命令がand(論理積)命令であり、第2命令がadc(キャリ付き加算)命令の場合について説明する。
(第1命令) and r1,r2 (r1とr2の論理積をr2に格納)
(第2命令) adc r4,r5 (r4+r5+キャリフラグをr5に格納)
この場合、第1命令はフラグを参照しないが、演算の結果、S,Zフラグが更新される。具体的に、Z(ゼロ)フラグは、論理積が“0…0”のとき“1”となり、それ以外のとき“0”になる。S(サイン)フラグは、論理積のMSB(最上位ビット)が“1”のとき“1”となり、それ以外のとき“0”になる。一方、第2命令はCフラグを参照し、演算の結果、O,S,Z,Cフラグの全てが更新される。この結果、命令選択回路83は、第1命令によってフラグの更新ありと判定し、第2命令によってフラグの参照ありと判定する。第1命令と第2命令とにフラグの依存関係があるので、命令選択回路83は、第1命令と第2命令とを同時に発行しない。
例3:第1命令がmov.l(転送)命令であり、第2命令がadc(キャリ付き加算)命令の場合について説明する。なお、mov.lの「l」は処理サイズがロングワードであることを意味する。
(第1命令) mov.l r1,r2 (r1の値をr2に転送)
(第2命令) adc r4,r5 (r4+r5+キャリフラグをr5に格納)
この場合、第1命令はフラグを参照せず、演算の結果、フラグを更新しない。第2命令はCフラグを参照し、演算の結果、O,S,Z,Cフラグの全てが更新される。この結果、命令選択回路83は、第1命令によってフラグの更新がなく、第2の命令によってフラグの参照有りと判定する。第1命令と第2命令とにフラグの依存関係がなく、レジスタのデータにも依存関係がないので、命令選択回路83は、第1命令と第2命令とを同時に選択し、発行する。
[効果]
フラグの生成は、フラグ以外の出力データの生成よりも時間がかかる。このため、第1命令用演算器のフラグの出力パスを第2命令用演算器につなげないことでプロセッサの最大動作周波数を高く維持できる。図2に示す実施の形態1の場合には、フラグも出力データの一部としていた。しかし、フラグとフラグ以外の出力データとでは信号経路が別々であり、参照先の用途も違うことなどから、実施の形態7では、データ生成に時間がかかるフラグをカスケーディングの対象外にしている。
なお、上記の説明は、図2のプロセッサ10の変形例として説明したが、図6の第1〜第3の演算ユニット51,52,53、ならびに図7〜図11の第1、第2の演算ユニット51,52についても同様に、フラグ出力と、フライ以外のデータ出力とに分け、フラグ出力をカスケーディングの対象外にすることができる。
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は上記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることは言うまでもない。
1 半導体装置、6 メモリ、7 命令メモリ、8 データメモリ、10,10A,11,11A,11B,12,13,14,15,16 プロセッサ、20,20A,20B レジスタ群、25 レジスタファイル、31〜39 レジスタ、41〜48,51,52,60〜69 セレクタ、51〜54 演算ユニット、55 ロードストアユニット、51A,52A ALU、51B,52B シフト演算器、71,72 信号、80 制御回路、81 フェッチ制御部、82 命令デコーダ、83 命令選択回路、DT1,DT2,DT11,DT12,DT21,DT22,DT31,DT32 データ。

Claims (13)

  1. 第1のデータを処理する第1の演算器と、
    前記第1の演算器の出力および第2のデータの一方を選択するセレクタと、
    前記セレクタの出力を処理する第2の演算器と、
    命令列から前記第1および第2の演算器での実行対象となる複数の命令を選択し、選択した実行対象の命令に応じて前記セレクタを切替える制御回路とを備えたプロセッサ。
  2. 前記制御回路は、前記実行対象の命令の組み合わせに応じて前記セレクタを切替える、請求項1に記載のプロセッサ。
  3. 前記制御回路は、前記実行対象の命令のオペランドの依存関係に応じて前記セレクタを切替える、請求項2に記載のプロセッサ。
  4. 前記制御回路は、前記実行対象の命令の少なくとも1つが特定の条件を満たす場合には、前記実行対象の命令の組み合わせによらず、前記第2のデータを選択するように前記セレクタを制御する、請求項2に記載のプロセッサ。
  5. 第3のデータを処理する第3の演算器をさらに備え、
    前記第3の演算器は、前記第1および第2の演算器で実行する命令の種類と異なる特定の種類の命令を実行対象とし、
    前記制御回路は、前記命令列から選択した命令の種類に応じて、前記第1もしくは第2の演算器で命令を実行するか、または前記第3の演算器で命令を実行するかを決定する、請求項1に記載のプロセッサ。
  6. 前記第1および第2の演算器の各々は加算器およびシフト演算器を含み、
    前記第3の演算器は乗算器を含む、請求項5に記載のプロセッサ。
  7. 前記第3の演算器は、ロードストアユニットを含む、請求項5に記載のプロセッサ。
  8. 前記制御回路は、前記第1の演算器での命令の実行と同時に、前記第2の演算器で命令を実行しない場合には、前記第2のデータを選択するように前記セレクタを制御する、請求項1に記載のプロセッサ。
  9. 前記セレクタは、固定データの入力をさらに受け、前記第1の演算器の出力、前記第2のデータ、および前記固定データのうちの1つを選択し、
    前記制御回路は、前記第1の演算器での命令の実行と同時に、前記第2の演算器で命令を実行しない場合には、前記固定データを選択するように前記セレクタを制御する、請求項1に記載のプロセッサ。
  10. 前記第1の演算器は、
    実行対象となる一部の演算の演算結果を出力可能な第1の出力ノードと、
    実行対象となる全ての演算の演算結果を出力可能な第2の出力ノードとを有し、
    前記セレクタは、前記第1の演算器の前記第1の出力ノードからの出力および前記第2のデータの一方を選択し、
    前記プロセッサは、前記第1の演算器の前記第2の出力ノードからの出力を保持可能なレジスタをさらに備え、前記レジスタの出力は前記第2のデータとして前記セレクタに入力可能である、請求項1に記載のプロセッサ。
  11. 前記第1の演算器は、
    演算結果を出力するための第1の出力ノードと、
    演算結果の状態を表すフラグを出力するための第2の出力ノードとを有し、
    前記セレクタは、前記第1の演算器の前記第1の出力ノードからの出力および前記第2のデータの一方を選択し、
    前記プロセッサは、前記第1の演算器の前記第2の出力ノードからの出力を保持可能なレジスタをさらに備え、前記レジスタの出力は、前記セレクタを介さずに前記第2の演算器に入力可能である、請求項1に記載のプロセッサ。
  12. 複数のデータを保持するレジスタファイルと、
    第1のデータを処理する第1の演算器と、
    前記第1の演算器の出力および第2のデータの一方を選択するセレクタと、
    前記セレクタの出力を処理する第2の演算器と、
    命令列から前記第1および第2の演算器での実行対象となる複数の命令を選択し、選択した実行対象の命令に応じて前記レジスタファイルに保持された複数のデータから前記第1および第2のデータを選択し、前記実行対象の命令に応じて前記セレクタを切替える制御回路とを備えたプロセッサ。
  13. 前記制御回路の選択に従って前記レジスタファイルから読み出された前記第1のデータを保持する第1のレジスタと、
    前記制御回路の選択に従って前記レジスタファイルから読み出された前記第2のデータを保持する第2のレジスタをさらに備え、
    前記第1の演算器は、前記第1のレジスタから読み出された前記第1のデータを処理し、
    前記セレクタは、前記第1の演算器の出力および前記第2のレジスタから読み出された前記第2のデータの一方を選択し、
    前記第1および第2の演算器の各々の出力は、前記レジスタファイルならびに前記第1および第2のレジスタに入力可能である、請求項12に記載のプロセッサ。
JP2013037032A 2013-02-27 2013-02-27 プロセッサ Pending JP2014164659A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013037032A JP2014164659A (ja) 2013-02-27 2013-02-27 プロセッサ

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013037032A JP2014164659A (ja) 2013-02-27 2013-02-27 プロセッサ

Publications (1)

Publication Number Publication Date
JP2014164659A true JP2014164659A (ja) 2014-09-08

Family

ID=51615181

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013037032A Pending JP2014164659A (ja) 2013-02-27 2013-02-27 プロセッサ

Country Status (1)

Country Link
JP (1) JP2014164659A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016224596A (ja) * 2015-05-28 2016-12-28 富士通株式会社 加減算器及び加減算器の制御方法
WO2018207883A1 (ja) * 2017-05-12 2018-11-15 国立大学法人 奈良先端科学技術大学院大学 データ処理装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04147332A (ja) * 1990-10-09 1992-05-20 Matsushita Electric Ind Co Ltd 演算処理装置
JP2004021553A (ja) * 2002-06-14 2004-01-22 Matsushita Electric Ind Co Ltd プロセッサ、プログラム変換装置及びプログラム変換方法、並びにコンピュータプログラム
JP2006331399A (ja) * 2005-05-26 2006-12-07 Arm Ltd スーパースカラ処理装置内の指示送出制御
JP2007519052A (ja) * 2003-06-25 2007-07-12 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 命令制御式データ処理装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04147332A (ja) * 1990-10-09 1992-05-20 Matsushita Electric Ind Co Ltd 演算処理装置
JP2004021553A (ja) * 2002-06-14 2004-01-22 Matsushita Electric Ind Co Ltd プロセッサ、プログラム変換装置及びプログラム変換方法、並びにコンピュータプログラム
JP2007519052A (ja) * 2003-06-25 2007-07-12 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 命令制御式データ処理装置
JP2006331399A (ja) * 2005-05-26 2006-12-07 Arm Ltd スーパースカラ処理装置内の指示送出制御

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
JPN6016018033; 尾形幸亮,外4名: 'ALU Cascadingのための動的命令スケジューラ' 先進的計算基盤システムシンポジウムSACSIS2008論文集 , 20080604, Pages:105〜114, 社団法人情報処理学会 *
JPN6016018035; 小沢基一,外2名: 'Cascade ALUを用いた命令実行手法の提案と評価' 情報処理学会研究報告 第99巻,第41号,(99-ARC-133), 19990521, Pages:7〜12, 社団法人情報処理学会 *
JPN6016018037; 佐々木広,外2名: 'GALS型プロセッサにおける動的命令カスケーディング' 情報処理学会研究報告 第2005巻,第80号,(2005-ARC-164), 20050803, Pages:67〜72, 社団法人情報処理学会 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016224596A (ja) * 2015-05-28 2016-12-28 富士通株式会社 加減算器及び加減算器の制御方法
WO2018207883A1 (ja) * 2017-05-12 2018-11-15 国立大学法人 奈良先端科学技術大学院大学 データ処理装置
JPWO2018207883A1 (ja) * 2017-05-12 2020-03-12 国立大学法人 奈良先端科学技術大学院大学 データ処理装置
JP7157457B2 (ja) 2017-05-12 2022-10-20 国立大学法人 奈良先端科学技術大学院大学 データ処理装置

Similar Documents

Publication Publication Date Title
KR100464406B1 (ko) 가변길이 vliw 명령어를 위한 디스패치 장치 및 방법
KR101048234B1 (ko) 마이크로프로세서 내부의 다수의 레지스터 유닛들을 결합하기 위한 방법 및 시스템
JP2010532063A (ja) 条件命令を無条件命令および選択命令へと拡張する方法およびシステム
JP5491071B2 (ja) 命令融合演算装置および命令融合演算方法
WO2014051720A1 (en) Accelerated interlane vector reduction instructions
JP5607832B2 (ja) 汎用論理演算の方法および装置
US8281113B2 (en) Processor having ALU with dynamically transparent pipeline stages
JP2006004042A (ja) データ処理装置
JPH03218523A (ja) データプロセッサ
WO2015114305A1 (en) A data processing apparatus and method for executing a vector scan instruction
US20030005261A1 (en) Method and apparatus for attaching accelerator hardware containing internal state to a processing core
WO2017021675A1 (en) Element size increasing instruction
JP5326314B2 (ja) プロセサおよび情報処理装置
JP2014164659A (ja) プロセッサ
JP2007200180A (ja) プロセッサシステム
JP2000207210A (ja) マイクロプロセッサ
JP6378515B2 (ja) Vliwプロセッサ
WO2020243092A1 (en) Processing device with vector transformation execution
US6976049B2 (en) Method and apparatus for implementing single/dual packed multi-way addition instructions having accumulation options
JP5786719B2 (ja) ベクトルプロセッサ
JP2014238832A (ja) 少なくとも1つの処理パイプラインにおけるオペランド生成
US11782719B2 (en) Reconfigurable multi-thread processor for simultaneous operations on split instructions and operands
JP2000231488A (ja) プロセッサ
WO2002015000A2 (en) General purpose processor with graphics/media support
US11544065B2 (en) Bit width reconfiguration using a shadow-latch configured register file

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150806

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160426

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160517

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20161206