Kompilierung von MQL5-Programmen mit AVX / AVX2 + FMA3 / AVX512 + FMA3 Befehlssatz ab Build 3902 - Seite 3

 

Abgelenkt: Die Leute verstehen nicht, warum Windows 11 moderne Prozessoren benötigt. Sie lassen sich von der TPM-Diskussion ablenken.

Tatsächlich träumen Microsoft-Techniker davon, die Kompilierung des Betriebssystemkerns und der Anwendungen unter einem rostigen Eimer loszuwerden und zumindest auf AVX umzusteigen. Auf diese Weise wird es möglich sein, Geschwindigkeit und Fähigkeiten zu verbessern.

Aber sie haben _noch_ nicht umgestellt, sie haben Angst vor Inkompatibilitäten und zögern es hinaus.

 

Ich habe gerade die Information verpasst, dass das AVX2 Terminal später veröffentlicht wird.

Wir werden bald die dritte Version des Terminals veröffentlichen, die mit AVX2 und FMA3 gebaut wurde.

 
Renat Fatkhullin #:

Abgelenkt: Die Leute verstehen nicht, warum Windows 11 moderne Prozessoren benötigt. Sie lassen sich von der TPM-Diskussion ablenken.

Tatsächlich träumen Microsoft-Techniker davon, die Kompilierung des Betriebssystemkerns und der Anwendungen unter einem rostigen Eimer loszuwerden und zumindest auf AVX umzusteigen. Auf diese Weise könnten Geschwindigkeit und Fähigkeiten verbessert werden.

Aber sie sind nicht auf AVX umgestiegen, sie haben Angst vor Inkompatibilitäten und ziehen sich zurück.

Ich denke, jeder hier macht sich viel mehr Sorgen um die Geschwindigkeit der EX5-Ausführung und um die Eingeweide des Terminals mit einem Tester.

 
fxsaber #:

Ich glaube, jeder hier macht sich viel mehr Gedanken über die Geschwindigkeit von EX5 und das Ausnehmen des Terminals mit dem Tester.

Der Optimierungsgrad von Windows ist die Grundlage für die Leistung aller Programme, die unter Windows laufen.

Denn alle Programme nutzen massiv die Windows-API, die keine Ahnung von AVX/AVX2 etc. hat. Aber an einigen Stellen könnte das Betriebssystem viel schneller Ergebnisse liefern.

 

Um nicht unbegründet zu sein - ich selbst baue den offiziellen Intel IAVF OpenSource-Treiber für die neuesten Versionen von sehr modernen NICs auf 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

Explizit deaktiviert: sse, sse2, mmx, 3d now, AVX

Address Sanitizer ist aktiviert, was den gesamten Code verlangsamt. Zumindest die O2-Optimierung ist aktiviert.

Wie kann ich hoffen, dass die Intel x710/810 NICs effizient und mit minimaler Latenz arbeiten? Für das gesamte Betriebssystem müssen mindestens der Kernel und die Treiber erstellt werden.

 
Renat Fatkhullin #:

Nicht unsubstantiiert sein

Geben Sie einen Link zu einer Ressource an, die Vergleichszahlen zur Leistung vor und nach der Neukompilierung von Software, einschließlich des Betriebssystems, enthält.

 

Ich werde EAs auf demselben Server kompilieren müssen, auf dem ich sie ausführe, nur für den Fall. Oder es stellt sich heraus, dass AVX auf dem falschen System auf meinem Laptop läuft)

Und mit Methaquot-Servern kann es ziemlich lustig werden).

 
Aleksey Nikolayev #:

Ich werde EAs auf demselben Server kompilieren müssen, auf dem ich sie ausführe, nur für den Fall. Oder AVX landet auf dem falschen System auf meinem Arbeits-Laptop)

Und mit Methaquot-Servern kann es ziemlich lustig werden).

In unserem VPS-Netzwerk haben alle Server mindestens AVX. Die meisten von ihnen haben AVX2.

 
fxsaber #:

Geben Sie einen Link zu einer Ressource weiter, in der sie Vergleichszahlen zur Leistung vor und nach der Neukompilierung von Software, einschließlich des Betriebssystems, angeben.

Alles ist bei Google zu finden.

Synthetische Tests sind nicht sehr aufschlussreich, vor allem von Hardware-Herstellern. Um eine Schlussfolgerung zu ziehen, müssen Sie viele Benchmark-Tests durchführen und dürfen sich nicht auf einen einzigen verlassen.

Sie müssen alles selbst mit Ihren eigenen Programmen testen, mit Verständnis für Ihren eigenen Fall. Float/Double-lastige Mathematik wird gut beschleunigt. Und der Compiler sollte korrekt sein - nur Clang.

 

In der aktuellen Beta 3905, verfügbar unter MetaQuotes-Demo, haben wir die Informationen für MQL5 erweitert:

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

Sie können die Fähigkeiten des Prozessors, auf dem das Terminal läuft, im Handumdrehen erkennen.

Mit dem String-Makro __CPU_ARCHITECTURE__ können Sie herausfinden und überprüfen, für welchen Befehlssatz die EX5-Datei gebaut ist.


Wenn das Laden fehlschlägt, schreibt es:

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