LTO:それは何であり、Gentooでそれを使用する方法

LTOとは何ですか?

LTO の頭字語です リンク時間の最適化。 これは、コンパイラがソースファイルをリンクする瞬間に最適化を遅らせ、単一の実行可能ファイルを構成するすべてのファイルを単一のファイルとして表示できるようにする操作であり、このようにして、より効果的な方法で最適化を適用します。

詳細については: のウィキ GCC.

のメリットとデメリットを確認するには LTO: のベンチマーク Phoronix

覚えておくべきこと

  • 不安定で、一部のパッケージで問題が発生する可能性があります。
  • 一部のパッケージはコンパイルに失敗します(これを修正する方法については後で詳しく説明します)。
  • リンカーの使用をお勧めします ゴールド.
  • 使用 常に の最新バージョン GCC.

ゴールド、使用をより魅力的にする高度な機能をサポートすることに加えて LTO、それはより速い gnu ld特に大規模なプログラムになると、 5倍速い。 これを使用するには、次を実行します。

binutils-config --linker ld.gold


LTOの使用:推奨される方法

アクティベートする代わりに LTO グローバルに(問題を引き起こす可能性があります)、必要なパッケージでアクティブ化することをお勧めします。 このように、あなたが恩恵を受けたいパッケージだけ LTO これらは、この最適化を使用してコンパイルされます。または、この最適化の恩恵を受けないプログラムでのコンパイル時間の遅延を回避します。 これは、次の方法で実現できます。

/ etc / portage / envディレクトリに、ファイルを作成します LTO.conf 次の行を追加します。

CFLAGS="${CFLAGS} -flto=5" #pon en -flto los hilos  de tu CPU + 1
CXXFLAGS="${CXXFLAGS} -flto=5" #igual que arriba
LDFLAGS="${LDFLAGS} -fuse-linker-plugin" #solo si usas Gold, es mejor.

だから、使用するには LTO パッケージでは、その名前(Firefoxの代わりにフルネーム、www-client / firefox)をファイルに入れるだけです。 パッケージ.env、とともに LTO.conf あなたの右に。 以下に例を示します。

app-emulation/wine LTO.conf
www-client/firefox LTO.conf
sys-devel/gcc LTO.conf
kde-base/kdelibs LTO.conf

今、私たちは彼らが使用したいパッケージをコンパイルする必要があります LTO.


LTOをグローバルに使用する(非推奨)

適用する代わりに LTO パッケージごとに、グローバルに適用することもできます(これは私が使用しているものです)。 これを適用するには、次の手順に従います。

ファイル/etc/portage/make.confを編集し、以下を追加します(これらはファイルの同じ行です) LTO.conf):

CFLAGS="${CFLAGS} -flto=5" #pon en -flto los hilos  de tu CPU + 1
CXXFLAGS="${CXXFLAGS} -flto=5" #igual que arriba
LDFLAGS="${LDFLAGS} -fuse-linker-plugin" #solo si usas Gold, es mejor.

次に、ファイル/etc/portage/env/no-LTO.confを作成し、次の行を追加します。

CFLAGS="${CFLAGS} -fno-lto -fno-use-linker-plugin"
CXXFLAGS="${CXXFLAGS} -fno-lto -fno-use-linker-plugin"
LDFLAGS="${LDFLAGS} -fno-lto -fno-use-linker-plugin"

そしてファイル内 パッケージ.env コンパイルが失敗したパッケージを配置します LTO。 彼 ここに私の パッケージ.env (私が使用することに注意してください nolto.conf 代わりに いいえ-LTO.conf).

また、追加する必要があります LTO の変数を使用する make.conf、これはの開発者のために必要です Gentooの 一部のパッケージでこの最適化を使用するためのオプションのパッチを(ゆっくりと)追加しています。

これが完了したら、すべてのシステムパッケージの再コンパイルに進みましょう。

emerge -e @world @system --keep-going &> errores

–keep-goingを使用することで、 ポーテージ エラーを無視しますが &> すべてのバグの出力をerrorsというファイルにリダイレクトし、このファイルを使用して、コンパイルに失敗したパッケージを確認し、それらをのリストに追加します。 パッケージ.env.

&>はすべての出力を奪います。プロセスの出力を確認したい場合は、次のコマンドを(rootとして)使用する必要があります。

tail -f /var/log/emerge.log

そして、それがすべてです、私が元気づけて、についての記事を書くならば、私は疑いを残していないことを願っています Openmp および/または グラファイト.


コメントを残す

あなたのメールアドレスが公開されることはありません。 必須フィールドには付いています *

*

*

  1. データの責任者:MiguelÁngelGatón
  2. データの目的:SPAMの制御、コメント管理。
  3. 正当化:あなたの同意
  4. データの伝達:法的義務がある場合を除き、データが第三者に伝達されることはありません。
  5. データストレージ:Occentus Networks(EU)がホストするデータベース
  6. 権利:いつでも情報を制限、回復、削除できます。

  1.   MSX

    Gentoo、まあ..。
    重要なことに取り掛かりましょう:グラファイト!

    1.    x11テテ11x

      愚かで官能的なGraphitexDは、xDシステムを破裂させる異常なものです。前回使用したときは、「notify-send KDE <50」を実行して、3回繰り返すだけで十分だったことを覚えています。番号50、環境は地獄に破裂しますハハハハハ、はい、私はおならxDに行きました

    2.    ローダー

      私はまだ励まされて、グラファイトのXNUMXつを作ったとすでに言いました。 しかしとにかく、Graphite(およびその他の最適化)はLTOで最適に機能します。 また、LTOとは異なり、GraphiteとOpenMPには問題があります。 すべてのプログラムがこの恩恵を受けるわけではなく、恩恵を受けないプログラムではパフォーマンスが低下するため、この場合は、いくつかのパッケージにのみ使用することをお勧めします。