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

ከአንድ አመት እድገት በኋላ ታትሟል ነፃ የቅንጅቶች ስብስብ መለቀቅ GCC 10.1በአዲሱ GCC 10.x ቅርንጫፍ ውስጥ የመጀመሪያው ዋና ልቀት። በአሰራሩ ሂደት መሰረት አዲስ እቅድ የመልቀቂያ ቁጥር፣ ስሪት 10.0 በእድገት ሂደት ውስጥ ጥቅም ላይ ውሏል፣ እና ጂሲሲ 10.1 ከመውጣቱ ጥቂት ቀደም ብሎ፣ የጂሲሲ 11.0 ቅርንጫፍ አስቀድሞ ሹካ ነበር፣ ከዚያ ቀጣዩ ጉልህ የሆነ የGCC 11.1 ልቀት ይመሰረታል።

GCC 10.1 ለC++20 ደረጃ በተዘጋጀው በC++ ቋንቋ ብዙ ፈጠራዎችን በመተግበሩ ፣ከወደፊቱ የC ቋንቋ ደረጃ (C2x) ጋር በተያያዙ ማሻሻያዎች ፣በአቀናባሪው ጀርባ ላይ አዳዲስ ማመቻቸት እና የሙከራ ድጋፍ የማይንቀሳቀስ ትንተና ሁነታ. በተጨማሪም, አዲስ ቅርንጫፍ በሚዘጋጅበት ጊዜ, ፕሮጀክቱ ከ SVN ወደ Git ማከማቻውን አስተላልፏል.

