Compilação de programas MQL5 com conjunto de instruções AVX / AVX2 + FMA3 / AVX512 + FMA3 do build 3902 - página 3

 

Distração: as pessoas não entendem por que o Windows 11 exige processadores modernos. Elas se distraem com a discussão sobre o TPM.

Na verdade, os técnicos da Microsoft sonham em se livrar da compilação do kernel/aplicativos do sistema operacional em um balde enferrujado e mudar para AVX, pelo menos. Dessa forma, será possível aumentar a velocidade e os recursos.

Mas eles ainda não mudaram, pois têm medo de incompatibilidades e estão protelando o processo.

 

Acabei de perder a informação de que o Terminal AVX2 será lançado mais tarde.

Em breve, lançaremos a terceira versão do terminal, desenvolvida com o AVX2 e o FMA3.

 
Renat Fatkhullin #:

Distração: as pessoas não entendem por que o Windows 11 exige processadores modernos. Elas são desviadas pela discussão sobre o TPM.

Na verdade, os técnicos da Microsoft sonham em se livrar da compilação do kernel/aplicativos do sistema operacional em um balde enferrujado e mudar para AVX, pelo menos. Dessa forma, será possível aumentar a velocidade e os recursos.

Mas eles não mudaram para o AVX, têm medo de incompatibilidades e estão se arrastando.

Acho que todos aqui estão muito mais preocupados com a velocidade de execução do EX5 e com a integridade do terminal com um testador.

 
fxsaber #:

Acho que todos aqui estão muito mais preocupados com a velocidade do EX5 e com a destruição do terminal com o testador.

O nível de otimização do Windows é a raiz do desempenho de todos os programas executados no Windows.

Porque todos os programas usam maciçamente a API do Windows, que não faz ideia do AVX/AVX2 etc. Mas, em alguns pontos, o sistema operacional poderia produzir resultados muito mais rápidos.

 

Para não ser infundado, eu mesmo construí o driver oficial de código aberto Intel IAVF para as versões mais recentes de NICs muito modernas no 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

Explicitamente desativado: sse, sse2, mmx, 3d now, AVX

O Address Sanitizer está ativado, o que torna todo o código mais lento. Pelo menos a otimização O2 está ativada.

Como posso esperar que as placas de rede Intel x710/810 funcionem de forma eficiente e com latência mínima? Todo o sistema operacional exige que o kernel e os drivers sejam criados, no mínimo.

 
Renat Fatkhullin #:

Não deve ser infundado

Compartilhe um link para um recurso no qual eles compartilham números de desempenho comparativo antes e depois da recompilação do software, incluindo o sistema operacional.

 

Terei que compilar os EAs no mesmo servidor em que os executo, por precaução. Ou o AVX estará no sistema errado em meu laptop)

E com servidores methaquot isso pode se tornar bastante divertido).

 
Aleksey Nikolayev #:

Terei que compilar os EAs no mesmo servidor em que os executo, por precaução. Ou o AVX acabará no sistema errado em meu laptop de trabalho)

E com servidores methaquot isso pode se tornar bastante divertido).

Em nossa rede VPS, todos os servidores têm pelo menos o AVX. A maioria deles tem AVX2.

 
fxsaber #:

Compartilhe um link para um recurso no qual eles compartilham números de desempenho comparativo antes e depois da recompilação do software, incluindo o sistema operacional.

Tudo está no Google.

Os testes sintéticos não são muito reveladores, especialmente dos fabricantes de hardware. Para chegar a uma conclusão, você precisa verificar vários benchmarks, não acreditar em um único sugerido.

É preciso testar tudo por conta própria em seus próprios programas, entendendo seu próprio caso. A matemática pesada de float/duplo é bem acelerada. E o compilador deve estar correto - somente o Clang.

 

Na versão beta 3905 atual, disponível no MetaQuotes-Demo, ampliamos as informações para 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

Você pode reconhecer rapidamente os recursos do processador no qual o terminal está sendo executado.

Usando a macro de cadeia de caracteres __CPU_ARCHITECTURE__, você pode descobrir e verificar para qual conjunto de comandos o arquivo EX5 foi criado.


Quando o carregamento falha, ele escreve:

your CPU architecture does not allow to run the file 'test.ex5', AVX512 required, you have AVX2