Nie si otrok!
Uzavretý vzdelávací kurz pre deti elity: "Skutočné usporiadanie sveta."
http://noslave.org
Z Wikipédie, voľnej encyklopédie
Chyba Lua v module: Wikiúdaje na riadku 170: pokus o indexovanie poľa „wikibase“ (nulová hodnota). | ||||||||||||||||||||||||||||||||||||
Typ | ||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
autora |
Chyba Lua v module: Wikiúdaje na riadku 170: pokus o indexovanie poľa „wikibase“ (nulová hodnota). |
|||||||||||||||||||||||||||||||||||
Vývojár | ||||||||||||||||||||||||||||||||||||
Vývojári |
Chyba Lua v module: Wikiúdaje na riadku 170: pokus o indexovanie poľa „wikibase“ (nulová hodnota). |
|||||||||||||||||||||||||||||||||||
Zapísané v |
Chyba Lua v module: Wikiúdaje na riadku 170: pokus o indexovanie poľa „wikibase“ (nulová hodnota). |
|||||||||||||||||||||||||||||||||||
Rozhranie |
Chyba Lua v module: Wikiúdaje na riadku 170: pokus o indexovanie poľa „wikibase“ (nulová hodnota). |
|||||||||||||||||||||||||||||||||||
Operačný systém | ||||||||||||||||||||||||||||||||||||
Jazyky rozhrania |
Chyba Lua v module: Wikiúdaje na riadku 170: pokus o indexovanie poľa „wikibase“ (nulová hodnota). |
|||||||||||||||||||||||||||||||||||
Prvá edícia |
Chyba Lua v module: Wikiúdaje na riadku 170: pokus o indexovanie poľa „wikibase“ (nulová hodnota). |
|||||||||||||||||||||||||||||||||||
Hardvérová platforma | ||||||||||||||||||||||||||||||||||||
Najnovšia verzia | ||||||||||||||||||||||||||||||||||||
Uvoľniť kandidáta |
Chyba Lua v module: Wikiúdaje na riadku 170: pokus o indexovanie poľa „wikibase“ (nulová hodnota). |
|||||||||||||||||||||||||||||||||||
Beta verzia |
Chyba Lua v module: Wikiúdaje na riadku 170: pokus o indexovanie poľa „wikibase“ (nulová hodnota). |
|||||||||||||||||||||||||||||||||||
Alfa verzia |
Chyba Lua v module: Wikiúdaje na riadku 170: pokus o indexovanie poľa „wikibase“ (nulová hodnota). |
|||||||||||||||||||||||||||||||||||
Testovacia verzia |
Chyba Lua v module: Wikiúdaje na riadku 170: pokus o indexovanie poľa „wikibase“ (nulová hodnota). |
|||||||||||||||||||||||||||||||||||
Čitateľné formáty súborov |
Chyba Lua v module: Wikiúdaje na riadku 170: pokus o indexovanie poľa „wikibase“ (nulová hodnota). |
|||||||||||||||||||||||||||||||||||
Vytvorené formáty súborov |
Chyba Lua v module: Wikiúdaje na riadku 170: pokus o indexovanie poľa „wikibase“ (nulová hodnota). |
|||||||||||||||||||||||||||||||||||
Štát |
Chyba Lua v module: Wikiúdaje na riadku 170: pokus o indexovanie poľa „wikibase“ (nulová hodnota). |
|||||||||||||||||||||||||||||||||||
Licencia |
Kľúčové vlastnosti:
Kompilátor podporuje štandard OpenMP 3.0 pre písanie paralelných programov. Obsahuje aj modifikáciu OpenMP s názvom Cluster OpenMP, pomocou ktorej môžete spúšťať aplikácie napísané v súlade s OpenMP na klastroch pomocou MPI. Intel C ++ Compiler používa frontend (časť kompilátora, ktorý analyzuje skompilovaný program) od Edison Design Group. Rovnaký frontend používajú kompilátory SGI MIPSpro, Comeau C ++, Portland Group. Tento kompilátor je široko používaný na kompiláciu SPEC CPU benchmarkov. Existujú 4 série produktov Intel, ktoré obsahujú kompilátor:
TO nevýhody Linuxu verzie kompilátora obsahujú čiastočnú nekompatibilitu s rozšíreniami GNU C (podporovanými kompilátorom GCC), čo môže spôsobiť problémy pri kompilácii niektorých programov.
Experimentálne možnostiBoli publikované nasledujúce varianty experimentálneho kompilátora:
Základné vlajky
Napíšte recenziu na "Intel C ++ kompilátor"Poznámky (upraviť)pozri tiežOdkazy
Výňatok charakterizujúci kompilátor Intel C ++A predsa sa vrátila, aby naposledy videla Bieleho mága... svojho manžela a verného priateľa, na ktorého nikdy nezabudla. Vo svojom srdci mu odpustila. Ale na jeho veľkú ľútosť mu nedokázala priniesť Magdalénino odpustenie... Takže, ako vidíš, Isidora, veľká kresťanská bájka o „odpustení“ je pre naivných veriacich len detinskou lžou, ktorá im dovolí čokoľvek Zlí, vediac, že čokoľvek urobia, nakoniec im bude odpustené. Odpustiť však môžete len to, čo si odpustenie skutočne zaslúži. Človek by mal pochopiť, že sa musí zodpovedať za každé dokonané zlo... A nie pred nejakým tajomným Bohom, ale pred sebou samým, ktorý sa núti kruto trpieť. Magdaléna Vladykovi neodpustila, hoci si ho hlboko vážila a úprimne ho milovala. Tak ako nám všetkým nedokázala odpustiť strašnú smrť Radomira. Koniec koncov, bola to ONA, ktorá pochopila najlepšie zo všetkých - mohli sme mu pomôcť, mohli sme ho zachrániť pred krutou smrťou ... Ale nechceli sme. Keďže považovala vinu Bieleho mága za príliš krutú, nechala ho žiť s touto vinou a ani na chvíľu na ňu nezabudla... Nechcela mu poskytnúť ľahké odpustenie. Už sme ju nikdy nevideli. Ako nikdy nevideli svoje deti. Prostredníctvom jedného z rytierov svojho Chrámu - nášho čarodejníka - odovzdala Magdaléna Vladykovi odpoveď na jeho prosbu vrátiť sa k nám: „Slnko nevyjde dvakrát v jeden deň... Radosť tvojho sveta (Radomír) sa už nikdy nevráti k tebe, tak ako sa k tebe nevrátim a ja ... našiel som svoju VIERU a svoju PRAVDU, oni sú ŽIVÉ, tvoj je MŔTVY ... Oplakávaj svojich synov - milovali ťa. Nikdy ti neodpustím ich smrť, kým budem nažive. A nech vaša vina zostane s vami. Možno ti jedného dňa prinesie Svetlo a Odpustenie... Ale nie odo mňa." Hlava mága Jána nebola prinesená do Meteory z rovnakého dôvodu - nikto z Chrámových rytierov sa k nám nechcel vrátiť... Stratili sme ich, ako sme stratili mnoho ďalších, ktorí nechceli pochopiť a prijať naše obete ... Kto je taký istý ako ty - odišiel, odsudzujúc nás.Točila sa mi hlava! .. Ako smäd, uspokojujúci svoj večný hlad po poznaní, dychtivo som nasával prúd úžasných informácií štedro podávaných Severom... A chcel som ešte oveľa viac! .. Chcel som vedieť všetko až do konca . Bol to závan čerstvej vody v púšti spálenej bolesťou a problémami! A nemohol som sa nabažiť drinku... - Mám tisíce otázok! Ale nezostáva čas... Čo mám robiť, Sever? .. - Pýtajte sa, Isidora! .. Pýtajte sa, pokúsim sa vám odpovedať ... - Povedz mi, Sever, prečo sa mi zdá, že v tomto príbehu sa akoby spájali dva životné príbehy, prepletené podobnými udalosťami a sú prezentované ako život jedného človeka? Alebo sa mýlim? - Máš úplnú pravdu, Isidora. Ako som vám už povedal, „mocní tohto sveta“, ktorí vytvorili falošné dejiny ľudstva, „obsadili“ skutočný život Krista niekoho iného života židovského proroka Jozuu, ktorý žil pred jeden a pol tisíc rokmi (od r. príbeh severu). A nielen seba, ale aj jeho rodiny, príbuzných a priateľov, priateľov a nasledovníkov. Veď to bola manželka proroka Jozuu, Židovka Mária, ktorá mala sestru Martu a brata Lazara, sestru jeho matky Máriu Jakubovú a ďalších, ktorí nikdy neboli blízko Radomíra a Magdalény. Tak ako vedľa nich neboli žiadni iní „apoštoli“ – Pavol, Matúš, Peter, Lukáš a ostatní... Bola to rodina proroka Jozuu, ktorá sa pred jeden a pol tisíc rokmi presťahovala do Provensálska (ktoré sa v tom čase nazývalo Galia (Zaalpská Galia), do gréckeho mesta Massalia (dnes Marseille), keďže Massalia v tom čase bola „brána“ medzi Európou a Áziou a bola to pre všetkých „prenasledovaných“ najjednoduchšia cesta, ako sa vyhnúť prenasledovaniu a problémom.
|
V predchádzajúcom čísle časopisu sme diskutovali o rodine nástrojov analýzy výkonu Intel VTune Performance Analyzer, ktoré sú zaslúžene obľúbené u vývojárov aplikácií a umožňujú im v kóde aplikácie odhaliť pokyny, ktoré spotrebúvajú príliš veľa procesorových zdrojov, čo vývojárom umožňuje identifikovať a odstrániť potenciálne úzke miesta spojené s podobnými časťami kódu, čím sa urýchli proces vývoja aplikácií. Všimnite si však, že výkon aplikácií do značnej miery závisí od toho, ako efektívne sú kompilátory používané pri ich vývoji a aké funkcie hardvéru používajú pri generovaní strojového kódu.
Najnovšie kompilátory Intel C ++ a Intel Fortran pre Windows a Linux poskytujú zvýšenie výkonu aplikácií pre systémy založené na Intel Itanium 2, Intel Xeon a Intel Pentium 4 % až 40 % v porovnaní s existujúcimi kompilátormi tretích strán využitím funkcií, ako je technológia Hyper-Threading.
Rozdiely spojené s optimalizáciou kódu touto rodinou kompilátorov zahŕňajú použitie zásobníka na vykonávanie operácií s pohyblivou rádovou čiarkou, interprocedurálnu optimalizáciu (IPO), optimalizáciu v súlade s profilom aplikácie (Profile Guided Optimization, PGO), predbežné načítanie dát do cache (Data prefetching), ktorá zabraňuje oneskoreniu pamäte, podpora špecifických funkcií procesorov Intel (napríklad Intel Streaming SIMD Extensions 2, špecifické pre Intel Pentium 4), automatická paralelizácia spúšťania kódu, vytváranie aplikácií, beh na niekoľkých rôznych typy procesorov pri optimalizácii pre jeden z nich, predikcia vetvenia, rozšírená podpora práce s vláknami.
Všimnite si, že kompilátory Intel sa používajú v takých známych spoločnostiach ako Alias / Wavefront, Oracle, Fujitsu Siemens, ABAQUS, Silicon Graphics, IBM. Nezávislé testovanie viacerých spoločností ukázalo, že kompilátory Intel fungujú výrazne lepšie ako kompilátory iných výrobcov (pozri napríklad http://intel.com/software/products/compilers/techtopics/compiler_gnu_perf.pdf).
Nižšie sa pozrieme na niektoré funkcie najnovšie verzie Kompilátory Intel pre desktopové a serverové operačné systémy.
Kompilátory pre platformu Microsoft Windows
Intel C++ Compiler 7.1 pre Windows
Intel C++ Compiler 7.1 je kompilátor vydaný začiatkom tohto roka, ktorý umožňuje vysoko optimalizovaný kód pre procesory Intel Itanium, Intel Itanium 2, Intel Pentium 4 a Intel Xeon, ako aj procesor Intel Pentium M, ktoré využíva technológiu Intel Centrino a je určené na použitie v mobilných zariadeniach.
Uvedený kompilátor je plne kompatibilný s vývojovými nástrojmi Microsoft Visual C++ 6.0 a Microsoft Visual Studio .NET: Môže byť vložené do vhodných vývojových prostredí.
Tento kompilátor podporuje štandardy ANSI a ISO C/C++.
Intel Fortran Compiler 7.1 pre Windows
Intel Fortran Compiler 7.1 pre Windows, tiež vydaný začiatkom tohto roka, vám umožňuje vytvárať optimalizovaný kód pre Intel Itanium, Intel Itanium 2, Intel Pentium 4 a Intel Xeon, Intel Pentium M.
Tento kompilátor je plne kompatibilný s vývojovými nástrojmi Microsoft Visual C++ 6.0 a Microsoft Visual Studio .NET, to znamená, že môže byť zabudovaný do príslušného vývojového prostredia. Okrem toho vám tento kompilátor umožňuje vyvíjať 64-bitové aplikácie pre operačné systémy bežiace na procesoroch Itanium / Itanium 2 pomocou Microsoft Visual Studio na 32-bitovom procesore Pentium pomocou 64-bitového kompilátora Intel Fortran. Pri ladení kódu vám tento kompilátor umožňuje použiť debugger pre platformu Microsoft .NET.
Ak máte nainštalovaný Compaq, namiesto pôvodného Intel Fortran Compiler 7.1 môžete použiť Visual Fortran 6.6, pretože kompilátory sú kompatibilné so zdrojovými kódmi.
Intel Fortran Compiler 7.1 pre Windows je plne kompatibilný s ISO Fortran 95 a podporuje vytváranie a ladenie aplikácií obsahujúcich C a Fortran kód.
Linuxové kompilátory
Intel C++ Compiler 7.1 pre Linux
Ďalší kompilátor vydaný začiatkom roka, Intel C ++ Compiler 7.1 pre Linux, umožňuje vysoký stupeň optimalizácie kódu pre procesory Intel Itanium, Intel Itanium 2, Intel Pentium 4, Intel Pentium M. Tento kompilátor je plne kompatibilný s Kompilátor GNU C na úrovni zdrojového kódu a objektových modulov, ktorý vám bez dodatočných nákladov umožňuje migrovať naň aplikácie vytvorené pomocou GNU C. Intel C ++ Compiler podporuje C ++ ABI (doplnok k linuxovému jadru, ktorý umožňuje skompilovaný kód na spustenie na Linuxe pre iné platformy, ako sú skoré operačné systémy SCO, skoré verzie Sun Solaris a iné), čo znamená úplnú binárnu kompatibilitu s kompilátorom gcc 3.2. Nakoniec, s kompilátorom Intel C ++ Compiler 7.1 pre Linux môžete dokonca prekompilovať jadro Linuxu s niekoľkými malými zmenami v jeho zdrojovom kóde.
Intel Fortran Compiler 7.1 pre Linux
Intel Fortran Compiler 7.1 pre Linux vám umožňuje vytvárať optimalizovaný kód pre Intel Itanium, Intel Itanium 2, Intel Pentium 4, Intel Pentium M. Tento kompilátor je plne kompatibilný s kompilátorom Compaq Visual Fortran 6.6 na úrovni zdrojového kódu a umožňuje vám prekompilovať pomocou neho aplikácie vytvorené pomocou Compaq Visual Fortran, čím sa zlepší ich výkon.
Okrem toho je špecifikovaný kompilátor kompatibilný s takými nástrojmi, ktoré používajú vývojári, ako je editor emacs, debugger gdb a nástroj make na vytváranie aplikácií.
Rovnako ako verzia tohto kompilátora pre Windows, aj Intel Fortran Compiler 7.1 pre Linux plne vyhovuje norme ISO Fortran 95 a podporuje vytváranie a ladenie aplikácií obsahujúcich kód v dvoch jazykoch – C a Fortran.
Je potrebné zdôrazniť, že k vytvoreniu uvedených kompilátorov Intel významne prispeli odborníci z ruského vývojového centra Intel softvér V Nižnom Novgorode. Ďalšie informácie o kompilátoroch Intel nájdete na webovej lokalite spoločnosti Intel na adrese www.intel.com/software/products/.
Druhá časť tohto článku sa zameria na kompilátory Intel, ktoré vytvárajú aplikácie pre mobilné zariadenia.
Úvod Koncom roka 2003 Intel predstavil verziu 8.0 svojej kolekcie kompilátorov. Nové kompilátory sú navrhnuté tak, aby zlepšili výkon aplikácií bežiacich na serveroch, desktopoch a mobilné systémy(notebooky, mobilné telefóny a PDA) založené na procesoroch Intel. Je príjemné poznamenať, že tento produkt bol vytvorený za aktívnej účasti zamestnancov Centra vývoja softvéru Intel Nižný Novgorod a špecialistov Intel zo Sarova.
Nová séria obsahuje kompilátory Intel C ++ a Fortran pre Windows a Linux a kompilátory Intel C ++ pre Windows CE .NET. Kompilátory sa zameriavajú na systémy založené na nasledujúcich procesoroch Intel: Intel Itanium 2, Intel Xeon, Intel Pentium 4, Intel Personal Internet Client Architecture pre mobilné telefóny a vreckové počítače a mobilný procesor Intel Pentium M (súčasť mobilnej technológie Intel Centrino).
Intel Visual Fortran Compiler pre Windows poskytuje kompilačné technológie novej generácie pre vysokovýkonné počítačové riešenia. Spája funkčnosť jazyka Compaq Visual Fortran (CVF) so zvýšením výkonu, ktoré umožňujú technológie optimalizácie kompilácie a generovania kódu od spoločnosti Intel, a uľahčuje prenos zdrojového kódu CVF do prostredia Intel Visual Fortran. Tento kompilátor po prvýkrát predstavuje funkcie CVF ako pre 32-bit systémy Intel a pre systémy založené na rade procesorov Intel Itanium bežiacich v prostredí Windows. Okrem toho vám tento kompilátor umožňuje implementovať funkcie jazyka CVF v systémoch Linux založených na 32-bitových procesoroch Intel a rade procesorov Intel Itanium. V roku 2004 sa plánuje vydanie rozšírenej verzie tohto kompilátora – Intel Visual Fortran Compiler Professional Edition pre Windows, ktorá bude obsahovať knižnicu IMSL Fortran 5.0 vyvinutú spoločnosťou Visual Numerics, Inc.
"Nové kompilátory tiež podporujú nadchádzajúce procesory Intel s kódovým označením Prescott, ktoré obsahujú nové inštrukcie na zlepšenie grafického a video výkonu a ďalšie vylepšenia výkonu. Podporujú tiež Nová technológia Mobile MMX (tm), ktorý podobne zlepšuje výkon grafických, zvukových a video aplikácií pre mobilné telefóny a vreckové počítače, - povedal Alexey Odinokov, spoluriaditeľ vývojového centra softvéru spoločnosti Intel v Nižnom Novgorode. „Tieto kompilátory poskytujú vývojárom aplikácií jedinú sadu nástrojov na vytváranie nových bezdrôtových aplikácií založených na architektúre Intel. Nové kompilátory Intel tiež podporujú technológiu Intel Hyper-Threading a priemyselnú špecifikáciu OpenMP 2.0, ktorá špecifikuje použitie direktív na vysokej úrovni na riadenie toku pokynov v aplikáciách.
Nové nástroje zahrnuté v kompilátoroch zahŕňajú Intel Code Coverage a Intel Test Prioritization. Tieto nástroje spolu umožňujú urýchliť vývoj aplikácií a zlepšiť kvalitu aplikácií zlepšením procesu testovania softvéru.
Pokrytie kódu poskytuje úplný prehľad o použití aplikačnej logiky a umiestnení použitých častí v zdrojovom kóde aplikácie počas testovania aplikácie. V prípade, že v aplikácii dôjde k zmenám, alebo ak tento test neumožňuje skontrolovať časť aplikácie, ktorá vývojára zaujíma, nástroj Prioritizácia testov vám umožní skontrolovať fungovanie vybranej časti programového kódu.
Nové kompilátory Intel sa dodávajú v rôznych úrovniach výbavy v rozmedzí od 399 do 1 499 dolárov. Dnes ich možno zakúpiť od spoločnosti Intel Corporation alebo od predajcov po celom svete, ktorých zoznam sa nachádza na webovej stránke http://www.intel.com/software/products/reseller.htm#Russia.
Podpora procesorov Prescott
Podpora pre procesor Intel Pentium 4 (Prescott) v ôsmej verzii kompilátora je nasledovná:1. Podpora príkazov SSE3 (alebo PNI, Prescott New Instructions). Tu je potrebné zdôrazniť tri spôsoby:
a. Inline montáž. Kompilátor napríklad rozpozná nasledujúce použitie príkazu SSE3 _asm (addsubpd xmm0, xmm1). Používatelia, ktorí majú záujem o optimalizáciu na nízkej úrovni, tak môžu získať priamy prístup k montážnym pokynom.
b. V kompilátore C / C ++ sú nové inštrukcie k dispozícii aj z vyššej úrovne ako pri použití vložiek assembleru. Konkrétne prostredníctvom vstavaných funkcií (vnútorné funkcie):
Vstavané funkcie
Zabudovaná funkcia | Generovaný príkaz |
---|---|
_mm_addsub_ps | Addsubps |
_mm_hadd_ps | Haddps |
_mm_hsub_ps | Msubps |
_mm_moveldup_ps | Movsldup |
_mm_movehdup_ps | Movshdup |
_mm_addsub_pd | Addsubpd |
_mm_hadd_pd | Haddpd |
_mm_hsub_pd | Hsubpd |
_mm_loaddup_pd | movddup xmm, m64 |
_mm_movedup_pd | movddup reg, reg |
_mm_lddqu_si128 | Lddqu |
V tabuľke sú uvedené vstavané funkcie a príslušné montážne pokyny zo sady SSE3. Rovnaká podpora existuje pre príkazy zo sád MMX \ SSE \ SSE2. To umožňuje programátorovi vykonávať nízkoúrovňové optimalizácie kódu bez toho, aby sa uchýlil k programovaniu v assembleri: kompilátor sa postará o mapovanie inline funkcií na príslušné inštrukcie procesora a optimálne využitie registrov. Programátor sa môže sústrediť na vytvorenie algoritmu, ktorý efektívne využíva nový inštrukčné sady.
v. Automatické generovanie nových príkazov kompilátorom. Predchádzajúce dve metódy predpokladajú použitie nových príkazov programátorom. Kompilátor je však tiež schopný (pri použití vhodných možností - pozri časť 3 nižšie) automaticky generovať nové príkazy zo sady SSE3 pre kód C / C ++ a Fortran. Napríklad optimalizovaný príkaz unaligned load (lddqu), ktorého použitie môže dosiahnuť zvýšenie výkonu až o 40 % (napríklad pri úlohách kódovania videa a zvuku). Ďalšie príkazy zo sady SSE3 vám umožňujú dosiahnuť výrazné zrýchlenie pri problémoch s 3D grafikou alebo problémoch s výpočtami pomocou komplexných čísel. Napríklad graf v časti 3.1 nižšie ukazuje, že pre aplikáciu 168.wupwise zo sady SPEC CPU2000 FP bolo zrýchlenie získané automatickým generovaním príkazov SSE3 ~ 25 %. Výkon tejto aplikácie veľmi závisí od rýchlosti komplexnej aritmetiky.
2. Využitie mikroarchitektonických výhod procesora Prescott. Pri generovaní kódu kompilátor berie do úvahy mikroarchitektonické zmeny v novom procesore. Napríklad vykonávanie niektorých operácií (ako sú celočíselné posuny, násobenie celých čísel alebo prevod čísel medzi rôzne formáty s pohyblivou rádovou čiarkou v SSE2) sa na novom procesore v porovnaní s predchádzajúcimi verziami zrýchlil (povedzme, celočíselný posun teraz trvá jeden cyklus procesora oproti štyrom pri predchádzajúcej verzii procesora Intel Pentium 4). Intenzívnejšie používanie takýchto príkazov vám umožňuje dosiahnuť výrazné zrýchlenie aplikácie.
Ďalším príkladom mikroarchitektonických zmien je vylepšený mechanizmus preposielania obchodu (rýchle načítanie údajov predtým uložených v pamäti); skutočná úspora sa nevyskytuje ani vo vyrovnávacej pamäti, ale v nejakej medzipamäti, ktorá potom umožňuje veľmi rýchly prístup k dátam. Tento architektonický prvok umožňuje napríklad vykonávať agresívnejšiu automatickú vektorizáciu programového kódu.
Kompilátor berie do úvahy aj zväčšenú veľkosť vyrovnávacej pamäte prvej a druhej úrovne.
3. Vylepšená podpora pre technológiu Hyper-Threading. Tento bod môže súvisieť s predchádzajúcim - mikroarchitektonické zmeny a ich použitie v kompilátore. Napríklad runtime knižnica, ktorá implementuje podporu pre priemyselnú špecifikáciu OpenMP, bola optimalizovaná na prevádzku na novom procesore.
Výkon
Kompilátory predstavujú jednoduchý a efektívny spôsob, ako využiť architektúru procesorov Intel. Nižšie sú podmienečne (veľmi) zvýraznené dva spôsoby použitia kompilátorov: a) rekompilácia programov s možnou zmenou nastavení kompilátora, b) rekompilácia so zmenou nastavení kompilátora aj zdrojového textu, ako aj pomocou diagnostika kompilátora na základe vykonaných optimalizácií a prípadného využitia iných softvérové nástroje(ako profilovači).1.1 Optimalizácia programov prekompilovaním a zmenou nastavení kompilátora
Prvým krokom pri prechode na nový optimalizačný kompilátor je často jeho použitie s jeho predvolenými nastaveniami. Ďalším logickým krokom je použitie možností pre agresívnejšiu optimalizáciu. Obrázky 1, 2, 3 a 4 znázorňujú vplyv prechodu na kompilátor Intel 8.0 v porovnaní s inými špičkovými produktmi (-O2 je predvolené nastavenie kompilátora, základňa je nastavenie najlepšieho výkonu). Porovnanie sa vykonáva na 32- a 64-bitových architektúrach Intel. Ako testovacia sada sa používajú aplikácie od SPEC CPU2000.
Obrázok 1
Obrázok 2
Obrázok 3
Obrázok 4
Niektoré možnosti sú uvedené nižšie (ďalej sú uvedené možnosti pre rodinu OS Windows; pre rodinu OS Linux existujú možnosti s rovnakým účinkom, ale názov sa môže líšiť; napríklad -Od alebo QxK pre Windows majú rovnaký efekt ako -O0 alebo -xK pre Linux, viac informácií nájdete v príručke kompilátora) podporovanej kompilátorom Intel.
Ovládanie úrovní optimalizácie: Možnosti -Od (žiadne optimalizácie; používa sa na ladenie programov), -O1 (maximálna rýchlosť pri minimalizácii veľkosti kódu), -O2 (optimalizácia pre rýchlosť vykonávania kódu; používa sa predvolene), -O3 (umožňuje najagresívnejšie optimalizácie na vykonávanie kódu rýchlosť ; v niektorých prípadoch môže viesť k opačnému efektu, tj k spomaleniu; treba poznamenať, že na IA-64 vedie použitie -O3 vo väčšine prípadov k zrýchleniu, zatiaľ čo pozitívny vplyv na IA-32 je menej výrazný) . Príklady optimalizácií, ktoré umožňuje -O3, sú: výmena slučiek, fúzia slučiek, distribúcia slučiek (optimalizácia, fúzia reverznej slučky), softvérové predbežné načítanie údajov. Dôvodom možného spomalenia pri použití -O3 môže byť to, že kompilátor použil heuristický prístup k voľbe agresívnych optimalizácií pre konkrétny prípad bez toho, aby mal dostatok informácií o programe (napríklad vygeneroval inštrukcie pre načítanie údajov používaných v slučke za predpokladu, že sa cyklus vykoná veľakrát, hoci v skutočnosti má len niekoľko iterácií). V tejto situácii môže pomôcť optimalizácia interprocedurálneho profilovania, ako aj rôzne „tipy“ od programátora (pozri časť 3.2).
Interprocedurálna optimalizácia: -Qip (v rámci jedného súboru) a -Qipo (v rámci niekoľkých alebo všetkých súborov projektu). Zahŕňa optimalizácie, ako je inline substitúcia často používaného kódu (zníženie nákladov na volanie funkcie / procedúry). Poskytuje informácie pre ďalšie fázy optimalizácie - napríklad informácie o hornej hranici slučky (povedzme, ak ide o konštantu času kompilácie definovanú v jednom súbore, ale používa sa v mnohých) alebo informácie o zarovnaní údajov v pamäti (veľa MMX \ SSE \ SSE2 \ SSE3 príkazy pracujú rýchlejšie, ak sú operandy zarovnané s pamäťou 8 alebo 16 bajtov). Analýza procedúr prideľovania pamäte (implementovaná / volaná v jednom z projektových súborov) sa odovzdá tým funkciám / procedúram, kde sa táto pamäť používa (to môže pomôcť kompilátoru opustiť konzervatívny predpoklad, že údaje nie sú správne zarovnané v pamäti; a predpoklad by mal byť pri absencii konzervatívny Ďalšie informácie). Ďalším príkladom je disambiguácia, analýza aliasingu údajov: pri absencii dodatočných informácií a nemožnosti dokázať absenciu priesečníkov zostavovateľ vychádza z konzervatívneho predpokladu, že existujú priesečníky. Takéto rozhodnutie môže negatívne ovplyvniť kvalitu takých optimalizácií, ako je napríklad automatická vektorizácia na IA-32 alebo softvérový pipelining (SWP) na IA-64. Interprocedurálna optimalizácia môže pomôcť pri analýze prítomnosti križovatiek z pamäte.
Optimalizácia profilovania: Zahŕňa tri fázy. 1) generovanie prístrojového kódu pomocou voľby -Qprof_gen. 2) výsledný kód je spustený na reprezentatívnych údajoch, počas prevádzky sa zbierajú informácie o rozdielne vlastnosti vykonávanie kódu (napríklad pravdepodobnosti prechodu alebo typická hodnota pre počet opakovaní cyklu). 3) Opätovná kompilácia s voľbou -Qprof_use, ktorá zaisťuje, že kompilátor použije informácie zhromaždené v predchádzajúcom kroku. Kompilátor tak dokáže využiť nielen statické odhady dôležitých charakteristík programu, ale aj údaje získané pri samotnom behu programu. To môže pomôcť s následným výberom určitých optimalizácií (napríklad efektívnejšie usporiadanie v pamäti rôznych vetiev programu na základe informácií o tom, ktoré vetvy boli vykonávané na akej frekvencii; alebo aplikácia optimalizácie na slučku na základe informácií o typickom počte iterácií v ňom) ... Optimalizácia profilovania je užitočná najmä v prípadoch, keď môžete nájsť malý, ale reprezentatívny súbor údajov (pre krok č. 2), ktorý dobre ilustruje najtypickejšie budúce použitie programu. V niektorých tematických oblastiach je výber takéhoto reprezentatívneho súboru celkom možný. Napríklad optimalizáciu profilovania používajú vývojári DBMS.
Vyššie uvedené optimalizácie sú všeobecného typu, t.j. vygenerovaný kód bude fungovať na všetkých rôznych procesoroch rodiny (povedzme v prípade 32-bitovej architektúry na všetkých nasledujúcich procesoroch: Intel Pentium-III, Pentium 4 vrátane jadra Prescott, Intel Pentium M). Nechýbajú ani optimalizácie špecifické pre procesor.
Optimalizácie špecifické pre procesor: -QxK (Pentium-III; použitie príkazov SSE, funkcie mikroarchitektúry), -QxW a -QxN (Pentium 4; použitie príkazov SSE a SSE2, funkcie mikroarchitektúry), -QxB (Pentium M; použitie príkazov SSE a SSE2, funkcie mikroarchitektúry), QxP (Prescott; použitie príkazov SSE, SSE2 a SSE3, funkcie mikroarchitektúry). V tomto prípade kód vygenerovaný pomocou týchto možností nemusí fungovať na iných členoch procesorovej linky (napríklad kód -QxW môže viesť k vykonaniu neplatného príkazu, ak sa vykoná na systéme založenom na procesore Intel Pentium-III). Alebo nepracujte s maximálnou účinnosťou (napríklad kód -QxB na procesore Pentium 4 kvôli rozdielom v mikroarchitektúre). S týmito možnosťami je možné použiť aj runtime knižnice optimalizované pre konkrétny procesor pomocou jeho inštrukčnej sady. Na kontrolu, či sa kód skutočne vykoná na cieľovom procesore, je implementovaný mechanizmus odoslania (cpu-dispatch): kontrola procesora počas vykonávania programu. V rôznych situáciách môže byť tento mechanizmus zapojený alebo nie. Dispečing sa používa vždy, ak sa používa variácia možností -Qax (KWNP). V tomto prípade sa vygenerujú dve verzie kódu: optimalizované pre konkrétny procesor a „generické“, výber nastáva počas vykonávania programu. Zväčšením veľkosti kódu je teda možné dosiahnuť vykonávanie programu na všetkých procesoroch v rade a optimálne vykonávanie na cieľovom procesore. Ďalšou možnosťou je použiť optimalizáciu kódu pre predchádzajúceho zástupcu linky a použiť tento kód na tomto a nasledujúcich procesoroch. Napríklad kód -QxN možno spustiť na Pentiu 4 s jadrami Northwood aj Prescott. Nedochádza k zvýšeniu veľkosti kódu. S týmto prístupom môžete získať dobrý, ale stále nie optimálny výkon na systéme s procesorom Prescott (keďže SSE3 sa nepoužíva a rozdiely v mikroarchitektúre sa neberú do úvahy) s optimálnym výkonom na Northwood. Podobné možnosti existujú pre procesory architektúry IA-64. Na tento moment sú dve z nich: -G1 (Itanium) a -G2 (Itanium 2; predvolená možnosť).
Nižšie uvedený graf (obrázok 5) ukazuje zrýchlenie (1 sa berie ako referenčný bod – žiadne zrýchlenie) pri použití niektorých z vyššie uvedených optimalizácií (konkrétne -O3 -Qipo -Qprof_use -Qx (N, P)) na porovnávanom procesore Prescott s predvolenými nastaveniami (-O2). Použitie -QxP pomáha v niektorých prípadoch byť rýchlejšie ako -QxN. Najväčšie zrýchlenie dosahuje už v predchádzajúcej časti spomínaná aplikácia 168.wupwise (kvôli intenzívnej optimalizácii komplexnej aritmetiky pomocou inštrukcií SSE3).
Obrázok 5
Obrázok 6 nižšie ukazuje pomer (v časoch) rýchlosti kódu s optimálnym nastavením v porovnaní s úplne neoptimalizovaným kódom (-Od) na procesoroch Pentium 4 a Itanium 2. Je vidieť, že Itanium 2 je oveľa závislejšie na kvalitu optimalizácie. To platí najmä pre výpočty s pohyblivou rádovou čiarkou (FP), kde je pomer približne 36-násobok. Plávajúca desatinná čiarka je silnou stránkou architektúry IA-64, no treba dbať na to, aby ste použili najefektívnejšie nastavenia kompilátora. Výsledný nárast produktivity platí za námahu pri ich hľadaní.
Obrázok 6. Zrýchlenie pri použití najlepších možností optimalizácie SPEC CPU200
Kompilátory Intel podporujú priemyselnú špecifikáciu OpenMP na vytváranie viacvláknových aplikácií. Podporované sú explicitné (voľba -Qopenmp) a automatické (-Qparallel) režimy paralelizácie. V prípade explicitného režimu je za správne a efektívne používanie štandardných zariadení OpenMP zodpovedný programátor. V prípade automatickej paralelizácie má kompilátor ďalšiu záťaž spojenú s analýzou programového kódu. Z tohto dôvodu v súčasnosti automatická paralelizácia efektívne funguje iba na pomerne jednoduchých kódoch.
Graf na obrázku 7 ukazuje zrýchlenie pri použití explicitnej paralelizácie na inžinierskej (predprodukčnej) vzorke systému založeného na procesore Intel Pentium 4 (Prescott) s podporou technológie Hyper-Threading: 2,8 GHz, 2 GB RAM, 8K L1 -Cache, 512K L2-Cache... SPEC OMPM2001 sa používa ako súbor testov. Táto zostava je zameraná na malé a stredné SMP systémy, spotreba pamäte je do dvoch gigabajtov. Aplikácie sú kompilované pomocou Intel 8.0 C / C ++ a Fortran s dvoma sadami možností: -Qopenmp -Qipo -O3 -QxN a -Qopenmp -Qipo -O3 -QxP, pričom každá z nich bola spustená pomocou technológie Hyper-Threading zapnutie a vypnutie. Hodnoty zrýchlenia v grafe sú normalizované na výkon jednovláknovej verzie s vypnutou technológiou Hyper-Threading.
Obrázok 7: Aplikácie zo sady SPEC OMPM2001 na procesore Prescott
Je možné vidieť, že v 9 z 11 prípadov použitie explicitnej paralelizácie pomocou OpenMP zvyšuje výkon, keď je povolená technológia Hyper-Threading. Jedna z aplikácií (312.swim) zaznamenáva spomalenie. Toto je známy fakt: túto aplikáciu charakterizovaný vysokým stupňom závislosti na šírku pásma Pamäť. Rovnako ako v prípade SPEC CPU2000, aj aplikácia wupwise výrazne ťaží z aplikácie optimalizácií pre Prescott (-QxP).
1.2 Optimalizácia programov so zmenami zdrojového kódu a pomocou diagnostiky kompilátora
V predchádzajúcich častiach sme skúmali vplyv kompilátora (a jeho nastavení) na rýchlosť vykonávania programového kódu. Kompilátory Intel zároveň poskytujú viac príležitostí na optimalizáciu kódu ako len zmenu nastavení. Kompilátory predovšetkým umožňujú programátorovi vytvárať „nápovedy“ v programovom kóde, ktoré umožňujú generovanie efektívnejšieho kódu z hľadiska výkonu. Nižšie je uvedených niekoľko príkladov pre jazyk C / C ++ (pre jazyk Fortran existujú podobné nástroje, ktoré sa líšia iba syntaxou).
#pragma ivdep (kde ivdep znamená ignorovať vektorové závislosti) sa aplikuje pred programovými slučkami, aby oznámil kompilátoru, že vo vnútri nie sú žiadne dátové závislosti. Táto nápoveda funguje v prípade, keď kompilátor (na základe analýzy) konzervatívne predpokladá, že takéto závislosti môžu existovať (ak kompilátor dokáže, že závislosť existuje ako výsledok analýzy, potom „nápoveda“ nemá žiadny účinok), zatiaľ čo autor kódexu vie, že takéto závislosti nemôžu vzniknúť. Pomocou tejto rady môže kompilátor vygenerovať efektívnejší kód: automatická vektorizácia pre IA-32 (pomocou vektorových príkazov zo sád MMX \ SSE \ SSE2 \ SSE3 pre programové slučky C / C ++ a Fortran; môžete sa dozvedieť viac o tejto technike , napríklad v ďalšom článok v Intel Technology Journal), Software Pipelining (SWP) pre IA-64.
#pragma vector sa vždy používa na to, aby kompilátor zmenil rozhodnutie o neefektívnosti vektorizácie slučky (automatickej pre IA-32 aj SWP pre IA-64), uskutočnenej na základe analýzy kvantitatívnych a kvalitatívnych charakteristík práce pri každej iterácia.
#pragma novector má vždy opačný efekt ako #pragma vector.
#pragma vector aligned sa používa na informovanie kompilátora, že údaje použité v slučke sú zarovnané na 16-bajtovú hranicu. To vám umožňuje generovať efektívnejší a/alebo kompaktnejší (kvôli nedostatku kontrol počas behu) kód.
#pragma vector unaligned má opačný efekt ako #pragma aligned. V tomto prípade je ťažké hovoriť o zvýšení výkonu, ale môžete počítať s kompaktnejším kódom.
#pragma distribute bod sa používa vo vnútri programovej slučky, takže kompilátor môže rozdeliť distribúciu slučky v tomto bode na niekoľko menších. Takúto „nápovedu“ možno použiť napríklad vtedy, keď kompilátor nedokáže automaticky vektorizovať pôvodnú slučku (napríklad kvôli závislosti na údajoch, ktorú nemožno ignorovať, aj keď je prítomný #pragma ivdep), pričom každá (alebo jej časť) novo vytvorených slučiek možno efektívne vektorizovať.
#pragma loop count (N), ktorý sa používa na informovanie kompilátora, že najpravdepodobnejšia hodnota pre počet iterácií cyklu bude N. SWP alebo automatická vektorizácia, či použiť príkazy na predbežné načítanie softvéru, ...)
„Nápoveda“ _assume_aligned (p, základňa) sa používa na to, aby kompilátoru oznámila, že oblasť pamäte spojená s ukazovateľom p je zarovnaná so základňou = 2 ^ n bajtov.
Toto je ďaleko od toho úplný zoznam rôzne „nápovedy“ kompilátoru, ktoré môžu výrazne ovplyvniť efektivitu generovaného kódu. Možno vás zaujíma, ako zistiť, či kompilátor potrebuje nápovedu.
Najprv môžete použiť diagnostiku kompilátora vo forme správ, ktoré poskytuje programátorovi. Napríklad pomocou voľby -Qvec_reportN (kde N sa pohybuje od 0 do 3 a označuje úroveň podrobností), môžete získať správu o automatickej vektorizácii. Programátor bude mať prístup k informáciám o tom, ktoré cykly boli vektorizované a ktoré nie. V negatívnom prípade zostavovateľ v správe uvádza dôvody, prečo vektorizácia zlyhala. Predpokladajme, že príčinou je konzervatívne predpokladaný vzťah údajov. V tomto prípade, ak si je programátor istý, že závislosti nemôžu vzniknúť, môže sa použiť #pragma ivdep. Kompilátor predstavuje podobné (v porovnaní s Qvec_reportN pre IA-32) možnosti na IA-64 na kontrolu prítomnosti a účinnosti SWP. Vo všeobecnosti kompilátory Intel poskytujú dostatok príležitostí na diagnostiku optimalizácií.
Po druhé, ďalšie softvérové produkty (napríklad profiler Intel VTune) možno použiť na nájdenie prekážok výkonu vo vašom kóde. Výsledky analýzy môžu pomôcť programátorovi vykonať potrebné zmeny.
Na analýzu môžete použiť aj výpis kódu zostavy vygenerovaný kompilátorom.
Obrázok 8
Obrázok 8 vyššie ukazuje krok za krokom proces optimalizácie aplikácie pomocou kompilátora Intel Fortran (a iných softvérových produktov) pre architektúru IA-64. Ako príklad sa uvažuje s neadiabatickou regionálnou predpovednou schémou na 48 hodín Roshydromettsentru (dočítate sa o nej napr. v tomto článku. V článku sa hovorí o dobe výpočtu cca 25 minút, no výrazné zmeny nastali od r. Výkon kódu sa berie ako východiskový bod v systéme Cray-YMP Nezmenený kód s predvolenými možnosťami kompilátora (-O2) ukázal zvýšenie výkonu o 20 % na štvorprocesorovom systéme založenom na procesore Intel Itanium 2 900 MHz Agresívnejšia optimalizácia (-O3) viedla k ~ 2,5-násobnému zrýchleniu bez zmien v kóde, hlavne kvôli SWP a predbežnému načítaniu údajov Analýza s diagnostikou kompilátora a profiler Intel VTune odhalili niektoré úzke miesta, napríklad kompilátor nezaznamenal niekoľko výkonov- kritické slučky, hlásenia v správe naznačujúce závislosť údajov. Malé zmeny v kóde (direktíva ivdep) pomohli dosiahnuť efektívne aktívne potrubie. Pomocou profilovača VTune sa zistilo (a správa kompilátora to potvrdila), že kompilátor nezmenil poradie vnorených slučiek (loop interchange), aby zefektívnil využitie vyrovnávacej pamäte. Opäť to bolo spôsobené konzervatívnymi predpokladmi o závislosti od údajov. Boli vykonané zmeny v zdrojovom kóde programu. V dôsledku toho bolo možné dosiahnuť 4-násobné zrýchlenie v porovnaní s pôvodnou verziou. Použitím explicitnej paralelizácie pomocou direktív OpenMP a následným prechodom na systém s vyššou frekvenciou procesorov sa čas výpočtu skrátil na menej ako 8 minút, čo viedlo k viac ako 16-násobnému zrýchleniu v porovnaní s pôvodnou verziou.
Intel Visual Fortran
Intel Visual Fortran 8.0 využíva front-end (časť kompilátora zodpovedná za konverziu programu z textu v programovacom jazyku na internú reprezentáciu kompilátora, ktorá je do značnej miery nezávislá od programovacieho jazyka alebo cieľového stroja) technológie kompilátora CVF a Komponenty kompilátora Intel, zodpovedné za sadu optimalizácií a generovanie kódu.Obrázok 9
Obrázok 10
Obrázky 9 a 10 znázorňujú grafy porovnávajúce výkon Intel Visual Fortran 8.0 s predošlá verzia Intel Fortran 7.1 a ďalšie populárne kompilátory z tohto jazyka v odbore, bežiace na rodinách OS Windows a Linux. Na porovnanie sme použili testy, ktorých zdrojové kódy spĺňajúce štandardy F77 a F90 sú dostupné na stránke http://www.polyhedron.com/. Na tej istej stránke sú k dispozícii podrobnejšie informácie o porovnaní výkonu kompilátorov (Porovnania kompilátorov Win32 -> Porovnania doby spustenia Fortran (77, 90) Porovnania doby spustenia a Porovnania kompilátora Linux -> Porovnania doby spustenia Fortran (77, 90): rôzne sú zobrazené kompilátory a geometrický priemer je uvedený v spojení s jednotlivými výsledkami pre každý test.
Kompilátory Intel C ++ a Fortran a knižnica MKL
Spolu so štandardom kompilátorov GNU pre Linux sú na klastroch výpočtového komplexu SRCC nainštalované kompilátory Intel C ++ a Fortran. V súčasnosti (začiatkom roku 2006) sú na všetkých klastroch nainštalované kompilátory verzie 9.1. Táto stránka je venovaná popisu najdôležitejších možností a nastavení týchto kompilátorov, ako aj ich hlavných rozdielov od kompilátorov GNU. Stránka je zameraná najmä na používateľov klastrov Výskumného výpočtového centra Moskovskej štátnej univerzity, ale môže byť užitočná aj pre ostatných rusky hovoriacich používateľov. Problémy kompilácie pre platformu IA-64 tu nie sú zahrnuté.
Knižnica Intel je tiež nainštalovaná na všetkých klastroch Matematická knižnica jadra(MKL) verzia 8.0.2. Knižnica sa nachádza v adresári / usr / mkl. Všimnite si, že adresár lib obsahuje podadresáre 32, 64 a em64t. V klastri Ant musíte použiť knižnice z podadresára em64t a v ostatných klastroch z podadresára 32. Všetku potrebnú dokumentáciu a príklady môžete získať z adresára / usr / mkl / doc.
Na čo sú potrebné nové kompilátory?
Potreba nových kompilátorov vznikla hlavne kvôli a) podpore programovania v jazyku Fortran 90 a tiež b) výkonnejšej optimalizácii programov Fortran, než poskytuje kompilátor g77, ktorý využíva preklad do C a následne kompiláciu s gcc.
Tieto požiadavky spĺňajú aj kompilátory PGI (Portland Group), ktoré však developerská spoločnosť odmietla dodať do Ruska.
Ako sa to používa?
Kompilátory Intel sa vyvolávajú pomocou príkazov icc(C alebo C++), icpc(C++) a ifort(Fortran 77/90). Príkazy mpicc, mpiCC a mpif77 na kompiláciu a zostavovanie programov MPI sú tiež nakonfigurované na používanie kompilátorov Intel.
Je tiež možné použiť kompilátory GNU s príkazmi mpigcc, mpig ++ a mpig77 (Fortran 90 nie je podporovaný).
Vstupné súbory
V predvolenom nastavení sú súbory s príponou .cpp a .cxx sa považujú za zdrojové texty v C++, súbory s príponou .c- zdroje v C a kompilátor icpc tiež kompiluje súbory .c ako zdroje v C ++.
Súbory s príponami .f, .ftn a .pre sú rozpoznávané ako zdrojové texty v jazyku Photran s pevným zápisom a súbory .fpp a .F sú dodatočne prevedené cez preprocesor Fortran. Súbory s príponou .f90 sa považujú za zdroje Fortran 90/95 vo voľnej forme. Pomocou možností môžete explicitne nastaviť pevnú alebo voľnú formu písania programov Fortran -FI a -FR resp.
Súbory s príponou .s uznávaný ako kód assembleru pre IA-32.
Špecifikácie kompilátora Intel
Tu uvádzame charakteristiky kompilátorov Intel, ako ich uvádza vývojár v používateľskej príručke s niektorými našimi komentármi.
- Výrazná optimalizácia
zrejme to znamená optimalizáciu kódu na vysokej úrovni, t.j. v prvom rade rôzne konverzie slučiek, ktoré takmer všetky kompilátory robia s väčším či menším úspechom - Optimalizácia výpočtov s pohyblivou rádovou čiarkou
zrejme mám na mysli predovšetkým maximálne využitie príkazov implementovaných na hardvérovej úrovni - Interprocedurálne optimalizácie
tie. globálna optimalizácia celého programu, na rozdiel od bežnej optimalizácie, ktorá ovplyvňuje iba kód konkrétnych funkcií - Optimalizácia založená na profile
tie. schopnosť spustiť program v testovacom režime, zhromažďovať údaje o čase prechodu určitých fragmentov kódu v rámci často používaných funkcií a potom tieto údaje použiť na optimalizáciu - Podpora inštrukčnej sady SSE v procesoroch Pentium III
poznámka: pre výpočtové úlohy sú zaujímavejšie príkazy SSE2, t.j. vektorové príkazy na 64-bitových reálnych číslach, ale sú podporované iba v procesoroch Pentium 4, ktoré zatiaľ nemáme k dispozícii - Automatická vektorizácia
tie. opäť pomocou príkazov SSE a SSE2 vložených automaticky kompilátorom - Podpora OpenMP pre programovanie na SMP systémoch
poznámka: na klastri sa odporúča prevažne používať rozhranie MPI; rozšírené používanie OpenMP na klastri sa neočakáva a takéto experimenty ešte neboli vykonané; ale asi má zmysel používať knižnice (BLAS a pod.) paralelizované pre zdieľanú pamäť. - Prebieha predbežné načítanie údajov
tie. zrejme použitie predinštrukcií z pamäte do vyrovnávacej pamäte údajov, čo bude po chvíli potrebné - "Odoslaný" kód pre rôzne procesory
tie. schopnosť generovať kód pre rôzne procesory v jedinom spustiteľnom súbore, čo vám umožňuje využiť výhody najnovších procesorov na dosiahnutie najvyššieho výkonu na nich pri zachovaní binárnej kompatibility programov so staršími procesormi; na našom klastri to zatiaľ nie je relevantné, pretože používajú sa iba procesory Pentium III a nepredpokladá sa, že by sa mali prenášať a spúšťať programy skompilované v klastri na iných počítačoch
Základné možnosti kompilátora
Najzaujímavejšie sú samozrejme možnosti optimalizácie kódu. Väčšina možností je spoločná pre kompilátory C ++ a Fortran. Viac Detailný popis možnosti v používateľských príručkách v anglickom jazyku.
Úrovne optimalizácie | |
---|---|
Možnosť | Popis |
-O0 | Zakáže optimalizáciu |
-O1 alebo -O2 | Základná optimalizácia pre rýchlosť práce. Zakázať inline vkladanie funkcií knižnice. Pre kompilátor C ++ poskytujú tieto možnosti rovnakú optimalizáciu; pre kompilátor Fortran je vhodnejšia možnosť -O2, pretože zahŕňa aj odvíjanie slučiek. |
-O3 | Výkonnejšie optimalizácie vrátane transformácií slučiek, predbežného načítania údajov pomocou OpenMP. Niektoré programy nemusia zaručovať vyšší výkon -O2... Má zmysel používať v spojení s možnosťami vektorizácie -xK a -xW. |
-rozvinúť [n] | Umožňuje rozvinúť slučky až n-krát. |
Optimalizácia pre konkrétny procesor | |
Možnosť | Popis |
-tpp6 | Optimalizované pre procesory Penitum Pro, Pentium II a Pentium III |
-tpp7 | Optimalizácia pre procesory Penitum 4 (táto možnosť je predvolene povolená pre kompilátor IA-32) |
-xM | Generovanie kódu pomocou rozšírení MMX špecifických pre procesory Pentium MMX, Pentium II a novšie |
-xK | Generovanie kódu pomocou rozšírení SSE špecifických pre procesory Pentium III |
-xW | Generovanie kódu pomocou rozšírení SSE2 špecifických pre procesory Pentium 4 |
Interprocedurálna optimalizácia | |
-ip | V rámci jedného súboru je povolená interprocedurálna optimalizácia. Ak zadáte možnosť -ip_no_inlining, potom je vkladanie inline funkcie deaktivované. |
-ipo | Zahŕňa interprocedurálnu optimalizáciu medzi rôznymi súbormi |
Optimalizácia pomocou profilov | |
-prof_gen | Vygeneruje sa „profilovací“ kód, ktorý bude použitý na profilovanie, t.j. zber údajov o frekvencii prejazdu určitými miestami v programe |
-prof_use | Optimalizácia sa vykonáva na základe údajov získaných vo fáze profilovania. Má zmysel používať v spojení s možnosťou interprocedurálnej optimalizácie -ipo. |
Paralelizácia pre SMP systémy | |
- openmp | Zahŕňa podporu pre štandard OpenMP 2.0 |
- paralelný | Zapne sa automatická paralelizácia slučiek |
Výkon
Podľa výsledkov testovania SPEC CPU2000 zverejnených na serveri ixbt.com sa kompilátory Intel verzie 6.0 zdajú byť takmer všade lepšie v porovnaní s kompilátormi gcc verzie 2.95.3, 2.96 a 3.1 a PGI verzie 4.0.2. Tieto testy boli vykonané v roku 2002 na počítači s procesorom Pentium 4 / 1,7 GHz a OS RedHat Linux 7.3.
Podľa benchmarkov vykonaných spoločnosťou Polyhedron, kompilátor Intel Fortran 7.0 fungoval takmer všade v porovnaní s inými kompilátormi Fortran 77 pre Linux (Absoft, GNU, Lahey, NAG, NAS, PGI). Len v niektorých testoch kompilátor Intel mierne prevyšuje kompilátory Absoft, NAG a Lahey. Tieto testy boli vykonané na počítači Pentium 4 / 1,8 GHz s operačným systémom Mandrake Linux 8.1.
Kompilátory Intel verzie 9.1 tiež prekonávajú kompilátory gcc a vykazujú výkon porovnateľný s Absoft, PathScale a PGI.
Budeme vďační tým používateľom a čitateľom, ktorí nám pošlú údaje o vplyve výberu kompilátora (GCC alebo Intel) a možnostiach optimalizácie na rýchlosť práce na ich reálnych problémoch.
Knižnice
Kompilátor C používa runtime knižnicu vyvinutú projektom GNU ( libc.a).
S kompilátorom Intel C ++ sa dodávajú nasledujúce knižnice:
- libcprts.a- Runtime knižnica Dinkumware C ++.
- libcxa.a- dodatočná runtime knižnica pre vývoj C ++ Intel.
- libimf.a- knižnica matematických funkcií vyvinutá spoločnosťou Intel, ktorá zahŕňa optimalizované a vysoko presné implementácie trigonometrických, hyperbolických, exponenciálnych, špeciálnych, komplexných a iných funkcií (podrobnosti nájdete v zozname funkcií).
- libirc.a- runtime podpora pre profilovanie (PGO) a "odosielanie" kódu v závislosti od procesora (pozri vyššie).
- libguide.a- Implementácia OpenMP.
Tento zoznam obsahuje statické knižnice, no pre väčšinu z nich existujú aj dynamické, t.j. pripojené počas spúšťania, možnosti ( .takže).
S kompilátorom Fortran sú dodávané nasledujúce knižnice: libCEPCF90.a, libIEPCF90.a, libintríny.a, libF90.a, používa sa aj knižnica matematických funkcií libimf.a.
Vytvorenie spustiteľného súboru
Pripojenie knižníc môže byť statické (v čase zostavenia) alebo dynamické (v čase spustenia programu). Dynamický prístup vám umožňuje zmenšiť veľkosť spustiteľného súboru, umožňuje vám zdieľať rovnakú kópiu knižnice v pamäti, ale na to musíte nainštalovať celú sadu dynamických knižníc používaných na každom uzle, kde budú programy bežať. .
Ak ste teda nainštalovali kompilátor Intel na svoj počítač so systémom Linux a chcete spustiť zostavené spustiteľné súbory na iných počítačoch, musíte buď použiť statickú zostavu (čo je jednoduchšie) alebo skopírovať dynamické knižnice Intel na tieto počítače (zvyčajne z / opt / intel / kompilátor70 / ia32 / lib) do jedného z adresárov uvedených v /etc/ld.so.conf a uistite sa, že na týchto počítačoch je nainštalovaná rovnaká sada knižníc s dynamickým odkazom GNU / Linux.
Štandardne sú všetky vývojové knižnice Intel (okrem libcxa.so) prepojené staticky a všetky linuxové systémové a GNU knižnice sú prepojené dynamicky. S možnosťou -statický môžete prinútiť kolektor (linker), aby pripojil všetky knižnice staticky (čím sa zväčší veľkosť spustiteľného súboru), a pomocou možnosti -i_dynamický všetky vývojové knižnice Intel môžu byť dynamicky prepojené.
Pri pripájaní ďalších knižníc pomocou možnosti ako -l knižnica možno budete musieť použiť túto možnosť -L adresár na nastavenie cesty, kde sa nachádzajú knižnice.
S možnosťami -Bstatický a -Bdynamický môžete explicitne nastaviť dynamické alebo statické pripojenie každej z knižníc špecifikovaných v príkazovom riadku.
S možnosťou -c zostava spustiteľného súboru je zakázaná a vykoná sa iba kompilácia (vygenerovanie objektového modulu).
Zdieľanie modulov vo Fortran a C
Ak chcete zdieľať moduly napísané vo Fortrane a C, musíte sa dohodnúť na pomenovaní procedúr v objektových moduloch, odovzdávaní parametrov a prístupe ku globálnym premenným, ak nejaké existujú.
Kompilátor Intel Fortran štandardne konvertuje názvy procedúr na malé písmená a na koniec názvu pridá podčiarknutie. Kompilátor C nikdy nemení názvy funkcií. Ak teda chceme volať funkciu alebo procedúru FNNAME implementovanú v C z modulu Fortran, potom v module C musí mať názov fnname_.
Kompilátor Fortran túto možnosť podporuje -nus [názov súboru], ktorá vám umožňuje zakázať pridávanie podčiarkovníkov do interných názvov procedúr. Ak je zadaný názov súboru, vykoná sa to len pre názvy procedúr uvedených v zadanom súbore.
Štandardne sa vo Fortrane parametre odovzdávajú odkazom a v C sa vždy odovzdávajú hodnotou. Preto pri volaní procedúry Fortran z modulu C musíme odovzdať ukazovatele na zodpovedajúce premenné obsahujúce hodnoty skutočných parametrov ako parametre. Pri písaní funkcie v C, ktorú je potrebné volať z modulu Fortran, musíme opísať formálne parametre ako ukazovatele zodpovedajúcich typov.
V moduloch C je možné použiť COMMON bloky definované vo vnútri modulov Fortran (viac informácií nájdete v Užívateľskej príručke kompilátora Intel Fortran, kapitola Miešanie C a Fortran).
Zdieľanie kompilátorov Intel a GCC
Objektové moduly C vytvorené kompilátorom Intel C++ sú kompatibilné s modulmi vytvorenými kompilátorom GCC a knižnicou GNU C. Tieto moduly teda možno použiť spolu v jednom programe zostavenom pomocou príkazov icc alebo gcc, ale na správne prepojenie knižníc Intel sa odporúča použiť icc.
Intel Compiler podporuje množstvo neštandardných rozšírení C používaných projektom GNU a podporovaných kompilátorom GCC (ale nie všetky, ďalšie podrobnosti nájdete tu).
Užívateľská príručka nehovorí nič o kompatibilite objektových modulov v jazykoch C ++ a Fortran, zjavne nie je podporovaná.
Podpora štandardov
Intel C ++ Compiler 7.0 pre Linux podporuje jazykový štandard ANSI / ISO C (ISO / IEC 9899/1990). Je možné nastaviť prísnu kompatibilitu so štandardom ANSI C ( -ansi) alebo ANSI C Extended ( -Xa). Pri použití opcie -c99