Neuer Compiler GCC 6 mit HSA- und Zen-Support

Der schon l채n짯ger ange짯k체n짯dig짯te Com짯pi짯ler GCC in der Ver짯si짯on 6 steht offen짯bar kurz vor der Ver짯철f짯fent짯li짯chung. GCC ist der Stan짯dard-Com짯pi짯ler unter Linux, mit dem die C멡uellcodes in aus짯f체hr짯ba짯re Maschi짯nen짯spra짯che 체ber짯setzt werden.

Neu in der Ver짯si짯on 6 ist die Unter짯st체t짯zung f체r AMDs kom짯men짯de CPU-Archi짯tek짯tur Zen sowie f체r HSA, also der zur L철sung einer Auf짯ga짯be gemein짯sam von CPU und GPU genutz짯te Spei짯cher, erst짯mals unter짯st체tzt in AMDs Kaveri-APUs, voll in Carrizo.

Hier die f체r die x86-Welt rele짯van짯te Fea짯ture짯lis짯te von GCC 6:

Hete짯ro짯ge짯neous Sys짯tems Architecture

GCC can now gene짯ra짯te HSAIL (Hete짯ro짯ge짯neous Sys짯tem Archi짯tec짯tu짯re Inter짯me짯dia짯te Lan짯guage) for simp짯le OpenMP device con짯s짯tructs if con짯fi짯gu짯red with 밻nable-offload-targets=hsa. A new libgomp plug짯in then runs the HSA GPU ker짯nels imple짯men짯ting the짯se con짯s짯tructs on HSA capa짯ble GPUs via a stan짯dard HSA run time.

If the HSA com짯pi짯la짯ti짯on back end deter짯mi짯nes it can짯not out짯put HSAIL for a par짯ti짯cu짯lar input, it gives a war짯ning by default. The짯se war짯nings can be sup짯pres짯sed with 멬no-hsa. To give a few examp짯les, the HSA back end does not imple짯ment com짯pi짯la짯ti짯on of code using func짯tion poin짯ters, auto짯ma짯tic allo짯ca짯ti짯on of varia짯ble sized arrays, func짯tions with varia짯dic argu짯ments as well as a num짯ber of other less com짯mon pro짯gramming constructs.

When com짯pi짯la짯ti짯on for HSA is enab짯led, the com짯pi짯ler attempts to com짯pi짯le com짯po짯si짯te OpenMP constructs
#prag짯ma omp tar짯get teams dis짯tri짯bu짯te par짯al짯lel for
into par짯al짯lel HSA GPU kernels.

IA-32/x86-64

GCC now sup짯ports the Intel CPU named Sky짯la짯ke with AVX-512 exten짯si짯ons through 몀arch=skylake-avx512. The switch enables the fol짯lo짯wing ISA exten짯si짯ons: AVX-512F, AVX512VL, AVX-512CD, AVX-512BW, AVX-512DQ.

Sup짯port for new AMD ins짯truc짯tions moni짯torx and mwaitx has been added. This includes new intrin짯sic and built-in sup짯port. It is enab짯led through opti짯on 몀mwaitx. The ins짯truc짯tions moni짯torx and mwaitx imple짯ment the same func짯tion짯a짯li짯ty as the old moni짯tor and mwait ins짯truc짯tions. In addi짯ti짯on mwaitx adds a con짯fi짯gura짯ble timer. The timer value is recei짯ved as third argu짯ment and stored in regis짯ter %ebx.

x86-64 tar짯gets now allow stack rea짯lignment from a word-ali짯gned stack poin짯ter using the com짯mand-line opti짯on 몀stack짯rea짯lign or __attribute__ ((force_align_arg_pointer)). This allows func짯tions com짯pi짯led with a vec짯tor-ali짯gned stack to be invo짯ked from objects that keep only word-alignment.

Sup짯port for address spaces __seg_fs, __seg_gs, and __seg_tls. The짯se can be used to access data via the %fs and %gs seg짯ments wit짯hout having to resort to inline assem짯bly. Plea짯se refer to the docu짯men짯ta짯ti짯on for usa짯ge instructions.

Sup짯port for AMD Zen (fami짯ly 17h) pro짯ces짯sors is now available through the 몀arch=znver1 and 몀tune=znver1 options.

Lei짯der wer짯den die meis짯ten Dis짯tri짯bu짯tio짯nen und Anwen짯dun짯gen nicht auto짯ma짯tisch in den Genuss der Opti짯mie짯run짯gen kom짯men, da die Pake짯te in der Regel vor짯kom짯pi짯liert aus Repo짯si짯to짯rys gela짯den wer짯den. Wer opti짯mier짯ten Code m철ch짯te, muss eine Dis짯tri짯bu짯ti짯on w채h짯len, die aus Quell짯code kom짯pi짯liert wird oder sich wenigs짯tens die rele짯van짯ten Anwen짯dun짯gen selbst aus dem Quell짯code kom짯pi짯lie짯ren, was bei Open-Source-Soft짯ware zumin짯dest theo짯re짯tisch mach짯bar ist die ent짯spre짯chen짯den F채hig짯kei짯ten vorausgesetzt.

Wie짯viel opti짯mier짯ter Code brin짯gen kann, sieht man an den GCC-Kom짯pi짯la짯ten mit ver짯schie짯de짯nen CPU-Flags, die wir vor eini짯ger Zeit f체r die Bull짯do짯zer-Archi짯tek짯tur ver짯철f짯fent짯licht haben. Hier ein Kom짯men짯tar dazu aus dem dama짯li짯gen Artikel:

Wenig 체ber짯ra짯schend dau짯ert das Encoden einer WAV ins MP3-For짯mat weni짯ger lang, je st채r짯ker das Kom짯pi짯lat auf die CPU-Archi짯tek짯tur opti짯miert ist. Die Unter짯schie짯de inner짯halb der Kom짯pi짯la짯te jedoch lie짯gen immer auf 채hn짯li짯chem Niveau. Steam짯rol짯ler ist ~5 % schnel짯ler als Piledri짯ver und Excava짯tor legt noch mal 10 Pro짯zent짯punk짯te drauf. So lie짯gen zwi짯schen dem Enco짯die짯ren mit dem Stan짯dard-Kom짯pi짯lat auf Piledri짯ver und dem des maxi짯mal opti짯mier짯ten auf Excava짯tor immer짯hin 65 % Per짯for짯mance-Gewinn f체r die짯sel짯be WAV bei iden짯ti짯scher Kon짯fi짯gu짯ra짯ti짯on und iden짯ti짯schem Takt. Hal짯lo Soft짯ware-Ent짯wick짯ler! Hier schlum짯mert Poten짯zi짯al, das ein짯fach per Com짯pi짯ler-Flag akti짯viert wer짯den kann!

Quel짯le: GCC 6 Release Series Chan짯ges, New Fea짯tures, and Fixes