Intel C++ kompilator

Intel C++ kompilator
Generell informasjon
programtype Kompilator
utvikler Intel
Tillatelse ikke-fri programvare
Versjoner
Siste stabile versjon 12.1 (8. september 2011 (11 år, 1 måned og 10 dager))
Lenker
Offesiell nettside kodelager

Intel C++ Compiler (også kjent som ICC eller ICL ) er et sett med kompilatorer for C- og C++-språkene , utviklet av Intel . Kompilatorer er tilgjengelige for operativsystemene Linux , Microsoft Windows og Mac OS X.

Disse kompilatorene kan kjøre på IA-32 , Intel 64 , Itanium 2 og andre off-brand, men kompatible prosessorer som AMD . Utviklere bør imidlertid sjekke systemkravene. Intel C++-kompilatoren for IA-32 og Intel 64 har automatisk vektorisering som kan generere SSE , SSE2 , SSE3 og SSE4 SIMD-instruksjoner , Intel Wireless MMX og MMX 2- varianter for innebygde systemer . [ 1 ] Siden introduksjonen har Intel C++ Compiler for IA-32 økt bruken av SSE2 i Windows-applikasjonsutvikling betraktelig. [ referanse nødvendig ]

Intel C++-kompilatoren støtter både OpenMP 3.0 og automatisk parallellisering for symmetrisk multiprosessering . Med Cluster OpenMP -plugin-modulen kan kompilatoren også automatisk generere Message Passing Interface -anrop for distribuert minne- multiprosessering fra OpenMP-direktiver.

ICC tilhører Edison Design Group-familien av frontend-kompilatorer ( som SGI MIPSpro , Comeau C ++ , Portland Group og andre). Kompilatoren er mye brukt av SPEC CPU for ytelsestesting av arkitekturene IA-32 , x86-64 og Itanium 2 .

ICC kan presentere seg på fire forskjellige måter. Innenfor Intel Parallel Studio , som en pakke i Intel C++ Compiler Professional Edition , i Intel Compiler Suite , og i Intel Cluster Toolkit, Compiler Edition . Mye mer informasjon og ressurser finnes på nettstedet for Intel Software Products .

Optimaliseringer

Intel finjusterer denne kompilatoren ved å optimalisere den for maskinvareplattformer, minimere vranglåser og dermed produsere kode som kjøres i færre sykluser. Intel C++-kompilatoren støtter tre separate høynivåteknikker for å optimalisere kompilerte programmer: interprosedyreoptimalisering (IPO), profilstyrt optimalisering (PGO), [ 2 ] og høynivåoptimalisering. eller høynivåoptimalisering (HLO). Den støtter også teknikker og verktøy som legger til parallellitet i applikasjoner.

Profilveiledet optimalisering (eller profilstyrt optimalisering i originalversjonen) refererer til en optimaliseringsmodus der kompilatoren er i stand til å få tilgang til data fra en eksempelutførelse av programmet gjennom representativ datainndata. Dataene vil indikere hvilke områder av programmet som kjøres hyppigere, og hvilke områder som kjøres sjeldnere. Alle optimaliseringer drar nytte av profildrevet tilbakemelding fordi de er mindre avhengige av heuristikk når de tar byggebeslutninger.

Optimaliseringer på høyt nivå er de som utføres på en versjon av programmet som mer nøyaktig representerer kildekoden. Dette inkluderer swap-løkker, loop-sammenslåing, loop-utpakning, loop-dispatching, dataforhåndslesing og mer. [ 3 ] Disse optimaliseringene er ofte svært aggressive og kan ta betydelig kompileringstid.

Interprosedyreoptimalisering bruker typiske kompilatoroptimaliseringer (som konstant utbredelse), men bruker et bredere omfang som kan inkludere flere prosedyrer, flere filer eller hele programmet. [ 4 ]

Kompilatorene inkluderer en parallell feilsøkingsutvidelse, Intel Threading Building Blocks, støtte for lambda-funksjonen og et ressurskontrollverktøy for bruk med gjenget kode.

Intel-kompilatoren har blitt kritisert for å bruke, som standard, flyttallsoptimaliseringer som ikke er tillatt i C-standarden og som krever spesielle eller spesifikke flagg med andre kompilatorer som den velkjente GCC . [ 5 ]

Språk

Intels kompilatorsuite har frontends for C , C++ og Fortran .

