RSS Feed

CFLAGS i CXXFLAGS

2009/09/19 by admin

terminalCzym 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!

Kurs języka C na Wikibooks!

Ochrona stosu


1 komentarz »

  1. [...] 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ę [...]

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

*

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>