Compilation des programmes MQL5 avec le jeu d'instructions AVX / AVX2 + FMA3 / AVX512 + FMA3 à partir du build 3902 - page 3

 

Distraction : les gens ne comprennent pas pourquoi Windows 11 nécessite des processeurs modernes. Ils se laissent distraire par la discussion sur les MTP.

En fait, les techniciens de Microsoft rêvent de se débarrasser de la compilation du noyau du système d'exploitation et des applications sous un seau rouillé et de passer au moins à AVX. De cette manière, il sera possible d'améliorer la vitesse et les capacités.

Mais ils ne sont pas encore passés à l'AVX, ils ont peur des incompatibilités et font traîner les choses.

 

Je viens de manquer l'information selon laquelle le terminal AVX2 sera publié plus tard.

Nous publierons bientôt la troisième version du terminal, construite en utilisant AVX2 et FMA3.

 
Renat Fatkhullin #:

Distraction : les gens ne comprennent pas pourquoi Windows 11 nécessite des processeurs modernes. Ils se laissent distraire par la discussion sur les MTP.

En fait, les techniciens de Microsoft rêvent de se débarrasser de la compilation du noyau du système d'exploitation et des applications sous un seau rouillé et de passer au moins à AVX. De cette manière, il sera possible d'améliorer la vitesse et les capacités.

Mais ils ne sont pas passés à AVX, ils ont peur des incompatibilités et traînent en longueur.

Je pense que tout le monde ici est bien plus préoccupé par la vitesse d'exécution d'EX5 et les tripes du terminal avec un testeur.

 
fxsaber #:

Je pense que tout le monde ici est beaucoup plus préoccupé par la vitesse de l'EX5 et par le fait de vider le terminal avec le testeur.

Le niveau d'optimisation de Windows est à l'origine des performances de tous les programmes fonctionnant sous Windows.

Parce que tous les programmes utilisent massivement l'API de Windows, qui n'a aucune idée d'AVX/AVX2, etc. Mais à certains endroits, le système d'exploitation pourrait produire des résultats beaucoup plus rapides.

 

Je construis moi-même le pilote opensource officiel Intel IAVF pour les dernières versions de cartes réseau très modernes sur 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

Explicitement désactivés : sse, sse2, mmx, 3d now, AVX

L'Address Sanitizer est activé, ce qui ralentit l'ensemble du code. Au moins, l'optimisation O2 est activée.

Comment puis-je espérer que les cartes réseau Intel x710/810 fonctionnent efficacement et avec une latence minimale ? L'ensemble du système d'exploitation nécessite que le noyau et les pilotes soient construits au minimum.

 
Renat Fatkhullin #:

Ne pas être sans fondement

Partagez un lien vers une ressource qui donne des chiffres sur les performances comparées avant et après la recompilation des logiciels, y compris le système d'exploitation.

 

Je vais devoir compiler les EA sur le même serveur que celui où je les exécute, juste au cas où. Ou bien AVX s'avérera être sur le mauvais système de mon ordinateur portable)

Et avec les serveurs métaquot, cela peut devenir assez amusant).

 
Aleksey Nikolayev #:

Je vais devoir compiler les EA sur le même serveur que celui où je les exécute, juste au cas où. Sinon, AVX se retrouvera sur le mauvais système de mon ordinateur portable professionnel.)

Et avec les serveurs métaquot, cela peut devenir assez amusant).

Dans notre réseau VPS, tous les serveurs ont au moins AVX. La plupart d'entre eux ont AVX2.

 
fxsaber #:

Partagez un lien vers une ressource où l'on peut trouver des chiffres sur les performances comparées avant et après la recompilation d'un logiciel, y compris le système d'exploitation.

Tout est sur Google.

Les tests synthétiques ne sont pas très révélateurs, surtout de la part des fabricants de matériel. Pour tirer une conclusion, vous devez vérifier un grand nombre de tests de référence, et non pas vous fier à un seul test suggéré.

Vous devez tout tester vous-même sur vos propres programmes en comprenant votre propre cas. Les mathématiques lourdes en flottant/double sont bien accélérées. Et le compilateur devrait être correct - seulement Clang.

 

Dans la version actuelle beta 3905, disponible sur MetaQuotes-Demo, nous avons étendu les informations pour 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

Vous pouvez reconnaître à la volée les capacités du processeur sur lequel le terminal est exécuté.

En utilisant la macro de chaîne __CPU_ARCHITECTURE__, vous pouvez découvrir et vérifier pour quel ensemble de commandes le fichier EX5 est construit.


Lorsque le chargement échoue, il écrit :

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