GCC 9 хөрвүүлэгчийн багцыг гаргасан

Жилийн хөгжлийн дараа нийтэлсэн хөрвүүлэгчийн үнэгүй багцыг гаргах 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-д зориулсан backends.

Үндсэн өөрчлөлт:

  • D програмчлалын хэлний дэмжлэгийг нэмсэн. GCC нь хөрвүүлэгчтэй урд талбарыг агуулдаг GDC (Gnu D Compiler) болон ажиллах үеийн номын сангууд (libphobos) нь D програмчлалын хэл дээр програм бүтээхэд стандарт GCC ашиглах боломжийг олгодог. GCC дахь D хэлний дэмжлэгийг идэвхжүүлэх үйл явц эхэлсэн байна буцаж 2011 онд, гэхдээ чирсэн кодыг GCC-ийн шаардлагад нийцүүлэх шаардлага, D програмчлалын хэлийг хөгжүүлж буй Дижитал Ангараг руу оюуны өмчийн эрхийг шилжүүлэхтэй холбоотой асуудлууд;
  • Код үүсгэгчийг сайжруулсан. Жишээлбэл, нөхцөл байдлаас хамааран Switch хэллэгийг (үсрэх хүснэгт, бит тест, шийдвэрийн мод) өргөжүүлэх өөр өөр стратегиудыг ашигласан. “-ftree-switch-хувиргах” оновчлолыг ашиглан Switch илэрхийлэл агуулсан шугаман функцийг хувиргах чадварыг нэмсэн (жишээлбэл, “тохиолдол 2: хэрхэн = 205; завсарлага; 3-р тохиолдол: хэрхэн = 305; завсарлага” гэх мэт нөхцөлүүдийн багц ;” нь "100 * яаж + 5" болж хувирна;
  • Процедур хоорондын оновчлолыг сайжруулсан. Inline байршуулах тохиргоог орчин үеийн C++ кодын санд тохируулан max-inline-insns-small, max-inline-insns-size, inlineed-function-insns, uninlined-function-time, uninlined-thunk-inns, in lined гэсэн шинэ параметрүүдээр өргөтгөсөн. -баярлалаа. Хүйтэн/халуун кодыг ялгах нарийвчлал, түрэмгий байдлыг сайжруулсан. Маш том хэмжээний өргөтгөх чадварыг сайжруулсан орчуулгын нэгж (жишээлбэл, том програмуудтай холбох үе шатанд оновчлолыг ашиглах үед);
  • Кодын профайл (PGO - Profile-guided optimization) үр дүнд суурилсан оновчлолын механизмыг сайжруулсан бөгөөд энэ нь кодын гүйцэтгэлийн шинж чанаруудын дүн шинжилгээнд үндэслэн илүү оновчтой кодыг үүсгэдэг. Товч сонголт "-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++-д хэрэгжүүлсэн MP 5.0-ийг нээх (Open Multi-Processing) нь C, C++, Fortran хэлнүүдийн зэрэгцээ програмчлалын аргуудыг олон цөмт болон холимог санах ой, векторжуулалтын нэгж (SIMD) бүхий холимог (CPU+GPU/DSP) системд хэрэглэх API болон аргуудыг тодорхойлдог. ;
  • Си хэлэнд шинэ анхааруулга нэмэгдэв: "-Багцлагдсан гишүүний хаяг" (бүтэц эсвэл нэгдлийн багцалсан гишүүн рүү чиглүүлээгүй заагч утга) болон
    «- Үнэмлэхүй үнэ цэнэ" (Үнэмлэхүй утгыг тооцоолох функцүүдэд хандахдаа хэрэв заасан аргументад илүү тохиромжтой функц байвал abs(3.14)-ийн оронд fabs(3.14)-г ашиглах хэрэгтэй). C++-д шинэ анхааруулга нэмсэн: "-Wdeprecated-copy",
    "-Winit-list-lifetime", "-Wredundant-move", "-Wpessimizing-move" болон "-Wclass-conversion". Өмнө нь байсан олон анхааруулгыг өргөтгөсөн;

  • C2x код нэртэй ирээдүйн Си хэлний стандартын нэг хэсэгт туршилтын дэмжлэг нэмсэн. C2x дэмжлэгийг идэвхжүүлэхийн тулд "-std=c2x" ба "-std=gnu2x" (GNU өргөтгөлүүдийг идэвхжүүлэх) сонголтуудыг ашиглана уу. Стандарт нь хөгжлийн эхний шатандаа байгаа тул түүний чадавхийн хувьд зөвхөн нэг аргументтай _Static_atsert илэрхийлэлийг дэмждэг (хоёр аргументтай _Static_atsert нь C11-д стандартчилагдсан);
  • C++ 17 стандартын дэмжлэгийг тогтвортой гэж зарласан. Frontend дээр C++ 17 хэлний чадварууд бүрэн хэрэгжсэн, libstdc++ дээр стандартад тодорхойлсон номын сангийн функцууд бүрэн хэрэгжихэд ойрхон байна;
  • Үргэлжлэл хэрэгжүүлэлт ирээдүйн C++2a стандартын элементүүд. Жишээлбэл, эхлүүлэх үед мужуудыг оруулах боломжийг нэмсэн, lambda илэрхийлэлд зориулсан өргөтгөлүүдийг хэрэгжүүлсэн, өгөгдлийн бүтцийн хоосон гишүүдийн дэмжлэг, магадлалтай/боломжгүй шинж чанарууд нэмэгдсэн, нөхцөлт илэрхийлэлд виртуал функцуудыг дуудах боломжийг олгосон. , гэх мэт.
    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 traits, std::type_identity traits, std::remove_cvref, std::decay_ref, libstdc++-д бит болон хувилбарын толгой файлуудыг нэмсэн. , std :: bind_front,
    std::visit, std::is_constant_evaluated болон std::assume_aligned, char8_t төрлийн дэмжлэгийг нэмсэн, мөрийн угтвар болон дагаварыг шалгах чадварыг хэрэгжүүлсэн (эхэлдэг, төгсгөлтэй);

  • Шинэ 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-ийн дэмжлэг;
  • Процессоруудад зориулсан шинэ backend нэмсэн OpenRISC;
  • Процессоруудад зориулсан backend нэмсэн 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-info» (нэмэлт оновчлолын талаарх дэлгэрэнгүй мэдээлэл). Өмнө нь байсан "тэмдэглэл" угтвараас гадна "оновчтой" болон "алдагдсан" шинэ угтваруудыг нэмсэн. Циклүүдийг дотор нь задлах, векторжуулах талаар шийдвэр гаргах мэдээллийн гарцыг нэмсэн;
  • "-fsave-optimization-record" сонголтыг нэмсэн бөгөөд заасан үед GCC нь SRCFILE.opt-record.json.gz файлыг тодорхой оновчлолын ашиглалтын талаарх шийдвэрийн тайлбартай хадгалдаг. Шинэ сонголт нь "-fopt-info" горимоос ялгаатай нь профайл болон шугаман хэлхээний тухай мэдээлэл гэх мэт нэмэлт мета өгөгдөл агуулсан;
  • Процедур хоорондын оновчлолын үед статик хувьсагчдад зориулсан хаяглалтын горимыг (зөвхөн бичих эсвэл унших-яг) ашиглахыг хянах "-fipa-stack-alignment" болон "-fipa-reference-addressable" сонголтуудыг нэмсэн;
  • Салбарын таамаглал болон таамаглалын зааварчилгааны гүйцэтгэлтэй холбоотой шинж чанар, зан үйлийг хянахын тулд шинэ суурилуулсан функцуудыг нэвтрүүлсэн: "__бүтээсэн_шинж чанар«,«__магадлалтай_хүлээгдэж_байна"Ба"__бүтээсэн_таамгийн_аюулгүй_үнэ цэнэ". Функц, хувьсагч, төрлүүдэд шинэ атрибут нэмсэн хуулбар;
  • Фортран хэлний хувьд асинхрон оролт/гаралтын бүрэн дэмжлэгийг хэрэгжүүлсэн;
  • Solaris 10 (*-*-solaris2.10) болон Cell/BE (Cell Broadband Engine SPU) платформуудын дэмжлэгийг цуцалсан бөгөөд дараагийн томоохон хувилбарт устгах болно. Armv2, Armv3, Armv5 болон Armv5E архитектуруудыг дэмжихээ больсон. Intel MPX (санах ойн хамгаалалтын өргөтгөлүүд)-ийн дэмжлэгийг зогсоосон.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх