Что-то меня скорость работы плагинов Cinelerra-GG не устраивала (6-7 фпс для color3way на одной дорожке 1280*720!), и я решил поглядеть, что мне может дать автовекторизация (так по ядрам Cin и так умеет раскидывать работу плагинов).
Покурил доки
https://locklessinc.com/articles/vectorize/
http://gcc.gnu.org/projects/tree-ssa/vectorization.html
врубил "-O3 -march=native -mtune native" вместо "-O2 -march=i486 -mtune=i686" (дефолт слакбилда, который я юзал). Скорость поднялась до 9 фпс, но векторных инструкций почти не было..
Проверял через скрипт, который нашёл тут
https://superuser.com/questions/726395/how-to-check-if-a-binary-requires-sse4...
https://pastebin.com/A8bAuHAP (почему-то концы строк он мне сделал виндовые! поменял через меню в kwrite, иначе не работало)
objdump -M intel -d /dev/shm/tmp/cinelerra-goodguy-20190211/cinelerra-5.1/plugins/color3way/i686/color3way.o | ./opcodes.sh -s SSE2 -s SSE3 -s SSE -s AVX -s FMA | less
ладно, не работает ... Но если добавить -fast-math
так что флаги в global_config стали
CFLAGS_ := -O3 -ffast-math -ftree-vectorizer-verbose=2 -march=native -mtune=native -D__STDC_CONSTANT_MACROS
то скорость плагина возросла до 15 фпс, а в ассемблерном выхлопе появились всякие vmovss и прочие....
Так вроде работает, но математически я его корректность не проверял ...
https://git.cinelerra-gg.org/git/?p=goodguy/cinelerra.git;a=blob;f=cinelerra-...
gcc --version gcc (GCC) 5.5.0
cat /proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 21
model : 2
model name : AMD FX(tm)-4300 Quad-Core Processor
stepping : 0
microcode : 0x6000852
cpu MHz : 1399.998
cache size : 2048 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 2
apicid : 16
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
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 constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmperf pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 popcnt aes xsave avx f16c lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs xop skinit wdt lwp fma4 tce nodeid_msr tbm topoext perfctr_core perfctr_nb cpb hw_pstate ssbd vmmcall bmi1 arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold
bugs : fxsave_leak sysret_ss_attrs null_seg spectre_v1 spectre_v2 spec_store_bypass
bogomips : 7599.98
TLB size : 1536 4K pages
clflush size : 64
cache_alignment : 64
address sizes : 48 bits physical, 48 bits virtual
power management: ts ttp tm 100mhzsteps hwpstate cpb eff_freq_ro
Интересно, на 64-битной сборке прирост будет ли? Потом может быть проверю.
Ещё может кому ресурс пригодится (eng) https://www.agner.org/optimize/