# usare icc al posto di gcc

## andrea.lai

Salve a tutti ,

     da un pÃ² di tempo mi e venuta in testa una brutta idea che perÃ² non riesco a toglermi dalla testa.

     L'idea sarebbe quella di installare tutto il sistema gentoo compilandolo con icc invece che gcc.

     Ho cercato diverse fonti ma nessuna Ã¨ stata esaustiva e sopratutto, anche nei vari post di questo forum, tutti la sconsigliano.

     E chiaro che io sono come San Tommaso e dunque prima di sconsigliarla vorrei provarla.

     Per cercare di fare ciÃ² ho provato 2 soluzioni :

     1 . La prima cosa che ho provato a fare Ã¨ stata quella di installare gcc ( come letto in qualche post su internet ) e poi         settare  in env.d le varie variabili necessarie all'uso di icc.

     Tra le variabili c'erano anche le variabili CC e CXX che ho opportunamente modificato.

     La mia speranza era quella che icc a questo punto doveva essere il compilatore di default del sistema e pertanto ho provato subito ad emergere un pacchetto ma, spiacevolmente, ho che le righe di compilazione chiamavano sempre gcc.

     Per provare comunque che il compilatore funzionasse ho fatto un alias gcc='icc' ed ho rilanciato il comando di emerge constatando che il compilatore nuovo compilava correttamente il pacchetto.

     A questo punto pongo anche la prima domanda : Come si fa dire a gentoo di usare icc e non piÃ¹ gcc ? 

     2. La seconda ipotesi, che perÃ² non sono riuscito ancora a sviscerare bene, era quella di installare un sistema ex-novo ( magari partendo dallo stage1 ? ) ma usare icc al posto di gcc ? 

     Qualcuno sa darmi qualche notizia ? Magari anche segnalandomi dei siti dove reperire info 

Grazie a tutti. 

Ciao.

----------

## gutter

Non credo riuscirai ad installare tutto il sistema con icc dal momento che non è detto che il codice si compili senza problemi su icc.

----------

## max_1975

Prova a dare un'occhiata qua:

[url] https://forums.gentoo.org/viewtopic-t-28435-highlight-icc.html?sid=d295ee29b22297a20822b62d09858f1f [/url]

...comunque posso dire che gli eseguibili compilati con icc sono mooolto più grandi di quelli compilati con gcc (dico questo per esperienza personale...uso icc tutto il giorno), anche se sono molto più performanti (per lo meno i programmi che hanno bassa interattività e un'alta richiesta di cpu, per esempio calcoli effettuati in grossi cicli for)

----------

## ballero

 *Quote:*   

>  A questo punto pongo anche la prima domanda : Come si fa dire a gentoo di usare icc e non piÃ¹ gcc ? 

 

Attraverso l'opzione 

```
-no-gcc
```

che inserisci nel file di configurazione icc.cfg o icpc.cfg in /opt/intel_cc_80/bin

 *Quote:*   

>  2. La seconda ipotesi, che perÃ² non sono riuscito ancora a sviscerare bene, era quella di installare un sistema ex-novo ( magari partendo dallo stage1 ? ) ma usare icc al posto di gcc ?
> 
> Qualcuno sa darmi qualche notizia ? Magari anche segnalandomi dei siti dove reperire info 

 

Ti consiglio di costruire il sistema col gcc e poi di ricompilare, cosi' avrai sempre il fallback.

Se vuoi avere un'idea di cosa sia possibile ricompilare ti posto alcuni screen (verde=si'; rosso=no)

link1

link2

link3

Per le info, puoi controllare il forum di Intel dove, tra l'altro, viene spiegato come ricompilare firefox: link

Qui per un sistema ex-novo.

E  qui per ricompilare il kernel.

Ho provato l'altro giorno, con successo, a ricompilare il kernel usando il 2.6.6 e la patch minimal. Il problema si e' presentato al riavvio del Pc con l'nvidia-kernel che assoulutamente non compila, neanche usando il CC_MISMATCH.

----------

## Dhaki

Bel 3d, avevo proprio voglia di usare a fondo icc! Provo un pò i suggerimenti postati, grazie  :Wink: 

----------

## ballero

Ho trovato questo articolo che da' delle indicazioni molto interessanti per le flag da usare con Icc.

Vi consiglio di leggerlo.

----------

## Apetrini

Resumo questa discussione per capire meglio alcune cose sul icc...

Non l'ho ancora provato(scusate ma sono estremamente scettico che ci sia qualcosa di migliore di gcc, ... è vero sono solo pregiudizi).

Ma è vero che produce eseguibili piu veloci di gcc? nella migliore delle ipotesi di quanto riesce a staccare il gcc?

Ho cercato in giro, ma non sono soddisfatto delle risposte, è ovvio che sul sito intel il loro complatore è il meglio del meglio....

Per favore se qualcuno sa qualcosa mi illumini....

----------

## gioi

Ã¨ vero che Icc crea codice eseguibile piÃ¹ performante (IMHO, piÃ¹ che sull'eseguibile specifico i vantaggi maggiori sono sulle librerie che, a quanto avevo visto, sono poi linkate in maniera decisamente diversa), ma scordati di utilizzarlo su un PC desktop con interfaccia grafica...

All'epoca (remota in informatica, visto che si parla di circa due anni fa), all'univ provammo a mettere su un piccolo server dual Xeon, che gestisse in RT il processo di uno streaming multimediale proveniente da una scheda sperimentale. Avevamo optato per Icc perchÃ¨ le librerie di "interfacciamento" al DSP della scheda erano precompilate con Icc (c'erano anche i sorgenti, perÃ² ci sembrava una buona idea utilizzare del codice giÃ  ottimizzato). Le applicazioni realizzate funzionavano da linea di comando, ma non ci fu verso di poter utilizzare un client che ci "mostrasse" (Ã¨ tra virgolette perchÃ¨ si trattava di un flusso prevalentemente audio, di cui ci interessava analizzare lo spettro) in una finestra di X quanto elaborato. O non compilava, o compilava e non linkava, oppure il codice compilato si piantava in una marea di segmentation fault diverse.

----------

## x-dd

http://gentoo-wiki.com/HOWTO_ICC_and_Portage

----------

## Apetrini

Leggo dal wiki:

```

if you unmerge icc, all binaries compiled with it will stop working.

```

ma che senso ha?

Poi non capisco... chi aderisce di piu allo standard? gcc, icc o entrambi allo stesso modo?

Vedo che ci sono applicazioni che non compilano con icc, non capisco se succede perche sono scritte leggermente fuori standard e gcc lo tollera oppure se proprio icc non rispetta lo standard...

Mistero....

----------

## funkoolow

mi intrometto solo per segnalare a chiunque interessasse che su linux pro #45 (ottobre) c'è giusto giusto un bell'articolo-recensione sui vari compilatori in circolazione: si raffrontano gcc, icc, ekopath, pgcc, tinycc e tendra.

----------

## Ic3M4n

bell'articolo... mi sembra un po' eccessivo dire bello.

direi che è abbastanza superficiale (è anche vero che lo spazio della rivista è limitato e l'articolo deve essere scritto in modo da essere capito da tutti i lettori, quindi non si addentra molto nei particolari) e come al solito cercano di fare notizia dove notizia non c'è.

----------

## funkoolow

 *Ic3M4n wrote:*   

> bell'articolo... mi sembra un po' eccessivo dire bello.

 

beh, io l'ho trovato interessante, se non altro ho scoperto che esistono altri compilatori oltre il gcc...  :Rolling Eyes: 

----------

## gioi

 *Apetrini wrote:*   

> Leggo dal wiki:
> 
> ```
> 
> if you unmerge icc, all binaries compiled with it will stop working.
> ...

 

Non e' un problema di come sono scritte, ma di come poi, il compilatore linka le librerie e/o "svolge" determinate porzioni di codice. Probabilmente, l'uso combinato di funzioni di librerie a basso livello, e' ottimizzato in maniera tale che se non si rispetta un certo "ordine" o una certa sintassi convenzionale, crea errori. Per esempio:

```
for (i = 0; i < 100; i++){

...

}

```

o

```
i=0;

while(i++ < 100){

...

}

```

compilando senza ottimizzazione generano lo stesso ed identico codice macchina (un loop), ma utilizzando un compilatore per codice ottimizzato, cio' non e' piu' scontato! Puo' darsi che differiscano leggermente, ma soprattutto utilizzino registri inconsueti, e, a lungo andare, magari a causa di una serie di loop annidati, cio' porta alla generazione di codice non valido.

Quanto alla questione unmerge, dipende dal fatto che un compilatore non e' composto solo da un eseguibile, ma da un enviroment completo, nel quale il sorgente viene compilato, ed al quale fa riferimento per essere eseguito. Se cosi' non fosse, un eseguibile per una certa architettura, ma compilato in un ambiente software diverso, potrebbe funzionare senza la necessita' del medesimo ambiente software (in pratica per esempio si potrebbero usare gli eseguibili di winsozz su linux e viceversa).

----------

## Ic3M4n

 *funkoolow wrote:*   

> 
> 
> beh, io l'ho trovato interessante, se non altro ho scoperto che esistono altri compilatori oltre il gcc... 

 

beh... se quello che ti interessava sapere era quello non lo metto in dubbio. però credo ci siano altri modi per sapere quali compilatori esistono in linux.

però sotto alcuni punti di vista rispecchia molto lo stile della rivista... diciamo molto noob.

pongo un'esempio: Titolo testare compilatori è un'arte oscura e misteriosa, ma se lo scopo è ottenere un codice che garantisca ottime prestazioni...

Tendra: voto 4/10 perchè non è disponibile nelle disribuzioni, solo debian è tra le poche elette. se lo compilate a mano dovete sistemarvi alcuni script.

ok, va bene il supporto per il c++ è pessimo o cose del genere, però il voto in gran lunga è dato dal fatto che non riescono a compilarlo a mano e non c'è il binario disponibile.

----------

## funkoolow

 *Ic3M4n wrote:*   

> però sotto alcuni punti di vista rispecchia molto lo stile della rivista... diciamo molto noob.

 

beh, oh, ma è chiaro che deve mantenersi a livelli generalistici e vagamente informativi, mica può uscire ogni mese un tomo di 500 pagine per trattare le cose come si deve eh  :Rolling Eyes: 

Per quanto mi riguarda ho trovato l'articolo certamente non esauriente ma perlomeno stimolante! in fondo nel mio piccolo, non essendo studente informatico ma semplice appassionato (quindi, da buon noob   :Razz:  ), ho apprezzato la scoperta dell'esistenza di altri compilatori (eh si, non lo sapevo!)  :Wink: 

Chiuderei qua st'OT, stiamo divagando!  :Wink: 

----------

