コンパイラ最適化 wikipedia|無料辞書
コンパイラ最適化(こんぱいらさいてきか、)とは、
実行ファイルを効率化し、実行時間やメモリ使用量などを最小化するよう
コンパイラの出力を調整する処理である。最も一般的な要求は
プログラムの実行時間を最小化することであり、その次に使用する
メモリ量を最小化することである。また、携帯可能なコンピュータが増えるにつれて、消費電力を最小化するという最適化も生まれてきた。
一部のコード最適化問題は
NP完全問題であることが示されている。実際には、
プログラマがコンパイラによる最適化の完了を待てる時間の上限なども考慮してコンパイラ最適化を実装する(最適化は
CPU時間とメモリを多大に使用する)。かつては、コンピュータのメモリ実装量も実行できる最適化を制限する要因だった。
コンパイラ開発社は製品を「最適化コンパイラ」と銘打つことが多く、コンパイラの最適化の能力が売り上げや評判に大きく影響する。
◆ 最適化の種類
最適化はソース言語(
プログラミング言語)に近い表現の
中間語に対して行う高水準最適化と、
機械語に近い表現の中間語に対して適用される低水準最適化に分類される。
最適化技法はその「スコープ」で分類できる。スコープは文単位からプログラム全体まで様々である。一般にスコープの狭い技法の方が広いものより実装が容易だが、効果は小さい。スコープとしては以下のようなものがある:
:コンパイラが
機械語を生成した後で行われる最適化。この場合、(ちょうどのぞき穴から見るように)隣接する数命令だけに注目し、その命令列をより短く、場合によっては1命令に置換できないか検討する。例えば、何らかの値に2をかけている場合、シフト命令や加算命令(自分自身を加算する)に置き換えた方が高速化できる場合がある(これは
演算子強度低減でもある)。
:ループを構成する文のブロック(例えば
for文)に対して最適化を行う(
ループ不変量コード移動など)。プログラムの実行時間の大部分は何らかのループ内であることが多いため、ループ最適化は性能に重大な影響を与える可能性がある。
;局所最適化、プロシージャ内最適化
:1つの関数定義内の情報だけを考慮する最適化。解析の手間が削減される(時間とメモリ使用量が節約される)が、大域変数やその関数内で他の関数を呼び出している箇所について最悪の場合を想定する必要がある(手続き外についての情報がないため)。
;プロシージャ間最適化、プログラム全体の最適化
:プログラムのソースコード全体を解析する最適化。より多くの情報が得られるため、さらに効率的な最適化が可能。新しい技法も適用可能である。例えば
インライン展開技法を使えば、関数呼び出しを関数そのものと置き換えることになる。
スコープによる分類のほかに、以下の2つの最適化の分類がある:
:多くの高級言語の構文要素や抽象化は共通である。判断(if、switch、case)、ループ(for、while、 repeat...until、do...while)、カプセル化(構造体、オブジェクト)などがある。この特徴を利用して言語に依存しない最適化技法を利用できる。しかし、言語によってはある種の最適化が容易だったり、逆に難しかったりする。例えば、
C言語や
C++にポインタがあるため、配列アクセスの最適化が困難である。逆に、一部の言語では関数が副作用を持つことができない。このため、同じ引数で同じ関数を何度も呼び出す場合、コンパイラはこれを最適化して一回だけその関数を呼び出して、後はその結果を再利用することができる。
;マシン(CPU)非依存とマシン依存
:抽象的な概念(ループ、オブジェクト、構造体)に関する最適化はコンパイラが対象としているマシンとは関係なく実施できる。しかし、効果的な最適化の多くは対象プラットフォーム特有の機能を考慮したものであることが多い。
マシン依存の最適化の具体例を示す。レジスタに0を設定する最もシンプルな方法は、命令内で 0 という定数(イミディエート値)をレジスタに設定することである。別のより技巧的な方法では、レジスタを自分自身との
XORの演算結果で置き換える方法がある。どちらの方法を利用するかはコンパイラ次第である。多くの
RISCの場合、どちらの方法でも命令長と実行時間に違いはない。
インテル x86系などでは、XORを使った方法がより短く速い。これはイミディエート値をデコードする必要がなく、内部のimmediate operand registerを使わないため。またXOR命令がレジスタの依存関係によってパイプライン停止を招くことがあるが、自分自身のXORではパイプラインは停止しない。
◆ 最適化に影響する要因
◇ 対象マシン
適用可能かつ適用すべき最適化の選択は対象マシンの性格に依存する。場合によってはマシン依存の要因をパラメータ化可能であり、マシンを指定するパラメータによってコードに適用する最適化を変えることもできる。
GCCは、そのような手法を採用している例である。
◇ 対象CPUのアーキテクチャ
:レジスタが多ければ多いほど、性能の最適化が容易になる場合がある。レジスタが多ければ
局所変数を
コールスタック上ではなくレジスタに割り当てられる。一時的な結果をレジスタに残すことでメモリの読み書きをする回数を減らすことができる。
: CISC命令セットの命令長は可変であることが多く、命令数も多く、各命令の実行時間も一定していない。RISC命令セットでは命令長が固定で、
アドレッシングモードもCISCより少なく、各命令は一定間隔で実行される(実行時間は必ずしも一定ではない)。同じ処理をコード化したときの多様さはCISCの方がRISCより豊富である。コンパイラは各命令や命令の組み合わせによるコストを考慮してコード生成する(
命令選択)。
: パイプラインは、
ALUを機能分割して工場の生産ラインのように並べたものと言える。これにより、ALUの各部が異なる命令の異なる処理をすることが可能となる。命令のデコード、アドレスのデコード、メモリフェッチ、レジスタフェッチ、計算、レジスタへの格納などである。ある命令がレジスタへの格納ステージにあるとき、同時に別の命令がレジスタフェッチのステージにあるということになる。パイプラインのあるステージにある命令がもっと先のステージにある未完了の命令の結果を必要とするとき、パイプライン衝突が発生する。パイプライン衝突はパイプラインの停止(ストール)を招き、衝突が解決されるまでCPUは何もできなくなる。
: コンパイラは命令をスケジュールあるいは再配置して、パイプラインの停止が起こりにくくなるようにできる。
: 一部のCPUは複数のALUや
FPUを備えており、複数の命令を同時に実行できる。同時に実行できる命令の種類には制限があることもあり、各ユニットが実行できる命令の種類も制限がある。これらにはパイプライン衝突と同様の問題が存在する。
: コンパイラはこのような場合も命令をうまく配置して、各機能ユニットがなるべく常に動作するようにスケジュールできる。
◇ 対象マシンのアーキテクチャ
;
キャッシュメモリサイズとタイプ(ダイレクトマップ、n-wayセットアソシアティブ、フルアソシアティブ)
:
インライン展開や
ループ展開などの手法はコードのサイズを増大させ、
参照の局所性を損なう。頻繁に実行されるコードの塊がキャッシュに収まらなくなると、性能は劇的に低下する。フルアソシアティブでないキャッシュではキャッシュ上での衝突が発生しやすい。
・コンパイラ最適化 page1
■コンパイラ最適化を他のサイトで調べる
@[コンパイラ最適化]暇つぶしマスター
A[コンパイラ最適化]性病マスター
B[コンパイラ最適化]ダイエットNAVI
C[コンパイラ最適化]価格比較マスター
D[コンパイラ最適化]肛門科マスター
E[コンパイラ最適化]産婦人科科マスター
F[コンパイラ最適化]結婚情報マスター
■着うたLINK関連検索
■着うたLINKWikipedia情報
おすすめサイト
■ダイエット
美容・ダイエットならオマカセ!ダイエットNAVI
■性病
性病?お悩み・病院検索は性病マスター
■暇つぶし
いま、ヒマ?暇つぶしマスターで暇つぶし★
■価格比較
気になる商品の価格を比較!価格比較マスター
■懸賞
カンタン応募で豪華商品が当たる!アタックchance!
■バイト
駅チカバイトなら楽ラクバイト.com
■求人
地域を選んでバイト、仕事を探せる!!バリバリ仕事!.com
■アルバイト
バイトをこだわり条件で探す!こだわりキャリア.com
■求人情報
自分に合ったバイト探し★Myピッタリ仕事.com
■バイト
"資格"でバイト探し!天職さがそ!.com
■バイト
いいバイト、あるある!aruアルバイト.com
■懸賞
アタックchanceで懸賞チャレンジ!
■産婦人科
病院探し!病気相談なら産婦人科マスター
■出産
妊娠!出産!育児!赤ちゃんマスターでお悩み解決!
■外為
外為・為替レートをチェック!外為マスター
■結婚
結婚マスター!結納・両親・マリッジブルーノお悩みに…
■先物
先物・取引!詳しくなる!先物マスター
■資格
資格!キャリアアップ!資格GETマスター★
■小説
小説・書籍ならオマカセ!小説マスター
■スポーツ
スポーツ!健康!デトックス!スポーツマスターにオマカセ!
■葬儀
お葬式・葬祭のことなら・・・葬儀マスター
■痩身
ダイエット・デトックス・痩身!スリムGETマスター
■脱毛
パーフェクトBODY目指せ!脱毛マスター
■着うた
最新!人気!定番!うたマスターで着うたCHECK!
■デコメ
キラ系かわいいデコメCHECK!デコメマスター
■転職
履歴書・マナー・転職テク!就職情報なら転職マスター
■バイク
ハーレー!改造!バイクマスターにオマカセ!
■派遣
派遣!転職!キャリアアップ!転職マスター
■ペット
カワイイ犬・猫を飼いたい!ペットマスター
■豊胸
薄着の季節…お悩み解決!豊胸マスター
■包茎
包茎のお悩みなら…包茎マスター
■レシピ
今晩のおかず…料理・レシピならレシピマスター
■モバグラMIXの人気キーワード
モバグラMIXの人気キーワード一覧
■外為
外為情報をいち早く!外為LINK
■求人
転職・就活なら求人LINKにオマカセ!
■金融
金融業界の勉強するなら!金融LINK
■車
TOYOTA!HONDA!BMW!車のコトなら車LINK
■モバグラMIXの人気キーワード2
モバグラmixの人気キーワード2
■モバグラMXIの人気キーワード3
モバグラMIXの人気キーワード3
■モバグラMIXの人気キーワード4
モバグラMIXの人気キーワード4
■モバグラMIXの人気キーワード5
モバグラMIXの人気キーワード5
■モバグラMIXの人気キーワード6
モバグラMIXの人気キーワード6
■モバグラMIXの人気キーワード7
モバグラMIXの人気キーワード7
■モバグラMIXの人気キーワード8
モバグラMIXの人気キーワード8
■モバグラMIXの人気キーワード9
モバグラMIXの人気キーワード9
■モバグラMIXの人気キーワード10
モバグラMIXの人気キーワード10
■モバグラMIXの人気キーワード11
モバグラMIXの人気キーワード11
■モバグラMIXの人気キーワード12
モバグラMIXの人気キーワード12
■モバグラMIXの人気キーワード13
モバグラMIXの人気キーワード13
■モバグラMIXの人気キーワード14
モバグラMIXの人気キーワード14
■モバグラMIXの人気キーワード15
モバグラMIXの人気キーワード15
■モバグラMIXの人気キーワード16
モバグラMIXの人気キーワード16
■モバグラMIXの人気キーワード17
モバグラMIXの人気キーワード17
■車査定
車査定.com
■献立レシピ1
レシピが月額99円
■献立レシピ2
レシピが月額99円
~うた-LINK.com (05/21update) トップへ
(C)うた-LINK.com