JP2011128672A - スーパースカラプロセッサ及びその命令処理方法 - Google Patents

スーパースカラプロセッサ及びその命令処理方法 Download PDF

Info

Publication number
JP2011128672A
JP2011128672A JP2009283716A JP2009283716A JP2011128672A JP 2011128672 A JP2011128672 A JP 2011128672A JP 2009283716 A JP2009283716 A JP 2009283716A JP 2009283716 A JP2009283716 A JP 2009283716A JP 2011128672 A JP2011128672 A JP 2011128672A
Authority
JP
Japan
Prior art keywords
instruction
instructions
scheduling pattern
processed
parallel
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
JP2009283716A
Other languages
English (en)
Inventor
Tomonori Yamada
智紀 山田
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.)
Yaskawa Electric Corp
Original Assignee
Yaskawa Electric 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 Yaskawa Electric Corp filed Critical Yaskawa Electric Corp
Priority to JP2009283716A priority Critical patent/JP2011128672A/ja
Publication of JP2011128672A publication Critical patent/JP2011128672A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Advance Control (AREA)

Abstract

【課題】インオーダ処理の命令スケジューリングの簡潔さを損なうことなく、並列度を向上することができるスーパースカラプロセッサ及び命令処理方法を提供する。
【解決手段】命令メモリ101から読み出した命令を命令バッファ103に格納する前に事前にスケジューリングパターンを生成するプレスケジューラ110と、プレスケジューラ110で生成したスケジューリングパターンに基づき、命令バッファ103に格納された命令の依存関係をチェックし複数の命令デコーダ105、106に命令の発行を行うと共に、複数の実行ユニット107、108での命令の実行順序を決定するスケジューラ104とを備える。
【選択図】図1

Description

本発明は、スーパースカラプロセッサ及びその命令処理方法に関する。
近年メカトロニクス機器に搭載される制御アルゴリズムは複雑になり、その制御性能を得るためCPUの高性能化が求められている。
しかしながら、従来のような動作周波数を高くしたCPUの高性能化では、消費電力が高くなることや、消費電力が高くなることによるCPUの発熱が問題となる。
これらの問題を解決するため、複数の命令を並列に処理しCPUの高性能化を実現するスーパースカラプロセッサが提案されている。
スーパースカラプロセッサは、インオーダ型スーパースカラプロセッサとアウトオブオーダ型スーパースカラプロセッサの2つの並列処理方式に分けられる。
インオーダ型スーパースカラプロセッサでは、プログラム順に隣り合う命令を並列に処理するため命令間の依存関係のチェックや命令を発行する処理を単純にできる。しかし、命令を逐次的に処理するため命令の並列度は低くなる。
アウトオブオーダ型スーパースカラプロセッサでは、プログラム順に関係なく実行できる命令から実行していくため、インオーダ型と比べ並列度は高くなる。しかし、命令間の依存関係のチェックや命令を発行する時の処理が複雑となり、その処理のためにパイプライン段数が増える。パイプライン段数が増えるとその処理の複雑さは飛躍的に上昇し、動作速度の低下要因になるといった技術課題がある。
この技術課題を解決するために、従来のインオーダ型のスーパースカラ処理システムにおいて命令のインオーダ処理を効率的に実行する処理システム及び方法が提案されている(例えば、特許文献1参照)。
この方法は、コンパイラで命令間のデータ依存性のチェックを行い、データ依存性のない複数の命令と命令の種類を示す識別子と連続する命令バンドルでデータ依存性があるかないかを示すストップビットをバンドルし、命令分散ユニットへ送る。命令分散ユニットでは命令バンドルを分析し、複数のパイプラインへ命令を発行する。図18は従来のインオーダ型スーパースカラプロセッサの制御機構の例である。図18において、制御機構85は発行した命令を分析し、命令の古い順に実行が完了するように複数のパイプラインの実行ステージ79を独立して停止(ストール)させ、ストールが必要なパイプラインによって他のパイプラインを不必要にストールさせずにスループットを向上させる。
また、従来のアウトオブオーダ型のスーパースカラプロセッサにおいてディスパッチ速度を改善する方法が提案されている(例えば、特許文献2参照)。
この方法は、命令棚の任意のスロットからディスパッチさせた後に空となったスロット(ホール)に命令を入れるため、命令の到着順がなくならないようにするため空となったスロットの上側にある命令をシフトダウンし、ホールを埋めていく「崩壊方法」で課題となる動作速度の低下を解決させるものである。図19は従来のアウトオブオーダ型スーパースカラプロセッサの概略図の例である。図19において、命令棚30は、命令を保持する命令プール34と、各命令の年齢を保持する命令トラッカー32を有している。スケジューラ40は、命令プール34に格納されている命令の中から命令トラッカー32の状態に基づいてスケジューリングする。
特開2001−92656号公報(第12頁、図5) 特開2002−7116号公報(第9頁、図3)
しかしながら、従来の方法の特許文献1では、インオーダ処理においてパイプラインのストールをパイプライン毎に行いスループットを向上させるというものであり、並列処理度を上げることができないという問題がある。
また、特許文献2では、命令プールの更新については動作速度を向上させているが、命令プールを更新するための管理を行っている命令トラッカーはその制御が複雑化しており動作速度向上のボトルネックとなる。
本発明はこのような問題点に鑑みてなされたものであり、命令スケジューリングを簡素化し、並列処理を高速化するスーパースカラプロセッサ及び命令処理方法を提供することを目的とする。また、更なる目的は、回路を削減し、回路遅延を削減することである。
上記問題を解決するため、本発明は、次のように構成したのである。
請求項1に記載の発明は、命令を格納する命令メモリと、前記命令メモリから読み出した複数の命令を格納する命令バッファと、命令をデコードする複数の命令デコーダと、前記命令デコーダのデコード結果によって制御される複数の実行ユニットと、を有するスーパースカラプロセッサにおいて、前記命令メモリから読み出した命令を命令バッファに格納する前に事前にスケジューリングパターンを生成するプレスケジューラと、前記プレスケジューラで生成したスケジューリングパターンに基づき、前記命令バッファに格納された命令の依存関係をチェックし前記複数の命令デコーダに命令の発行を行うと共に、前記複数の実行ユニットでの命令の実行順序を決定するスケジューラと、を備えることを特徴とするものである。
また、請求項2に記載の発明は、請求項1に記載のスーパースカラプロセッサにおいて、前記命令メモリに格納される命令は、並列処理可能な命令であることを示すビットを備えることを特徴とするものである。
また、請求項3に記載の発明は、請求項1に記載のスーパースカラプロセッサにおいて、前記命令メモリに格納される命令は、分岐命令であることを示すビットを備えることを特徴とするものである。
また、請求項4に記載の発明は、請求項2に記載のスーパースカラプロセッサにおいて、前記プレスケジューラは、前記命令メモリから読み出した複数の命令の並列処理可能な命令であることを示すビットからスケジューリングパターンを生成することを特徴とするものである。
また、請求項5に記載の発明は、請求項3に記載のスーパースカラプロセッサにおいて、前記プレスケジューラは、前記命令メモリから読み出した複数の命令の分岐命令であることを示すビットからスケジューリングパターンを生成することを特徴とするものである。
また、請求項6に記載の発明は、請求項1に記載のスーパースカラプロセッサにおいて、前記複数の命令デコーダは、少なくとも1つの全命令をデコードするデコーダと、少なくとも1つの並列処理可能な命令のみデコードするデコーダを備えることを特徴とするものである。
また、請求項7に記載の発明は、請求項6に記載のスーパースカラプロセッサにおいて、前記複数の実行ユニットは、少なくとも1つの全命令を実行する実行ユニットと、少なくとも1つの並列処理可能な命令のみ実行する実行ユニットを備えることを特徴とするものである。
また、請求項8に記載の発明は、請求項7に記載のスーパースカラプロセッサにおいて、前記スケジューラは、前記プレスケジューラが生成したスケジューリングパターンに基づき、前記命令バッファに格納された複数の命令の依存関係をチェックし、前記並列処理可能な命令のみデコードするデコーダへ命令を発行し、前記並列処理可能な命令のみ実行する実行ユニットの命令の実行順序を決定するパイプライン制御回路を備えることを特徴とするものである。
また、請求項9に記載の発明は、命令を格納する命令メモリと、前記命令メモリから読み出した複数の命令を格納する命令バッファと、命令をデコードする複数の命令デコーダと、前記命令デコーダのデコード結果によって制御される複数の実行ユニットと、を有するスーパースカラプロセッサの命令処理方法において、前記命令メモリから読み出した命令を命令バッファに格納する前に事前にスケジューリングパターンを生成し、生成したスケジューリングパターンに基づき、前記命令バッファに格納された命令の依存関係をチェックし前記複数の命令デコーダに命令の発行を行うと共に、前記複数の実行ユニットでの命令の実行順序を決定することを特徴とするものである。
また、請求項10に記載の発明は、請求項9に記載のスーパースカラプロセッサの命令処理方法において、前記命令メモリに格納される命令は、並列処理可能な命令であることを示すビットを備えることを特徴とするものである。
また、請求項11に記載の発明は、請求項9に記載のスーパースカラプロセッサの命令処理方法において、前記命令メモリに格納される命令は、分岐命令であることを示すビットを備えることを特徴とするものである。
また、請求項12に記載の発明は、請求項10に記載のスーパースカラプロセッサの命令処理方法において、前記命令メモリから読み出した命令を命令バッファに格納する前に事前にスケジューリングパターンを生成する際、前記命令メモリから読み出した複数の命令の並列処理可能な命令であることを示すビットからスケジューリングパターンを生成することを特徴とするものである。
また、請求項13に記載の発明は、請求項11に記載のスーパースカラプロセッサの命令処理方法において、前記命令メモリから読み出した命令を命令バッファに格納する前に事前にスケジューリングパターンを生成する際、前記命令メモリから読み出した複数の命令の分岐命令であることを示すビットからスケジューリングパターンを生成することを特徴とするものである。
また、請求項14に記載の発明は、請求項9に記載のスーパースカラプロセッサの命令処理方法において、前記複数の命令デコーダは、少なくとも1つの全命令をデコードするデコーダと、少なくとも1つの並列処理可能な命令のみデコードするデコーダを備え、前記複数の実行ユニットは、少なくとも1つの全命令を実行する実行ユニットと、少なくとも1つの並列処理可能な命令のみ実行する実行ユニットを備え、前記複数の命令デコーダに命令の発行を行うと共に、前記複数の実行ユニットでの命令の実行順序を決定する際、生成されたスケジューリングパターンに基づき、前記命令バッファに格納された複数の命令の依存関係をチェックし、前記並列処理可能な命令のみデコードするデコーダへ命令を発行し、前記並列処理可能な命令のみ実行する実行ユニットの命令の実行順序を決定することを特徴とするものである。
請求項1〜5、9〜13に記載の発明によると、メモリから読み出した命令を命令バッファに格納する前に事前にスケジューリングパターンを生成するプレスケジューラと、プレスケジューラで生成したスケジューリングパターンに基づき、命令バッファに格納された命令の依存関係をチェックし複数の命令デコーダに命令の発行を行うと共に、複数の実行ユニットでの命令の実行順序を決定するスケジューラを備え、スケジューリングを行うので、命令スケジューリングが簡素化され、並列処理を高速化することができる。
また、請求項6〜8、14に記載の発明によると、並列処理可能な命令のみデコードするデコーダと、並列処理可能な命令のみ実行する実行ユニットを使用するので、これらユニットは並列処理不可の命令を処理する必要がないため、回路を削減でき、回路遅延を削減することができる。
本発明の第1実施例を示すスーパースカラプロセッサのブロック図 本発明の第1実施例の基本的な命令フォーマット 本発明の第1実施例の命令バッファの内部構成図 本発明の第1実施例のプレスケジューラの内部構成図 本発明の第1実施例のスケジューリングパターン生成回路の内部構成図 本発明の第1実施例のスケジューリングパターン生成回路のスケジューリングパターン生成値 本発明の第1実施例のスケジューラの内部構成図 本発明の第1実施例のパイプライン制御回路の内部構成図 本発明の第1実施例の命令スケジューリングのタイミングチャート 本発明の第1実施例のスケジューリングパターン(1)のパイプライン動作のタイミングチャート 本発明の第1実施例のスケジューリングパターン(2)のパイプライン動作のタイミングチャート 本発明の第1実施例のスケジューリングパターン(3)のパイプライン動作のタイミングチャート 本発明の第1実施例のスケジューリングパターン(4)のパイプライン動作のタイミングチャート 本発明の第2実施例の命令フォーマット 本発明の第2実施例のプレスケジューラの内部構成図 本発明の第2実施例のスケジューリングパターン生成回路のスケジューリングパターン生成値 本発明の第2実施例の命令スケジューリングのタイミングチャート 従来のインオーダ型スーパースカラプロセッサの制御機構の例 従来のアウトオブオーダ型スーパースカラプロセッサの概略図の例
以下、本発明の実施の形態について図を参照して説明する。
図1は、本発明の第1実施例を示すスーパースカラプロセッサのブロック図である。図1において、プロセッサ111は、命令を格納する命令メモリ101と、プログラムカウンタ102と、命令メモリ101から読み出した複数の命令を格納する命令バッファ103と、命令発行をスケジューリングするスケジューラ104と、命令をデコードする第1命令デコーダ105と、第2命令デコーダ106と、命令を実行する第1実行ユニット107と、第2実行ユニット108と、実行結果を格納するレジスタファイル109と、並列処理可能な命令の有無を事前検出するプレスケジューラ110で構成される。
本発明が従来技術と異なる部分は、スケジューラ104でスケジューリングする前に、命令メモリ101から命令を読み出すと同時に並列処理可能な命令の有無を事前検出するプレスケジューラ110と、プレスケジューラ110の事前検出に基づいて並列に実行できる命令をスケジューリングするスケジューラ104を備えた部分である。
プレスケジューラ110は、命令メモリ101から読み出した命令を命令バッファ103に格納する前に事前にスケジューリングパターンを生成し、スケジューラ104は、プレスケジューラ110で生成したスケジューリングパターンに基づき、命令バッファ103に格納された命令の依存関係をチェックし第1命令デコーダ105、第2命令レコーダ106に命令の発行を行い、第1実行ユニット107、第2実行ユニット108での命令の実行順序を決定し、必要があれば、第2実行ユニット108の実行を遅延させる。
ここで、第1命令デコーダ105は、並列化可能命令と、並列化不可命令のどちらもデコードが可能である。また、第2命令デコーダ106は、並列化可能命令のデコードが可能であり、並列化不可命令はデコードしないものとする。また、第1実行ユニット107は、並列化可能命令と、並列化不可命令のどちらも実行が可能である。また、第2実行ユニット108は、並列化可能命令の実行が可能であり、並列化不可命令は実行しないものとする。これは、第2命令デコーダ106と第2実行ユニット108で可能なことを制限することにより、回路を削減し、回路遅延の増加を削減するためである。また、本発明のプロセッサでは、第1命令デコーダ105、第2実行デコーダ106、第1実行ユニット107、第2実行ユニット108をそれぞれ少なくとも1つ以上備えるものとする。
図2は、本発明の第1実施例の基本的な命令フォーマットである。命令フォーマットは、命令の種類を表すオペレーションコード201と、実行結果の書き込み先を示すディスティネーション部202と、実行ユニットへの入力を示すソース部A203、ソース部B204で構成され、オペレーションコード201には、命令レベルで並列化可能な命令かどうかを示す並列化命令ビット205を最上位ビット(31ビット目)に備える。並列化命令ビットは、命令レベルの並列処理が可能な転送命令、算術演算命令、論理演算命令に対してセットされる。なお、ここで並列化命令ビット205は、命令をパソコン等でアセンブルまたはコンパイルして作成する際に予めセットしておくものとする。
図3は、図1の命令バッファ103の内部構成図である。本発明の実施例では、命令長は32ビット固定長命令とする。そして、命令メモリ101から4命令が128ビットの命令バス305を通り、命令バス305の下位0ビット目から31ビット目(これを以下[31:0]の表記で表す)にある第1命令311が第1命令バッファ(以下第1IBと表す)301へ、命令バス305の[63:32]にある第2命令312が第2命令バッファ(以下第2IB)302へ、命令バス305の[95:64]にある第3命令313が第3命令バッファ(以下第3IB)303へ、命令バス305の[127:96]にある第4命令314が第4命令バッファ(以下第4IB)304へ格納される。また、第1IB301は、セレクタ306により、命令メモリ101から読み出した第1命令311と第2IB302と第3IB303のどれを格納するか選択される。このセレクタ306は第2IB302および第3IB303に一旦格納された命令を第1IB301経由で第1命令デコーダ105で処理する場合に使用する。詳細の説明は後述の図7の説明で行う。
図4は、図1のプレスケジューラ110の内部構成図である。図4において、プレスケジューラ110は、スケジューリングパターン生成回路401と、ここで生成されたスケジューリングパターンを保持するスケジューリングパターンレジスタ402で構成される。スケジューリングパターン生成回路401は、命令メモリ101から読み込んだ4つの命令311〜314のオペレーションコード201(図2)内にある並列化命令ビット205の値からスケジューリングパターンを生成する。スケジューリングパターンレジスタ402は、スケジューリング生成回路401で生成されたスケジューリングパターンを保持する。
図5は、スケジューリングパターン生成回路401のブロック図である。図5において、501〜504はAND回路、505はデコード回路である。スケジューリング生成回路401は第1命令の並列化ビットと第2命令の並列化ビットと第3の並列化ビットと第4の並列化ビットの値をデコード回路505でデコードしスケジューリングパターンを生成する。
図6は、図5のスケジューリングパターン生成回路401のスケジュールパターン生成値である。本実施例では、並列化命令ビット205は1ビットで命令コードの31ビット目であり、スケジューリングパターンは以下の4つに分けることができる。
(1)第1IBに格納されている命令と第2IBに格納されている命令を並列処理
(2)第1IBに格納されている命令と第3IBに格納されている命令を並列処理
(3)第1IBに格納されている命令と第4IBに格納されている命令を並列処理
(4)第1IBに格納されている命令のみ処理し、並列処理しない
スケジューリングパターン(1)では、命令311と命令312の並列化命令ビットが1の場合であり、命令313と命令314の並列化命令ビットに依存しない。スケジューリングパターン(2)では、命令311と命令313の並列化命令ビットが1で命令312の並列化命令ビットが0の場合であり、命令314の並列化命令ビットに依存しない。スケジューリングパターン(3)では、命令311と命令314の並列化命令ビットが1で命令312と命令313の並列化命令ビットが0の場合である。スケジューリングパターン(4)では、命令311の並列化命令ビットが0、または命令311の並列化ビットが1かつ命令312、命令313、命令314の並列化命令ビットが0の場合である。つまり、スケジューリング生成回路401は、命令311に格納されている命令が並列化可能であれば、命令312、命令313、命令314に格納されている命令の中から、並列処理可能な命令があるかどうかを検出し、並列処理可能な命令があった場合は、どの命令を命令311と並列処理するかを示すスケジューリングパターン生成を行う。
図7は、図1のスケジューラ104の構成を示すものである。図7において、スケジューラ104は命令選択部701と、パイプライン制御回路702で構成される。命令選択部701はスケジューリングパターンレジスタ402の値によって第2IB302、第3IB303、第4IB304に格納された命令を選択し第2命令デコーダ106へ発行する。第2命令デコーダ106へ発行する命令がない場合はパイプライン制御回路702がNOP(NO Operation)を選択し第2命令デコーダ106へ発行する。第1IB301に格納された命令は第1命令デコーダ105に発行され第2命令デコーダ106へは発行されない。パイプライン制御回路702は、スケジューリングパターンレジスタ402の値によって、第2IB302、第3IB303、第4IB304に格納されている命令間の依存性をチェックし、パイプラインを制御するためパイプライン制御信号703を生成する。
パイプライン制御信号703は第1命令311と第2IB302、第3IB303を選択するセレクタ306と、第2実行ユニット108を制御する。セレクタ306は、第2IB302または第3IB303に一旦格納した並列処理不可の命令を第1IB301,第1命令デコーダ105、第1実行ユニット107経由で実行させるときに使用する。これは、並列処理不可の命令は第1実行ユニット107でしか実行できないためである。
パイプライン制御信号703の第2実行ユニット108の制御は、第2実行ユニット108で実行する命令が第1実行ユニット107と依存関係にあるときに、第2実行ユニット108の実行サイクルを遅延させる場合に使用する。詳細の説明は後述の図10〜図13の説明で行う。
図8は、図7のパイプライン制御回路702のブロック図である。命令依存性検出回路801は、スケジューリングパターンレジスタ402の値によって、第2IB302、第3IB303、または第2IB302、第3IB303、第4IB304に格納されている命令間でレジスタまたはメモリへの書き込みがあった後に同じレジスタまたは同じアドレスへのメモリの書き込み(ライト・アフター・ライト)があるかや、レジスタまたはメモリへの書き込みがあった後に同じレジスタまたは同じアドレスへのメモリの読み出し(ライト・アフター・リード)があるかなどの依存性をチェックしパイプライン制御信号703を出力する。
次に命令のスケジューリングについて説明する。なお、ここでは各命令の依存関係はないものとする。(ある命令が終了しないと次の命令が実行できないものを依存関係が有るとする)
図9は、本発明の第1実施例の命令スケジューリングのタイミングチャートである。図9において、プロセッサ111(図1)はサイクル901ではプログラムカウンタ102の値(PC)に格納されている命令を命令メモリ101から読み出す。次のサイクル902では、901で読み出した4つの命令、命令A、命令B、命令C、命令Dが第1IB301、第2IB302、第3IB303、第4IB304に格納される。この4つの命令ではスケジューリングパターンの(1)が成り立つとすると、プレスケジューラ110では、スケジューリングパターン生成回路401(図4)で生成されたスケジューリングパターン(1)がスケジューリングパターンレジスタ402(図4)へ格納される。スケジューリングパターン(1)の場合、第1IB301と第2IB302に格納された命令を並列処理する。よって、命令Aと命令Bを並列処理するため第1命令デコーダ105には命令Aが発行され、第2命令デコーダ106には命令Bが発行される。この時プログラムカウンタ102は+2され、命令メモリ101からPC+2に格納されている命令を読み出す。
次のサイクル903では、902で読み出した4つの命令、命令C〜命令Fが第1IB301〜第4IB304に格納される。この4つの命令ではスケジューリングパターンの(2)が成り立つとすると、プレスケジューラ110では、スケジューリングパターン生成回路401で生成されたスケジューリングパターン(2)がスケジューリングパターンレジスタ402へ格納される。スケジューリングパターン(2)の場合、第1IB301と第3IB303に格納された命令を並列処理する。よって、命令Cと命令Eを並列処理するため第1命令デコーダ105には命令Cが発行され、第2命令デコーダ106には命令Eが発行される。このとき、第2IB302に格納されている命令Dは並列処理できない命令である。よって、第2IB302に格納されている命令Dは逐次処理し、プログラムカウンタ102を+3する。
次のサイクル904では、第2IB302に格納された命令Dを第1命令デコーダ105へ発行する。このとき、パイプライン制御回路702がセレクタ306を制御し、第2IB302の命令を第1IB301に転送し、第1命令デコーダ105に発行する。また、第2命令デコーダ106へはNOP(NO Operation)を発行する。
そして、命令メモリ101からPC+3に格納されている命令を読み出す。
次のサイクル905では、904で読み出した4つの命令、命令F〜命令Iが第1IB301〜第4IB304に格納される。この4つの命令ではスケジューリングパターンの(3)が成り立つとすると、プレスケジューラ110では、スケジューリングパターン生成回路401で生成されたスケジューリングパターン(3)がスケジューリングパターンレジスタ402へ格納される。スケジューリングパターン(3)の場合、第1IB301と第4IB304に格納された命令を並列処理する。よって、命令Fと命令Iを並列処理するため第1命令デコーダ105には命令Fが発行され、第2命令デコーダ106には命令Iが発行される。この時、第2IB302に格納されている命令Gおよび第3IB303に格納されている命令Hは並列処理できない命令であるため、第2IB302に格納されている命令Gと第3IB303に格納されている命令Hは並列処理せず逐次処理し、プログラムカウンタ102を+4する。
次のサイクル906では、第2IB302に格納された命令Gをセレクタ306経由で第1命令デコーダ105へ発行し、第2命令デコーダ106へはNOP(NO Operation)を発行する。
次のサイクル907では、第3IB303に格納された命令Hをセレクタ306経由で第1命令デコーダ105へ発行し、第2命令デコーダ106へはNOP(NO Operation)を発行する。この時、命令メモリからPC+4に格納されている命令を読み出す。
次のサイクル908では、907で読み出した4つの命令、命令J〜命令Mが第1IB301〜第4IB304に格納される。この4つの命令ではスケジューリングパターンの(4)が成り立つとすると、プレスケジューラ110では、スケジューリングパターン生成回路401で生成されたスケジューリングパターン(4)がスケジューリングパターンレジスタ402へ格納される。スケジューリングパターン(4)の場合、第1IB301に格納された命令Jが並列処理できない命令であるか、第1IB301に格納された命令Jのみ並列処理可能な命令で、第1IB301以外に格納された命令K、命令L、命令Mが並列処理できない命令の場合である。よって、第1IB301に格納された命令Jを第1命令デコーダ105へ発行し、第2命令デコーダ106へはNOP(NO Operation)を発行する。このとき、プログラムカウンタ102は+1され、命令メモリ101からPC+1に格納されている命令を読み出す。
次に命令のスケジューリングで命令間に依存関係がある場合も考慮した場合の説明をする。
図10〜図13に各スケジューリングパターンのパイプライン制御信号703によるより詳細な制御を説明する。以下の説明では、IFは命令フェッチステージ、DECはデコードステージ、EXEは実行ステージ、WBはライトバックステージを示す。
図10は、本発明の第1実施例のスケジューリングパターン(1)のパイプライン動作のタイミングチャートである。以下例を使って本発明のパイプライン動作を説明する。命令A〜命令Fを以下の命令とする。
a=b+c ・・・命令A
e=f+h ・・・命令B
b=a+d ・・・命令C
g=b+c ・・・命令D
h=a−c ・・・命令E
d=a+h ・・・命令F
この例では、命令A、命令B、命令C、命令D、命令E、命令Fが並列化可能な命令で、命令Cと命令Dの命令間で依存関係を有し、命令Eと命令Fの命令間で依存関係を有する場合のパイプライン動作を示した例である。
パイプライン制御回路702は、命令Aと命令Bの依存関係をデコードステージ1002でチェックする。命令Aと命令Bは依存関係がないため、パイプライン制御回路702はパイプライン制御信号を生成しない。次にパイプライン制御回路702は、命令Cと命令Dの依存関係をデコードステージ1003でチェックする。このとき命令Dは、命令Cの実行が完了するまで実行ができない。よって、パイプライン制御回路702は、1003のタイミングでパイプライン制御信号1010を生成する。(信号の符号は図7では703としたが、タイミングによる違いを示すためここでは1010とする)
パイプライン制御信号1010は、第2実行ユニット108の実行サイクルを1004から1005へ遅延(ストール)させる。次にパイプライン制御回路702は、命令Eと命令Fの依存関係をデコードステージ1004でチェックする。また、デコードステージ1004で命令Dと命令Eの依存関係もチェックする。このとき命令Fは、命令Eの実行が完了するまで実行ができない。また、命令Dと命令Eは依存関係がない。よって、パイプライン制御回路702は、1004のタイミングでパイプライン制御信号1011を生成する。パイプライン制御信号1011は、第2実行ユニット108の実行サイクルを1005から1006へ遅延(ストール)させる。また、命令Dと命令Eは依存関係がないため、第1実行ユニット107の実行サイクルを1005から1006へ遅延(ストール)させない。
なお、レジスタファイルには第1実行ユニット107、第2実行ユニット108で実行された結果が格納される。
図11は、本発明の第1実施例のスケジューリングパターン(2)のパイプライン動作を示すタイミングチャートである。以下例を使って本発明のパイプライン動作を説明する。命令A〜命令Eを以下の命令とする。
a=b ・・・命令A
c=e*b−a/d ・・・命令B
e=c+f ・・・命令C
b=a*e+d*g ・・・命令D
h=d+c ・・・命令E
この例では、命令Aと命令Cと命令Eが並列化可能な命令で、命令Bと命令DはSIMD命令であり1つの命令で2つの実行ユニットを使用するため並列化できない命令で、命令Bと命令Cの命令間に依存関係を有した場合のパイプライン動作を示した例である。
パイプライン制御回路702は、命令Aと命令Bと命令Cの依存関係をデコードステージ1102でチェックする。命令Aと命令Cは依存関係がないが命令Bと命令Cは依存関係があり、命令Cは命令Bの実行が完了するまで実行ができない。よって、パイプライン制御回路702はパイプライン制御信号1110を生成する。パイプライン制御信号1110は、1102のタイミングにおいて、セレクタ306で第2IB302が選択されるようにする。次に、1103のタイミングでスケジューリングパターンレジスタ402をスケジューリングパターン(2)から(4)へ書き換え、第1IB301に第2IB302に格納されていた命令Bを格納する。
また、第2実行ユニット108へNOP(NO Operation)を発行し命令Aのみ処理する。次に1103のタイミングでスケジューリングパターンが(4)となったため、1104のタイミングで第1IB301に格納された命令Bがデコードされる。また、第1IB1301には命令C、第2IB302には命令D、第3IB303には命令E、第4IB304には命令Fが格納され、スケジューリングパターンレジスタ402にはスケジューリングパターン(2)が設定される。パイプライン制御回路702は、命令Cと命令Dと命令Eの依存関係をデコードステージ1105でチェックする。命令Cと命令Dに依存関係がなく、命令Dと命令Eに依存関係がないため、パイプライン制御回路702はパイプライン制御信号703を生成しない。
図12は、本発明の第1実施例のスケジューリングパターン(3)のパイプライン動作を示すタイミングチャートである。以下例を使って本発明のパイプライン動作を説明する。命令A〜命令Dを以下の命令とする。
a=b ・・・命令A
c=g*h−e/d ・・・命令B
b=a*g+d*g ・・・命令C
e=a+f ・・・命令D
この例では、命令Aと命令Dが並列化可能な命令で、命令Bと命令Cが並列化できない命令で、命令Aと命令Dの命令間に依存関係を有した場合のパイプライン動作を示した例である。
パイプライン制御回路702は、命令Aと命令Bと命令Cと命令Dの依存関係をデコードステージ1202でチェックする。命令Aと命令Dは依存関係があり、命令Dは命令Aの実行が完了するまで実行ができない。また、命令Bと命令Dは依存関係があり、命令Bは命令Dの実行が完了するまで実行ができない。よって、パイプライン制御回路702はパイプライン制御信号1210を生成する。パイプライン制御信号1210は、第2実行ユニット108の実行サイクルを1203から1204へ遅延(ストール)させる。次にパイプライン制御回路702は、1202のタイミングで行った命令間の依存関係のチェック結果から、命令Bと命令Dの依存関係を有していることを記憶しており、1203のタイミングでパイプライン制御信号1211を生成する。パイプライン制御信号1211は、第2実行ユニット108の実行サイクルを1204から1205へ遅延(ストール)させる。
図13は、本発明の第1実施例のスケジューリングパターン(4)のパイプライン動作を示すタイミングチャートである。以下例を使って本発明のパイプライン動作を説明する。命令A〜命令Dを以下の命令とする。
a=b ・・・命令A
c=d*g+e/d ・・・命令B
b=a*e+d*g ・・・命令C
e=a*f+h*a ・・・命令D
この例では、命令Aが並列化可能な命令で、命令Bと命令Cと命令Dが並列化できない命令の場合のパイプライン動作を示した例である。スケジューリングパターン(4)の場合命令を並列処理せず逐次的に処理していくため命令の依存性チェックを行う必要がない。また、命令選択部701ではNOP(NO Operation)が選択され、第2命令デコーダ106へ発行される。
次に第2実施例として分岐命令がある場合について説明する。
図14は、本発明の第2実施例の命令フォーマットである。図2の第1実施例におけるオペレーションコード201内に分岐命令であることを示す分岐命令ビット1401が30ビット目に追加されている。
図15は、本発明の第2実施例のプレスケジューラの内部構成図である。スケジューリングパターン生成回路1501は、図5の第1実施例におけるスケジューリングパターン生成回路401に分岐命令ビット1401が追加されている。
図16は、本発明の第2実施例のスケジューリングパターン生成回路1501におけるスケジューリングパターン生成値である。第2IB302と第3IB303の分岐命令ビット1401である30ビット目の値によりスケジューリングパターン生成値が異なる。ここで、分岐命令ビット1401は、第2IB302は図16の命令バス[62]の欄、第3IB303は命令バス[94]の欄の値である。スケジューリングパターン(1)と(4)は、インオーダ実行となるため、分岐命令があるかどうかをプレスケジューラ101でチェックする必要はない。スケジューリングパターン(2)と(3)では、アウトオブオーダ実行であるため、スケジューリングパターン(2)では、第2IB302に格納されている命令が分岐命令かどうか、スケジューリングパターン(3)では第2IB302と第3IB303に格納されている命令が分岐命令かどうかを確認する。そして、分岐命令があればスケジューリングパターン生成回路1501はスケジューリングパターン(4)を生成し、インオーダ実行させる。
図17は、本発明の第2実施例の命令スケジューリングのタイミングチャートである。図17において、1710は、図9の第1実施例におけるスケジューリングパターン(2)であり、1711は、図9の第1実施例におけるスケジューリングパターン(3)である。図17が図9の第1実施例と異なる点は、分岐命令があるかないかである。ここで、命令Dと命令C1が分岐命令である。1702のタイミングで命令メモリ101から命令C、命令D、命令E、命令Fを読み出し、スケジューリングパターン生成回路1501でスケジューリングパターンを生成する。この時、命令Dの分岐命令ビット1401(命令バスの62ビット目)が1であるためスケジューリングパターン生成回路1501は、スケジューリングパターン(4)を生成する。1703のタイミングでスケジューリングパターンレジスタ402にスケジューリングパターン(4)が格納され、命令選択部701ではNOPが選択され、スケジューラ104は第2命令デコーダ106へNOPを発行する。次に1704のタイミングで分岐命令である命令Dが第1IB301へ格納される。このとき、命令Dは分岐命令であるため、スケジューリングパターンレジスタ402にはスケジューリングパターン(4)が格納される。
次に1705のタイミングでDISP(分岐先アドレス)が計算され、命令メモリ101から命令A1、命令B1、命令C1、命令D1を読み出し、スケジューリングパターン生成回路1501でスケジューリングパターンを生成する。
このとき、命令C1の分岐命令ビット(命令バスの94ビット目)1401が1であるためスケジューリングパターン生成回路1501は、スケジューリングパターン(4)を生成する。1706のタイミングでスケジューリングパターンレジスタ402にスケジューリングパターン(4)が格納され、命令選択部701ではNOPが選択され、スケジューラ104は第2命令デコーダ106へNOPを発行する。以降分岐命令である命令C1が第1IB301に格納される1708のタイミングまでスケジューリングパターンレジスタ402にはスケジューリングパターン(4)が格納され逐次的に命令処理が行われる。ここで図17において命令バス[62]と命令バス[94]の値が“X”となっている所は「Don‘t care」であることを示す。
以上のように本発明では、命令コードに並列化命令ビットを設けることにより、並列化命令ビットがセットされていない命令についてはスケジューリングする必要がなくなるため、スケジューリング時の命令間の依存性チェックを簡潔にすることができる。
また、複数の命令をグループ化し、グループ内の命令でアウトオブオーダ実行を行い、グループ単位ではインオーダ実行とすることで複雑な処理を必要とすることなく並列度を向上することが可能となる。また、本発明を好適実施例に基づき具体的に説明したが、本発明は上記実施例に限定されるものではなく、その要旨を逸脱しない範囲で種々変更することが可能である。
本発明はCPUを搭載したLSIを使用したシステムにおいて広く適用可能である。
101 命令メモリ
102 プログラムカウンタ
103 命令バッファ
104 スケジューラ
105 第1命令デコーダ
106 第2命令デコーダ
107 第1実行ユニット
108 第2実行ユニット
109 レジスタファイル
110 プレスケジューラ
111 プロセッサ
201 オペレーションコード
202 ディスティネーションアドレス
203 ソース部A
204 ソース部B
205 並列化命令ビット
301〜304 第1IB〜第4IB(第1命令バッファ〜第4命令バッファ)
305 命令バス
306 セレクタ
311〜314 命令
401、1501 スケジューリングパターン生成回路
402 スケジューリングパターンレジスタ
501〜504 AND回路
505 デコード回路
701 命令選択部
702 パイプライン制御回路
703、1010、1011、1110、1210、1211 パイプライン制御信号
1401 分岐命令ビット

Claims (14)

  1. 命令を格納する命令メモリと、
    前記命令メモリから読み出した複数の命令を格納する命令バッファと、
    命令をデコードする複数の命令デコーダと、
    前記命令デコーダのデコード結果によって制御される複数の実行ユニットと、
    を有するスーパースカラプロセッサにおいて、
    前記命令メモリから読み出した命令を命令バッファに格納する前に事前にスケジューリングパターンを生成するプレスケジューラと、
    前記プレスケジューラで生成したスケジューリングパターンに基づき、前記命令バッファに格納された命令の依存関係をチェックし前記複数の命令デコーダに命令の発行を行うと共に、前記複数の実行ユニットでの命令の実行順序を決定するスケジューラと、を備えることを特徴とするスーパースカラプロセッサ。
  2. 前記命令メモリに格納される命令は、並列処理可能な命令であることを示すビットを備えることを特徴とする請求項1記載のスーパースカラプロセッサ。
  3. 前記命令メモリに格納される命令は、分岐命令であることを示すビットを備えることを特徴とする請求項1記載のスーパースカラプロセッサ。
  4. 前記プレスケジューラは、前記命令メモリから読み出した複数の命令の並列処理可能な命令であることを示すビットからスケジューリングパターンを生成することを特徴とする請求項2記載のスーパースカラプロセッサ。
  5. 前記プレスケジューラは、前記命令メモリから読み出した複数の命令の分岐命令であることを示すビットからスケジューリングパターンを生成することを特徴とする請求項3記載のスーパースカラプロセッサ。
  6. 前記複数の命令デコーダは、少なくとも1つの全命令をデコードするデコーダと、少なくとも1つの並列処理可能な命令のみデコードするデコーダを備えることを特徴とする請求項1記載のスーパースカラプロセッサ。
  7. 前記複数の実行ユニットは、少なくとも1つの全命令を実行する実行ユニットと、少なくとも1つの並列処理可能な命令のみ実行する実行ユニットを備えることを特徴とする請求項6記載のスーパースカラプロセッサ。
  8. 前記スケジューラは、前記プレスケジューラが生成したスケジューリングパターンに基づき、前記命令バッファに格納された複数の命令の依存関係をチェックし、前記並列処理可能な命令のみデコードするデコーダへ命令を発行し、前記並列処理可能な命令のみ実行する実行ユニットの命令の実行順序を決定するパイプライン制御回路を備えることを特徴とする請求項7記載のスーパースカラプロセッサ。
  9. 命令を格納する命令メモリと、
    前記命令メモリから読み出した複数の命令を格納する命令バッファと、
    命令をデコードする複数の命令デコーダと、
    前記命令デコーダのデコード結果によって制御される複数の実行ユニットと、
    を有するスーパースカラプロセッサの命令処理方法において、
    前記命令メモリから読み出した命令を命令バッファに格納する前に事前にスケジューリングパターンを生成し、
    生成したスケジューリングパターンに基づき、前記命令バッファに格納された命令の依存関係をチェックし前記複数の命令デコーダに命令の発行を行うと共に、前記複数の実行ユニットでの命令の実行順序を決定することを特徴とするスーパースカラプロセッサの命令処理方法。
  10. 前記命令メモリに格納される命令は、並列処理可能な命令であることを示すビットを備えることを特徴とする請求項9記載のスーパースカラプロセッサの命令処理方法。
  11. 前記命令メモリに格納される命令は、分岐命令であることを示すビットを備えることを特徴とする請求項9記載のスーパースカラプロセッサの命令処理方法。
  12. 前記命令メモリから読み出した命令を命令バッファに格納する前に事前にスケジューリングパターンを生成する際、前記命令メモリから読み出した複数の命令の並列処理可能な命令であることを示すビットからスケジューリングパターンを生成することを特徴とする請求項10記載のスーパースカラプロセッサの命令処理方法。
  13. 前記命令メモリから読み出した命令を命令バッファに格納する前に事前にスケジューリングパターンを生成する際、前記命令メモリから読み出した複数の命令の分岐命令であることを示すビットからスケジューリングパターンを生成することを特徴とする請求項11記載のスーパースカラプロセッサの命令処理方法。
  14. 前記複数の命令デコーダは、少なくとも1つの全命令をデコードするデコーダと、少なくとも1つの並列処理可能な命令のみデコードするデコーダを備え、
    前記複数の実行ユニットは、少なくとも1つの全命令を実行する実行ユニットと、少なくとも1つの並列処理可能な命令のみ実行する実行ユニットを備え、
    前記複数の命令デコーダに命令の発行を行うと共に、前記複数の実行ユニットでの命令の実行順序を決定する際、生成されたスケジューリングパターンに基づき、前記命令バッファに格納された複数の命令の依存関係をチェックし、前記並列処理可能な命令のみデコードするデコーダへ命令を発行し、前記並列処理可能な命令のみ実行する実行ユニットの命令の実行順序を決定することを特徴とする請求項9記載のスーパースカラプロセッサの命令処理方法。


JP2009283716A 2009-12-15 2009-12-15 スーパースカラプロセッサ及びその命令処理方法 Pending JP2011128672A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009283716A JP2011128672A (ja) 2009-12-15 2009-12-15 スーパースカラプロセッサ及びその命令処理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009283716A JP2011128672A (ja) 2009-12-15 2009-12-15 スーパースカラプロセッサ及びその命令処理方法

Publications (1)

Publication Number Publication Date
JP2011128672A true JP2011128672A (ja) 2011-06-30

Family

ID=44291249

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009283716A Pending JP2011128672A (ja) 2009-12-15 2009-12-15 スーパースカラプロセッサ及びその命令処理方法

Country Status (1)

Country Link
JP (1) JP2011128672A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014018649A (ja) * 2012-12-12 2014-02-03 Universal Entertainment Corp 遊技機

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014018649A (ja) * 2012-12-12 2014-02-03 Universal Entertainment Corp 遊技機

Similar Documents

Publication Publication Date Title
CN106104481B (zh) 用于执行确定性和机会性多线程的系统和方法
JP6043374B2 (ja) 動的アウトオブオーダプロセッサパイプラインを実装する方法および装置
JP2928695B2 (ja) 静的インタリーブを用いたマルチスレッドマイクロプロセッサおよびそれを備えたシステムでの命令スレッド実行方法
JP5698445B2 (ja) 多重プロセッサ・コア・ベクトル・モーフ結合機構
KR100464406B1 (ko) 가변길이 vliw 명령어를 위한 디스패치 장치 및 방법
US8650554B2 (en) Single thread performance in an in-order multi-threaded processor
JP5699554B2 (ja) ベクトル処理回路、命令発行制御方法、及びプロセッサシステム
US9811340B2 (en) Method and apparatus for reconstructing real program order of instructions in multi-strand out-of-order processor
JP4841861B2 (ja) 演算処理装置及びデータ転送処理の実行方法
US20070130447A1 (en) System and method for processing thread groups in a SIMD architecture
US20130007415A1 (en) Method and apparatus for scheduling of instructions in a multi-strand out-of-order processor
US5604878A (en) Method and apparatus for avoiding writeback conflicts between execution units sharing a common writeback path
GB2503438A (en) Method and system for pipelining out of order instructions by combining short latency instructions to match long latency instructions
US20060259741A1 (en) Controlling out of order execution pipelines issue tagging
US11366669B2 (en) Apparatus for preventing rescheduling of a paused thread based on instruction classification
JP2009099097A (ja) データ処理装置
JP2011128672A (ja) スーパースカラプロセッサ及びその命令処理方法
US20180181400A1 (en) Apparatus and methods to support counted loop exits in a multi-strand loop processor
CN112579168B (zh) 指令执行单元、处理器以及信号处理方法
JP6349088B2 (ja) パイプラインでブロックをスケジュールするコンパイル方法及び装置
JP2861234B2 (ja) 命令処理装置
JP2002318689A (ja) 資源使用サイクルの遅延指定付き命令を実行するvliwプロセッサおよび遅延指定命令の生成方法
JP3743155B2 (ja) パイプライン制御型計算機
JPH11203145A (ja) 命令スケジューリング方法
Shah Single Issue Instruction Dispatcher Based on Tomasulo’s Algorithm