Autor Wątek: [How To]Kompilujemy binarki pod własny procesor  (Przeczytany 1039 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

sir_lucjan

  • AUR-OR
  • Administrator
  • Ekspert
  • *****
  • Wiadomości: 1327
  • Reputacja +11/-0
  • Nic nie działa, jak Polska cała!
    • Mój profil w AUR
  • Architektura: x86_64
  • DE/WM: Plasma 5
  • Distro: Arch Linux
  • GPU: Intel
  • Kernel: linux-bfq-haswell
[How To]Kompilujemy binarki pod własny procesor
« dnia: Październik 27, 2014, 20:32:41 »
Poradnik przeznaczony jest dla bardziej zaawansowanych użytkowników

Jeśli dość często kompilujemy za pomocą AUR bądź innych PKGBUILDów innego źródła, warto zastanowić się nad modyfikacją pliku /etc/makepkg.conf

Przed rozpoczęciem pracy, należy wykonać kopię zapasową pliku:

cp /etc/makepkg.conf /etc/makepkg.conf.backup
Na początek powinniśmy zlokalizować odpowiedni fragment:

#-- Exclusive: will only run on x86_64
# -march (or -mcpu) builds exclusively for an architecture
# -mtune optimizes for an architecture, but builds for whole processor family
CPPFLAGS="-D_FORTIFY_SOURCE=2"
CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4"
CXXFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4"
LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro"
#-- Make Flags: change this for DistCC/SMP systems
#MAKEFLAGS="-j2"

Stosując takie ustawienia, uzyskamy klasycznie skompilowaną paczkę, z ustawieniami domyślnymi. Nie będzie ona przeznaczona pod żaden konkretny model procesora. Jeśli jednak chcemy uzyskać nieco większą wydajność, możemy zmienić ustawienia w taki sposób, iż skompilowane przez nas binarki będą charakteryzowały się lepszym wsparciem dla naszego procesora.

Jak to osiągnąć? Wystarczy wprowadzić niewielkie zmiany.

CPPFLAGS="-D_FORTIFY_SOURCE=2"
CFLAGS="-march=native -O2 -pipe -fstack-protector --param=ssp-buffer-size=4"
CXXFLAGS="${CFLAGS}"

Jeśli chcemy wiedzieć, co kryje się pod tajemnym "march=native", możemy to z łatwością sprawdzić.

[lucjan@archlinux ~]$ gcc -march=native -E -v - </dev/null 2>&1 | sed -n 's/.* -v - //p'
-march=corei7-avx -mno-cx16 -mno-sahf -mno-movbe -mno-aes -mno-pclmul -mno-popcnt -mno-abm -mno-lwp -mno-fma -mno-fma4 -mno-xop -mno-bmi -mno-bmi2 -mno-tbm -mno-avx -mno-avx2 -mno-sse4.2 -mno-sse4.1 -mno-lzcnt -mno-rtm -mno-hle -mno-rdrnd -mno-f16c -mno-fsgsbase -mno-rdseed -mno-prfchw -mno-adx -mfxsr -mno-xsave -mno-xsaveopt --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=6144 -mtune=corei7-avx

Od tej pory skompilowane przez nas paczki powinny charakteryzować się większą wydajnością oraz mniejszym zapotrzebowaniem na pamięć, jednak zmiany te mogą nie być znaczące. Należy też pamiętać, że tak skompilowane paczki powinny pozostać na użytek własny, gdyż u kolegi posiadającego inny sprzęt, całość może po prostu nie funkcjonować w oczekiwany sposób.

Niestety, poradnik ten nie działa podczas kompilowania programów opartych na bibliotece Qt 4/5.

Źródła:

https://wiki.archlinux.org/index.php/makepkg

https://wiki.gentoo.org/wiki/GCC_optimization
Dell Inspiron 15-3542 (3542-2538) || Linux Register User: #536661
[AUR]  [GitHub]

 

Polityka cookies
Darmowe Fora | Darmowe Forum
ztm cesarstwoniemieckie ka1997 humor proskills