ビルド 3902 からの AVX / AVX2 + FMA3 / AVX512 + FMA3 命令セットによる MQL5 プログラムのコンパイル - ページ 3

 

注意散漫:人々はなぜウィンドウズ11が最新のプロセッサーを必要とするのか理解していない。彼らはTPMの議論に脱線する。

実際、マイクロソフトの技術者は、OSのカーネルやアプリケーションを錆びたバケツの下でコンパイルするのをやめ、少なくともAVXに切り替えることを夢見ている。そうすれば、スピードと能力を向上させることができるだろう。

しかし、彼らはまだ切り替えていない。非互換性を恐れ、それを引きずっているのだ。

 

AVX2ターミナルが後日リリースされるという情報を見逃していました。

AVX2とFMA3を使用して構築された第3バージョンのターミナルを間もなくリリース する予定です。

 
Renat Fatkhullin #:

注意散漫:人々はなぜウィンドウズ11が最新のプロセッサーを必要とするのか理解していない。TPMの議論に脱線してしまう。

実際、マイクロソフトの技術者は、OSカーネル/アプリケーションを錆びついたバケツの下でコンパイルするのをやめ、少なくともAVXに切り替えることを夢見ている。そうすれば、スピードと機能を向上させることができるだろう。

しかし、彼らはAVXに切り替えず、非互換性を恐れて足を引っ張っている。

ここにいる皆さんは、EX5の実行速度やテスターを使った端末のガットの方がよっぽど気になると思います。

 
fxsaber #:

ここにいるみんなは、EX5のスピードやテスターで端末をガッツポーズすることのほうがずっと気になっていると思う。

Windowsの最適化レベルは、Windowsで実行されるすべてのプログラムのパフォーマンスの根本にある。

というのも、すべてのプログラムはWindows APIを大量に使用しており、AVX/AVX2などのことはまったくわからないからだ。しかし、場所によっては、オペレーティング・システムはもっと速く結果を出すことができる。

 

根拠がないわけではありません - 私自身は、Ubuntu 22.04で非常に最新のNICの最新バージョン用の公式Intel 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

アドレス・サニタイザーが有効で、コード全体が遅くなる。少なくともO2最適化は有効になっている。

Intel x710/810 NICが効率よく、最小限のレイテンシで動作することを望むにはどうしたらいいでしょうか?オペレーティング・システム全体では、カーネルとドライバを最低限ビルドする必要があります。

 
Renat Fatkhullin #:

根拠がないわけではない

OSを含むソフトウェアの再コンパイル前と再コンパイル後のパフォーマンスを比較した数値を共有するリソースへのリンクを共有する。

 

念のため、EAを実行するのと同じサーバーでEAをコンパイルしなければならない。あるいは、AVXが私のラップトップの間違ったシステムにあることが判明するかもしれない)

また、メタクォート・サーバーを使えば、かなり楽しくなる)。

 
Aleksey Nikolayev #:

念のため、EAを実行するのと同じサーバーでEAをコンパイルしなければならない。あるいは、AVXが私の仕事用ラップトップの間違ったシステムに入ってしまうかもしれない)

また、メタクォート・サーバーを使えば、かなり楽しくなる)。

私たちのVPSネットワークでは、すべてのサーバーに少なくともAVXが搭載されています。ほとんどはAVX2です。

 
fxsaber #:

オペレーティング・システムを含むソフトウェアの再コンパイル前と再コンパイル後のパフォーマンス比較の数値を共有するリソースへのリンクを共有する。

すべてgoogleにあります。

合成テストは、特にハードウェアメーカーのものは、あまり明らかになりません。結論を出すには、多くのベンチマークをチェックする必要があります。

自分のケースを理解した上で、自分のプログラムですべてをテストする必要がある。フロート/ダブルの重い数学はよく加速される。そしてコンパイラは正しいはずだ。

 

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
理由: