Ôsma verzia kompilátorov Intel. Kompletný zoznam modulov vo Fortrane a C

Koncom roka 2003 Intel predstavil verziu 8.0 svojej kolekcie kompilátorov. Nové kompilátory zlepšia produktivitu programov bežiacich na serveroch, stolných počítačoch a mobilné systémy(Laptopy, mobilné telefóny a počítače) založené na procesoroch Intel. Je prijateľné poznamenať, že tento produkt bol vytvorený za aktívnej účasti Intel Center zo spodnej časti Intel Center z vývoja softvéru a Intel facs zo Sarova.

Nová séria obsahuje kompilátory Intel pre MoC++ a Fortran pre Windows a Linux, ako aj kompilátory Intel pre MoC++ pre Windows CE .NET. Kompilátory systémovej orientácie založené na súčasných procesoroch Intel: Intel Itanium 2, Intel Xeon, Intel Pentium 4, procesory s architektúrou Intel Personal Internet Client Architecture pre mobilné telefóny gut PC a procesor Intel Pentium M pre mobilné PC (súčasť technológie Intel Centrino pre mobilné PC).

Intel Visual Fortran Compiler for Windows implementuje kompilačné technológie novej generácie pre vysokovýkonné počítačové riešenia. VIN POSDNOW VO FUNKCII SOS MOVIO COMPAQ Visual Fortran (CVF), že produktivita, ShO, som sa stal rovnakou ako technológie optimalizácie kompime, Všeobecné kódexy firemnej párty. výstupný kód, Skúmanie ďalšieho CVF v prostredí Intel Visual Fortran. Tento kompilátor je prvý, ktorý implementuje funkcie CVF pre 32-bitové systémy Intel a systémy založené na procesoroch rodiny Intel Itanium, ktoré bežia v prostredí Windows. Okrem toho vám tento kompilátor umožňuje implementovať Moje funkcie CVF pre systémy s operačným systémom Linux založeným na 32-bitových procesoroch Intel a procesoroch rodiny Intel Itanium. V roku 2004 sa plánuje vydanie rozšírenej verzie tohto kompilátora – Intel Visual Fortran Compiler Professional Edition pre OS Windows, ktorá bude obsahovať knižnicu IMSL Fortran 5.0, distribuovanú spoločnosťou Visual Numerics, Inc.


„Nové kompilátory tiež podporujú pripravované procesory Intel s kódovým označením Prescott, ktoré nesú nové príkazy na zlepšenie výkonu grafiky a videa, ako aj ďalšie funkcie na zlepšenie produktivity. Nová technológia Mobile MMX(tm), ktorý podobne podporuje produktivitu grafických, zvukových a video doplnkov pre mobilné telefóny a stolné počítače, povedal Oleksiy Odnokov, spoluriaditeľ Intel Center for Software Development v Nižnom Novgorode. - Tieto kompilátory poskytujú vývojárom doplnkov jednu sadu nástrojov na generovanie nových doplnkov miera bez šípok s architektúrou Intelu. Nové kompilátory Intel tiež podporujú technológiu Intel Hyper-Threading a špecifikáciu OpenMP 2.0 od spoločnosti Galouz, čo znamená, že existuje množstvo direktív na vysokej úrovni na správu vlákien inštrukcií v aplikáciách.

Medzi nové nástroje zahrnuté pred kompilátormi patria funkcie Intel Code Coverage a Intel Test Prioritization. Tieto metódy zároveň umožňujú urýchliť vývoj aditív a podporiť ich silu, aby sa skrátil proces testovania. softvérová bezpečnosť.

Počas testovania programov poskytuje Pokrytie kódu dodatočné informácie o výbere programovej logiky a o distribúcii častí vo výstupnom kóde programov. Okrem toho, ak dôjde k zmenám alebo ak vám tento test neumožňuje overiť časť programu, napríklad vývojára, funkcia Prioritizácia testu vám umožní overiť fungovanie vybranej časti programového kódu.

Nové kompilátory Intel sú dostupné v rôznych konfiguráciách v rozmedzí od 399 do 1499 dolárov. Dnes ich môžete získať od spoločnosti Intel Corporation alebo od predajcov z celého sveta, zoznam toho, čo je k dispozícii na webovej stránke http://www.intel.com/software/products/reseller.htm#Russia.

Podpora pre procesory Prescott

K dispozícii je podpora pre procesor Intel Pentium 4 (Prescott) v ôsmej verzii kompilátora:

1. Podpora príkazov SSE3 (alebo PNI, Prescott New Instructions). Tu môžete vidieť tri spôsoby:

A.

Montážne vložky (Inline montáž). Kompilátor napríklad rozpozná výskyt zástupného príkazu v množine SSE3 _asm(addsubpd xmm0, xmm1). Týmto spôsobom môžu vývojári, ktorí sa podieľajú na optimalizácii na nízkej úrovni, odmietnuť priamy prístup k príkazom assembleru.

b. V kompilátoroch C/C++ sú dostupné nové inštrukcie z vyššej úrovne, nižšej úrovne vložiek v assembleri. A pre ďalšiu pomoc interných funkcií:

Nové funkcieFunkcia pridaná
Príkaz vygenerovaný_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

V tabuľke sú uvedené použité funkcie a typy inštrukcií assemblera, ktoré sú súčasťou sady SSE3. Rovnaká podpora platí pre príkazy zo sád MMX SSE2. To umožňuje programu vykonávať nízkoúrovňovú optimalizáciu kódu bez toho, aby ste sa museli starať o programovanie v jazyku symbolických inštrukcií: samotný kompilátor informuje o mapovaní implementovaných funkcií na rôznych inštrukciách procesora a optimálne Vykoristannya registra vytvoril algoritmus, ktorý efektívne vikorista novú množinu.

V.

Automatické generovanie nových príkazov kompilátorom. Nižšie sú uvedené dva spôsoby prenosu nových príkazov do programátora. Vstavaný kompilátor (s vybranými správnymi možnosťami - časť 3 nižšie) tiež automaticky generuje nové príkazy SSE3 pre programové kódy v C/C++ a Fortran. Napríklad bol optimalizovaný príkaz nevírusového zachytávania (lddqu), ktorý vám umožňuje ušetriť zvýšenie produktivity až o 40 % (napríklad kódovanie videa a zvuku). Ďalšie príkazy zo sady SSE3 vám umožňujú deaktivovať problémy v 3D grafike alebo multifunkčné problémy zahŕňajúce komplexné čísla. Napríklad graf v sekcii 3.1 nižšie ukazuje, že zisk 168.wupwise so súpravou SPEC CPU2000 FP sa zrýchlil, keď sa odstránil z automatického generovania príkazov SSE3, dosiahol ~25%. Produktivita tohto programu do značnej miery závisí od rýchlosti aritmetiky komplexných čísel.
2. Obete mikroarchitektonických výhod procesora Prescott. Pri generovaní kódu kompilátor berie do úvahy mikroarchitektonické zmeny nového procesora. V porovnaní s predchádzajúcimi verziami sa na novom procesore zrýchlilo napríklad vykonávanie určitých operácií (ako sekvenčné ničenie, násobenie celých čísel alebo konverzia čísel medzi rôznymi formátmi s pohyblivou rádovou čiarkou v SSE2) (napríklad The whole workload now zaberá jeden procesorový cyklus oproti štyrom pri predchádzajúcej verzii procesora Intel Pentium 4). Intenzívnejšie spracovanie takýchto príkazov umožňuje eliminovať hodnotu zrýchlenia práce sčítania.
Ďalším príkladom mikroarchitektonických zmien je redukcia mechanizmu preposielania úložiska (rýchle získavanie údajov, ktoré sú predtým uložené v pamäti); V skutočnosti sa úspory neukladajú do vyrovnávacej pamäte, ale do vyrovnávacej pamäte, čo umožňuje ešte rýchlejší prístup k údajom. Táto vlastnosť architektúry umožňuje napríklad implementovať agresívnu automatickú vektorizáciu programového kódu.

3. Vylepšená podpora technológie Hyper-Threading. Tento bod možno vo všeobecnosti zaviesť pred predchádzajúcimi - mikroarchitektonickými zmenami a ich modifikáciou kompilátorom. Napríklad súčasná knižnica, ktorá podporuje špecifikáciu Galouze OpenMP, bola optimalizovaná pre nový procesor.

Produktivita

Používanie kompilátorov je jednoduchý a efektívny spôsob, ako rýchlo využiť architektúru procesorov Intel. Nižšie sú uvedené dva spôsoby použitia kompilátorov: a) rekompilácia programov s možnými zmenami v kompilátore; softvérové ​​funkcie(napríklad profilovači).


1.1 Optimalizácia programov pomocou dodatočnej rekompilácie a zmeny nastavení kompilátora


Najčastejšie je prvým krokom pri prechode na nový kompilátor optimalizácia, ktorá je založená na úpravách po úpravách. Advance Logical Timeframe je životaschopnou možnosťou pre agresívnejšiu optimalizáciu. Na obrázkoch 1, 2, 3 a 4 je efekt prechodu na kompilátor Intel verzie 8.0 rovnaký ako u iných popredných produktov (-O2 – úprava prekladačov po zaškolení, základňa – upravovací kúpeľ pre maximálnu produktivitu). Porovnanie sa vykonáva na 32- a 64-bitových architektúrach Intel. Ako testujú testovaciu zostavu programy od SPEC CPU2000.


Malyunok 1




Malyunok 2




Malyunok 3




Malyunok 4


Nižšie sú uvedené niektoré možnosti (pod textom možnosti prechodu pre rodinu OS Windows; pre rodinu OS Linux existujú možnosti pre to isté, ale názvy sa môžu líšiť; napríklad -Od alebo QxK pre Windows poskytujú analógový Štart s -O0 alebo -xK pre Linux Je zrejmé, že informácie o hláseniach možno nájsť zo zdroja z kompilátora wiki), ktorý využíva kompilátor Intel.


Kontrola nad úsilím o optimalizáciu: Možnosti -Od (objem optimalizácie; nastavené na optimalizáciu programov), -O1 ( maximálna tekutosť pri minimalizácii veľkosti kódu), -O2 (optimalizácia pre rýchlosť videokódu; zastávky na čistenie), -O3 (zahŕňa najagresívnejšiu optimalizáciu pre rýchlosť videokódu; v a záchvaty môžu viesť k zvráteniu účinok, potom zvýšenie IA-64 Vykoristannya O3 vedie k zrýchleniu väčšiny kvapiek, čo znamená, že pozitívny účinok na IA-32 je menej výrazný). Aplikácie optimalizácie, ktoré môže povoliť -O3: preusporiadanie poradia vnorených slučiek (výmena slučiek), fúzia slučiek, podslučka (distribúcia slučiek; optimalizácia, fúzia spätnej slučky), softvérové ​​predbežné načítanie dát. Dôvodom, prečo je možné zvýšiť hodnotu premennej -O3, je to, že kompilátor použil heuristický prístup na výber agresívnej optimalizácie pre konkrétnu aplikáciu bez dostatočných informácií o programe (na zadku, po vygenerovaní príkazov na opätovný výber pre údaje, ktoré sa majú analyzovať v slučke, vzhľadom na to, že slučka je dokončená mnohokrát, takže v skutočnosti je menej iterácií). V tejto situácii môže pomôcť interprocedurálna optimalizácia z profilovania, ako aj rôzne „tipy“ od programátora (č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 v projekte). Zahŕňa optimalizácie, ako je napríklad online nahradenie kódu, ktorý sa často kontroluje (nižšie náklady na klikacie funkcie/postupy). Poskytuje informácie ďalším stupňom optimalizácie - napríklad informácie o hornej slučke (napríklad časová konštanta kompilácie je definovaná v jednom súbore a je zostavená v knižniciach) alebo informácie o vyrovnávacích údajoch v pamäti (veľa príkazov MMX\ SSE\SSE2\ SSE3 pracuje rýchlejšie, pretože operandy sú uložené v pamäti medzi 8 a 16 bajtmi). Analýza procedúr prideľovania pamäte (implementovaných\vyvolaných v jednom z projektových súborov) sa prenáša do tých funkcií\procedúr, kde sa táto pamäť používa (to môže pomôcť kompilátoru vyhnúť sa konzervatívnym predpokladom daným a neovereným v pamäti s náležitým poradím, a guláš môže byť v prípade neprítomnosti konzervatívny Ďalšie informácie). Ďalším využitím môže byť disambiguácia, analýza aliasov dát: kvôli nedostatku dodatočných informácií a nemožnosti určiť prítomnosť aliasov vychádza kompilátor z konzervatívneho predpokladu, že ho bude aliasovať. Takéto riešenie môže mať negatívny dopad na optimalizácie, ako je napríklad automatická vektorizácia na IA-32 alebo softvérové ​​prepojenie alebo SWP na IA-64. Interprocedurálna optimalizácia môže pomôcť pri analýze pamäťových tokov.

Optimalizácia z profilovania: Zahŕňa tri fázy: 1) generovanie inštrumentovaného kódu pomocou dodatočnej voľby Qprof_gen. 2) kód odmietnutia je spustený na reprezentatívnych údajoch a informáciách o Rôzne vlastnosti Zmena kódu (napríklad rýchlosť prechodu alebo typická hodnota počtu iterácií pre slučku). 3) Opätovná kompilácia voľby -Qprof_use, ktorá zabezpečí, že kompilátor použije informácie zozbierané na začiatku. Kompilátor teda môže vykonávať len statické hodnotenia dôležitých charakteristík programu, ale aj bez zdržania samotného vykonávania programov. To môže pomôcť pri aktuálnom výbere týchto a iných optimalizácií (napríklad efektívnejšie ukladanie rôznych programov do pamäte na základe informácií o tom, ktoré správy boli vybrané s akou frekvenciou; alebo optimalizácia pred cyklom na základe informácií o typickej iterácii sadzba nyumu) ​​​​. Optimalizácia z profilovania je užitočná najmä v prípadoch, keď je možné vybrať malý, ale reprezentatívny súbor údajov (pre vzorku č. 2), ktorý dobre ilustruje najtypickejšie typy udalostí súčasnej histórie programov. Medzi aktivistami tematické oblasti Výber takejto reprezentatívnej sady je úplne možný. Napríklad optimalizácia z profilovania je uprednostňovaná predajcami DBMS.

Optimalizácie a opätovné zoznamy sú teda vo všeobecnosti umiestnené na generický typ. Vygenerovaný kód pobeží na všetkých rôznych procesoroch rodiny (napríklad v prípade 32-bitovej architektúry - na všetkých nižších procesoroch: Intel Pentium-III, Pentium 4 vrátane jadra Prescott, Intel Pentium M). Nechýba ani optimalizácia pre konkrétny procesor.

