kompilátory Intel. Ôsma verzia kompilátorov Intel Zdieľanie modulov vo FORTRAN a C

Nie si otrok!
Uzavretý vzdelávací kurz pre deti elity: "Skutočné usporiadanie sveta."
http://noslave.org

Z Wikipédie, voľnej encyklopédie

Kompilátor Intel C++
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:

  • Vektorizácia pre SSE, SSE2, SSE3, SSE4

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:

  • Intel C++ Compiler Professional Edition
  • Intel Cluster Toolkit (Compiler Edition)

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žnosti

Boli publikované nasledujúce varianty experimentálneho kompilátora:

  • Intel STM Compiler Prototype Edition zo 17. septembra 2007. Podpora softvérovej transakčnej pamäte (STM). Vydané len pre Linux a Windows, IA-32 (procesory x86);
  • Intel Concurrent Collections pre C / C ++ 0.3 zo septembra 2008. Obsahuje mechanizmy na uľahčenie písania paralelných C++ programov.

Základné vlajky

Windows Linux, MacOSX Popis
/ Od -O0 Zakázať optimalizácie
/ O1 -O1 Optimalizujte, aby ste minimalizovali veľkosť spustiteľného súboru
/ O2 -O2 Optimalizujte pre vyššiu rýchlosť. Zahrnuté sú niektoré optimalizácie
/ O3 -O3 Zahrňte všetky optimalizácie od O2. Vykonajte tiež intenzívne optimalizácie slučiek
/ Oip - Oj Povoliť medziprocedurálnu optimalizáciu po jednotlivých súboroch
/ Oipo -Oipo Povoliť globálnu inter-procedurálnu optimalizáciu
/ QxO -xO Povoliť používanie rozšírení SSE3, SSE2 a SSE pre procesory vyrobené akoukoľvek spoločnosťou
/ rýchlo -rýchlo "Rýchly režim". Ekvivalent „/ O3 / Qipo / QxHost / no-prec-div“ v systéme Windows a „-O3 -ipo -static -xHOST -no-prec-div“ v systéme Linux. Všimnite si, že príznak "-xHOST" znamená optimalizáciu pre procesor, na ktorom beží kompilátor.
/ Qprof-gen -prof_gen Vytvorte inštrumentovanú verziu programu, ktorá bude zhromažďovať profil vykonávania
/ Qprof-použitie -prof_use Použite informácie o profile zo spustenia programu skompilované s príznakom prof_gen.

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á funkciaGenerovaný príkaz
_mm_addsub_psAddsubps
_mm_hadd_psHaddps
_mm_hsub_psMsubps
_mm_moveldup_psMovsldup
_mm_movehdup_psMovshdup
_mm_addsub_pdAddsubpd
_mm_hadd_pdHaddpd
_mm_hsub_pdHsubpd
_mm_loaddup_pdmovddup xmm, m64
_mm_movedup_pdmovddup reg, reg
_mm_lddqu_si128Lddqu

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.

Príklady skutočných hackov: Intel C ++ 7.0 Compiler - Archív WASM.RU

... kompilátor Intel C ++ 7.0 sa spustil neskoro v noci, asi o piatej hodine ráno. Chcelo sa mi neuveriteľne spať, ale aj zvedavosť: či bola obrana posilnená alebo nie, bola tiež na roztrhanie. Keď som sa rozhodol, že kým nezistím ochranu, stále nezaspím, otvoril som novú konzolu a prestavil som systémové premenné TEMP a TMP do adresára C: \ TEMP a narýchlo som napísal neslušne dlhý názov inštalačného programu W_CC_P_7.0.073 .exe v príkazovom riadku (potreba nastavenia premenných TEMP a TMP je vysvetlená tým, že vo Windowse 2000 štandardne ukazujú na veľmi hlboko vnorený adresár a inštalačný program Intel C++ - a nielen on - nepodporujú cesty takej obrovskej veľkosti).

