JP4823075B2 - 最適化コードの自動発生システム - Google Patents

最適化コードの自動発生システム Download PDF

Info

Publication number
JP4823075B2
JP4823075B2 JP2006548350A JP2006548350A JP4823075B2 JP 4823075 B2 JP4823075 B2 JP 4823075B2 JP 2006548350 A JP2006548350 A JP 2006548350A JP 2006548350 A JP2006548350 A JP 2006548350A JP 4823075 B2 JP4823075 B2 JP 4823075B2
Authority
JP
Japan
Prior art keywords
code
optimization
kernel
optimized
benchmark
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
JP2006548350A
Other languages
English (en)
Other versions
JP2007518176A (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.)
Commissariat a lEnergie Atomique et aux Energies Alternatives CEA
Original Assignee
Commissariat a lEnergie Atomique et aux Energies Alternatives CEA
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 Commissariat a lEnergie Atomique et aux Energies Alternatives CEA filed Critical Commissariat a lEnergie Atomique et aux Energies Alternatives CEA
Publication of JP2007518176A publication Critical patent/JP2007518176A/ja
Application granted granted Critical
Publication of JP4823075B2 publication Critical patent/JP4823075B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation

Description

本発明は、少なくとも1つのプロセッサを備えた所定のハードウェア・プラットフォーム上で実行するのに適し、所定の分野のアプリケーションに用いる、ユーザーの提供するソースコードからの最適化コードの自動発生システムに関するものである。この場合、そのようなユーザーは広義に解釈され、エンド・ユーザーだけでなくアプリケーションのプログラマーやシステム・プログラマーをも含む。
コンピュータ使用の当初から、多くの研究がコンパイラに関して行われた。
コンパイラの原理は高級言語で書かれたソースコードを分析し、次いで対象機械のためのそのバイナリコードの均等物を生成することである。一般にこのプロセスは実行に先立って静的に行われる。実行が行われている間に最後の瞬間にコードを生成することを可能にすることにより静的制約を取り除くことを可能にする、ダイナミック・コンパイレーション技術を実装するインタープリータも存在する。
コンパイラは一連のプログラム生産における1つの要素である。コンパイレーションの結果は既にコンパイルされた手順に関連させ、生成させる(別々にコンパイルするか、またはライブラリから取得する)ことが可能であり、それらはローディングの際に静的に、または実行の際に動的にリンクされる。
コンパイラは一般に3つのステージ(段階)で組織される。
1)中間コード生成:ソースコードから出発して、コンパイラはパターンを一致させてソース言語から独立した、一般に中間言語と呼ばれる抽象形態を生成する。この言語は対象機械から独立している。
2)高度最適化:このステージでは、一般に対象アーキテクチャから独立している種々の最適化を組み合わせる:定数の伝搬、力の低下、共通表現...。これらの最適化は一般に単一の計測技術(metrics)に対応する:命令の数を低減、コードの構造を単純化。
3)コード生成および低度の最適化:このステージの間に、対象機械に特異的な操作と最適化のすべてを行う:命令を生成および選択し、レジスタを割当て、命令を順序付ける等。
コンパイラの品質は対象アーキテクチャ(生成されるコードのパフォーマンス)だけでなくソース言語(コンパイルが難しいまたは容易)と関係し、ソフトウェアとしての特性(堅牢性、豊富な選択肢、実行速度等)にも関係する。
動的コンパイルの特殊なケースを除けば、上記ステージの3つをすべて実行前に行う必要があり、これは相応の時間内に行われる必要が有り、それによりコンパイラに実装することができる最適化アルゴリズムの複雑さをそれに応じて制限している。
コンパイラの研究の大部分は、従って、最初、高度ソース言語を選択し、定義することに関係している。
コンパイラの発展もプロセッサのアーキテクチャの発展、そしてさらに詳しくはそのようなアーキテクチャの挙動を記載するパフォーマンスモデルに関係する。すべての最適化問題におけると同様に、主な困難は実行時間を表す費用関数を決定することにある。
最初の命令セットは非常に単純な挙動のものであった:一連の命令の実行時間はシーケンス中の命令のそれぞれの実行時間の合計としてまったく単純に得ることができた。従って、最適化のプロセスは非常に簡単であり、主な最適化戦略は生成される命令の数と複雑さを減らすことからなっていた。
第1の複数命令セットコンピュータ(複数)(CISCs)の出現によりある特定の非常に複雑な命令が利用可能である限り少し状況が変化した。そこで、最適化の問題は本質的にパターン一致の問題になった。このカテゴリーもベクトル命令セットおよびベクトルコードを生成するのに直接役に立つループを認識することができるベクトライザを備える。必要に応じて、ソースコードも変形してベクトルコード構造を明かにすることが可能である。
パイプラインの到来により最適化戦略に断絶が生じ、アーキテクチャ開発は命令の処理を、向上の組立ラインにおけるように、順次実行される複数の操作に細分割することになった。この技術は複数の命令の実行を所定の瞬間に重ね合わせることを可能にし、それにより顕著にシステムのパフォーマンスを改善したが、パイプライン「中断(breaking)」の場合に、例えば分岐命令の存在によって、顕著な偏差が生じた。この技術はまた所与のコード断片の挙動が予測可能であることに終わりをもたらした。他の主な断絶はメモリ階層の使用に由来するものであった:従って、最適化は非常に特殊な指標:局地性(空間および時間における)に基づくことが必要となった。それにもかかわらず、プロセッサとメモリシステムの間の相互作用が単純であるので、最適化プロセスはミスの数の最小化を主な目的とするものであった。これはミスごとに実行時間のペナルティーが課せられるからである。それでもなお、ミスの数を最小限にすることは困難であり、本質的にループ型の単純なコード構造に対して行うことができるものであると観るべきである。局所性の静的評価がこのように困難であるので、管理プロフィルによる最適化方法が使用されるようになった:すなわち、コードを最初に実行して局所性を精密に決定(してプロフィルを構築)する。次いで、このプロフィルを第2の回において使用して局所性の利用に関連する最適化を実行する。アーキテクチャの複雑さのこのレベルでは、最適化の有効な戦略を簡単に定義することが非常に難しい。より正確には、種々の異なる最適化をどのように組み合わせればよいかが、非常に簡単な状況についてさえ、すでに非常に困難であった:もはやパフォーマンスをモデル化またはそれを効果的に考慮するのに適したメカニズムが存在しなかった。反復コンパイル技術が開発されたのはこの文脈においてであり、実行および最適化を組み合わせて最善のコードを生成するものであった。さらに詳しくは、反復コンパイルはコード変形用ループを実行し、次いでそのパフォーマンスを(静的または動的に)測定することからなる。これらの技術は本質的に最良の解法を与える解法を保存する目的の最小コストコード変換のスペースを探索することからなる。そのような反復方法の計算時間および開発時間におけるコストが非常に高いため、その応用分野は最適化ライブラリに限定されていた。
縮小命令セットコンピュータ(RISC)アーキテクチャは(CISCと対照的に)単純かつ一様な命令のセットを利用するものであるが、80年代の中頃に利用可能になった。第1世代のRISCプロセッサはその機能性が非常に限定されており、従って、生成されたコートの品質(特に命令の順序付け)がパフォーマンス競争の重要なファクタとなった。ほとんど同様に、非常に長い命令語(VLIW)アーキテクチャハードウェアを利用するために全く同様のコンパイル技術を利用した。RISCおよびVLIWアーキテクチャは常に単純なパフォーマンスモデルを有しており、このパフォーマンスモデルは全体的に、命令が生成されたプログラムコードと同じ順序で実行される点で決定性であり、それによりそれらのアーキテクチャの挙動をかなり単純化し、従って最適化プロセスを単純化している。それでもなお、それらのアーキテクチャは、よりよいパフォーマンスを得るために、非常に迅速にパイプラインとメモリキャッシュの使用を一般化した(より正確には、これにより平均パフォーマンスを改善したが、予測性を損ねた)。
スーパースケーラー(superscaler)アーキテクチャ(周期毎に複数の命令を実行する能力を有する)と、就中、命令処理のための順不同処理メカニズムとの出現によりパフォーマンス最適化のプロセスがさらに困難なものになった。さらに、メモリ階層が急速に発展した:レベル数が増加し、就中種々のキャッシュ(先行載荷(preloading)、優先度管理(priority management)、...)を多かれ少なかれ明示的に管理するのに役立つ種々のメカニズムが出現している。これらのメカニズムが一緒になったために、非常に単純(2つまたは3つの表へのアクセスをとるループ)である場合でさえも、コード断片の挙動は予測することが非常に難しくなり、そのため単純なパフォーマンスモデルに基づいて最適化するのは不可能になった。この状況はプロセッサのパフォーマンスとメモリのパフォーマンスとの差により単に悪化している。
総じて、最近20年にわたって、プロセッサのアーキテクチャにおいて能力に関してはかなり豊かになった。このように、レジスタの数はかなり増加した:すなわち、CISCアーキテクチャで標準であった8レジスタからRISCは32レジスタに移行し、スーパースケーラー・アーキテクチャは80レジスタに移行した。一見したところでは、レジスタの数を増加すると最適化が簡単になると考えられる。実際は、メモリが発展したのでレジスタの使用がさらに重要になり、このレジスタの割り当ての問題について効果的レジスタ割当アルゴリズムのコストがかなり増加している。これは複雑さが利用可能なレジスタの数の指数関数であるためである。
これら最近の開発に応じて、コンパイラ技術はほとんど変化しなかった:すなわち、実装された最適化の数が増加したが、全体的最適化戦略を定義する能力は進化しておらず、低下さえしている。
最後に、最近の傾向は「動的」コンパイルを指向している。原理は単純かつ魅力的である:動的コンパイル(または実行に特化)はコードを最後の瞬間、すなわち実行時に最適化することからなる。コードシーケンスが、プログラムの入力データ(実行コンテクスト)の関数として適合される(「特化される」)。実行時、あるメカニズムがプログラムの挙動を命令のシーケンスが実行される頻度の関数として「検査(examines)」し、特定の実行コンテクスト用に最適化されたバージョンを実装するか否か決定する。このタイプの本質的動的メカニズムはそれ自身の自走のための計算時間の面で安価な最適化技術に限定される。その理由は最適化技術は最適化するはずのコードの実行に不利益をもたらしてはならないからである。
ライブラリはフィールドまたはそのようなフィールドの一部分を表す一組の手順である:すなわち、ライブラリのコンポーネントは標準的でありかつ頻繁に使用される手順に対応するものであることが必要である。ライブラリの概念は非常に古く、コンパイラの概念よりも古く、ライブラリはソフトウェア工学の主要な柱の1つである(コンポーネントの再使用)。特に、ジャバ(Java(登録商標))はライブラリの概念を非常に系統的に利用する言語の一例である。
ライブラリは最も簡単なものから最も複雑なものまでの異なる抽象化レベルに対応することができる:すなわち、BLAS1(“basic linear algebra subroutines level 1”、基礎線形代数ルーチンレベル1)はベクトルに関する一組の非常に単純な操作であるが、多数の従来の線形代数アルゴリズムを表現することが可能である。他の極端な例としては、LINPACKおよびEISPACKがあり、これらは線形系および固有値ベクトルおよび/または固有値をそれぞれ解く手順の完全なセットである。多数のライブラリが開発され、以下の特定の分野で広く使用されている。
・科学計算:BLAS1、BLAS2、BLAS3、BLST、SPARSE BLAS、LINPACK、LAPACK、BLACS、PVM、MPI、など;
・シグナル処理:FFTPACK、VSIPI、など;および
・グラフィックス:DirectX、OpenGL。
一定数のライブラリが所定の応用分野において定義され、特定されるということはその分野が「合成(synthesized)」することが可能であることを表している。
それにもかかわらず、ライブラリの最大の欠点はそれらの能力が非常に限定されており、それらはマニュアルの利用を必要とすることである(すなわち、それらはソースコード中に、挿入されるべき手順に対する明示のコールを必要とする)。
第1世代の(小サイズの単純手順に対応する)ライブラリはアセンブラ言語で手動開発されるのが一般的であった。パフォーマンスが主要な基準である場合はいつでもそれが該当した(ただし、当然、手順は合理的なサイズであった場合に限る)。
しかしながら、通常「インライン(in−line)」プロセスであるコンパイル(コンパイル時間は控え目でなければならない)とは異なり、ライブラリの最適化は本質的に「オフライン(off−line)」プロセスであり、計算時間に関してずっと欲張りな方法を利用することができる。このように反復コンパイルはライブラリ開発の優れた最適化ツールであるが、残念ながら、最も単純なコードに使用可能であるに過ぎず、用途が限定される。
同様に、自動同調線形代数ソフトウェア型の技術はある最適化を行う(ブロックサイズのような良好なパラメータを選択する)ことを可能にする。残念ながら、その技術は用途がごく限られているが、その理由は、対象アプリケーションのタイプ(緻密なマトリクスの計算、非常に高度の時間局地性を特徴とする計算)に大きく依存するからである。
パフォーマンスを解析するための現在のツールは非常に変化に富む(特に探索される対象の関数として):
・パフォーマンス試験(「ベンチマーク(benchmarks)」):これらは応用分野を多かれ少なかれ表し、種々の機械のパフォーマンスを比較することを可能にするコードである。
・シミュレータ:これらはアーキテクチャの挙動が最終レベルで理解されることを可能にする。残念ながら、それらは非常に高価であり、開発が難しく、非常に低速であり、対象プロセッサを必ずしも正確に表すものではない。
・演算モデル:アイデアとしては、機械のパフォーマンスを等式の形にすることである。一般に、それらの用途は極端に限定され、それらは非常に単純なコードの同じものの周りの種々の単純な変異体(バリアント)を検討するためにのみ有効である。
・プロフィルを監視および/または管理するツール:これらのツールは、プログラムの実行に関する異なる種類の情報を(特化されたハードウェアを有するコンピュータを用いることにより)回復する役割を持ち、ここでそのような情報はサイクルの数、ミスの数などに関係する。
以下の所見を述べることができる:
・パフォーマンステストはほとんど発展しておらず、就中、それらは大き過ぎる商業上の利害関係の主題になっている。供給元がベンチマーク試験においてよく動作するようにコードを特異的に最適化することがしばしばなされているが、得られた結果の範囲と有効性が紛らわしくなる。
・シミュレータ:対象とするアーキテクチャが非常に複雑になった場合、シミュレータが与える結果を、コードを最適化するために利用することがますます困難になりつつある。
・演算モデル:これらはほとんど発展せず、上述の局所的用途以外にはそれらは使用できない。理由の1つは、良い演算モデル化ツールは挙動が「一様平均」であることに基づいており、実際には真実からかけ離れていることである。
・プロフィルを監視および/または管理するツール:これらは本質的に3つの欠点を有する:それらは全体的であり、作用の経時分布に関連しない情報を与え;それらは細かいレベルでコードと挙動とが相関することを可能にせず;そして、最後にそれらを有効利用することが(シミュレータを用いた場合と同様に)、特に対象アーキテクチャの複雑さの故に、非常に困難である。
本発明は上述の欠点を克服し、少なくとも1つのプロセッサを備える所定のハードウェア・プラットフォームがユーザーにより提供されたソースコードに自動的に動作して、所定の適用分野に対して該プラットフォーム上で動作する最適化コードの生成を可能にすることを目的とする。
さらに詳しくは、本発明は選択されたソース言語から独立してコンピュータシステムのパフォーマンスを向上させること、およびこれを、単純または複雑である命令を利用することが可能であり、多数または少数のレジスタ、機能性ユニットおよびキャッシュレベルを備えていてもよいアーキテクチャのプロセッサを実装するシステムに対して行うことを目的とする。
本発明の他の目的は特化したプログラムのライブラリの機能的範囲の限界を無くすことであり、さらに本発明は種々の複雑さのレベルを示す多数の類似したコード構造に対して最適化されるコードを自動的に生成するシステムを創出することを目的とする。
本発明によれば、これらの目的は、ユーザーにより提供されたソースコードに自動的に動作して、少なくとも1つのプロセッサを有し所定の適用分野おいて使用する所定のハードウェア・プラットフォーム上で動作するのに適した最適化コードを生成するシステムであって、前記システムは前記所定の適用分野について、前記プロセッサの挙動をパフォーマンスで表す、ベンチマークシーケンスと呼ばれる記号コードシーケンスを受領する手段;前記所定のハードウェア・プラットフォーム、そのプロセッサ、および前記ベンチマークシーケンスに基づいて定義された第1の静的パラメータを受領する手段;同じく前記所定のハードウェア・プラットフォーム、そのプロセッサおよび前記ベンチマークシーケンスから定義された動的パラメータを受領する手段;前記ベンチマークシーケンス、前記静的パラメータおよび前記動的パラメータを用いて行われる試験およびパフォーマンスの測定から最適化ルールを作成する分析装置;第一に前記ベンチマークシーケンス、および第二に前記ユーザーソースコードを検査するための最適化ルールを受領するコードを最適化および生成し、最適化可能な複数のループを検出し、前記複数のループをカーネルに分解し、かつコードをアセンブルおよび投入して前記最適化コードを引き渡す装置;およびコードを生成し最適化する前記装置から来る情報を再投入し、かつ前記カーネルを前記ベンチマークシーケンスに戻して関連づける手段を備えたことを特徴とするシステムにより達成される。
さらに詳しくは、前記分析装置は、第一に前記ベンチマークシーケンス受領手段に、第二に前記静的パラメータ受領手段に接続された発生器であって、移送手段により移送されてバリアントデータベースに格納される多数のテストバリアントを自動的に生成するテスト発生器;第一に前記バリアントデータベースに格納された前記テストバリアントを受領する移送手段に、第二に前記動的パラメータを受領する手段に接続された前記テストバリアントを前記動的パラメータの変化の範囲内で実行して移送手段により移送されて結果データベースに格納される結果を生成するエキササイザ;および前記移送手段に接続されて前記結果データベースに格納された前記結果を受領し、それらを分析し、かつそれらから、移送手段により最適化ルールデータベースに移送される最適化ルールを推論するアナライザを備える。
好適には、前記アナライザは最適パフォーマンスに対する任意の閾値を有するフィルタ手段を備え、前記バリアントが前記フィルタ基準を満足する限り、前記結果データベースのバリアントを、前記パラメータ空間において最適であると判定するようにしている。
好適な一実施形態では、前記アナライザは、さらに前記静的パラメータを変更する手段および前記動的パラメータを変更する手段を備える。
前記コードを最適化および生成する装置は、最適化コードを生成する装置と最適化器とを備え、前記最適化器は第一に前記オリジナルソースコード中に特定されたカーネルを受領する手段に、第二に前記ベンチマークシーケンスを受領する手段に、および第三に前記最適化ルールを受領する手段に接続された戦略選択モジュールであって、テストされたベンチマークシーケンスに対応するそれぞれのカーネルについてそれぞれあるパラメータの組合せの下で最適である複数のバージョンを生成する戦略選択モジュールと、前記最適化ルールを受領する手段に、前記戦略選択モジュールから来る情報を受領する手段に、および前記複数のバージョンを受領する手段に接続された組合せ・アセンブルモジュールとを備え、移送手段を介して、前記対応する最適化バージョン、それらの使用帯域、および必要に応じて前記実行されるべきテストを含む情報を引き渡してどのバージョンが最も適しているかを動的に決定するようにしている。
好適な任意的な一実施形態では、前記システムは最適化カーネルデータベースを備え、前記組合せ・アセンブルモジュールは移送手段により前記最適化カーネルデータベースに接続されて前記最適化カーネルデータベースに情報を格納し、前記情報は前記最適化バージョン、それらの使用帯域、および必要に応じて実行されるべきテストを含む情報をどのバージョンがもっとも適しているかを動的に決定するようにしている。
前記コード最適化・生成装置は最適化器と最適化コード生成装置とを備え、前記最適化コード生成装置はユーザーソースコードを受領する手段に接続された最適化可能ループ検出手段、それらをカーネルに分解するモジュール、移送手段を介して前記最適化器に接続されて前記検出されたカーネルのアイデンティティー(識別情報)を伝送するようにした事例分析、アセンブルおよびコード投入モジュール、および前記対応する最適化カーネルを記載する情報を受領する移送手段を備え、前記事例分析、アセンブルおよびコード投入モジュールも最適化コード供給手段に接続されている。
前記事例分析、アセンブルおよびコード投入モジュールも前記最適化カーネルデータベースに接続され、最適化カーネルを記載する情報を、前記検索された最適化カーネルがそこに格納されているならば、前記最適化器を呼び出すことなく、受領するようにしている。
有利な特徴によれば、前記事例分析、アセンブルおよびコード投入モジュールは、さらに、前記ベンチマークシーケンスに前記事例分析、アセンブルおよびコード投入モジュールにおいて発見されたカーネルを、前記最適化カーネルデータベースまたはベンチマークシーケンスのいずれにも対応するアイデンティティーを持たずに追加する手段を備える。
一つの特定の実施形態では、前記システムはコンパイラとリンクエディタとを備え、再組織化されたソースコードを前記コード最適化・生成装置から受領し、前記ハードウェア・プラットフォームに適合された最適化バイナリコードを生成するようにしている。
前記システムは、前記最適化カーネル用の前記ソースコードを前記最適化カーネルデータベースから前記コンパイラに移送する手段を備えていてもよい。
他の変形実施形態では、前記システムはコンパイラと、動的ライブラリを前記ハードウェア・プラットフォーム上にインストールするインストールモジュールを備え、前記ライブラリは前記最適化カーネルの能力の全てを含むようにすることも可能である。
本発明は種々の応用分野、特に科学計算、信号処理、およびグラフィックス処理に適用することができる。
一つの特定の特徴に従えば、前記ベンチマークシーケンスは、ソース型言語で特定され、かつループ本体用のコードの複雑さの昇順により階層レベルで組織化された一組の単純かつ包括的ループ型コード断片を含む。
必要に応じ、前記ベンチマークシーケンスは、唯一の個別動作がテストされ、高さ0のツリーによって表される単一の演算式により構成されるループ本体に対応するレベル0のベンチマークシーケンスを含む。
さらに、前記ベンチマークシーケンスは、レベル2のベンチマークシーケンスを含んでいてもよく、前記ベンチマークシーケンスに対しては、2つのレベル0の操作の組合せ;および高さ1のツリーによって表される単一の演算式により、またはそれぞれ高さ0のツリーによって表される2つの演算式により構成されるループ本体に対応するレベル1のベンチマークシーケンス操作が考えられ、かつテストされる。
一つの考え得る実施形態では、前記ベンチマークシーケンスはレベル1のベンチマークシーケンスを含み、前記ベンチマークシーケンスに対して2つのレベル1の操作または3つのレベル0の操作が考えられ、かつテストされる。
前記静的パラメータは、特に各ベンチマークシーケンスのループ反復数、表アクセス間隔(step size)、およびオペランド型、使用命令の型、プリロード戦略、および命令および反復の順序づけ戦略を含む。
前記動的パラメータは、特にメモリ階層の種々のレベルにおける表オペランドの位置、表開始アドレスの相対的位置、および分岐履歴を含む。
好適には、前記最適化カーネルデータベースは、現実の有用な、複雑さの昇順に階層レベルに組織化されたコード断片に対応するループ型ソースコードシーケンスを含む。
前記所定のハードウェア・プラットフォームは、例えば、インテル社から供給された、いわゆるイタニウム(ItaniumTM)型の少なくとも1つのプロセッサ、またはIBM社から供給されたパワー(Power)またはパワーPC(Power PCTM)型の少なくとも1つのプロセッサを備えることができる。
前記イタニウム(ItaniumTM)型のプロセッサを有するシステムに特に適用可能な一つの考え得る実施形態では、前記最適化ルールは下記のルールのうち、少なくとも幾つかを含む:
a)書込パフォーマンスが読取パフォーマンスに比べて劣っている場合、書込の数を最小化する;
b)浮動小数点におけるローディングペアの使用の重要性;
c)ループがループ本体の複雑さの関数として展開される程度を調整する;
d)演算操作における操作待ち時間を用いる;
e)短いベクトルに対してマスキング技術を使用する;
f)メモリアクセス(読取、書込、プリローディング)用の局所サフィックスを用いる;
g)プリローディング距離を定義する;
h)程度4のベクトル化を実行してL2バンクの衝突の若干を回避する;
i)複数のバリアントを考慮に入れて他のL2バンクの衝突と、読取/書込キーにおける衝突とを回避する;
j)種々の最適化に関連するパフォーマンス改善を考慮に入れる;
k)誤った予測(短いベクトル)を最小化する分岐鎖を用いる;
l)メモリアクセスを統合する(ピクセルを一緒のグループにする);および
m)ピクセルにベクトル化処理をする。
さらに詳しくはパワー(Power)またはパワーPC(Power PCTM)型のプロセッサを含むシステムに適用可能な他の考え得る実施形態において、前記最適化ルールは下記のルールの少なくともいくつかを備える:
a)読取値を再順序づけしてキャッシュ欠陥をまとめる;
b)書込値に対してのみプリローディングを用いる;
c)ループがループ本体の複雑さの関数として展開される程度を調整する;
d)演算操作における操作待ち時間を用いる;
e)メモリアクセス(読取、書込、プリローディング)用の局所サフィックスを用いる;
f)プリローディング距離を定義する;
g)複数バリアントを考慮に入れて読取/書込キーにおける衝突を避ける;および
h)種々の最適化に関連するパフォーマンス改善を考慮に入れる。
本発明の他の特徴および利点は、点封図面を参照した特定の実施形態の下記の説明から明らかである。
まず、図1を参照すると、図1は、最適化コードを自動的に生成してコード最適化・生成モジュール80の出力73を介して、少なくとも1つのプロセッサ91を備える所定のハードウェア・プラットフォーム90上で実行するのに適した最適化コードを供給するシステム全体を示す。
前記コード最適化・生成システムは所定の適用分野に適合され、モジュール80の入力端71を介して、ユーザーにより提供されたソースコード17を受領する。ここで、「ユーザー」という用語は広くエンド・ユーザーだけでなく、アプリケーションのプログラマーおよびシステムのプログラマーをも包含するものと理解されるべきである。
問題の適用分野についてのパフォーマンスとしてプロセッサ91の挙動を表す、ベンチマークシーケンス1と呼ばれる記号コードシーケンスはコード最適化・生成モジュール80の入力端52およびアナライザモジュール10の入力端51に適用される。
種々の環境パラメータおよびベンチマークシーケンス同士の間の相互作用の効果を分析することにより、パフォーマンスの良好な帯域および劣悪な帯域を配置し、それらが良好および劣悪である理由を理解することが可能である。ベンチマークシーケンスシーケンスは必ずしも従来のプログラミング言語により生成された現実のコードシーケンスを表さない。テストされたベンチマークシーケンスの部分集合のみがユーザーコードの最適化に使用されるカーネルに対応する。
最適化可能なループは変数ベクトルについて多かれ少なかれ複雑な操作のアルゴリズム表現をコードするプログラム構造である。
カーネルまたは基本ループは単純な形の最適化可能なループを構成する。本発明のシステムのモジュール80は自動的に最適化されたカーネルを特化された演算ライブラリにおいて利用可能にされた機能の数よりもはるかに大きい数で生成することを可能にする。一般に、所与のカーネルのいくつかのバージョンを生成することが可能であり、それぞれのバージョンは環境パラメータのある組合せについて最適化されている。
最適化器12(図3)における最適化ステージは従って適用分野の代表である能力を表す対象プラットフォーム90について最適化されているカーネルの一組、すなわちライブラリを自動的に生成することからなる。
最適化ステージは、ユーザー・プログラムからのソースコードを検査してその中に最適化可能なループを検出し、標準的コンパイラにより生成されたであろうコードの代わりに最適化されたカーネルの使用を強制するようにしたコード生成器18(図3)におけるコード生成ステージに関連している。
モジュール80から来る情報をベンチマークシーケンス1に再投入する手段74が用意される。
アナライザモジュール10における分析ステージが前記コードの最適化および生成ステージに先行し、前記分析ステージは、対象ハードウェア・プラットフォーム90および考慮されている適用分野について、コンパイルされるべき最適化ルールを決定する役割を果たし、最適パフォーマンスが得られるようにしている。アナライザモジュール57からの出力57は最適化ルールを最適化ルールデータベース9に移送する役割を果たしているが、それ自体は移送手段59を介してモジュール80の最適化器12に接続されている。
前記アナライザモジュール10は図2を参照して以下にさらに詳細に説明する。
前記アナライザモジュール10は、手段53および54を介して、プロセッサ91、およびより一般的には最適化のための対象プラットフォーム90が基礎を置くシステムのアーキテクチャの関数として、そしてまたベンチマークシーケンスの関数として特定される静的パラメータ2および動的パラメータ7を受領する。
特に、静的パラメータ2は各ベンチマークシーケンスについてのループ反復数、表アクセス間隔、およびオペランドの型、使用命令の型、プリローディング戦略、並びに命令および反復の順序づけ戦略を含んでいてもよい。
特に、前記動的パラメータ7は、メモリ階層の種々のレベルにおける表オペランド配置、表開始アドレスの相対位置および分岐履歴を含んでいてもよい。
パフォーマンスアナライザモジュール10において、テスト発生器3は静的パラメータ2および動的パラメータ7に関係するデータを利用するが、これらパラメータは入力51および53によりそこに供給され、移送手段61によりバリアントデータベースに移送される潜在的に非常に多数のバリアントを生成するようにしている。
エキササイザと呼ばれる他の自動ツール5はバリアントデータとバリアントデータベース4を移送手段62を介して受領し、このようにして作成されたテストを実行し、それらを実行する一方、変化の範囲にわたって移送手段55により供給される動的パラメータ7を変え、移送手段63を介して関係する測定値を結果データベースと呼ばれるもう一つのデータベース6に移送する。
結果データベース6に格納された測定値はそれ自体移送手段64によりアナライザ8に移送され、アナライザ8は、パフォーマンスの良好な帯域および劣悪な帯域を特定することにより、移送手段57により最適化ルールデータベース9に移送される最適化ルール9を作成する役割を果たす。
前記アナライザ8はまた、例えばアナライザ8が所与のパラメータにおける変化に対する感度が小さいことを見いだした場合は、静的パラメータ2を変更する手段54と動的に変更する手段56を有する。
アナライザ8は最適パフォーマンスの任意の閾値におけるフィルタ手段を含んでいてもよい。そのような場合、最適パフォーマンスに対応しない結果データベースのバリアントを、該バリアントがフィルタ基準を満足する限り、それでもなおパラメータ空間内に最適であるとして保持することが可能である。
コード最適化・生成モジュール80を以下に図3を参照して説明する。
最適化装置12は、コード生成モジュール18にオリジナルソースコード中に特定されるカーネルを受領する手段92により接続された戦略を選択する手段13を含む。戦略選択モジュール13はベンチマークシーケンス1を受領する手段52および最適化ルール9を受領する手段58にも接続される。戦略選択モジュール13は出力67において、テストされたベンチマークシーケンスに対応するそれぞれのカーネルについて、それぞれパラメータのある組合せについて最適であるn個のバージョンのセットを生成する。
バージョンを組合せ・アセンブルするモジュール14は最適化ルール9を受領する手段59、戦略選択モジュール13から来る情報を受領する手段66、および複数15のバージョン1〜nを受領する手段68に接続される。モジュール14は移送手段93を介して情報を引き渡し、前記情報は対応する最適化バージョン、それらの利用帯域および必要に応じ、実行されるべきテストを含み、どのバージョンが最も適しているかを動的に決定するようにしている。
最適化コードを生成する手段18はユーザーソースコード17を受領する手段71に接続される最適化ループ検出モジュール20を備える。モジュール20の出力75はカーネルに分解する手段22に接続され、出力77自体は事例分析・アセンブル・コード投入モジュール23に接続されており、このモジュール23は移送手段92を介して最適化器12に接続され、検出されたカーネルのアイデンティティーを伝送するようにしている。モジュール23は、また、移送手段93を介して対応する最適化カーネルを記載する情報を受領する。モジュール23は、また、最適化コード19を供給する手段73に接続される。
好適な一実施形態では、コード最適化・生成モジュール80は最適化カーネルのデータベース16を含む。組合せ・アセンブルモジュール14は最適化カーネルデータベース14に移送手段79により接続され前記データベース:すなわち、最適化カーネルに、最適化バージョン、それらの利用帯域、および必要に応じて実行されるべきテストを含む情報を格納してどのバージョンが最も適しているかを動的に設定するようにしている。このバリアントでは、事例分析・アセンブル・コード投入モジュール23は、また、最適化カーネルデータベース16に移送手段72を介して接続され、探索されたカーネルが既に前記データベース16に格納されているならば、最適化カーネルを記載する情報を、最適化器12を呼び出すことなく受領するようにしている。
図3から分かるように、事例分析・アセンブル・コード投入モジュール23は、さらに、ベンチマークシーケンス1に前記モジュール23に見いだされたカーネルを、最適化カーネルデータベース16またはベンチマークシーケンス中の対応するアイデンティティーを有しなくても、追加する手段74を備える。
図4は、最適化器12が、最適化カーネルデータベース16が存在する図3に示すバリアントと同じであるので、最適化器12が示されていない特定の実施形態を示す。
この実施形態では、コード生成モジュール18は事例分析・アセンブル・コード投入モジュール23の出力73において再組織化されたソースコード19を生成し、このコード19は引き続き従来のプログラム作成ツール81、82により処理され、対象プラットフォーム90について最適化されたバイナリコード83が得られるようにしている。
図4は非常に容易に実装される実施形態を示す。オリジナル・ユーザー・ソースコード17は上述のコード最適化・生成モジュール80内で、その最適化ループがサブプログラムへの呼び出しにより置き替えられ、サブプログラムに対応するコードが再組織化されたソースコード19に最適化されたカーネルデータベース16から投入されるようにして再組織化される。このようにして再組織化されたソースコード19は、その結果、コンパイラ81とリンクエディタ82を含む従来の連鎖を通る際に、ハードウェア・プラットフォーム90に適合された最適化バイナリコード83を生成するのに必要とされるすべてを含む。
一つの考え得るバリアントでは、最適化カーネルデータベース16の最適化カーネルのソースコードは追加のソースライブラリとして直接コンパイルステップにおいて使用することができる。これは図4において最適化カーネルデータベース16をコンパイラ81に接続する破線矢印85により示されている。このバリアントは、従って、最適化カーネルのソースコードを再組織化されたソースコードに直接投入することを回避するのに役立ち、モジュール18内の生成工程を実行し易くしている。
図5は図4に示す実施形態のバリアントとなる実施形態を示す。
図5のバリアントはある操作システムにより提供される能力を利用し、それにより実行時に編集する動的リンクによりプログラムにアクセス可能である実行可能なバイナリコードの形でライブラリをインストールすることが可能である。
図5のバリアントでは、最適化データベース16からコードを再組織化されたソースコード19に投入する必要がなくなる。しかしながら、最適化されたカーネルの能力をすべて含む動的ライブラリをコンパイラ181およびインストールモジュール182を介して対象プラットフォーム90にインストールすることが必要である。単一のコンパイラを図5のコンパイラ81および181共通に使用することが可能である。図5のこのバリアントでは、インストール操作は各対象プラットフォームについて1回だけ必要とされ、このバリアント最適化プロセスの全体的処理の点でより経済的である。
本発明の最適化コード生成システムは科学計算;信号処理;およびグラフィックス処理の3つの分野への適用に特に好適である。
これら3つの領域において使用されるコードは実装に重要な種々の特性CHAR1〜CHAR4を示す。
・CHAR1:最大量の実行時間を消費するコード部分を構成するループ型構造(または「入れ子ループ」)を示す。
・CHAR2:使用されるデータ構造はほとんど多次元表型であり、非常に規則的なパターン(行、列、ブロック、など)でアクセスされる。
・CHAR3:ループ(または入れ子ループ)は一般に独立の反復により構成され並行して実行することが可能である。
・CHAR4:ループ本体は一般に一連の演算式によって表現構成され、多量のデータにわたって一様(または準一様)である計算に対応する。
当然、科学計算、信号処理およびグラフィックス処理のこれら3つの分野には共通点があるものの、それらには大きな相違点もある。従って、信号処理の分野では、複素数型のデータは特異的な最適化を必要とする非常に重要なタイプのデータを構成するが、このタイプのデータの重要性は他の2つの分野においては取るに足らない。グラフィックス処理は一つの特定の型、すなわちピクセルのデータ、および特別な計算を使用することにより非常に際立っている。さらに、グラフィックスでは、次元ストリームに関係するデータ構造およびアルゴリズムが基本的に重要である。
上述の4つの特性(CHAR1〜CHAR4)はコード最適化に非常に強力であり、それらは完全に特殊な木靴を開発することを可能にする。
・CHAR1⇒最適化は2つの主な利点:反復可能性(および予測可能性)および表現の緻密さを示すループ型構造に集中する。
・CHAR2⇒実行時間の大きな部分(または実際キャッシュメモリの使用が増えると主要部分)を代表する表へのアクセスは、規則性があるので、容易に分析し最適化することができる。
・CHAR3⇒ループ内および入れ子ループ内の相互作用から独立しているので、表へのアクセスの関数として反復空間を通る(最適化)経路を、対象アーキテクチャに特異的な特性に依存するように、使用することが可能になる。表のN個の所与のエレメントにアクセスすることはN!(Nの階乗)通りの異なる仕方(順序)で実行することが可能である。
・CHAR4⇒ループ本体が演算式として単純な構造をしているので、演算式の3つの代表に基づいて系統だった階層的なアプローチを用いることが可能になる。
分析ステージは本質的に実験的なステージであり、その終点で下記が必要である;
・アーキテクチャの強い点および弱い点を決定しておくこと;
・パフォーマンスおよびコード構造の相関のさせ方を知ること;および
・コードに関連する種々のパラメータの関数であってもよい、良好な最適化戦略を突き止めておくこと。
既に述べたように、出発点は、単純であるが包括的であり、かつ「ベンチマークシーケンス」と呼ばれる一組の「ソース型」コード断片である。これらのコード断片はループ型構造をしており、「ソース型」という用語は操作が高いレベルで特異化されており、アセンブラのレベルではないことを意味する。
これらのコード断片はループ本体において下記のように、コードの複雑さの昇順で階層レベルに組織化荒れている:
・レベル0ベンチマークシーケンス:このレベルでは、単一の個別操作がテストされる。すなわち、ループ本体は1つの操作l:すなわち、表からエレメントを読み取る、表にエレメントを書き込む、浮動少数点加算などを含む。これらの操作は高さ0のツリーにより表される単一の演算式により構成されるループ本体に対応する。
・レベル1ベンチマークシーケンス:このレベルでは、2つのレベル0操作が考慮されテストされる:表から読取り表へ書き込む、2つの異なる表から読み取る、表において読取および追加するなど。これらの操作は高さ1のツリーにより表される単一の演算式、または2つの演算式であってそれぞれ高さ0のツリーにより表されるもののいずれかにより構成されるループ本体に対応する。
・レベル2ベンチマークシーケンス:このレベルでは、2つのレベル1操作または3つのレベル0操作が考慮され、テストされる:3つの異なる表から読み取る、2つの表からコンポーネントごとに読み取る、結果を第3の表に書き込むなど。
・レベルKベンチマークシーケンス:レベルKは、先行するレベルから再帰すること(recurrence)により容易に定義することができる。
レベル0のベンチマークシーケンスのすべてが「人為的」、すなわち「現実の」ループを表さないコード断片に対応する。
このように複雑さの昇順のレベルに組織化することも最適化ステージにおいて用いられる。
このようにして定義されるベンチマークシーケンスのセットは無限である。
これらのベンチマークシーケンスは2つの異なるクラスのパラメータを用いる。:
・静的パラメータ:これらのパラメータは静的に(すなわち、実行に先立って、かつ実行とは独立して)定義される。これらの静的パラメータはそれ自体2つの主要なサブクラスに細分割される:すなわち、高レベル静的パラメータ(ループ反復数、表アクセス間隔、オペランド型、...)、および低レベル静的パラメータ(特異的命令、命令順序づけなどの使用)。
・動的パラメータ:これらのパラメータはループを実行する間に定義される。例えば、それらは下記からなる:表オペランドの配置、表出発アドレスの相対的位置、...。
これら2つのクラスのパラメータは非常に異なる態様で用いられる:静的パラメータは異なるテストコード断片を以下に説明するバリアントおよび/または最適化と組み合わせて用いられるが、動的パラメータは単独でテストベンチ上での実行の際に用いられる。
高レベル静的パラメータは比較的に限定され、高レベル言語(例えば、フォートランまたはC)で表現されたループおよび表の従来のパラメータに本質的に対応するが、対象プロセッサに関係する特異性はない。
低レベル静的パラメータによりプロセッサ(アーキテクチャ)と関連する、および命令(オブジェクトコード発生器)の順序付けと関連する特異性のすべてを考慮に入れることが可能になる。ベンチマークシーケンスは(ソース言語で定義され、かつ意図されたプロセッサとは独立の)高レベルの抽象化であり、特にそれらは最適化を含まない。それらを所与のプロセッサ上でテストするために、対応するアセンブラコード断片を生成し最適化する必要がある。この生成の際に、いくつかのバリアント(アセンブラ命令シーケンス)が自動的に生成される。同じベンチマークシーケンスと関連するバリアントのすべてが当初のベンチマークシーケンスに意味的に同等であるコード断片である。異なるコード最適化技法に(すなわち、低レベル静的パラメータに)対応する。これらの最適化は抽象的にベンチマークシーケンスの特定の構造を参照することなく定義することができ、それらは低レベル静的パラメータの主要部分を構成する。
低レベル静的パラメータは下記を含む:
・アセンブラ命令を用いること:ソースレベルにおける単一操作は種々の命令シーケンスを用いて実装することが可能である。特に、この時点においてデータおよび命令のプリローディングを用いる種々の考え得る戦略を取り扱うことが必要である;
・ループ本体の構造:ループの本体を(異なる程度に)展開する;ループ本体の順序づけ命令(プリローディング距離、ベクトル化、キャッシュミスをまとめること、キー間の処理衝突);および
・反復の順序づけ:異なる深さのソフトウェア・パイプライン。
多くにコンパイラにおいて、上記低レベル静的パラメータはコンパイル時間選択肢に対応し、意図する最適化を明示的に実装するのに役立つ。
テスト発生器3の役割は、第一に高レベル静的パラメータ(例えば表アクセス間隔)に、また低レベル静的パラメータに対応する、上記の種々のバリアントを生成することである。
レベル1ベンチマークシーケンスに対して、生成および分析すべきバリアントの総数は非常に多く、数百万にカウントされることがある。それにもかかわらず、生成および分析プロセスは非常に単純に自動化することができる。
エキササイザ5およびアナライザ8では、目的は種々のバリアントのパフォーマンスをテストし、できるだけ良いバリアントおよび/または最適化を選択することである。
このステージは多数の結果の生成を含み、これらの結果は結果データベース6に格納される。実験は階層的に分析ステージと組み合わせて実行される:従って、最初の実験はレベル0ベンチマークシーケンスのバリアントに実行される。この第1キャンペーンの実験の終点で、種々のバリアントについて得られた結果の関数としてソートを実行することができる。若干のバリアントはこのように直接除外され、下記のレベルの考察において考慮されない。これにより、実行することが必要である実験の数の組合せによる爆発的増加を制限することが可能になる。
結果を分析するステージは一見すると、唯一の指標(パフォーマンス)が用いられているので、実行するのが非常に簡単である。実際、プロセスの複雑さの第部分は、一般に最良のバリアントの選択がパラメータに非常に強く依存していることに由来する。
第1のソートを各ベンチマークシーケンスについて最適パフォーマンスをアーキテクチャの仕様に基づいて計算することにより非常に簡単に実行することができる。残念ながら、アーキテクチャとコードの間(レベル0およびレベル1ベンチマークシーケンスと同様に単純なコード断片を含む)の複雑な相互作用に関連してすぐ困難が生じる:これによりパラメータの関数としてのパフォーマンスの変化を記載する図が複雑になる。そのような複雑な挙動を最初に画像処理アルゴリズムを用いることにより分析することができ、次いで所与のバリアントをあるパラメータ範囲に適格とすることにより合成する。このように、分析ステージは単に最良の(そして唯一の)バリアントと各ベンチマークシーケンスのための最適化技法を与えるリストを生成するだけではない:パラメータ範囲のリストは各ベンチマークシーケンスについて、そしてこれらの範囲のそれぞれについて決定され、最良のバリアントと最適化技法が特定される:「最適化ルール」と呼ばれるのはこの種の情報である。
テストされる一組のベンチマークシーケンスは、ベンチマークシーケンスの総数の非常に小さいサブセットである。次に最適化目的に使用されるこのセットは「参照ベンチマークシーケンスのセット」と呼ばれる。
実際は、「合理的な」最適化対象を設定することが非常に重要である:いかなる代償を払っても最適を探索することにより、非常に大きな数のバリアントを得ることが可能になり、一方最適制限を緩和して、最適値の約5%から10%内にすると、単一のバリアントを非常に広範囲のパラメータにわたって用いることが可能になる。これを行うために、フィルタリングを例えば最適パフォーマンスの90%の閾値で実装する。
実際はレベル0、1、および2においてベンチマークシーケンスをテストし分析すれば主要な最適化技術を見いだし確認するには十分である。参照ベンチマークシーケンスのセットは一般にレベル3を越えるシーケンスを含まない。
迅速に実行されるべき実験の量は非常に大きく、レベル2を越えると特に大きい。
実験全体としては理想的な態様で並行操作するのに役立つ:テストは100台または1000台の機械について並行して実行される。この並列性は非常に有用であり、系統的な研究を許容し得る長さの時間において行うことが可能になる。
このステージは完全に自動化することが可能であり、品質および結果の一貫性の確認手順も自動化することが可能である。人間の介入は品質および一貫性を確認する手順により自動的に生成された結果の分析に由来するエラーおよび/または異常を特定するのに必要とされるだけである。
分析ステージの終点において、目的は、対象アーキテクチャについて特異的に最適化された「カーネル」と呼ばれる、非常に多数の単純なコード断片を利用可能にすることであり、最適化プロセスは本質的に分析ステージの終点において発見された最適化技法に基づいている。
厳密にいうと、「カーネル」はループ型コードシーケンスであり、ベンチマークシーケンスと呼ばれる一般的なケースのサブセットを構成する。ベンチマークシーケンスとは異なり、現実的および有用なコード断片に対応する。ベンチマークシーケンスと同様に、それらは複雑さの昇順でレベルに組織化される。
これらのカーネルの生成および/または最適化は下記の4つのステージを適用して行われる。
・1つ以上のベンチマークシーケンスとの相関:最も単純なカーネルについて、直接的対応がカーネルとベンチマークシーケンスの間に存在するが、より複雑なカーネルについては、カーネルは複数の参照ベンチマークシーケンスに分解されることが必要である。この相関および/または分解はソースレベルでカーネルループ本体の特性:表の数、表アクセス間隔などの関数として実行される。
・コード生成および/または命令の順序づけおよび/または命令の最適化:分析ステージの間に(対応するベンチマークシーケンスの関数として)検出された最適化技法はここでカーネル用のコードを直接用いて生成および/または最適化に提供される。任意の所与のカーネルについて、いくつかの可能なバージョンをパラメータの関数として生成することが可能である。
・レジスタ割当:用いられる最適化技術の多くはレジスタの利用可能性に対する圧力を顕著に増加させる。そのような状況下では、全ての利用可能なレジスタを割り当てる方法を組織することが適切である。
・実験および/または確認:生成され最適化されたカーネルを分析ステージのテストベンチを用いてテストする。このステージの終点において、カーネルのパフォーマンスの簡単なモデルが構築される。
コンパイラに用いられている従来の最適化と比べて、ここで用いられている最適化は非常に異なる:第一に、それらはパフォーマンスを評価する詳細なプロセスから直接導かれる(分析ステージの間に行われる)、その後それらはずっと複雑になり、より高いパフォーマンスになる(特にレジスタの割当について)。その理由は、それらはオフラインで、すなわち時間的「制約」なしに実行されるからである。
参照ベンチマークシーケンスおよび生成ルールを使用すると、第一にアーキテクチャの微細な特性(理論的特性ではなく、むしろ測定された操作特性のすべてを考慮に入れることが可能になり、第二に種々のバージョンをパラメータの関数として選択することができる。
このステージの終点において、最適化カーネルデータベース16が構築され、これは生成されたカーネルだけでなく、それらのパフォーマンスを種々のパラメータの関数として関連づけた情報も含むものである。各カーネルは、また、ベンチマークシーケンスに用いられるのと同じ手順を用いてテストされる。
実際には、最適化カーネルデータベース16は系統的かつ網羅的方法でレベル1、2、3、4および5のすべてのカーネルを備える。このデータベースを構築するための計算量としてのコストは大きいが、パフォーマンスの分析ステージと同様に、並行して非常に効率的に実行することが可能である。
ユーザーコード最適化は3つのステージで起きる。
・最適化可能なループの検出(モジュール20):これはカーネルに分解することが可能なソースコード中のループを認識することからなる。このステージは自動的並行処理化および/またはベクトル化に用いられる技法と非常によく似た技法を利用する。必要に応じ、ソースコードを再構築してループが最適化に最も適した形で表れるようにする。
・最適ループおよびカーネルへの分解の分析(モジュール22):これはカーネル最適化に用いられるものと近似した構造一致および分解技法に基づいており、ループは一連のカーネルに分解される。
・コードのアセンブルおよび投入(モジュール23):分解の目的に用いられる種々のカーネルはアセンブルされソースコードに再投入される。
分解手順は一般にオリジナルソースループの特性の関数としてパラーメータ化される。
提案された最適化の統合は:
・存在するコンパイル鎖におけるプリプロセッサにおいて、統合される、これは透明、すなわちコンパイラのコードにアクセスする必要なく行われるか、
・さもなければ直接コンパイラにおいて、統合され、これは当然コンパイラのコードに変更がなされることが必要である。
図3を参照して上述したように分析ステージの終点において歩かずの最適化ルールが利用可能である:これらのルールはベンチマークシーケンスおよびパラメータ範囲の関数である。中間カーネル工程を介して通過する代わりに、一つの可能なバリアントは最適化ループを直接ベンチマークシーケンスと相関させて最適化ルールを最適化ループに、最適化カーネルデータベース16に格納されたカーネルを利用することなく、直接提供することである。
このバリアントはカーネルを利用するよりも簡単であり、最適化ルールをより柔軟に使用することが可能になる。しかしながら、本質的にインラインで行われるので、探索されるバリアントの数は必然的により小さくなり、その結果、得られるパフォーマンスは先験的に低下する。
最適化ステージの終点において、本システムは歩かずの「最適化可能な」ループに対する最適形態を生成したが、分解操作が必要であったので、これらは先験的にカーネルデータベースにおいて直接利用できなかった。これらの最適化形態はそれ自体最適化カーネルデータベース16内に格納され、その後再使用することが可能である。従って、カーネルデータベース16は自動的にこのトレーニング形態で充実される。
図1は本発明に従って最適化コードを自動生成するシステムを構成するモジュールの組を示すブロック図である。 図1のシステムに実装することができるパフォーマンスアナライザモジュールの構造をさらに詳細に示すブロック図である。 図1のシステムに実装することができるコード最適化・生成モジュールの構造をさらに詳細に示すブロック図である。 図4は再組織化されたソースコードを生成するモジュールの第1の実施形態を示すブロック図であり、対応する対象プラットフォームに対して最適化されたバイナリコードの取得に関連している。 図5は再組織化されたソースコードを生成するモジュールの第2の実施形態を示すブロック図であり、対応する対象プラットフォームに対して最適化されたバイナリコードの取得に関連している。
符号の説明
1 ベンチマークシーケンス
2 静的パラメータ
3 テスト発生器
4 バリアントデータベース
5 自動ツール(エキササイザ)
6 結果データベース
7 動的パラメータ
8 アナライザ
9 最適化ルールデータベース
10 アナライザモジュール
12 最適化器
13 戦略選択モジュール
16 最適化カーネルデータベース
17 (ユーザー)ソースコード
18 コード生成器(モジュール)
19 最適化コード
20 最適化ループ検出モジュール
23 事例分析・アセンブル・コード投入モジュール
51、52、53 入力
57 アナライザモジュール
55、57、59、62、63、64、93 移送手段
58 最適化ルールを受領する手段
67、75 出力
80 コード最適化・生成モジュール
81 コンパイラ
82 リンクエディタ
83 最適化バイナリコード
90 ハードウェア・プラットフォーム
91 プロセッサ
92 カーネルを受領する手段
181 コンパイラ181
182 インストールモジュール
CHAR1〜CHAR4 特性

Claims (26)

  1. ユーザーにより提供されたソースコード(17)に自動的に動作して、少なくとも1つのプロセッサ(91)を有し所定の適用分野おいて使用する所定のハードウェア・プラットフォーム(90)上で動作するのに適した最適化コード(19)を生成するシステムであって、前記システムは前記所定の適用分野について、前記プロセッサの挙動をパフォーマンスで表す、ベンチマークシーケンス(1)と呼ばれる記号コードシーケンスを受領する手段(51、52);前記所定のハードウェア・プラットフォーム(90)、そのプロセッサ(91)、および前記ベンチマークシーケンス(1)に基づいて定義された第1の静的パラメータ(2)を受領する手段(53);同じく前記所定のハードウェア・プラットフォーム(90)、そのプロセッサ(91)および前記ベンチマークシーケンス(1)から定義された動的パラメータ(7)を受領する手段(55);前記ベンチマークシーケンス(1)、前記静的パラメータ(2)および前記動的パラメータ(7)を用いて行われる試験およびパフォーマンスの測定から最適化ルールを作成する分析装置(10);第一に前記ベンチマークシーケンス(1)、および第二に前記ユーザーソースコード(17)を検査するための最適化ルール(9)を受領するコードを最適化・生成する装置(80)であって、最適化可能な複数のループを検出し、前記複数のループをカーネルに分解し、かつコードをアセンブルおよび投入して前記最適化コード(19)を引き渡す装置(80);およびコードを生成最適化する前記装置から来る情報を再投入し、かつ前記カーネルを前記ベンチマークシーケンス(1)に戻して関連づける手段(74)を備えたことを特徴とするシステム。
  2. 前記分析装置(10)は、第一に前記ベンチマークシーケンス受領手段(51)に、第二に前記静的パラメータ受領手段(53)に接続されたテスト発生器(3)であって、移送手段(61)により移送されてバリアントデータベース(4)に格納される多数のテストバリアントを自動的に生成するテスト発生器(3);第一に前記バリアントデータベース(4)に格納された前記テストバリアントを受領する移送手段(62)に、第二に前記動的パラメータを受領する手段(55)に接続された前記テストバリアントを前記動的パラメータ(7)の変化の範囲内で実行して移送手段(63)により移送されて結果データベース(6)に格納される結果を生成するエキササイザ(8);および前記移送手段(64)に接続されて前記結果データベース(6)に格納された前記結果を受領し、それらを分析し、かつそれらから、移送手段(57)により最適化ルールデータベース(9)に移送される最適化ルールを推論するアナライザ(8)を備えることを特徴とする、請求項1に記載のシステム。
  3. 前記アナライザ(8)は、最適パフォーマンスに対する任意の閾値を有するフィルタ手段を備え、前記バリアントが前記フィルタ基準を満足する限り、前記結果データベースのバリアントを前記パラメータ空間において最適であると判定するようにしたことを特徴とする、請求項2に記載のシステム。
  4. 前記アナライザ(8)は、さらに前記静的パラメータ(2)を変更する手段(54)および前記動的パラメータ(7)を変更する手段(56)を備えることを特徴とする、請求項3に記載のシステム。
  5. 前記コードを最適化および生成する装置(80)は、最適化コードを生成する装置(18)と最適化器(12)とを備え、前記最適化器は第一に前記オリジナルソースコード中に特定されたカーネルを受領する手段(92)に、第二に前記ベンチマークシーケンス(1)を受領する手段(52)に、および第三に前記最適化ルール(9)を受領する手段(58)に接続された戦略選択モジュール(13)であって、テストされたベンチマークシーケンスに対応するそれぞれのカーネルについてそれぞれあるパラメータの組合せの下で最適である複数のバージョン(15)を生成する戦略選択モジュールと、前記最適化ルール(9)を受領する手段(59)に、前記戦略選択モジュール(13)から来る情報を受領する手段(66)に、および前記複数のバージョンを受領する手段(68)に接続された組合せ・アセンブルモジュール(14)とを備え、移送手段(93)を介して、前記対応する最適化バージョン、それらの使用帯域、および必要に応じて前記実行されるべきテストを含む情報を引き渡してどのバージョンが最も適しているかを動的に決定するようにしたことを特徴とする、請求項1〜4のいずれか一項に記載のシステム。
  6. 前記システムは最適化カーネルデータベース(16)を備え、前記組合せ・アセンブルモジュール(14)は移送手段(79)により前記最適化カーネルデータベース(16)に接続されて前記最適化カーネルデータベースに情報を格納し、前記情報は前記最適化バージョン、それらの使用帯域、および必要に応じて実行されるべきテストを含む情報をどのバージョンがもっとも適しているかを動的に決定するようにしたことを特徴とする、請求項5に記載のシステム。
  7. 前記コード最適化・生成装置(80)は最適化器(12)と最適化コード生成装置(18)とを備え、前記最適化コード生成装置はユーザーソースコード(17)を受領する手段(71)に接続された最適化可能ループ検出手段(20)、それらをカーネルに分解するモジュール(22)、移送手段(92)を介して前記最適化器(12)に接続されて前記検出されたカーネルのアイデンティティー(識別情報)を伝送するようにした事例分析、アセンブルおよびコード投入モジュール、および前記対応する最適化カーネルを記載する情報を受領する移送手段(93)を備え、前記事例分析、アセンブルおよびコード投入モジュール(23)も最適化コード供給手段(73)に接続されていることを特徴とする、請求項1〜6のいずれか一項に記載のシステム。
  8. 前記事例分析、アセンブルおよびコード投入モジュール(23)も前記最適化カーネルデータベース(16)に接続され、最適化カーネルを記載する情報を、前記検索された最適化カーネルがそこに格納されているならば、前記最適化器(12)を呼び出すことなく、受領するようにしたことを特徴とする、請求項6または7に記載のシステム。
  9. 前記事例分析、アセンブルおよびコード投入モジュール(23)は、さらに、前記ベンチマークシーケンスに前記事例分析、アセンブルおよびコード投入モジュールにおいて発見されたカーネルを、前記最適化カーネルデータベースまたはベンチマークシーケンス(1)のいずれにおいても対応するアイデンティティー(識別情報)を持たずに追加する手段(74)を備えることを特徴とする、請求項8に記載のシステム。
  10. 前記システムはコンパイラ(81)とリンクエディタ(82)とを備え、再組織化されたソースコード(19)を前記コード最適化・生成装置(80)から受領し、前記ハードウェア・プラットフォーム(90)に適合された最適化バイナリコード(83)を生成することを特徴とする、請求項6、8および9のいずれか一項に記載のシステム。
  11. 前記システムは、前記最適化カーネル用の前記ソースコードを前記最適化カーネルデータベース(16)から前記コンパイラ(81)に移送する手段(85)を備えたことを特徴とする、請求項10に記載のシステム。
  12. 前記システムはコンパイラ(181)と、動的ライブラリを前記ハードウェア・プラットフォーム(90)上にインストールするインストールモジュール(182)とを備え、前記ライブラリは前記最適化カーネルの能力の全てを含むことを特徴とする、請求項10に記載のシステム。
  13. 前記所定の適用分野は科学計算であることを特徴とする、請求項1〜12のいずれか一項に記載のシステム。
  14. 前記所定の適用分野は信号処理であることを特徴とする、請求項1〜12のいずれか一項に記載のシステム。
  15. 前記所定の適用分野はグラフィックス処理であることを特徴とする、請求項1〜12のいずれか一項に記載のシステム。
  16. 前記ベンチマークシーケンス(1)は、ソース型言語で特定され、かつループ本体用のコードの複雑さの昇順により階層レベルで組織化された一組の単純かつ包括的ループ型コード断片を含むことを特徴とする、請求項1〜15のいずれか一項に記載のシステム。
  17. 前記ベンチマークシーケンスは、唯一の個別動作がテストされ、高さ0のツリーによって表される単一の演算式により構成されるループ本体に対応するレベル0のベンチマークシーケンスを含むことを特徴とする、請求項16に記載のシステム。
  18. 前記ベンチマークシーケンスは、レベル2のベンチマークシーケンスを含んでいてもよく、前記ベンチマークシーケンスに対しては、2つのレベル0の操作の組合せ;および高さ1のツリーによって表される単一の演算式により、またはそれぞれ高さ0のツリーによって表される2つの演算式により構成されるループ本体に対応するレベル1のベンチマークシーケンス操作が考えられ、かつテストされることを特徴とする、請求項17に記載のシステム。
  19. 前記ベンチマークシーケンス(1)は、レベル1のベンチマークシーケンスを含み、前記ベンチマークシーケンスに対して2つのレベル1の操作または3つのレベル0の操作が考えられ、かつテストされることを特徴とする、請求項18に記載のシステム。
  20. 前記静的パラメータ(2)は、特に各ベンチマークシーケンスのループ反復数、表アクセス間隔、およびオペランド型、使用命令の型、先行載荷(プリロード)戦略、および命令および反復の順序づけ戦略を含むことを特徴とする、請求項16〜19のいずれか一項に記載のシステム。
  21. 前記動的パラメータ(7)は、特にメモリ階層の種々のレベルにおける表オペランドの位置、表開始アドレスの相対的位置、および分岐履歴を含むことを特徴とする、請求項16〜20のいずれか一項に記載のシステム。
  22. 前記最適化カーネルデータベース(16)は、現実の有用な、複雑さの昇順に階層レベルに組織化されたコード断片に対応するループ型ソースコードシーケンスを含むことを特徴とする、請求項6、8および9のいずれか一項に記載のシステム。
  23. 前記所定のハードウェア・プラットフォーム(90)は、イタニウム(ItaniumTM)型の少なくとも1つのプロセッサを備えたことを特徴とする、請求項1〜12のいずれか一項に記載のシステム。
  24. 前記所定のハードウェア・プラットフォーム(90)は、IBM社から供給されたパワー(Power)またはパワーPC(Power PCTM)型の少なくとも1つのプロセッサを備えたことを特徴とする、請求項1〜12のいずれか一項に記載のシステム。
  25. 前記所定のハードウェア・プラットフォーム(90)は、イタニウム(Itanium TM )型の少なくとも1つのプロセッサを備えており、
    前記最適化ルール(9)は下記のルールのうち、少なくとも幾つか:
    a)書込パフォーマンスが読取パフォーマンスに比べて劣っている場合、書込の数を最小化する;
    b)浮動小数点におけるローディングペアの使用の重要性;
    c)ループがループ本体の複雑さの関数として展開される程度を調整する;
    d)演算操作における操作待ち時間を用いる;
    e)短いベクトルに対してマスキング技術を使用する;
    f)メモリアクセス(読取、書込、プリローディング)用の局所さフィックスを用いる;
    g)プリローディング距離を定義する;
    h)程度4のベクトル化を実行してL2バンクの衝突の若干を回避する;
    i)複数のバリアントを考慮に入れて他のL2バンクの衝突と、読取/書込キーにおける衝突とを回避する;
    j)種々の最適化に関連するパフォーマンス改善を考慮に入れる;
    k)誤った予測(短いベクトル)を最小化する分岐鎖を用いる;
    l)メモリアクセスを統合する(ピクセルを一緒のグループにする);および
    m)ピクセルにベクトル化処理をする
    を含むことを特徴とする、請求項13〜15のいずれか一項に記載のシステム。
  26. 前記所定のハードウェア・プラットフォーム(90)は、IBM社から供給されたパワー(Power)またはパワーPC(Power PC TM )型の少なくとも1つのプロセッサを備えており、
    前記最適化ルール(9)は下記のルールのうち、少なくとも幾つか:
    a)読取値を再順序づけしてキャッシュ欠陥をまとめる;
    b)書込値に対してのみプリローディングを用いる;
    c)ループがループ本体の複雑さの関数として展開される程度を調整する;
    d)演算操作における操作待ち時間を用いる;
    e)メモリアクセス(読取、書込、プリローディング)用の局所サフィックスを用いる;
    f)プリローディング距離を定義する;
    g)複数バリアントを考慮に入れて読取/書込キーにおける衝突を避ける;および
    h)種々の最適化に関連するパフォーマンス改善を考慮に入れる
    を含むことを特徴とする、請求項13〜15のいずれか一項に記載のシステム。
