2009-12-30 1 views
28

C'è qualcuno che usa il compilatore Intel C++ invece del compilatore Visual C++ di Microsoft?Compilatore Intel C++ in alternativa a Microsoft?

Sarei molto interessato a conoscere la tua esperienza in merito all'integrazione, alle prestazioni e ai tempi di costruzione.

risposta

28

Il compilatore Intel è uno dei più avanzati compilatori C++ disponibili, presenta una serie di vantaggi rispetto, ad esempio, al compilatore Microsoft Visual C++ e uno dei principali inconvenienti. I vantaggi includono:

  • Molto buon supporto SIMD, per quanto sono stato in grado di scoprire, è il compilatore che ha il miglior supporto per le istruzioni SIMD.

  • Supporta sia la parallelizzazione automatica (ottimizzazioni multi core), sia quella manuale (tramite OpenMP), e funziona molto bene.

  • Supportare l'invio della CPU, questo è molto importante, poiché consente al compilatore di indirizzare il processore per istruzioni ottimizzate durante l'esecuzione del programma. Per quanto ne so, questo è l'unico compilatore C++ disponibile a farlo, a meno che G ++ non lo abbia già introdotto.

  • Viene spesso fornito con librerie ottimizzate, come librerie di immagini e matematica.

Tuttavia ha un grave inconveniente, il dispatcher come già detto, funziona solo su CPU Intel, questo significa che le ottimizzazioni avanzate saranno lasciati fuori su AMD CPU. C'è una soluzione per questo, ma è ancora un grosso problema con il compilatore.

Per aggirare il problema dispatcher, è possibile sostituire il codice dispatcher prodotte con una versione funzionante su processori AMD, si può per esempio utilizzare Agner Fog'sasmlib library che sostituisce il compilatore generato funzione dispatcher. Molte più informazioni sul problema del dispatching e spiegazioni tecniche più dettagliate di alcuni argomenti sono disponibili nel documento Optimizing software in C++ - anche da Anger (che vale davvero la pena leggere).

Su una nota personale ho utilizzato il compilatore C++ Intel con Visual Studio 2005 in cui ha funzionato perfettamente, non ho riscontrato alcun problema con le estensioni del linguaggio specifico di Microsoft, sembrava capire quelli che ho usato, ma forse quelli menzionati di John Knoeller erano diversi da quelli che avevo nei miei progetti.

Mentre mi piace il compilatore Intel, sto attualmente lavorando con il compilatore Microsoft C++, semplicemente a causa dell'investimento finanziario aggiuntivo richiesto dal compilatore Intel. Vorrei usare il compilatore Intel solo come alternativa a Microsofts o al compilatore GNU, se le prestazioni erano critiche per il mio progetto e avevo una parte finanziaria in ordine;)

+9

Attento con assoluti come "* il * compilatore avanzato disponibile". – jalf

+7

@jalf: Sono d'accordo sul fatto che questo potrebbe far credere che l'autore sia di parte, tuttavia questo è un caso in cui abbiamo dimensioni misurabili. È possibile osservare attraverso l'eseguibile prodotto che il compilatore Intel utilizza tecnologie di ottimizzazione più avanzate, rispetto ai compilatori della concorrenza. –

+0

Inoltre, quando si scrivono queste risposte, è meglio essere previdenti sulle affermazioni generali che potrebbero cambiare (cioè diventare false) con il tempo. Come tutti sappiamo, il software si evolve rapidamente e soffre costantemente di essere invaso dai concorrenti. Anche solo pochi anni possono cambiare le cifre in modo drammatico. – ulidtko

5

Ho avuto solo una esperienza con questo compilatore, compilando STLPort. MSVC ha impiegato circa 5 minuti per compilarlo e ICC è stato compilato per più di un'ora. Sembra che la loro compilazione template sia molto lenta. Oltre a questo ho sentito solo cose positive a riguardo.

Ecco qualcosa di interessante:

compilatore di Intel in grado di produrre diverse versioni di pezzi di codice, con ogni versione essere ottimizzati per una specifica processore e/o set di istruzioni (SSE2, SSE3, etc.). Il sistema rileva su quale CPU è in esecuzione e sceglie il percorso di codice ottimale di conseguenza; il dispatcher della CPU , come viene chiamato.

"Tuttavia, la CPU dispatcher Intel non solo verificare quali l'istruzione set è supportato dalla CPU, ma anche controlli la stringa vendor ID," Nebbia dettagli, "Se la stringa fornitore dice 'GenuineIntel' quindi utilizza il percorso di codice ottimale . Se la CPU non è da Intel, nella maggior parte dei casi, eseguirà la versione più lenta possibile del codice, anche se la CPU è completamente compatibile con una versione migliore ".

OSnews articolo here

+2

Quali livelli di ottimizzazione stavi utilizzando? Se si stesse utilizzando l'ottimizzazione interprocedurale (prendendo tutti i file oggetto, unendoli in un unico enorme file oggetto e ottimizzando in fase di collegamento), ICC sarà molto più lento di MSVC. Tuttavia, produrrà risultati migliori. – Tom

2

L'ultima volta che l'azienda per cui lavoro ha confrontato la due era circa un anno fa, (forse 2). Il compilatore Intel ha generato un codice più veloce, di solito solo un po 'più veloce, ma in alcuni casi un bel po'.

Ma non era in grado di gestire alcune delle estensioni del linguaggio MS da cui dipendevamo, quindi abbiamo finito per attaccare con MS. Era VS 2005 a cui stavamo confrontando. E sto distruggendo il mio cervello per ricordare esattamente quale estensione MS il compilatore Intel non poteva gestire. Tornerò e modificherò questo post se riesco a ricordare.