Okamžite sa ukázalo, že politika ochrany bola radikálne prepracovaná a prítomnosť licencie bola kontrolovaná už vo fáze inštalácie aplikácie (vo verzii 5.x inštalácia prebehla bez problémov). OK, dáme príkaz dir a pozrieme sa na obsah toho, s čím sa chystáme bojovať:

    Obsah priečinka C: \ TMP \ IntelC ++ Compiler70

    17.03.2003 05:10

    html

    17.03.2003 05:11

    x86

    17.03.2003 05:11

    Itanium

    17.03.2003 05:11

    poznámky

    05.06.2002 10:35 45 056 AutoRun.exe

    7.10.2001 12:56 27 autorun.inf

    29. 10. 2002 11:25 2 831 ccompindex.htm

    24.10.2002 08:12 126 976 ChkLic.dll

    18. 10. 2002 22:37 552 960 chklic.exe

    17. 10. 2002 16:29 28 663 CLicense.rtf

    17.10.2002 16:35 386 credist.txt

    16.10.2002 17:02 34 136 Crelnotes.htm

    19.03.2002 14:28 4635 PLSuite.htm

    21.02.2002 12:39 2 478 register.htm

    02.10.2002 14:51 40 960 Setup.exe

    02.10.2002 10:40 151 Setup.ini

    7. 10. 2001 12:56 184 setup.mwg

    19 súborov 2 519 238 bajtov

    6 priečinkov 886 571 008 bajtov voľných

Aha! Inštalačný program setup.exe má veľkosť iba štyridsať kilobajtov. Veľmi dobre! Je nepravdepodobné, že by ste v takom zväzku mohli skryť vážnu ochranu, a aj keby áno, tento malý súbor nie je potrebné analyzovať ako celok – až do posledného bajtu výpisu disassemblera. Nie je však pravdou, že bezpečnostný kód sa nachádza presne v setup.exe, môže sa nachádzať aj na inom mieste, napríklad ... ChkLic.dll / ChkLic.exe, ktoré spolu zaberajú o niečo menej ako sedemsto kilobajtov . Počkaj, čo je ChkLic? Toto je skratka pre Check License alebo čo?! Chlapci z Intelu majú evidentne vážne problémy so zmyslom pre humor. Bolo by lepšie, keby tento súbor nazvali „Hack Me“ na moje slovo! Dobre, súdiac podľa objemu, ChkLic je ten istý FLEX lm a už sme sa s ním stretli (pozri „Intel C ++ 5.0 Compiler“) a máme približnú predstavu, ako ho prelomiť.

Dáme príkaz "dumpbin / EXPORTS ChkLic.dll" na preskúmanie exportovaných funkcií a ... pevne sa držte Klavy, aby ste nespadli zo stoličky:

    Výpis súboru ChkLic.dll

  1. Časť obsahuje nasledujúce exporty pre ChkLic.dll

    0 charakteristík

    3DB438B4 časová dátumová pečiatka Po 21. okt 21:26:12 2002

  2. 1 počet funkcií

    1 počet mien

    radová nápoveda Názov RVA

    1 0 000010A0 _Skontrolujte platnú licenciu

Dočerta! Ochrana exportuje iba jednu jedinú funkciu s úžasným názvom CheckValidLicense. "Úžasné" - pretože účel funkcie je jasný už z názvu a je možné vyhnúť sa starostlivej analýze rozloženého kódu. No, odmietli všetok záujem ... bolo by lepšie, keby to vyviezli radovým číslom alebo aspoň pokrstili nejakým strašidelným názvom ako DES Decrypt.

