С 4й версии GCC умеет подбирать оптимальные параметры автоматически, для этого нужно всего лишь указать в CFLAGS ключ -march=native. Однако, бывают случаи, когда -march=native использовать нельзя, например, если у вас distcc (proof) Вот здесь начинается особая, уличная магия. Первое, что нужно сделать - узнать свою модель процессора. Сделать это можно при помощи команды:

grep -m1 -A3 "vendor_id" /proc/cpuinfo

Получите примерно такое:

  1. vendor_id       : GenuineIntel
  2. cpu family      : 6
  3. model           : 30
  4. model name      : Intel(R) Xeon(R) CPU           X3450  @ 2.67GHz

Простое решение - позаимствовать из архивов Gentoo Wiki набор протестированных флагов (раз, два, три). Однако такие документации уже довольно стары, а то и вовсе не поддерживаются. Так что вы имеете достаточно большую вероятность просто не найти свой процессор в этих простынях. Поэтому последний и сложный вариант - составить свой собственный, точный набор флагов, используя те же инструменты, что и GCC для -march=native.

  1. # выполнять от root`а
  2. gcc -c -Q -march=native --help=target

Это команда выведет список флагов, который поддерживает ваш процессор. Используйте осторожно, ибо не всякая программа будет компилироваться с ними. Например от mstackrealign у меня намертво отваливалась сборка порта bzip2. Так же будет полезно рассказать GCC сколько памяти у процессора в L-кешах. В этом нам поможет утилита lscpu:

  1. sb0y@fabian / $ lscpu
  2. Architecture:          x86_64
  3. CPU op-mode(s):        32-bit, 64-bit
  4. Byte Order:            Little Endian
  5. CPU(s):                8
  6. On-line CPU(s) list:   0-7
  7. Thread(s) per core:    2
  8. Core(s) per socket:    4
  9. Socket(s):             1
  10. NUMA node(s):          1
  11. Vendor ID:             GenuineIntel
  12. CPU family:            6
  13. Model:                 30
  14. Stepping:              5
  15. CPU MHz:               2660.000
  16. BogoMIPS:              5320.11
  17. Virtualization:        VT-x
  18. L1d cache:             32K
  19. L1i cache:             32K
  20. L2 cache:              256K
  21. L3 cache:              8192K
  22. NUMA node0 CPU(s):     0-7

Теперь можно добавить в CFLAGS: --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=8192. Вот и всё. После установки новых флагов, лучше выполнить emerge system, чтобы быть уверенным, что ничего не сломалось.



Статью пока никто не комментировал. Ваш комментарий может стать первым.

Войдите или зарегистрируйтесь, чтобы написать комментарий.