Questo Sito, utilizza cookie; accedendo o cliccando su "Accetto", acconsenti a scaricare sul tuo browser, tutte le tipologie di cookie presenti in questo Sito.

Visita il nuovo sito

Il sito che stai visitando non viene aggiornato da Agosto 2016.

Clicca sul logo per visitare il nuovo sito del progetto LinuxMX.

Archivio News e Guide

 

CFLAGS : Settare -march nel modo corretto

Gentoo offre molti tipi di personalizzazioni in fase di compilazione. Anche chi non utilizza Gentoo avrà (a lungo andare) sentito parlare di make.conf. make.conf è il file di configurazione che informa portage su cosa e come passare alcuni parametri di ottimizzazione al compilatore. Tra i vari (tanti) parametri di ottimizzazione che il compilatore offre spicca tra tutti -march , che nella riga del make.conf è contenuta in una riga simile a CFLAGS=”-O2 -march=native -pipe" .

Non mi avventuro nella spiegazione di sudetto parametro , ma vorrei soffermarmi su -march il quale indica al compilatore per quale tipo di Cpu ottimizzare il codice della compilazione .

Esempio : -march=pentium ottimizzerà il codice per un pentium di prima generazione ; -march = pentiumpro ottimizzerà il codice per un pentium pro e così via. Compilazioni generiche sono : x86_64 , i686 , i586 etc per codice comune a quelle architetture non eccessivamente ottimizzato. Dalla versione 4.2 di GCC è possibile passare il parametro native a -march ; questo setterà automaticamente le opzioni della propria cpu nel caso si abbia dei dubbi su cosa passare al compilatore. Ma “native” quale impostazione utilizzerà ? Quale “architettura” passerà al compilatore ? Scopriamolo con questo test :

 

 # gcc -march=native -E -v - </dev/null 2>&1 | sed -n 's/.* -v - //p'

Controllare cosa riporta nell'output il parametro -mtune=

Esempio su un processore Intel(R) Core(TM)2 Solo CPU U3500  @ 1.40GHz :

# gcc -march=native -E -v - </dev/null 2>&1 | sed -n 's/.* -v - //p'

Riporterà :

gcc -march=native -E -v - </dev/null 2>&1 | sed -n 's/.* -v - //p'
-march=core2 -mcx16 -msahf -mno-movbe -mno-aes
 -mno-pclmul -mno-popcnt -mno-abm -mno-lwp -mno-fma -mno-fma4
 -mno-xop -mno-bmi -mno-tbm -mno-avx -mno-sse4.2 -msse4.1
 --param l1-cache-size=32 --param l1-cache-line-size=64 
 --param l2-cache-size=3072 -mtune=core2


Quindi per la CPU Intel U3500 -march=native imposterà l'ottimizzazione per un core2.

Un ulteriore codice da passare al compilatore per scoprire come verrà settata -march è :

gcc -march=native -E -v - &1 | grep mtune

Che restituirà un output simile al seguente :

/usr/libexec/gcc/x86_64-pc-linux-gnu/4.6.3/cc1 
-E -quiet -v -march=core2 -mcx16 -msahf -mno-movbe 
-mno-aes -mno-pclmul -mno-popcnt -mno-abm 
-mno-lwp -mno-fma -mno-fma4 -mno-xop -mno-bmi
 -mno-tbm -mno-avx -mno-sse4.2 -msse4.1 --param l1-cache-size=32 
--param l1-cache-line-size=64 --param l2-cache-size=3072 -mtune=core2

 Ulteriori informazioni sulle CFLAGS da settare nel make.conf per le varie architetture , le si possono trovare nel Wiki di Gentoo.

Unisciti al Forum Gentoo

Nessun evento trovato



LinuxMX è un sito creato da Maestri Carlo.
Questo sito non rappresenta una testata giornalistica, in quanto viene aggiornato senza alcuna periodicità. Non può, pertanto, considerarsi un prodotto editoriale, ai sensi della legge n. 62 del 7/03/2001
Tutti i contenuti del sito sono disponibili con una Licenza Creative Commons CC-BY-NC-SA
Tutti i loghi e marchi registrati presenti in questo sito sono di proprietà dei rispettivi proprietari.