… Snívanie! Dobre, späť k našim baranom. Uvažujme logicky: ak je všetok bezpečnostný kód sústredený priamo v ChkLic.dll (a súdiac podľa „závesného“ charakteru ochrany to tak naozaj je), potom sa všetka „ochrana“ zredukuje na volanie CheckValidLicense z Setup.exe a kontrola ním vráteného výsledku. Preto na „hacknutie“ stačí len pokaziť ChkLic.dll, čím sa funkcia ChekValidLicense vždy vráti ... mimochodom, čo by mala vrátiť? Presnejšie: ktorá návratová hodnota zodpovedá úspešnej kontrole licencie? Nie, neponáhľajte sa s rozoberaním setup.exe, aby ste zistili, pretože nie je toľko možných možností: buď FALSE alebo PRAVDA. Tipujete na TRUE? V istom zmysle je to logické, ale na druhej strane: prečo sme sa vlastne rozhodli, že funkcia CheckValidLicense vracia príznak úspešnosti operácie, a nie kód chyby? Koniec koncov, malo by to nejako motivovať dôvody na odmietnutie inštalácie kompilátora: súbor s licenciou sa nenašiel, súbor je poškodený, platnosť licencie vypršala a podobne? Dobre, skúsme vrátiť nulu a ak to nebude fungovať, vrátime jednotku.

