x64プラットフォーム用の新しいMQL5コンパイラーをテスト - 2~10倍計算が速い! - ページ 19

 
Aleksey Vyazmikin:

プロファイラの 提案はまだですか?

 
Aleksey Vyazmikin:

オプションno.2活字を一行ずつ取り出す。

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)

を別機能にする。レナーテを信じよう:)

つまり、最終的にこのような結果になるはずです。

if(Test_P==1000 && Func1000()) CalcTest = CalcTest+1;
if(Test_P==1001 && Func1001()) CalcTest = CalcTest+1;
など
 
Aleksey Vyazmikin:

はい、ここにEAへのリンクが あります。

2日経ちましたね~総集編は7%です・・・。

'Tree_Brut_TestPL_F_Fast.mq5'
'Normal.mqh'
'Math.mqh'
code generated
0 error(s), 0 warning(s), 1456022 msec elapsed

このマシンでは

2019.10.15 09:08:34.692 Terminal        Windows 10 (build 18362) x64, IE 11, UAC, Intel Xeon  E5-2630 v4 @ 2.20 GHz, Memory: 58760 / 65457 Mb, Disk: 20 / 224 Gb, GMT+2
 
Alexey Kozitsyn:

プロファイラの 提供はまだですか?

いや、そんなことはない。いったい何を見ればいいのだろう?使い方がよくわからないんです。


アレクセイ・コジツィン

オプション2.型の各文字列を入れること。

を別機能にする。レナーテを信じよう:)

つまり、最終的にそうなるはずなのです。

など

そこで大幅なスピードアップを実現するのは、「case : 」の変形であって、「if」の変形ではありません。のようなものまで作ると

               switch(Test_P)
                    {
                     case 1000: F1(); break;
                     case 1001: F2(); break;
                    }
   

コードはさらに大きくなる。ただ、コンパイル時間や性能の比較はもちろんしてもいいのですが...。

 
Slava:

このクルマに。

そうですね、このコードは大きくないですね、500メガバイトのコードを投稿したことはないです。

 
Aleksey Vyazmikin:

他にどのような手段があるのでしょうか?今のところ、これが一番早く思いつく選択肢なんですが...。

ロジックを最適化する。例えば、配列やループを使った作業。基準値を配列にまとめてみる。そして、ループでチェックを行う。そうすれば、7万4千件のニーズはなくなるかもしれない...。

 
Aleksey Vyazmikin:

1.いや、そんなことはない。いったい何を見ればいいんだ?使い方がよくわからないんです。


2. 速度を大幅に向上させるのは「case : 」バリアントであり、「if」バリアントではありません。のようなものまで作ると

コードはさらに速くなる...でも、確かにコンパイル時間や性能の比較はできますが...。

1.そこには、コードの最も遅い部分が表示されます。とはいえ...もうひとつは、コンパイルに影響を与えるかどうか...。

2.As you like:ケースを使用することができます。機能を細分化したほうがいいというアドバイスがありましたね。分解してテストする。はい、もちろん、コードは大きくなります。でも、どうしたらいいんだろう。

 
Renat Fatkhullin, プロファイラーはコンパイルのボトルネックを明らかにするのに役立ちますか?それとも、リアルタイムでコード速度をチェックするためだけに使うのか?
 
Aleksey Vyazmikin:

この列挙を、例えば外部のCSVファイルに転送しようとすると、ファイルを読むのに無駄な時間がかかるし、さらに、エージェントにタスクを渡すときに、EAコードは1人のエージェントに送られ、エージェント間で分割されるのに、各エージェントに500メガバイトも送ることができない、という問題が発生します。

そしてもう一つの質問ですが、私のコードは7zipで500から15メガバイトまで簡単に圧縮できますが、圧縮後のファイルは500程度になります - なぜそうなるのでしょうか - 原始的な圧縮(少なくとも100メガバイトまで)をする方法はないのでしょうか?

zipで圧縮する。zipを読み、中を解凍する。500MbのEAを転送するよりも高速になります(各エージェントにも転送されます)。

 
Alexey Kozitsyn:
Renat Fatkhullin さん、プロファイラでコンパイルのボトルネックを明らかにすることができるのでしょうか?それとも、リアルタイムでコード速度をチェックするためだけに使うのか?

プロファイラーはコンパイルとは関係ありません。

Профилирование кода - Разработка программ - Справка по MetaEditor
Профилирование кода - Разработка программ - Справка по MetaEditor
  • www.metatrader5.com
Профилирование — это сбор характеристик программы во время ее выполнения. При профилировании замеряется время выполнения и количество вызовов отдельных функций и строк в коде программы. При помощи этого инструмента программист может найти наиболее медленные участки кода и провести их оптимизацию. Профилирование можно проводить на обычном...