빌드 3902에서 AVX / AVX2 + FMA3 / AVX512 + FMA3 명령어 집합을 사용한 MQL5 프로그램 컴파일 - 페이지 3

 

주의 산만: 사람들은 Windows 11에 최신 프로세서가 필요한 이유를 이해하지 못합니다. 그들은 TPM에 대한 논의에 집중하지 못합니다.

사실 Microsoft 기술자들은 녹슨 버킷에서 운영 체제 커널/애플리케이션을 컴파일하는 일을 없애고 최소한 AVX로 전환하는 것을 꿈꿉니다. 그렇게 하면 속도와 기능을 개선할 수 있을 것입니다.

그러나 그들은 아직 전환하지 않았고, 비호환성을 두려워하여 시간을 끌고 있습니다.

 

AVX2 터미널이 나중에 출시된다는 정보를 놓쳤습니다.

AVX2 및 FMA3를 사용하여 구축된 세 번째 버전의 터미널이 곧 출시될 예정입니다.

 
Renat Fatkhullin #:

주의 산만: 사람들은 Windows 11에 최신 프로세서가 필요한 이유를 이해하지 못합니다. TPM에 대한 논의에 집중하지 못합니다.

사실 Microsoft 기술자들은 녹슨 버킷에서 운영 체제 커널/애플리케이션을 컴파일하는 일을 없애고 최소한 AVX로 전환하는 것을 꿈꿉니다. 이렇게 하면 속도와 기능을 개선할 수 있습니다.

그러나 그들은 AVX로 전환하지 않았고, 비호환성을 두려워하며 시간을 끌고 있습니다.

여기 계신 모든 분들이 테스터를 통해 EX5 실행 속도와 단말기 성능에 대해 훨씬 더 우려하고 있다고 생각합니다.

 
fxsaber #:

여기 계신 모든 분들이 EX5의 속도와 테스터로 단말기를 테스트하는 것에 대해 훨씬 더 걱정하시는 것 같습니다.

윈도우 최적화 수준은 윈도우에서 실행되는 모든 프로그램의 성능의 근간입니다.

모든 프로그램은 AVX/AVX2 등에 대해 전혀 모르는 Windows API를 대량으로 사용하기 때문입니다. 그러나 어떤 곳에서는 운영 체제가 훨씬 더 빠르게 결과를 생성할 수 있습니다.

 

제가 직접 최신 버전의 최신 NIC를 위한 공식 인텔 IAVF 오픈소스 드라이버를 우분투 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

명시적으로 비활성화됨: sse, sse2, mmx, 3d now, AVX

주소 새니타이저가 활성화되어 전체 코드 속도가 느려집니다. 최소한 O2 최적화가 활성화되어 있습니다.

인텔 x710/810 NIC가 최소한의 지연 시간으로 효율적으로 작동하려면 어떻게 해야 하나요? 전체 운영 체제는 최소한 커널과 드라이버를 빌드해야 합니다.

 
Renat Fatkhullin #:

근거 없는 주장 금지

운영 체제를 포함하여 소프트웨어를 다시 컴파일하기 전과 후의 성능 비교 수치를 공유하는 리소스 링크를 공유합니다.

 

만일을 대비하여 EA를 실행하는 동일한 서버에서 컴파일해야 합니다. 아니면 AVX가 내 노트북의 잘못된 시스템에 있는 것으로 판명될 수도 있습니다.)

그리고 메타쿼트 서버를 사용하면 꽤 재미있을 수 있습니다).

 
Aleksey Nikolayev #:

만약을 대비해 EA를 실행하는 동일한 서버에서 컴파일해야 합니다. 그렇지 않으면 AVX가 내 업무용 노트북의 잘못된 시스템에 설치될 수 있습니다.)

그리고 메타쿼트 서버를 사용하면 꽤 재미있을 수 있습니다).

VPS 네트워크에서 모든 서버는 최소한 AVX를 사용합니다. 대부분은 AVX2를 사용합니다.

 
fxsaber #:

운영 체제를 포함하여 소프트웨어를 다시 컴파일하기 전과 후의 성능을 비교한 수치를 공유하는 리소스 링크를 공유하세요.

모든 것이 Google에 있습니다.

특히 하드웨어 제조업체에서 제공하는 합성 테스트는 그다지 명확하지 않습니다. 결론을 도출하려면 제안된 하나의 벤치마크를 믿지 말고 많은 벤치마크를 확인해야 합니다.

자신의 경우를 이해하고 자신의 프로그램에서 모든 것을 직접 테스트해야 합니다. 부동 소수점/배 무거운 수학은 가속이 잘 됩니다. 그리고 컴파일러가 정확해야 합니다 - 오직 Clang만 그렇습니다.

 

현재 메타쿼츠 데모에서 사용 가능한 베타 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
사유: