Compilación de programas MQL5 con juego de instrucciones AVX / AVX2 + FMA3 / AVX512 + FMA3 a partir de la compilación 3902 - página 3

 

Distraídos: la gente no entiende por qué Windows 11 requiere procesadores modernos. Se distraen con la discusión sobre el TPM.

De hecho, los técnicos de Microsoft sueñan con deshacerse de la compilación del núcleo/aplicaciones del sistema operativo bajo un cubo oxidado y pasar al menos a AVX. Así será posible mejorar la velocidad y las capacidades.

Pero no han cambiado _todavía_, tienen miedo de las incompatibilidades y lo están alargando.

 

Acabo de perderme la información de que el Terminal AVX2 será lanzado más adelante.

Pronto lanzaremos la tercera versión del terminal, construida usando AVX2 y FMA3.

 
Renat Fatkhullin #:

Distraídos: la gente no entiende por qué Windows 11 requiere procesadores modernos. Se distraen con la discusión sobre el TPM.

De hecho, los técnicos de Microsoft sueñan con deshacerse de la compilación del núcleo/aplicaciones del sistema operativo bajo un cubo oxidado y pasar al menos a AVX. Así será posible mejorar la velocidad y las capacidades.

Pero no han cambiado a AVX, tienen miedo de las incompatibilidades y están dando largas.

Creo que aquí todo el mundo está mucho más preocupado por la velocidad de ejecución de EX5 y las tripas del terminal con un tester.

 
fxsaber #:

Creo que aquí todo el mundo está mucho más preocupado por la velocidad de EX5 y por destripar el terminal con el tester.

El nivel de optimización de Windows es la raíz del rendimiento de todos los programas que se ejecutan en Windows.

Porque todos los programas usan masivamente la API de Windows, que no tiene ni idea de AVX/AVX2 etc. Pero en algunos puntos el sistema operativo podría producir resultados mucho más rápidos.

 

Para no ser insustancial - yo mismo construyo el driver opensource oficial Intel IAVF para las últimas versiones de NICs muy modernas en 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

Explícitamente desactivado: sse, sse2, mmx, 3d now, AVX

Address Sanitizer está habilitado, lo que ralentiza todo el código. Al menos la optimización O2 está habilitada.

¿Cómo puedo esperar que las NIC Intel x710/810 funcionen eficientemente y con una latencia mínima? Todo el sistema operativo requiere que el kernel y los controladores estén construidos como mínimo.

 
Renat Fatkhullin #:

No ser infundado

Comparte un enlace a un recurso donde compartan cifras de rendimiento comparativo antes y después de recompilar el software, incluido el sistema operativo.

 

Tendré que compilar los EAs en el mismo servidor donde los ejecuto, por si acaso. O AVX resultará estar en el sistema equivocado en mi portátil)

Y con servidores methaquot puede llegar a ser bastante divertido).

 
Aleksey Nikolayev #:

Tendré que compilar los EA en el mismo servidor donde los ejecuto, por si acaso. O AVX terminará en el sistema equivocado en mi portátil del trabajo).

Y con servidores methaquot puede llegar a ser bastante divertido).

En nuestra red VPS todos los servidores con AVX por lo menos. La mayoría de ellos tienen AVX2.

 
fxsaber #:

Comparte un enlace a un recurso donde se compartan cifras de rendimiento comparativo antes y después de recompilar el software, incluido el sistema operativo.

Todo está en google.

Las pruebas sintéticas no son muy reveladoras, especialmente las de los fabricantes de hardware. Para sacar una conclusión, necesitas comprobar muchos benchmarks, no creer en uno sugerido.

Tienes que probarlo todo tú mismo con tus propios programas y conociendo tu caso. Las matemáticas pesadas con flotadores/dobles están bien aceleradas. Y el compilador debería ser correcto - sólo Clang.

 

En la actual beta 3905, disponible en MetaQuotes-Demo, hemos ampliado la información 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

Se puede reconocer sobre la marcha las capacidades del procesador en el que se está ejecutando el terminal.

Usando la macro de cadena __CPU_ARCHITECTURE__ puedes averiguar y comprobar para qué conjunto de comandos está construido el archivo EX5.


Cuando la carga falla, escribe:

your CPU architecture does not allow to run the file 'test.ex5', AVX512 required, you have AVX2
Razón de la queja: