LINUX.ORG.RU

Флаги оптимизации gcc под AMD

 , ,


1

4

Добрый день! Я не очень продвинут в вопросах сборки приложений из исходников, но есть большой интерес разобраться. Также очень интересна тема оптимизации.

В связи с этим возник вопрос, даже несколько, на которые гугл не дал ответа.

Есть ноутбук с процессором AMD. cat /proc/cpuinfo выдаёт такую инфу:

processor	: 0
vendor_id	: AuthenticAMD
cpu family	: 16
model		: 6
model name	: AMD Athlon(tm) II Neo K325 Dual-Core Processor
stepping	: 3
microcode	: 0x10000c8
cpu MHz		: 800.000
cache size	: 1024 KB
physical id	: 0
siblings	: 2
core id		: 0
cpu cores	: 2
apicid		: 0
initial apicid	: 0
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 rep_good nopl nonstop_tsc extd_apicid pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a 3dnowprefetch osvw ibs skinit wdt nodeid_msr hw_pstate npt lbrv svm_lock nrip_save vmmcall
bugs		: tlb_mmatch apic_c1e fxsave_leak
bogomips	: 2593.38
TLB size	: 1024 4K pages
clflush size	: 64
cache_alignment	: 64
address sizes	: 48 bits physical, 48 bits virtual
power management: ts ttp tm stc 100mhzsteps hwpstate

Где то в гугле нашёл команду, выводящую флаги gcc для текущей конфигурации и вот тут начинается непонятное. Gcc версии 4.8.4, Linux Mint 17.3

gcc -c -Q -march=native --help=target выдаёт:

The following options are target specific:
  -m128bit-long-double        		[disabled]
  -m32                        		[disabled]
  -m3dnow                     		[disabled]
  -m3dnowa                    		[disabled]
  -m64                        		[enabled]
  -m80387                     		[enabled]
  -m8bit-idiv                 		[disabled]
  -m96bit-long-double         		[enabled]
  -mabi=                      		sysv
  -mabm                       		[enabled]
  -maccumulate-outgoing-args  		[disabled]
  -maddress-mode=             		short
  -madx                       		[disabled]
  -maes                       		[disabled]
  -malign-double              		[disabled]
  -malign-functions=          		0
  -malign-jumps=              		0
  -malign-loops=              		0
  -malign-stringops           		[enabled]
  -mandroid                   		[disabled]
  -march=                     		amdfam10
  -masm=                      		att
  -mavx                       		[disabled]
  -mavx2                      		[disabled]
  -mavx256-split-unaligned-load 	[disabled]
  -mavx256-split-unaligned-store 	[disabled]
  -mbionic                    		[disabled]
  -mbmi                       		[disabled]
  -mbmi2                      		[disabled]
  -mbranch-cost=              		0
  -mcld                       		[disabled]
  -mcmodel=                   		32
  -mcpu=                      		
  -mcrc32                     		[disabled]
  -mcx16                      		[enabled]
  -mdispatch-scheduler        		[disabled]
  -mf16c                      		[disabled]
  -mfancy-math-387            		[enabled]
  -mfentry                    		[enabled]
  -mfma                       		[disabled]
  -mfma4                      		[disabled]
  -mforce-drap                		[disabled]
  -mfp-ret-in-387             		[enabled]
  -mfpmath=                   		387
  -mfsgsbase                  		[disabled]
  -mfused-madd                		
  -mfxsr                      		[enabled]
  -mglibc                     		[enabled]
  -mhard-float                		[enabled]
  -mhle                       		[disabled]
  -mieee-fp                   		[enabled]
  -mincoming-stack-boundary=  		0
  -minline-all-stringops      		[disabled]
  -minline-stringops-dynamically 	[disabled]
  -mintel-syntax              		
  -mlarge-data-threshold=     		0x10000
  -mlong-double-64            		[disabled]
  -mlong-double-80            		[enabled]
  -mlwp                       		[disabled]
  -mlzcnt                     		[enabled]
  -mmmx                       		[disabled]
  -mmovbe                     		[disabled]
  -mms-bitfields              		[disabled]
  -mno-align-stringops        		[disabled]
  -mno-fancy-math-387         		[disabled]
  -mno-push-args              		[disabled]
  -mno-red-zone               		[disabled]
  -mno-sse4                   		[enabled]
  -momit-leaf-frame-pointer   		[disabled]
  -mpc32                      		[disabled]
  -mpc64                      		[disabled]
  -mpc80                      		[disabled]
  -mpclmul                    		[disabled]
  -mpopcnt                    		[enabled]
  -mprefer-avx128             		[disabled]
  -mpreferred-stack-boundary= 		0
  -mprfchw                    		[enabled]
  -mpush-args                 		[enabled]
  -mrdrnd                     		[disabled]
  -mrdseed                    		[disabled]
  -mrecip                     		[disabled]
  -mrecip=                    		
  -mred-zone                  		[enabled]
  -mregparm=                  		0
  -mrtd                       		[disabled]
  -mrtm                       		[disabled]
  -msahf                      		[enabled]
  -msoft-float                		[disabled]
  -msse                       		[disabled]
  -msse2                      		[disabled]
  -msse2avx                   		[disabled]
  -msse3                      		[disabled]
  -msse4                      		[disabled]
  -msse4.1                    		[disabled]
  -msse4.2                    		[disabled]
  -msse4a                     		[disabled]
  -msse5                      		
  -msseregparm                		[disabled]
  -mssse3                     		[disabled]
  -mstack-arg-probe           		[disabled]
  -mstackrealign              		[enabled]
  -mstringop-strategy=        		[default]
  -mtbm                       		[disabled]
  -mtls-dialect=              		gnu
  -mtls-direct-seg-refs       		[enabled]
  -mtune=                     		amdfam10
  -muclibc                    		[disabled]
  -mveclibabi=                		[default]
  -mvect8-ret-in-mem          		[disabled]
  -mvzeroupper                		[disabled]
  -mx32                       		[disabled]
  -mxop                       		[disabled]
  -mxsave                     		[disabled]
  -mxsaveopt                  		[disabled]

  Known assembler dialects (for use with the -masm-dialect= option):
    att intel

  Known ABIs (for use with the -mabi= option):
    ms sysv

  Known code models (for use with the -mcmodel= option):
    32 kernel large medium small

  Valid arguments to -mfpmath=:
    387 387+sse 387,sse both sse sse+387 sse,387

  Known vectorization library ABIs (for use with the -mveclibabi= option):
    acml svml

  Known address mode (for use with the -maddress-mode= option):
    long short

  Valid arguments to -mstringop-strategy=:
    byte_loop libcall loop rep_4byte rep_8byte rep_byte unrolled_loop

  Known TLS dialects (for use with the -mtls-dialect= option):
    gnu gnu2

