Compilazione di programmi MQL5 con set di istruzioni AVX / AVX2 + FMA3 / AVX512 + FMA3 dalla build 3902 - pagina 3

 

Distrazione: le persone non capiscono perché Windows 11 richiede processori moderni. Si lasciano distrarre dalla discussione sul TPM.

In realtà, i tecnici Microsoft sognano di sbarazzarsi della compilazione del kernel del sistema operativo/applicazioni sotto un secchio arrugginito e di passare almeno ad AVX. In questo modo sarà possibile migliorare la velocità e le funzionalità.

Ma non sono ancora passati ad AVX, hanno paura delle incompatibilità e la tirano per le lunghe.

 

Mi è sfuggita l'informazione che il terminale AVX2 sarà rilasciato più tardi.

Rilasceremo presto la terza versione del terminale, realizzata con AVX2 e FMA3.

 
Renat Fatkhullin #:

Distrazione: le persone non capiscono perché Windows 11 richiede processori moderni. Vengono distratti dalla discussione sul TPM.

In realtà, i tecnici Microsoft sognano di sbarazzarsi della compilazione del kernel del sistema operativo/applicazioni sotto un secchio arrugginito e di passare almeno ad AVX. In questo modo sarà possibile migliorare la velocità e le funzionalità.

Ma non sono passati ad AVX, hanno paura delle incompatibilità e la tirano per le lunghe.

Penso che tutti qui siano molto più preoccupati della velocità di esecuzione di EX5 e del terminale con un tester.

 
fxsaber #:

Penso che tutti qui siano molto più preoccupati della velocità di EX5 e di sventrare il terminale con il tester.

Il livello di ottimizzazione di Windows è alla base delle prestazioni di tutti i programmi che girano in Windows.

Perché tutti i programmi usano massicciamente le API di Windows, che non hanno idea di AVX/AVX2 ecc. Ma in alcuni punti il sistema operativo potrebbe produrre risultati molto più veloci.

 

Per non essere smentito - io stesso costruisco il driver ufficiale Intel IAVF opensource per le ultime versioni di NIC molto moderne su 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

Esplicitamente disabilitati: sse, sse2, mmx, 3d now, AVX

L'Address Sanitizer è abilitato, il che rallenta l'intero codice. Almeno l'ottimizzazione O2 è abilitata.

Come posso sperare che le NIC Intel x710/810 funzionino in modo efficiente e con una latenza minima? L'intero sistema operativo richiede che il kernel e i driver siano costruiti al minimo.

 
Renat Fatkhullin #:

Non essere infondato

Condividete un link a una risorsa in cui sono riportati i dati comparativi delle prestazioni prima e dopo la ricompilazione del software, compreso il sistema operativo.

 

Dovrò compilare gli EA sullo stesso server dove li eseguo, per sicurezza. Oppure AVX si rivelerà essere sul sistema sbagliato del mio portatile).

E con i server methaquot può diventare molto divertente).

 
Aleksey Nikolayev #:

Dovrò compilare gli EA sullo stesso server dove li eseguo, per sicurezza. Oppure AVX finirà sul sistema sbagliato del mio portatile di lavoro).

E con i server methaquot può diventare molto divertente).

Nella nostra rete VPS tutti i server hanno almeno AVX. La maggior parte di essi ha AVX2.

 
fxsaber #:

Condividete un link a una risorsa in cui sono riportati i dati comparativi delle prestazioni prima e dopo la ricompilazione del software, compreso il sistema operativo.

Tutto si trova su Google.

I test sintetici non sono molto rivelatori, soprattutto quelli dei produttori di hardware. Per trarre una conclusione, è necessario controllare molti benchmark, non credere a uno solo di quelli suggeriti.

È necessario testare tutto da soli con i propri programmi e con la comprensione del proprio caso. I calcoli pesanti a virgola mobile/doppia sono ben accelerati. E il compilatore dovrebbe essere corretto - solo Clang.

 

Nell'attuale beta 3905, disponibile su MetaQuotes-Demo, abbiamo esteso le informazioni per 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

È possibile riconoscere al volo le capacità del processore su cui è in esecuzione il terminale.

Utilizzando la macro stringa __CPU_ARCHITECTURE__ è possibile scoprire e verificare per quale serie di comandi è stato costruito il file EX5.


Quando il caricamento fallisce, scrive:

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