(57)【特許請求の範囲】
【請求項１】
連続的なサイクル中のマルチ命令語パケットを処理するためにグループ化するプロセッサによる節電使用方法であって、各マルチ命令語パケットは前記マルチ命令語パケット内の対応するスロットに配置された複数の命令語を含み、各々の前記マルチ命令語パケット内の命令語は１つ以上のプロセッサーサイクルの間に、前記プロセッサの異なる機能ユニットにより実行され、各々の前記命令語は、前記機能ユニットを定義して前記命令語および実行すべき前記機能を実行するオペレーション・フィールドと、各オペランドを定義するオペランド・フィールドとを含み、前記方法は、
連続的なマルチ命令語パケットの数の構文を比較するステップと、
サイクルからサイクルまでに、前記マルチ命令語パケット内の各スロットで前記命令語のいずれかの前記機能ユニットを定義する前記オペレーション・フィールドのビット内におけるビット変更の数が、前記マルチ命令語パケットの機能性に影響を及ぼすことなくビットを変更して減少されることが可能か否かを決定するステップと、
前記決定するステップにしたがって、サイクルからサイクルまでの前記ビット変更の数を軽減して、前記プロセッサの電力使用を低減するために、少なくとも１つの前記マルチ命令語パケット内の少なくとも１つの前記命令語の前記機能ユニットを定義する前記オペレーション・フィールド内のビットを、同一の機能を実行する別の機能ユニットを定義する前記オペレーション・フィールド内のビットに置換することにより、前記オペレーション・フィールドを変更するステップであって、前記スロットの少なくとも２つのマルチ命令語パケットの前記スロット内の命令語が前記機能ユニットを定義する前記オペレーション・フィールド内の同一のビットを有する、前記オペレーション・フィールドを変更するステップと、
を含む、前記方法。
【請求項２】
請求項１に記載の方法であって、前記命令語は、すべてのビットが同じデジタル状態を内部に有するノー・オペレーション命令語を含み、
サイクルからサイクルまでにおいて、前記マルチ命令語パケットで前記命令語のうちのいくつかのビット変更の数は、ノー・オペレーション命令語を対応するダミー命令語と置換することにより低減されることが可能か否かを決定するステップと、
前記ノー・オペレーション命令語の少なくとも１つを、少なくとも２つのマルチ命令語パケットの対応するスロット内の命令語が前記機能ユニットを定義する前記オペレーション・フィールド内に特定のビットを有する、対応するダミー命令語と置換するステップと、
を含む、前記方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、マイクロプロセッサに係り、特にプロセッサの消費電力を減らす方法におけるプログラミング命令を使用する方法に関する。
【０００２】
【従来の技術】
人々がエネルギー保全問題により同調してきているように、プロセッサ−ベースの装置のための電力効率はますます重要になっている。明確な考慮すべき問題は、熱効果及び運転費の減少である。また、エネルギー保全から離れて、電力効率が電池式プロセッサ−ベースの装置に対する関心である。ここで、装置が小さい及び軽量にすることができるように、それは電池サイズを最小にするのを要求される。「プロセッサ−ベースの装置」は、特に一般的な計算のために設計した装置、または、埋め込まれたプロセッサを有する装置のどちらの装置でもあり得る。
【０００３】
処理装置設計の見地から、多くの技術が、電力使用を減らすために用いられてきた。これらの技術は、２つの基本方策としてグループ化されることができる。第一に、プロセッサの回路は、より少ない電力を使用するように設計され得る。第二に、電力使用が管理されるように、プロセッサを設計できる。
【０００４】
他方、特別な処理装置設計を与えられて、そのプログラミングは、減少された消費電力のために最適化され得る。このように、プログラマの見地から、プロセッサが同じ機能を実行するようにプログラムする方法には多くの場合複数ある。例えば、高水準プログラミング言語に書かれるアルゴリズムは、効率のために時間及び電力に関して最適化されることができる。最近まで、アセンブリー言語水準で、大部分の最適化手法は主に電力使用に特別な考慮を払うことなく、実行速度に焦点を合わせた。
【０００５】
電力効率的なコードを提供するプログラマの作業は、手動で実行するか自動コード解析ツールを用いて実行できる。この種のツールは、プログラマにその電力使用情報に関する情報を提供するように所与のプログラムを分析できる。他方でこの種のツールが最適化コードを発生して、実際にプログラマを援助することがありえる。
【０００６】
フランツ、その他の、「プロセッサ電力プロファイラ」（テキサス・インスツルメンツ社出願）と称した米国特許第５，５５７，５５７号は、プログラムの実行の間、電力使用をモデル化する方法を記述する。電力プロファイラ・プログラムは、プログラムを分析して、プログラマにエネルギー消費に関する情報を提供する。電力プロファイラは、Ｌ．ハードの「モジュール−可変な、フル・チップ電力プロファイラ」（テキサス・インスツルメンツ社出願）と称した米国特許出願番号０６／０４６８１１に記載されている。
【０００７】
一旦、特別なプログラムの必要電力が理解されると、コードを、最適化できる。プログラミングのこの面を自動化することは、最小限の電力使用のためのコンピューターコード（機能をサポートすることと、同じ内部アルゴリズム）を再構成できるコード生成ツールを必要とする。
【０００８】
【発明が解決しようとする課題】
本発明の一態様は、電力使用に対してのコンピュータープログラムを最適化する方法である。各ＣＰＵサイクルから次のサイクルまで、プログラムのマシン・レベル表現での最小限の変化があるときに、消費電力が減少するという認識に基づいている。
【０００９】
【課題を解決するための手段】
その方法は、プロセッサの異なる機能ユニットによって、「マルチ命令語」（ここで定義されるように）を実行する様々な形のプロセッサに役立つ。この種のプロセッサの例は、ＶＬＩＷ（非常に長い命令語）プロセッサ及びデュアル・データパス・プロセッサである。
【００１０】
その方法は、一組のステップ（それぞれに実行されることができるもののどれでも）から成る。各ステップは、コードをスキャンすること、所与のフィールドまたは他のコードシーケンスを命令内で比較することを含む。一般に、それは、その機能性に対して、重要であるコード構文である。そのコードシーケンスのマシンコード表現のサイクル・ツー・サイクル・ビット変化が最小にされることができるコードシーケンスがあるかどうか決定される。それから、これがコード機能性に逆に影響を及ぼすことなくされることができる場合、コードは変更される。
【００１１】
例えば、本発明の一態様は重要なコードシーケンスが機能ユニット割当て（設定）である方法である。典型的に、命令語の各命令は、ワードの「スロット」を占める。各スロットに対して、機能ユニットを識別するフィールドが、スキャンされる。このフィールドのサイクル・ツー・サイクル・ビット変化は、命令語内に命令を再配置することによって、減少する。命令が単に再配置されるだけであるので、コード機能性は影響を受けない。
【００１２】
【作用】
本発明の効果は、それがプロセッサ・アーキテクチャレベルで高水準プログラミングに最適化の方向を目指すということである。これは、プロセッサがそのプロセッサに対して最も効率的である仕方でプログラムされるのを許す。その方法は、簡単にプロセッサ及びその命令セットの特性に適していることができる。
【００１３】
【発明の実施の形態】
ここで記載されている本発明は、マイクロプロセッサのための電力管理を目的とする。根本的な動作原理は、プロセッサに提供されるプログラミングが電力使用を減らすために最適化されることができるということである。特別な命令がセットしたと仮定すると、これらの命令を用いているプログラムは最適でない命令シーケンスの存在を検出するために分析されることができる。逆に影響を及ぼすコード機能性を伴わずに、電力使用がより効率的であるように、これらのシーケンスを、変更できる。
【００１４】
本発明の方法は、ＶＬＩＷ（非常に長い命令語）プロセッサについて最も役に立つ。それは、プロセッサ内で異なる機能ユニットを用い、平行に多数の命令を実行する能力によって、特徴づけられる。本発明は、平行な２つのデータパス上の２つの命令を実行する「デュアル・データパス」プロセッサについても役に立つ。プロセッサの両方のタイプは、並列に複数の機能ユニット内の「マルチ命令語」を実行する。しかし、平行に行うことは本発明の制限でない、そして、一度にフェッチすると共に複数の命令をデコードするいかなるプロセッサも最適化プロセスで利益を得る。以下に説明されるように、この種のプロセッサとして、コードが適切に配置される場合、フェッチし、デコードし、ディスパッチするサイクル・ツー・サイクル命令は電力に対して最適化されることができる。
【００１５】
以前のパラグラフを考慮して、用語「プロセッサ」は、ここで用いられるように、様々な形のマイクロ・コントローラ及びデジタル信号処理装置（ＤＳＰ）を含むことができる。このために、以下の説明が、ＤＳＰ（ＤＳＰのＴＭＳ３２０一系統及び特にＴＭＳ３２０Ｃ６ｘＤＳＰ）に関してなされる。しかし、特別なプロセッサを選択することは、説明及び実例のためだけである。
【００１６】
プロセッサの概要
図１は、ＤＳＰプロセッサ１０のブロックダイヤグラムである。以下に説明されるように、プロセッサ１０はＶＬＩＷアーキテクチャを有し、単一ＣＰＵクロックサイクルの間、（「実行パケット」として）並列に実行されるべく、マルチ−命令語を（「フェッチ・パケット」として）フェッチする。この説明の例において、プロセッサ１０は５ナノ秒ＣＰＵサイクルタイムで動いて、サイクルごとに８つの命令まで実行する。
【００１７】
プロセッサ１０はＣＰＵコア１１を有する。そして、それはプログラム・フェッチユニット１１ａ、及び命令ディスパッチ及びデコード・ユニットそれぞれ１１ｂ及び１１ｃを有する。デコードされた命令を実行するために、プロセッサ１０は２つのデータパス１１ｄ及び１１ｅを有する。
【００１８】
命令デコードユニット１１ｃは、クロックサイクルごとにデータパス・ユニット１１ｄ及び１１ｅに最高８つの命令を有する実行パケットを分配する。データパス１１ｄ及び１１ｅは、それぞれ１６の汎用レジスタを含む。データパス１１ｄ及び１１ｅも、それぞれ４つの機能ユニット（Ｌ、Ｓ、Ｍ及びＤ）を含む。そして、それは汎用レジスタに接続している。このように、プロセッサ１０は８つの機能ユニットを有する。そして、それぞれは実行パケット内の命令の１つを実行できる。各機能ユニットは、それが実行できる一組の命令タイプを有する。
【００１９】
制御レジスタ１１ｆは、多様なプロセッサ操作を構成し、制御する手段を提供する。制御ロジック・ユニット１１ｇは、制御、テスト、エミュレーション及び割込み機能のためのロジックを有する。
【００２０】
プロセッサ１０も、プログラムメモリ１２、データ・メモリー１３及びタイマー１４から成る。その周辺回路は、直接メモリーアクセス（ＤＭＡ）コントローラ１５、外部記憶インターフェース１６、ホストポート１７及び電力低下ロジック１８を含む。電力低下ロジック１８は、ＣＰＵアクティビティ、周辺アクティビティ及びタイマー・アクティビティを消費電力を減らすために停止させることができる。本発明の特徴以外のプロセッサ１０の特徴と同じ、これらの電圧低下モードは、米国特許出願６０／０４６，８１１に記載されて、バックグラウンドで参照されて、本願明細書に引用したものとする。
【００２１】
プロセッサ１０は、ＲＩＳＣに類似のコードを実行し、アセンブラー言語命令セットを有する。換言すれば、そのＶＬＩＷの各々は、ＲＩＳＣ−タイプ命令から成る。これらの命令によって、書き込まれるプログラムは、マシンコードにアセンブラによって、コンバートされる。いくつかの他プロセッサのように、プロセッサ１０はマイクロコードまたは内部マイクロコード・インタープリタを用いない。しかし、ＲＩＳＣに類似の命令がプロセッサを制御するに関係なく、または、命令が内部で下位レベルに解読されるかどうかに関係なく、ここで記載されている本発明は適用できる。
【００２２】
この説明の実例において、８つの３２ビット命令は、ＶＬＩＷを作るために結合される。このように、作動中に、２５６のビット命令語を作るために、３２ビット命令は、一度にプログラムメモリ１２から８個フェッチされる。「フェッチ・パケット」は、メモリー１２からフェッチされるこれらの８つの命令から成る。
【００２３】
図２は、プロセッサ１０によって、用いられるフェッチ・パケット２０の基本フォーマットを例示する。フェッチ・パケット２０内の８つの命令の各々は、「スロット」２１と称されるロケーションに置かれる。このように、フェッチ・パケット２０は、スロット１、２、．．．８を有する。
【００２４】
全フェッチ・パケットが１つのＣＰＵサイクルにおいて、必ずしも実行されるというわけではないという点で、プロセッサ１０は他のＶＬＩＷプロセッサと異なる。フェッチ・パケットの全部または一部は、「実行パケット」として実行される。換言すれば、フェッチ・パケットは、完全にパラレルでありえるか、完全に直列でありえるか部分的に直列でありえる。完全にまたは部分的に直列のフェッチ・パケットの場合、そこではフェッチ・パケットの命令が実行すべき複数のサイクルを必要とするが、次のフェッチを、延期できる。フェッチ・パケット及び実行パケットのこの差異は、あらゆるフェッチ・パケットが、それらが並列に実行される全てであるかどうかに関係なく、８つの命令を含むのを許す。
【００２５】
プロセッサ１０のために、フェッチ・パケット２０の実行グループ化は、各命令内の「ｐ−ビット」２２により特定される。作動中に、命令ディスパッチ・ユニット１１ｂはｐビットをスキャンする。そして、各命令のｐビットの状態は次の命令がその命令と並列に実行されるか否かを、決定する。もしそうならば、その位置と２つの命令が同じサイクルにおいて、実行される同じ実行パケットにある。
【００２６】
図３は、フェッチ・パケット２０の実例を例示する。図２がフェッチ・パケット２０のためのフォーマットを例示するのに対して、図３はフェッチ・パケット２０が含むことがありえる命令の実例を例示する。フェッチ・パケット２０は８つの命令に対して典型的には５つ有し、図３のフェッチ・パケット２０は７つの命令を有する。各命令は数多くのフィールドを有する。そして、それはビットレベル・マシンコードにおいて、最終的に表される。
【００２７】
0003959194.tif 000002
ット２２としてコード化されることを示す。上記のように、フェッチ・パケット２０は、完全にパラレルで、単一の実行パケットとして実行されることができる。
【００２８】
中括弧［］は条件命令（条件レジスタの識別子を囲むこと）を示す。このように、図３内の最初の命令は、ゼロでないレジスタＡ２で条件づけられる。キャラクタ！は、「ｎｏｔ」を表す。従って、Ａ２がゼロである条件は［！Ａ２］として表される。条件レジスタ部は、これらの識別子から成る。
【００２９】
オペレーション・フィールドは、プロセッサ１０の命令セットから命令タイプを含む。命令タイプに続くものは、命令を実行する機能ユニットの指示である。図１と関連して上に述べたように、２つのデータパス１１ｄ及び１１ｅは、それぞれ４つの機能ユニットを有する。これらの機能ユニットは、Ｌ（論理）、Ｓ（シフト）、Ｍ（積算）及びＤ（データ）である。オペレーション・フィールドは、このように、構文［命令タイプ］［機能ユニット識別子］を有する。
【００３０】
いくらかの命令タイプは１つの機能ユニットだけにより実行されることができる。そして、いくつかはそれらの数の１つにより実行されることができる。例えば、Ｍユニットだけは、積算（ＭＰＹ）を実行できる。他方、加算（ＡＤＤ）はＬ、ＳまたはＤユニットによって、実行できる。命令への機能ユニットの対応付けは、それらの「マッピング」と呼ばれる。
【００３１】
図４Ａは、プロセッサ１０のために、機能ユニットへの命令タイプのマッピングの実例を示すテーブルである。それは、以下にコード最適化と関連して設定される実例の理解に役立つ。図４Ｂは、各ニーモニックの説明を例示する。
【００３２】
命令タイプへの機能ユニットのマッピングが、どの命令が並列に実行されることができるかどうか、したがって、フェッチ・パケットが、複数の実行パケットになるかどうかについて決定する。例えば、Ｍユニットが積算（ＭＰＹ）を実行することができさえすれば、実行パケットは２つのＭＰＹ命令（２つのデータパス１１ｄ及び１１ｅの各々により実行されるもの）を具備できる。対照的に、Ｌ、Ｓ及びＤユニットは、加算（加算）を実行できる。このように、実行パケットは６つぐらいの加算命令を包含できる。
【００３３】
再び図３を参照して、命令のオペランド・フィールドは、オペレーション・フィールドに続く。命令タイプに従い、オペランド・フィールドは１つ以上のソース・レジスタ、１つ以上の定数及び宛先レジスタを確認できる。
【００３４】
図５は、取出しパケット２０ごとにマルチ実行パケットを具備しているコードの例である。この例では、２つのフェッチ・パケット２０が、ある。最初のフェッチ・パケット２０は、３つの実行パケット、ＥＰ１、ＥＰ２及びＥＰ３において、実行される。第２のフェッチ・パケット２０は、４つの実行パケット、ＥＰ１、ＥＰ２、ＥＰ３及びＥＰ４において、実行される。
【００３５】
上記のプロセッサ・アーキテクチャを一般化するために、実行命令ワード（すなわち実行パケット）は、ＣＰＵサイクル中に並列に実行される最高８つの命令を含む。実行パケット内の各命令は、データーパス１１ｄ及び１１ｅの異なる機能ユニット（Ｌ、Ｄ、ＳまたはＭ）の１つを用いる。命令マッピングは、どの命令タイプが実行パケット内で二重にすることができるかについて決定する。
【００３６】
命令語の使用は、このように電力最適化のための特有な技術として役に立つ。以下に説明されるように、命令語内に、各スロットのために、サイクルからサイクルへの変化が最小にされるように、命令を配置できる。
【００３７】
電力最適化プロセス
図６は、本発明のコード最適化プロセスを説明する。各ステップは、異なるコード最適化技術を含む。各ステップは、単独で独立の符号最適化テクニックとしてまたは他のステップの１つ以上と協力して実行してもよい。
【００３８】
そのステップのコード最適化の１つ以上の実例と共に、これらのステップの各々は、以下に説明される。コード例は、上記のように図１−５と関連してプロセッサのアーキテクチャと一致している。特に、実例は実行パケットに分割されることができるフェッチ・パケットを用いるプロセッサ１０と一致している。そして、フェッチ・パケット及び実行パケットのこの差異に対する特記事項は注目される。
【００３９】
しかし、本発明は、フェッチ・パケットが、従来の意味における「パケット」を用いないプロセッサのためのと同じ、実行パケットと同じものであるプロセッサに等しく役立つ。最適化されるコードの共通の特性は、それが、「マルチ命令語」を有することである。ターム「マルチ命令語」は、一組の命令を示すために用いられる。そこではセット内の命令が、いくつかの点で処理のためのプロセッサ内に集められる（その処理には、フェッチし、デコードし、実行し、ディスパッチすること、または、いくつかのこれらの機能の組合せを含むことができる）、そして、実行はプロセッサの異なる機能ユニットにより行われる。「マルチ命令語」はフェッチ・パケットとしてまたは実行パケットとして組み立てられることが可能である、または、それは従来のパケット構造と異なる構造を具備できる。
【００４０】
一般に、各最適化手法は、アセンブリーコードの２進数表示のサイクル・ツー・サイクル・ビット変化を見つけて、最小にする方向を最終的に目指す。これは、命令の数及びタイプに関して全面機能性に実質的に影響せずに、遂行される。機能性が実質的に同じものであるので、命令がプログラムメモリからフェッチされるときに、そして、それらがデコ―ドされて、ディスパッチするときに、結果はより少ないノード切替となる。その結果、電力消費を減軽する。全面最適化プロセスの各ステップは、ビット変化の異なるカテゴリを見つけて、最小にする方向を目指す。一般的な意味において、コードは機能の特徴に対する多様な構文特徴に対してスキャンされる。
【００４１】
コード最適化プロセスのステップ６１は、スロット割当てをフェッチ・パケット内に再配列している。各フェッチ・パケットのために、命令はスロット割当てによって、調べられる。機能ユニットのサイクルからサイクルへの変化が最小にされるように、フェッチ・パケット内の命令が再配列されることができるかどうか決定される。ステップ６１の効果は、機能ユニット割当ての「垂直整列」である。
【００４２】
図７Ａ及び７Ｂは、ステップ６１の実例を例示する。図７Ａは、ステップ６１の最適化の先行する命令ストリーム７０を示す。図７Ｂは、ステップ６１によって、最適化され、ほとんど同じ命令ストリーム７０を示す。
【００４３】
命令ストリーム７０は、３つのフェッチ・パケットを有する。説明されるように、第２のフェッチ・パケットにおいて、ステップ６１の最適化は前のフェッチ・パケット内のＡＤＤ．Ｌ１オペレーション・フィールドがあったスロットに、ＡＤＤ．Ｌ１Ｘオペレーション・フィールドを具備している命令を移動する。オペレーション・フィールドは、交差パスを示している「Ｘ」を加えたものと同じである。第３のフェッチ・パケットにおいて、ステップ６１は前の２つのフェッチ・パケット内の対応するオペレーション・フィールドを有する命令と同じスロットへ、２つの命令（オペレーション・フィールドＡＤＤ．Ｌ１Ｘを有するもの及びオペレーション・フィールドＡＤＤ．Ｌ２Ｘを有する他のもの）を移動する。同様に、ＬＤＷ．Ｄ２命令が前のパケットのＬＤＷ．Ｄ２命令として、同じスロットを占めることができるように、ステップ６１はＢ（分岐）命令を移動する。同じスロットが同じ命令タイプを有するように、ＮＯＰ（ノーオペレーション）命令は位置保持記号として用いられる。
【００４４】
ステップ６１は、複数の実行パケットを有するフェッチ・パケットに加えられることが可能である。この場合、実行パケットの順序は保存されなければならない、しかし、スロット割当ては実行パケット内で変わることができる。一般に、フェッチ・パケット（例えば図７Ａ及び７Ｂのコード）につき単一の実行パケットを有するコードは、フェッチ・パケットごとにマルチ実行パケットを有するコードより大きい範囲に最適化される。
【００４５】
上記の実例は、命令が命令タイプ及び機能ユニット割当てを含んでいるオペレーション・フィールドを有するプロセッサ１０に、特有のものである。他のプロセッサのために、機能ユニット割当てが、異なるフィールドにあってもよい。いずれにしても、ステップ６１の最適化は、フェッチ・パケット内で機能ユニット割当てを整列させるために命令を再整理する方向を目指す。機能ユニット割当てのこの整列は、各スロットにおいて、１サイクルから次のサイクルまで変化するビットの数を減らす。
【００４６】
ステップ６１のように、ステップ６３はそれらの間の不必要な切替を避けるために機能ユニット割当てを整列させる。しかし、ステップ６３は既存の命令を再整理することよりむしろ新しい機能ユニット割当てを提供することに関係する。
【００４７】
ステップ６３は、機能ユニットの複数のタイプによって、実行可能であるいくつかの命令があるという事実に基づいている。再び図４を参照して、例えばプロセッサ１０は、Ｌ及びＳ機能ユニット上で実行されることができるある命令を有する。そして、これらのいくつかはＤ装置上で同様に実行される。
【００４８】
図８Ａ及び８Ｂは、それぞれ最適化されていないコード及び最適化コードの例である。ここで、最適化はステップ６３により実行された。上記のように、命令ストリームは３つのフェッチ・パケットを有する。そして、各フェッチ・パケットは同じスロット内の加算命令を有する。加算命令が機能ユニット（Ｄ、ＳまたはＬ）のどれにでも実行されることができるので、図８Ａの最適化されていないコードは実行可能である。しかし、それら間の切替は、不必要である。したがって、図８Ｂにおいて、同じ機能ユニット（Ｌ）は、全ての３つの加算命令のために用いられる。
【００４９】
図９Ａ及び９Ｂは、ステップ６３の最適化のもう１つの例である。この例は、マルチ実行パケットを具備しているフェッチ・パケットの最適化を説明する。この場合、機能ユニット割当てのサイクル・ツー・サイクル解析は、パケットを実行するように指示される。しかし、実行パケットがフェッチ・パケットとしてフェッチされる場合、同じ概念が適用されるだろう。
【００５０】
図９Ａ及び９Ｂで説明される最適化は、機能ユニットのサイクル・バイ・サイクル使用を示すことによって、最も理解される。最適化の前のコードである図９Ａのコードを、図にすると次のようになる：
【００５１】
0003959194.tif 000003
【００５２】
図９Ｂの最適化コードを、図にすると次のようになる：
0003959194.tif 000004
【００５３】
図８Ａ及び８Ｂの例におけるように、機能ユニットはサイクルからサイクルまで機能ユニット間の不必要な切替を回避するために再割当てされる。最適化は、機能ユニットのよりよい整列に結果としてなる。
【００５４】
ステップ６４は、命令が条件フィールド割当てを具備する方向を目指す。プロセッサ１０の特性は、３ビットの条件レジスタ・フィールドが無条件の命令に対して全て０であるということである。レジスタＢ０、Ｂ１及びＡ１の条件は、条件フィールド内にただ１つの「１」を具備する。他方、レジスタＢ２及びＡ２の条件は、２つの「１」を具備する。したがって、無条件の命令から条件命令まで変わるビット数を最小にするために、レジスタＢ０、Ｂ１及びＡ１は、むしろ望ましい。
【００５５】
図１ＯＡ及び１ＯＢは、ステップ６４の例を説明する。図１ＯＢの最適化コードと図１ＯＡの最適化されていないコードとを比較すると、最初のサイクルにおいて、ステップ６４はＳ２及びＤ２上のＡＤＤを交換する。この変更の結果として、条件レジスタ・フィールド及びオペランド・フィールドにおいて、変化しているビット数は、減少する。スロット５及び６だけを考慮して、最適化されていないコードにおいて、条件フィールド及びオペランド・フィールドは、次のようになる：
【００５６】
0003959194.tif 000005
【００５７】
これは、１５のビット変化に結果としてなる：
Ｌ２命令（２＋２＋２＋２）に対して８、そして、
Ｄ２命令（２＋１＋２＋２）に対して７。
【００５８】
最適化コード、スロット５及び６において、これらのフィールドは、次のようになる：
0003959194.tif 000006
【００５９】
これは、１３のビット変化に結果としてなる：
Ｌ２命令（０＋１＋２＋２）に対して５、そして、
Ｄ２命令（２＋２＋２＋２）に対して８。
この最適化は、命令ディスパッチ装置１１ｂ及び命令デコードユニット１１ｃによって、電力使用を減らす。
【００６０】
最適化プロセスのステップ６５は、命令のオペランド・フィールドを分析する。オペランド・フィールドにおいて、変化しているビット数が結果としてより小さくなる場合、オペランドが、再整理されるか、レジスタが再割当てされる。上記のように図３と関連して、命令タイプに従い、オペランド・フィールドは多様なソース・レジスタ、宛先レジスタまたは定数を識別する。それは、命令の全ビット・サイズに比例した大きいフィールドである。例えば、プロセッサ１０のために、オペランド・フィールドは３２ビット命令の１５ビットである。したがって、ステップ６５は電力最適化に重要な影響を及ぼすことができる。
【００６１】
図１１Ａ及び１１Ｂは、ステップ６５の最適化の例である。この例では、オペランドの再配列は、命令内にある。図１１Ａの最適化されていないコードは、図１１Ｂにおいて、最適化される。単一の実行サイクルにおいて、実行されている各フェッチ・パケットについては、２つのフェッチ・パケットが示される。
【００６２】
２つのサイクルの各々に対してスロット＃２だけを考慮すると、図１１Ａの最適化されていないコードは次のようになる：
0003959194.tif 000007
【００６３】
図１１Ｂの最適化コードは、以下の通りである：
0003959194.tif 000008
【００６４】
１１のための二進コードは１０１１である。そして、１２のための二進コードは１１００である。したがって、スロット＃２内のオペランドの再配列は、オペランド・フィールドが６までに変化しているビット数を減らす。
【００６５】
図１２Ａ及び１２Ｂは、ステップ６５のもう１つの例で、それぞれ、最適化されていないコード及び対応する最適化コードを示している。ここでは、オペランドの再配列は、２つの異なる命令間の切換えを含む。３つのフェッチ・パケットのスロット２及び８が示される。図１２Ｂの最適化コードに図ｌ２Ａの最適化されていないコードの第２のサイクル（ＦＰ２）のフェッチ・パケットを比較すると、Ｓ２及びＬ２上のＳＵＢ命令が切り換えられている。これは、スロット２及び８のオペランド・フィールドにおいて、変化しているビット数を減らす。
【００６６】
ステップ６５は、また、レジスタ使用の全アセスメントについては完成していることができる。所与の命令において、用いるレジスタの選択があるときに、先行する命令か次の命令から最少のビット変化を引き起こすレジスタが選ばれることができる。
【００６７】
ステップ６７は、より滑らかなコード・プロファイルを提供するためにＮＯＰ（ノーオペレーション）命令を再配置している。より詳しくは、ステップ６７は、１つのフェッチ・パケットからコードの機能性に影響を及ぼすことのない他のフェッチ・パケットまで移動され得るＮＯＰがあるかどうかを決定する。
【００６８】
それぞれ、図１３Ａ及び１３Ｂは最適化されていないコード及び対応する最適化コードの例を説明する。ここで、最適化はステップ６７に従っている。コードは、８つのフェッチ・パケットＦＰ１．．．ＦＰ８を有する。陰影をつけられたスロットは、ＮＯＰ命令でない命令を含む。図１３Ｂの例にて図示したように、多くのＮＯＰ命令が、１つのフェッチ・パケットから他のフェッチ・パケットまで移動された。ＮＯＰ命令が全て０であるので、それらの配置はサイクルからサイクルまで変化しているビットの数に、重大な影響を及ぼす。
【００６９】
ステップ６８は、ＮＯＰ命令に対してスロットがＮＯＰからｎｏｎ−ＮＯＰ命令まで切り換える回数を減らすためにダミー命令を加算している。これらのダミー命令は、データの完全性に逆に影響を及ぼすことなく、大部分の先行する命令や次の命令を二重にする。
【００７０】
図１４Ａ及びｌ４Ｂは最適化されていないコード及び、それぞれ、対応する最適化コードの例である。ここで、最適化はステップ６８に従っている。３つのフェッチ・パケットの単一のスロットだけが示される。図１４Ａは最適化されていないコードの例で、第２のサイクル内のスロット２内のＮＯＰ命令を有している。図１４Ｂは最適化コードである。ここで、ＮＯＰはダミーＭＰＹ命令と置き換えられている。結果が宛先レジスタ（Ｂｘｘ）に置かれたので、ダミー命令はデータの保全性に影響を及ぼさない。そして、それはコードセグメント内の未使用のレジスタである。ダミー命令が先行する命令及び次の命令を、多く二重にするので、プロセッサ１０の内部トグル・アクティビティは減少する。ステップ６８は、ループ・コード・セグメントにとって最も効果的である。
【００７１】
図１５Ａ及び１５Ｂは、それぞれ、最適化されていないコード及び対応する最適化コードのもう１つの例を説明する。ここで、最適化がステップ６８に従っている。この例は、コード・セグメントのループ内にある。図１４Ａにおけるように、スロット２内の図１５Ａの最適化されていないコードにおいて、命令はｎｏｎ−ＮＯＰからＮＯＰまでｎｏｎ−ＮＯＰに対して切り替えをする。図１５Ｂの最適化コードにおいて、ダミー命令は間違った条件命令である。間違った条件命令のために、機能ユニットから宛先レジスタへの結果の転送は、常に使用禁止にされる。条件レジスタ（Ｂ０）は、ダミー命令の用途に、確保されている。ループに入る前に、条件レジスタは、いくつかの値にセットされる。図１５Ａ及び１５Ｂの例において、Ｂ０はダミー命令レジスタのために用いられ、また、ループ・カウンタでもある。Ｂ０がループの最終的なパスまで、最終的なパス以外の全てに対してゼロでないので、条件命令の結果はＡ１２へ書き込まれない。最終的なパスに関して、結果はＡ１２へ書き込まれる。しかし、Ａ１２が先行する命令において、書き込まれなくて、次の命令内のソースとして、用いられないので、データの完全性は影響を受けない。サイクル３において、命令は、コードのオリジナルの関数であったＡ１２に書き込む。
【００７２】
典型的には、ステップ６８のための最適のダミー命令は、図１５Ａ及び１５Ｂの例におけるような、間違った条件を用いているダミー命令である。しかし、条件レジスタが有効でないときに、いくつかのケースにおいて、例えば、代替ダミー命令（例えば図１４Ａ及び１４Ｂのそれ）を用いることができる。ステップ６８の結果として、より少ないビットは、プログラムメモリ１２から入来命令ストリーム内の状態を変える。また、より少ないノードは、デコードユニット１１ｃにおいて、変化する。
【００７３】
最適化プロセスのステップ６９は、プログラムメモリ１２内のフェッチ・パケットのアドレス・ロケーションを分析することである。例えばループ内におけるように、繰り返し実行されるコードのセクションのために、プログラムメモリ・アドレスラインに変化しているビットの数は、最小にされ得る。
【００７４】
ステップ６９の簡略例として、ループの最初のフェッチ・パケットがアドレス．．．．０１１１を有し、次のフェッチ・パケットがプログラムメモリ１２内のアドレス．．．．１０００を有すると仮定する。プログラムメモリ１２が最初のパケットへのアクセスから第２のパケットへのアクセスまで切り換えるごとに、４つのアドレスビットが変化する。第２のパケットがアドレス．．．．０１１０に移動される場合には、１ビットだけが変化する。
【００７５】
最適化プロセスの自動化
上記の最適化テクニックの各々は、手動でアセンブリーコード・プログラマによって、実行できる。しかし、本発明のより洗練された実施例において、コード生成ツールについては、テクニックのうちの少なくとも１つは、自動的に実行される。この種のツールは、特別なテクニックが適用できるコードシーケンスを検出して、そのテクニックにより要求される最適化を実行するようにプログラムされる。
【００７６】
上記のステップのうちのいくつかは、１つのサイクルから次のサイクルまでコードの機能性に影響を及ぼすことなく達成される。これらのステップは、ステップ６１、６３、６４、６５及び６９を含む。
【００７７】
上記のステップの他のものは、コード機能性に影響を及ぼし得る。これらのステップは、ステップ６７及び６８を含む。これらの最適化テクニックのために、自動最適化プロセスには、機能性問題を解決するために経験的規則を含むことができる。あるいは、最適化がプログラマのオプションで可能かもしれないことを示して、最適化プロセスは、プログラマにメッセージを出力することもできる。
【００７８】
他の実施例
現在の本発明が詳細に記載されていたにもかかわらず、多様な変更、置換及び修正が添付の請求項に記載の本発明の精神と範囲から逸脱せずに、作られることが可能であると理解されなければならない。
【００７９】
以上の説明に関して更に以下の項を開示する。
(1)   １つ以上のプロセッサーサイクルの間に、語の各々における命令が前記プロセッサの異なる機能ユニットにより実行されるように、マルチ命令語を処理するプロセッサによる節電使用方法であって：
多くの前記命令語の構文を比較するステップ、
サイクルからサイクルまで、前記命令語のいずれもの２進数表示内のビット変更の数が、前記命令語の機能性に実質的に影響を及ぼすことなくビットを変えて減少されることができるかどうかを決定するステップ、そして、前記決定ステップの前記命令語のうちの少なくとも１つを変更するステップ
を含む節電使用方法。
【００８０】
(2)   項(1) の方法において、前記比較、決定及び変更ステップは、各前記命令内で機能ユニット識別子に対して指示され、かつ、前記変更ステップは、命令を前記命令語内に再配列することにより実行される節電使用方法。
【００８１】
(3)   項(1) の方法において、前記比較、決定及び変更ステップは、機能ユニット割当てに対して各前記命令内で指示され、かつ、前記変更ステップは、他の機能ユニット割当てを有する前記機能ユニット割当てを置き換えることにより実行される節電使用方法。
【００８２】
(4)   項(1) の方法において、前記比較、決定及び変更ステップは、条件レジスタ割当てに各前記命令内で指示され、かつ、前記変更ステップは、条件レジスタを再割当てすることにより実行される節電使用方法。
【００８３】
(5)   項(1) の方法において、前記比較、決定及び変更ステップは、オペランドに各前記命令内で指示され、かつ、前記変更ステップは、オペランドを再配列することにより実行される節電使用方法。
【００８４】
(6)   項(1) の方法において、前記比較、決定及び変更ステップは、オペランドに各前記命令内で指示され、かつ、前記変更ステップは、オペランド・ロケーションを再割当てすることにより実行される節電使用方法。
【００８５】
(7)   項(1) の方法において、前記比較、決定及び変更ステップは、ノー・オペレーション命令に指示され、かつ、前記変更ステップは、前記ノー・オペレーション命令を前記命令語の１つから他の命令に移動することにより実行される節電使用方法。
【００８６】
(8)   項(1) の方法において、前記比較、決定及び変更ステップは、ノー・オペレーション命令に指示され、かつ、前記変更ステップは、ダミー命令を有する前記ノー・オペレーション命令を置き換えることにより実行される節電使用方法。
【００８７】
(9)   項(1) の方法において、前記プロセッサが非常に長い命令語プロセッサである節電使用方法。
【００８８】
(10)  項(1) の方法において、前記プロセッサが二重のデーターパス・プロセッサである節電使用方法。
【００８９】
(11)  項(1) の方法において、前記命令語の各々における全ての命令がメモリーから実質的に同じ時間でフェッチされるように、前記マルチ命令語は、フェッチ・パケットである節電使用方法。
【００９０】
(12)  項(1) の方法において、：
前記マルチ命令語の１つ以上のループの位置を決めるために前記マルチ命令語をスキャンすること、及び、そこにおいて、前記比較、決定及び変更ステップは、前記プログラムメモリ・アドレスのいずれもの２進数表示内のビット変更の数を減らすように指示されることを含む節電使用方法。
【００９１】
(13)  ＶＬＩＷプロセッサ（１０）またはマルチ命令語（２０）を用いる他のプロセッサのアセンブリーコードを最適化する方法であって、それぞれはプロセッサ（１０）の異なる機能ユニット（１１ｄ及び１１ｅ）に実行される命令を含む。命令語（２０）は、１つ以上の符号最適化テクニックにより変更される（図６）。典型的には、変更はマシンコード内のサイクル・ツー・サイクル・ビット変更をより少なくする結果をもたらし、それは電力消費を減少することになる。
【図面の簡単な説明】
【図１】図１は、ＶＬＩＷＤＳＰプロセッサのブロックダイヤグラムである。
【図２】図２は、図１のプロセッサによって、用いられるフェッチ・パケットの基本フォーマットを例示する。
【図３】図３は、図２のフェッチ・パケットの例を例示する。
【図４】Ａは、そのデータパス内の機能ユニットに図１のプロセッサのための命令符号のマッピングを例示する。Ｂは、図４Ａのニーモニックを記述しているテーブルである。
【図５】図５は、マルチ実行パケットを有するフェッチ・パケットを例示する。
【図６】図６は、本発明のコード最適化プロセスを例示する。
【図７】それぞれ、対応する最適化コードと共に最適化されていないコードの例を例示する。ここで、最適化は図６のステップ６３により実行される。
【図８】それぞれ、対応する最適化コードと共に最適化されていないコードの例を例示する。ここで、最適化は図６のステップ６３により実行される。
【図９】それぞれ、対応する最適化コードと共に最適化されていないコードの例を例示する。ここで、最適化は図６のステップ６３により実行される。
【図１０】それぞれ、対応する最適化コードと共に最適化されていないコードの例を例示する。ここで、最適化は図６のステップ６４により実行される。
【図１１】それぞれ、対応する最適化コードと共に最適化されていないコードの例を例示する。ここで、最適化は図６のステップ６５により実行される。
【図１２】Ａ及びＢは、それぞれ、対応する最適化コードと共に最適化されていないコードの例を例示する。ここで、最適化は図６のステップ６５により実行される。
【図１３】Ａ及びＢは、それぞれ、対応する最適化コードと共に最適化されていないコードの例を例示する。ここで、最適化は図６のステップ６７により実行される。
【図１４】Ａ及びＢは、それぞれ、対応する最適化コードと共に最適化されていないコードの例を例示する。ここで、最適化は図６のステップ６８により実行される。
【図１５】Ａ及びＢは、それぞれ、対応する最適化コードと共に最適化されていないコードの例を例示する。ここで、最適化は図６のステップ６８により実行される。
【符号の説明】
１０  プロセッサ
１１  ＣＰＵコア
１２  プログラムメモリ
１３  データ・メモリ
１８  電力低下ロジック
２０  フェッチ・パケット
【図１】
0003959194.tif 000009
【図２】
0003959194.tif 000010
【図３】
0003959194.tif 000011
【図４】
0003959194.tif 000012
【図５】
0003959194.tif 000013
【図６】
0003959194.tif 000014
【図７】
0003959194.tif 000015
【図８】
0003959194.tif 000016
【図９】
0003959194.tif 000017
【図１０】
0003959194.tif 000018
【図１１】
0003959194.tif 000019
【図１２】
0003959194.tif 000020
【図１３】
0003959194.tif 000021
【図１４】
0003959194.tif 000022
【図１５】
0003959194.tif 000023