Czym jest CFLAGS i CXXFLAGS ??
To najprościej mówią zmienne środowiskowe w Makefile pozwalające przekazać nam dodatkowe parametry do kompilatora (gcc) .
CFLAGS umożliwia dodać przełączniki dla kompilatora C, a CXXFLAGS ma być stosowany przy powoływaniu się na C + + kompilator. Podobnie, zmienna CPPFLAGS istnieje w przełączniki mają być przekazane do preprocesora C. Zmienne te najczęściej wykorzystywane są do optymalizacji lub debugowania np.: -g lub -march=k8.
Użytkownicy wolnych systemów w dość łatwy sposób mogą dowiedzieć się jakich przełączników mogą użyć.
W tym celu otwieramy terminal/konsole i wpisujemy:
user@PC:~> gcc –help
lub też bardziej szczegółow używamy
user@PC:~> gcc –help={target|optimizers|warnings|undocumented|params}[,{[^]joined|[^]separate}]
albo
user@PC:~> man gcc zostanie (wyświetlona strona podręcznika dla gcc).
Teraz chcemy się dowiedzieć jakie flagi mamy włączyć dla procesora.
Przykład oprę na swoim procesorze u Was powinien być inny wynik.
W tym celu otwieramy terminal/konsole i wpisujemy :
user@PC:~> cat /proc/cpuinfo .
processor : 0
vendor_id : AuthenticAMD
cpu family : 16
model : 2
model name : AMD Phenom(tm) 8450 Triple-Core Processor
stepping : 3
cpu MHz : 2100.000
cache size : 512 KB
physical id : 0
siblings : 3
core id : 0
cpu cores : 3
apicid : 0
initial apicid : 0
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs
bogomips : 4219.19
clflush size : 64
power management: ts ttp tm stc 100mhzsteps hwpstate
processor : 1
vendor_id : AuthenticAMD
cpu family : 16
model : 2
model name : AMD Phenom(tm) 8450 Triple-Core Processor
stepping : 3
cpu MHz : 2100.000
cache size : 512 KB
physical id : 0
siblings : 3
core id : 1
cpu cores : 3
apicid : 1
initial apicid : 1
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs
bogomips : 4219.53
clflush size : 64
power management: ts ttp tm stc 100mhzsteps hwpstate
processor : 2
vendor_id : AuthenticAMD
cpu family : 16
model : 2
model name : AMD Phenom(tm) 8450 Triple-Core Processor
stepping : 3
cpu MHz : 1100.000
cache size : 512 KB
physical id : 0
siblings : 3
core id : 2
cpu cores : 3
apicid : 2
initial apicid : 2
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs
bogomips : 4219.42
clflush size : 64
power management: ts ttp tm stc 100mhzsteps hwpstate
Co na pewno rzuca się w oczy, to to że widać różnicę w taktowaniu procesora. AMD Phenom(tm) 8450 Triple-Core Processor posiada 3 rdzenie, gdzie każdy z nich może być taktowany inną cześtotliowścią. Wiec w łatwy sposób można zauważyć czy rdzenie są zajęte
.
Osobiści będzie mnie jeszcze interesować SSE, SSE2, PNI (SSE3), SSE4A, 3DNOW, 3DNOWEXT i SVM, PAE.
SSE, SSE2, PNI (SSE3), SSE4A, 3DNOW, 3DNOWEXT nazwą zestawu instrukcji przyspieszających wykonanie kodu (tak najbardziej skrótowo), często wykorzystywane przy multimediach (obróbka filmów, zdjęć, gry).
SVM procesor z flagą AMD-v/VT to inaczej wsparcie dla virtualizacji, co znacznie przyspiesza działanie maszyn wirtualnych, ale o tym innym razem
.
PAE rozszerzenie adresu fizycznego pozwalających zaadresować więcej niż 4GB pamięci fizycznej w systemach 32-bitowych. Znany problem wielu użytkowników M$ Windows XP wersji 32-bitowej, gdzie niestety mogą oni używać tylko 3GB z hakiem. Dopiero wersja 64-bitowa pozwalała skorzystać z pełnej ilości pamięci RAM.
Cóż wniosek prosty nie zawsze to co jest płatne jest dobre dla użytkownika, a tym bardziej gdy stoją za tym duże pieniądze
.
Na stronie wiki gentoo w dziale dla AMD doczytać możemy :
vendor_id : AuthenticAMD
cpu family : 16
model : 2
model name : AMD Phenom(tm) xxxx Triple/Quad-Core Processor
stepping : 2/3
że dla tego procesora właściwą flagą jest
CFLAGS=”-march=k8 -O2 -pipe”
dla wersji gcc starszej do 4.2 i włącznie, natomiast dla wersji 4.3
CFLAGS=”-march=amdfam10 -O2 -pipe”.
Często stosuję również flagę -fstack-protector lub -fstack-protector-all.Pierwsza chroni używając pewną heurystykę i jedynie dla samej tablicy znaków, druga zaś dla pozostałych typów. Wadą jest to, że kod staje się większy i wolniejszy i dochodzi do większego zużycia stosu. Coś za coś, optymalizujemy po to by kod był szybciej wykonywany ale jednocześnie zabezpieczając i to tylko częściowo kod, powodujemy jego zwiększenie i spowolnienie. Polecam stosować tylko dla newralgicznych punktów systemu, lub takich programów jak chociażby przeglądarki internetowe, które są bardzo narażone na *buffer overflow*.
W następnym poście jak możemy wykorzystać te informacje do własnoręcznego kompilowania pakietów dla systemu, którego posiadamy tak by odpowiednio wyprofilować system do naszych potrzeb
.
Polecam!

[...] tego pliku. W pozostałych tworzonych przez Was będzie analogicznie, tylko zmienia się sama flaga CFLAGS, by wiedzieć jaka powinna być na stronie Wiki Gentoo można się [...]