# CFLAGS, gcc i procesory - 2012

## Xywa

Witam,

Chciałbym odświeżyć stary wątek z 2009 roku:

https://forums.gentoo.org/viewtopic-t-801907-start-0.html

Sprawa dotyczy - jakie CFLAGS użyć aby w pełni wykorzystać nowy procesor.

Za godzine kurier przywiezie mi nowego lapka z prcesorem:

Intel® Core™i5 Dual Core Mobile Processor i5-2450M (2.50GHz) 3MB

Mam takie informacje podstawowe:

Safe Cflags

http://en.gentoo-wiki.com/wiki/Safe_Cflags

i tam jest link do Processor Specific CFLAGS - np. Intel:

http://en.gentoo-wiki.com/wiki/Safe_Cflags/Intel

Tam znalazłem rozdział Core i7 and Core i5, Xeon 55xx:

http://en.gentoo-wiki.com/wiki/Safe_Cflags/Intel#Core_i7_and_Core_i5.2C_Xeon_55xx

Czyli rozumiem że dla mojego laptopa powinienem użyć tego zestawu (gcc 4.5.3-r2)

64 bit profile (amd64) for GCC 4.3

```
CHOST="x86_64-pc-linux-gnu"

CFLAGS="-march=core2 -mtune=generic -O2 -pipe"

CXXFLAGS="${CFLAGS}
```

Czy jest jakaś możliwość używania w Gento gcc 4.6, bo w portage dostępny jest tylko jak na razie 4.5.3-r2:

http://packages.gentoo.org/package/sys-devel/gcc

Czy wtedy powinienem użyć:

64 bit profile (amd64) for GCC 4.6

```
CHOST="x86_64-pc-linux-gnu"

CFLAGS="-march=corei7 -O2 -pipe"

CXXFLAGS="${CFLAGS}"
```

I jeszcze jedno pytanie, czy ten procesor (Intel® Core™i5 Dual Core Mobile Processor i5-2450M (2.50GHz) 3MB) należy do grupy AMD64? W podręczniku instalacji jest tylko info Core 2 Duo & Quad processors are EM64T.

http://www.gentoo.org/doc/en/handbook/handbook-amd64.xml?part=1&chap=2

----------

## sherszen

Ja posiadam coś takiego:

```
 % cat /proc/cpuinfo 

processor       : 0

vendor_id       : GenuineIntel

cpu family      : 6

model           : 37

model name      : Intel(R) Core(TM) i5 CPU       M 450  @ 2.40GHz

stepping        : 5

microcode       : 0x2

cpu MHz         : 1199.000

cache size      : 3072 KB

physical id     : 0

siblings        : 4

core id         : 0

cpu cores       : 2

apicid          : 0

initial apicid  : 0

fpu             : yes

fpu_exception   : yes

cpuid level     : 11

wp              : yes

flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 popcnt lahf_lm ida arat dts tpr_shadow vnmi flexpriority ept vpid

bogomips        : 4787.76

clflush size    : 64

cache_alignment : 64

address sizes   : 36 bits physical, 48 bits virtual

power management:
```

Jednak nigdy się nie zastanawiałem nad dokładniejszą optymalizacją. Wydaje mi się, że gdybym nawet spróbował coś optymalizować, to i tak efekt nie byłby zbyt widoczny. Nie ten sprzęt, nie te czasy.

```

CHOST="x86_64-pc-linux-gnu"

CFLAGS="-march=native -O2 -pipe"

CXXFLAGS="${CFLAGS}"

LDFLAGS="-Wl,--as-needed"
```

Polecam taką konfigurację - bezproblemowa. Co do LDFLAGS, nie trzeba tego dodawać, bo jest aktywna out of box. Taka pozostałość po starym konfigu.

----------

## Jacekalex

Ja mam gcc-4.6.2 na amd64 i system działa eleganckko, tylko kilka rzeczy z overlaya kde-sunset wymagało starszego gcc.

Mam na myśli programy z kde3.

Wszystko  śmiga całkiem przyzwoicie.

```
qlist -ICvUq sys-devel/gcc

sys-devel/gcc-4.5.3-r1 hardened mudflap multilib nptl openmp

sys-devel/gcc-4.6.2 cxx fortran go graphite gtk hardened mudflap multilib multislot nls nptl openmp

sys-devel/gcc-config-1.5-r2
```

```

gcc-config -l

.....

 [6] x86_64-pc-linux-gnu-4.6.2 *

.....
```

Pozdrawiam

 :Cool: 

----------

## SlashBeast

@sherszen: as-needed jest juz w profilu portage od dawna, nie potrzebujsz takich LDFLAGS.

Ja z flag dal bym po prostu: '-march=native -mtune=generic -O2 -pipe -fno-var-tracking'