Optimalizácie zamerané na konkrétny procesor: -QxK (Pentium-III; výber príkazov SSE, funkcie mikroarchitektúry), -QxW a -QxN (Pentium 4; výber príkazov SSE a SSE2, funkcie mikroarchitektúry), -QxB (Pentium M; výber príkazov SSE a SSE2, funkcie mikroarchitektúry), QxP (Prescott; výber príkazov SSE, SSE2 a SSE3, funkcie mikroarchitektúry). IN tomuto chlapovi Kód vygenerovaný s rôznymi takýmito možnosťami je možné spustiť na iných zástupcoch radu procesorov (napríklad kód -QxW môže viesť k tomu, že sa v systéme založenom na procesore Intel Pentium-III spustia neplatné príkazy). Alebo to nebude fungovať s maximálnou účinnosťou (napríklad kód -QxB na procesore Pentium 4 prostredníctvom funkcií v mikroarchitektúre). S takýmito možnosťami je možné použiť rôzne knižnice, ktoré sú optimalizované pre konkrétny procesor a špecifický príkazový systém. Aby sa kontrolovalo, či sa kód vykonáva na cieľovom procesore, je implementovaný mechanizmus odoslania (cpu-dispatch): kontroluje procesor v čase vykonávania programu. V niektorých situáciách môže alebo nemusí byť tento mechanizmus ovplyvnený. V prípade stagnácie opcie Qax (KWNP) bude dispečing spustený okamžite. V tomto prípade sa vygenerujú dve verzie kódu: optimalizované pre konkrétny procesor a „generické“, výber sa uskutoční v čase spustenia programu. Pri väčšej veľkosti kódu teda môžete dosiahnuť spustenie programu na všetkých procesoroch v rade a optimálne spustenie na cieľovom procesore. Ďalšia možnosť spočíva v optimalizácii kódu pod prvým zástupcom linky a zodpovedajúceho kódu na rovnakých procesoroch. Napríklad kód QxN je možné nainštalovať na Pentium 4 s jadrom Northwood alebo Prescott. Veľkosť kódu sa nezväčší. 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 nie je ohrozený a nevyužíva výhody mikroarchitektúry) s optimálnym výkonom na Northwood. Pre procesory s architektúrou IA-64 existujú aj takéto možnosti. V súčasnosti existujú dva: -G1 (Itanium) a -G2 (Itanium 2; voliteľné).

Nižšie uvedený graf (obrázok 5) zobrazuje zrýchlenie (jedno sa považuje za prednú časť - súhrn akéhokoľvek zrýchlenia) ako výsledok rôznych optimalizácií nadmernej optimalizácie (a samotné -O3 -Qipo -Qprof_use -Qx(N,P) ) na procesore a Prescott zaplatil za zamovchuvannyam (-O2). Prístup -QxP pomáha v niektorých situáciách rýchlo odstrániť rýchlosť z QxN. Najrýchlejší prístup je dostupný v dodatku 168.wupwise, ktorý už bol uhádnutý v prednej časti (za účelom intenzívnej optimalizácie komplexnej aritmetiky s príkazmi SSE3).


Malyunok 5


Obrázok 6 nižšie ukazuje výkon (niekedy) rýchlosti kódu robota s optimálnymi úpravami v porovnaní s úplne neoptimalizovaným kódom (-Od) na procesoroch Pentium 4 a Itanium 2 Je vidieť, že Itanium 2 má oveľa silnejšie držanie výhody optimalizácie. Platí to najmä pre výpočty s pohyblivou rádovou čiarkou (FP), kde je pomer približne 36-násobný. Výpočet s pohyblivou rádovou čiarkou je silnou stránkou architektúry IA-64, ale vyžaduje najefektívnejšie úpravy kompilátora. Odobratie ziskov z produktivity sa vypláca za tvrdú prácu vynaloženú na ich hľadanie.


Obrázok 6. Zrýchlenie, keď sú najkratšie možnosti optimalizácie nastavené na SPEC CPU200


Kompilátory Intel podporujú špecifikáciu OpenMP od Galuzeva na vytváranie viacvláknových programov. Podporované sú explicitné (možnosť -Qopenmp) a automatické (-Qparallel) režimy paralelizácie. V tomto explicitnom režime je program vysoko v súlade so štandardom OpenMP pre jeho správnu a efektívnu implementáciu. V prípade automatickej paralelizácie má kompilátor dodatočnú požiadavku týkajúcu sa analýzy programového kódu. Z týchto dôvodov je automatická paralelizácia v súčasnosti účinná len pri jednoduchých kódoch.

Graf pre Baby 7 ukazuje zrýchlenie explicitnej paralelizácie na inžinierskom (predprodukčnom) systéme založenom na procesore Intel Pentium 4 (Prescott) podporovanom technológiou Hyper-Threading: 2,8 GHz, 2 GB RAM, 8K L1-Cache, 51 2K L2-Ca. Testovacia súprava je testovaná podľa SPEC OMPM2001. Tento typ je orientovaný na malé a stredné SMP systémy, spotreba pamäte je do dvoch gigabajtov. Programy boli skompilované pomocou Intel 8.0 C/C++ a Fortran s dvomi sadami možností: -Qopenmp -Qipo -O3 -QxN a -Qopenmp -Qipo -O3 -QxP a každý program bol spustený s povolenou technológiou Hyper-Threading. Výrazné grafické zrýchlenie je normalizované pre výkon jednovláknovej verzie pomocou technológie Hyper-Threading.


Obrázok 7: Program 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 produktivitu, keď je povolená technológia Hyper-Threading. V jednom z programov (312.plávanie) sa predíde zálohám. Tu je fakt: tento doplnok vyznačuje sa vysokou úrovňou skladovania priepustná kapacita Pamäť.


Takže v dôsledku SPEC CPU2000 program wupwise výrazne profituje zo stagnácie optimalizácie pod Prescottom (-QxP).


1.2 Optimalizácia programu zo zmien vykonaných vo výstupnom texte a diagnostike kompilátora

#pragma ivdep (kde ivdep znamená ignorovanie vektorových závislostí) sa umiestni pred programové slučky, aby oznámil kompilátoru, že v strede nie sú žiadne údaje. Táto nápoveda je spôsobená skutočnosťou, že ak kompilátor (na základe analýzy) konzervatívne prenesie, aké takéto výskyty môžu byť (ak kompilátor v dôsledku analýzy môže dospieť k záveru, že výskyt je platný, „návod“ je nie je užitočné dii), potom autor kódu vie, že takéto vklady nie je možné získať späť. S dodatočnou pomocou môže kompilátor vygenerovať efektívny kód: automatickú vektorizáciu pre IA-32 (víťazstvo vektorových príkazov zo sád MMX\SSE\SSE2\SSE3 pre programové slučky v C/C++ a Fortran; dozvedieť sa o tom viac S touto technológiou je to možné napríklad urážať štatistiky v Intel Technology Journal), softvérová konverzia (SWP) pre IA-64

#pragma vector vždy stagnuje, takže kompilátor zmení svoje rozhodnutie o neefektívnosti vektorizácie cyklu (automatickej pre IA-32 aj SWP pre IA-64) na základe analýzy rôznych charakteristík robota na koža tsii.

#pragma vektor vždy.

#pragma vector aligned je upravený tak, aby povedal kompilátoru, aké údaje sa upravujú v slučke, zarovnané do 16-bajtového kordónu. To vám umožňuje generovať efektívnejší a/alebo kompaktnejší (prostredníctvom množstva revízií v čase vykonávania) kód.

#pragma vector unaligned dіє, zvorotne #pragma aligned. V tejto situácii je ťažké hovoriť o zvýšení produktivity, ale môžete použiť kompaktnejší kód.

#pragma distribute bod sa vloží do stredu programovej slučky, takže kompilátor môže rozdeliť slučku (distribúciu slučky) z tohto bodu do mnohých ďalších. Takúto “nápovedu” možno použiť napríklad vtedy, ak kompilátor automaticky nevektorizuje výstupnú slučku (napríklad cez dátové úložisko, ktoré nemožno ignorovať pre samozrejmosť #pragma ivdep), potom jačiu kožu (alebo časť) z Novo vytvorené slučky je možné efektívne vektorizovať.

#pragma loop count (N) je nastavený tak, aby kompilátoru povedal, že počet iterácií v slučke nad N je najdôležitejší. Táto informácia pomáha pri rozhodovaní o najefektívnejšej optimalizácii pre tento cyklus (napríklad, či potrebujete spustiť feeder, alebo potrebujete obsluhovať SWP alebo automatickú vektorizáciu, alebo potrebu vikorizácie príkazov na opätovný výber softvérových dát, ...)

"Hint" _assume_aligned(p, základňa) je nastavený tak, aby povedal kompilátoru, že oblasť pamäte spojená s indikátorom p je zarovnaná medzi základom = 2^n bajtov.

