最適化のためのCPUコアの評価 - ページ 6

 
以下は、ある情報筋からの 指示の内容です。

E5-2670にはない指示
BMI(Bit Manipulation Instructions)は、IntelやAMDのプロセッサで、ビット操作の高速化のために使用される命令セットです。BMIはSIMD命令ではなく、プロセッサのユニバーサルレジスタに対してのみ動作します。
ビット操作の操作は、低レベルのデバイス制御、エラー検出と訂正、最適化、圧縮と暗号化のために設計されたアプリケーションで最も頻繁に使用されます。プログラムでBMIを使用すると、これらの演算が大幅に(時には数倍)高速化されるが、プログラマーによるプログラムコードの記述が難しくなる。
インテルとAMDのプロセッサのBMI命令セットは大きく異なっている。
インテルプロセッサはBMI1に加え、BMI2も使用しています。
AMDのプロセッサは、SSE4aパッケージの一部であるABM(Advanced Bit Manipulation)命令を使用している(これらの命令はIntelでも使用されているが、SSE4.2およびBMI1の一部として実装されている)。また、AMDのプロセッサは、BMI1を拡張したTBM(Trailing Bit Manipulation)命令セットを採用しています。

F16Cは、x86プロセッサにおいて、半精度2進数(16ビット)と標準的な単精度浮動小数点2進数(32ビット)の間の変換を高速化するための命令セットである。
F16CはAMDとIntelの両プロセッサに採用され、マルチメディアデータだけでなく、他の種類のデータを扱う能力を飛躍的に向上させた。
F16C (16-bit Floating-Point conversion) - x86プロセッサで使用される命令セットで、半精度2進数(16ビット)と標準単精度浮動小数点2進数(32ビット)の間の変換を高速化します。基本的に128bitのSSE命令を拡張したものです。
コンピュータ工学における異なる精度の数値の使用は、高速性能と実行するタスクの範囲の広さを実現するために必要な、精度と表現する数値の範囲との妥協点である。
F16Cは2009年にAMDのプロセッサに初めて採用されたが、それ以前から開発されており、CVT16として知られていた。CVT16はもともと、XOPとBMI4命令を含む予定だった未発売のSSE5パッケージの一部として計画されました。
現在、F16C命令セットはAMDとIntelの両プロセッサに採用され、マルチメディアデータだけでなく、他の種類のデータの取り扱いに関しても大幅に機能を拡張している。

エフエムエー
浮動小数点数の乗算加算演算を高速化するプロセッサ命令群。FMAとは、Fused Multiply-Add(フューズド・マルチプライ・アッド)の略です。
乗算・加算演算は非常に一般的であり、コンピュータ技術において重要な役割を担っている。特に、アナログ信号のデジタル処理(2値ビデオやオーディオの符号化、およびそれに類する操作)に関しては。このため、FMA命令はCPUだけでなく、現在の多くのグラフィックカードのGPUにも組み込まれています。

i7-8700以外が 持っていない説明書
TSX(Transactional Synchronization eXtensions)は、インテルが開発したマルチコアプロセッサーの命令セットで、同じデータを共有する際にコア同士の通信効率を高め、最終的にコンピューター全体の性能を向上させるものです。

MPX (Memory Protection Extensions) - バッファオーバーフローの仕組みを利用して、ウイルスなどの脅威に対する防御を強化する技術です。
プロセッサはメモリにアクセスする前にヒープとスタックバッファの制限を調べることができ、メモリにアクセスするアプリケーションが自分に割り当てられたメモリ領域のみにアクセスすることを保証します。このため、ハッカーやマルウェアプログラムが、メモリを介してCPUにコードを「代用」することが非常に難しくなっています。

SGX (Software Guard Extensions) - インテルが開発し、Skylakeアーキテクチャ以降のプロセッサに採用されている命令セット。
SGXでは、コードとデータの保護された部分(「エンクレーブ」と呼ばれる)を使用することで、悪意のあるアプリケーションやハッカーの攻撃から、実行中のプログラムを高いレベルで保護することができます。


BMI2(BMI1の補完)。