JP2006548350A 2004-01-14 2005-01-13 最適化コードの自動発生システム Expired - Fee Related JP4823075B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
FR0400291A FR2865047B1 (fr) 2004-01-14 2004-01-14 Systeme de generation automatique de codes optimises
FR0400291 2004-01-14
PCT/FR2005/000073 WO2005073851A2 (fr) 2004-01-14 2005-01-13 Systeme de generation automatique de codes optimises

Publications (2)

Publication Number Publication Date
JP2007518176A JP2007518176A (ja) 2007-07-05
JP4823075B2 true JP4823075B2 (ja) 2011-11-24

Family

ID=34684970

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006548350A Expired - Fee Related JP4823075B2 (ja) 2004-01-14 2005-01-13 最適化コードの自動発生システム

Country Status (17)

Country Link
US (1) US7979852B2 (ja)
EP (1) EP1704476B8 (ja)
JP (1) JP4823075B2 (ja)
CN (1) CN100388203C (ja)
AR (2) AR047360A1 (ja)
AT (1) ATE428974T1 (ja)
CA (1) CA2553133A1 (ja)
CY (1) CY1109218T1 (ja)
DE (1) DE602005013908D1 (ja)
DK (1) DK1704476T3 (ja)
ES (1) ES2326126T3 (ja)
FR (1) FR2865047B1 (ja)
PL (1) PL1704476T3 (ja)
PT (1) PT1704476E (ja)
TW (1) TW200537379A (ja)
UY (1) UY28703A1 (ja)
WO (1) WO2005073851A2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20130132674A (ko) * 2012-05-23 2013-12-05 김현수 명령어의 추상화를 이용한 명령어 집합 아키텍처 자동 맵핑 기법

