Компиляция MQL5 программ с набором инструкций AVX / AVX2 + FMA3 / AVX512 + FMA3 с 3902 билда - страница 3

 

Отвлеченно: люди не понимают, почему Windows 11 требует современные процессоры. Их в сторону уводит обсуждение TPM.

А на самом деле технари в Microsoft мечтают избавиться от компиляции ядра/приложений операционки под ржавое ведро и перейти базово хотя бы на AVX. Так и скорость и возможности подтянуть можно будет.

Но не перешли _еще_, боятся несовместимостей и тянут.

 

я просто пропустил информацию что AVX2 Терминал позже выйдет

Скоро выпустим третью подверсию терминала, собранную с применением AVX2 и FMA3.

 
Renat Fatkhullin #:

Отвлеченно: люди не понимают, почему Windows 11 требует современные процессоры. Их в сторону уводит обсуждение TPM.

А на самом деле технари в Microsoft мечтают избавиться от компиляции ядра/приложений операционки под ржавое ведро и перейти базово хотя бы на AVX. Так и скорость и возможности подтянуть можно будет.

Но не перешли, боятся несовместимостей и тянут.

Думаю, здесь всех значительно сильнее волнует скорость выполнения EX5 и потрохов терминала с тестером.

 
fxsaber #:

Думаю, здесь всех значительно сильнее волнует скорость выполнения EX5 и потрохов терминала с тестером.

Уровень оптимизации Windows лежит в корне производительности всех программ, запускаемых в Windows.

Потому, что все программы массово используют Windows API, которое понятия не имеет об AVX/AVX2 и тд. А ведь в некоторых местах операционка могла бы кратно быстрее выдавать результат.

 

Чтобы не быть голословным - сам собираю официальный опенсорсный драйвер Intel IAVF под последние версии совсем современных сетевых карт на Ubuntu 22.04:

make install
....

/tmp/iavf-4.9.1/src/.iavf.mod.o.cmd
cmd_/tmp/iavf-4.9.1/src/iavf.mod.o := gcc -Wp,-MMD,/tmp/iavf-4.9.1/src/.iavf.mod.o.d -nostdinc
-isystem /usr/lib/gcc/x86_64-linux-gnu/11/include -I./arch/x86/include -I./arch/x86/include/generated -I./include -I./arch/x86/include/uapi
-I./arch/x86/include/generated/uapi -I./include/uapi -I./include/generated/uapi -include ./include/linux/compiler-version.h -include ./include/linux/kconfig.h
-I./ubuntu/include -include ./include/linux/compiler_types.h
-D__KERNEL__
-fmacro-prefix-map=./= -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE
-Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Wno-format-security
-std=gnu89 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -fcf-protection=none -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387
-mpreferred-stack-boundary=3 -mskip-rax-setup -mtune=generic -mno-red-zone
-mcmodel=kernel -DCONFIG_X86_X32_ABI
-Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -mindirect-branch-cs-prefix
-mfunction-return=thunk-extern -fno-jump-tables -mharden-sls=all -fno-delete-null-pointer-checks
-Wno-frame-address -Wno-format-truncation -Wno-format-overflow -Wno-address-of-packed-member
-O2 -fno-allow-store-data-races -Wframe-larger-than=1024 -fstack-protector-strong -Wimplicit-fallthrough=5 -Wno-main -Wno-unused-but-set-variable
-Wno-unused-const-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-stack-clash-protection -g -gdwarf-5 -pg
-mrecord-mcount -mfentry -DCC_USING_FENTRY -Wdeclaration-after-statement -Wvla -Wno-pointer-sign -Wno-stringop-truncation -Wno-zero-length-bounds
-Wno-array-bounds -Wno-stringop-overflow -Wno-restrict -Wno-maybe-uninitialized -Wno-alloc-size-larger-than -fno-strict-overflow -fno-stack-check
-fconserve-stack -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wno-packed-not-aligned -I/tmp/iavf-4.9.1/src
-fsanitize=bounds -fsanitize=shift -fsanitize=bool -fsanitize=enum -DMODULE -DKBUILD_BASENAME='"iavf.mod"' -DKBUILD_MODNAME='"iavf"' -D__KBUILD_MODNAME=kmod_iavf
-c -o /tmp/iavf-4.9.1/src/iavf.mod.o /tmp/iavf-4.9.1/src/iavf.mod.c

Явно отключены: sse, sse2, mmx, 3d now, AVX

Включен Address Sanitizer, который здорово тормозит весь код. Ладно, хоть O2 оптимизация включена.

Вот как после этого надеяться, что сетевые карты Intel x710/810 работают эффективно и с минимальной задержкой? Вся операционка требует, чтобы ядро и драйверы были собраны на минималках.

 
Renat Fatkhullin #:

Чтобы не быть голословным

Поделитесь ссылкой на ресурс, где делятся цифрами сравнительной производительности до и после перекомпиляции софта, включая операционку.

 

Придётся теперь, на всякий случай, компилировать советники на том же сервере, где и запускать их. А не то, окажется AVX на рабочем ноуте не той системы)

А с метаквотовскими серверами может стать совсем весело)

 
Aleksey Nikolayev #:

Придётся теперь, на всякий случай, компилировать советники на том же сервере, где и запускать их. А не то, окажется AVX на рабочем ноуте не той системы)

А с метаквотовскими серверами может стать совсем весело)

В нашей VPS сети все серверы с AVX как минимум. На большинстве AVX2.

 
fxsaber #:

Поделитесь ссылкой на ресурс, где делятся цифрами сравнительной производительности до и после перекомпиляции софта, включая операционку.

Все в гугле есть.

Синтетические тесты не очень показательны, особенно от производителей железа. Чтобы сделать вывод, необходимо множество бенчмарков проверить, а не поверить в один предложенный.

Нужно все самому тестировать на своих собственных программах с пониманием своего случая. Тяжелая математика float/double хорошо ускоряется. И компилятор должен быть правильный - только Clang.

 

В текущей бете 3905, доступной на MetaQuotes-Demo, мы расширили информацию для MQL5:

void OnStart()
  {
   Print("CPU name:         ",TerminalInfoString(TERMINAL_CPU_NAME));
   Print("CPU cores:        ",TerminalInfoInteger(TERMINAL_CPU_CORES));
   Print("CPU architecture: ",TerminalInfoString(TERMINAL_CPU_ARCHITECTURE));   // новое
   Print("");
   Print("EX5 architecture: ",__CPU_ARCHITECTURE__);                            // новое
  }

CPU name:         12th Gen Intel Core i9-12900K
CPU cores:        24
CPU architecture: AVX2 + FMA3

EX5 architecture: AVX

Можно на лету узнавать возможности процессора, на котором запущен терминал.

С помощью строкового макроса  __CPU_ARCHITECTURE__ можно узнавать и проверять под какой набор команд собран EX5 файл.


При неудаче загрузки пишется:

your CPU architecture does not allow to run the file 'test.ex5', AVX512 required, you have AVX2
Причина обращения: