Издање ГЦЦ 10 компајлерског пакета

После годину дана развоја објављено издање бесплатног скупа компајлера ГЦЦ КСНУМКС, прво велико издање у новој грани ГЦЦ 10.к. Сходно нова шема издања, верзија 10.0 је коришћена у процесу развоја, а непосредно пре изласка ГЦЦ 10.1, грана ГЦЦ 11.0 се већ разгранала, на основу које би се формирало следеће значајно издање, ГЦЦ 11.1.

ГЦЦ 10.1 је познат по имплементацији многих иновација у језику Ц++ развијених за стандард Ц++20, побољшањима у вези са будућим стандардом језика Ц (Ц2к), новим оптимизацијама у позадини компајлера и експерименталној подршци режим статичке анализе. Поред тога, током припреме нове гране, пројекат је пренео спремиште са СВН-а на Гит.

Главни Промене:

  • Додато експериментални начин статичке анализе "-фанализер“, који врши међупроцедуралну анализу путева извршавања кода и токова података у програму који захтевају ресурсе. Режим је способан да открије проблеме у фази компилације, као што су двоструки позиви функције фрее() за једну меморијску област, цурење дескриптора датотеке, дереференцирање и прослеђивање нул показивача, приступ ослобођеним меморијским блоковима, коришћење неиницијализованих вредности итд. Коришћење новог режима за ОпенССЛ код је већ омогућило идентификацију опасна рањивост.
  • Побољшане међупроцедуралне оптимизације. ИПА-СРА (Интерпроцедурал Сцалар Схаред Реплацемент) пролаз је редизајниран да ради у време повезивања и, између осталог, сада уклања израчунате и враћене неискоришћене вредности. У режиму оптимизације „-О2“, омогућена је опција „-финлине-фунцтионс“, која је поново подешена да даје предност компактнијем коду у односу на перформансе извршавања. Рад хеуристике за примену инлине функције је убрзан. Инлине експанзија и хеуристика клонирања функција сада могу да користе информације о распонима вредности за предвиђање ефикасности појединачних трансформација. За Ц++, побољшана је прецизност рашчлањивања алијаса заснованог на типу.
  • Побољшане оптимизације времена повезивања (ЛТО). Додата нова извршна датотека лто-думп да ресетујете информације о објектним датотекама са ЛТО бајт кодом. Паралелни ЛТО пролази аутоматски одређују број истовремено покренутих задатака израде и, ако се не могу одредити, користе информације о броју ЦПУ језгара као фактор паралелизације. Додата је могућност компресије ЛТО бајткода помоћу зстд алгоритма.
  • Побољшан је механизам оптимизације на основу резултата профилисања кода (ПГО – Профиле-гуидед оптимизатион), који генерише оптималнији код на основу анализе карактеристика извршавања кода. Побољшано одржавање профила током компилације и одвајање топлог/хладног кода. Преко опције "-фпрофилне вредности» сада може да прати до 4 вредности профила, на пример за индиректне позиве и пружање прецизнијих информација о профилу.
  • Спецификација паралелног програмирања имплементирана за језике Ц, Ц++ и Фортран ОпенАЦЦ 2.6, који дефинише алате за преузимање операција на ГПУ-овима и специјализованим процесорима као што је НВИДИА ПТКС. Имплементација стандарда је скоро завршена ОпенМП 5.0 (Опен Мулти-Процессинг), који дефинише АПИ и методе примене метода паралелног програмирања на вишејезгарним и хибридним (ЦПУ+ГПУ/ДСП) системима са дељеном меморијом и јединицама за векторизацију (СИМД). Додате функције као што су ластпривате кондиционали, директиве скенирања и петље, изрази реда и употребе_девице_аддр. За ОпенМП и ОпенАЦЦ, додата је подршка за операције преузимања на ГПУ-овима четврте генерације (Фиџи) и пете генерације АМД Радеон (ГЦН) (ВЕГА 10/ВЕГА 20).
  • За језике породице Ц, функција „приступ“ је додата да опише приступ функције објектима прослеђеним референцом или показивачем и да повеже такве објекте са целобројним аргументима који садрже информације о величини објеката. Да би радио заједно са „приступом“, атрибут „типе“ је имплементиран да открије нетачан приступ од корисничких функција, на пример, када се уписују вредности у област изван граница низа. Такође је додат атрибут „симвер“ за повезивање симбола у ЕЛФ датотеци са одређеним бројевима верзија.
  • Додата су нова упозорења:
    • “-Встринг-цомпаре” (омогућено са “-Вектра”) – упозорава на присуство израза у којима се нула упоређује са резултатом позива стрцмп и стрнцмп функција, што је еквивалентно константи због чињенице да је дужина једног аргумента је већи од величине низа у другом аргументу.
    • „-Взеро-ленгтх-боундс“ (омогућено са „-Варраи-боундс“) – упозорава на приступ елементима низа нулте дужине, што може довести до преписивања других података.
    • Упозорења „-Варраи-боундс”, „-Вформат-оверфлов”, „-Врестрицт”, „-Вретурн-лоцал-аддр” и „-Встрингоп-оверфлов” су проширена како би се повећао број ситуација ван граница којима се рукује.
  • Имплементирана је могућност директног навођења широких знакова у идентификаторима користећи тренутно кодирање (УТФ-8 подразумевано) уместо УЦН нотације (\уНННН или \УННННННННН). На пример:

    статиц цонст инт π = 3;
    инт гет_наиве_пи() {
    ретурн π;
    }

  • За језик Ц, имплементиран је део нових функција развијених у оквиру Ц2Кс стандарда (омогућено навођењем -стд=ц2к и -стд=гну2к): појавила се подршка за „[[]]“ синтаксу за дефинисање атрибута као у Ц++ (на пример, [[гну ::цонст]], [[депрецатед]], [[фаллтхроугх]] и [[маибе_унусед]]. Додата подршка за "у8" синтаксу за дефинисање константи са УТФ-8 знаковима.
    Додати су нови макрои у . Додане су замене „%ОБ“ и „%Об“ у стрфтиме.

  • Подразумевани режим за Ц је "-фно-цоммон", што омогућава ефикаснији приступ глобалним променљивим на неким платформама.
  • За Ц++ је имплементирано око 16 измена и иновација, развијених у Ц++20 стандарду. Укључујући додату кључну реч „констинит“
    и имплементирана је подршка за проширења шаблона "концепти„. Концепти вам омогућавају да дефинишете скуп захтева параметара шаблона који, у време компајлирања, ограничавају скуп аргумената који се могу прихватити као параметри шаблона. Концепти се могу користити да би се избегле логичке недоследности између својстава типова података који се користе у оквиру шаблона и својстава типа података улазних параметара.

  • Г++ обезбеђује детекцију недефинисаног понашања изазваног променом константних објеката преко цонстекпр. Смањена потрошња меморије од стране компајлера приликом израчунавања цонстекпр. Додата су нова упозорења "-Вмисматцхед-тагс" и "-Вредундант-тагс".
  • Предложене су нове опције командне линије:
    • "-фаллоцатион-дце" за уклањање непотребних парова "нев" и "делете" оператора.
    • "-фпрофиле-партиал-траининг" да бисте онемогућили оптимизацију величине за код који нема покретање обуке.
    • "-фпрофиле-репродуцибле за контролу нивоа поновљивости профила.
    • "-фпрофиле-префик-патх" за дефинисање основног изворног директоријума за изградњу који се користи за одвојено генерисање профила (за "-фпрофиле-генерате=профиле_дир" и "-фпрофиле-усе=профиле_дир").
  • У тексту упозорења за поменуте опције дате су хипервезе које вам омогућавају да пређете на документацију за ове опције. Замена УРЛ-а се контролише помоћу опције "-фдиагностицс-урлс".
  • Додан оператер препроцесора "__хас_буилтин", који се може користити за проверу уграђених функција.
  • Додата је нова уграђена функција „__буилтин_роундевен“ са имплементацијом функције заокруживања дефинисане у ИСО/ИЕЦ ТС 18661 спецификацији, слична „заокруженој“, али део заокруживања већи од 0.5 навише (на већу вредност), мањи од 0.5 - доле (на нулу), и једнако 0.5 - почевши од паритета претпоследње цифре.
  • За архитектуру ААрцх64, додата је подршка за СВЕ2 екстензију и побољшана је подршка за СВЕ (Сцалабле Вецтор Ектенсион), укључујући додату подршку за уграђене СВЕ АЦЛЕ функције и типове и коришћење векторизације. Проширена је подршка за ЛСЕ (Ларге Систем Ектенсионс) и ТМЕ (Трансацтионал Мемори Ектенсион). Додате нове инструкције предложене у Армв8.5-А и Армв8.6-А, укључујући упутства за генерисање случајних бројева, заокруживање, повезивање меморијских ознака,
    бфлоат16 и множење матрице. Додата подршка за процесор
    Арм Цортек-А77,
    Арм Цортек-А76АЕ,
    Арм Цортек-А65,
    Арм Цортек-А65АЕ,
    Арм Цортек-А34 и
    Марвелл ТхундерКс3.

  • Додата подршка за АБИ ФДПИЦ (32-битни показивачи функција) за АРМ64. Редизајнирана и оптимизована обрада 64-битних целобројних операција. Додата подршка за ЦПУ
    Арм Цортек-А77,
    Арм Цортек-А76АЕ и
    Арм Цортек-М35П. Проширена подршка за АЦЛЕ инструкције за обраду података, укључујући 32-битни СИМД, 16-битно множење, аритметику са затварањем и друге оптимизације ДСП алгоритама. Додата експериментална подршка за АЦЛЕ ЦДЕ (Цустом Датапатх Ектенсион) упутства.

  • Значајно побољшано генерисање кода и векторизација у позадини за АМД ГПУ засноване на ГЦН микроархитектури.
  • Додата подршка за уређаје сличне КСМЕГА за АВР архитектуру
    АТтини202, АТтини204, АТтини402, АТтини404, АТтини406, АТтини804, АТтини806, АТтини807, АТтини1604, АТтини1606, АТтини1607, АТтини808, АТмега809, АТмега1608м1609 3208, АТмега3209, АТмега4808 4809, АТмегаXNUMX и АТмегаXNUMX.

  • Додато је ново проширење архитектуре Интел ЕНКЦМД скупа инструкција (-менкцмд) за ИА-32/к86-64 архитектуре. Додата подршка за Интел Цооперлаке (-марцх=цооперлаке, укључује АВКС512БФ16 ИСА екстензију) и Тигерлаке (-марцх=тигерлаке, укључује МОВДИРИ, МОВДИР64Б и АВКС512ВП2ИНТЕРСЕЦТ ИСА екстензије) ЦПУ.
  • Имплементација ХСАИЛ (средњи језик хетерогене архитектуре система) за хетерогене рачунарске системе засноване на ХСА архитектури је застарела и вероватно ће бити уклоњена у будућем издању.

Извор: опеннет.ру

Додај коментар