Families Citing this family (44)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7546588B2 (en) * 2004-09-09 2009-06-09 International Business Machines Corporation Self-optimizable code with code path selection and efficient memory allocation
WO2006064409A1 (en) * 2004-12-13 2006-06-22 Koninklijke Philips Electronics N.V. Compiling method, compiling apparatus and computer system for a loop in a program
US9378002B2 (en) * 2006-12-22 2016-06-28 Core Wireless Licensing S.A.R.L. System, method, apparatus and computer program product for providing memory footprint reduction
US20080244607A1 (en) * 2007-03-27 2008-10-02 Vladislav Rysin Economic allocation and management of resources via a virtual resource market
US8689194B1 (en) 2007-08-20 2014-04-01 The Mathworks, Inc. Optimization identification
US8370823B2 (en) * 2007-08-27 2013-02-05 International Business Machines Corporation Device, system, and method of computer program optimization
JP4339907B2 (ja) * 2007-10-24 2009-10-07 株式会社日立製作所 マルチプロセッサ向け最適コード生成方法及びコンパイル装置
US20090119673A1 (en) * 2007-11-06 2009-05-07 Credit Suisse Securities (Usa) Llc Predicting and managing resource allocation according to service level agreements
US8782627B2 (en) * 2007-11-29 2014-07-15 Microsoft Corporation Path specializations for runtime code with phase behavior
US20090193402A1 (en) * 2008-01-28 2009-07-30 Guy Bashkansky Iterative Compilation Supporting Entity Instance-Specific Compiler Option Variations
US9678775B1 (en) * 2008-04-09 2017-06-13 Nvidia Corporation Allocating memory for local variables of a multi-threaded program for execution in a single-threaded environment
US8219358B2 (en) 2008-05-09 2012-07-10 Credit Suisse Securities (Usa) Llc Platform matching systems and methods
US8286198B2 (en) * 2008-06-06 2012-10-09 Apple Inc. Application programming interfaces for data parallel computing on multiple processors
US20120110030A1 (en) * 2009-04-10 2012-05-03 Mark Pomponio Software database system and process of building and operating the same
CN101872301A (zh) * 2009-04-24 2010-10-27 深圳富泰宏精密工业有限公司 测量程序优化系统及方法
US8972961B2 (en) 2010-05-19 2015-03-03 International Business Machines Corporation Instruction scheduling approach to improve processor performance
US8819652B2 (en) * 2010-07-30 2014-08-26 General Electric Company System and method for parametric system evaluation
US20120124555A1 (en) * 2010-11-11 2012-05-17 Codekko Software, Inc. Optimization of Compiled Control Objects
US8572594B2 (en) 2010-12-22 2013-10-29 Microsoft Corporation Invasion analysis to identify open types
WO2012143760A1 (en) * 2011-04-20 2012-10-26 Freescale Semiconductor, Inc. Method and apparatus for generating resource efficient computer program code
US8423986B1 (en) * 2011-10-12 2013-04-16 Accenture Global Services Limited Random utility generation technology
US9185513B1 (en) * 2011-12-02 2015-11-10 Google Inc. Method and system for compilation with profiling feedback from client
US9613083B2 (en) 2012-04-26 2017-04-04 Hewlett Packard Enterprise Development Lp Nesting level
JP2013235386A (ja) * 2012-05-08 2013-11-21 Internatl Business Mach Corp <Ibm> 最適化装置、最適化方法、及び最適化プログラム
US9244677B2 (en) * 2012-09-28 2016-01-26 Intel Corporation Loop vectorization methods and apparatus
CN103901810B (zh) * 2012-12-31 2017-04-12 施耐德电器工业公司 可编程控制器用户应用的优化系统及方法
US9268541B2 (en) 2013-03-15 2016-02-23 Intel Corporation Methods and systems to vectorize scalar computer program loops having loop-carried dependences
US9158511B2 (en) * 2013-05-20 2015-10-13 Advanced Micro Devices, Inc. Scalable partial vectorization
US9372678B2 (en) 2013-06-14 2016-06-21 Intel Corporation Compiler optimization for complex exponential calculations
GB2521367A (en) 2013-12-17 2015-06-24 Ibm Adaptable and extensible runtime and system for heterogeneous computer systems
JP5988444B2 (ja) 2014-02-14 2016-09-07 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 最適化したバイナリー・モジュールをテストする方法、並びに、当該最適化したバイナリー・モジュールをテストするためのコンピュータ及びそのコンピュータ・プログラム
CN103760965B (zh) * 2014-02-21 2016-08-17 中南大学 一种能量受限嵌入式系统的算法源程序节能优化方法
CN104239055A (zh) * 2014-09-15 2014-12-24 大连楼兰科技股份有限公司 检测软件代码复杂度的方法
US9706013B2 (en) * 2014-09-17 2017-07-11 Oracle International Corporation Mobile runtime conditional sections for surveys
US9489181B2 (en) * 2014-10-09 2016-11-08 National Instruments Corporation Correlation analysis of program structures
CN105988855B (zh) * 2015-02-16 2019-11-12 龙芯中科技术有限公司 即时编译参数优化方法及装置
EP3376373A1 (en) * 2017-03-15 2018-09-19 Siemens Aktiengesellschaft A method for deployment and execution of a machine learning model on a field device
EP3827336A1 (en) * 2018-08-09 2021-06-02 INESC TEC - Instituto de Engenharia de Sistemas e Computadores, Tecnologia e Ciência Method and apparatus for optimizing code for field programmable gate arrays
US10956137B2 (en) * 2019-06-10 2021-03-23 International Business Machines Corporation Compiling source code using source code transformations selected using benchmark data
KR102132933B1 (ko) * 2019-09-09 2020-07-10 국방과학연구소 소프트웨어의 제어 흐름 보호장치 및 그 방법
CN110727437B (zh) * 2019-09-10 2024-04-09 平安普惠企业管理有限公司 代码优化项获取方法、装置、存储介质及电子设备
US11720351B2 (en) * 2020-03-17 2023-08-08 Onspecta, Inc. Microkernel-based software optimization of neural networks
TWI755112B (zh) * 2020-10-23 2022-02-11 財團法人工業技術研究院 電腦程式碼之優化方法、優化系統及應用其之電子裝置
CN113286148A (zh) * 2020-11-25 2021-08-20 常熟友乐智能科技有限公司 一种基于大数据和物联网的视频设备优化方法、装置及服务器

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62219130A (ja) * 1986-03-20 1987-09-26 Fujitsu Ltd プログラムの最適化方式
JPS62271024A (ja) * 1986-05-20 1987-11-25 Mitsubishi Electric Corp 最適化処理方式
JPH02176938A (ja) * 1988-12-28 1990-07-10 Hitachi Ltd 機械語命令最適化方式
JPH03157731A (ja) * 1989-11-16 1991-07-05 Hitachi Ltd チユーニング支援システム
JPH09319587A (ja) * 1996-05-30 1997-12-12 Nec Corp 計測情報を使ったポストオプティマイズによるプログラムの生成方式

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE4112090A1 (de) * 1991-04-12 1992-10-15 Siemens Ag Verfahren zum maschinellen erstellen eines aus mehreren programmteilen bestehenden programmes
US5815721A (en) * 1996-04-25 1998-09-29 Hewlett-Packard Company Method and apparatus for optimizing complex control structures using abstract web patterns
JP2000078262A (ja) * 1998-08-31 2000-03-14 Nippon Telegr & Teleph Corp <Ntt> 携帯電話端末
US6895580B2 (en) * 2001-09-20 2005-05-17 International Business Machines Corporation Expression reduction during compilation through routine cloning
JP2003173262A (ja) * 2001-12-06 2003-06-20 Hitachi Ltd プログラムチューニングシステムとプログラムチューニング方法およびプログラムと記録媒体
US7975256B2 (en) * 2004-06-30 2011-07-05 International Business Machines Corporation Optimizing application performance through data mining

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62219130A (ja) * 1986-03-20 1987-09-26 Fujitsu Ltd プログラムの最適化方式
JPS62271024A (ja) * 1986-05-20 1987-11-25 Mitsubishi Electric Corp 最適化処理方式
JPH02176938A (ja) * 1988-12-28 1990-07-10 Hitachi Ltd 機械語命令最適化方式
JPH03157731A (ja) * 1989-11-16 1991-07-05 Hitachi Ltd チユーニング支援システム
JPH09319587A (ja) * 1996-05-30 1997-12-12 Nec Corp 計測情報を使ったポストオプティマイズによるプログラムの生成方式

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20130132674A (ko) * 2012-05-23 2013-12-05 김현수 명령어의 추상화를 이용한 명령어 집합 아키텍처 자동 맵핑 기법
KR101940265B1 (ko) * 2012-05-23 2019-01-18 충남대학교산학협력단 명령어 집합 아키텍처 자동 맵핑 기법