Ta ostatnia flaga pomaga na abusowanie ramu przez gcc, jest regresja (ponoc zalatana w 4.4 ale nie wyszlo najwyrazniej) ktora ma wyciek pamieci, np. przy kompilacji qemu-kvm gcc potrafilo zjesc 2G ramu i 2G swapa, z ta flaga w 1.5G ramu bez swapa sie qemu-kvm miesci. Podobnie z firefoksem.

----------

## Garrappachc

Ja polecam -flto, ale od gcc:4.7.

----------

## Xywa

Witam,

Dziś pojawiło się gcc 4.6.3 w portage a wraz z nim nowe możliwości.

Mam pytanie o opcję corei7 (bazuje na manualu gcc):

http://gcc.gnu.org/onlinedocs/gcc-4.7.0/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options

Czy mając procesor i5 mogę użyc opcji corei7?

Wg Gentoo Wiki tak, ale chciałem się upewnić:

http://en.gentoo-wiki.com/wiki/Safe_Cflags/Intel#Core_i7_and_Core_i5.2C_Xeon_55xx

Gentoo Wiki mówi tak:

 *Quote:*   

> 64 bit profile (amd64) for GCC 4.6 

 

```
CHOST="x86_64-pc-linux-gnu"

CFLAGS="-march=corei7 -O2 -pipe"

CXXFLAGS="${CFLAGS}"
```

Mój procesor:

```
$ cat /proc/cpuinfo

processor       : 0

vendor_id       : GenuineIntel

cpu family      : 6

model           : 42

model name      : Intel(R) Core(TM) i5-2450M CPU @ 2.50GHz

stepping        : 7

microcode       : 0x12

cpu MHz         : 2501.000

cache size      : 3072 KB

physical id     : 0

siblings        : 2

core id         : 0

cpu cores       : 2

apicid          : 0

initial apicid  : 0

fpu             : yes

fpu_exception   : yes

cpuid level     : 13

wp              : yes

flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm ida arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpid

bogomips        : 4988.46

clflush size    : 64

cache_alignment : 64

address sizes   : 36 bits physical, 48 bits virtual

power management:

processor       : 1

vendor_id       : GenuineIntel

cpu family      : 6

model           : 42

model name      : Intel(R) Core(TM) i5-2450M CPU @ 2.50GHz

stepping        : 7

microcode       : 0x12

cpu MHz         : 2501.000

cache size      : 3072 KB

physical id     : 0

siblings        : 2

core id         : 1                                                                                                                                     

cpu cores       : 2                                                                                                                                     

apicid          : 2                                                                                                                                     

initial apicid  : 2

fpu             : yes

fpu_exception   : yes

cpuid level     : 13

wp              : yes

flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm ida arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpid

bogomips        : 4988.46

clflush size    : 64

cache_alignment : 64

address sizes   : 36 bits physical, 48 bits virtual

power management:
```

----------

## Jacekalex

 *Garrappachc wrote:*   

> Ja polecam -flto, ale od gcc:4.7.

 

W zwiazku z  cytowanym poleceniem, i faktem zwolnienia (planowanego) partycji "laboratorium", mam kilka pytań:

System szybciej działa kompilowany z -flto?

Który linker lepiej wziąsć do flto:

```
/usr/x86_64-pc-linux-gnu/binutils-bin/2.21.1/ld.gold
```

czy standardowy:

```
/usr/x86_64-pc-linux-gnu/binutils-bin/2.22/ld
```

Sznurek http://wiki.gentoo.org/wiki/Gold

I jakie są szanse na skompilowanie Gnome-2.32 na gcc:4.7?

Pozdrawiam

 :Cool: 

----------

## Garrappachc

Tzn póki co odradzam gcc 4.7. Pobawiłem się tym, ale nawet KDE 4.8 nie chciało wstać, więc z Gnomem byłbym tutaj tym bardziej ostrożny.

LTO jest dostępne już od gcc-4.5, ale dopiero od wersji 4.7 zużycie pamięci operacyjnej jest na tyle małe, że da się to to wykorzystać na domowych pecetach. Ponoć kompilacja firefoksa zajmuje tylko nieco ponad 4 GB.

LTO, przynajmniej w teorii, powinno rzeczywiście przyspieszyć system. Może nie zdziała cudów, ale różnica powinna być odczuwalna. Niestety, coś za coś - binarki skompilowane z lto są znacznie większe (nawet 5 razy), a sama kompilacja może trwać dwukrotnie dłużej.

----------

## Jacekalex

Zobaczę w "laboratorium", przebuduję stage, i sprawdzę, ile zajmują poszczególne programy.

Potem, jak to będzie miało sens oczywiście, to powolutku Xorga, potem Gnome lub Xfce, i może urodzi się z tego jakiś system  :Wink: 

Podobno większość problemów z kompilacją z LTO rozwiązuje linker ld.gold, także od niego zacznę.

Pozdrawiam

 :Cool: 

----------

