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

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

ГЦЦ 9.1 је познат по стабилизацији подршке за Ц++17 стандард, настављању имплементације могућности будућег Ц++20 стандарда (кодног назива Ц++2а), укључивању у фронтенд за Д језик, делимичној подршци за ОпенМП 5.0 , скоро потпуна подршка за ОпенАЦЦ 2.5, повећање скалабилности међупроцедуралних оптимизација и оптимизација у фази везивања, проширење дијагностичких алата и додавање нових упозорења, позадинских делова за ОпенРИСЦ, Ц-СКИ В2 и АМД ГЦН ГПУ.

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

  • Додата подршка за програмски језик Д. ГЦЦ укључује фронтенд са компајлером ГДЦ (Гну Д Цомпилер) и рунтиме библиотеке (либпхобос), које вам омогућавају да користите стандардни ГЦЦ за прављење програма на програмском језику Д. Процес омогућавања подршке за језик Д у ГЦЦ-у започео још 2011. али довучен на због потребе усклађивања кода са захтевима ГЦЦ-а и проблема са преносом права интелектуалне својине на Дигитал Марс, који развија програмски језик Д;
  • Направљена су побољшања у генератору кода. На пример, имплементирана је употреба различитих стратегија за проширење Свитцх израза (табела скокова, тест битова, стабло одлучивања) у зависности од ситуације. Додата је могућност трансформације линеарних функција које укључују Свитцх израз коришћењем оптимизације „-фтрее-свитцх-цонверсион“ (на пример, скуп услова као што је „случај 2: како = 205; прекид; случај 3: како = 305; прекид ;” ће бити конвертовано у „100 * како + 5“;
  • Побољшане међупроцедуралне оптимизације. Инлине подешавања имплементације су прилагођена за модерне Ц++ базе кода и проширена новим параметрима мак-инлине-инснс-смалл, мак-инлине-инснс-сизе, унинлинед-фунцтион-инснс, унинлинед-фунцтион-тиме, унинлинед-тхунк-инснс и унинлинед -тхунк-тиме. Побољшана тачност и агресивност одвајања хладног/врућег кода. Побољшана скалабилност за веома велике преводилачке јединице (на пример, када се примењује оптимизација у фази повезивања на велике програме);
  • Побољшан је механизам оптимизације на основу резултата профилисања кода (ПГО – Профиле-гуидед оптимизатион), који генерише оптималнији код на основу анализе карактеристика извршавања кода. Опција резимеа "-фпрофиле-усе" сада укључује режиме оптимизације "-фверсион-лоопс-фор-стридес", "-флооп-интерцханге", "-флооп-унролл-анд-јам" и "-фтрее-лооп-дистрибутион". Уклоњено је укључивање хистограма са бројачима у датотеке, што је смањило величину фајлова са профилима (хистограми се сада генеришу у ходу када се врше оптимизације током повезивања);
  • Побољшане оптимизације времена повезивања (ЛТО). Поједностављење типова је обезбеђено пре генерисања резултата, што је омогућило значајно смањење величине ЛТО објектних датотека, смањење потрошње меморије у фази повезивања и побољшање паралелизације операција. Број партиција (-парам лто-партитионс) је повећан са 32 на 128, што побољшава перформансе на системима са великим бројем ЦПУ нити. Додат је параметар за контролу броја процеса оптимизације
    "-парам лто-мак-стреаминг-параллелисм";

    Као резултат тога, у поређењу са ГЦЦ 8.3, оптимизације уведене у ГЦЦ 9 дозвољен смањити време компилације Фирефок 5 и ЛибреОффице 66 за око 6.2.3%. Величина објектних датотека је смањена за 7%. Време везивања на 8-језгарном ЦПУ-у је смањено за 11%. Фаза секвенцијалне оптимизације фазе повезивања је сада 28% бржа и троши 20% мање меморије. Потрошња меморије сваког процесора паралелизоване фазе ЛТО смањена је за 30%;

  • Већина спецификација паралелног програмирања је имплементирана за језике Ц, Ц++ и Фортран ОпенАЦЦ 2.5, који дефинише алате за преузимање операција на ГПУ-овима и специјализованим процесорима као што је НВИДИА ПТКС;
  • Делимична подршка за стандард је имплементирана за Ц и Ц++ ОпенМП 5.0 (Опен Мулти-Процессинг), који дефинише АПИ и методе примене метода паралелног програмирања за Ц, Ц++ и Фортран језике на вишејезгарним и хибридним (ЦПУ+ГПУ/ДСП) системима са дељеном меморијом и јединицама векторизације (СИМД) ;
  • Додата су нова упозорења за језик Ц: "-Ваддресс-оф-пацкед-мембер" (непоравнана вредност показивача на упаковани члан структуре или уније) и
    «-Апсолутна вредност" (када приступате функцијама за израчунавање апсолутне вредности, ако постоји прикладнија функција за наведени аргумент, на пример, фабс(3.14) треба да се користи уместо абс(3.14). Додата су нова упозорења за Ц++: "-Вдепрецатед-цопи",
    "-Винит-лист-лифетиме", "-Вредундант-мове", "-Впесимизинг-мове" и "-Вцласс-цонверсион". Многа раније доступна упозорења су проширена;

  • Додата експериментална подршка за део будућег стандарда језика Ц, кодног назива Ц2к. Да бисте омогућили подршку за Ц2к, користите опције "-стд=ц2к" и "-стд=гну2к" (да бисте омогућили ГНУ екстензије). Стандард је још увек у раној фази развоја, стога, од његових могућности, подржан је само израз _Статиц_ассерт са једним аргументом (_Статиц_ассерт са два аргумента је стандардизован у Ц11);
  • Подршка за Ц++17 стандард је проглашена стабилном. У фронтенду, језичке могућности Ц++17 су у потпуности имплементиране, а у либстдц++, библиотечке функције дефинисане у стандарду су близу пуној имплементацији;
  • Настављено имплементација елементи будућег стандарда Ц++2а. На пример, додата је могућност укључивања опсега током иницијализације, имплементирана су проширења за ламбда изразе, додата је подршка за празне чланове структура података и вероватно/невероватне атрибуте, обезбеђена је могућност позивања виртуелних функција у условним изразима. , итд.
    Да бисте омогућили подршку за Ц++2а, користите опције "-стд=ц++2а" и "-стд=гну++2а". Додате датотеке заглавља битова и верзије у либстдц++ за Ц++2а, стд::ремове_цвреф, стд::унврап_референце, стд::унврап_децаи_реф, стд::ис_нотхров_цонвертибле и стд::типе_идентити особине, стд::мидпоинт, функције стд::мидпоинт, , стд::бинд_фронт,
    стд::висит, стд::ис_цонстант_евалуатед и стд::ассуме_алигнед, додата подршка за тип цхар8_т, имплементирана могућност провере префикса и суфикса стрингова (почиње_са, завршава_са);

  • Додата подршка за нове АРМ процесоре
    Цортек-А76, Цортек-А55, Цортек-А76 ДинамИК биг.ЛИТТЛЕ и Неоверсе Н1. Додата подршка за упутства уведена у Армв8.3-А за рад са комплексним бројевима, генерисање псеудослучајних бројева (рнг) и означавање меморије (мемтаг), као и упутства за блокирање напада који се односе на спекулативно извршење и рад јединице за предвиђање гранања . За архитектуру ААрцх64, додат је заштитни режим пресеци стека и гомиле („-фстацк-цласх-протецтион“). Да бисте користили карактеристике архитектуре Армв8.5-А, додата је опција „-марцх=армв8.5-а“

  • Укључује позадину за генерисање кода за АМД ГПУ засноване на ГЦН микроархитектури. Имплементација је тренутно ограничена на компилацију једнонитних апликација (подршка за извођење вишенитних калкулација преко ОпенМП-а и ОпенАЦЦ-а ће бити понуђена касније) и подршку за ГПУ Фији и Вега 10;
  • Додато ново позадинско окружење за процесоре ОпенРИСЦ;
  • Додата позадина за процесоре Ц-СКИ В2, које производи истоимена кинеска компанија за различите потрошачке уређаје;
  • Све опције командне линије које раде са вредностима бајтова подржавају суфиксе кб, КиБ, МБ, МиБ, ГБ и ГиБ;
  • Имплементирано опција “-фливе-патцхинг=[инлине-онли-статиц|инлине-цлоне]” вам омогућава да постигнете безбедну компилацију за системе за закрпе уживо због контроле на више нивоа над употребом међупроцедуралних (ИПА) оптимизације;
  • Додата опција "--цомплетион" за детаљну контролу завршетка опције када се користи басх;
  • Дијагностичке алатке обезбеђују приказе извода изворног текста који указују на број реда и визуелно означавају повезане информације, као што су типови операнда. Да бисте онемогућили приказ бројева линија и ознака, обезбеђене су опције „-фно-диагностицс-схов-лине-нумберс” и „-фно-диагностицс-схов-лабелс”;

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

  • Проширен алати за дијагностиковање грешака у Ц++ коду, побољшана читљивост информација о узроцима грешака и истицање проблематичних параметара;

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

  • Додата опција “-фдиагностицс-формат=јсон”, која омогућава генерисање дијагностичког излаза у машински читљивом формату (ЈСОН);
  • Додане су нове опције профилисања „-фпрофиле-филтер-филес“ и „-фпрофиле-екцлуде-филес“ за одабир изворних датотека које ће се обрадити;
  • АддрессСанитизер обезбеђује генерисање компактнијег верификационог кода за аутоматске променљиве, што смањује потрошњу меморије извршне датотеке која се проверава;
  • Побољшан излаз у "-фопт-инфо» (детаљне информације о додатним оптимизацијама). Додати нови префикси „оптимизовано“ и „пропуштено“, поред претходно доступног префикса „напомена“. Додати излаз информација о доношењу одлука о инлине-откривању и векторизацији циклуса;
  • Додата опција „-фсаве-оптимизатион-рецорд“, када је наведена, ГЦЦ чува датотеку СРЦФИЛЕ.опт-рецорд.јсон.гз са описом одлука о коришћењу одређених оптимизација. Нова опција се разликује од режима „-фопт-инфо“ тако што укључује додатне метаподатке, као што су информације о профилу и уметнутим ланцима;
  • Додате опције “-фипа-стацк-алигнмент” и “-фипа-референце-аддрессабле” за контролу поравнања стека и коришћење начина адресирања (само за писање или тачно за читање) за статичке варијабле током интерпроцедуралних оптимизација;
  • Уведене су нове уграђене функције за контролу везивања атрибута, као и понашања у вези са предвиђањем гранања и спекулативним извршавањем инструкција: "__буилтин_хас_аттрибуте«,«__буилтин_екпецт_витх_пробабилити" И "__буилтин_спецулатион_сафе_валуе„. Додат је нови атрибут за функције, променљиве и типове копија;
  • Потпуна подршка за асинхрони улаз/излаз је имплементирана за језик Фортран;
  • Подршка за платформе Соларис 10 (*-*-соларис2.10) и Целл/БЕ (Целл Броадбанд Енгине СПУ) је застарела и биће уклоњена у следећем великом издању. Подршка за Армв2, Армв3, Армв5 и Армв5Е архитектуре је укинута. Подршка за Интел МПКС (Мемори Протецтион Ектенсионс) је укинута.

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

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