Also Published As

Publication number Publication date
JP2007518176A (ja) 2007-07-05
PT1704476E (pt) 2009-07-21
CY1109218T1 (el) 2014-07-02
ES2326126T3 (es) 2009-10-01
DE602005013908D1 (de) 2009-05-28
WO2005073851A2 (fr) 2005-08-11
EP1704476B8 (fr) 2009-09-23
WO2005073851A3 (fr) 2006-05-04
PL1704476T3 (pl) 2010-01-29
DK1704476T3 (da) 2009-08-17
EP1704476B1 (fr) 2009-04-15
ATE428974T1 (de) 2009-05-15
US7979852B2 (en) 2011-07-12
AR049794A1 (es) 2006-09-06
AR047360A1 (es) 2006-01-18
FR2865047B1 (fr) 2006-04-07
US20080034360A1 (en) 2008-02-07
CN100388203C (zh) 2008-05-14
EP1704476A2 (fr) 2006-09-27
UY28703A1 (es) 2005-07-29
TW200537379A (en) 2005-11-16
FR2865047A1 (fr) 2005-07-15
CN1930552A (zh) 2007-03-14
CA2553133A1 (en) 2005-08-11

Similar Documents

Publication Publication Date Title
JP4823075B2 (ja) 最適化コードの自動発生システム
US5805863A (en) Memory pattern analysis tool for use in optimizing computer program code
Fauzia et al. Characterizing and enhancing global memory data coalescing on GPUs
Healy et al. Automatic detection and exploitation of branch constraints for timing analysis
White et al. Timing analysis for data and wrap-around fill caches
Nilsen et al. Worst-case execution time analysis on modern processors
Carrington et al. An idiom-finding tool for increasing productivity of accelerators
Rauchwerger Run-time parallelization: Its time has come
Jung et al. DeepCuts: a deep learning optimization framework for versatile GPU workloads
Falk et al. Source code optimization techniques for data flow dominated embedded software
Filipovič et al. Using hardware performance counters to speed up autotuning convergence on GPUs
US9720663B2 (en) Methods, systems and apparatus to optimize sparse matrix applications
US8136103B2 (en) Combining static and dynamic compilation to remove delinquent loads
Pan et al. Rating compiler optimizations for automatic performance tuning
Belaoucha et al. FADAlib: an open source C++ library for fuzzy array dataflow analysis
Blackmore et al. Automatically tuning the gcc compiler to optimize the performance of applications running on embedded systems
Kumar et al. Peruse and profit: Estimating the accelerability of loops
Chennupati et al. Machine Learning–enabled Scalable Performance Prediction of Scientific Codes
Besnard et al. A framework for automatic and parameterizable memoization
Morelli et al. Warping cache simulation of polyhedral programs
Stevens et al. A mechanism for balancing accuracy and scope in cross-machine black-box GPU performance modeling
Ierotheou et al. Generating OpenMP code using an interactive parallelization environment
Chikin et al. Memory-access-aware safety and profitability analysis for transformation of accelerator-bound OpenMP loops
Haine et al. Exploring and evaluating array layout restructuring for simdization
Ding et al. The potential of computation regrouping for improving locality

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20070518

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20070518

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080108

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110426

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110721

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

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110906

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20140916

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees