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é funkcie | Funkcia 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.
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 |
-O0 | Vimic optimalizácia |
-O1 alebo -O2 | Zá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. |
-O3 | Väčš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 |
-tpp6 | Optimalizácia pre procesory Penitum Pro, Pentium II a Pentium III |
-tpp7 | Optimalizácia pre procesory Penitum 4 (táto možnosť je povolená pre kompilátor IA-32) |
-xM | Generujte kód pomocou rôznych rozšírení MMX špecifických pre procesory Pentium MMX, Pentium II a novšie |
-xK | Generovanie kódu pomocou rôznych rozšírení SSE špecifických pre procesory Pentium III |
-xW | Generovanie kódu pomocou rôznych rozšírení SSE2 špecifických pre procesory Pentium 4 |
Interprocedurálna optimalizácia | |
-ip | V 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. |
-ipo | Je povolená interprocedurálna optimalizácia medzi rôznymi súbormi |
Optimalizácie z rôznych profilov | |
-prof_gen | Vygeneruje 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_use | Optimalizá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 | |
- openmp | Umožňuje podporu pre štandard OpenMP 2.0 |
- paralelne | Je 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