Dobre, pripútajte sa, poďme! Spustite HIEW, otvorte súbor ChkLic.dll (ak sa neotvorí, tri krát si zapamätajte gophery, dočasne ho skopírujte do koreňového adresára alebo iného adresára, ktorý neobsahuje v názve špeciálne znaky, ktoré sa vám až tak nepáčia Potom, opätovným kontaktovaním exportnej tabuľky získanej pomocou dumpbin, definujeme adresu funkcie CheckValidLicense (v tomto prípade 010A0h) a cez „10A0“ prejdeme na jej začiatok. starý kód "XOR EAX, EAX / RETN 4". Prečo práve" REN 4 "a nielen" RET "? Áno, pretože funkcia podporuje konvenciu stdcall, ktorú nájdete pri pohľade na jej epilóg v HIEW" e ( jednoducho prejdite nadol po obrazovke disassemblera, kým nenájdete RET).

Kontrola... Funguje!!! Napriek absencii licencie inštalátor bez kladenia otázok spustí inštaláciu! Obrana preto padla. Och, neveríme, že je všetko také jednoduché, a aby sme nezostali nečinne hľadieť do monitora pri čakaní na dokončenie procesu inštalácie programu, nastavili sme náš obľúbený disassembler IDA na setup.exe. Prvá vec, ktorá vás upúta, je absencia CheckValidLicense v zozname importovaných funkcií. Možno nejako spustí súbor ChkLic.exe? Pokúšam sa nájsť zodpovedajúci odkaz medzi automaticky rozpoznanými reťazcami: "~ View аNames", "ChkLic" ... áno, reťazec "Chklic.exe" tu vôbec nie je, ale "Chklic.dll" sa našiel. Áno, chápem, takže knižnica ChkLic sa načíta explicitným prepojením cez LoadLibrary. A nasledujúci krížový odkaz to potvrdzuje:

    Text: 0040175D push offset aChklic_dll; lpLibFileName

    Text: 00401762 volajte ds: LoadLibraryA

    Text: 00401762; stiahnite si ChkLic.dll ^^^^^^^^^^^^^^^^^^^

    Text: 00401762;

    Text: 00401768 mov esi, eax

    Text: 0040176A push offset a_checkvalidlic; lpProcName

    Text: 0040176F push esi; hModule

    Text: 00401770 zavolajte na ds: GetProcAddress

    Text: 00401770; získajte adresu funkcie CheckValidLicense

    Text: 00401770;

    Text: 00401776 cmp esi, ebx

    Text: 00401778 jz loc_40192E

    Text: 00401778; ak taká knižnica neexistuje, ukončite inštalačný program

    Text: 00401778;

    Text: 0040177E cmp eax, ebx

    Text: 00401780 jz loc_40192E

    Text: 00401780; ak v knižnici takáto funkcia nie je, ukončite inštaláciu

    Text: 00401780;

    Text: 00401786 push ebx

    Text: 00401787 volať eax

    Text: 00401787; zavolajte funkciu ChekValidLicense

    Text: 00401787;

    Text: 00401789 test eax, eax

    Text: 0040178B jnz loc_4019A3

Text: 0040178; ak funkcia nevrátila nulu, ukončite inštalačný program

Je neuveriteľné, že táto strašne primitívna obrana je postavená presne takto! Navyše polmetrový súbor ChkLic.exe nie je vôbec potrebný! A prečo sa oplatilo vytiahnuť ho z internetu? Mimochodom, ak sa rozhodnete ponechať si distribútora kompilátora (pozor: Nepovedal som "distribuovať"!), Potom, aby ste ušetrili miesto na disku, ChkLic. * Dá sa vymazať: buď zmiznutím setup.exe, navždy k nemu odstavíte prístup alebo jednoducho vytvorením vlastného ChkLic.dll, exportovaním funkcie stdcall CheckValidLicence vo forme: int CheckValidLicence (int some_flag) (návrat 0;)

Takže, kým sme o tom všetkom diskutovali, inštalátor dokončil inštaláciu kompilátora a úspešne dokončil svoju prácu. Je zaujímavé, či sa spustí kompilátor alebo sa všetka zábava len začína? Zúfalo ideme nadol v rozvetvenej hierarchii vnorených priečinkov, nájdeme icl.exe, ktorý je podľa očakávania v adresári bin, klikneme a ... Kompilátor sa prirodzene nespustí s odvolaním sa na skutočnosť, že "icl: chyba: mohla nie pokladničná licencia FLEX lm“, bez ktorej nemôže pokračovať vo svojej práci.

Ukázalo sa, že Intel použil viacvrstvovú ochranu a prvá úroveň sa ukázala ako hrubá obrana proti hlupákom. Dobre! Prijímame túto výzvu a na základe našich doterajších skúseností mechanicky hľadáme súbor LMGR * .DLL v adresári kompilátora. Neužitočné! Tentoraz tu žiadny takýto súbor nie je, ale ukazuje sa, že icl.exe výrazne nabral na váhe a prekročil hranicu šesťsto kilobajtov... Stop! Neprepojili vývojári kompilátora tento FLEX lm so statickým prepojením? Pozrime sa: v Intel C ++ 5.0 bol súčet veľkostí lmgr327.dll a icl.exe 598 KB a teraz iba icl.exe zaberá 684 KB. Po úprave na prirodzenú senilnú „obezitu“ sa čísla veľmi dobre zbiehajú. Tak predsa FLEX lm! Oh, oh! Teraz však bez symbolických názvov funkcií bude prelomenie ochrany oveľa ťažšie ... Nerobme však vopred paniku! Len pokojne premýšľajme! Je nepravdepodobné, že by vývojový tím úplne prepísal všetok kód, ktorý interaguje s touto „obálkovou“ ochranou. S najväčšou pravdepodobnosťou jeho "vylepšenie" práve zmenou typu rozloženia a skončilo. A ak áno, šanca na hacknutie programu je stále veľká!

Berúc do úvahy, že keď bol bezpečnostný kód naposledy v hlavnej funkcii, po určení jeho adresy sme jednoducho nastavili bod prerušenia a po čakaní, kým sa objaví debugger, hlúpo sledujeme kód a striedavo sa pozeráme na ladiaci nástroj, potom vo výstupnom okne programu: objavilo sa, je tam urážlivá správa? Zároveň označíme všetky podmienené skoky, s ktorými sa stretneme, na samostatnom hárku papiera (alebo ich vložíme do vlastnej pamäte, ak si to želáte), pričom nezabudneme uviesť, či bol každý podmienený skok vykonaný alebo nie ... Stop! Niečo sme s vami četovali, ale urážlivá správa sa už objavila! Okej dobre! Pozrime sa, ktorý podmienený skok tomu zodpovedal. Naše záznamy ukazujú, že posledná vetva, s ktorou sme sa stretli, bola podmienená vetva JNZ umiestnená na 0401075h a „reagujúca“ na výsledok vrátený sub_404C0E:

  • Text: 0040107F loc_40107F:; KÓD XREF: _main + 75 ^ j

    Text: 0040107F mov eax, offset aFfrps; "FFrps"

    Text: 00401084 mov edx, 21h

    Text: 00401089 zavolajte na sub_404C0E

    Text: 0040108E test eax, eax

    Text: 00401090 jnz krátky loc_40109A

    Je zrejmé, že sub_404C0E je veľmi ochranný postup, ktorý kontroluje prítomnosť licencie. Ako ju prekabátiť? No, existuje veľa možností... Najprv môžete premyslene a svedomito analyzovať obsah sub_404C0E, aby ste zistili, čo presne a ako kontroluje. Po druhé, môžete jednoducho nahradiť JNZ short loc_40107F za JZ short loc_40107F alebo dokonca NOP, NOP. Po tretie, príkaz na kontrolu vráteného výsledku TEST EAX, EAX možno zmeniť na príkaz na nastavenie nuly: XOR EAX, EAX. Po štvrté, môžete opraviť samotný sub_404C0E tak, aby vždy vrátil nulu. Neviem ako vám, ale mne sa najviac páčila metóda číslo tri. Zmeňte dva bajty a spustite kompilátor. Ak v ochrane neexistujú žiadne ďalšie kontroly jeho „licencovania“, program bude fungovať a podľa toho aj naopak. (Ako si pamätáme, v piatej verzii boli dve takéto kontroly). Úžasne, kompilátor už nenadáva a pracuje !!! Jeho vývojári totiž, ako by sa dalo očakávať, ochranu vôbec nezvýšili, ale naopak, dokonca oslabili! Chris Kaspersky

  • 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
    -O0Zakáže optimalizáciu
    -O1 alebo -O2Zá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.
    -O3Vý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
    -tpp6Optimalizované pre procesory Penitum Pro, Pentium II a Pentium III
    -tpp7Optimalizácia pre procesory Penitum 4 (táto možnosť je predvolene povolená pre kompilátor IA-32)
    -xMGenerovanie kódu pomocou rozšírení MMX špecifických pre procesory Pentium MMX, Pentium II a novšie
    -xKGenerovanie kódu pomocou rozšírení SSE špecifických pre procesory Pentium III
    -xWGenerovanie kódu pomocou rozšírení SSE2 špecifických pre procesory Pentium 4
    Interprocedurálna optimalizácia
    -ipV 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é.
    -ipoZahŕňa interprocedurálnu optimalizáciu medzi rôznymi súbormi
    Optimalizácia pomocou profilov
    -prof_genVygeneruje sa „profilovací“ kód, ktorý bude použitý na profilovanie, t.j. zber údajov o frekvencii prejazdu určitými miestami v programe
    -prof_useOptimalizá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
    - openmpZahŕň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

  • Príručky pre kompilátor vo formáte HTML (dostupné „online“ na našom serveri, ale vyžaduje sa podpora jazyka Java)
    • Používateľská príručka kompilátora Intel C++.
    • Používateľská príručka kompilátora Intel Fortran.
  • Sprievodca kompilátorom je zapnutý anglický jazyk PDF (vyžaduje Acrobat Reader, stiahnite si súbory PDF do počítača)
    • Používateľská príručka kompilátora Intel C ++ (1,3 MB, 395 strán).
    • Používateľská príručka kompilátora Intel Fortran (1,1 MB, 285 strán).
    • Fortran Programmer's Reference: Intel Fortran Programmer's Reference (7 MB, 566 strán).
    • Referenčná príručka knižnice Fortran: Referenčná príručka knižníc Intel Fortran (9,5 MB, 881 strán).
  • Intel Application Debugger Guide.
  • Porovnanie kompilátorov na testoch SPEC CPU2000 (článok na webe ixbt.com v ruštine).
  • Webová stránka Polyhedron poskytuje porovnanie rôznych kompilátorov.