(57)【要約】【課題】  バスに出力されるデータのビット遷移を抑止し、計算機システムの消費電力を低減することができる最適化装置、最適化方法及びプログラムを提供すること。【解決手段】  本発明にかかるプログラムは、直前の命令コード列と発生しようとしている命令コード列とを入力し、直前の命令コード列と発生しようとしている命令コード列とのビット遷移数を計算し、計算されたビット遷移数に応じて、発生しようとしている命令コード列の命令コードの配列を並び替え、直前の命令コード列と発生しようとしている命令コード列とを出力するものである。【選択図】  図４
2006004123.tif 000002
【特許請求の範囲】
【請求項１】
複数の命令を並列に処理可能なコンピュータシステムで実行される命令コードを最適化する処理をコンピュータに実行させるプログラムであって、前記処理は、
並列に実行する命令コードが複数配列された第１の命令コード列と並列に実行する命令コードが複数配列され前記第１の命令コード列の次に実行される第２の命令コード列とを入力し、
前記第１の命令コード列と前記第２の命令コード列とのビット遷移数を計算し、
前記計算されたビット遷移数に応じて、前記第２の命令コード列の命令コードの配列を並び替え、
前記第１命令コード列と前記並び替えられた第２の命令コード列とを出力する、
プログラム。
【請求項２】
前記並び替えは、前記計算されたビット遷移数が最小となるように、前記第２の命令コード列の命令コードの配列を並び替える、
請求項１に記載のプログラム。
【請求項３】
前記並び替えは、
第２の命令コード列の命令コードの配列である、第１の配列パターンと、前記第１の配列パターンと異なる第２の配列パターンとを用意し、
前記第１の配列パターンによる前記ビット遷移数と前記第２の配列パターンによる前記ビット遷移数とを比較し、前記ビット遷移数が小さい配列パターンを判定し、
前記出力は、前記ビット遷移数が小さいと判定された前記第１あるいは第２の配列パターンからなる前記第２の命令コード列を出力する、
請求項１又は２に記載のプログラム。
【請求項４】
前記並び替えは、前記第２の命令コード列に含まれる命令コードに対する命令スロットの割り当てを変更することによって、命令コードの配列を入れ替える、
請求項１乃至３のいずれかに記載のプログラム。
【請求項５】
前記第１の命令コード列に含まれる第１の命令コードと前記第２の命令コード列に含まれる第２の命令コードとのスレッド番号に応じて、前記第１の命令コードと前記第２の命令コードとを入れ替える、
請求項１乃至４のいずれかに記載のプログラム。
【請求項６】
複数の命令を並列に処理可能なコンピュータシステムで実行される命令コードを最適化する最適化方法であって、
並列に実行する命令コードが複数配列された第１の命令コード列と並列に実行する命令コードが複数配列され前記第１の命令コード列の次に実行される第２の命令コード列とを入力し、
前記第１の命令コード列と前記第２の命令コード列とのビット遷移数を計算し、
前記計算されたビット遷移数に応じて、前記第２の命令コード列の命令コードの配列を並び替え、
前記第１命令コード列と前記並び替えられた第２の命令コード列とを出力する、
最適化方法。
【請求項７】
複数の命令を並列に処理可能なコンピュータシステムで実行される命令コードを最適化する最適化装置であって、
並列に実行する命令コードが複数配列された第１の命令コード列と並列に実行する命令コードが複数配列され前記第１の命令コード列の次に実行される第２の命令コード列とを入力する入力部と、
前記第１の命令コード列と前記第２の命令コード列とのビット遷移数を計算する計算部と、
前記計算されたビット遷移数に応じて、前記第２の命令コード列の命令コードの配列を並び替える並び替え部と、
前記第１命令コード列と前記並び替えられた第２の命令コード列とを出力する出力部と、
を備える最適化装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、最適化装置、最適化方法及びプログラムに関し、特に、複数の命令を並列に処理可能なコンピュータシステムで実行される命令コードを最適化する最適化装置、最適化方法及びプログラムに関する。
【背景技術】
【０００２】
近年、計算機システム（コンピュータシステム）は、携帯可能なノート型パーソナルコンピュータや携帯情報端末などより小型のものや、より処理速度の高速なものが普及している。このような計算機システムの小型化や高速化は、半導体プロセスの微細化や回路の動作周波数の高速化等によって実現されているが、これに伴い計算機システムの消費電力が増大しており、消費電力の低減が強く望まれている。
【０００３】
図８に、一般的な計算機システムの構成を示す。この計算機システム８００は、図に示されるように、命令メモリ８０１、命令デコーダ８０２、データメモリ８０３、演算器８０４を備えている。命令メモリ８０１と命令デコーダ８０２とは、命令バス８０５を介して接続され、データメモリ８０３と演算器８０４とは、データバス８０６を介して接続されている。
【０００４】
命令メモリ８０１には、あらかじめ実行コードが格納されている。この実行コードは、計算機システム８００で実行可能なコードであり、命令コードが実行順に配置されている。
【０００５】
例えば、実行コードの処理が実行される場合、まず、実行コードに含まれる命令コードが順に命令メモリ８０１から命令デコーダ８０２へ命令バス８０５を介して転送される。次いで、命令デコーダ８０２は、命令メモリ８０１から転送された命令コードをデコードし、データメモリ８０３及び演算器８０４へ制御信号や、データメモリ８０３へのアクセス番地を出力する。次いで、演算器８０４は、命令デコーダ８０２からの制御信号やアクセス番地に従い、データメモリ８０３からデータバス８０６を介してデータを読み出し、所定の演算を行って、演算結果をデータバス８０６を介してデータメモリ８０３へ書き込む。こうして、実行コードの命令コードが実行される。
【０００６】
このような計算機システムでは、クロックサイクル毎に、命令メモリ８０１から命令デコーダ８０２へ命令コードが転送され、この命令コードの転送の際に命令バス８０５へ信号を出力するスイッチング回路において電力（スイッチングパワー）が消費されてしまう。一般に、バスに信号を出力するスイッチング回路の消費電力は、転送するデータのビット遷移（ビット反転）によるスイッチング回数に比例する。
【０００７】
そこで、転送するデータのビット遷移を抑え消費電力を低減する方法として、例えば、特許文献１や２が知られている。特許文献１では、計算機システムの内部において、前にバスに出力したデータを記憶しておき、ＮＯＰ命令などのようにバスを使用しない命令の場合に、記憶しておいた前のデータをバスに出力し、バスの状態を維持することにより消費電力を低減させている。
【０００８】
また、特許文献２では、計算機システムの実行コードを発生する装置において、１つの命令に対して複数の命令コードを割り当て、命令コードを発生する際に、直前の命令コードと比較してビット遷移数（反転ビット数）が少なくなるように、複数割り当てられた命令コードの中から、１つの命令コードを選択し発生させることにより、計算機システムでこの命令コードを実行したときの消費電力を低減させている。
【０００９】
しかしながら、特許文献１の方法では、計算機システムにデータを記憶する回路やバスへの出力を切替える回路等が新たに必要となってしまう。また、特許文献２の方法では、１つの命令に対して複数のコードを割り当てるため、命令ビット幅が増加し、命令バスのバス幅やバスのスイッチング回路等が増加したり、命令デコーダの変換テーブル等が増大してしまう。すなわち、これらの方法では、ハードウェア等の構成が冗長化するため、結果的に、消費電力の増大を招くという問題がある。
【００１０】
一方、複数のプロセッサ（演算器）を同時に使用して、計算機システムの処理能力を向上させるマルチプロセッサシステムが知られている。マルチプロセッサシステムの処理方式としては、主に、複数のプロセッサが複数の異なるデータを並列処理するＭＩＭＤ（Multiple Instrucion/Multiple Data）が採用されている。
【００１１】
マルチプロセッサシステム用のオブジェクトコードを生成するコンパイラでは、各プロセッサにおいて異なる命令コードを並列に処理するようなスケジューリングが行われている。また、コンパイラでは、例えば、命令やスレッドの同期をとるためにＮＯＰ命令を挿入したり、データの依存関係によって、同じサイクル内で並列に処理する命令の命令スロットを入れ替える等の最適化も行われている。
【００１２】
このようなマルチプロセッサシステムでは、複数のプロセッサ毎に命令メモリから命令デコーダへ命令バスを介して命令コードが転送されるため、上記のようなバスの消費電力の増大はより大きな問題となる。
【特許文献１】特開平４−１５１７５５号公報
【特許文献２】特開平９−６２４２２号公報
【発明の開示】
【発明が解決しようとする課題】
【００１３】
このように、従来のマルチプロセッサシステム等の計算機システムでは、バスに出力されるデータのビット遷移を少なくすると、ハードウェア等の構成を冗長化する必要があるため、消費電力が増大するという問題点があった。
【００１４】
本発明は、このような問題点を解決するためになされたもので、本発明の目的は、ハードウェア等の構成を冗長化することなく、バスに出力されるデータのビット遷移を抑止し、計算機システムの消費電力を低減することである。
【課題を解決するための手段】
【００１５】
本発明にかかるプログラムは、複数の命令を並列に処理可能なコンピュータシステム（計算機システム）で実行される命令コードを最適化する処理をコンピュータに実行させるプログラムであって、前記処理は、並列に実行する命令コードが複数配列された第１の命令コード列と並列に実行する命令コードが複数配列され前記第１の命令コード列の次に実行される第２の命令コード列とを入力し、前記第１の命令コード列と前記第２の命令コード列とのビット遷移数を計算し、前記計算されたビット遷移数に応じて、前記第２の命令コード列の命令コードの配列を並び替え、前記第１命令コード列と前記並び替えられた第２の命令コード列とを出力するものである。これにより、ハードウェア等の構成を冗長化することなく、バスに出力されるデータのビット遷移を抑止でき、計算機システムの消費電力を低減することができる。
【００１６】
上述のプログラムにおいて、前記並び替えは、前記計算されたビット遷移数が最小となるように、前記第２の命令コード列の命令コードの配列を並び替えるものであってもよい。これにより、さらに計算機システムの消費電力を低減することができる。
【００１７】
上述のプログラムにおいて、前記並び替えは、第２の命令コード列の命令コードの配列である、第１の配列パターンと、前記第１の配列パターンと異なる第２の配列パターンとを用意し、前記第１の配列パターンによる前記ビット遷移数と前記第２の配列パターンによる前記ビット遷移数とを比較し、前記ビット遷移数が小さい配列パターンを判定し、前記出力は、前記ビット遷移数が小さいと判定された前記第１あるいは第２の配列パターンからなる前記第２の命令コード列を出力するものであってもよい。これにより、効果的に計算機システムの消費電力を低減することができる。
【００１８】
上述のプログラムにおいて、前記並び替えは、前記第２の命令コード列に含まれる命令コードに対する命令スロットの割り当てを変更することによって、命令コードの配列を入れ替えるものであってもよい。これにより、効率よく計算機システムの消費電力を低減することができる。
【００１９】
上述のプログラムは、前記第１の命令コード列に含まれる第１の命令コードと前記第２の命令コード列に含まれる第２の命令コードとのスレッド番号に応じて、前記第１の命令コードと前記第２の命令コードとを入れ替えるものであってもよい。これにより、さらに計算機システムの消費電力を低減することができる。
【００２０】
本発明にかかる最適化方法は、複数の命令を並列に処理可能なコンピュータシステムで実行される命令コードを最適化する最適化方法であって、並列に実行する命令コードが複数配列された第１の命令コード列と並列に実行する命令コードが複数配列され前記第１の命令コード列の次に実行される第２の命令コード列とを入力し、前記第１の命令コード列と前記第２の命令コード列とのビット遷移数を計算し、前記計算されたビット遷移数に応じて、前記第２の命令コード列の命令コードの配列を並び替え、前記第１命令コード列と前記並び替えられた第２の命令コードとを出力するものである。これにより、ハードウェア等の構成を冗長化することなく、バスに出力されるデータのビット遷移を抑止でき、計算機システムの消費電力を低減することができる。
【００２１】
本発明にかかる最適化装置は、複数の命令を並列に処理可能なコンピュータシステムで実行される命令コードを最適化する最適化装置であって、並列に実行する命令コードが複数配列された第１の命令コード列と並列に実行する命令コードが複数配列され前記第１の命令コード列の次に実行される第２の命令コード列とを入力する入力部と、前記第１の命令コード列と前記第２の命令コード列とのビット遷移数を計算する計算部と、前記計算されたビット遷移数に応じて、前記第２の命令コード列の命令コードの配列を並び替える並び替え部と、前記第１命令コード列と前記並び替えられた第２の命令コードとを出力する出力部と、を備えるものである。これにより、ハードウェア等の構成を冗長化することなく、バスに出力されるデータのビット遷移を抑止でき、計算機システムの消費電力を低減することができる。
【発明の効果】
【００２２】
本発明によれば、ハードウェア等の構成を冗長化することなく、バスに出力されるデータのビット遷移を抑止し、計算機システムの消費電力を低減することができる最適化装置、最適化方法及びプログラムを提供することができる。
【発明を実施するための最良の形態】
【００２３】
発明の実施の形態１．
まず、図１を用いて、本発明の実施の形態１にかかる計算機システムの構成について説明する。この計算機システム１００は、複数の命令を並列に実行できるシステムであり、例えば、ＭＩＭＤ方式のマルチプロセッサシステムである。計算機システム１００は、１チップのマイクロコンピュータでもよいし、複数のチップから構成されていてもよい。
【００２４】
計算機システム１００は、図に示されるように、命令メモリ１０１、命令デコーダ１０２ａ，１０２ｂ、データメモリ１０３、演算器１０４ａ，１０４ｂを備えている。命令メモリ１０１と命令デコーダ１０２ａ，１０２ｂとは、それぞれ命令バス１０５ａ，１０５ｂを介して接続され、データメモリ１０３と演算器１０４ａ,１０４ｂとは、それぞれデータバス１０６ａ,１０６ｂを介して接続されている。
【００２５】
尚、この例では、２つの命令デコーダと２つの演算器を備え、２つの命令を並列に実行可能であるが、その他の任意の数の命令デコーダや演算器を備えてもよい。また、この例では、命令メモリとデータメモリを１つ備えているが、命令デコーダや演算器と同じ数の命令メモリやデータメモリを備えていてもよい。
【００２６】
命令メモリ１０１には、プログラム最適化装置１１０によって生成された実行コードが格納されている。この実行コードは、例えば、図示しない入出力回路等によって、命令バス１０５ａ，１０５ｂを介して命令メモリ１０１に格納されたり、メモリ書込み装置であるライタ等によって直接、命令メモリ１０１に書き込まれる。
【００２７】
また、実行コードには、計算機システム１００において並列に実行可能な命令コード列が実行順に配置されている。この命令コード列は、プロセッサ（演算器）の数に応じた命令スロットを有し、１つの命令スロットに１つの命令コードが割り当てられている。この例では、命令コード列に２つの命令スロット、すなわち２つの命令コードが含まれている。
【００２８】
例えば、実行コードの処理が実行される場合、まず、プログラムカウンタ（不図示）が指すアドレスに従い、命令メモリ１０１に格納された実行コードの命令コード列がフェッチされる。この命令コード列の一方の命令スロットの命令コードが命令メモリ１０１から命令デコーダ１０２ａへ命令バス１０５ａを介して転送され、他方の命令スロットの命令コードが命令メモリ１０１から命令デコーダ１０２ｂへ命令バス１０５ｂを介して転送される。本実施形態では、このように命令コードを命令メモリからフェッチするときに、命令コードのビット遷移を抑え、命令バス１０５ａ,１０５ｂの消費電力を低減することを特徴としている。
【００２９】
次いで、命令デコーダ１０２ａは、転送された命令コードをデコードし、データメモリ１０３及び演算器１０４ａへ制御信号や、データメモリ１０３へのアクセス番地を出力する。同様に、命令デコーダ１０２ｂは、データメモリ１０３及び演算器１０４ｂへ制御信号や、データメモリ１０３へのアクセス番地を出力する。
【００３０】
次いで、演算器１０４ａは、命令デコーダ１０２ａからの制御信号やアクセス番地に従い、データメモリ１０３からデータバス１０６ａを介してデータを読み出し、所定の演算を行って、演算結果をデータバス１０６ａを介してデータメモリ１０３へ書き込む。同様に、演算器１０４ｂは、データメモリ１０３からデータを読み出し、所定の演算を行って、演算結果をデータメモリ１０３へ書き込む。こうして、実行コードの命令コード列が並列に実行される。
【００３１】
次に、図２のブロック図を用いて、本実施形態にかかるプログラム最適化装置の構成について説明する。このプログラム最適化装置１１０は、高級言語等のソースコードをコンパイルして得られたオブジェクトコードを、このコードを実行する計算機システムの消費電力が低減するように最適化し、実行コードを生成する装置である。
【００３２】
プログラム最適化装置１１０は、パーソナルコンピュータやサーバコンピュータ等のコンピュータシステムにより構成され、図中の各ブロックは、ハードウェアもしくはハードウェア上で実行されるソフトウェアによって構成される。尚、プログラム最適化装置１１０は、単一のコンピュータでなくとも、複数のコンピュータによって構成することも可能である。例えば、コンパイラ１１１、最適化部１１２、リンカ１１３をそれぞれ別の装置としてもよいし、コンパイラ１１１と最適化部１１２を同じ装置とし、リンカ１１３を別の装置としてもよい。また、この例では、最適化部１１２をコンパイラ１１１やリンカ１１３とは別のブロックとしているが、最適化部１１２をコンパイラ１１１やリンカ１１３に内蔵していてもよい。
【００３３】
プログラム最適化装置１１０は、図に示されるように、コンパイラ１１１、最適化部１１２、リンカ１１３、ソースコード格納部１１４、オブジェクトコード格納部１１５、最適化コード格納部１１６、実行コード格納部１１７を備えている。プログラム最適化装置１１０は、この他、図示しないキーボードやマウス等の入力部や、ＣＲＴやＬＣＤ等表示部を備えており、必要に応じてユーザから情報を入力したり、各処理の実行結果等の情報をユーザへ表示することができる。
【００３４】
コンパイラ１１１、リンカ１１３は、例えば、ＣＰＵ等が記憶装置に格納されたアプリケーションプログラムに従って処理を実行し、他のハードウェア構成と協働することによって構成することができる。また、ソースコード格納部１１４、オブジェクトコード格納部１１５、最適化コード格納部１１６、実行コード格納部１１７は、ハードディスク等の内部記憶手段や光ディスク等の外部記憶手段により構成することができる。最適化部１１２の構成については後述する。
【００３５】
ソースコード格納部１１４には、高級言語等により記述されたソースコードが格納されている。ソースコードは、高級言語であるＣ言語やＣ＋＋言語等で記述されているが、これに限らず、アセンブラ言語等で記述されていてもよい。例えば、このソースコードは、ユーザにより入力部を介して入力されて、ソースコード格納部１１４にあらかじめ格納されている。
【００３６】
コンパイラ１１１は、ソースコード格納部１１４に格納されたソースコードを入力し、これをコンパイルすることにより、オブジェクトコードを生成する。例えば、コンパイラ１１１は、入力されたソースコードに基づいてアセンブラ言語のアセンブラコードを生成し、アセンブラコードを機械語に変換してオブジェクトコードを生成する。このコンパイルの際に、計算機システム１００において並列に実行可能な命令コードがスケジュールされて、命令コード列が実行順に生成される。オブジェクトコード格納部１１５には、コンパイラ１１１によって生成されたオブジェクトコードが格納されている。このオブジェクトコードは、上記のように計算機システム１００で並列実行可能な命令コード列が実行順に記述されている。
【００３７】
最適化部１１２は、オブジェクトコード格納部１１５に格納されたオブジェクトコードを入力し、これを計算機システム１００の消費電力が低減するように最適化し、最適化コードを生成する。最適化部１１２は、後述するように、オブジェクトコードの命令コード列について、直前の命令コード列と比べてビット遷移数が少なくなるように、命令コードの並び替えを行う。最適化コード格納部１１６には、最適化部１１２によって生成された最適化コードが格納されている。
【００３８】
リンカ１１３は、最適化コード格納部１１６に格納された最適化コードを入力し、これをリンケージすることにより、実行コードを生成する。例えば、リンカ１１３は、複数の最適化コードの結合や、参照しているライブラリの呼び出し等を行い、実行コードを生成する。尚、リンカ１１３は、コンパイラ１１１によって生成されたオブジェクトコードをリンケージすることも可能であり、このオブジェクトコードと最適化コードをリンケージすることもできる。実行コード格納部１１７には、リンカ１１３によって生成された実行コードが格納されている。実行コードは、計算機システム１００でそのまま実行可能なコードであり、ロードモジュールとも呼ばれる。
【００３９】
次に、図３を用いて、本実施形態にかかるプログラム最適化装置の最適化部の構成について説明する。最適化部１１２は、上記のように、オブジェクトコードを計算機システム１００の消費電力が低減するように最適化するブロックである。
【００４０】
最適化部１１２は、図に示されるように、入力部３０１、命令スロット割り当て部３０２、ビット遷移数演算部３０３、ビット遷移数比較・判定部３０４、出力部３０５、直前の命令コード列格納部３０６、最小ビット遷移数格納部３０７、最小ビット遷移数の命令コード列格納部３０８を備えている。
【００４１】
入力部３０１、命令スロット割り当て部３０２、ビット遷移数演算部３０３、ビット遷移数比較・判定部３０４、出力部３０５は、図２のコンパイラ１１１等と同様に、アプリケーションプログラムがＣＰＵにより実行され、ハードウェアと協働することによって構成されている。直前の命令コード列格納部３０６、最小ビット遷移数格納部３０７、最小ビット遷移数の命令コード列格納部３０８は、図２のソースコード格納部１１４等と同様に、内部記憶手段や外部記憶手段によって構成される。
【００４２】
入力部３０１は、オブジェクトコード格納部１１５に格納されたオブジェクトコードから、命令コード列を順に入力する。例えば、入力部３０１は、オブジェクトコード格納部１１５から、命令コード列を１列ずつ読み出して取得してもよいし、オブジェクトコード全体を読み出した後、その中から命令コード列を１列ずつ取得してもよい。この例では、命令コード列“００１１００００，０００１１０１１”が入力されている。
【００４３】
命令スロット割り当て部３０２は、入力部３０１によって入力された命令コード列を命令スロットに割り当てる。すなわち、命令コード列の命令コードの配列パターンを用意し、さらに、このパターンを並び替えた配列パターンを用意する。例えば、まず、入力された命令コード列のまま命令スロットに割り当て、次は、命令コードを入れ替えて命令スロットに割り当てる。例えば、命令コード列のパターンを、まず“００１１００００，０００１１０１１”とし、次に“０００１１０１１，００１１００００”とする。
【００４４】
ビット遷移数演算部３０３（計算部）は、命令スロット割り当て部３０２によって命令スロットが割り当てられた命令コード列と直前の命令コード列とのビット遷移数を計算する。ビット遷移数とは、コードの１と０の極性が反転するビット数である。すなわち、コードとコードで異なるビットの数である。例えば、“０００１００１１，０００１０００１”と“０００１１０１１，００１１００００”のビット遷移数は“３”である。
【００４５】
ビット遷移数比較・判定部３０４は、ビット遷移数演算部３０３によって計算されたビット遷移数をこれまでの最小ビット遷移数と比較し、より小さい方を最小ビット遷移数と判定する。出力部３０５は、最小ビット遷移数となる命令コード列を最適化コードとして、最適化コード格納部１１６へ出力する。例えば、出力部３０５は、最小ビット遷移数と判定された命令コード列を命令コード列毎に逐次出力してもよいし、オブジェクトコード全ての命令コード列をまとめて出力してもよい。この例では、“０００１１０１１，００１１００００”が出力されている。
【００４６】
直前の命令コード列格納部３０６には、出力部３０５によって出力された直前の命令コード列が格納されている。この直前の命令コード列とは、最適化部１１２が処理中の命令コード列の１つ前の命令コード列である。この例では、命令スロット１に“０００１００１１”、命令スロット２に“０００１０００１”が格納されている。
【００４７】
最小ビット遷移数格納部３０７には、ビット遷移数比較・判定部３０４によって判定された最小ビット遷移数が格納されている。この例では、最小ビット遷移数として“３”が格納されている。最小ビット遷移数の命令コード列格納部３０８には、ビット遷移数比較・判定部３０４によって判定された最小ビット遷移数の命令コード列が格納されている。この例では、命令スロット１に“０００１１０１１”、命令スロット２に“００１１００００”が格納されている。
【００４８】
次に、図４及び図５を用いて、本実施形態にかかるプログラム最適化処理について説明する。図４は、このプログラム最適化処理を示すフローチャートであり、図５は、プログラム最適化処理で用いられるデータの例を示している。この処理は、プログラム最適化装置１１０の最適化部１１２における処理であり、例えば、ＣＰＵ等において所定のアプリケーションプログラムにより実行される。
【００４９】
まず、直前の命令コード列があるか判定する（Ｓ４０１）。入力部３０１において、オブジェクトコード格納部１１５に格納されたオブジェクトコードの命令コード列が先頭から順に入力され、処理が行われる。現在、入力されて最適化処理の対象となる命令コード列を「発生しようとしている命令コード列」という。
【００５０】
例えば、入力部３０１は、命令コード列が入力されると、直前の命令コード列格納部３０６を参照し、直前に出力した命令コード列があるかどうか判定する。図５の例では、直前の命令コード列格納部３０６の命令スロット１に“０００１０００１”、命令スロット２に“０００１１１１１”が格納されており、直前の命令コード列があると判定される。
【００５１】
Ｓ４０１において、直前の命令コード列があると判定された場合には、Ｓ４０２以降の処理によって、発生しようとしている命令コード列の最適化が行われる。Ｓ４０１において、直前の命令コード列がないと判定された場合には、Ｓ４０８の処理によって、発生しようとしている命令コード列が最適化による並び替えをせずにそのまま出力される。このとき、Ｓ４０８でそのまま出力するために、最小ビット遷移数の命令コード列格納部３０８に、発生しようとしている命令コード列を格納する。
【００５２】
次いで、発生しようとしている命令コード列を命令スロットに割り当てる（Ｓ４０２）。命令スロット割り当て部３０２は、発生しようとしている命令コード列に含まれる命令コードを命令スロットに割り当てる。すなわち、命令コード列の命令コードの配列パターンを用意する。この割り当ては、命令コード列の最適な組み合わせを求めるために繰り返し行われ、最終的に全ての組み合わせの命令コード列の割り当てが行われる。
【００５３】
最終的に全ての組み合わせの命令コード列となるように割り当てられればよく、まず、入力された命令コード列のまま割り当ててもよいし、任意の順序に入れ替えてもよい。図５（ａ）の例では、発生しようとしている命令コード列として、命令スロット１に“０００１１１１０”、命令スロット２に“０００１０００１”が割り当てられている。
【００５４】
次いで、発生しようとしている命令コード列と直前の命令コード列のビット遷移数を計算する（Ｓ４０３）。ビット遷移数演算部３０３は、Ｓ４０２において命令スロットに割り当てられた命令コード列と、直前の命令コード列格納部３０６に格納された直前の命令コード列と、について各命令コードを比較しビット遷移数を計算する。
【００５５】
例えば、ビット遷移数演算部３０３は、各命令コードの排他的論理和をとり、排他的論理和が１となったビット数を合計する。ビット遷移数を計算は、各命令コードごとに計算してもよいし、複数の命令コードをまとめたり、命令コード列全体で計算してもよい。図５（ａ）の例では、命令スロット１の命令コードのビット遷移数が“４”、命令スロット２の命令コードのビット遷移数が“３”となり、ビット遷移数の合計は“７”となる。
【００５６】
次いで、これまでの最小ビット遷移数と比較し（Ｓ４０４）、ビット遷移数がこれまでの最小ビット遷移数より小さいか判定する（Ｓ４０５）。ビット遷移数比較・判定部３０４は、Ｓ４０３において計算したビット遷移数と最小ビット遷移数格納部３０７に格納された最小ビット遷移数とを比較し、その大小関係を判定する。
【００５７】
計算したビット遷移数がこれまでの最小ビット遷移数よりも小さいと判定された場合には、Ｓ４０６の処理によって、最小ビット遷移数格納部３０７が更新され、計算したビット遷移数がこれまでの最小ビット遷移数よりも小さくはない（最小ビット遷移数以上である）と判定された場合には、最小ビット遷移数格納部３０７を更新せずに、Ｓ４０７の処理によって、次の命令コード列の組み合わせが計算される。
【００５８】
次いで、最小ビット遷移数を更新し、ビット遷移数が最小となる命令コード列を記憶する（Ｓ４０６）。比較・判定部３０４は、Ｓ４０３において計算され、Ｓ４０５において最小ビット遷移数と判定されたビット遷移数を最小ビット遷移数格納部３０７に格納する。さらに、比較・判定部３０４は、このビット遷移数の命令コード列、すなわち、Ｓ４０２において割り当てられ、Ｓ４０３においてビット遷移数が計算された命令コード列を最小ビット遷移数の命令コード列格納部３０８に格納する。
【００５９】
図５（ａ）の例では、最小ビット遷移数格納部３０７に最小ビット遷移数がまだ格納されていない場合、“７”が最小ビット遷移数であると判定され、最小ビット遷移数格納部３０７に格納される。最小ビット遷移数の命令コード列格納部３０８の命令スロット１に“０００１１１１０”、命令スロット２に“０００１０００１”が格納される。
【００６０】
次いで、全ての命令コード列の組み合わせでビット遷移数を検査したか判定する（Ｓ４０７）。比較・判定部３０４は、Ｓ４０２〜Ｓ４０６において、発生しようとしている命令スロット列を、全ての組み合わせで命令スロットに割り当て、ビット遷移数の計算や比較等が行われたか判定する。
【００６１】
全ての命令コード列の組み合わせでビット遷移数を検査したと判定された場合には、Ｓ４０８の処理によって、命令コード列が出力される。全ての命令コード列の組み合わせでビット遷移数を検査していない判定された場合には、Ｓ４０２以降の処理が再度行われ、残りの組み合わせに並び替えて、ビット遷移数が計算される。
【００６２】
図５の例では、図５（ａ）の処理の次に、残りの組み合わせがあるため、図５（ｂ）の処理が行われる。図５（ｂ）では、発生しようとしている命令コード列として、命令スロット１に“０００１０００１”、命令スロット２に“０００１１１１０”が割り当て、すなわち、命令スロット１と命令スロット２の命令コードを並び替えている。この命令コード列のビット遷移数は“１”となる。そして、最小ビット遷移数格納部３０７に“７”が格納されていた場合、“１”の方が小さいので、最小ビット遷移数格納部３０７に“１”が格納され、最小ビット遷移数の命令コード列格納部３０８には、命令スロット１“０００１０００１”、命令スロット２“０００１１１１０”が格納される。
【００６３】
次いで、ビット遷移数最小となる命令コード列を出力し、直前の命令コード列を更新する（Ｓ４０８）。出力部３０５は、Ｓ４０１〜Ｓ４０７において、最小ビット遷移数の命令コード列格納部３０８に格納された命令コード列を、最適化コードとして最適化コード格納部１１６へ出力する。そして、出力部３０５は、出力した命令コード列を直前の命令コード列格納部３０６に格納する。
【００６４】
図５の例では、図５（ｂ）の命令コード列である命令スロット１“０００１０００１”、命令スロット２“０００１１１１０”が出力され、この命令コード列が直前の命令コード列格納部３０６に格納される。そして、オブジェクトコードの全ての命令コードについて最適化処理が行われて、この処理が終了する。
【００６５】
このように、前のサイクルで実行する命令コード列と、次のサイクルで実行する命令コード列のビット遷移が少なくなるように、命令コードの配列を並び替えることにより、この命令コードを実行する計算機システムで命令コードを読み出す際に、バスに流れる命令コードのビット遷移を抑止することができる。よって、命令コードを転送する命令バスの消費電力を低減し、計算機システムの低消費電力化を図ることができる。また、命令コードの配列を並び替えているため、命令コードを実行する計算機システムにおいて、冗長なハードウェア構成を設ける必要がない。
【００６６】
発明の実施の形態２．
次に、図６のフローチャートを用いて、本発明の実施の形態２にかかるプログラム最適化処理について説明する。本実施形態では、図４の処理と異なり、命令コード列の全ての組み合わせについて、一度にビット遷移数の計算や比較を行うことを特徴とする。
【００６７】
この処理によって得られる命令コードを実行する計算機システムや、この処理を実行するプログラム最適化装置の構成等は、図１〜図３と同様である。この処理は、図４の処理と同様に、プログラム最適化装置１１０の最適化部１１２における処理である。また、Ｓ６０１〜Ｓ６０４と図４のＳ４０１〜Ｓ４０４、Ｓ６０５と図４のＳ４０８は、その一部又は全部が同じか類似の処理であり、適宜説明を省略する。
【００６８】
命令コード列が入力されると、まず、直前の命令コード列があるか判定し（Ｓ６０１）、直前の命令コード列があると判定された場合にはＳ６０２が行われ、直前の命令コード列がないと判定された場合にはＳ６０５が行われる。
【００６９】
次いで、発生しようとしている命令コード列の全ての組み合わせを命令スロットに割り当てる（Ｓ６０２）。命令スロット割り当て部３０２は、命令コード列の全ての組み合わせを求めて、命令スロットの割り当てを行う。すなわち、命令コード列の命令コードの全ての配列パターンを用意する。例えば、図５（ａ）と（ｂ）の２つの命令コード列を割り当てる。
【００７０】
次いで、発生しようとしている命令コード列の全ての組み合わせにおいて、命令コード列と直前の命令コード列のビット遷移数を計算する（Ｓ６０３）。ビット遷移数演算部３０３は、Ｓ６０２において割り当てられた全ての組み合わせの命令コード列について、直前の命令コード列格納部３０６に格納された直前の命令コード列とのビット遷移数を計算する。例えば、図５（ａ）と（ｂ）のビット遷移数である“７”と“１”を求める。
【００７１】
次いで、命令コード列の全ての組み合わせのビット遷移数を比較する（Ｓ６０４）。ビット遷移数比較・判定部３０４は、Ｓ６０３において計算した全ての組み合わせの命令コード列のビット遷移数を比較し、その大小関係を判定する。例えば、図５（ａ）と（ｂ）のビット遷移数である“７”と“１”を比較し、“１”の方が小さいと判定し、図５（ｂ）の命令コード列が最小ビット遷移数の命令コード列となる。
【００７２】
次いで、ビット遷移数最小となる命令コード列を出力し、直前の命令コード列を更新する（Ｓ６０５）。Ｓ６０１〜Ｓ６０４において最小ビット遷移数と判定した命令コード列を最適化コードとして出力する。
【００７３】
このように、全ての組み合わせの命令コード列について、一度にビット遷移数の計算、比較を行うことも可能であり、図４と同じ最適化コードを効率よく得ることができる。
【００７４】
その他の発明の実施の形態．
尚、上述の例では、前の命令コード列と次の命令コード列のビット遷移数を順次求めて、命令コードを並び替えたが、さらに、その他の情報を考慮して、命令コードを並び替えてもよい。例えば、命令コードの属するスレッド番号を参照し、スレッド番号によって並び替えるかどうか制御してもよい。同じスレッドの場合には、命令コードの実行順序は変えられないが、違うスレッドの場合には、命令コードの実行順序を入れ替えることも可能である。
【００７５】
上述したプログラム最適化装置１１０を実現するためのハードウェア構成の例を図７に示す。プログラム最適化装置１１０は、典型的なコンピュータ・システムが利用可能であり、中央処理装置（ＣＰＵ）２０１とメモリ２０４とを含んでいる。
【００７６】
ＣＰＵ２０１とメモリ２０４とは、バスを介して補助記憶装置としてのハードディスク装置２１３に接続される。フレキシブルディスク装置２２０、ハードディスク装置２１３・２３０、ＣＤ−ＲＯＭドライブ２２６・２２９、ＭＯドライブ２２８等の記憶媒体駆動装置は、フレキシブルディスク・コントローラ２１９、ＩＤＥコントローラ２２５、ＳＣＳＩコントローラ２２７等の各種コントローラを介してバスに接続される。フレキシブルディスク装置２２０等の記憶媒体駆動装置には、フレキシブルディスク等の可搬型記憶媒体が挿入される。
【００７７】
記憶媒体にはオペレーティングシステムと共同してＣＰＵ２０１等に命令を与え、プログラム最適化装置１１０の機能を実施するためのコンピュータ・プログラムを記憶することができる。コンピュータ・プログラムは、メモリ２０４にロードされることによって実行される。コンピュータ・プログラムは圧縮し、又、複数に分割して記憶媒体に記憶することができる。ハードウェア構成は、典型的には、ユーザ・インターフェース・ハードウェアを備える。
【００７８】
ユーザ・インターフェース・ハードウェアとしては、例えば、入力をするためのポインティングデバイス（マウス２０７、ジョイスティック等）やキーボード２０６、あるいは、視覚データをユーザに提示するための液晶ディスプレイなどの表示装置２１１やＣＲＴディスプレイ２１２がある。
【００７９】
また、パラレルポート２１６を介してプリンタを接続するも可能である。このコンピュータ・システムは、シリアルポート２１５を介してモデムを接続することが可能であり、シリアルポート２１５およびモデムまたはトークンリングや通信アダプタ２１８等を介してネットワークに接続し、他のコンピュータ・システムと通信を行っている。尚、上記構成は必要に応じて省略することができる。
【図面の簡単な説明】
【００８０】
【図１】本発明にかかる計算機システムのハードウェア構成図である。
【図２】本発明にかかるプログラム最適化装置の構成を示すブロック図である。
【図３】本発明にかかるプログラム最適化装置の最適化部の構成を示すブロック図である。
【図４】本発明にかかるプログラム最適化処理を示すフローチャートである。
【図５】本発明にかかるプログラム最適化処理で用いられるデータ例を示す図である。
【図６】本発明にかかるプログラム最適化処理を示すフローチャートである。
【図７】本発明にかかるプログラム最適化装置のハードウェア構成図である。
【図８】一般的な計算機システムのハードウェア構成図である。
【符号の説明】
【００８１】
１００  計算機システム
１０１  命令メモリ
１０２ａ，ｂ  命令デコーダ
１０３  データメモリ
１０４ａ，ｂ  演算器
１０５ａ，ｂ  命令バス
１０６ａ，ｂ  データバス
１１０  プログラム最適化装置
１１１  コンパイラ
１１２  最適化部
１１３  リンカ
１１４  ソースコード格納部
１１５  オブジェクトコード格納部
１１６  最適化コード格納部
１１７  実行コード格納部
３０１  入力部
３０２  命令スロット割り当て部
３０３  ビット遷移数演算部
３０４  ビット遷移数比較・判定部
３０５  出力部
３０６  直前の命令コード列格納部
３０７  最小ビット遷移数格納部
３０８  最小ビット遷移数の命令コード列格納部
【図１】
2006004123.tif 000003
【図２】
2006004123.tif 000004
【図３】
2006004123.tif 000005
【図４】
2006004123.tif 000006
【図５】
2006004123.tif 000007
【図６】
2006004123.tif 000008
【図７】
2006004123.tif 000009
【図８】
2006004123.tif 000010