Tidligere versjoner av ICC som bruker versjoner før GCC 3.x-kompilatoren for Linux, bruker Dinkumware- kodesyntaksfargeskjemaet for å gi en mer standardkompatibel implementering av C++ enn GCC i 2.x-versjonene. Dette gjør ABI- en din inkompatibel med begge versjonene av GCC. Intel fjernet Dinkumware-bibliotekene i versjon 10.0, som ble utgitt i juni 2007. Siden den gang har kompilatoren vært og fortsetter å være kompatibel med GCC 3.2 og nyere.

Arkitekturer

Versjoner

Følgende versjoner av Intel C++ Compiler har blitt utgitt:

kompilatorversjon Publiseringsdato De viktigste nye funksjonene
Intel C++ Composer XE 2011 Update 6 og nyere (kompilator 12.1) 8. september 2011 Oppdaterte Intel Cilk Plus -språkutvidelser for å støtte Cilk-spesifikasjonen versjon 1.1 og nå tilgjengelig på Mac OS X, Windows og Linux, Intel Threading Building Blocks oppdatert til versjon 4.0, Apple-blokker støttet på Mac OS X, forbedret støtte for C++11 inkludert støtte for Variadic-maler , støtte for OpenMP 3.1. [ 6 ]
Intel C++ Composer XE 2011 opp til oppdatering 5 (kompilator 12.0) 7. november 2010 Intel Cilk Plus - språkutvidelser , veiledet autoparallellisme, forbedret C++0x -støtte. [ 6 ]
Intel C++-kompilator 11.1 23. juni 2009 Støtte for de nyeste Intel SSE SSE4.2- , AVX- og AES-instruksjonene. Forlengelse av parallellbygg. Bedre integrasjon med Microsoft Visual Studio, Eclipse CDT 5.0 og Mac XCode.
Intel C++-kompilator 11.0 6. november 2008 Opprinnelig støtte for C++0x [2] ( ødelagt lenke tilgjengelig på Internet Archive ; se historikk , første og siste versjon ). . Integrasjon med VS2008 på Windows. Åpne MP 3.0. Sjekk inn kildekoden for statisk minne/parallell diagnostikk.
Intel C++-kompilator 10.1 7. november 2007 Ny støtte for OpenMP Runtime Library (OpenMP RTL): Ved å bruke den nye OpenMP RTL kan du mikse og matche biblioteker og objekter bygget med Visual C++. For å bruke de nye bibliotekene, må du bruke det nye alternativet for å kompilere ved å skrive inn som følger: "-Qopenmp /Qopenmp-lib:compat" på Windows, og: "-openmp -openmp-lib:compat" på Linux. Denne versjonen av ICC støtter mer av Visual Studio 2005.

For VS2008 er støtten redusert til kommandolinjen. Integrasjon med IDE støttes ennå ikke.

Intel C++-kompilator 10.0 5. juni 2007 [ 7 ] Forbedret parallellisering og vektorisering, Streaming SIMD Extensions 4 ( SSE4 ), ny og forbedret rapportoptimalisering for avanserte loop-transformasjoner, ny optimalisert implementering av unntakshåndtering .
Intel C++-kompilator 9.0 14. juni 2005 [ 8 ] AMD64 - arkitektur (for Windows), SSP-optimalisering (programvarebasert spekulativ forhåndsberegning), forbedret sløyferapporteringsoptimalisering. [ 9 ]​ [ 10 ]
Intel C++-kompilator 8.1 september 2004 AMD64 - arkitektur (for Linux). [ 11 ]​ [ 12 ]
Intel C++ Compiler 8.0 15. desember 2003 [ 13 ] Forhåndskompilerte overskrifter, kodedekningsverktøy.
Intel C++-kompilator 7.1 mars 2003 Delvis støtte for Intel Pentium 4 med Streaming SIMD Extensions 3 ( SSE3 ).
Intel C++ Compiler 7.0 25. november 2002 [ 14 ]
Intel C++ Compiler 6.0 24. april 2002 [ 15 ] Nå tilgjengelig for Windows og Linux. Kompilatoren for Linux gir høyere kompatibilitet med GCC, inkludert den kommende GCC-3.1 C++-ABI (binær kompatibilitet) og støtter mange GNU-ismer (utvidelser av C-språket som GCC støtter, men ikke er standardisert) i syntaksen. ICC versjon 6.0 har forbedret støtte for GNU C-språkutvidelser og er nå i stand til å bygge Linux-kjernen med lavere arbeidshastigheter for IA-32 og Itanium-arkitekturene.

Prototyper

I tillegg er følgende "prototype"-utgaver tilgjengelige:

Kompilatorversjon Publiseringsdato De viktigste nye funksjonene
Intel Concurrent Collections for C/C++ 0.3 september 2008 "Intel Concurrent Collections for C/C++" gir en mekanisme for å bygge C++-baserte programmer som kjører parallelt. Dette lar utviklere ignorere problemer med parallellitet, for eksempel å bygge tråder på lavt nivå eller planlegge og distribuere beregninger. Modellen lar utviklere spesifisere beregningstrinn på høyt nivå, inkludert innganger og utganger, uten nødvendigvis å pålegge en ordre på utførelse av dem. Koden innenfor disse beregningstrinnene er skrevet med C++-språkets egen konstruksjonsstandard som referanse. Data er lokale for beregningstrinn eller er eksplisitt produsert og konsumert av dem. Denne programvareprototypen støtter flere stiler av parallellitet, for eksempel data, oppgave eller pipeline .
Intel STM Compiler Prototype Edition 17. september 2007 [ 16 ] Prototypeversjon av Intel-kompilatoren som implementerer støtte for Software Transactional Memory (STM). Intels STM-kompilator støtter Linux og Windows, og produserer 32-bits kode for x86-prosessorarkitekturer (Intel og AMD). Intel sa at de tror "tilgjengeligheten til en eller annen prototypekompilator gir mulighet for enestående utforskning av C/C++ programvareutviklere som peker på en lovende teknikk for å gjøre flerkjerneprogrammering enklere." STM-kompilatoren krever forhåndsinstallasjon av Intel-kompilatoren.

Dokumentasjon

Denne dokumentasjonen finner du på nettstedet for teknisk dokumentasjon for Intel Software .

Windows Linux Kommentarer
/od -O0 ingen optimalisering
/O1 -O1 Optimaliser for størrelse
/O2 -O2 Optimaliser for hastighet og aktiver noen optimaliseringer
/O3 -O3 Aktiver alle optimaliseringer som i O2-kode, pluss intensive loop-optimaliseringer
/QxO -xO Aktiver optimaliseringer for SSE3-, SSE2- og SSE-instruksjoner for ikke-Intel CPUer [ 17 ]
/rask -rask Stenografi (rask metode). På Windows tilsvarer dette " /O3 /Qipo /xT /no-prec-div "; på Linux er det " -O3 -ipo -static -xHOST -no-prec-div ". Merk at det prosessorspesifikke optimaliseringsflagget ( -xHOST ) vil bli optimalisert for selve prosessoren. Dette er det eneste hurtigflagget som kan overstyres.
/Qprof-gen -prof_gen Kompilerer programmet og implementerer det i harmoni med utførelsesprofilen.
/Qprof-bruk -prof_use Den skal bare brukes etter å ha kjørt et program som tidligere har blitt kompilert med prof_gen . Bruk profilinformasjonen under hvert trinn i byggeprosessen.

Feilsøking

Intel-kompilatoren gir feilsøkingsinformasjon som er standard for vanlige debuggere ( DWARF 2 på Linux, lik gdb , og COFF for Windows). Flaggene som skal kompileres med feilsøkingsinformasjon er /Zi på Windows og -g på Linux.

Intel tilbyr også sin egen debugger kalt idb , som kan kjøres i både dbx og gdb i kompatibel kommandomodus.

Selv om Intel-kompilatoren kan generere gprof -kompatibel profileringsutgang , leverer Intel også en statistisk profiler på kjernenivå i hele systemet som et eget produkt kalt VTune . VTune tilbyr en brukervennlig GUI (innebygd i Visual Studio for Windows, Eclipse for Linux) så godt som kommandolinjen .

11.x-versjonene av kompilatoren introduserer Parallel Debugger Extension, som gir feilsøkingsteknikker for applikasjoner med arbeidertråder. Den kan brukes med andre kompatible kompilatorer, for eksempel Microsoft Visual C++ på Windows, som er Visual Studio 2005, 2008 og 2010, og gcc på Linux.

Kritikk

Intel og tredjeparter har publisert resultater fra ytelsesstudier for å underbygge påstander om ytelseslederskap over andre kommersielle, åpen kildekode og AMD-kompilatorer og -biblioteker over Intel- og ikke-Intel-prosessorer. Intel og AMD har dokumenterte bruksindikatorer på Intel-kompilatorer for optimal ytelse på Intel- og AMD-prosessorer. [ 18 ] [ 19 ] Imidlertid har Intel-kompilatorer blitt anklaget for å produsere suboptimal kode for leiesoldatformål. I 2009 hadde en utvikler blogget om det: [ 20 ]

Intel-kompilatoren og ulike Intel-funksjonsbiblioteker har suboptimal ytelse på AMD- og VIA -prosessorer . Årsaken er at kompilatoren eller biblioteket kan lage flere versjoner av et stykke kode, som hver er optimalisert for en bestemt prosessor og instruksjonssett , for eksempel SSE2, SSE3, etc. Systemet inkluderer en funksjon som oppdager hvilken type CPU det kjører på og velger den optimale kodebanen for den CPU. Dette er kjent som en CPU-dispatcher. Intels CPU-ekspeditør sjekker imidlertid ikke bare hvilket instruksjonssett som støttes av CPUen, den sjekker også leverandør-ID-strengen. Hvis denne strengen er "GenuineIntel", bruker avsenderen den optimale kodebanen. Hvis CPU-en ikke er fra Intel, vil den i mange tilfeller kjøre den tregeste versjonen av kode som er mulig, selv om CPU-en er fullt kompatibel med en bedre versjon.

Denne leverandørspesifikke CPU-frakten reduserer ytelsen på ikke-Intel-prosessorer fra programvare bygget med en Intel-kompilator eller Intel-funksjonsbibliotek - muligens uten programmererens viten. Dette har ført til mangelfulle ytelsesstudier. [ 20 ] I november 2009 ble det avtalt en juridisk kamp mellom AMD og Intel om dette og andre spørsmål. [ 21 ] På slutten av 2010 anla AMD en antitrust-undersøkelse mot Intel. [ 22 ]

FTC-forliket inkluderte en avsløringsbestemmelse der Intel må: [ 23 ]

... publiser tydelig at kompilatoren din diskriminerer ikke-intel-prosessorer (som AMD-design), ved å ikke bruke funksjonene deres og produsere dårligere kode.

Referanser

  1. AJC Bik, The Software Vectorization Handbook (Intel Press, Hillsboro, OR, 2004), ISBN 0-9743649-2-4 .
  2. Oversikt over profilveiledet optimaliseringer
  3. http://www.ncsa.uiuc.edu/UserInfo/Resources/Software/Intel/Compilers/8.1/ug/lin1063.htm ( ødelagt lenke tilgjengelig på Internet Archive ; se historikk , første og siste versjon ).
  4. Intel C++ Compiler 10.1 for Linux*
  5. ↑ Fallgruvene ved å verifisere flyttallsberegninger , av David Monniaux, også trykt i ACM Transactions on programmeringsspråk og systemer (TOPLAS) , mai 2008; avsnitt 4.3.2 diskuterer ikke-standardiserte optimaliseringer.
  6. a b http://software.intel.com/en-us/articles/intel-c-composer-xe-2011-release-notes/
  7. Nye Intel-produkter forenkler og øker hastigheten på programvareutvikling for flerkjerneprosessorer
  8. Nye Intel-programvareverktøy Lås opp potensialet til flerkjerneplattformer
  9. http://www.intel.com/cd/software/products/asmo-na/eng/compilers/clin/219333.htm ( ødelagt lenke tilgjengelig på Internet Archive ; se historikk , første og siste versjon ).
  10. http://www.intel.com/cd/software/products/asmo-na/eng/compilers/cwin/219335.htm ( ødelagt lenke tilgjengelig på Internet Archive ; se historikk , første og siste versjon ).
  11. "Intel C++ Compiler 8.1 for Linux Release Notes" . Arkivert fra originalen 19. januar 2015 . Hentet 10. september 2009 . 
  12. Intel C++ Compiler 8.1 for Windows* versjonsmerknader
  13. Slashdot | Intel C/C++ Compiler 8.0 utgitt
  14. Slashdot | Ny Intel-kompiler lansert
  15. Slashdot | Intel lanserer V6.0 Compiler Suite
  16. PRESSEKIT - Intel Developer Forum
  17. "Intel(R) C++ Compiler 10.1 for Windows* Release Notes" . Arkivert fra originalen 8. august 2009. 
  18. http://software.intel.com/sites/products/documentation/hpc/compilerpro/en-us/cpp/win/compiler_c/index.htm
  19. https://web.archive.org/web/20110322061401/http://developer.amd.com/Assets/CompilerOptQuickRef-61004100.pdf
  20. a b [1]
  21. http://download.intel.com/pressroom/legal/AMD_settlement_agreement.pdf
  22. http://newsroom.intel.com/community/intel_newsroom/blog/2010/08/04/intel-and-us-federal-trade-commission-reach-tentative-settlement
  23. ^ "FTC, Intel Reach Settlement; Intel utestengt fra konkurransebegrensende praksis" . Arkivert fra originalen 3. februar 2012 . Hentet 2. desember 2011 . 

Se også

Eksterne lenker