Nie je to ďaleko najnovší zoznam rôzne „nápovedy“ pre kompilátor, ktoré môžu výrazne ovplyvniť efektivitu generovaného kódu. Napájanie môže byť vypnuté, čo znamená, že kompilátor potrebuje nápovedu.

Najprv môžete použiť diagnostiku kompilátora na základe spätnej väzby, ktorú poskytuje programu. Napríklad, ak je vybratá možnosť -Qvec_reportN (kde N sa mení z 0 na 3 a označuje úroveň podrobností), môžete zrušiť správu o automatickej vektorizácii. Programátori budú mať prístup k informáciám o tom, ktoré cykly boli vektorizované a ktoré nie. V negatívnom prípade kompilátor uvádza dôvody, prečo vektorizácia zlyhala. Je prijateľné, že dôvodom bol konzervatívny prenos nevybavených údajov. Ak je program spievania, je nemožné, aby meškanie vyšlo, je možné stagnovať #pragma ivdep. Podobné (v porovnaní s Qvec_reportN pre IA-32) možnosti kompilátora sú poskytované na IA-64 na monitorovanie prítomnosti a účinnosti SWP. Vo všeobecnosti kompilátory Intel ponúkajú širokú škálu možností na diagnostiku optimalizácií.

Alternatívne možno na vyhľadávanie „univerzity“ v kóde z hľadiska produktivity použiť iné softvérové ​​produkty (napríklad profiler Intel VTune). 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, ktorý vygeneruje kompilátor.


Malyunok 8


Zobrazené Vishche pre dieťa 8 krvný proces optimalizácia programov pomocou dodatočného kompilátora (a iných softvérové ​​produkty) Intel používa Fortran pre architektúru IA-64. Ako zadok je regionálna predpovedná schéma na 48 rokov Ruského hydrometeorologického centra považovaná za neadiabatickú (dočítate sa o nej napr. v tomto článku. Vypracovanie článku zaberie asi 25 minút za hodinu a po hodinu boli napísané hodnoty zmien a ako bod dôrazu na produktivitu kódu v systéme Cray-YMP Nezmenený kód s možnosťami kompilátora po spracovaní (-O2) ukazuje 20% nárast produktivity na viacprocesorovom systéme založenom na procesore Intel Itanium 2 900 MHz viedlo k zrýchleniu ~2, a to hlavne na spracovanie SWP a opätovné načítanie dát Analýza pre dodatočnú diagnostiku kompilátora a profilovača Intel VTune. akcie „univerzitného miesta“, kompilátor napríklad nedokončil prenos programu niekoľkých dôležitých cyklov pre produktivitu, keď sa naučil od hviezdy, ktorá prenáša nevybavené údaje Malé zmeny v kóde (smernica ivdep) pomohli dosiahnuť VTune dokázal pomocou dodatočných profilov zistiť (a kompilátor potvrdil), že kompilátor nezmenil poradie vnorených slučiek (výmena slučiek) pre väčšiu efektívnosť aktívnej vyrovnávacej pamäte vikoristannya. Dôvodom opätovného vzniku boli konzervatívne predpoklady o ukladaní údajov. V texte programu boli vykonané zmeny. Výsledkom bolo 4-násobné zrýchlenie oproti pôvodnej verzii. Implementácia explicitnej paralelizácie dodatočných direktív k štandardu OpenMP a následný prechod na systém s vysokofrekvenčnými procesormi umožnili zrýchliť hodinový chod na menej ako 8-násobok, čo poskytlo viac ako 16-násobne vyššiu rýchlosť. v porovnaní s pôvodnou verziou.

Intel Visual Fortran

Intel Visual Fortran 8.0 má front-end (časť kompilátora, ktorá označuje konverziu programov z textu do interných komponentov kompilátora, čo je veľa vecí, ktoré nespočívajú ani vo vašom programovaní, ani v celý stroj) i) technológie kompilátora CVF a komponenty kompilátora Intel, zodpovedné za optimalizáciu písania a generovanie kódu.


Malyunok 9




Malyunok 10


Obrázky 9 a 10 zobrazujú grafy úrovne produktivity Intel Visual Fortran 8.0 s Najnovšia verzia Intel Fortran 7.1 je jedným z najpopulárnejších kompilátorov v Galilee, ktoré fungujú pod operačnými systémami rodiny Windows a Linux. Na zabezpečenie konzistentnosti boli použité testy, ktorých výstupné texty zodpovedajú normám F77 a F90, dostupné na stránke http://www.polyhedron.com/. Na ktorej stránke sú dostupné podrobnejšie informácie o úrovni produktivity kompilátorov (Win32 Compiler Comparisons -> Fortran (77, 90) Execution Time Benchmarks and Linux Compiler Comparisons -> Fortran (77, 90) Execution Time Benchmarks): viac rôznych počítačov sú zobrazené ilátory, viac geometricky Priemer je založený na individuálnych výsledkoch kožných testov.

V predchádzajúcom čísle časopisu sme diskutovali o produktoch z rodiny Intel VTune Performance Analyzer – nástrojom na analýzu výkonu, ktoré si medzi dodávateľmi softvéru získali zaslúženú popularitu a sú viditeľné v kóde. doplnenia tímu To spotrebúva veľa zdrojov procesora, čo dáva vývojárom príležitosť identifikovať a využívať potenciálne objavy spojené s podobnými časťami kódu, ktoré urýchľujú proces vývoja doplnkov. Podstatné však je, že produktivita doplnkov do značnej miery závisí od toho, ako efektívne sú kompilátory, ktoré stagnujú pri svojom vývoji a aké hardvérové ​​funkcie je možné využiť pri generovaní strojového kódu.

Zostávajúce verzie kompilátorov Intel Intel C++ a Intel Fortran pre OS Windows a Linux vám umožňujú dosiahnuť zvýšenie produktivity v programoch pre systémy založené na procesoroch Intel Itanium 2, Intel Xeon a Intel Pentium 4 až o 40 % v porovnaní s inými kompilátormi z iných výrobcovia pre rakhunok vikoristannya takých zvláštností účel procesorov, ako je technológia Hyper-Threading.

Funkcie spojené s optimalizáciou kódu pre túto rodinu kompilátorov zahŕňajú stohovanie zásobníka pre operácie s pohyblivou rádovou čiarkou, interprocedurálnu optimalizáciu (IPO), aplikácia je striktne založená na profile programu (Profile Guided Optimization, PGO), údaje sa zhromažďujú pred (Predbežné načítanie údajov ), ktorý vám umožňuje eliminovať oneskorenia spojené s prístupom do pamäte, podporuje charakteristické vlastnosti procesorov Intel (napríklad rozšírenie pre streamovanie dát na spracovanie Intel Streaming SIMD Extensions 2, charakteristické pre Intel Pentium 4), automatickú paralelizáciu kódu , tvorba programov, očíslovaných na kіlkoh odlišné typy procesorov pri optimalizácii jedného z nich, možnosť „prorokovať“ dopredný kód (predikcia vetvy), rozšírená podpora práce s vláknami wiki.

