使用第 3902 版的 AVX / AVX2 + FMA3 / AVX512 + FMA3 指令集编译 MQL5 程序 - 页 3

 

分心:人们不明白 Windows 11 为什么需要现代处理器。他们被 TPM 的讨论牵着鼻子走。

事实上,微软的技术人员梦想着摆脱在生锈的水桶下编译操作系统内核/应用程序,至少改用 AVX。这样就有可能提高速度和功能。

但他们还没有改用 AVX,他们害怕不兼容,所以一直拖着。

 

我刚刚错过了 AVX2 终端稍后发布的信息。

我们即将发布使用 AVX2 和 FMA3 构建的第三版终端

 
Renat Fatkhullin #:

分心:人们不明白 Windows 11 为什么需要现代处理器。他们被 TPM 的讨论牵着鼻子走。

事实上,微软的技术人员梦想着摆脱在生锈的水桶下编译操作系统内核/应用程序,至少改用 AVX。这样就有可能提高速度和功能。

但他们并没有改用 AVX,而是害怕不兼容,所以一直拖着。

我认为这里的每个人都更关心 EX5 的执行速度和使用测试仪的终端内核。

 
fxsaber #:

我认为,这里的每个人都更关心 EX5 的速度和使用测试仪对终端进行开膛破肚。

Windows 优化水平是所有在 Windows 中运行的程序性能的根源。

因为所有程序都大量使用 Windows API,而 Windows API 对 AVX/AVX2 等一无所知。但在某些地方,操作系统的运行速度会更快。

 

我自己在 Ubuntu 22.04 上为最新版本的现代网卡构建了英特尔 IAVF 官方开源驱动程序

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

明确禁用:SSE、SSE2、MMX、3D now、AVX

地址消毒器(Address Sanitizer)已启用,这会减慢整个代码的运行速度。至少启用了 O2 优化。

我怎么能希望英特尔 x710/810 网卡工作效率高、延迟小呢?整个操作系统至少需要内核和驱动程序。

 
Renat Fatkhullin #:

并非没有事实根据

分享一个资源链接,在那里他们分享了重新编译软件(包括操作系统)前后的性能对比数据。

 

为了以防万一,我必须在运行 EA 的同一台服务器上编译 EA。否则 AVX 就会在我笔记本电脑上的错误系统上运行)。

如果有了元配服务器,这将变得非常有趣)。

 
Aleksey Nikolayev #:

为了以防万一,我必须在运行 EA 的同一台服务器上编译 EA。否则 AVX 就会在我工作的笔记本电脑上出现在错误的系统中)。

而且,有了元配服务器,这可能会变得相当有趣)。

在我们的 VPS 网络中,所有服务器至少都有 AVX。其中大部分都有 AVX2。

 
fxsaber #:

分享一个资源链接,在该链接中,他们分享了重新编译软件(包括操作系统)前后的性能对比数据。

一切都在谷歌上。

合成测试并不能说明问题,尤其是硬件制造商提供的测试。要得出结论,你需要检查很多基准测试,而不是相信一个建议。

您需要在了解自身情况的前提下,在自己的程序上测试一切。浮点运算/运算量大的数学运算可以很好地加速。编译器应该是正确的--只有 Clang。

 

在 MetaQuotes-Demo 提供的当前 3905 测试版中,我们扩展了 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

您可以在运行中识别终端所运行的处理器的能力。

使用字符串宏__CPU_ARCHITECTURE__ 可以找出并检查 EX5 文件是为哪一组命令构建的。


当加载失败时,它会写入

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