Основной вопрос - почему все sse, даже mmx в состоянии disabled ? Второй вопрос - почему mfpmath в состоянии 387 ? Кстати говоря, такое состояние наблюдал даже у интеловских камней.

Потому что native кривой. Бери реальный тип твоего процессора и играйся с флагами, пока не получишь SIGILL.

a1batross ★★★★★
()
Ответ на: комментарий от a1batross

Я пробовал вместо native ставить amdfam10 - не помогло. Все флаги остались теми же.

anonymous
()

Видимо нет профиля для конкретно вашего проца. Тут проще самому флаги прописать, чем с native бороться.

RazrFalcon ★★★★★
()

Второй вопрос - почему mfpmath в состоянии 387 ?

Cистема 32-битная? mfpmath=sse по-дефолту только для x86_64

почему все sse, даже mmx в состоянии disabled ?

Автоопределение не взлетело. Выставляй вручную.

devl547 ★★★★★
()

попробуй добавить -msse4a -mfpmath=sse после -march, однако если это у тебя 32битный компилятор это только навредит ибо код разнесёт, а регистров в 2 раза меньше у тебя чем должно быть.

anonymous
()

Потому что эта команда врёт, это известный баг.

Смотри gcc -fverbose-asm -S -x c -o - -<<<'int main(){}'

или gcc -Q -v -x c -<<<'int main(){}'

anonymous
()
Ответ на: комментарий от anonymous

дефолтный march для всего бинарного софта = core2 для 64 бит, тот же жит-компилятор жабоскрипта в жирнолисе не так сильно тормозит только с ним.

anonymous
()
Ответ на: комментарий от a1batross

Прямо перепись икспердов в треде.

anonymous
()
Ответ на: комментарий от anonymous

Да, после добавления -msse4a -mfpmath=sse -m3dnow -m3dnowa всё стало выглядеть более менее прилично, спасибо

eol3000
() автор топика

Эти оптимизации для обычного кода дают ускорение, как правило, не более 3-5%. В то же самое время сам процессор почти всегда можно разогнать на 10-15% без потери стабильности.

anonymous
()
Ответ на: комментарий от anonymous

Да, спасибо, я что то упустил ваше сообщение из виду. Как до ноута доберусь - гляну.

eol3000
() автор топика
Ответ на: комментарий от anonymous

Не, разгон - не моё. Никогда не практиковал и не хочется. Любая угроза стабильности работы для меня как серпом по яйцам.

eol3000
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.