Je dôležité, že kompilátory Intel sú dostupné od popredných spoločností ako Alias/Wavefront, Oracle, Fujitsu Siemens, ABAQUS, Silicon Graphics, IBM. Podľa nezávislého testovania viacerých spoločností produktivita kompilátorov Intel výrazne prevyšuje produktivitu kompilátorov iných výrobcov (napríklad http://intel.com/software/products/compilers/techtopics/compiler_gnu_perf.pdf).

Pozrime sa bližšie na špeciálne funkcie zostávajúce verzie Kompilátory Intel pre desktop a server 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ý nedávno, ktorý umožňuje dosiahnuť vysokú úroveň optimalizácie kódu pre procesory Intel Itanium, Intel Itanium 2, Intel Pentium 4 a Intel Xeon, ako aj pre procesor Intel Pentium M, ktorý je proprietárnu technológiu іу Intel Centrino, ktorá je určená na ukladanie v mobilných zariadeniach.

Kompilátor je úplne nekompetentný kvôli vývojovým metódam Microsoft Visual C++ 6.0 a Microsoft Visual Studio .NET: môžu to mať dôsledky v rôznych vývojových prostrediach.

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ý na streamovacej platforme, vám umožňuje optimalizovať kód pre procesory Intel Itanium, Intel Itanium 2, Intel Pentium 4 a Intel Xeon, Intel Pentium M.

Tento kompilátor je úplne nepochopiteľný kvôli spôsobu, akým vyvíja Microsoft Visual C++ 6.0 a Microsoft Visual Studio .NET, takže ho možno použiť v rôznych vývojových prostrediach. Okrem toho vám tento kompilátor umožňuje vyvíjať 64-bitové programy pre operačné systémy, ktoré je možné skompilovať na procesoroch Itanium/Itanium 2 s prosím pomôžte Microsoftu Visual Studio na 32-bitovom procesore Pentium bez 64-bitového kompilátora Intel Fortran. Keď je kód vyladený, tento kompilátor vám umožňuje vytvárať prispôsobovače pre platformu Microsoft .NET.

Ak je nainštalovaný produkt Compaq Visual Fortran 6.6, výstupný kompilátor môžete nahradiť kompilátorom Intel Fortran Compiler 7.1, ako aj kompilátory podobné výstupnému kódu.

Intel Fortran Compiler 7.1 pre Windows je plne v súlade s normou ISO Fortran 95 a podporuje vytváranie pokročilých programov, ktoré dokážu skladať kód v dvoch jazykoch – C a Fortran.

Kompilátory pre platformu Linux

Intel C++ Compiler 7.1 pre Linux

Ďalší kompilátor, ktorý vrhá svetlo na vec, Intel C++ Compiler 7.1 pre Linux, vám umožňuje dosiahnuť vysokú úroveň optimalizácie pre kód pre procesory Intel Itanium, Intel Itanium 2, Intel Pentium 4, Intel Pentium M Tento kompilátor je úplne úžasný GNU C kompilátor na rovnakej úrovni ako výstupný kód a objektové moduly, čo bez dodatočných nákladov umožňuje migráciu na nové doplnky vytvorené pomocou GNU C. operačných systémov SCO, skorších verzií Sun Solaris a tak ďalej znamená väčšiu užitočnosť kompilátora gcc 3.2 na ako duálny kód. Zistíte, že pomocou kompilátora Intel C++ Compiler 7.1 pre Linux môžete prekompilovať jadro Linuxu a vykonať niekoľko menších zmien vo výstupnom 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 procesory 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 rovnakej úrovni ako výstupný kód. pracovať pre jeho pomoc, výtvory s pomocou Compaq Visual Fortran, čím sa zvyšuje ich produktivita.

Okrem toho je kompilátor úžasný s takými nástrojmi, ktoré predajcovia chcú, ako je editor emacs, nástroj gdb a nástroj make package.

Ako verzia tohto kompilátora pre Windows je Intel Fortran Compiler 7.1 pre Linux úplne v súlade s normou ISO Fortran 95 a podporuje vytváranie pokročilých doplnkov na nahradenie kódu dvoma jazykmi - C a Fortran.

Je obzvlášť pozoruhodné, že najväčší príspevok k vývoju kompilátorov Intel pre zaistenie boli špecialisti z ruského centra vývoja softvéru Intel v Nižnom Novgorode. Ďalšie informácie o kompilátoroch Intel možno nájsť na webovej stránke spoločnosti Intel na adrese www.intel.com/software/products/.

Ďalšia časť tohto článku bude venovaná kompilátorom Intel, ktoré vytvárajú programy pre mobilné zariadenia.

Aplikácie skutočného zla: kompilátor Intel C++ 7.0 - archívy WASM.RU

...kompilátor Intel C++ 7.0 sa dostal do slepej uličky noci a tu dosiahol piatu priečku. Chcel som intenzívne spať, ale bolo to také bolestivé: keď boli sily zničené, boli tiež roztrhané. Viryschli, nedostávam rovnaký čas ako Iz, nezaspím celý jeden, ja, keď som zakričal novú konzolu, bol som presunutý do Systems Zmіnni Temp I TMP do katalógu C: \ TEMP, náš Vydkuruch , ktorý to obscénne tlačí izhi izhnstaler w_cc_p_7.0.073.exe v príkazový riadok(potreba nainštalovaných meniteľných TEMP a TMP je vysvetlená skutočnosťou, že Windows 2000 musí označovať veľmi hlboký adresár príloh a inštalačný program Intel C++ – a nielen VIN – nepodporuje cesty takej veľkej veľkosti iru ).

Okamžite bolo jasné, že bezpečnostná politika bola radikálne prepracovaná a platnosť licencie bola kontrolovaná už vo fáze inštalácie programu (vo verzii 5.x bola inštalácia dokončená bez problémov). Dobre, vydajme príkaz dir a zaujímalo nás, proti čomu musíme bojovať:

    Namiesto 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

    6. 5. 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 Crellnotes.htm

    19.03.2002 14:28 4 635 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 886571008 voľných bajtov

Áno! Inštalačný program setup.exe zaberá asi štyridsať kilobajtov. Oveľa lepšie!

V takejto situácii je nepravdepodobné, že sa vyhnete vážnej obrane, ale ak je to tak, tento kritický súbor nemožno podrobne analyzovať - ​​až po zostávajúci bajt zoznamu disassemblera. Nie je však pravdou, že samotný suchý kód nasadenia je v setup.exe, môže byť umiestnený na inom mieste, napríklad... ChkLic.dll/ChkLic.exe, ktorý zaberá menej ako sedemsto kilobajtov. Strive, čo je toto za ChkLic? Čo je zlé na Skontrolovať licenciu?! Hmm, chalani z Intelu majú evidentne vážne problémy so zmyslom pre humor. Bolo by lepšie, keby tento súbor nazvali „Hack Me“! Garazd, súdiac podľa skutočnosti, ChkLic je ten istý FLEX lm a je, a už sme s ním študovali (div. "Intel C++ 5.0 Compiler") a zdá sa, že je to približne to isté.

    Vydávame príkaz „dumpbin /EXPORTS ChkLic.dll“ na sledovanie funkcií, ktoré sa exportujú, a je dôležité venovať pozornosť klávesnici, aby nespadla do stĺpcov:

  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!

Obrana exportuje len jednu funkciu z monštru CheckValidLicense. „Monsterly“ - skutočnosť, že funkcia, ktorá je mu priradená, sa stáva rozumnou vďaka svojmu názvu a zdá sa, že je schopná vydržať rozsiahlu analýzu kódu disassemblera. No, zabili všetok záujem... bolo by lepšie, keby ich exportovali v ordináli, alebo, pravdaže, nazvali ich nejakými menami typu DES Decrypt.

...zobudili sme sa! Garazd, obráťme sa na naše ovečky. Povedzme to logicky: keďže všetok mŕtvy kód sa nachádza priamo v ChkLic.dll (a súdiac podľa „dôležitej“ povahy ochrany je to pravda), potom celá „ochrana“ spočíva na kliknutí na CheckValidLicense v Setupe. exe a kontrola ním overeného výsledku. Takže pre „zlého“ stačí stratiť ChkLic.dll, znova zničiť funkciu ChekValidLicense... takže, úprimne povedané, prečo by sa to malo zmeniť? Presnejšie: aká je práve rotujúca hodnota, ktorá označuje úspešnú revíziu licencie? Nie, neponáhľajte sa s rozoberaním setup.exe na tento účel, pretože nie je toľko možných možností: buď FALSE alebo TRUE. Tipujete na TRUE? V istom zmysle je to logické, ale na druhej strane: prečo sme si mysleli, že funkcia CheckValidLicense overuje samotný znak úspechu operácie a nie opravný kód? Je možné motivovať dôvody inštalácie kompilátora: licenčný súbor sa nenašiel, súbor bol poškodený, platnosť licencie vypršala atď.? Pokúsime sa otočiť na nulu, ale ak sa cez to nedokážeme dostať, otočme jednotku.

Skontrolujeme... Funguje to! Bez ohľadu na platnosť licencie inštalatér bez dodania požadovaného výkonu inštaláciu ukončí! Ozhe, zakhist padol. Ach, neveríme, že je všetko také jednoduché a nechce sa nám tam sedieť, čumieť na monitor a sledovať dokončenie procesu inštalácie programu, ktorý inštalujeme na setup.exe s naším obľúbeným IDA. rozoberač. Prvá vec, ktorá vás udrie do očí, je prítomnosť CheckValidLicense v zozname importovaných funkcií. Možno je spustený súbor ChkLic.exe? Snažíme sa zistiť, čo sa deje medzi automaticky rozpoznanými riadkami: „~View аNames“, „ChkLic“... áno, chýbajú tu riadky „Chklic.exe“, potom sa objaví „Chklic.dll“. Áno, dáva zmysel, že knižnica ChkLic má záujem o explicitné prepojenie cez LoadLibrary. І prechod cez krížovo odoslanú správu potvrdzuje:

    Text:0040175D push offset aChklic_dll; lpLibFileName

    Text:00401762 zavolajte ds:LoadLibraryA

    Text:00401762; Som posadnutý ChkLic.dll ^^^^^^^^^^^^^^^^^^

    Text:00401762;

    Text:00401768 mov esi, eax

    Text:0040176A posunutie posunu a_checkvalidlic; lpProcName

    Text:0040176F push esi; hModule

    Text:00401770 zavolajte na ds:GetProcAddress

    Text:00401770; Odvodené z adresy funkcie CheckValidLicense

    Text:00401770;

    Text:00401776 cmp esi, ebx

    Text:00401778 jz loc_40192E

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

    Text:00401778;

    Text:0040177E cmp eax, ebx

    Text:00401780 jz loc_40192E

    Text:00401780; Keďže knižnica takúto funkciu nemá, potom inštaláciu opustíme

    Text:00401780;

    Text:00401786 push ebx

    Text:00401787 volajte eax

    Text:00401787; Kliknite na funkciu ChekValidLicense

    Text:00401787;

    Text:00401789 test eax, eax

    Text:0040178B jnz loc_4019A3

Text:0040178; Ak sa funkcia zmení na nenulovú, ukončíme inštalačný program

Je to neuveriteľné, ale toto je primitívny zakhista impulzov! Navyše nie je potrebný pôvodný súbor ChkLic.exe! A prečo sa snažíš dostať na internet? Ak sa pred rozprávaním rozhodnete uložiť distribúciu kompilátora (rešpektujte: nepovedal som „expand“), potom, aby ste ušetrili miesto na disku, môžete ChkLic.* vymazať: buď chýbajúci súbor setup.exe, ktorý ste sa predtým naučili ako sa k nim vrátiť, alebo jednoducho Po vytvorení svojho mocného ChkLic.dll, ktorý exportuje funkciu stdcall CheckValidLicence, vidím: int CheckValidLicence(int some_flag) ( return 0;)

Takže, kým sme o všetkom diskutovali, inštalátor dokončil inštaláciu kompilátora a úspešne dokončil svoju prácu. Ako dlho trvá spustenie kompilátora alebo sa všetko len spustí? Rýchlo ideme dole hierarchiou vnorených priečinkov, nájdeme icl.exe, ktorý sa nachádza v adresári bin, stlačíme ho... Kompilátor sa prirodzene nespustí, spolieha sa na tie, ktoré „icl: error: without any I can Nepokračujem v mojej životnej robote.

Ukazuje sa, že Intel ustrnul na bohatej obrane a prvý level sa javil ako neslušná obrana proti hlupákom. Dobre! Prijmeme toto kliknutie a skrytí v popredí automaticky vyhľadáme súbor LMGR*.DLL v adresári kompilátora. Marno! Ako často sa tu takýto súbor neobjaví, ale je jasné, že icl.exe získal veľa peňazí, presahujúcich šesťsto kilobajtov... Stop! Prečo nie je súprava kompilátora pre ten istý FLEX lm prepojená so statickými rozloženiami? Je to úžasné: v Intel C++ 5.0 bola veľkosť lmgr327.dll a icl.exe 598 KB a zároveň samotný icl.exe zaberá 684 KB. Čo sa týka zlepšenia prirodzeného veku „obezity“, čísla veľmi dobre konvergujú. Takže, FLEX lm! Oh, oh!

A teraz, bez symbolických názvov funkcií, bude lamati zakhist oveľa dôležitejšie... Nerobme však paniku skôr! Len pokojne premýšľajme! Je pravdepodobné, že vývojový tím úplne prepísal všetok kód, ktorý interaguje s touto „obálkovou“ ochranou. Koniec koncov, „sofistikovanosť“ sa skončila zmenou typu rozloženia. A ak áno, potom je šanca na zničenie programu, ako predtým, veľká!

  • Pamätajúc si, že keď bol mŕtvy kód naposledy umiestnený v hlavnej funkcii, po zadaní jeho adresy sme jednoducho vložili bod a po skontrolovaní editora sme hlúpo sledovali kód, striedavo sa pozerali na editor a potom na okno vednya program: chi nie Ukázal si sa tam s láskavosťou? V tomto prípade všetky mentálne prechody, ktoré nás napadli, si označíme na okraj papiera (alebo si to vložíme do pamäte, ako chcete), pričom nezabudneme naznačiť a označiť kožný mentálny prechod I. .. Stop! Práve sme sa s vami začali rozprávať a už sa objavila roztomilá správa! OK dobre! Človek bude žasnúť nad tým, aký druh mentálneho prechodu bol svedkom. Naše záznamy ukazujú, že zostávajúci prechod, ktorý bol stanovený, je mentálny prechod JNZ, roztashov pre adresu 0401075h a „reaguje“ na výsledok, otočený postupom sub_404C0E:

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

    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 rovnaký postup, ktorý zahŕňa kontrolu platnosti licencie. Ako to prekabátiť? No, je tu veľa možností... V prvom rade môžete namiesto sub_404C0E premyslene a svedomito analyzovať vysvetlenie: čo a ako overujete. Prípadne môžete jednoducho nahradiť JNZ short loc_40107F za JZ short loc_40107F alebo typu NOP, NOP. Po tretie, príkaz na kontrolu výsledku otáčania TEST EAX, EAX možno previesť na príkaz na nastavenie nuly: XOR EAX, EAX. Vo štvrtom môžete stratiť samotný sub_404C0E, takže znova vynulujete. Neviem ako vy, ale mne sa najviac hodí metóda číslo tri. Zmeníme dva bajty a spustíme kompilátor. Keďže systém nemá žiadne iné overenia svojho „stavu licencie“, program si to okamžite vyžiada. (Ako si pamätáme, piata verzia mala dve takéto revízie). Je to nechutné, ale kompilátor už neklame a pracuje! Je pravda, že ako sa ukázalo, distribútori nitrochi obranu neposilnili, ale v skutočnosti ju oslabili! Chris Kaspersky

  • Kompilátory Intel C++ a Fortran a knižnica MKL

    Okrem štandardných kompilátorov GNU pre Linux sú na klastroch výpočtového komplexu NDC 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 dôležitých možností a nastavení pre tieto kompilátory, ako aj ich hlavným funkciám kompilátorov GNU. Stránka je orientovaná hlavne na korešpondenčné zoskupenia NDVTs MDU a môže byť zameraná aj na iné ruské pobočky. Toto nemá vplyv na napájanie spojené s kompiláciou pre platformu IA-64.

    Knižnica Intel je tiež nainštalovaná na všetkých klastroch Knižnica jadrovej matematiky(MKL) Verzia 8.0.2. Knižnica sa nachádza v /usr/mkl. Veľmi si vážime tých, ktorí majú v katalógu lib dostupné podadresáre 32, 64 a em64t. V klastri Ant je potrebné vybrať knižnice z podadresára em64t a v iných klastroch z podadresára 32 Všetku potrebnú dokumentáciu a aplikácie si môžete stiahnuť z adresára /usr/mkl/doc.

    Potrebujete nové kompilátory?

    Potreba nových vinylových kompilátorov predovšetkým a) na podporu programovania môjho Fortran 90 a tiež b) na väčšiu optimalizáciu programu Fortran, ktorú zabezpečí kompilátor g77, preklad vikory do jazyka a následne kompiláciu s pomoc gcc.

    S kompilátormi PGI (Portland Group) sme spokojní, ale vývojárska spoločnosť je ochotná dodať ich do Ruska.

    Ako si na to zvyknúť?

    Kompilátory Intel vyžadujú dodatočné príkazy icc(C alebo C++), icpc(C++). ifort(Fortran 77/90). Príkazy mpicc, mpiCC a mpif77 na kompiláciu a skladanie programov MPI sú tiež nakonfigurované pomocou kompilátorov Intel.

    Je tiež možné použiť GNU kompilátory ako mpigcc, mpig++ a mpig77 (Fortran 90 nie je podporovaný).

    Vstupné súbory

    Na úpravu súborov a rozšírenia .cppі .cxxúctivý výstupné texty môj C++, súbory s príponami .c- výstupné texty môjho C a kompilátor icpc tiež kompiluje súbory .c ako výstupné texty C++.

    Súbory s príponami .f, .ftnі .pre sú rozpoznávané ako výstupné texty mojím Fotranom, s pevnou záznamovou formou a súbormi .fppі .F dodatočne prešiel cez preprocesor Movi Fortran. Súbory z prípon .f90 Rešpektujte výstupné texty Fortranu 90/95 v čistej forme. Môžete explicitne nainštalovať pevný alebo voľný formulárový záznam v programe Fortran s ďalšou možnosťou -FIі -FR samozrejme.

    Súbory z prípon .s uznávaný ako môj kód assembleru pre IA-32.

    Charakteristika kompilátorov Intel

    Tu uvádzame charakteristiky kompilátorov Intel, ako ich uvádza distribútor korešpondenta s rôznymi komentármi.

    • Výrazná optimalizácia
      Možno je teda potrebné rešpektovať optimalizáciu kódu na vyššiu úroveň. V prvom rade dôjde k rôznym zmenám cyklu, aby bolo možné všetky kompilátory prelomiť s väčším či menším úspechom.
    • Optimalizácia výpočtov s pohyblivou rádovou čiarkou
      Možno je to kvôli nám vopred maximálne vykoristannya príkazov implementovaných na úrovni hardvéru
    • Interprocedurálne optimalizácie
      tobto. globálna optimalizácia všetkých programov, s výnimkou primárnej optimalizácie, ktorá je obmedzená na kód špecifických funkcií
    • Optimalizácia na základe profilov
      tobto. schopnosť spustiť program v testovacom režime, zbierať údaje z hodiny prechádzania týmito a inými fragmentmi kódu uprostred funkcie, ktorá sa často analyzuje, a potom tieto údaje analyzovať na optimalizáciu
    • Podpora inštrukčného systému SSE na procesoroch Pentium III
      Poznámka: Pri výpočtových úlohách sú najzaujímavejšie príkazy SSE2. vektorové príkazy nad 64-bitovými rečovými číslami, ale sú podporované iba v procesoroch Pentium 4, z ktorých ešte žiadny nemáme
    • Automatická vektorizácia
      tobto. Opäť poznám výber príkazov SSE a SSE2, ktoré kompilátor vkladá automaticky
    • Podpora OpenMP pre programovanie na SMP systémoch
      Na klastri sa odporúča použiť rozhranie MPI; OpenMP nie je široko distribuovaný v klastri a takéto experimenty ešte neboli vykonané; Alebo možno môžete použiť knižnice (BLAS a iné) paralelne s pamäťou.
    • Zber dát
      tobto. Je možné, že príkazy bude potrebné pridať do pamäte v dátovej vyrovnávacej pamäti, čo bude potrebné približne za hodinu
    • "Dispečingový" kód pre rôzne procesory
      tobto. schopnosť generovať kód pre rôzne procesory v jednom súbore, čo vám umožňuje využiť výhody nových procesorov na dosiahnutie najvyššej produktivity na nich a zároveň ušetriť dvojnásobnú zložitosť programov iba so skoršími procesormi; V našom klastri to nie je relevantné, pretože Vyberú sa iba procesory Pentium III a prenos a spustenie programov zostavených v klastri na iných počítačoch sa neprenesie.

    Základné možnosti kompilátora

    Tými najdôležitejšími sú samozrejme možnosti optimalizácie kódu. Väčšina možností nie je dostupná pre kompilátory C++ a Fortran. Viac nahlasit popis možnosť v Anglomovskih kvóty Koristuvach.

    Úrovne optimalizácie
    MožnosťPopis
    -O0Vimic optimalizácia
    -O1 alebo -O2Základná optimalizácia výkonu robota. Online vkladanie funkcií knižnice je vypnuté. Pre kompilátor 3++ poskytujú tieto možnosti rovnakú optimalizáciu pre kompilátor Fortran, možnosť -O2 je kratšia, pretože zahŕňa aj odvíjanie cyklov.
    -O3Väčšia optimalizácia vrátane opätovného vytvorenia slučky, opätovného výberu údajov a poškodenia OpenMP. Pri niektorých programoch nemusí byť zaručená zvýšená produktivita. -O2. Súčasne je možné využiť možnosti vektorizácie -xKі -xW.
    -rozvinúť[n]Zahŕňa cykly odstreďovania až n-krát.
    Optimalizácia pre konkrétny procesor
    MožnosťPopis
    -tpp6Optimalizácia pre procesory Penitum Pro, Pentium II a Pentium III
    -tpp7Optimalizácia pre procesory Penitum 4 (táto možnosť je povolená pre kompilátor IA-32)
    -xMGenerujte kód pomocou rôznych rozšírení MMX špecifických pre procesory Pentium MMX, Pentium II a novšie
    -xKGenerovanie kódu pomocou rôznych rozšírení SSE špecifických pre procesory Pentium III
    -xWGenerovanie kódu pomocou rôznych rozšírení SSE2 špecifických pre procesory Pentium 4
    Interprocedurálna optimalizácia
    -ipV strede jedného súboru je povolená interprocedurálna optimalizácia. Ako špecifikovať túto možnosť -ip_no_inlining, potom sa aktivuje funkcia online vkladania.
    -ipoJe povolená interprocedurálna optimalizácia medzi rôznymi súbormi
    Optimalizácie z rôznych profilov
    -prof_genVygeneruje sa „profilovací“ kód, ktorý sa potom použije na profilovanie. zber údajov o frekvencii prechodu týchto a iných miest v programe
    -prof_useOptimalizácia sa vykonáva na základe údajov zozbieraných vo fáze profilovania. Vnímanie je možné použiť súčasne pomocou možnosti interprocedurálnej optimalizácie -ipo.
    Rozparaleluvannya pre SMP systémy
    - openmpUmožňuje podporu pre štandard OpenMP 2.0
    - paralelneJe aktivovaná automatická paralelizácia cyklov

    Produktivita

    Na základe výsledkov testov SPEC CPU2000 zverejnených na serveri ixbt.com boli kompilátory Intel verzie 6.0 takmer totožné s kompilátormi gcc verzie 2.95.3, 2.96 a 3.1 PGI verzie 4.0.2. Tieto testy boli vykonané v roku 2002 na počítači Procesor Pentium 4/1,7 GHz a OS RedHat Linux 7.3.

    Na základe výsledkov testov vykonaných spoločnosťou Polyhedron sa zistilo, že kompilátor Intel Fortran verzie 7.0 je veľmi porovnateľný s inými kompilátormi Fortran 77 pre Linux (Absoft, GNU, Lahey, NAG, NAS, PGI). V niektorých testoch je kompilátor Intel mierne horší ako kompilátory Absoft, NAG a Lahey. Tieto testy boli vykonané na počítači s procesorom Pentium 4/1,8 GHz a OS Mandrake Linux 8.1.

    Kompilátory Intel verzie 9.1 tiež porazili kompilátor gcc v produktivite a vykazujú produktivitu na rovnakej úrovni ako Absoft, PathScale a PGI.

    Budeme veľmi vďační týmto prispievateľom a čitateľom, ak nám pošlú údaje týkajúce sa výberu kompilátora (GCC alebo Intel) a možnosti optimalizácie pre rýchlosť práce na ich reálnych úlohách.

    Knižnice

    Kompilátor Movi C je založený na runtime knižnici vyvinutej ako súčasť projektu GNU ( libc.a).

    S kompilátorom Intel C++ sa dodávajú nasledujúce knižnice:

    • libcprts.a- runtime knižnica softvéru Movi C++ vyvinutá spoločnosťou Denkumware.
    • libcxa.a- Dodatočná runtime knižnica pre vývoj C++ Intel.
    • libimf.a- knižnica matematických funkcií vyvinutá spoločnosťou Intel, vrátane optimalizovaných a vysoko presných implementácií trigonometrických, hyperbolických, exponenciálnych, špeciálnych, komplexných a iných funkcií (uvádzaný zoznam funkcií y).
    • libirc.a- runtime podpora pre profilovanie (PGO) a „odosielanie“ kódu závisí od procesora (úžasnejšie).
    • libguide.a- Implementácia OpenMP.

    Niektoré zo statických knižníc boli prepísané, ale väčšina z nich je tiež dynamická. pripojené pri štarte, možnosti ( .takže).

    Kompilátor Fortran poskytuje nasledujúce knižnice: libCEPCF90.a, libIEPCF90.a, libintríny.a, libF90.a, tiež vikorista knižnica matematických funkcií libimf.a.

    Skladanie zabaleného súboru

    Knižnice môžu byť pripojené staticky (v čase zberu) alebo dynamicky (v čase spustenia programu). Dynamický prístup vám umožňuje zmeniť veľkosť kompilovaného súboru, umožňuje vám oddeliť rovnakú kópiu knižnice v pamäti, pre ktorú ju musíte nainštalovať na uzol kože, kde sa budú spúšťať programy, nová sada dynamiky im knižnice vikoristuyutsya.

    Ak ste teda nainštalovali kompilátor Intel na svoj počítač so systémom Linux a chcete spustiť zhromaždené súbory na iných počítačoch, musíte buď použiť staticky kompilovaný kompilátor (čo je jednoduchšie), alebo skopírovať dynamické knižnice Intel (nazývané čaj z adresárový pohľad /opt/intel/kompilátor70/ia32/lib) v jednom z adresárov, reorganizovaných zo súboru /etc/ld.so.conf, ako aj podriadky o zabezpečení novej sady dynamických knižníc GNU/Linux sú nainštalované na týchto strojoch.

    Výsledkom je, že všetky knižnice Intel (okrem libcxa.so) sú pripojené staticky a všetky systémové knižnice Linuxu a knižnice GNU sú pripojené dynamicky. Pre ďalšie možnosti -statický Môžete vybrať kolekciu (editor odkazov) a pripojiť všetky knižnice staticky (na zvýšenie zaťaženia súboru, ktorý sa kompiluje) a s ďalšou možnosťou -i_dynamický Môžete dynamicky pripojiť všetky softvérové ​​knižnice Intel.

    Pri pripájaní ďalších knižníc pre ďalšie možnosti pozri -lKnižnica Možno budete musieť použiť túto možnosť -Ladresár, na inštaláciu ciest, kde budú sídliť knižnice.

    Pre ďalšie možnosti -Bstatickýі -Bdynamický Prehľadne je možné nastaviť dynamicky alebo staticky prepojenie skinu s knižnicami, úlohami v príkazovom riadku.

    Pre ďalšie možnosti -c Povolí sa výber skompilovaného súboru a vykoná sa iba kompilácia (vygenerovanie objektového modulu).

    Kompletný zoznam modulov vo Fortrane a C

    Pre dôkladné pochopenie modulov napísaných v jazykoch Fortran a C je potrebné postarať sa o názvy procedúr v objektových moduloch, odovzdávanie parametrov, ako aj o prístup ku globálnym premenným, ako napr.

    Kompilátor Intel Fortran má pokyn previesť názvy procedúr na malé písmená a pridať príponu na koniec názvu. Kompilátor C nemení názvy funkcií vôbec. Ak teda chceme volať funkciu alebo procedúru FNNAME implementovanú v C z modulu Fortran, potom sa v module C musí volať fnname_.

    Kompilátor Fortran túto možnosť podporuje -nus [názov súboru], ktorý vám umožňuje pridávať akréčné znaky do interných názvov procedúr. Po zadaní názvu súboru použite iba názvy procedúr uvedené v zadanom súbore.

    Pre inštrukcie sa vo Fortrane prenášajú parametre pre inštrukcie a C je pre hodnoty. Keď teda zavoláte postup Fortran z modulu na Simi, musíte preniesť indikátory na ďalšie parametre, aby ste nahradili hodnoty skutočných parametrov. Pri písaní funkcií v C, ktoré vyžadujú volanie z modulu Fortran, musíme opísať formálne parametre ako indikátory rôznych typov.

    Moduly C môžu mať BEŽNÉ bloky uprostred modulov Fortran (správa v používateľskej príručke kompilátora Intel Fortran, časť Miešanie C a Fortran).

    Výber kompilátorov kompilátorov Intel a GCC

    Moje moduly objektov C extrahované kompilátorom Intel C++ sú kombinované s modulmi extrahovanými kompilátorom GCC a knižnicou GNU pre MoC. Tieto moduly je teda možné kombinovať v jednom programe, takže je potrebné použiť príkazy icc alebo gcc, ale pre správne prepojenie knižníc Intel sa odporúča použiť icc.

    Kompilátor Intel podporuje množstvo neštandardných rozšírení jazyka C, ktoré sú vyvinuté v rámci projektu GNU a podporované kompilátorom GCC (nie všetky, pozri tu).

    Korešpondent korešpondenta nepovedal nič o dômyselnosti objektových modulov v jazykoch C++ a Fortran, možno ho to nezaujíma.

    Aktualizácia štandardov

    Intel C++ Compiler 7.0 pre Linux podporuje jazykový štandard ANSI/ISO (ISO/IEC 9899/1990). Je možné stanoviť maximálnu hodnotu podľa normy ANSI C ( -ansi) alebo rozšírený dialekt ANSI C ( -Xa). S vybratou možnosťou -C99

  • Sprievodcovia kompilátorom vo formáte HTML (k dispozícii online na našom serveri, ak je potrebná podpora jazyka Java)
    • Používateľská príručka kompilátora Intel C++.
    • Používateľská príručka kompilátora Intel Fortran.
  • Kompilátory z anglických kompilátorov vo formáte PDF (povinné Program Acrobat Reader, musíte si stiahnuť súbory PDF do počítača)
    • Sprievodca kompilátora kompilátora Intel C++: Používateľská príručka kompilátora Intel C++ (1,3 MB, 395 strán).
    • Zdrojová kniha pre kompilátor Intel Fortran: Užívateľská príručka kompilátora Intel Fortran (1,1 MB, 285 strán).
    • Zdroj môjho Fortran programu: Intel Fortran Programmer's Reference (7 MB, 566 strán).
    • Sprievodca knižnicami pre MOVIE FORTRAN: Referenčná príručka knižníc Intel Fortran (9,5 MB, 881 strán).
  • Sourcebook z aplikácie Intel Application Debugger.
  • Aktualizácia kompilátorov na testoch SPEC CPU2000 (článok na stránke ixbt.com v ruštine).
  • Stránka spoločnosti Polyhedron prináša výsledky porovnania rôznych zostavovateľov.