MPXやSGXはプロテクションの話なので、あえて言えば、コンパイラがBMI2命令・技術を積極的に使っていて、TSXの影響がある、可能性が低いということでしょうかね。

 
アレクセイ、OpenCLのコードの書き方を勉強して、そのために良いカードを買った方が効率的だと思うのですが、どうでしょう?
カード上のOpenCLは、マルチプロセッサよりも先験的にはるかに効率的となります。
そして、プロセッサーを比較するこの面倒なことは忘れてください。
しかし、そうですね、OpenCL用のコードをどう書くかを考えなければなりません。
どれだけ参考になるかというと......自分ではなかなか読めないんですよ。
 
Roman:
アレクセイ、OpenCLのコードの書き方を勉強して、そのために良いカードを手に入れる方が効率的だと思うんだ。カード上のOpenCLは、複数のプロセッサよりもアプリオリに効率的です。 そして、プロセッサを比較するこの面倒なことを忘れてください。しかし、そうですね、OpenCL用のコードをどう書くかを考えなければなりません。どれだけ参考になるかというと......自分ではなかなか読めないんですよ。



OpenCLで書くと、ちょっと理論を勉強したんですが、OpenCLの技術でエージェントを作る方が簡単なんです、今みたいにコンシューマ的には簡単じゃないんです。

そして、OpenCLは常に効率的ではありませんので、私はYandex(CatBoost)カード1060とFX-8350プロセッサからソフトウェア上で比較していた - それは、プロセッサが2倍速いことが判明し、その傾向は確かに効果があるだろうから5 1080i、より強力なプロセッサを購入する経済的に有益であるかどうか、高価ですが...一般的には、クリアカットではなく、すべての人にとっての解決策ではありません。

それから、コンパイラで、最新の技術のサポートを無効にするだけで、古参の人たちはすべてが速く動くようになると思います、無効化するオプションは。
 
Aleksey Vyazmikin:

OpenCLで書くと、ちょっと理論を勉強したんですが、OpenCLの技術でエージェントを作る方が簡単なんです、今みたいにコンシューマ的には簡単じゃないんです。

そして、OpenCLは常に効率的ではありませんので、私はYandex(CatBoost)カード1060とFX-8350プロセッサからソフトウェア上で比較していた - それは、プロセッサが2倍速いことが判明し、その傾向は確かに効果があるだろうから5 1080i、より強力なプロセッサを購入する経済的に有益であるかどうか、高価ですが...一般的には、クリアカットではなく、すべての人にとっての解決策ではありません。

数学的な計算には、緑色のものは特に適していません。
算数なら赤い方がいい、公式アプリで設定できる算数モードも標準装備している。
私は古いRadeon 7970のリファレンスを持っていますが、まだマイニングに対応しています。これは、私が1枚のカードで採掘しているということではなく、いやそれは利益にならないが、それは計算を引っ張るということだ。
カードでの数学の計算は、シェーダーの数を見る必要があり、その数は多ければ多いほどよく、残りのfpsなどは重要ではなく、最も重要なのはシェーダーブロックです。


 
Roman:

数学的な計算には、緑色のものは特に適していません。
公式アプリで設定できる算数モードも標準装備されています。
私は古いRadeon 7970のリファレンスを持っていますが、まだマイニングに対応しています。これは、私が1枚のカードで採掘しているということではなく、いやそれは利益にはならないが、計算を引っ張るということである。
カードでの数学の計算は、シェーダーの数を見る必要があり、その数は多ければ多いほどよく、残りのfpsなどは重要ではなく、最も重要なのはシェーダーブロックです。


私の知る限り、赤はダブルの使い方を知っているだけで、緑はそうではないんですねー。しかし、機械学習(CatBoost)では、比較演算にシャープネスがかかっており、考え方によっては赤と緑と同じように高速に動作するはずです。そして赤色は、残念ながらCatBoostではサポートされていません。

いずれにせよ、自分ではできないし、アーティストも十分な価格と理解があって探すのはそう簡単なことではありませんでした。

 

スイッチ列挙を利用すれば、コードの高速化が図れるのではと提案されました。

