የGCC 9 ማጠናከሪያ ስብስብ መልቀቅ

ከአንድ አመት እድገት በኋላ ታትሟል ነፃ የቅንጅቶች ስብስብ መለቀቅ GCC 9.1በአዲሱ GCC 9.x ቅርንጫፍ ውስጥ የመጀመሪያው ዋና ልቀት። በአሰራሩ ሂደት መሰረት አዲስ እቅድ የመልቀቂያ ቁጥር፣ ስሪት 9.0 በእድገት ሂደት ውስጥ ጥቅም ላይ ውሏል፣ እና ጂሲሲ 9.1 ከመውጣቱ ጥቂት ቀደም ብሎ፣ የጂሲሲ 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 ጂፒዩ ጀርባ።

ዋና ለውጥ:

  • ለዲ ፕሮግራሚንግ ቋንቋ ተጨማሪ ድጋፍ።ጂሲሲ ከማጠናቀር ጋር ግንባርን ያካትታል ጎድ (Gnu D Compiler) እና Runtime Libraries (libphobos)፣ ይህም በዲ ፕሮግራሚንግ ቋንቋ ፕሮግራሞችን ለመገንባት መደበኛ GCC እንድትጠቀም ያስችልሃል።በጂሲሲ ውስጥ የዲ ቋንቋ ድጋፍን የማስቻል ሂደት ተጀምሯል። ወደ 2011, ግን ተጎትቷል የዲ ፕሮግራሚንግ ቋንቋን እያዳበረ ላለው የዲጂታል ማርስ የአዕምሯዊ ንብረት መብቶች ከጂሲሲ መስፈርቶች እና ከአእምሯዊ ንብረት መብቶች ማስተላለፍ ጋር በተያያዙ ችግሮች ምክንያት ኮዱን ማምጣት አስፈላጊ በመሆኑ;
  • በኮድ ጀነሬተር ላይ ማሻሻያዎች ተደርገዋል። ለምሳሌ የመቀየሪያ አገላለጾችን ለማስፋት (የዝላይ ጠረጴዛ፣ ቢት ፈተና፣ የውሳኔ ዛፍ) በሁኔታዎች ላይ በመመስረት የተለያዩ ስልቶችን መጠቀም ተተግብሯል። የ"-ftree-switch-conversion" ማመቻቸትን በመጠቀም የስዊች አገላለፅን የሚያካትቱ የመስመራዊ ተግባራትን የመቀየር ችሎታ ታክሏል (ለምሳሌ እንደ “case 2: how = 205; break; case 3: how = 305; break ;" ወደ "100 * እንዴት + 5" ይቀየራል;
  • የተሻሻለ የእርስ በርስ ሂደት ማመቻቸት። የውስጠ-መስመር ማሰማራት ቅንጅቶች ለዘመናዊ የC++ codebases ተስተካክለው በአዲስ መመዘኛዎች ተዘርግተዋል ከፍተኛ-ኢንላይን-ኢንሰ-ትንሽ-ማክስ-ኢንላይን-ኢንስ-መጠን፣ያልተሰለፈ-ተግባር-ኢንሰ፣ያልተሰራ-ተግባር-ጊዜ - ጊዜ - ጊዜ. የቀዝቃዛ/የሙቅ ኮድ መለያየት ትክክለኛነት እና ጠበኛነት። በጣም ትልቅ ለ የተሻሻለ scalability የትርጉም ክፍሎች (ለምሳሌ, ከትላልቅ ፕሮግራሞች ጋር በማገናኘት ደረጃ ላይ ማመቻቸትን ሲተገበሩ);
  • በኮድ ፕሮፋይል (PGO - በመገለጫ የሚመራ ማሻሻያ) ውጤቶች ላይ የተመሰረተው የማሻሻያ ዘዴ ተሻሽሏል, ይህም በኮድ አፈጻጸም ባህሪያት ትንተና ላይ በመመርኮዝ የበለጠ ጥሩ ኮድ ይፈጥራል. ማጠቃለያ አማራጭ"-fprofile-አጠቃቀም"አሁን የማመቻቸት ሁነታዎችን "-fversion-loops-for-strides", "-floop-interchange", "-floop-unroll-and-jam" እና "-ftree-loop-distribution"ን ያካትታል። በፋይሎች ውስጥ ሂስቶግራሞችን ከቆጣሪዎች ጋር ማካተት ተወግዷል ፣ ይህም የፋይሎችን መጠን ከፕሮፋይሎች ጋር ቀንሷል (በግንኙነት ጊዜ ማመቻቸት በሚሰሩበት ጊዜ ሂስቶግራሞች አሁን በራሪ ላይ ይፈጠራሉ)።
  • የተሻሻለ የግንኙነት ጊዜ ማሻሻያዎች (LTO)። የዓይነቶችን ማቅለል ውጤቱን ከማፍለቁ በፊት ቀርቧል, ይህም የ LTO ነገር ፋይሎችን መጠን በከፍተኛ ሁኔታ ለመቀነስ, በማያያዝ ደረጃ ላይ ያለውን የማስታወስ ፍጆታ ለመቀነስ እና የኦፕሬሽኖችን ትይዩነት ለማሻሻል አስችሏል. የክፍሎች ብዛት (-param lto-partitions) ከ 32 ወደ 128 ጨምሯል, ይህም ብዙ የሲፒዩ ክሮች ባላቸው ስርዓቶች ላይ አፈጻጸምን ያሻሽላል. የአመቻች ሂደቶችን ቁጥር ለመቆጣጠር መለኪያ ታክሏል።
    "-param lto-max-streaming-parallelism";

    በውጤቱም፣ ከጂሲሲ 8.3 ጋር ሲነጻጸር፣ በጂሲሲ 9 ውስጥ የገቡት ማመቻቸት ተፈቅዷል የፋየርፎክስ 5 እና LibreOffice 66 የማጠናቀር ጊዜን በ6.2.3 በመቶ ይቀንሱ። የነገር ፋይሎች መጠን በ7% ቀንሷል። በ8-ኮር ሲፒዩ ላይ የማሰር ጊዜ በ11 በመቶ ቀንሷል። የማገናኛ ደረጃው ተከታታይ የማመቻቸት ደረጃ አሁን 28% ፈጣን እና 20% ያነሰ ማህደረ ትውስታን ይጠቀማል። የ LTO ትይዩ ደረጃ የእያንዳንዱ ፕሮሰሰር የማስታወስ ፍጆታ በ 30% ቀንሷል።

  • አብዛኛው ትይዩ የፕሮግራም አወጣጥ ዝርዝር ለC፣ C++ እና Fortran ቋንቋዎች ይተገበራል። ክፍት ኤሲሲ 2.5በጂፒዩዎች እና እንደ NVIDIA PTX ባሉ ልዩ ፕሮሰሰር ላይ ኦፕሬሽኖችን ለማውረድ የሚረዱ መሳሪያዎችን የሚገልጽ፤
  • ለደረጃው ከፊል ድጋፍ ለ C እና C ++ ተተግብሯል MP 5.0 ክፈት (ክፍት ባለብዙ ፕሮሰሲንግ)፣ እሱም ኤፒአይን እና ትይዩ የፕሮግራም አወጣጥ ዘዴዎችን ለ C፣ C++ እና Fortran ቋንቋዎች በብዙ ኮር እና ዲቃላ (ሲፒዩ+ ጂፒዩ/ዲኤስፒ) ሲስተሞች በጋራ የማህደረ ትውስታ እና የቬክተርራይዜሽን አሃዶች (ሲኤምዲ) ይገልፃል። ;
  • ለ C ቋንቋ አዲስ ማስጠንቀቂያዎች ተጨምረዋል፡ "-Waddress-የታሸጉ-አባል" (ያልተጣመረ የጠቋሚ ዋጋ የአንድ መዋቅር ወይም የሰራተኛ ማህበር አባል) እና
    «-Wabsolute-እሴት" (ፍፁም እሴትን ለማስላት ተግባራትን ሲያገኙ ለተጠቀሰው ነጋሪ እሴት የበለጠ ተስማሚ ተግባር ካለ ለምሳሌ ፋብስ (3.14) ከ abs (3.14) ይልቅ ጥቅም ላይ መዋል አለባቸው። ለC++ አዲስ ማስጠንቀቂያዎች ታክለዋል፡ "-የተቀደሰ-ኮፒ"፣
    "-ዊኒት-ዝርዝር-የህይወት ዘመን"፣"-Wredundant-move"፣ "-Wpessimizing-move" እና "-Wclass-conversion"። ብዙ ቀደም ሲል የነበሩት ማስጠንቀቂያዎች ተዘርግተዋል;

  • ለወደፊት የC ቋንቋ ደረጃ በከፊል የሙከራ ድጋፍ ታክሏል፣ በኮድ የተሰየመ C2x። የC2x ድጋፍን ለማንቃት አማራጮችን "-std=c2x" እና "-std=gnu2x" (የጂኤንዩ ቅጥያዎችን ለማንቃት) ተጠቀም። መስፈርቱ ገና በእድገት የመጀመሪያ ደረጃ ላይ ነው ፣ ስለሆነም ፣ ከችሎታዎቹ ፣ ከአንድ ነጋሪ እሴት ጋር _Static_assert የሚለው አገላለጽ ብቻ ይደገፋል (_Static_assert ከሁለት ነጋሪ እሴቶች ጋር በ C11 ውስጥ መደበኛ ነው);
  • የC++17 ደረጃ ድጋፍ የተረጋጋ ነው ተብሏል። ከፊት ለፊት ፣ የ C ++ 17 የቋንቋ ችሎታዎች ሙሉ በሙሉ ተተግብረዋል ፣ እና በ libstdc ++ ፣ በመደበኛው ውስጥ የተገለጹ የቤተ-መጻህፍት ተግባራት ወደ ሙሉ ትግበራ ቅርብ ናቸው ።
  • የቀጠለ መተግበር የወደፊቱ የC++2a መደበኛ አካላት። ለምሳሌ፣ በሚጀመርበት ጊዜ ክልሎችን የማካተት ችሎታ ታክሏል፣ የላምዳ መግለጫዎች ማራዘሚያዎች ተተግብረዋል፣ ባዶ የውሂብ መዋቅር አባላት ድጋፍ እና ሊሆኑ የሚችሉ/የማይቻሉ ባህሪያት ታክለዋል፣ በሁኔታዊ መግለጫዎች ውስጥ ምናባዊ ተግባራትን የመጥራት ችሎታ ቀርቧል። ወዘተ.
    የC++2a ድጋፍን ለማንቃት "-std=c++2a" እና "-std=gnu++2a" አማራጮችን ተጠቀም። የታከሉ የቢት እና የስሪት አርእስት ፋይሎች ወደ libstdc++ ለ C++2a፣ std:: remove_cvref፣ std:: unwrap_reference፣ std:: unwrap_decay_ref፣ std:: is_nothrow_convertible and std::አይነት_ማንነት ባህሪያት፣ std:: midpoint፣ std:: , std :: bind_front,
    std :: ይጎብኙ፣ std :: is_constant_valuated and std :: ግምት_የተስተካከለ፣ ለ char8_t አይነት ተጨማሪ ድጋፍ፣ የሕብረቁምፊዎችን ቅድመ ቅጥያ እና ቅጥያ የመፈተሽ ችሎታን ተግባራዊ አደረገ (በጀመረ፣በሚያልቅ)።

  • ለአዲሱ ARM ፕሮሰሰሮች ድጋፍ ታክሏል።
    Cortex-A76፣ Cortex-A55፣ Cortex-A76 DynamIQ big.LITTLE እና Neoverse N1. በ Armv8.3-A ውስጥ ለተዋወቁ መመሪያዎች የተጨመረው ድጋፍ ከተወሳሰቡ ቁጥሮች ፣ የውሸት የዘፈቀደ ቁጥር ትውልድ (rng) እና የማስታወሻ መለያ (memtag) ፣ እንዲሁም ከቅርንጫፍ ትንበያ ክፍል ግምታዊ አፈፃፀም እና አሠራር ጋር የተዛመዱ ጥቃቶችን ለማገድ መመሪያዎች . ለ AArch64 አርክቴክቸር የጥበቃ ሁነታ ተጨምሯል። መደራረብ እና መደራረብ መገናኛዎች ("-fstack-ግጭት-መከላከያ"). የArmv8.5-A አርክቴክቸር ባህሪያትን ለመጠቀም “-march=armv8.5-a” አማራጭ ተጨምሯል።

  • በጂሲኤን የማይክሮ አርክቴክቸር መሰረት ለኤ.ዲ.ዲ.ጂፒዩዎች ኮድ ለማመንጨት ደጋፊን ያካትታል። አተገባበሩ በአሁኑ ጊዜ ነጠላ-ክር አፕሊኬሽኖችን በማጠናቀር ብቻ የተገደበ ነው (በ OpenMP እና OpenACC በኩል ባለብዙ-ክር ስሌቶችን ለማካሄድ ድጋፍ በኋላ ላይ ይቀርባል) እና ለጂፒዩ ፊጂ እና ቪጋ 10 ድጋፍ;
  • ለአቀነባባሪዎች አዲስ ጀርባ ታክሏል። ክፍትRISC;
  • ለአቀነባባሪዎች የኋላ ጀርባ ታክሏል። C-SKY V2ለተለያዩ የፍጆታ መሳሪያዎች ተመሳሳይ ስም ባለው የቻይና ኩባንያ የተሰራ;
  • የባይት እሴቶችን የሚሰሩ ሁሉም የትእዛዝ መስመር አማራጮች kb፣ KiB፣ MB፣ MiB፣ GB እና GiB ቅጥያዎችን ይደግፋሉ።
  • ተተግብሯል። የ "-flive-patching=[inline-only-static|inline-clone]" አማራጭ በባለብዙ ደረጃ ቁጥጥር ምክንያት ለቀጥታ-ማስተካከያ ስርዓቶች ደህንነቱ የተጠበቀ ማጠናቀርን እንድታገኙ ይፈቅድልሃል።አይፒኤ) ማመቻቸት;
  • ባሽ በሚጠቀሙበት ጊዜ የአማራጭ ማጠናቀቅን በጥሩ ሁኔታ ለመቆጣጠር የ "-- ማጠናቀቅ" አማራጭ ተጨምሯል;
  • የመመርመሪያ መሳሪያዎቹ የመስመሩን ቁጥር የሚያመለክቱ እና ተዛማጅ መረጃዎችን እንደ ኦፔራንድ አይነት የሚያመለክቱ የምንጭ ፅሁፎች ማሳያዎችን ያቀርባሉ። የመስመር ቁጥሮችን እና መለያዎችን ለማሳየት ለማሰናከል አማራጮች "-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-መረጃ» (ስለ ተጨማሪ ማመቻቸት ዝርዝር መረጃ)። ከዚህ ቀደም ከነበረው ቅድመ ቅጥያ "ማስታወሻ" በተጨማሪ "የተመቻቸ" እና "ያመለጡ" አዲስ ቅድመ ቅጥያዎች ታክለዋል። ስለ ዑደቶች የመስመር ላይ መገለጥ እና የውሳኔ አሰጣጥ መረጃ የታከለ ውጤት;
  • የ"-fsave-optimization-record" አማራጭ ታክሏል፣ ሲገለፅ GCC የSRCFILE.opt-record.json.gz ፋይልን በተወሰኑ ማትባቶች አጠቃቀም ላይ ከውሳኔዎች መግለጫ ጋር ያስቀምጣል። አዲሱ አማራጭ ተጨማሪ ሜታዳታ በማካተት ከ "-fopt-info" ሁነታ ይለያል, ለምሳሌ ስለ መገለጫው እና ስለ የመስመር ውስጥ ሰንሰለቶች;
  • የተጨመሩ አማራጮች "-fipa-stack-alignment" እና "-fipa-reference-addressable" የቁልል አሰላለፍ ለመቆጣጠር እና የአድራሻ ሁነታዎችን መጠቀም (መፃፍ-ብቻ ወይም ተነባቢ-ትክክለኛ) ለስታቲክ ተለዋዋጮች በሂደት መካከል ማመቻቸት;
  • የባህሪ ትስስርን ለመቆጣጠር እና ከቅርንጫፍ ትንበያ እና ግምታዊ መመሪያ አፈፃፀም ጋር የተዛመደ ባህሪን ለመቆጣጠር አዲስ አብሮ የተሰሩ ተግባራት ገብተዋል፡"__builtin_ባህሪይ አለው።","__builtin_በሚቻል_ይጠብቃል።"እና"__builtin_ግምት_አስተማማኝ_ዋጋ". ለተግባሮች፣ ተለዋዋጮች እና አይነቶች አዲስ ባህሪ ታክሏል። ግልባጭ;
  • ያልተመሳሰለ ግብዓት/ውፅዓት ሙሉ ድጋፍ ለፎርራን ቋንቋ ተተግብሯል፤
  • ለ Solaris 10 (*-*-solaris2.10) እና የሴል/ቤይ (የሴል ብሮድባንድ ሞተር SPU) መድረኮች ድጋፍ ተቋርጧል እና በሚቀጥለው ዋና ልቀት ይወገዳል። ለArmv2፣ Armv3፣ Armv5 እና Armv5E አርክቴክቸር ድጋፍ ተቋርጧል። ለIntel MPX (የማህደረ ትውስታ ጥበቃ ቅጥያዎች) ድጋፍ ተቋርጧል።

ምንጭ: opennet.ru

አስተያየት ያክሉ