ዋና ለውጥ:

  • ታክሏል። የማይንቀሳቀስ ትንተና የሙከራ ዘዴ- ፋናሊዘር“በፕሮግራም ውስጥ የመረጃ አፈፃፀም መንገዶችን እና የመረጃ ፍሰቶችን በንብረት ላይ የተጠናከረ የእርስ በርስ ትንተና የሚያከናውን። ሞዱ በማጠናቀር ደረጃ ላይ ያሉ ችግሮችን ፈልጎ ማግኘት ይችላል፡ ለምሳሌ ወደ ነጻ() ድርብ ጥሪ ለአንድ ማህደረ ትውስታ ቦታ ተግባር፣ የፋይል ገላጭ ፍንጣቂዎች፣ ባዶ ጠቋሚዎችን መሰረዝ እና ማለፍ፣ የተፈቱ የማህደረ ትውስታ ብሎኮችን ማግኘት፣ ያልታወቁ እሴቶችን መጠቀም፣ ወዘተ። አዲሱን ሁነታ ለOpenSSL ኮድ መጠቀም አስቀድሞ ለመለየት አስችሎታል። አደገኛ ተጋላጭነት.
  • የተሻሻለ የእርስ በርስ ሂደት ማመቻቸት። የ IPA-SRA (Interprocedural Scalar Shared Replacement) ማለፊያ በአዲስ መልክ የተቀየሰ ሲሆን በተያዘው ጊዜ እንዲሰራ እና ከሌሎች ነገሮች በተጨማሪ አሁን የተሰላ እና ጥቅም ላይ ያልዋሉ እሴቶችን ያስወግዳል። በ "-O2" ማሻሻያ ሁነታ ላይ "-finline-functions" አማራጭ ነቅቷል, ይህም ከአፈፃፀም አፈፃፀም የበለጠ የታመቀ ኮድን ይደግፋል. የሂዩሪስቲክ የመስመር ላይ ተግባር መዘርጋት ስራ ተፋጠነ። የመስመር ውስጥ ማስፋፊያ እና ተግባር ክሎኒንግ ሂዩሪስቲክስ የግለሰባዊ ለውጦችን ውጤታማነት ለመተንበይ ስለ እሴት ክልሎች መረጃ አሁን ሊጠቀም ይችላል። ለC++፣ በአይነት ላይ የተመሰረተ ተለዋጭ መተንተን ትክክለኛነት ተሻሽሏል።
  • የተሻሻለ የግንኙነት ጊዜ ማሻሻያዎች (LTO)። አዲስ ተፈፃሚ ታክሏል። መጣል በ LTO ባይት ኮድ ስለ የነገር ፋይሎች መረጃን እንደገና ለማስጀመር። ትይዩ የኤል.ቲ.ኦ ማለፊያዎች በአንድ ጊዜ የሚሰሩ ስራዎችን ብዛት በራስ-ሰር ይወስናሉ እና ሊታወቁ የማይችሉ ከሆነ ስለ ሲፒዩ ኮሮች ብዛት መረጃን እንደ ትይዩነት ይጠቀሙ። የzstd አልጎሪዝምን በመጠቀም LTO bytecode የመጨመቅ ችሎታ ታክሏል።
  • በኮድ ፕሮፋይል (PGO - በመገለጫ የሚመራ ማሻሻያ) ውጤቶች ላይ የተመሰረተው የማሻሻያ ዘዴ ተሻሽሏል, ይህም በኮድ አፈጻጸም ባህሪያት ትንተና ላይ በመመርኮዝ የበለጠ ጥሩ ኮድ ይፈጥራል. በማጠናቀር እና በሙቅ/ቀዝቃዛ ኮድ መለያየት ወቅት የተሻሻለ የመገለጫ ጥገና። በምርጫው"-fprofile-እሴቶች» አሁን እስከ 4 የመገለጫ እሴቶችን መከታተል ይችላል፣ ለምሳሌ ለተዘዋዋሪ ጥሪዎች እና የበለጠ ትክክለኛ የመገለጫ መረጃ ማቅረብ።
  • ለ C፣ C++ እና Forran ቋንቋዎች ትይዩ የፕሮግራም አወጣጥ ዝርዝር ተተግብሯል። ክፍት ኤሲሲ 2.6በጂፒዩዎች እና እንደ NVIDIA PTX ባሉ ልዩ ፕሮሰሰር ላይ የሚሰሩ ስራዎችን ለማውረድ የሚረዱ መሳሪያዎችን የሚገልጽ ነው። የደረጃውን ተግባራዊ ማድረግ ከሞላ ጎደል ተጠናቋል MP 5.0 ክፈት (Open Multi-Processing)፣ እሱም ኤፒአይን እና ትይዩ የፕሮግራም አወጣጥ ዘዴዎችን በብዙ ኮር እና ዲቃላ (ሲፒዩ+ ጂፒዩ/ዲኤስፒ) ሲስተሞች በጋራ የማህደረ ትውስታ እና የቬክተርራይዜሽን አሃዶች (ሲኤምዲ) የሚገልጽ ነው። እንደ የመጨረሻ የግል ሁኔታዊ ሁኔታዎች፣ መቃኛ እና ሉፕ መመሪያዎች፣ ትዕዛዝ እና የአጠቃቀም_መሳሪያ_addr አገላለጾችን ያሉ ታክለዋል። ለOpenMP እና OpenACC፣ በአራተኛው ትውልድ (ፊጂ) እና በአምስተኛው-ትውልድ AMD Radeon (GCN) ጂፒዩዎች (VEGA 10/VEGA 20) ላይ ለሚደረጉ ስራዎች የማውረድ ድጋፍ ታክሏል።
  • ለ C ቤተሰብ ቋንቋዎች ተግባሩን በማጣቀሻ ወይም በጠቋሚ የተላለፉ ዕቃዎችን ተደራሽነት ለመግለፅ የ"መዳረሻ" ተግባር ተጨምሯል ፣ እና እንደነዚህ ያሉትን ነገሮች የእቃዎቹን መጠን በተመለከተ መረጃን ከያዙ የኢንቲጀር ነጋሪ እሴቶች ጋር ለማያያዝ። ከ "መዳረሻ" ጋር በጥምረት ለመስራት የ"አይነት" ባህሪው ከተጠቃሚ ተግባራት የተሳሳተ መዳረሻን ለመለየት ይተገበራል ፣ ለምሳሌ ፣ ከድርድር ወሰን ውጭ ወደሆነ አካባቢ እሴቶችን በሚጽፉበት ጊዜ። እንዲሁም በELF ፋይል ውስጥ ካሉ የተወሰኑ የስሪት ቁጥሮች ጋር የ"ሲምቨር" መለያ ባህሪ ተጨምሯል።
  • አዲስ ማስጠንቀቂያዎች ታክለዋል፡-
    • "-Wstring-compare" (ከ "-Wextra" ጋር የነቃ) - ዜሮ የ strcmp እና strncmp ተግባራትን ከመጥራት ውጤት ጋር ሲነፃፀር ስለ አገላለጾች መገኘት ያስጠነቅቃል, ይህም ርዝመቱ በመኖሩ ምክንያት ከቋሚ ጋር እኩል ነው. የአንድ ነጋሪ እሴት በሁለተኛው ነጋሪ እሴት ውስጥ ካለው የድርድር መጠን ይበልጣል።
    • "-Wzero-length-bounds" (በ"-Warray-bounds" የነቃ) - የዜሮ ርዝመት ያላቸው የድርድር ክፍሎችን ስለማግኘት ያስጠነቅቃል፣ ይህም ሌላ ውሂብ ወደ መፃፍ ሊያመራ ይችላል።
    • የ"-Warray-bounds"፣ "-Wformat-overflow"፣ "-Wrestrict"፣ "-Wreturn-local-adr" እና "-Wstringop-overflow" ማስጠንቀቂያዎች ከወሰን ውጪ ያሉ ሁኔታዎችን ቁጥር ለማስፋት ተዘርግተዋል። የሚያዙት።
  • አሁን ያለውን ኢንኮዲንግ (UTF-8 በነባሪ) ከUCN ማስታወሻ (\uNNNN ወይም \UNNNN ወይም \UNNNNNNNN) በመጠቀም ለይ ሰፊ ቁምፊዎችን በቀጥታ የመግለጽ ችሎታን ተግባራዊ አድርጓል። ለምሳሌ:

    የማይንቀሳቀስ const int π = 3;
    int get_naïve_pi() {
    መመለስ π;
    }

  • ለ C ቋንቋ፣ በC2X መስፈርት ውስጥ የተገነቡ የአዳዲስ ባህሪያት ክፍል ተተግብሯል (በመግለጽ የነቃ -std=c2x እና -std=gnu2x)፡ የ"[[]]" አገባብ ባህሪያትን ለመግለጽ እንደ እ.ኤ.አ. C++ (ለምሳሌ [[gnu ::const]]፣ [[የተቋረጠ]]፣ [[fallthrough]] እና [[ምን አልባት_ጥቅም ላይ ያልዋለ]]]። ቋሚዎችን በUTF-8 ቁምፊዎች ለመወሰን ለ«u8» አገባብ ድጋፍ ታክሏል።
    አዲስ ማክሮዎች ታክለዋል። . በ strftime ላይ "%OB" እና "%Ob" ምትክ ታክሏል።

  • የ C ነባሪ ሁነታ "-fno-common" ነው, ይህም በአንዳንድ መድረኮች ላይ ይበልጥ ቀልጣፋ ወደ አለምአቀፍ ተለዋዋጮች ለመድረስ ያስችላል.
  • ለC++፣ በC++16 መስፈርት የተገነቡ 20 ያህል ለውጦች እና ፈጠራዎች ተተግብረዋል። የተጨመረው ቁልፍ ቃል "constinit"ን ጨምሮ
    እና ለአብነት ማራዘሚያዎች ድጋፍ ተተግብሯል"ጽንሰ-ሐሳቦች". ፅንሰ-ሀሳቦች የአብነት መለኪያ መስፈርቶችን ስብስብ እንዲገልጹ ያስችሉዎታል፣ ይህም በማጠናቀር ጊዜ፣ እንደ አብነት መመዘኛዎች ተቀባይነት ያላቸውን ነጋሪ እሴቶች ስብስብ ይገድባል። ፅንሰ-ሀሳቦቹ በአብነት ውስጥ ጥቅም ላይ በሚውሉ የውሂብ አይነቶች ባህሪያት እና በግቤት ግቤቶች የውሂብ አይነት ባህሪያት መካከል ያለውን አመክንዮአዊ አለመጣጣም ለማስወገድ ጥቅም ላይ ሊውሉ ይችላሉ.

  • G++ ቋሚ ነገሮችን በ constexpr በመለወጥ ምክንያት ያልተገለጸ ባህሪን መለየት ያቀርባል። constexpr ሲያሰሉ በአቀናባሪው የማህደረ ትውስታ ፍጆታ ቀንሷል። አዲስ ማስጠንቀቂያዎች "-Wmismatched-tags" እና "-Wredundant-tags" ታክለዋል።
  • አዲስ የትእዛዝ መስመር አማራጮች ቀርበዋል፡-
    • "-fallocation-dce" አላስፈላጊ የ"አዲስ" እና "ሰርዝ" ኦፕሬተሮችን ለማስወገድ።
    • "-fprofile-partial-training" የሥልጠና ሩጫ ለሌለው ኮድ የመጠን ማመቻቸትን ለማሰናከል።
    • "-fprofile-reproducible የመገለጫውን የመራባት ደረጃ ለመቆጣጠር።
    • "-fprofile-prefix-path" ለተለየ መገለጫ ማመንጨት ጥቅም ላይ የሚውለውን የመሠረት ምንጭ ግንባታ ማውጫን ለመግለጽ (ለ"-fprofile-generate=profile_dir" እና "-fprofile-use=profile_dir")።
  • ለተጠቀሱት አማራጮች የማስጠንቀቂያ ጽሁፍ ውስጥ, ለእነዚህ አማራጮች ወደ ሰነዶች ለመሄድ የሚያስችሉዎት hyperlinks ቀርበዋል. የዩአርኤል ምትክ ቁጥጥር የሚደረገው የ"-fdiagnostics-urls" አማራጭን በመጠቀም ነው።
  • የቅድሚያ ፕሮሰሰር ኦፕሬተር ታክሏል__አገነባው", አብሮ የተሰሩ ተግባራትን ለመፈተሽ ሊያገለግል ይችላል.
  • አዲስ አብሮ የተሰራ ተግባር "__builtin_roundeven" ታክሏል በ ISO/IEC TS 18661 ዝርዝር ውስጥ የተገለፀውን የማጠጋጋት ተግባር ትግበራ፣ ከ"ዙር" ጋር ተመሳሳይ፣ ግን ከ0.5 በላይ (ወደ ትልቅ እሴት) የማጠጋጋት ክፍል፣ ከ0.5 በታች - ወደ ታች (ወደ ዜሮ), እና ከ 0.5 ጋር እኩል ነው - ከፔንላይት አሃዝ እኩልነት ጀምሮ.
  • ለ AArch64 አርክቴክቸር የ SVE2 ማራዘሚያ ድጋፍ ተጨምሯል እና ለ SVE (Scalable Vector Extension) ድጋፍ ተሻሽሏል፣ አብሮገነብ የ SVE ACLE ተግባራት እና አይነቶች እና የቬክተር አጠቃቀምን ጨምሮ። የ LSE (ትልቅ የስርዓት ቅጥያዎች) እና TME (የመገበያያ ማህደረ ትውስታ ቅጥያ) ድጋፍ ተዘርግቷል። በArmv8.5-A እና Armv8.6-A ውስጥ የታቀዱ አዳዲስ መመሪያዎች ታክለዋል፣ የዘፈቀደ ቁጥር ማመንጨት መመሪያዎችን፣ ማጠጋጋት፣ የማስታወሻ መለያ ማሰሪያ፣
    bfloat16 እና ማትሪክስ ማባዛት። የፕሮሰሰር ድጋፍ ታክሏል።
    ክንድ Cortex-A77,
    ክንድ Cortex-A76AE,
    ክንድ Cortex-A65,
    ክንድ Cortex-A65AE,
    ክንድ Cortex-A34 እና
    Marvell ThunderX3.

  • ለ ABI FDPIC (32-ቢት ተግባር ጠቋሚዎች) ለ ARM64 ድጋፍ ታክሏል። የ64-ቢት ኢንቲጀር ስራዎችን እንደገና የተነደፈ እና የተመቻቸ። የሲፒዩ ድጋፍ ታክሏል።
    ክንድ Cortex-A77,
    ክንድ Cortex-A76AE እና
    ክንድ Cortex-M35P. 32-ቢት ሲምዲ፣ 16-ቢት ማባዛት፣ መቀርቀሪያ አርቲሜቲክ እና ሌሎች የDSP አልጎሪዝም ማሻሻያዎችን ጨምሮ ለACLE መረጃ ሂደት መመሪያዎች የተዘረጋ ድጋፍ። ለ ACLE CDE (ብጁ የውሂብ ዱካ ቅጥያ) መመሪያዎች የሙከራ ድጋፍ ታክሏል።

  • በጂሲኤን ማይክሮ አርክቴክቸር ላይ በመመስረት በከፍተኛ ሁኔታ የተሻሻለ ኮድ ማመንጨት እና ለኤ.ዲ.ዲ.ጂ.ፒ.
  • ለኤቪአር አርክቴክቸር ለ XMEGA መሰል መሳሪያዎች ድጋፍ ታክሏል።
    ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804, ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATtiny808, ATmegaAT809mega1608, 1609 3208፣ ATmega3209፣ ATmega4808 4809፣ ATmegaXNUMX እና ATmegaXNUMX።

  • ለIA-32/x86-64 አርክቴክቸር አዲስ የIntel ENQCMD መመሪያ ስብስብ አርክቴክቸር ቅጥያ (-menqcmd) ተጨምሯል። ለIntel Cooperlake (-march=cooperlake፣AVX512BF16 ISA ቅጥያውን ያካትታል) እና Tigerlake (-march=tigerlake፣ MOVDIRI፣ MOVDIR64B እና AVX512VP2INTERSECT ISA ቅጥያዎችን ያካትታል) ሲፒዩዎች ተጨማሪ ድጋፍ።
  • በHSA አርክቴክቸር ላይ የተመሰረቱ የHSAIL (Heterogeneous System Architecture Intermediate Language) ለተለያዩ የኮምፒዩተር ሥርዓቶች ትግበራ ተቋርጧል እና ወደፊት በሚለቀቅበት ጊዜ ሊወገድ ይችላል።

ምንጭ: opennet.ru

አስተያየት ያክሉ