昔はこんな感じでしたね。

         if(Type_Poisk_Tree==Tree_Buy_Filter || Type_Poisk_Tree==Tree_Sell_Filter || Type_Poisk_Tree==Tree_Buy || Type_Poisk_Tree==Tree_Sell)
           {
            if(Test_P>=1000 && Test_P<5000)
              {
               if(Test_P<2500)
                 {
                  if(Test_P==1000)if(DonProc<5.5 && Levl_Down_DC<-7.5) CalcTest=CalcTest+1; //(0.4810127 0.3037975 0.2151899)
                  if(Test_P==1001)if(DonProc< 5.5 && Levl_Down_DC>=-7.5 && TimeH< 21.5 && TimeH>=16.5 && TimeH< 19.5 && Levl_Close_H1s1N< 2.5) CalcTest=CalcTest+1; //(0.4400657 0.4072250 0.1527094)
                  if(Test_P==1002)if(DonProc< 5.5 && Levl_Down_DC>=-7.5 && TimeH< 21.5 && TimeH>=16.5 && TimeH< 19.5 && Levl_Close_H1s1N>=2.5) CalcTest=CalcTest+1; //(0.3739837 0.5121951 0.1138211)
                  if(Test_P==1003)if(DonProc<5.5 && Levl_Down_DC>=-7.5 && TimeH<21.5 && TimeH>=16.5 && TimeH>=19.5) CalcTest=CalcTest+1; //(0.3390706 0.4647160 0.1962134)
                //Ещё 70к сравнений
                }

そして今、このような状態になっています。

         if(Type_Poisk_Tree==Tree_Buy_Filter || Type_Poisk_Tree==Tree_Sell_Filter || Type_Poisk_Tree==Tree_Buy || Type_Poisk_Tree==Tree_Sell)
           {
                  switch(Test_P)
                    {
                     case 1000: if(DonProc<5.5 && Levl_Down_DC<-7.5) CalcTest=CalcTest+1; break; //(0.4810127 0.3037975 0.2151899)
                     case 1001: if(DonProc< 5.5 && Levl_Down_DC>=-7.5 && TimeH< 21.5 && TimeH>=16.5 && TimeH< 19.5 && Levl_Close_H1s1N< 2.5) CalcTest=CalcTest+1; break; //(0.4400657 0.4072250 0.1527094)
                     case 1002: if(DonProc< 5.5 && Levl_Down_DC>=-7.5 && TimeH< 21.5 && TimeH>=16.5 && TimeH< 19.5 && Levl_Close_H1s1N>=2.5) CalcTest=CalcTest+1; break; //(0.3739837 0.5121951 0.1138211)
                     case 1003: if(DonProc<5.5 && Levl_Down_DC>=-7.5 && TimeH<21.5 && TimeH>=16.5 && TimeH>=19.5) CalcTest=CalcTest+1; break; //(0.3390706 0.4647160 0.1962134)
                     //ещё 70к сравнений
                   }

最初の試算では、FX-8350は30%高速ですが、Phenom IIプロセッサーは約3倍高速です後日、最適化から解放されたマシンで比較テストを行う予定です。

Tree_Brut_TestPL Expert Advisorの新バージョン、名前に「_Fast」を追加して添付します。 どんなアーキテクチャでゲインが出るのか、非常に興味深いので、ぜひこちらもテストしてください。これらの研究が、MEコンパイラの改良につながることを期待しています。

ファイル:
 

フォーラムメンバーのFast528さん(現在フォーラムに投稿できない 状態)から追加データをいただきました。

Ryzen 2700 オーバークロックなし、メモリ3333

Tree_Brut_TestPL 8コア 16スレッド

2019.08.13 10:24:14.813 Tester optimization finished, total passes 11
2019.08.13 10:24:14.824 Statistics optimization done in 1 minutes 56 seconds
2019.08.13 10:24:14.824 Statistics shortest pass 0:01:13.337, longest pass 0:01:20.403, average pass 0:01:15.853
2019.08.13 10:24:14.824 Statistics 8731 frames (3.43 Mb total, 412 bytes per frame) received
2019.08.13 10:24:14.824 Statistics local 11 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
2019.08.13 10:24:14.864 Tester 11 new records saved to cache file 'tester\cache\Tree_Brut_TestPL.30.E415F787BBBCE67C438526613B41CB4F.opt'

Tree_Brut_TestPL_F8 コア 16 スレッド

2019.08.13 10:24:14.824 Statistics 8731 frames (3.43 Mb total, 412 bytes per frame) received
2019.08.13 10:31:30.562 Tester optimization finished, total passes 11
2019.08.13 10:31:30.573 Statistics optimization done in 2 minutes 32 seconds
2019.08.13 10:31:30.573 Statistics shortest pass 0:02:12.689, longest pass 0:02:31.529, average pass 0:02:21.243
2019.08.13 10:31:30.573 Statistics 11000 frames (4.32 Mb total, 412 bytes per frame) received
2019.08.13 10:31:30.573 Statistics local 11 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
2019.08.13 10:31:30.626 Tester 11 new records saved to cache file 'tester\cache\Tree_Brut_TestPL_F.30.E415F787BBBCE67C438526613B41CB4F.opt'

このテストは完全ではありません。8つのエージェントをアクティブにするため、8コア、8スレッドのバリエーションが必要で、また、スレッドの数に応じて16のパスを "最適化" タブで指定する必要があります(スタート0、ステップ1、ストップ15)。

再度テストを実行する場合は、... \Testercache にあるキャッシュをクリアすることを忘れないでください。

とりあえず中間結果を8コア/8エージェントとして表に追加しておきます。

 

残念ながら最初の投稿を編集できなくなったので、ここに評価を掲載します。

 

こちらは、fx8320e周波数4GHz、メモリ1866 2ch、ランク2の結果です。

ツリー_ブルート_テストPL_F_Fast

4剤 8パス

DF      0       13:27:26.728    Core 4  pass 6 returned result 1001000.00 in 0:00:28.342
HL      0       13:27:26.732    Core 1  pass 2 returned result 1001000.00 in 0:00:28.414
PE      0       13:27:26.844    Core 3  pass 4 returned result 1001000.00 in 0:00:28.476
PJ      0       13:27:26.936    Core 2  pass 0 returned result 1001000.00 in 0:00:28.619
QP      0       13:27:53.132    Core 4  pass 7 returned result 1001000.00 in 0:00:26.406
KI      0       13:27:53.219    Core 1  pass 3 returned result 1001000.00 in 0:00:26.489
MN      0       13:27:53.337    Core 3  pass 5 returned result 1001000.00 in 0:00:26.495
ND      0       13:27:53.571    Core 2  pass 1 returned result 1001000.00 in 0:00:26.637
OR      0       13:27:53.571    Tester  optimization finished, total passes 8
OF      0       13:27:53.582    Statistics      optimization done in 0 minutes 57 seconds
PI      0       13:27:53.582    Statistics      shortest pass 0:00:26.406, longest pass 0:00:28.619, average pass 0:00:27.484
NM      0       13:27:53.582    Statistics      8000 frames (3.14 Mb total, 412 bytes per frame) received
HL      0       13:27:53.582    Statistics      local 8 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)

8人のエージェント 8人のパス

DI      0       13:30:59.789    Core 2  pass 1 returned result 1001000.00 in 0:00:33.072
KN      0       13:30:59.887    Core 1  pass 0 returned result 1001000.00 in 0:00:33.177
PD      0       13:31:00.132    Core 3  pass 2 returned result 1001000.00 in 0:00:33.422
PM      0       13:31:00.245    Core 4  pass 3 returned result 1001000.00 in 0:00:33.531
RR      0       13:31:00.590    Core 8  pass 7 returned result 1001000.00 in 0:00:32.922
IH      0       13:31:00.615    Core 5  pass 4 returned result 1001000.00 in 0:00:33.197
CQ      0       13:31:00.981    Core 6  pass 5 returned result 1001000.00 in 0:00:33.506
GF      0       13:31:01.111    Core 7  pass 6 returned result 1001000.00 in 0:00:33.614
CS      0       13:31:01.111    Tester  optimization finished, total passes 8
KG      0       13:31:01.122    Statistics      optimization done in 0 minutes 35 seconds
RN      0       13:31:01.122    Statistics      shortest pass 0:00:32.922, longest pass 0:00:33.614, average pass 0:00:33.305
NO      0       13:31:01.122    Statistics      8000 frames (3.14 Mb total, 412 bytes per frame) received
HJ      0       13:31:01.122    Statistics      local 8 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)

8エージェントで約2倍高速化

 
Maxim Romanov:

こちらは、fx8320e周波数4GHz、メモリ1866 2ch、ランク2の結果です。

ツリー_ブルート_テストPL_F_Fast

4剤 8パス

8人のエージェント 8人のパス

8エージェントで約2倍高速化

ありがとうございます、しかし、評価のためにTree_Brut_TestPL_FとTree_Brut_TestPLの結果を追加してください