JP3564445B2 - プロセッサ、コンパイル装置及びコンパイル方法 - Google Patents

プロセッサ、コンパイル装置及びコンパイル方法 Download PDF

Info

Publication number
JP3564445B2
JP3564445B2 JP2001286393A JP2001286393A JP3564445B2 JP 3564445 B2 JP3564445 B2 JP 3564445B2 JP 2001286393 A JP2001286393 A JP 2001286393A JP 2001286393 A JP2001286393 A JP 2001286393A JP 3564445 B2 JP3564445 B2 JP 3564445B2
Authority
JP
Japan
Prior art keywords
instruction
instructions
execution
condition
unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2001286393A
Other languages
English (en)
Other versions
JP2003099248A (ja
Inventor
岳人 瓶子
秀一 高山
哲也 田中
一 小川
信生 桧垣
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Panasonic Corp
Panasonic Holdings Corp
Original Assignee
Panasonic Corp
Matsushita Electric Industrial Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Panasonic Corp, Matsushita Electric Industrial Co Ltd filed Critical Panasonic Corp
Priority to JP2001286393A priority Critical patent/JP3564445B2/ja
Priority to US10/246,482 priority patent/US7076638B2/en
Priority to EP02021046.4A priority patent/EP1296227B1/en
Priority to CNB021424993A priority patent/CN1202470C/zh
Priority to CNB2005100521315A priority patent/CN100392596C/zh
Publication of JP2003099248A publication Critical patent/JP2003099248A/ja
Application granted granted Critical
Publication of JP3564445B2 publication Critical patent/JP3564445B2/ja
Priority to US11/452,282 priority patent/US7761692B2/en
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units

Description

【0001】
【発明の属する技術分野】
本発明は、プロセッサ、コンパイル装置及びコンパイル方法に関し、特に並列処理において演算器の効率的活用により性能の向上を図る技術に関するものである。
【0002】
【従来の技術】
近年のマイクロプロセッサ応用製品の高機能化及び高速化に伴い、高い処理性能を持つマイクロプロセッサ(以下、単に「プロセッサ」という。)が望まれている。一般に、各命令のスループットを高めるために、1つの命令をいくつかの処理単位(ここでは「ステージ」と呼ぶ)に分割し、各ステージを別々のハードウェアで実行することにより、複数の命令を並行して処理できるようにするパイプライン方式が採用されている。また、パイプライン方式のような空間的な並列処理に加えて、時間的に命令レベルでの並列処理を行うVLIW(Very Long Instruction Word)方式やスーパースカラ方式にて性能向上を図っている。
【0003】
プロセッサの性能向上を妨げる主要因の1つとして分岐処理のオーバーヘッドがある。このオーバーヘッドは、上記パイプライン処理のステージ数が増すほど、命令供給のペナルティが大きくなる。また、命令並列処理を行った場合、並列度が向上すればするほど、分岐命令の頻度が増加し、オーバーヘッドが顕在化してくる。
【0004】
そこで、このオーバーヘッドを解消する従来技術として、各命令に実行条件を示す情報を付加し、その条件が成立するときにのみ命令で示されたオペレーションを実行する、という条件付き実行方式がある。この方式では、実行時に各命令に付加された実行条件に対応する条件フラグを参照し、条件が成立しなかった場合には、その命令の実行結果を無効化する、すなわち無動作命令として実行させる。
【0005】
例えば、図10に示した条件分岐を含むフローの処理を、各命令に実行条件を示す情報を付加する方式で記述すると、図11のようなプログラムになる。図11において、C0及びC1は、命令に付加された条件を示しており、それに対応する条件フラグの値が真の場合にはその命令が実行され、偽の場合にはその命令は無動作命令として実行される。この例では、まず命令1(比較命令)の比較結果がC0に格納される。それと同時にC1にはC0と逆の条件が設定される。したがって、命令2と命令3のうちいずれか一方に関して、実際にオペレーションが実行され、残りの一方は無動作命令として実行される。この結果、分岐処理が不要となり、分岐処理のオーバーヘッドを解決している。
【0006】
【発明が解決しようとする課題】
前述の従来の条件付き実行方式では、条件が不成立の場合、当該命令は無動作命令として動作することになり、実質はオペレーションを実行しないことになる。したがって、2命令が並列に記述され、2つの演算器を使用しているにもかかわらず、実際には1つの演算器しか有効に活用できていない。その結果、プログラムに記述された並列度に対して、実効性能が低くなってしまうという問題点がある。
【0007】
本発明はかかる問題点に鑑みてなされたものであり、ハードウェアの有効利用を達成し、性能を向上させたプロセッサを提供することを目的とする。
【0008】
【課題を解決するための手段】
上記目的を達成するために、請求項1の発明は、複数の命令を供給するための命令供給手段と、前記複数の命令を各々解読するための解読手段と、前記複数の命令中に各命令を実行するか否かを示す条件を指定する実行条件情報が指定され、当該実行条件情報で指定された条件を参照して、有効なオペレーションを実行する命令又は命令の集合を決定するための命令発行制御手段と、前記複数の命令中に各命令の動作が指定され、当該指定に基づいて1つ又は複数のオペレーションを実行するための実行手段とを備えたプロセッサにおいて、前記命令発行制御手段は、前記実行条件情報で指定された条件を参照することにより、実行する必要のある有効な命令であるか、実行する必要のない無効な命令であるかを判断し、無効な命令であると判断した命令に関しては、当該命令を前記実行手段へ発行する前に当該命令自体を削除するように制御し、かつ当該命令に代えて当該命令に後続する有効な命令を前記実行手段へ発行するように制御する機能を有することとしたものである。これにより、条件付き命令の条件が不成立の場合でも、無動作命令が実行されず、実行手段中の演算器が後続の命令によって有効利用されるため、演算器の利用効率が高まり、実効性能を向上させることができる。
【0009】
請求項2の発明では、前記実行手段は、前記命令に対応するオペレーションを実行した後で、実行結果を無効化するための実行結果無効化手段を有し、各命令について、前記実行手段へ発行する前に当該命令自体を削除するか、前記実行結果無効化手段にて実行結果を無効化するかを選択するための命令無効化方法選択手段を更に備えることとした。これにより、実行条件判定に用いる条件フラグが未確定の場合にも、プロセッサのパイプラインを停止する必要がなくなり、性能を向上させることができる。
【0010】
請求項3の発明では、前記命令無効化方法選択手段は、各条件フラグの値が確定しているか否かを示す条件フラグ有効情報を参照することによって、いずれの命令無効化方法を選択するかを決定し、前記条件フラグ有効情報は、前記解読手段において条件フラグを更新する命令であると解読された場合に当該条件フラグの確定性が偽に設定され、前記実行手段において当該命令が実行されて当該条件フラグの値が確定した際に真に設定されることとした。
【0011】
請求項4の発明では、前記命令発行制御手段は、複数の命令の機能が単一の命令で実現可能であるような命令の組み合わせを検出し、それら複数の命令を単一の命令として扱うように結合する機能を更に有することとした。これにより、元々複数の演算器を使用する予定であった命令を単一の演算器で実行させるようにすることができ、演算器の利用効率が高まり、実効性能を向上させることができる。
【0012】
請求項5の発明では、前記複数の命令の結合は、前記実行手段への発行前における命令の削除の後に適用されることとした。
【0013】
請求項6の発明では、前記命令発行制御手段は、各サイクルにおいて同一の前記実行条件情報を持つ命令が連続配置されている場合には、前記解読手段によって解読された複数の命令を予め各実行条件毎に分類し、その分類毎に条件フラグを参照して、実行する必要のある有効な命令であるか、実行する必要のない無効な命令であるかを判断することとした。これにより、条件フラグの参照を最小限に抑えることができ、命令の削除の判定に要する時間を削減することができる。
【0014】
請求項7の発明では、前記複数の命令中に各命令が並列実行の境界であるか否かの並列実行境界情報が指定され、前記命令発行制御手段は、各命令の前記並列実行境界情報を参照して、当サイクルにおいて実行の対象とする命令群を検出する機能を更に有することとした。
【0015】
請求項8の発明では、前記命令発行制御手段は、命令内の並列実行境界情報にて検出された境界命令以前の全ての命令が実行する必要のない無効な命令として削除された場合には、当該境界命令の並列実行境界情報を無効化し、当該境界命令以降の命令の並列実行境界情報を参照することにより当サイクルの新たな並列実行境界を検出することとした。これにより、あるサイクルに配置された全ての命令が削除された場合には、そのサイクル自体をスキップして次のサイクルの命令を実行することができるようになるので、実行サイクル数を削減することができる。
【0016】
また、請求項の発明は、高級言語で記述されたプログラムのソースコードを実行形式コードに変換するためのコンパイル装置において、前記ソースコード中の命令を、並列実行すべき複数の命令が隣接するように並べ直すための命令スケジューリング手段を備え、前記命令スケジューリング手段は、各命令に付加された有効なオペレーションを実行する条件に関して、各条件が同時に成立することがあり得るか否かを解析するための条件排他性解析手段と、並列実行可能な命令の集合をサイクル毎に区分できるように命令の並べ替えを行うための命令再配置手段とを有し、前記命令再配置手段は、当サイクルに配置される命令のうち、有効なオペレーションを実行する命令が使用する演算資源が対象機械に搭載された演算器の制約を超えないかどうかを判定し、かつ当サイクルに配置される2つの命令の実行条件が前記条件排他性解析手段において同時に成立することがあり得ないと判定された場合には、一定の条件下でいずれか一方の命令のみが演算資源を使用するものとして扱うこととしたものである。これにより、命令の削除を考慮して、搭載された演算器の個数以上の数の命令を1サイクルに配置することができるようになり、実効性能を向上させることができる。
【0017】
請求項10の発明では、前記命令再配置手段は、当サイクルに配置される2つの命令の実行条件が前記条件排他性解析手段において同時に成立することがあり得ないと判定された場合であっても、前記2つの命令のうち少なくとも一方の命令の実行条件に対応する条件フラグの内容が確定していない場合には、前記2つの命令の両方が演算資源を使用するものとして扱うこととした。これにより、条件判定に用いる条件フラグが未確定の状態を考慮することができ、ハードウェアでパイプラインを停止する必要なく正確な動作を保証することができる。
【0018】
請求項11の発明では、前記命令再配置手段は、当サイクルの前サイクルにおいて、前記2つの命令のうち少なくとも一方の命令の実行条件に対応する条件フラグを更新する命令が配置されているかどうかによって、条件フラグの内容が確定しているかどうかの判定を行うこととした。
【0019】
請求項12の発明では、前記命令再配置手段は、前記条件排他性解析手段の解析結果に基づいて、実行条件が同時に成立することがあり得ない命令に関してはいずれか一方のみが演算資源を使用するものとして扱うとともに、演算資源を使用する複数の命令の機能が単一の命令で実現可能である命令の組み合わせを検出し、それら複数の命令を結合した単一の命令として扱うこととした。これにより、命令の削除及び結合を考慮して、搭載された演算器の個数以上の数の命令を1サイクルに配置することができるようになるので、実効性能を向上させることができる。
【0020】
請求項13の発明では、前記命令再配置手段は、当サイクルに配置可能と判定された命令の集合に関して、同一の実行条件を持つ命令を連続して配置するように配置順序を調整する機能を更に有することとした。これによりハードウェアにて削除する命令を判定する際の条件フラグの参照を最低限に抑えることができ、ハードウェア簡単化の効果が得られる。
【0021】
請求項14の発明では、前記命令再配置手段は、当サイクルに配置する命令を選択する際に、複数の実行条件のうち特定の実行条件を持つ命令を優先的に選択することとした。これにより、頻度が高い特定の実行パスに最適化したコードを生成することができるようになり、実効性能を高めることができる。
【0022】
また、請求項15の発明は、高級言語で記述されたプログラムのソースコードを実行形式コードに変換するためのコンパイル装置において、前記ソースコード中の命令を、並列実行すべき複数の命令が隣接するように並べ直すための命令スケジューリング手段を備え、前記命令スケジューリング手段は、各命令に付加された有効なオペレーションを実行する条件に関して、各条件が同時に成立することがあり得るか否かを解析するための条件排他性解析手段と、並列実行可能な命令の集合をサイクル毎に区分できるように命令の並べ替えを行うための命令再配置手段とを有し、前記条件排他性解析手段は、各基本ブロックの先頭の命令と、オペレーション実行の有効性に係るいずれかの条件フラグを更新する命令とに対して、それぞれの時点での各条件フラグ間の同時成立可能性を示すテーブルを生成することとしたものである。これにより、必要最低限の情報を生成することによって、各命令間の実行条件の排他性を解析できるようになり、コンパイル装置の使用メモリの削減、コンパイル速度向上の効果が得られる。
【0023】
請求項16の発明では、前記命令スケジューリング手段は、命令間の依存関係を解析するための依存関係解析手段を更に有し、前記依存関係解析手段は、前記条件排他性解析手段にて生成されたテーブルに基づいて、各命令の実行時点で有効である条件フラグ間の同時成立可能性を探索し、2命令が同時に実行される可能性があるか否かを解析することとした。
【0024】
また、請求項17の発明は、高級言語で記述されたプログラムのソースコードを実行形式コードに変換するためのコンパイル方法において、前記ソースコード中の命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリングステップを備え、前記命令スケジューリングステップは、各命令に付加された有効なオペレーションを実行する条件に関して、各条件が同時に成立することがあり得るか否かを解析する条件排他性解析ステップと、並列実行可能な命令の集合をサイクル毎に区分できるように命令の並べ替えを行う命令再配置ステップとを有し、前記命令再配置ステップは、当サイクルに配置される命令のうち、有効なオペレーションを実行する命令が使用する演算資源が対象機械に搭載された演算器の制約を超えないかどうかを判定し、かつ当サイクルに配置される2つの命令の実行条件が前記条件排他性解析ステップにおいて同時に成立することがあり得ないと判定された場合には、いずれか一方の命令のみが演算資源を使用するものとして扱う配置可能判定ステップを有することとしたものである。
【0025】
また、請求項18の発明は、高級言語で記述されたプログラムのソースコードを実行形式コードに変換するプログラムを記録した記録媒体において、前記ソースコード中の命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリングステップを備え、前記命令スケジューリングステップは、各命令に付加された有効なオペレーションを実行する条件に関して、各条件が同時に成立することがあり得るか否かを解析する条件排他性解析ステップと、並列実行可能な命令の集合をサイクル毎に区分できるように命令の並べ替えを行う命令再配置ステップとを有し、前記命令再配置ステップは、当サイクルに配置される命令のうち、有効なオペレーションを実行する命令が使用する演算資源が対象機械に搭載された演算器の制約を超えないかどうかを判定し、かつ当サイクルに配置される2つの命令の実行条件が前記条件排他性解析ステップにおいて同時に成立することがあり得ないと判定された場合には、いずれか一方の命令のみが演算資源を使用するものとして扱う配置可能判定ステップを有することを特徴とするプログラムを記録することとしたものである。
【0026】
【発明の実施の形態】
以下、本発明に係るプロセッサ、コンパイル装置及びコンパイル方法の実施の形態について、図面を用いて詳細に説明する。
【0027】
[実施の形態1:プロセッサ]
(命令フォーマットとアーキテクチャの概要)
まず、図1(a)〜(c)を用いて、本発明に係るプロセッサが解読実行する命令の構造について説明する。図1(a)〜(c)は、本プロセッサの命令フォーマットを示す図である。本プロセッサの各命令は、32ビットの固定長であり、各命令は1ビットの並列実行境界情報(E:end bit)10を保持している。この情報は、当該命令とそれに後続する命令との間に並列実行の境界が存在するか否かを示すものである。具体的には、並列実行境界情報Eが“1”の場合にはその命令と後続命令との間に並列実行の境界が存在し、並列実行境界情報Eが“0”の場合には並列実行の境界が存在しないことになる。この情報の利用方法については後で述べる。
【0028】
また、各命令は3ビットの実行条件情報(P:predicate)11を保持している。この実行条件情報Pは、後述する図5中の8個の条件フラグC0〜C7(311)のうち当該命令を実行するか否かの条件が格納された条件フラグを指定するものである。この実行条件情報Pで指定された条件フラグの値が“1”の場合には当該命令で指定されたオペレーションを実行し、条件フラグの値が“0”の場合にはオペレーションを実行しない。
【0029】
各命令の命令長から並列実行境界情報Eと実行条件情報Pとを除いた28ビットの部分にてオペレーションを指定する。具体的には、“Op1”、“Op2”及び“Op3”のフィールドでは、オペレーションの種類を表すオペコードを、“Rs”のフィールドでは、ソースオペランドとなるレジスタのレジスタ番号を、“Rd”のフィールドでは、デスティネーションオペランドとなるレジスタのレジスタ番号をそれぞれ指定する。また、“imm”のフィールドでは、演算用定数オペランドを指定する。そして、“disp”のフィールドでは、変位(ディスプレースメント)を指定する。
【0030】
次に、図2(a)及び(b)を用いて、本プロセッサのアーキテクチャの概要について説明する。本プロセッサは、静的な並列スケジューリングを前提としたプロセッサである。
【0031】
命令の供給は、図2(a)に示すように、毎サイクル128ビット固定長の命令供給単位(ここでは「パケット」と呼ぶ。)で4命令ずつ供給する。そして、命令の実行は、図2(b)に示すように、1サイクルで並列実行の境界までの命令(ここでは「実行単位」と呼ぶ。)を同時実行する。つまり、各サイクルにおいて並列実行境界情報Eが“1”である命令までの命令を並列実行することになる。供給されながら実行されなかった命令は、命令バッファ内に残され、次のサイクル以降で実行の対象となる。
【0032】
つまり、このアーキテクチャでは、固定長のパケット単位で命令を供給しておき、静的に求めた情報を元に、各サイクルにおいて並列度に応じた適切な数の命令を発行していく、ということになる。この手法をとることにより、通常の固定長命令のVLIW方式で発生していた無動作命令(nop命令)が全く無くなり、コードサイズを削減することができる。
【0033】
(プロセッサのハードウェア構成)
図3は、本発明に係るプロセッサのハードウェア構成を示すブロック図である。本プロセッサは、2つの演算器を持つ並列実行プロセッサであり、大きく分けて、命令供給部20、解読部30、実行部40から構成される。
【0034】
命令供給部20は、図示されていない外部メモリから命令群を供給し、解読部30に出力するものであり、命令フェッチ部21、命令バッファ22及び命令レジスタ23からなる。
【0035】
命令フェッチ部21は、32ビットのIA(インストラクションアドレス)バス及び128ビットのID(インストラクションデータ)バスを通じて図示されていない外部メモリから命令のブロックをフェッチし、内部の命令キャッシュに保持するとともに、PC(プログラムカウンタ)部42から出力されたアドレスに相当する命令群を命令バッファ22に供給する。
【0036】
命令バッファ22は、128ビットのバッファを2個備えており、命令フェッチ部21によって供給された命令を蓄積しておくために用いられる。命令バッファ22へは、命令フェッチ部21から128ビット単位でパケットが供給される。命令バッファ22に蓄積された命令は、命令レジスタ23の適切なレジスタに出力される。
【0037】
命令レジスタ23は、4個の32ビットレジスタ231〜234からなり、命令バッファ22から送られてきた命令を保持するためのものである。命令レジスタ23の周辺については、別の図面において更に詳細な構成を示している。
【0038】
解読部30は、命令レジスタ23に保持された命令を解読し、その解読結果に応じた制御信号を実行部40に出力するものであり、大きく分けて、命令発行制御部31、命令デコーダ32及び命令無効化方法選択部38からなる。
【0039】
命令発行制御部31は、命令レジスタ23の4個のレジスタ231〜234に保持された命令に対して、命令内の実行条件情報Pと、それに対応する条件フラグとを参照することによって、条件フラグの値が偽である命令に関しては、その命令自体を実質的に削除するといった処理を行う。ただし、命令無効化方法選択部38で解読部30が選択された場合に限る。また、命令発行制御部31は、命令内の並列実行境界情報Eを参照することによって、並列実行の境界を越えた命令について、その命令の発行を無効化するといった発行に関する制御を行う。なお、命令発行制御部31については、別の図面において更に詳細な動作説明を行う。
【0040】
命令デコーダ32は、命令レジスタ23に格納された命令群を解読する装置であり、第1命令デコーダ33、第2命令デコーダ34、第3命令デコーダ35及び第4命令デコーダ36からなる。これらのデコーダ33〜36の各々は、基本的に1サイクルに1つの命令を解読し、実行部40に制御信号を与える。また、命令内に置かれた定数オペランドについては、各命令デコーダから実行部40のデータバス48に転送される。
【0041】
命令無効化方法選択部38は、条件フラグが偽であり実行する必要のない命令を、解読部30にて無効化するのか実行部40にて無効化するのかを選択する。具体的には、後述する命令発行制御部31の条件フラグ有効情報312(図5)にて、当該命令の条件フラグが有効である、つまり確定していると示された場合には、解読部30にて無効な命令の削除を行い、そうでない場合には、実行部40の書き込み制御部46にて当該命令の実行結果の書き込みを無効化する。
【0042】
実行部40は、解読部30での解読結果に基づいて、最大2つのオペレーションを並列実行する回路ユニットであり、実行制御部41、PC部42、レジスタファイル43、第1演算器44、第2演算器45、書き込み制御部46、オペランドアクセス部47及びデータバス48,49からなる。
【0043】
実行制御部41は、解読部30での解読結果に基づいて実行部40の各構成要素42〜49を制御する制御回路や配線の総称であり、タイミング制御、動作許可禁止制御、ステータス管理、割り込み制御などの回路を有する。
【0044】
PC部42は、次に解読実行すべき命令が置かれている図示されていない外部メモリ上のアドレスを、命令供給部20内の命令フェッチ部21に出力する。
【0045】
レジスタファイル43は、64個の32ビットレジスタ(R0〜R63)から構成される。これらのレジスタに格納された値は、命令デコーダ32での解読結果に基づいて、データバス48を経由して第1演算器44及び第2演算器45に転送され、そこで演算が施され、又はそこを単に通過した後に、データバス49を経由してレジスタファイル43又はオペランドアクセス部47に送られる。
【0046】
第1演算器44及び第2演算器45は、それぞれ2個の32ビットデータに対して算術論理演算を行うALUや乗算器と、シフト演算を行うバレルシフタとを内部に有し、実行制御部41による制御の下で演算を実行する。
【0047】
書き込み制御部46は、ある命令を実行部40にて無効化することが命令無効化方法選択部38にて選択された場合のみ、当該命令の条件フラグの内容が偽であったとき、当該命令の実行結果をレジスタファイル43に書き込まないように制御を行う。これにより、当該命令に関しては、無動作命令(nop命令)を実行した場合と同等の結果となる。
【0048】
オペランドアクセス部47は、レジスタファイル43と図示されていない外部メモリとの間でオペランドの転送を行う回路である。具体的には、例えば、命令内で、オペコードとして“ld”(ロード)が置かれていた場合には、外部メモリに置かれていた1ワード(32ビット)のデータがオペランドアクセス部47を経てレジスタファイル43の指定されたレジスタにロードされ、また、オペコードとして“st”(ストア)が置かれていた場合には、レジスタファイル43の指定されたレジスタの格納値が外部メモリにストアされる。
【0049】
上記PC部42、レジスタファイル43、第1演算器44、第2演算器45、書き込み制御部46及びオペランドアクセス部47は、図示されるように、データバス48(L1バス、R1バス、L2バス、R2バス)及びデータバス49(D1バス、D2バス)で接続されている。なお、L1バス及びR1バスは第1演算器44の2つの入力ポートに、L2バス及びR2バスは第2演算器45の2つの入力ポートに、D1バス及びD2バスは第1演算器44及び第2演算器45の出力ポートにそれぞれ接続されている。
【0050】
(命令レジスタ23の周辺の構成と命令発行制御部31の動作)
図4は、命令レジスタ23の周辺の構成を示すブロック図である。図中、破線の矢印は制御信号を表す。
【0051】
命令レジスタ23は、Aレジスタ231、Bレジスタ232、Cレジスタ233及びDレジスタ234の4個の32ビットレジスタからなる。命令レジスタ23には、命令バッファ22から命令が供給される。
【0052】
第1〜第4命令デコーダ33,34,35,36は、各々32ビットの命令を入力とし、それを解読して、その命令の動作に関する制御信号を出力するとともに、命令内に配置された定数オペランドを出力する。図4の50及び51は、各々実行が確定した命令の定数オペランドである。
【0053】
また、第2〜第4命令デコーダ34,35,36には、制御信号として1ビットの無動作命令フラグが入力される。このフラグを“1”にセットすると、そのデコーダは出力として無動作命令に相当する制御信号を出力する。つまり、無動作命令フラグをセットすることにより、その命令デコーダのデコードを無効化することができる。
【0054】
そして、命令発行制御部31は、命令レジスタ23に格納された命令内の情報を参照して、並列実行の境界以降の命令のデコードを無効化するための無動作命令フラグの生成と、実行条件が真であり、かつ実行部40でオペレーションを実行すべき有効な命令を選択するための実行命令セレクタ371,372の制御と、それに対応した制御信号を選択するための実行命令セレクタ373,374の制御とを行う。
【0055】
図5は、本プロセッサの命令発行制御部31とその周辺回路の構成を示したものである。命令発行制御部31は、まず各命令内の並列実行境界情報Eを参照し、このサイクルでどこまでの命令を発行するのかを決める。そして、このサイクルで発行されない命令に対応する命令デコーダの無動作命令フラグを“1”にセットすることにより、そのデコーダの出力を無動作命令に相当する制御信号にする。この無動作命令フラグの生成は、図5の命令発行制御部31の右半部に示されたような簡単な論理回路(ORゲート)314,315で実現することができる。それと同時に、どれだけの命令が発行されずに残ったのかの情報を命令バッファ22に伝達する。
【0056】
具体的に説明すると、Aレジスタ231の命令の並列実行境界情報Eが“1”の場合には、第2、第3及び第4命令デコーダ34,35,36のデコードを無効化する。また、Bレジスタ232の命令の並列実行境界情報Eが“1”の場合には、第3及び第4命令デコーダ35,36のデコードを無効化する。そして、Cレジスタ233の命令の並列実行境界情報Eが“1”の場合には、第4命令デコーダ36のデコードを無効化することになる。
【0057】
更に、命令発行制御部31は、各命令内の実行条件情報Pを参照し、条件フラグが偽となる命令、すなわち実行する必要のない命令に関して、その命令自体を実質的に削除してしまうように、図4の実行命令セレクタ371〜374を制御する。本プロセッサでは、各サイクル最大4命令をデコードするが、実際にオペレーションが実行されるのはたかだか2命令ということになる。これによって、実行条件が偽の場合に実行部40にて無動作命令が実行されてしまい、演算器44,45の利用効率が悪くなるという問題点を解決している。
【0058】
これを実現するために、命令発行制御部31は、実行命令選択制御部313を備えている。実行命令選択制御部313は、8個の条件フラグ(C0〜C7)311のうち命令内に指定された実行条件情報Pに対応する条件フラグを参照することにより、オペレーションを実行する必要のない命令を検出し、その命令を選択せず、後続の有効な命令を選択するように実行命令セレクタ371〜374を制御する。非選択の命令自体が実質的に削除されることになる。条件フラグ311は8個の1ビットレジスタC0〜C7からなり、各命令内の3ビットの実行条件情報Pをデコードすることにより指定される。ただし、条件フラグC7の値は常に“1”であり、常に実行する命令は、実行条件としてC7を指定することになる。プログラム中での記述ではC7の指定は省略することができる。
【0059】
ただし、条件フラグを更新する命令において、条件フラグが確定するのは、実行ステージすなわち実行部40なので、前サイクルにおいて、ある条件フラグを更新する命令を実行している場合、次サイクルの解読ステージすなわち解読部30にてその条件フラグは確定しておらず、命令の削除可否の判断を行うことができない。この状態を検出するために、条件フラグ有効情報312が備えられている。
【0060】
条件フラグ有効情報312は、各条件フラグ毎にその値が有効であるか否かの1ビットの値を保持しており、解読部30にてある条件フラグを更新する命令を実行することが判明した際に、その条件フラグの有効情報を“0”に設定し、実行部40においてその条件フラグの値の更新が完了すると、その条件フラグの有効情報を“1”に設定する。
【0061】
命令発行制御部31では、各命令の実行条件情報Pを参照した後、条件フラグ有効情報312を参照して、各実行条件に対応する条件フラグの値が有効であるか否かを検出する。そして、有効でなかった場合、すなわち条件フラグ有効情報312の該当ビットが“0”であった場合、当該命令自体の削除は行わない。当該命令はそのまま実行部40に発行され、条件フラグが確定した時点で、必要であればその命令の実行結果の書き込みを無効化する。
【0062】
条件フラグの値が有効であった場合、すなわち条件フラグ有効情報312の該当ビットが“1”であった場合、当該命令の実行条件情報Pで指定された条件フラグ311内の1ビットを参照し、その値が“1”であった場合には、その命令をそのまま実行部40に発行し、値が“0”であった場合には、その命令自体を実質的に削除するように実行命令セレクタ371〜374を制御する。
【0063】
つまり、ある命令の実行条件情報Pが“0”である場合、直前の命令において対応する条件フラグが更新される場合には、実行部40においてその命令の実行結果を無効化し、そうでない場合には、解読部30において、その命令自体を実質的に削除してしまうことになる。
【0064】
図6は、具体的な命令列を実行した際のパイプライン処理のタイミングを示す図である。ここでは、3つの命令を上から順に1命令ずつ実行した場合を想定している。最初の命令はレジスタR0の内容とレジスタR1の内容とを比較して、一致していれば条件フラグC0に“1”を設定し、そうでなければ“0”を設定する比較命令であり、次の命令は、条件フラグC0の内容が“1”の場合のみ、レジスタR3の内容からレジスタR2の内容の減算を行って、結果をレジスタR3に書き込む減算命令であり、最後の命令は、条件フラグC0の内容が“1”の場合のみ、レジスタR4の内容とレジスタR5の内容との加算を行って、結果をレジスタR5に書き込む加算命令である。
【0065】
図6中、各命令の右側に、それぞれの命令の命令フェッチステージ(IF)、解読ステージ(DEC)、実行ステージ(EX)のタイミングを示している。ここでは、最初の比較命令の結果が偽、すなわちC0が“0”になった場合を仮定している。
【0066】
図6を見てわかるように、最初の比較命令の解読ステージ(DEC)にて、C0を更新する命令であることが検出され、C0の有効情報が“0”に設定され、実行ステージ(EX)にて、比較結果が確定した後で、C0の有効情報が“1”に設定される。
【0067】
後続の減算命令、加算命令ともにC0を条件として実行する命令であるが、比較命令の直後の減算命令に関しては、解読ステージ(DEC)の段階でC0の値が有効でないため命令自体の削除は行わず、実行ステージ(EX)に発行され、そのステージにて実行結果が無効化される。一方、加算命令に関しては、解読ステージ(DEC)の時点でC0の値が確定しているため、解読ステージ(DEC)にて命令自体が実質的に削除され、実行ステージ(EX)へは発行されない。この場合、空いた演算器を加算命令の後続の命令で活用できることになる。
【0068】
以上のような制御による命令の無効化後においても、発行されずに残った命令が存在した場合、命令発行制御部31は残った命令の個数を命令バッファ22に伝達し、命令バッファ22内でそれらの命令が無効化されず、次のサイクルにおいて再び命令レジスタ23に転送されるように制御する。
【0069】
このように、図1に示したような命令フォーマットをとり、図4及び図5に示したような構成にすることで、演算器を有効活用する命令発行制御を行うことができる。
【0070】
(プロセッサの動作)
次に、具体的な命令を解読実行した場合の本実施形態のプロセッサの動作について説明する。
【0071】
図7は、条件付き実行を含むプログラムの一部を示す図である。このプログラムは5個の命令で構成されており、各命令の処理内容はニーモニックで表現されている。具体的には、ニーモニック“add”は、定数又はレジスタの格納値とレジスタの格納値との加算を表し、ニーモニック“sub”は、レジスタの格納値からの定数又はレジスタの格納値の減算を表し、ニーモニック“st”は、レジスタの格納値のメモリへの転送を表し、ニーモニック“mov”は、定数又はレジスタの格納値のレジスタへの転送を表している。
【0072】
また、“Rn(n=0〜63)”はレジスタファイル43の中の1つのレジスタを示す。そして、各命令の並列実行境界情報Eについても“0”又は“1”で示してある。更に、実行条件情報Pで指定される条件フラグについて、各命令の先頭に“[ ]”で囲んで記述してある。記述していない命令は常に実行する命令である。
【0073】
以下、各実行単位ごとの本プロセッサの動作を説明する。ただし、ここでは、最初の時点で、条件フラグC0の値が“1”、C1の値が“0”で確定しているものとする。
【0074】
(実行単位1)
命令1、命令2、命令3及び命令4を含むパケットが外部メモリから供給され、それぞれ命令レジスタ23に転送される。次に命令発行制御部31が各命令の並列実行境界情報Eを参照する。この場合、命令3の並列実行境界情報が“1”であるため、第4命令デコーダ36の解読結果を無効化、すなわち無動作命令とする。
【0075】
次に、命令発行制御部31は各命令の実行条件情報Pを参照する。命令1の実行条件フラグはC0であり、C0の値は“1”で確定しているので、命令1を第1番目の命令として実行するように、オペランドの選択を実行命令セレクタ371で制御し、解読結果を選択するように実行命令セレクタ373を制御する。次に命令2の実行条件フラグはC1であり、C1の値は“0”で確定しているので、命令2自体は実質的に削除し、オペレーションの実行は行わない。そして、後続の命令3は常に実行される命令なので、命令3を第2番目の命令として実行するように、オペランドの選択を実行命令セレクタ372で制御し、解読結果を選択するように実行命令セレクタ374を制御する。結果的に命令1と命令3が実行する命令として実行部40に送られ、発行されなかった命令4は、命令バッファ22内に残される。
【0076】
実行部40では、レジスタR0の格納値に1を加えた値がレジスタR0に格納され、レジスタR1の格納値とレジスタR2の格納値とを加えた値がレジスタR2に格納される。
【0077】
(実行単位2)
命令バッファ22に残された命令4と、新たに外部メモリから供給された命令5とが順に命令レジスタ23に転送される。次に命令発行制御部31が各命令の並列実行境界情報Eを参照する。この場合、命令5の並列実行境界情報が“1”であるため、第3命令デコーダ35及び第4命令デコーダ36の解読結果を無効化、すなわち無動作命令とする。
【0078】
命令4及び命令5は、共に常に実行される命令であるので、第1番目の命令として命令4を、第2番目の命令として命令5を実行部40に送るように、実行命令セレクタ371〜374を制御する。これで、供給された全ての命令が発行されたことになる。
【0079】
実行部40では、レジスタR0の格納値が外部メモリ内のレジスタR3で示されるアドレスに転送され、レジスタR2の格納値がレジスタR4に転送される。
【0080】
以上のように、図7に示したプログラムは、本プロセッサにおいて2つの実行単位で実行される。本プロセッサでは、演算器44,45の個数より多くの命令をデコードしておき、不要な命令を適宜削除することにより、これら演算器44,45の効率的な活用を図っている。この例においても、各サイクルとも、実行部40において2つのオペレーションを実行しており、搭載された演算器44,45が効率的に活用されている。
【0081】
(従来の命令発行制御部を持つプロセッサとの比較)
次に、図7に示した処理を、従来技術として挙げた、条件実行命令を全て実行部へ発行し、この実行部において適宜無効化するようなプロセッサに行わせた場合を仮定して、本発明に係るプロセッサの場合と比較する。
【0082】
図8は、従来のプロセッサの命令レジスタの周辺の構成を示すブロック図である。従来のプロセッサとしては、本発明のプロセッサと同様に2つの演算器を持つものとし、命令フォーマットは、図1の本発明のプロセッサの命令フォーマットと同様とする。2並列のプロセッサなので、命令レジスタ23aはAレジスタ231a及びBレジスタ232aを、命令デコーダ32aは第1命令デコーダ33a及び第2命令デコーダ34aをそれぞれ備える。50a、51aは各々定数オペランドである。命令発行制御部31aでは、Aレジスタ231aに格納された命令の並列実行境界情報Eに応じて、第2命令デコーダ34aの解読結果を無効化する、という制御を行う。
【0083】
図9は、図7に示したプログラムの処理を、従来の命令発行制御部31aを持つプロセッサで実行させるプログラムを示す図である。図9のプログラムは、並列実行境界情報E以外の部分は、図7のプログラムと同一である。並列実行境界情報Eは、最大2命令が同時発行されるように設定されている。
【0084】
以下、各実行単位ごとの従来のプロセッサの動作を説明する。ただし、ここでは、最初の時点で、条件フラグC0の値が“1”、C1の値が“0”で確定しているものとする。
【0085】
(実行単位1)
命令1、命令2、命令3及び命令4を含むパケットが外部メモリから供給され、命令1と命令2が順に命令レジスタ23aに転送される。次に命令発行制御部31aがAレジスタ231aに格納された命令1の並列実行境界情報Eを参照する。この場合、命令1の並列実行境界情報Eは“0”であるため、第2命令デコーダ34aの解読結果は無効化しない。したがって、命令1と命令2の両方を実行部に送ることになる。発行されなかった命令3及び命令4は、命令バッファに残される。
【0086】
実行部では、命令1の実行条件フラグであるC0が“1”であるため、レジスタR0の格納値に1を加えた値がレジスタR0に格納される。そして、命令2の実行条件フラグであるC1が“0”であるため、命令2に対応するオペレーションは実行されないか、もしくは実行後の結果を無効化し、結果的に無動作命令を実行したのと同様になる。
【0087】
(実行単位2)
命令バッファに残された命令3及び命令4が順に命令レジスタ23aに転送され、新たに外部メモリから命令5が供給される。次に命令発行制御部31aがAレジスタ231aに格納された命令3の並列実行境界情報Eを参照する。この場合、命令3の並列実行境界情報Eが“0”であるため、第2命令デコーダ34aの解読結果は無効化しない。したがって、命令3と命令4の両方を実行部に送ることになる。発行されなかった命令5は、命令バッファ22に残される。
【0088】
実行部では、命令3及び命令4は共に常に実行される命令であるので、これら2つの命令に対応するオペレーションが実行される。具体的には、レジスタR1の格納値とレジスタR2の格納値とを加えた値がレジスタR2に格納され、レジスタR0の格納値が外部メモリ上の、レジスタR3で示されるアドレスに転送される。
【0089】
(実行単位3)
命令バッファに残された命令5が命令レジスタ23aに転送される。次に命令発行制御部31aがAレジスタ231aに格納された命令5の並列実行境界情報Eを参照する。この場合、命令5の並列実行境界情報Eが“1”であるため、第2命令デコーダ34aの解読結果を無効化する。したがって、命令5のみが発行される。これで、供給された全ての命令が発行されたことになる。
【0090】
実行部では、命令5は常に実行される命令であるので、命令5に対応したオペレーションが実行される。具体的には、レジスタR2の格納値がレジスタR4に転送される。
【0091】
以上のように、図9に示したプログラムは、従来の命令発行制御部31aを持つプロセッサにおいて3つの実行単位で実行され、本発明のプロセッサの場合に比べて、1つ多い実行単位で実行されることになる。これは、従来の命令発行制御部31aを持つプロセッサでは、条件付き実行命令の条件が偽であった場合、その命令は無動作命令として実行されてしまい、搭載されている演算器を無駄に使用してしまうところに起因している。
【0092】
[実施の形態2:コンパイル装置]
次に、上述の実施の形態1におけるプロセッサで実行するコードを生成するためのコンパイル装置、及びそのコンパイル方法に関する実施の形態について説明する。
【0093】
(用語説明)
まず、ここで用いる用語を説明する。
・オブジェクトコード
再配置可能情報を含んだ対象プロセッサ向け機械語プログラムをいう。連結編集を行い未確定アドレスを決定することにより実行形式コードに変換することができる。
・プレデセッサ
ある命令を実行するために、それ以前に実行しておく必要のある命令をいう。
・実行グループ
コンパイル装置によって、同一サイクルに並列実行可能であるものをグループ化した命令群をいう。
・基本ブロック
実行が先頭から始まり、必ず最後まで実行される一連の命令列のことであり、ブロックの途中でブロックを出ることや、ブロックの途中からブロックに入ることがないものをいう。
【0094】
(対象プロセッサ)
本コンパイル装置が対象とするプロセッサは、上記実施の形態1で説明したプロセッサである。このプロセッサは、コンパイル装置にて付与された並列実行境界情報Eを参照することにより実行グループを生成し、ハードウェアでは並列実行可能か否かの判定を行わない。したがって、並列実行境界間すなわち実行グループ内に、同時実行可能な命令が正しく配置されていることは、コンパイル装置が保証することになる。並列実行境界間に配置できる命令に対する制約は、
(1)並列実行グループ中の命令の総数は4を越えない(命令デコーダの制約)、
(2)並列実行グループ中の命令のうち、実際に実行部にてオペレーションが実行される命令の個数は2を越えない(実行命令数の制約)、
(3)並列実行グループ中の命令のうち、実際に実行部にて使用する対象プロセッサ資源の総和は、2ALUユニット、1メモリアクセスユニット、1分岐ユニットを越えない(演算器の制約)、
である。命令は、これら3つの制約が満たされた場合のみ並列実行ができる。
【0095】
(コンパイル装置の構成)
図12は、本発明の実施形態2におけるコンパイル装置の構成及び関連するデータを示すブロック図である。本コンパイル装置は、高級言語で書かれたソースコード120からオブジェクトコード130を生成するプログラム処理装置であり、コンパイラ上流部100、アセンブラコード生成部101、命令スケジューリング部102、オブジェクトコード生成部103からなる。
【0096】
コンパイラ上流部100は、ファイル形式で保存されている高級言語ソースコード120を読み込み、構文解析及び意味解析を行って内部形式コードを生成する。更に必要に応じて、最終的に生成される実行形式コードのサイズやその実行時間が短くなるように内部形式コードを最適化する。
【0097】
アセンブラコード生成部101は、コンパイラ上流部100により生成、最適化された内部形式コードからアセンブラコードを生成する。
【0098】
コンパイラ上流部100及びアセンブラコード生成部101での処理は本発明の主眼ではなく、また、従来のコンパイル装置で行われてきた処理と同等であるので、詳細説明は省略する。
【0099】
(命令スケジューリング部102)
命令スケジューリング部102は、アセンブラコード生成部101で生成されたアセンブラコードに対し、命令に付加された各条件間の排他性の解析、命令間の依存関係の解析、命令の再配置(命令順の並べ替え)及び並列実行境界の付加を行い、アセンブラコードを対象プロセッサ向けに並列化する。命令スケジューリング部102は、条件排他性解析部110、依存関係解析部111、命令再配置部112及び実行境界付加部113から構成される。
【0100】
命令スケジューリング部102内では、まず条件排他性解析部110が動作する。その後、各基本ブロックごとに、依存関係解析部111、命令再配置部112及び実行境界付加部113が動作する。各部の詳細な動作は以下のとおりである。
【0101】
条件排他性解析部110は、条件フラグの排他性を解析し、各基本ブロックの先頭と、各条件フラグ更新命令に対して条件排他情報テーブルを生成していく。条件排他情報テーブルは、全ての条件フラグの組み合わせに対して、条件が排他であるか否かの情報を持つ配列である。条件排他情報テーブルの具体例については、後で示す(図16)。ここでは、全ての条件フラグの組み合わせが排他でない情報テーブルのことを無排他テーブルと呼ぶ。
【0102】
図13は、条件排他性解析部110での処理手順を示すフローチャートである。条件排他性解析部110では、各命令に相当するコンパイル装置内部の中間コードを、下向きに探索して行き、各基本ブロックの先頭及び各条件フラグ更新命令に対して、条件排他情報テーブルを設定していく。
【0103】
まず、現時点で有効である有効テーブルTvを無排他テーブルで初期化する(ステップS11)。以後、各基本ブロックについて、下向きに探索していく(ステップS12)。
【0104】
ある基本ブロックに関する判定(ステップS13)の結果、当該基本ブロックの先行基本ブロックが1つだけの場合は、当該基本ブロック先頭テーブルに有効テーブルTvを設定し(ステップS14)、そうでない場合は、その時点での排他関係が特定できないので、当該基本ブロック先頭テーブルに無排他テーブルを設定する(ステップS15)。
【0105】
次に、基本ブロック内の各命令について探索していく(ステップS16)。比較命令などの条件フラグを更新する命令を発見すると(ステップS17)、その命令が同時に排他な条件を設定する命令であるかどうかを判定する(ステップS18)。同時に排他な条件を設定する命令は、図11の命令1の条件フラグC0とC1を更新する比較命令などが該当する。
【0106】
同時に排他な条件を設定する命令である場合、まず有効テーブルTv内の当該命令で更新する条件フラグに該当する部分を全て偽に設定しておいて、その後、当該命令で排他に設定される条件フラグの組のみ真に設定する。そして、当該命令用の排他情報テーブルに有効テーブルTvを設定する(ステップS19)。
【0107】
同時に排他な条件を設定しない命令である場合、当該命令で更新する条件フラグに関する排他性が崩れるので、有効テーブルTv内の当該命令で更新する条件フラグに該当する部分を全て偽に設定する。そして、当該命令用の排他情報テーブルに有効テーブルTvを設定する(ステップS20)。
【0108】
以上を、各基本ブロック毎に繰り返していく(ステップS21、S22)。これによって、全基本ブロックの先頭及び条件フラグを設定する全ての命令について、それぞれの時点での条件フラグの排他性に関する情報を保持することができる。
【0109】
依存関係解析部111は、処理対象に含まれる命令間の依存関係を解析し、依存グラフとして表現する。命令間の依存関係には以下の3種類がある。いずれの依存関係にある命令も、元の命令順を変更するとプログラムの意味が異なってしまうため、命令並べ替え時においても依存関係は守る必要がある。
・データ依存関係
ある資源を定義する命令と、同じ資源を参照する命令との間の依存関係。
・逆依存関係
ある資源を参照する命令と、同じ資源を定義する命令との間の依存関係。
・出力依存関係
ある資源を定義する命令と、同じ資源を定義する命令との間の依存関係。
【0110】
依存関係解析部111では、処理対象に含まれる各命令毎に、これに対応するノード(節)を、また各依存関係毎に、これに対応するエッジ(矢印)を生成し、依存グラフを生成する。この際、参照及び定義する資源に関して依存のある2命令間であっても、それぞれの命令の実行条件が排他である、すなわち同時に成立することはないことが保証されれば、それら2命令が共に資源を参照又は定義することはありえないので、その2命令間には依存関係が存在しないことになる。したがって、それら2命令に対応するノード間にはエッジを生成しない。
【0111】
これを実現するため、先行する命令Aと命令Bに関して、条件排他性解析部110で設定された排他情報テーブルを利用して、2命令の実行条件が排他であるか否かを検出する必要がある。この排他性の検出を行うアルゴリズムを図14に示す。
【0112】
まず、命令Aの実行条件フラグをCnとする(ステップS31)。そして、命令Aの実行時点での有効な排他情報を求めるため、命令Aから上向きに探索していき、条件フラグを更新する命令を発見するか、基本ブロックの先頭に到達した時点で、該当する排他情報テーブルを有効テーブルTvとする(ステップS32)。
【0113】
次に、命令Bまでの経路をたどるため、命令Aから下向きに探索していく(ステップS33)。命令Bを発見した場合(ステップS34)、その時点での有効テーブルTvを参照して、条件フラグCnと命令Bの実行条件との排他関係を求めて終了する(ステップS35)。Cn以外の条件フラグを更新する命令を発見した場合(ステップS36)、その命令に対応する排他情報テーブルで有効テーブルTvを更新して、継続する(ステップS37)。条件フラグCnを更新する命令を発見した場合(ステップS38)、排他性を保証できなくなるので偽を返す(ステップS39)。以上を繰り返す(ステップS40)。
【0114】
このようにして、資源の定義及び参照関係と、実行条件の排他性との両方を解析して、各命令間の依存関係を構築していく。
【0115】
具体例として、図15に示したアセンブラコードに対する条件排他性解析部110及び依存関係解析部111の適用結果を説明する。
【0116】
図16は、図15のアセンブラコードの命令2(比較命令)に対応する条件排他情報テーブルを示す図である。条件排他情報テーブルは、条件フラグC0〜C7の全ての組み合わせに対する排他性を示す配列である。この場合は、命令2によって、条件フラグC0と条件フラグC1とが排他であることが設定されることになる。
【0117】
図17は、依存関係解析部111の出力である依存グラフを示す図である。図17中、実線はデータ依存関係を、破線は逆依存関係を示す。命令2(比較命令)は命令1で更新されるレジスタR0を参照するため、データ依存があり、命令3及び命令4は命令2で更新される条件フラグC0及びC1を参照するため、データ依存関係がある。ここで、命令3ではレジスタR2を更新し、命令4ではレジスタR2を参照しているため、一見すると命令3から命令4へのデータ依存関係が存在するように見える。しかし、それぞれの命令の実行条件であるC0及びC1は命令2によって排他な条件として設定されているため、図16に示した条件排他情報テーブルを参照することにより2命令が共に実行されることがあり得ないことが判明し、これら2命令間には依存関係は存在しないものとする。
【0118】
図12の説明に戻って、命令再配置部112は、依存関係解析部111で生成された依存グラフを用いて、処理対象の命令を並べ替え、対象プロセッサ向けの並列化されたアセンブラコードを生成する。命令再配置部112の処理の詳細は以下のとおりである。
【0119】
図18は、命令再配置部112での処理手順を示すフローチャートである。命令再配置部112は、依存関係解析部111が生成した依存グラフの全てのノードについて、以下のループ1の処理(ステップS52〜S60)を繰り返す(ステップS51、S61)。
【0120】
まず、命令再配置部112は、現時点で配置候補となり得るノードを依存グラフより抽出し配置候補ノード集合とする(ステップS52)。ここで配置候補となり得るノードとは、「プレデセッサが全て配置完了済み」であるノードである。
【0121】
次に、命令再配置部112は、配置候補ノード集合の全ての候補ノードについて、以下のループ2の処理(ステップS54〜S58)を繰り返す(ステップS53、S59)。
【0122】
まず、配置候補ノード集合から現時点で配置することが最良と思われるノード(以下、単に「最良ノード」と呼ぶ。)を取り出す(ステップS54)。最良ノードの決定方法については後述する。続いて最良ノードが、実際に配置可能か否かを判断し(ステップS55)、可能な場合は仮配置する(ステップS56)。この判断は、前述のプロセッサの解読ステージでの命令自体の削除の効果を有効に活かすため、既に仮配置されているノードと最良ノードとの実行条件の排他性を考慮しつつ、前述の演算器の制約、実行命令数の制約及び命令デコーダの制約を満たすかどうかによって決定する。条件排他性の考慮には、条件排他性解析部110の結果を用いる。ただし、実行条件フラグを更新する命令の次のサイクルにおいては、当該実行条件で実行される命令自体の削除は行われないことも考慮する。つまり、この場合は実行条件の排他性を考慮せず、純粋に演算器や実行命令数の制約で配置可能性を判定する。
【0123】
続いて、現時点で仮配置されているノード集合を調べ、更に命令を配置することができるか否かを判断する(ステップS57)。配置不可と判断された場合はループ2を終了し処理をステップS60へ移す。
【0124】
配置可能と判断された場合、最良ノードが配置されたことによって新たに配置候補となり得るノードが生じたか否かを判断し、新たな配置候補が生じた場合はこれを配置候補ノードに追加する(ステップS58)。ステップS58で新たに配置候補にできるのは、「(現在配置しようとしている)最良ノードのみをプレデセッサとして持ち、かつ、最良ノードとの依存関係が逆依存もしくは出力依存」のノードである。つまり、ここで新たな配置候補になることができるノードは、最良ノードと同じサイクルで実行することはできるが、最良ノードより前のサイクルでは実行できないノードである。
【0125】
ループ2が終了した後、仮配置ノード集合に含まれているノードを確定する(ステップS60)。具体的には、仮配置ノード集合に含まれているノードに対応する命令を元の命令列から取り出し、実行境界付加部113へ渡すための新たな命令列に再配置する。この段階で配置候補ノードの一部が、同時に実行する命令群としてまとめられ確定したことになる。
【0126】
次に、ステップS54における最良ノードの決定方法について述べる。最良ノードは、依存グラフ、仮配置領域を参照して、処理対象の命令全体を最も短時間で実行できるであろう命令をヒューリスティックに選び出す。ここでは現時点での依存グラフにおいて依存グラフの終端までの命令の実行時間総和が最も短いものを選ぶ。この条件に合致する命令が多数ある場合には、元の命令順が早い命令を最良ノードとする。
【0127】
再び図12に戻って、実行境界付加部113は、命令再配置部112のステップS60で配置が確定した命令群の末尾毎に並列実行境界情報Eを設定する。
【0128】
オブジェクトコード生成部103は、命令スケジューリング部102が出力したアセンブラコードをオブジェクトコード130に変換し、ファイルとして出力する。
【0129】
(コンパイル装置の動作)
次に、本コンパイル装置の特徴的な構成要素の動作について、具体的な命令を用いて説明する。
【0130】
図19は、ソースコードをコンパイラ上流部100に入力し、アセンブラコード生成部101を経て生成されたアセンブラコードである。命令スケジューリング部102は図19のコードを入力として受け取る。図19に含まれる各命令の意味は以下のとおりである。
・命令1…レジスタR0の格納値と定数0とが一致しているかを比較し、真偽を条件フラグC0に設定し、その逆の条件を条件フラグC1に設定する。
・命令2…条件フラグC0の値が真の場合にのみ、レジスタR1の格納値とレジスタR2の格納値とを加算してレジスタR2に格納する。
・命令3…条件フラグC1の値が真の場合にのみ、レジスタR2の格納値とレジスタR3の格納値とを加算してレジスタR3に格納する。
・命令4…条件フラグC0の値が真の場合にのみ、レジスタR1の格納値とレジスタR3の格納値とを加算してレジスタR3に格納する。
・命令5…条件フラグC1の値が真の場合にのみ、レジスタR3の格納値とレジスタR4の格納値とを加算してレジスタR4に格納する。
・命令6…条件フラグC0の値が真の場合にのみ、レジスタR2の格納値とレジスタR4の格納値とを加算してレジスタR4に格納する。
・命令7…条件フラグC1の値が真の場合にのみ、レジスタR3の格納値とレジスタR5の格納値とを加算してレジスタR5に格納する。
【0131】
以下、命令スケジューリング部102の動作を説明する。まず、条件排他性解析部110と依存関係解析部111とが起動され、依存グラフが生成される。図19のコード例では、命令1で生成した条件フラグC0とC1が、命令2以降において排他であることを考慮しつつ、資源の定義及び参照関係を解析する。図20に、生成された依存グラフを示す。
【0132】
次に、命令再配置部112が起動される。図18のフローチャートに沿って説明すると、まず第1サイクルで、配置候補ノード集合を生成する(ステップS52)。図20の依存グラフから、ここでは命令1のみが配置候補ノードとなる。次に最良ノードを取り出す(ステップS54)。ここでは、自動的に命令1が選択される。そして、配置可能判定ステップ(S55)において、配置可能であると判定される。更に、配置状態判定ステップ(S57)においても、まだ配置可能であると判定されるが、配置候補ノード追加ステップ(S58)において追加対象となる命令が存在しないため、配置ノード確定ステップ(S60)にて、第1サイクルは命令1のみを発行するように確定される。
【0133】
次のサイクルでは、命令2、命令3及び命令4が配置候補ノードとなる。命令2及び命令3が順に最良ノードとして選ばれ、仮配置される。次に、命令4が最良ノードとして選ばれ、配置可能判定ステップ(S55)に入る。ここで、条件排他性を考慮した判定が行われるわけであるが、直前のサイクルで実行条件C0及びC1の値が更新されているため、このサイクルではC0及びC1を実行条件とする命令の解読ステージでの削除は実施されない。したがって、既に仮配置されている命令2及び命令3が削除されることがないので、ハードウェアに搭載した演算器の制限により、命令4は同時発行不可能、すなわち配置不可能と判定される。こうして、第2サイクルでは、命令2及び命令3を発行するように確定される。
【0134】
次のサイクルでは、命令4、命令5、命令6及び命令7が配置候補ノードとなる。命令4及び命令5が順に最良ノードとして選ばれ、仮配置される。次に、命令6が最良ノードとして選ばれ、配置可能判定ステップ(S55)に入る。ここで、条件排他性を考慮した判定が行われる。命令6が実際にオペレーションを実行する場合、すなわち命令6の実行条件フラグC0が真である場合には、条件フラグC1は偽であるため、C1を実行条件とする命令5はオペレーションを実行せず、演算器を使用しない。したがって、命令4及び命令6の組み合わせにおいて演算器の制約を満たしているので、命令6は配置可能と判定される。次に命令7が最良ノードとして選ばれるが、上記と同様に、命令7がオペレーションを実行する場合、命令4及び命令6は削除されるため、命令5及び命令7のみの組み合わせによって演算器の制約を判定し、命令7は配置可能と判定される。こうして、第3サイクルでは、命令4、命令5、命令6及び命令7を発行するように確定される。これで、未配置のノードが無くなったので、命令再配置部112の処理が完了する。
【0135】
最後に、実行境界付加部113が起動される。ここでは、上記の命令再配置部112による配置された命令群の末尾の命令に並列実行境界情報Eを設定していく。具体的には、命令1、命令3及び命令7の並列実行境界情報Eに“1”を設定し、残りの命令の並列実行境界情報Eには“0”を設定する。
【0136】
以上で、命令スケジューリング部102の処理が完了する。続いてオブジェクトコード生成部103が起動され、オブジェクトコードが出力される。
【0137】
図21に、最終的な実行形式コードを示す。実際の実行形式コードは128ビット単位にまとめられたビット列である。図21に示した実行形式コードは、本発明に係る2個の演算器を持つプロセッサにて、3つの実行グループで実行される。
【0138】
(従来のコンパイル装置との比較)
次に、図19に示したアセンブラコードを、本発明のコンパイル装置の構成をとらない従来のコンパイル装置にてコンパイルした場合を仮定して、本発明に係るコンパイル装置の場合と比較する。対象プロセッサは、本発明のプロセッサと同様に2個の演算器を備えたプロセッサとする。
【0139】
従来のコンパイル装置は、命令再配置部において違いがある。まず、最初のサイクルでは、依存関係のため命令1のみ発行する。次のサイクルでは、命令2、命令3及び命令4が候補となるが、1サイクルに2つという演算器の制約のため、命令2及び命令3のみを発行する。次のサイクルでは、命令4、命令5、命令6及び命令7が候補となるが、演算器の制約のため、命令4及び命令5のみを発行する。次のサイクルでは、命令6及び命令7が候補となり、演算器の制約を満たすため、両方の命令が発行される。こうして、命令再配置が完了する。実行境界付加部では、具体的には、命令1、命令3、命令5及び命令7の並列実行境界情報Eに“1”を設定し、残りの命令の並列実行境界情報Eには“0”を設定する。以上で命令スケジューリング処理が完了する。
【0140】
図22に、結果として生成される実行形式コードを示す。図22に示した実行形式コードは、2個の演算器を持つプロセッサにて4つの実行グループで実行される。
【0141】
図21と図22を比較すると、従来のコンパイル装置の生成コード(図22)では、本発明のコンパイル装置の生成コード(図21)の場合に比べ、実行グループが1つ増えている。つまり、実行サイクル数が1サイクル増していることになる。このように実行グループ数が増加したのは、本発明の命令スケジューリング部102のような構成をとらなかったために、全ての命令が実行ステージへ発行されるものとして扱ってしまい、ハードウェアに搭載された演算器の個数を上限とした配置しかできないためである。一方、本発明のコンパイル装置では、命令自体の無効化を考慮してハードウェアに搭載された演算器の個数以上の数の命令を1サイクルに配置することが可能であり、演算器を有効活用することができる。
【0142】
なお、本実施形態で示されるコンパイル装置の処理手順をフロッピーディスク、ハードディスク、CD−ROM、MO、DVDなどの記録媒体に入れることにより、本実施形態で示されるコンパイル装置をコンピュータで実現できる。
【0143】
また、本実施形態で示されるコンパイル装置により生成された実行形式コードをフロッピーディスク、ハードディスク、CD−ROM、MO、DVD、半導体メモリなどの記録媒体に入れることもできる。
【0144】
[実施の形態3:プロセッサ]
次に、上記実施の形態1のプロセッサを拡張したプロセッサの実施の形態について説明する。
【0145】
本プロセッサのハードウェア構成については、大部分は前述の第1の実施の形態のプロセッサと同一であるが、実行グループ内に配置される命令群の実行条件情報の配置に制限が加わっている。具体的には、1つの実行グループ内には、同一の実行条件を持つ命令は必ず連続して配置される、という制限である。後述する実施の形態4のコンパイル装置は、この制限に従ってコードを生成する。これによって、プロセッサとしては、命令発行制御部の構成が異なってくることになる。
【0146】
(命令発行制御部の構成と動作)
図23は、本実施の形態のプロセッサの命令発行制御部140とその周辺回路の構成を示したものである。図23中の命令発行制御部140のほとんどの部分は、図5に示した実施の形態1のプロセッサのものと同一である。異なる点は、実行命令選択制御部141の制御方法と、実行命令選択制御部141の後段に命令結合部142が追加されていることの2点である。
【0147】
まず、実行命令選択制御部141は、実施の形態1で示したのと同様に、実行条件が偽となる命令について命令自体を実質的に削除する制御を行うのであるが、前述のように実施の形態1の場合と異なり、命令の配置順に制限が加わっているため、それを積極的に活用する。具体的には、命令配置順には、同一の実行条件情報を持つ命令は連続して配置される、という制限があるので、まず解読後の命令群を各実行条件毎に分類する。命令配置順の制限により、この分類は容易に行うことができる。
【0148】
次に、実行条件フラグの値が“0”で確定しているか否かを、分類された各実行条件毎に検査する。“0”で確定している条件フラグを実行条件とする命令群は、まとめて削除するように制御し、実際に実行部40へ発行すべき命令群を決定する。これによって、条件フラグの検査回数を最小にとどめ、複数の命令の削除可能性を同時に検出することができ、実行部40へ発行すべき命令の検出を高速かつ簡単に行うことができる。
【0149】
次に、実行命令選択制御部141による命令の削除後、命令群は命令結合部142に入力される。ここでは、実際に実行部40にてオペレーションを実行することが確定した命令群について、複数の命令を1つの複合命令として結合できるか否かを検出し、結合可能な場合には、当該命令の制御信号を新規複合命令に変更し、オペランドの結合を行い、後続側の命令を実行命令選択制御部141と同様に削除するように制御する。こうして、命令結合部142からは、ハードウェアとして搭載された演算器の個数に応じた2つの命令に対応する制御信号とオペランドデータとが出力され、実行部40に転送される。これらの命令は、それぞれ複数の命令の複合命令である可能性もあることになる。
【0150】
(プロセッサの動作)
次に、図24を用いて、本プロセッサの具体的な動作について説明する。図24は、条件付き実行命令を含むプログラムの一例を示す図である。このプログラムは、4個の命令で構成されており、表記は図9のプログラムと同じである。ニーモニック“lsr”は、レジスタの格納値の論理右シフトを表している。
【0151】
以下、各実行単位ごとの本プロセッサの動作を説明する。ただし、ここでは、最初の時点で、条件フラグC0の値が“0”、C1の値が“1”で確定しているものとする。
【0152】
(実行単位1)
命令1、命令2、命令3及び命令4を含むパケットが外部メモリから供給され、それぞれ命令レジスタ23に転送される。次に、命令発行制御部140が各命令の並列実行境界情報Eを参照する。この場合、命令1、命令2、命令3の並列実行境界情報Eがいずれも“0”であるため、命令デコーダの解読結果の無効化は行わない。
【0153】
次に、命令発行制御部140は各命令の実行条件情報Pを参照し、実行命令選択制御部141にて、オペレーションを実行する命令を選択する。命令1は常に実行する命令である。命令2の実行条件フラグはC0であり、C0の値は“0”で確定しているので、命令2自体は実質的に削除し、オペレーションの実行は行わない。後続の命令3及び命令4の実行条件フラグは共にC1であるので、条件フラグC1を1度だけ参照し、C1の値が“1”で確定しているので、命令3と命令4を共に実行対象とする。こうして、命令1、命令3及び命令4が、次の命令結合部142に送られる。
【0154】
命令結合部142では、入力された命令群の全ての組み合わせについて、複合命令が生成可能か否かを判定する。この場合、命令1(シフト命令)と命令4(加算命令)とを結合してシフト加算命令を生成できることを検出する。そして、第1番目の命令として、シフト加算に対応する制御信号とオペランドが、第2番目の命令として、命令3に対応する制御信号とオペランドがそれぞれ実行部40に送られる。これで、供給された命令は全て発行されたことになる。
【0155】
実行部40では、レジスタR3の格納値をレジスタR1の格納値の分だけ論理右シフトした値にレジスタR2の格納値を加えた値がレジスタR2に格納され、レジスタR0の格納値に1を加えた値がレジスタR0に格納される。
【0156】
以上のように、図24に示したプログラムは、本プロセッサにおいて1つの実行単位で実行される。本プロセッサでは、確定した実行条件による命令自体の削除後、命令同士を結合して1つの複合命令とすることを試みる。これによって、実質の演算効率を高めることが可能となる。また、同一の実行条件を持った命令が連続して配置されるという制限を利用して、実際にオペレーションを実行する命令を解読ステージにて選択する処理の高速化を図っている。
【0157】
[実施の形態4:コンパイル装置]
次に上述の実施の形態3におけるプロセッサで実行するコードを生成するコンパイル装置、及びそのコンパイル方法に関する実施の形態について説明する。
【0158】
本コンパイル装置の構成については、大部分は前述の第2の実施の形態のコンパイル装置と同一であるが、1つの実行グループ内の命令について、それぞれの実行条件に応じて配置に制限がある点と、プロセッサの解読ステージにおける命令の結合を考慮に入れている点とが異なる。具体的には、命令スケジューリング部の構成が異なることになる。
【0159】
(命令スケジューリング部)
本実施の形態のコンパイル装置の命令スケジューリング部は、第2の実施の形態における命令スケジューリング部102と同様に、条件排他性解析部、依存関係解析部、命令再配置部、及び実行境界付加部から構成されるが、異なる点は命令再配置部の再配置の方法のみである。
【0160】
図25に、本実施の形態のコンパイル装置の命令再配置部のフローチャートを示す。本実施の形態のコンパイル装置の命令再配置部の処理手順は、実施の形態2のコンパイル装置の命令再配置部112の処理手順と大部分は同一であるが、配置可能か否かを判定する部分と、配置ノード確定後に配置順序を調整する点とが異なる。具体的には、図25中のステップS71〜S82のうち、配置可能判定(ステップS75)と配置順序調整(ステップS81)とが、図18に示したフローと異なることになる。
【0161】
実施の形態2のコンパイル装置と同様に、条件排他性解析部及び依存関係解析部を経て、依存グラフが生成され、命令再配置部に移ってくる。そして、条件排他性を考慮した依存グラフに基づいて命令の再配置を行っていくわけであるが、ステップS74にて最良ノードを選択した後、ステップS75にて配置可能判定を行う際に、仮配置済みのノード群と最良ノードについて、実行条件の排他性だけでなく、全ての組み合わせについての命令結合の可能性も考慮して、配置可能判定を行う。つまり、ある2つのノードが結合可能であった場合、それら2つのノードを合わせて1つの命令として扱い、配置可能判定を行う。
【0162】
更に、ステップS80にて当該サイクルで配置可能となったノードが確定した後、ステップS81にて配置順序の調整を行う。具体的には、当該サイクルで配置可能となったノード群をそれぞれ実行条件ごとに分類し、同一の実行条件を持つノードが必ず連続して配置されるように、ノードの配置順序を調整する。これによって、ハードウェアにおける制御の簡単化を図っている。
【0163】
(コンパイル装置の動作)
図26を用いて、本コンパイル装置の特徴的な構成要素の動作について具体的な命令を用いて説明する。図26は、コンパイラ上流部及びアセンブラコード生成部を経て生成されたアセンブラコードの一例である。命令スケジューリング部は、図26のコードを入力として受け取る。図26に含まれる各命令の意味は以下のとおりである。ただし、条件フラグC0とC1は、命令1以前の命令によって排他な関係となっていることを想定している。
・命令1…レジスタR3の格納値をレジスタR1の格納値の分だけ論理右シフトする。
・命令2…条件フラグC1の値が真の場合にのみ、レジスタR0の格納値に1を加算してレジスタR0に格納する。
・命令3…条件フラグC0の値が真の場合にのみ、レジスタR0の格納値から1を減算してレジスタR0に格納する。
・命令4…条件フラグC1の値が真の場合にのみ、レジスタR1の格納値とレジスタR2の格納値とを加算してレジスタR2に格納する。
【0164】
以下、命令スケジューリング部の動作について説明する。まず、条件排他性解析部と依存関係解析部が起動され、依存グラフが生成される。この例では、条件フラグC0とC1が排他であることを考慮しつつ、資源の定義及び参照関係を解析する。
【0165】
次に、命令再配置部が起動される。図25のフローチャートに沿って説明すると、まず配置候補ノード集合を生成する(ステップS72)。ここでは命令1のみが配置候補ノードとなる。次に最良ノードを取り出す(ステップS74)。ここでは、自動的に命令1が選択される。そして、配置可能判定(ステップS75)において、配置可能であると判定される。更に、配置状態判定(ステップS77)においても、まだ配置可能であると判定される。そして、配置候補ノード追加(ステップS78)において、追加対象となる命令として、命令2、命令3及び命令4が配置候補ノードに追加される。
【0166】
そして、再び戻って最良ノードを取り出す(ステップS74)。ここでは、まず命令2が選択されて、配置可能であると判定される(ステップS75)。
【0167】
その後、再び戻って最良ノードを取り出す(ステップS74)。ここでは、命令3が選択される。そして、命令2と命令3の実行条件は排他であるので、2個という演算器の制約を満たし、配置可能であると判定される(ステップS75)。
【0168】
更に、戻って最良ノードを取り出す(ステップS74)。ここでは、残った命令4が自動的に選択される。そして、配置可能判定を行う(ステップS75)のであるが、実行条件C0が真であると仮定した場合には、命令1と命令3のみが有効となるので演算器の制約を満たす。一方、実行条件C1が真であると仮定した場合には、命令1、命令2及び命令4の3つの命令が有効となってしまう。ここで、これらの全ての組み合わせについて、命令の結合可能性を検討する。ここでは、命令1と命令4を結合して、ハードウェアに備えられたシフト加算命令とすることが可能であると判定され、結果的に2つの命令が有効となるので、配置可能であると判定される。
【0169】
以上で、全ての命令が第1サイクルに配置されたことになり、配置ノードを確定する(ステップS80)。次に、各ノードを実行条件で分類し、配置順序の調整を行う(ステップS81)。具体的には、命令2と命令4の実行条件がC1で同一なので、命令2と命令4が連続して配置されるように、配置順を、命令1、命令2、命令4、命令3の順に並べ直す。以上で、命令再配置部の処理が完了する。
【0170】
最後に、実行境界付加部が起動される。ここでは、上記の命令再配置部による配置された命令群の末尾の命令に並列実行境界情報を設定していく。具体的には、命令3の並列実行境界情報に“1”を設定し、残りの命令の並列実行境界情報には“0”を設定する。以上で命令スケジューリング部の処理が完了する。
【0171】
以上のように、本実施の形態のコンパイル装置では、図26に示した命令列は、1つの実行グループで実行されるようにコンパイルされる。ここには、配置可能判定(ステップS75)において、プロセッサの解読ステージでの命令の結合を考慮したことの効果が現れている。更に、同一の実行条件を持つ命令を連続して配置するように調整することにより、プロセッサの解読ステージにて有効な命令を選択する際の制御を簡単化することができる。
【0172】
なお、本実施形態で示されるコンパイル装置の処理手順をフロッピーディスク、ハードディスク、CD−ROM、MO、DVDなどの記録媒体に入れることにより、本実施形態で示されるコンパイル装置をコンピュータで実現できる。
【0173】
また、本実施形態で示されるコンパイル装置により生成された実行形式コードをフロッピーディスク、ハードディスク、CD−ROM、MO、DVD、半導体メモリなどの記録媒体に入れることもできる。
【0174】
以上、本発明に係るプロセッサ及びコンパイル装置について、実施形態に基づいて説明したが、本発明はこれらの実施形態に限られないことは勿論である。変形例を以下に列挙する。
【0175】
(1)上記実施の形態のプロセッサ及びコンパイル装置では、固定長の命令を実行することを想定していたが、本発明はこのような命令フォーマットに限定されるものではない。可変長の命令フォーマットを採用しても本発明の有意性は保たれる。
【0176】
(2)上記実施の形態のプロセッサ及びコンパイル装置では、2個の演算器を持つことを想定していたが、本発明はこの演算器数に限定されるものではない。1個の演算器もしくは3個以上の演算器を持つプロセッサを想定しても、本発明の有意性は保たれる。
【0177】
(3)上記実施の形態のプロセッサ及びコンパイル装置では、コンパイル装置が静的に命令並列性を抽出することを想定していたが、本発明はこの命令並列処理方式に限定されるものではない。例えば、ハードウェアで動的に命令並列性を抽出するスーパースカラ方式を採用しても、本発明の有意性は保たれる。この場合、本発明の命令フォーマットから並列実行境界情報Eを除去し、この情報に依存する処理を全て命令発行制御部にて動的に検出しながら実施すればよい。
【0178】
(4)上記実施の形態のコンパイル装置の命令再配置部では、図18中のステップS54における最良ノードの決定方法として、依存グラフの終端までの実行時間の総和を用いていたが、本発明は、この選択基準に限定されるものではない。例えば、複数の実行フローの中で特定のパスを優先的に選択するようにしてもよい。この場合、最良ノードの取り出し(ステップS54)の際に、ある特定の実行条件を持つ命令の優先度を高めておく。これによって、実行頻度の高いパスなどの、特定の実行パスに特化したスケジューリングを行うことができる。
【0179】
(5)上記実施の形態のプロセッサの命令発行制御部では、最初に現れる並列実行境界情報Eが“1”となっている命令以降の命令の解読結果を必ず無効化していたが、必ずしもその必要はない。命令発行制御部内の実行命令選択制御部にて、実行部に転送すると判断した命令が、前記最初に現れる並列実行境界情報Eが“1”である命令以前に1つも存在しなかった場合、当該サイクル全体を削除し、次に現れる並列実行境界情報Eが“1”である命令までの命令群をこのサイクルでの発行対象とすればよい。つまり、並列実行境界情報Eが“1”である命令以前に有効なオペレーションを実行すべきと判定された命令が1つでも存在した場合にのみ、その命令を並列実行の境界とみなして以降の命令の解読結果を無効化し、そうでなかった場合には、その命令の並列実行境界情報Eは無視し、後続の命令の並列実行境界情報Eを参照することにより新たな並列実行の境界を検出すればよい。これによって、更に実行サイクル数を削減することができる。
【0180】
【発明の効果】
以上説明してきたとおり、本発明によれば、ハードウェアの有効利用を達成し、性能を向上させたプロセッサを提供することができる。
【図面の簡単な説明】
【図1】(a)〜(c)は本発明の実施形態1に係るプロセッサが実行する命令の構造を示す図である。
【図2】(a)及び(b)は同プロセッサにおける命令の供給と発行の概念を示す図である。
【図3】同プロセッサのハードウェア構成を示すブロック図である。
【図4】同プロセッサの命令レジスタ周辺の構成を示すブロック図である。
【図5】同プロセッサの命令発行制御部とその周辺の回路構成を示す図である。
【図6】同プロセッサにて命令列を実行した際のパイプラインのタイミングを示す図である。
【図7】条件付き実行命令を含むプログラムの一部を示す図である。
【図8】従来の命令発行制御部を持つプロセッサの命令レジスタ周辺の構成を示すブロック図である。
【図9】図7のプログラムの処理を従来の命令発行制御部を持つプロセッサで行わせるプログラムを示す図である。
【図10】条件分岐を含む処理のフローを示す図である。
【図11】図10のフローの処理を条件付き実行方式で記述したプログラムを示す図である。
【図12】本発明の実施形態2におけるコンパイル装置の構成及び関連するデータを示すブロック図である。
【図13】同コンパイル装置における条件排他性解析部の処理手順を示すフローチャートである。
【図14】同コンパイル装置における2命令間の実行条件排他性検出の処理手順を示すフローチャートである。
【図15】アセンブラコードの一例を示す図である。
【図16】図15のアセンブラコードの命令2に対応する条件排他情報テーブルを示す図である。
【図17】図15に対応する依存グラフである。
【図18】同コンパイル装置における命令再配置部の処理手順を示すフローチャートである。
【図19】アセンブラコードの一例を示す図である。
【図20】図19に対応する依存グラフである。
【図21】図19に対応する実行形式コードを示す図である。
【図22】図19のコードを従来のコンパイル装置でスケジューリングした場合の実行形式コードの一例を示す図である。
【図23】本発明の実施の形態3に係るプロセッサの命令発行制御部とその周辺の回路構成を示す図である。
【図24】条件付き実行命令を含むプログラムの一部を示す図である。
【図25】本発明の実施の形態4に係るコンパイル装置における命令再配置部の処理手順を示すフローチャートである。
【図26】アセンブラコードの一例を示す図である。
【符号の説明】
10 並列実行境界情報(E)
11 実行条件情報(P)
20 命令供給部(命令供給手段)
21 命令フェッチ部
22 命令バッファ
23 命令レジスタ
231 Aレジスタ
232 Bレジスタ
233 Cレジスタ
234 Dレジスタ
30 解読部
31 命令発行制御部(命令発行制御手段)
311 条件フラグ
312 条件フラグ有効情報
313 実行命令選択制御部
314,315 論理回路
32 命令デコーダ(解読手段)
33 第1命令デコーダ
34 第2命令デコーダ
35 第3命令デコーダ
36 第4命令デコーダ
371〜374 実行命令セレクタ
38 命令無効化方法選択部(命令無効化方法選択手段)
40 実行部(実行手段)
41 実行制御部
42 PC(プログラムカウンタ)部
43 レジスタファイル
44 第1演算器
45 第2演算器
46 書き込み制御部(実行結果無効化手段)
47 オペランドアクセス部
48,49 データバス
100 コンパイラ上流部
101 アセンブラコード生成部
102 命令スケジューリング部(命令スケジューリング手段)
103 オブジェクトコード生成部
110 条件排他性解析部(条件排他性解析手段)
111 依存関係解析部(依存関係解析手段)
112 命令再配置部(命令再配置手段)
113 実行境界付加部(実行境界付加手段)
120 ソースコード
130 オブジェクトコード
140 命令発行制御部(命令発行制御手段)
141 実行命令選択制御部
142 命令結合部

Claims (18)

  1. 複数の命令を供給するための命令供給手段と、
    前記複数の命令を各々解読するための解読手段と、
    前記複数の命令中に各命令を実行するか否かを示す条件を指定する実行条件情報が指定され、当該実行条件情報で指定された条件を参照して、有効なオペレーションを実行する命令又は命令の集合を決定するための命令発行制御手段と、
    前記複数の命令中に各命令の動作が指定され、当該指定に基づいて1つ又は複数のオペレーションを実行するための実行手段とを備えたプロセッサであって、
    前記命令発行制御手段は、前記実行条件情報で指定された条件を参照することにより、実行する必要のある有効な命令であるか、実行する必要のない無効な命令であるかを判断し、無効な命令であると判断した命令に関しては、当該命令を前記実行手段へ発行する前に当該命令自体を削除するように制御し、かつ当該命令に代えて当該命令に後続する有効な命令を前記実行手段へ発行するように制御する機能を有することを特徴とするプロセッサ。
  2. 請求項1記載のプロセッサにおいて、
    前記実行手段は、前記命令に対応するオペレーションを実行した後で、実行結果を無効化するための実行結果無効化手段を有し、
    各命令について、前記実行手段へ発行する前に当該命令自体を削除するか、前記実行結果無効化手段にて実行結果を無効化するかを選択するための命令無効化方法選択手段を更に備えたことを特徴とするプロセッサ。
  3. 請求項2記載のプロセッサにおいて、
    前記命令無効化方法選択手段は、各条件フラグの値が確定しているか否かを示す条件フラグ有効情報を参照することによって、いずれの命令無効化方法を選択するかを決定し、
    前記条件フラグ有効情報は、前記解読手段において条件フラグを更新する命令であると解読された場合に当該条件フラグの確定性が偽に設定され、前記実行手段において当該命令が実行されて当該条件フラグの値が確定した際に真に設定されることを特徴とするプロセッサ。
  4. 請求項1記載のプロセッサにおいて、
    前記命令発行制御手段は、複数の命令の機能が単一の命令で実現可能であるような命令の組み合わせを検出し、それら複数の命令を単一の命令として扱うように結合する機能を更に有することを特徴とするプロセッサ。
  5. 請求項4記載のプロセッサにおいて、
    前記複数の命令の結合は、前記実行手段への発行前における命令の削除の後に適用されることを特徴するプロセッサ。
  6. 請求項1記載のプロセッサにおいて、
    前記命令発行制御手段は、各サイクルにおいて同一の前記実行条件情報を持つ命令が連続配置されている場合には、前記解読手段によって解読された複数の命令を予め各実行条件毎に分類し、その分類毎に条件フラグを参照して、実行する必要のある有効な命令であるか、実行する必要のない無効な命令であるかを判断することを特徴とするプロセッサ。
  7. 請求項1記載のプロセッサにおいて、
    前記複数の命令中に各命令が並列実行の境界であるか否かの並列実行境界情報が指定され、
    前記命令発行制御手段は、各命令の前記並列実行境界情報を参照して、当サイクルにおいて実行の対象とする命令群を検出する機能を更に有することを特徴とするプロセッサ。
  8. 請求項7記載のプロセッサにおいて、
    前記命令発行制御手段は、命令内の並列実行境界情報にて検出された境界命令以前の全ての命令が実行する必要のない無効な命令として削除された場合には、当該境界命令の並列実行境界情報を無効化し、当該境界命令以降の命令の並列実行境界情報を参照することにより当サイクルの新たな並列実行境界を検出することを特徴とするプロセッサ。
  9. 高級言語で記述されたプログラムのソースコードを実行形式コードに変換するためのコンパイル装置であって、
    前記ソースコード中の命令を、並列実行すべき複数の命令が隣接するように並べ直すための命令スケジューリング手段を備え、
    前記命令スケジューリング手段は、
    各命令に付加された有効なオペレーションを実行する条件に関して、各条件が同時に成立することがあり得るか否かを解析するための条件排他性解析手段と、
    並列実行可能な命令の集合をサイクル毎に区分できるように命令の並べ替えを行うための命令再配置手段とを有し、
    前記命令再配置手段は、当サイクルに配置される命令のうち、有効なオペレーションを実行する命令が使用する演算資源が対象機械に搭載された演算器の制約を超えないかどうかを判定し、かつ当サイクルに配置される2つの命令の実行条件が前記条件排他性解析手段において同時に成立することがあり得ないと判定された場合には、一定の条件下でいずれか一方の命令のみが演算資源を使用するものとして扱うことを特徴とするコンパイル装置。
  10. 請求項記載のコンパイル装置において、
    前記命令再配置手段は、当サイクルに配置される2つの命令の実行条件が前記条件排他性解析手段において同時に成立することがあり得ないと判定された場合であっても、前記2つの命令のうち少なくとも一方の命令の実行条件に対応する条件フラグの内容が確定していない場合には、前記2つの命令の両方が演算資源を使用するものとして扱うことを特徴とするコンパイル装置。
  11. 請求項10記載のコンパイル装置において、
    前記命令再配置手段は、当サイクルの前サイクルにおいて、前記2つの命令のうち少なくとも一方の命令の実行条件に対応する条件フラグを更新する命令が配置されているかどうかによって、条件フラグの内容が確定しているかどうかの判定を行うことを特徴とするコンパイル装置。
  12. 請求項記載のコンパイル装置において、
    前記命令再配置手段は、前記条件排他性解析手段の解析結果に基づいて、実行条件が同時に成立することがあり得ない命令に関してはいずれか一方のみが演算資源を使用するものとして扱うとともに、演算資源を使用する複数の命令の機能が単一の命令で実現可能である命令の組み合わせを検出し、それら複数の命令を結合した単一の命令として扱うことを特徴とするコンパイル装置。
  13. 請求項記載のコンパイル装置において、
    前記命令再配置手段は、当サイクルに配置可能と判定された命令の集合に関して、同一の実行条件を持つ命令を連続して配置するように配置順序を調整する機能を更に有することを特徴とするコンパイル装置。
  14. 請求項記載のコンパイル装置において、
    前記命令再配置手段は、当サイクルに配置する命令を選択する際に、複数の実行条件のうち特定の実行条件を持つ命令を優先的に選択することを特徴とするコンパイル装置。
  15. 高級言語で記述されたプログラムのソースコードを実行形式コードに変換するためのコンパイル装置であって、
    前記ソースコード中の命令を、並列実行すべき複数の命令が隣接するように並べ直すための命令スケジューリング手段を備え、
    前記命令スケジューリング手段は、
    各命令に付加された有効なオペレーションを実行する条件に関して、各条件が同時に成立することがあり得るか否かを解析するための条件排他性解析手段と、
    並列実行可能な命令の集合をサイクル毎に区分できるように命令の並べ替えを行うための命令再配置手段とを有し、
    前記条件排他性解析手段は、各基本ブロックの先頭の命令と、オペレーション実行の有効性に係るいずれかの条件フラグを更新する命令とに対して、それぞれの時点での各条件フラグ間の同時成立可能性を示すテーブルを生成することを特徴とするコンパイル装置。
  16. 請求項15記載のコンパイル装置において、
    前記命令スケジューリング手段は、命令間の依存関係を解析するための依存関係解析手段を更に有し、
    前記依存関係解析手段は、前記条件排他性解析手段にて生成されたテーブルに基づいて、各命令の実行時点で有効である条件フラグ間の同時成立可能性を探索し、2命令が同時に実行される可能性があるか否かを解析することを特徴とするコンパイル装置。
  17. 高級言語で記述されたプログラムのソースコードを実行形式コードに変換するためのコンパイル方法であって、
    前記ソースコード中の命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリングステップを備え、
    前記命令スケジューリングステップは、
    各命令に付加された有効なオペレーションを実行する条件に関して、各条件が同時に成立することがあり得るか否かを解析する条件排他性解析ステップと、
    並列実行可能な命令の集合をサイクル毎に区分できるように命令の並べ替えを行う命令再配置ステップとを有し、
    前記命令再配置ステップは、当サイクルに配置される命令のうち、有効なオペレーションを実行する命令が使用する演算資源が対象機械に搭載された演算器の制約を超えないかどうかを判定し、かつ当サイクルに配置される2つの命令の実行条件が前記条件排他性解析ステップにおいて同時に成立することがあり得ないと判定された場合には、いずれか一方の命令のみが演算資源を使用するものとして扱う配置可能判定ステップを有することを特徴とするコンパイル方法。
  18. 高級言語で記述されたプログラムのソースコードを実行形式コードに変換するプログラムを記録した記録媒体であって、
    前記ソースコード中の命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリングステップを備え、
    前記命令スケジューリングステップは、
    各命令に付加された有効なオペレーションを実行する条件に関して、各条件が同時に成立することがあり得るか否かを解析する条件排他性解析ステップと、
    並列実行可能な命令の集合をサイクル毎に区分できるように命令の並べ替えを行う命令再配置ステップとを有し、
    前記命令再配置ステップは、当サイクルに配置される命令のうち、有効なオペレーションを実行する命令が使用する演算資源が対象機械に搭載された演算器の制約を超えないかどうかを判定し、かつ当サイクルに配置される2つの命令の実行条件が前記条件排他性解析ステップにおいて同時に成立することがあり得ないと判定された場合には、いずれか一方の命令のみが演算資源を使用するものとして扱う配置可能判定ステップを有することを特徴とするプログラムを記録した記録媒体。
JP2001286393A 2001-09-20 2001-09-20 プロセッサ、コンパイル装置及びコンパイル方法 Expired - Fee Related JP3564445B2 (ja)

Priority Applications (6)

Application Number Priority Date Filing Date Title
JP2001286393A JP3564445B2 (ja) 2001-09-20 2001-09-20 プロセッサ、コンパイル装置及びコンパイル方法
US10/246,482 US7076638B2 (en) 2001-09-20 2002-09-19 Processor, compiler and compilation method
EP02021046.4A EP1296227B1 (en) 2001-09-20 2002-09-20 Valid instruction dispatching and execution
CNB021424993A CN1202470C (zh) 2001-09-20 2002-09-20 处理器
CNB2005100521315A CN100392596C (zh) 2001-09-20 2002-09-20 编译装置及编译方法
US11/452,282 US7761692B2 (en) 2001-09-20 2006-06-14 Processor, compiler and compilation method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2001286393A JP3564445B2 (ja) 2001-09-20 2001-09-20 プロセッサ、コンパイル装置及びコンパイル方法

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2004130214A Division JP3727324B2 (ja) 2004-04-26 2004-04-26 プロセッサ及びコンパイル装置

Publications (2)

Publication Number Publication Date
JP2003099248A JP2003099248A (ja) 2003-04-04
JP3564445B2 true JP3564445B2 (ja) 2004-09-08

Family

ID=19109384

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001286393A Expired - Fee Related JP3564445B2 (ja) 2001-09-20 2001-09-20 プロセッサ、コンパイル装置及びコンパイル方法

Country Status (4)

Country Link
US (2) US7076638B2 (ja)
EP (1) EP1296227B1 (ja)
JP (1) JP3564445B2 (ja)
CN (2) CN100392596C (ja)

Families Citing this family (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6865662B2 (en) * 2002-08-08 2005-03-08 Faraday Technology Corp. Controlling VLIW instruction operations supply to functional units using switches based on condition head field
US7191320B2 (en) * 2003-02-11 2007-03-13 Via Technologies, Inc. Apparatus and method for performing a detached load operation in a pipeline microprocessor
JP4041002B2 (ja) * 2003-03-24 2008-01-30 株式会社三菱東京Ufj銀行 データベース更新処理システム、データベース更新のための更新データ入力方法、更新データ処理方法、およびプログラム
US20040230781A1 (en) * 2003-05-16 2004-11-18 Via-Cyrix, Inc. Method and system for predicting the execution of conditional instructions in a processor
JP4699685B2 (ja) * 2003-08-21 2011-06-15 パナソニック株式会社 信号処理装置及びそれを用いた電子機器
US7404067B2 (en) * 2003-09-08 2008-07-22 Intel Corporation Method and apparatus for efficient utilization for prescient instruction prefetch
US20050114850A1 (en) 2003-10-29 2005-05-26 Saurabh Chheda Energy-focused re-compilation of executables and hardware mechanisms based on compiler-architecture interaction and compiler-inserted control
JP4283131B2 (ja) * 2004-02-12 2009-06-24 パナソニック株式会社 プロセッサ及びコンパイル方法
US7493611B2 (en) * 2004-08-30 2009-02-17 International Business Machines Corporation Pinning internal slack nodes to improve instruction scheduling
US8884972B2 (en) * 2006-05-25 2014-11-11 Qualcomm Incorporated Graphics processor with arithmetic and elementary function units
JP4159586B2 (ja) 2006-08-03 2008-10-01 エヌイーシーコンピュータテクノ株式会社 情報処理装置および情報処理の高速化方法
CN100428184C (zh) * 2006-12-13 2008-10-22 南开大学 具有自驱动功能的指令仿真解析系统及其实现方法
JP4957729B2 (ja) * 2007-01-25 2012-06-20 日本電気株式会社 プログラム並列化方法、プログラム並列化装置及びプログラム
WO2008155840A1 (ja) * 2007-06-20 2008-12-24 Fujitsu Limited 命令制御装置及び命令制御方法
TW200910195A (en) * 2007-08-20 2009-03-01 Sunplus Technology Co Ltd A device of using serial bits to determine instruction length at a multi-mode processor and the method thereof
US8281106B2 (en) * 2008-12-16 2012-10-02 International Business Machines Corporation Specifying an addressing relationship in an operand data structure
US8458439B2 (en) * 2008-12-16 2013-06-04 International Business Machines Corporation Block driven computation using a caching policy specified in an operand data structure
US8407680B2 (en) * 2008-12-16 2013-03-26 International Business Machines Corporation Operand data structure for block computation
US8285971B2 (en) * 2008-12-16 2012-10-09 International Business Machines Corporation Block driven computation with an address generation accelerator
US8327345B2 (en) * 2008-12-16 2012-12-04 International Business Machines Corporation Computation table for block computation
JP5576605B2 (ja) * 2008-12-25 2014-08-20 パナソニック株式会社 プログラム変換装置およびプログラム変換方法
JP2010257199A (ja) * 2009-04-24 2010-11-11 Renesas Electronics Corp プロセッサ及びプロセッサにおける命令発行の制御方法
JP2011257904A (ja) * 2010-06-08 2011-12-22 Hitachi Ltd 制御装置及びそのデータ処理方法
US8661424B2 (en) * 2010-09-02 2014-02-25 Honeywell International Inc. Auto-generation of concurrent code for multi-core applications
US8533695B2 (en) * 2010-09-28 2013-09-10 Microsoft Corporation Compile-time bounds checking for user-defined types
CN102207887B (zh) * 2011-05-04 2016-08-10 山东智慧生活数据系统有限公司 一种嵌入式操作系统快速移植方法及其装置
CN102195821B (zh) * 2011-06-27 2014-07-02 吉林中软吉大信息技术有限公司 一种网络设备配置方法
KR101962248B1 (ko) * 2012-03-16 2019-03-27 삼성전자주식회사 재구성 가능 프로세서의 검증 지원 장치 및 방법
CN102662635A (zh) * 2012-03-21 2012-09-12 清华大学 超长指令字变长指令实现方法及实现该方法的处理器
US20140047221A1 (en) * 2012-08-07 2014-02-13 Qualcomm Incorporated Fusing flag-producing and flag-consuming instructions in instruction processing circuits, and related processor systems, methods, and computer-readable media
US20140164738A1 (en) * 2012-12-07 2014-06-12 Nvidia Corporation Instruction categorization for runahead operation
US9760346B2 (en) * 2013-05-31 2017-09-12 Microsoft Technology Licensing, Llc Deeply parallel source code compilation
WO2015035306A1 (en) * 2013-09-06 2015-03-12 Huawei Technologies Co., Ltd. System and method for an asynchronous processor with token-based very long instruction word architecture
JP5847781B2 (ja) * 2013-09-25 2016-01-27 シャープ株式会社 機器操作管理装置、遠隔操作システム、機器操作管理装置の制御方法、制御プログラム、端末装置
FR3021432B1 (fr) * 2014-05-20 2017-11-10 Bull Sas Processeur a instructions conditionnelles
CN104317554B (zh) * 2014-10-14 2017-02-15 中国航天科技集团公司第九研究院第七七一研究所 用于simd处理器的寄存器文件数据读写装置和方法
US10061584B2 (en) * 2015-09-19 2018-08-28 Microsoft Technology Licensing, Llc Store nullification in the target field
KR20180031266A (ko) 2016-09-19 2018-03-28 삼성전자주식회사 전자 장치, vliw 프로세서 및 그 제어 방법들
CN111628845B (zh) * 2017-09-01 2022-12-06 惠州市德赛西威汽车电子股份有限公司 一种提高数据传输效率的方法
US11188681B2 (en) * 2019-04-08 2021-11-30 International Business Machines Corporation Malware resistant computer
CN114450665A (zh) * 2019-09-25 2022-05-06 西门子股份公司 一种执行程序的方法

Family Cites Families (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB1480209A (en) * 1974-07-03 1977-07-20 Data Loop Ltd Digital computers
US4514804A (en) * 1981-11-25 1985-04-30 Nippon Electric Co., Ltd. Information handling apparatus having a high speed instruction-executing function
JPS6265133A (ja) 1985-09-17 1987-03-24 Nec Corp 命令先取り装置
JPS6482131A (en) 1987-09-24 1989-03-28 Mitsubishi Electric Corp Data processor
JP2779032B2 (ja) * 1990-01-23 1998-07-23 株式会社日立製作所 情報処理装置
US5295249A (en) * 1990-05-04 1994-03-15 International Business Machines Corporation Compounding preprocessor for cache for identifying multiple instructions which may be executed in parallel
CA2038264C (en) * 1990-06-26 1995-06-27 Richard James Eickemeyer In-memory preprocessor for a scalable compound instruction set machine processor
US5371862A (en) * 1991-02-27 1994-12-06 Kabushiki Kaisha Toshiba Program execution control system
US5961629A (en) * 1991-07-08 1999-10-05 Seiko Epson Corporation High performance, superscalar-based computer system with out-of-order instruction execution
JPH05257709A (ja) * 1992-03-16 1993-10-08 Hitachi Ltd 並列化判別方法およびそれを用いた並列化支援方法
US5440703A (en) * 1993-09-20 1995-08-08 International Business Machines Corporation System and method for saving state information in a multi-execution unit processor when interruptable instructions are identified
US5600806A (en) * 1994-03-01 1997-02-04 Intel Corporation Method and apparatus for aligning an instruction boundary in variable length macroinstructions with an instruction buffer
US5598546A (en) * 1994-08-31 1997-01-28 Exponential Technology, Inc. Dual-architecture super-scalar pipeline
JP2931890B2 (ja) 1995-07-12 1999-08-09 三菱電機株式会社 データ処理装置
JPH09311786A (ja) 1996-03-18 1997-12-02 Hitachi Ltd データ処理装置
JPH09265400A (ja) 1996-03-28 1997-10-07 Hitachi Ltd コンパイル最適化方式
JP3442225B2 (ja) * 1996-07-11 2003-09-02 株式会社日立製作所 演算処理装置
US5872990A (en) * 1997-01-07 1999-02-16 International Business Machines Corporation Reordering of memory reference operations and conflict resolution via rollback in a multiprocessing environment
US5870582A (en) * 1997-03-31 1999-02-09 International Business Machines Corporation Method and apparatus for completion of non-interruptible instructions before the instruction is dispatched
CN1206145A (zh) 1997-06-30 1999-01-27 索尼公司 带有流水线处理电路的信号处理器及其方法
JPH1124929A (ja) * 1997-06-30 1999-01-29 Sony Corp 演算処理装置およびその方法
US6112299A (en) * 1997-12-31 2000-08-29 International Business Machines Corporation Method and apparatus to select the next instruction in a superscalar or a very long instruction word computer having N-way branching
US6216223B1 (en) * 1998-01-12 2001-04-10 Billions Of Operations Per Second, Inc. Methods and apparatus to dynamically reconfigure the instruction pipeline of an indirect very long instruction word scalable processor
US6367070B1 (en) * 1998-01-13 2002-04-02 Intel Corporation Means and method for establishing loop-level parallelism
JP3473391B2 (ja) 1998-04-08 2003-12-02 松下電器産業株式会社 プログラム処理方法、プログラム処理装置及び記録媒体
KR100280460B1 (ko) * 1998-04-08 2001-02-01 김영환 데이터 처리 장치 및 이의 복수의 스레드 처리 방법
US6237086B1 (en) * 1998-04-22 2001-05-22 Sun Microsystems, Inc. 1 Method to prevent pipeline stalls in superscalar stack based computing systems
JP3915019B2 (ja) 1998-06-16 2007-05-16 松下電器産業株式会社 Vliwプロセッサ、プログラム生成装置、および記録媒体
US6356994B1 (en) * 1998-07-09 2002-03-12 Bops, Incorporated Methods and apparatus for instruction addressing in indirect VLIW processors
US6681319B1 (en) * 1998-10-06 2004-01-20 Texas Instruments Incorporated Dual access instruction and compound memory access instruction with compatible address fields
US6490673B1 (en) * 1998-11-27 2002-12-03 Matsushita Electric Industrial Co., Ltd Processor, compiling apparatus, and compile program recorded on a recording medium
JP3344345B2 (ja) 1998-12-15 2002-11-11 日本電気株式会社 共有メモリ型ベクトル処理システムとその制御方法及びベクトル処理の制御プログラムを格納する記憶媒体
TW477936B (en) * 1998-12-29 2002-03-01 Ind Tech Res Inst Instruction folding method and device used in a stack machine
JP2000284970A (ja) 1999-03-29 2000-10-13 Matsushita Electric Ind Co Ltd プログラム変換装置及びプロセッサ
JP2000305781A (ja) * 1999-04-21 2000-11-02 Mitsubishi Electric Corp Vliw方式プロセッサ、コード圧縮装置、コード圧縮方法およびコード圧縮プログラムを記録した媒体
US6609193B1 (en) * 1999-12-30 2003-08-19 Intel Corporation Method and apparatus for multi-thread pipelined instruction decoder
JP3553845B2 (ja) 2000-02-24 2004-08-11 松下電器産業株式会社 プロセッサ、コンパイラ、コイパイル方法及び記録媒体
US6785804B2 (en) * 2001-05-17 2004-08-31 Broadcom Corporation Use of tags to cancel a conditional branch delay slot instruction

Also Published As

Publication number Publication date
EP1296227B1 (en) 2017-08-23
CN100392596C (zh) 2008-06-04
CN1202470C (zh) 2005-05-18
EP1296227A2 (en) 2003-03-26
EP1296227A3 (en) 2007-06-27
CN1645328A (zh) 2005-07-27
CN1409210A (zh) 2003-04-09
US20060242387A1 (en) 2006-10-26
JP2003099248A (ja) 2003-04-04
US7076638B2 (en) 2006-07-11
US7761692B2 (en) 2010-07-20
US20030056088A1 (en) 2003-03-20

Similar Documents

Publication Publication Date Title
JP3564445B2 (ja) プロセッサ、コンパイル装置及びコンパイル方法
Swanson et al. WaveScalar
Krashinsky et al. The vector-thread architecture
US5710902A (en) Instruction dependency chain indentifier
US8966459B2 (en) Processors and compiling methods for processors
US6820223B2 (en) Processor, compiling apparatus, and compile program recorded on a recording medium
KR100284789B1 (ko) N-지로 분기를 갖는 슈퍼스칼라 또는 초장 명령어 워드컴퓨터에서 다음 명령어를 선택하는 방법 및 장치
JPH05282265A (ja) 自己スケジューリング式並列コンピュータ・システムおよびその方法
US6324639B1 (en) Instruction converting apparatus using parallel execution code
Eichenberger et al. Register allocation for predicated code
US20050257200A1 (en) Generating code for a configurable microprocessor
JP3553845B2 (ja) プロセッサ、コンパイラ、コイパイル方法及び記録媒体
JP2016173793A (ja) プロセッサ、プログラムコード変換装置及びソフトウェア
JP2001243070A (ja) プロセッサ及び分岐予測方法並びにコンパイル方法
JP3727324B2 (ja) プロセッサ及びコンパイル装置
JP2006012185A (ja) プロセッサ
Swanson et al. Dataflow: The road less complex
Zhou et al. Tree traversal scheduling: A global instruction scheduling technique for VLIW/EPIC processors
Petersen et al. Reducing control overhead in dataflow architectures
Jacome et al. Clustered VLIW architecture with predicated switching
Seto et al. Custom instruction generation with high-level synthesis
Wang et al. Acceleration of control flows on reconfigurable architecture with a composite method
Bratt et al. Predicate-based transformations to eliminate control and data-irrelevant cache misses
De Souza et al. On the scheduling algorithm of the dynamically trace scheduled VLIW architecture
Mathew Very Large Instruction Word Architectures (VLIW Processors and Trace Scheduling)

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20040210

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20040302

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040426

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20040607

R150 Certificate of patent or registration of utility model

Ref document number: 3564445

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20080611

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20090611

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20100611

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20100611

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20110611

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20120611

Year of fee payment: 8

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

Free format text: PAYMENT UNTIL: 20120611

Year of fee payment: 8

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

Free format text: PAYMENT UNTIL: 20130611

Year of fee payment: 9

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees