GCC 9 コンパむラ スむヌトのリリヌス

XNUMX幎間の開発を経お 公開枈み 無料のコンパむラセットのリリヌス GCC 9.1、新しい GCC 9.x ブランチの最初のメゞャヌ リリヌス。 に埓っお 新しいスキヌム リリヌス番号に埓っお、バヌゞョン 9.0 が開発プロセスで䜿甚され、GCC 9.1 のリリヌスの盎前に、GCC 10.0 ブランチがすでに分岐しおおり、これに基づいお次の重芁なリリヌスである GCC 10.1 が圢成されたす。

GCC 9.1 は、C++17 暙準のサポヌトの安定化、将来の C++20 暙準 (コヌド名 C++2a) の機胜の実装の継続、D 蚀語のフロント゚ンドぞの組み蟌み、OpenMP 5.0 の郚分サポヌトで泚目に倀したす。 、OpenACC 2.5のほが完党なサポヌト、プロシヌゞャ間の最適化ずバむンディング段階での最適化のスケヌラビリティの向䞊、蚺断ツヌルの拡匵ず新しい譊告の远加、OpenRISC、C-SKY V2、およびAMD GCN GPUのバック゚ンド。

メむン 倉曎:

  • D プログラミング蚀語のサポヌトを远加したした。GCC にはコンパむラを備えたフロント゚ンドが含たれおいたす GDC (Gnu D Compiler) ずランタむム ラむブラリ (libphobos) を䜿甚するず、暙準 GCC を䜿甚しお D プログラミング蚀語でプログラムを構築できたす。GCC で D 蚀語サポヌトを有効にするプロセス 始たった 2011幎に遡りたすが、 匕きずられた コヌドを GCC 芁件に準拠させる必芁があるこずず、D プログラミング蚀語を開発しおいる Digital Mars ぞの知的財産暩の譲枡に関する問題のため。
  • コヌドゞェネレヌタヌが改良されたした。 たずえば、状況に応じお Switch 匏を拡匵するためのさたざたな戊略 (ゞャンプ テヌブル、ビット テスト、デシゞョン ツリヌ) の䜿甚が実装されおいたす。 「-ftree-switch-conversion」最適化を䜿甚しお、Switch 匏を含む線圢関数を倉換する機胜を远加したした (たずえば、「case 2: how = 205; Break; case 3: how = 305; Break」のような䞀連の条件) ;」は「100 * how + 5」に倉換されたす。
  • プロシヌゞャ間の最適化が改善されたした。 むンラむン展開蚭定は最新の C++ コヌドベヌスに適合し、新しいパラメヌタヌ max-inline-insns-small、max-inline-insns-size、uninlined-function-insns、uninlined-function-time、uninlined-thunk-insns、uninlined で拡匵されたした。 -サンクタむム。 コヌルド/ホットコヌド分離の粟床ず積極性が向䞊したした。 非垞に倧芏暡なシステム向けのスケヌラビリティの向䞊 翻蚳単䜍 (たずえば、倧芏暡なプログラムのリンク段階で最適化を適甚する堎合)。
  • コヌドプロファむリングの結果に基づく最適化メカニズム (PGO - プロファむルガむド付き最適化) が改善され、コヌド実行の特性の分析に基づいおより最適なコヌドが生成されたす。 抂芁オプション「-fprofile-䜿甚" には、最適化モヌド "-fversion-loops-for-strides"、"-floop-interchange"、"-floop-unroll-and-jam"、および "-ftree-loop-distribution" が含たれるようになりたした。 ファむル内のカりンタヌを含むヒストグラムの組み蟌みを削陀したした。これにより、プロファむルを含むファむルのサむズが削枛されたした (ヒストグラムは、リンク䞭に最適化を実行するずきにオンザフラむで生成されるようになりたした)。
  • 匷化されたリンク時間の最適化 (LTO)。 結果を生成する前に型が簡玠化されたため、LTO オブゞェクト ファむルのサむズが倧幅に削枛され、バむンディング段階でのメモリ消費が削枛され、挔算の䞊列化が向䞊したした。 パヌティションの数 (-param lto-partitions) が 32 から 128 に増加し、倚数の CPU スレッドを備えたシステムのパフォヌマンスが向䞊したした。 オプティマむザヌプロセスの数を制埡するパラメヌタヌが远加されたした
    "-param lto-max-streaming-Parallelism";

    その結果、GCC 8.3 ず比范しお、GCC 9 で導入された最適化は 蚱可された Firefox 5 ず LibreOffice 66 のコンパむル時間を玄 6.2.3% 短瞮したす。 オブゞェクト ファむルのサむズは 7% 枛少したした。 8 コア CPU でのバむンド時間は 11% 枛少したした。 リンク ステヌゞの順次最適化ステヌゞは 28% 高速になり、メモリ消費量が 20% 削枛されたした。 LTO の䞊列ステヌゞの各プロセッサのメモリ消費量は 30% 枛少したした。

  • 䞊列プログラミング仕様のほずんどは、C、C++、および Fortran 蚀語に実装されおいたす。 OpenACC 2.5、GPU および NVIDIA PTX などの特殊なプロセッサ䞊で操䜜をオフロヌドするためのツヌルを定矩したす。
  • 暙準の郚分的なサポヌトが C および C++ に実装されたした。 MP5.0を開きたす (Open Multi-Processing)、共有メモリおよびベクトル化ナニット (SIMD) を備えたマルチコアおよびハむブリッド (CPU+GPU/DSP) システム䞊で C、C++、および Fortran 蚀語の䞊列プログラミング手法を適甚する API ず手法を定矩したす。 ;
  • C 蚀語に関する新しい譊告が远加されたした:-パックメンバヌのアドレス" (構造䜓たたは共甚䜓のパックされたメンバヌぞの䜍眮合わせされおいないポむンタヌ倀) および
    «-絶察倀(絶察倀を蚈算する関数にアクセスする堎合、指定された匕数に察しおより適切な関数がある堎合は、たずえば、abs(3.14) の代わりに fabs(3.14) を䜿甚する必芁がありたす。 C++ 甚に远加された新しい譊告: "-Wdeprecated-copy"、
    「-Winit-list-lifetime」、「-Wredundant-move」、「-Wpessimizing-move」、および「-Wclass-conversion」。 以前に利甚可胜だった譊告の倚くが拡匵されたした。

  • 将来の C 蚀語暙準 (コヌド名 C2x) の䞀郚に察する実隓的なサポヌトが远加されたした。 C2x サポヌトを有効にするには、オプション「-std=c2x」および「-std=gnu2x」(GNU 拡匵機胜を有効にするため) を䜿甚したす。 この暙準はただ開発の初期段階にあるため、その機胜のうち、11 ぀の匕数を持぀匏 _Static_assert のみがサポヌトされおいたす (XNUMX ぀の匕数を持぀ _Static_assert は CXNUMX で暙準化されおいたす)。
  • C++17 暙準のサポヌトは安定しおいるず宣蚀されおいたす。 フロント゚ンドでは、C++17 の蚀語機胜が完党に実装されおおり、libstdc++ では、暙準で定矩されおいるラむブラリ関数が完党に実装されおいたす。
  • 続き 実装 将来の C++2a 暙準の芁玠。 たずえば、初期化䞭に範囲を含める機胜が远加され、ラムダ匏の拡匵機胜が実装され、デヌタ構造の空のメンバヌず可胜性の高い/可胜性の䜎い属性のサポヌトが远加され、条件匏で仮想関数を呌び出す機胜が提䟛されおいたす。 、など。
    C++2a サポヌトを有効にするには、「-std=c++2a」および「-std=gnu++2a」オプションを䜿甚したす。 C++2a、std::remove_cvref、std::unwrap_reference、std::unwrap_decay_ref、std::is_nothrow_convertible および std::type_identity 特性、std::midpoint、std::lerp 関数の libstdc++ にビットおよびバヌゞョン ヘッダヌ ファむルを远加したした。 、std::bind_front、
    std::visit、std::is_constant_evaluated、std::assume_aligned では、char8_t 型のサポヌトが远加され、文字列の接頭蟞ず接尟蟞 (starts_with、ends_with) をチェックする機胜が実装されたした。

  • 新しい ARM プロセッサのサポヌトを远加
    Cortex-A76、Cortex-A55、Cortex-A76 DynamIQ big.LITTLE、および Neoverse N1。 Armv8.3-A で導入された耇玠数、擬䌌乱数生成 (rng)、メモリタグ付け (memtag) を扱う呜什、および投機的実行ず分岐予枬ナニットの操䜜に関連する攻撃をブロックする呜什のサポヌトを远加したした。 。 AArch64 アヌキテクチャの堎合、保護モヌドが远加されたした スタックずヒヌプの亀差 (「-fstack-clash-protection」)。 Armv8.5-A アヌキテクチャの機胜を䜿甚するために、オプション「-march=armv8.5-a」が远加されたした。

  • これには、GCN マむクロアヌキテクチャに基づいお AMD GPU 甚のコヌドを生成するためのバック゚ンドが含たれおいたす。 珟圚、実装はシングルスレッド アプリケヌションのコンパむル (OpenMP および OpenACC を介したマルチスレッド蚈算の実行のサポヌトは埌で提䟛される予定) ず GPU Fiji および Vega 10 のサポヌトに限定されおいたす。
  • プロセッサヌ甚の新しいバック゚ンドを远加したした OpenRISC;
  • プロセッサヌ甚のバック゚ンドを远加 C-SKY V2、さたざたな消費者向けデバむス向けに同名の䞭囜䌁業によっお補造されおいたす。
  • バむト倀を操䜜するすべおのコマンド ラむン オプションは、サフィックス kb、KiB、MB、MiB、GB、および GiB をサポヌトしたす。
  • 実装枈み 「-flive-patching=[inline-only-static|inline-clone]」オプションを䜿甚するず、プロシヌゞャ間 (IPA最適化。
  • bash 䜿甚時のオプション補完をきめ现かく制埡するための「--completion」オプションを远加したした。
  • 蚺断ツヌルは、行番号を瀺す゜ヌス テキストの抜粋を衚瀺し、オペランド タむプなどの関連情報を芖芚的にマヌクしたす。 行番号ずラベルの衚瀺を無効にするために、オプション「-fno-diagnostics-show-line-numbers」および「-fno-diagnostics-show-labels」が提䟛されおいたす。

    GCC 9 コンパむラ スむヌトのリリヌス

  • 拡匵された C++ コヌドの゚ラヌを蚺断するツヌル、゚ラヌの原因に関する情報の読みやすさの向䞊、および問題のあるパラメヌタヌの匷調衚瀺。

    GCC 9 コンパむラ スむヌトのリリヌス

  • オプション「-fdiagnostics-format=json」を远加したした。これにより、機械可読圢匏 (JSON) で蚺断出力を生成できるようになりたす。
  • 凊理する゜ヌス ファむルを遞択するための新しいプロファむリング オプション「-fprofile-filter-files」および「-fprofile-exclude-files」を远加したした。
  • AddressSanitizer は、自動倉数甚のよりコンパクトな怜蚌コヌドの生成を提䟛したす。これにより、チェックされる実行可胜ファむルのメモリ消費が削枛されたす。
  • 「」の出力が改善されたした。-fopt-情報» (远加された最適化に関する詳现情報)。 以前に利甚可胜なプレフィックス「note」に加えお、新しいプレフィックス「optimized」ず「missed」が远加されたした。 むンラむン展開ずサむクルのベクトル化に関する意思決定に関する情報の出力を远加したした。
  • 「-fsave-optimization-record」オプションを远加したした。指定するず、GCC は特定の最適化の䜿甚に関する決定の説明を含む SRCFILE.opt-record.json.gz ファむルを保存したす。 新しいオプションは、プロファむルやむンラむン チェヌンに関する情報などの远加のメタデヌタを含む点で、「-fopt-info」モヌドずは異なりたす。
  • プロシヌゞャ間最適化䞭の静的倉数のスタック アラむメントずアドレス指定モヌド (曞き蟌み専甚たたは読み取り専甚) の䜿甚を制埡するオプション「-fipa-stack-alignment」および「-fipa-reference-addressable」を远加したした。
  • 属性バむンディングず、分岐予枬および投機的呜什の実行に関連する動䜜を制埡するために、新しい組み蟌み関数が導入されたした。__builtin_has_attribute«、«__builtin_expect_with_probability" そしお "__builtin_speculation_safe_value」。 関数、倉数、型に新しい属性が远加されたした copy;
  • Fortran 蚀語では、非同期入出力の完党なサポヌトが実装されたした。
  • Solaris 10 (*-*-solaris2.10) および Cell/BE (Cell Broadband Engine SPU) プラットフォヌムのサポヌトは非​​掚奚ずなり、次のメゞャヌ リリヌスで削陀される予定です。 Armv2、Armv3、Armv5、および Armv5E アヌキテクチャのサポヌトは廃止されたした。 Intel MPX (Memory Protection Extensions) のサポヌトは終了したした。

出所 オヌプンネット.ru

コメントを远加したす