+0

Può gestire COM/ATL? Sono bloccato nel terreno COM/ATL ... – wheaties

+1

Potrebbe gestire COM, ma non abbiamo usato molto ATL, quindi non ne sono sicuro. –

3

Ho provato a utilizzare Intel C++ al mio precedente lavoro. IIRC, ha effettivamente generato un codice più efficiente a scapito del tempo di compilazione. Tuttavia, non l'abbiamo messo in produzione, per ragioni che non ricordo.

Una differenza importante rispetto a MSVC è che il compilatore Intel supporta C99.

5

Non sto utilizzando il compilatore Intel C++ al lavoro/personale (vorrei farlo).

avrei usato perché ha:

  • eccellente supporto in linea assembler. Intel C++ supporta entrambe le sintassi di assemblatore Intel e AT & T (GCC), per piattaforme x86 e x64. Visual C++ può gestire solo la sintassi dell'assembly Intel e solo per x86.

  • Supporto per set di istruzioni SSE3, SSSE3 e SSE4.Visual C++ supporta SSE e SSE2.

  • si basa su EDG C++, che ha un completa ISO/IEC 14882: 2003 implementazione standard. Ciò significa che puoi usare/imparare ogni caratteristica del C++.

3

Aneddoticamente, ho trovato che il compilatore Intel si blocca più frequentemente di Visual C++. La sua diagnostica è un po 'più accurata e ben scritta rispetto a VC. Pertanto, è possibile che il compilatore fornisca una diagnostica che non è stata fornita con VC o che si arresti in modo anomalo dove VC no, rendendo la conversione più costosa.

Tuttavia, credo che il compilatore di Intel ti consenta di collegare i runtime Microsoft come il CRT, facilitando i costi di transizione.

Se si interagisce con il codice gestito, si dovrebbe probabilmente attenersi al compilatore di Microsoft.

I recenti compilatori Intel ottengono prestazioni significativamente migliori su benchmark pesanti in virgola mobile e sono simili a Visual C++ su benchmark interi interi. Tuttavia, varia in modo significativo in base al programma e se si sta utilizzando o meno la generazione di codice link-time o l'ottimizzazione guidata dal profilo. Se le prestazioni sono fondamentali per te, dovrai fare un benchmark dell'applicazione prima di fare una scelta. Direi solo che se stai facendo calcoli scientifici, è probabilmente il momento di investigare.

Intel ti consente una prova gratuita di un mese del suo compilatore, quindi puoi provare queste cose da solo.

+0

La diagnostica viene migliorata in VC2010? – jalf

+0

Ripensandoci, forse no. Hanno una nuova tecnologia di front end, ma penso che lo stiano usando solo per intellisense, non per il compilatore stesso. –

2

Il compilatore Intel C++ ha un supporto AMAZING (umano). Parlare con Microsoft può letteralmente richiedere giorni. Il mio problema non banale è stato risolto tramite chat in meno di 10 minuti (compreso il tempo di verifica dell'iscrizione).

MODIFICA: Ho parlato con Microsoft di problemi nei loro prodotti come Office 2007, anche un bug segnalato. Mentre alla fine ho avuto successo, le dimensioni e la complessità complessive dei loro prodotti e della gerarchia organizzativa sono scoraggianti.

+4

Quante volte si chiama supporto tecnico umano per un compilatore in un decennio? 0, 1? –

+0

Questo è il modo in cui le aziende pagano molto denaro a Intel. È più facile trovare la soluzione con googling, no. – ozhan

3

Ho utilizzato il compilatore Intel C++ dalla prima versione di Intel Parallel Studio e finora non ho sentito la tentazione di tornare indietro. Ecco uno schema di dis/vantaggi e (alcune ovvie) osservazioni.

Vantaggi

  • Parallelizzazione (vettorializzazione, OpenMP, SSE) non ha eguali in altri compilatori.
  • Toolset è semplicemente fantastico. Sto parlando della profilazione, ovviamente.
  • Inclusione di librerie ottimizzate come Threading Building Blocks (okay, quindi Microsoft replicato TBB con PPL), Math Kernel Library (routine standard e alcune implementazioni con supporto MPI (!!!), Integrated Performance Primitives, ecc. grande anche che queste librerie sono in continua evoluzione.

Svantaggi

  • Speed-up è Intel-only. Bene! Non mi preoccupa, comunque, perché sul lato server tutto quello che devo fare è scegliere le macchine Intel. Non ho alcun problema con quello, alcune persone potrebbero.
  • Non si può realmente fare OSS o qualcosa del genere su questo, perché il formato del file di progetto è diverso. Sì, puoi avere entrambi i formati di file VS e IPS, ma è solo strano. Ti perderai nella sincronizzazione delle opzioni del progetto ogni volta che apporti una modifica. A proposito, il compilatore di Intel ha il doppio del numero di opzioni.
  • Il compilatore è molto più pignolo. È fin troppo facile impostare impostazioni di progetto incompatibili che ti daranno un errore di compilazione criptico invece di una bella spiegazione significativa.
  • Costi aggiuntivi in ​​aggiunta a Visual Studio.

Neutrali

  • Penso che l'argomento prestazione non è forte più, perché un sacco di librerie, come spinta o Microsoft AMP consente di utilizzare GPGPU che outgun la CPU comunque .
  • Raccomando a chiunque sia interessato a ottenere una prova e provare un po 'di codice, incluse le librerie. (E sì, le librerie sono belle, ma le interfacce in stile C possono farti impazzire.)