エラー、バグ、質問 - ページ 2880 1...287328742875287628772878287928802881288228832884288528862887...3185 新しいコメント Alexandr Andreev 2020.10.15 21:58 #28791 Igor Makanu:ノー繰り返しのコード部分があれば、最適化テストを受けることができますrand()の実行時間にはどんな違いがあるのでしょうか?テスト時間の2/3を実行させ、rand()の時間を一定にするのがポイントMQLコードは、システムのMQL-functionsを使用するのですよね?- 完璧なコードをテストすることに何の意味があるのでしょうか? )) 速度の差は、どちらかの方法が4倍有利になる可能性がありますが (1〜4)、rand 演算は他のコードより10倍遅いので、この差は目に見えません (11〜14) Igor Makanu 2020.10.15 22:14 #28792 Alexandr Andreev:)) 速度の差は、どちらかの方法が4倍有利であったかもしれません(1~4)が、この演算は 他のコードより10倍長いため、この差は目に見えないでしょう(11~14) ちゃらっぽこ その差は一目瞭然 開発者が発表したイノベーションの中で、ある関数の時系列へのアクセス時間が最適化された=長い間チェックされていない、とよく書かれていることを確認しましょう。 #define SpeedTest(count_x10,msg,EX) {ulong mss=GetMicrosecondCount(); ulong count=(ulong)pow(10,count_x10);for(ulong _i=0;_i<count&&!_StopFlag;_i++){EX;} \ //+------------------------------------------------------------------+ void OnStart() { double sum1 = 0.0; SpeedTest(7, "tst 1 : ", { sum1 += iOpen(NULL, 0, rand()); }); //-- double sum2 = 0.0; SpeedTest(7, "tst 2 : ", { double o[]; CopyOpen(NULL, 0, rand(), 1, o); sum2 += o[0]; }); Print(sum1, " : ", sum2); } //+------------------------------------------------------------------+ 2020.10.16 02:11:20.671 SpeedTst (EURUSD,H1) tst 1 : : loops=10000000 ms=353174 2020.10.16 02:11:21.967 SpeedTst (EURUSD,H1) tst 2 : : loops=10000000 ms=1296043 2020.10.16 02:11:21.967 SpeedTst (EURUSD,H1) 11304533.15558525 : 11303930.69247558 2020.10.16 02:11:44.012 SpeedTst (EURUSD,H1) tst 1 : : loops=10000000 ms=359757 2020.10.16 02:11:45.369 SpeedTst (EURUSD,H1) tst 2 : : loops=10000000 ms=1357325 2020.10.16 02:11:45.369 SpeedTst (EURUSD,H1) 11304350.05612442 : 11304321.21848488 Errors, bugs, questions MQL5におけるOOPに関する質問 Strand 2D array problem Nikolai Semko 2020.10.15 22:31 #28793 Igor Makanu:一顧だにしないrand() の実行時間は一定で、一般的なC++関数である可能性が高い。"rand c++ source code "でググってみてください。は初期化する必要がありますが、定数で初期化すると最適化に遭遇する可能性があります。一般に、rand()が嫌われるのは理解できない。というような初期化も可能です。は速いだろう。は、あなたのスクリプトを実行しましたが、正しくありません。主な時間は、コードをキャッシュにロードし、プロセッサにロードすることですを追加し、システムタイマーの離散性うーんほぼ乱数100500回くらいテストしてください。 私のコンピュータでは、1回のループの繰り返しに約1.5ナノ秒かかります。 2つのrand()を使用した場合、1回の反復にかかる時間は2倍、最大で3ナノ秒近くになります。この繰り返しでは、大きな配列の1項目への2回のアクセスが消滅し、それもかなり高価であることを認識する必要があります。 全反復時間の約2/3が2つのrand()に費やされていることになる。もちろん、「桁違い」に少し興奮しました )) あらかじめ用意された配列に乱数を入れると最適化に走るというのは理解できない。 すでに一度rand()の性能について議論されています。自分でも似たような機能を書いてみたりもしました。https://www.mql5.com/ru/forum/170952/page137#comment_12010041。 #define Num 10000000 #define SpeedTest(msg,s,EX) {ulong mss=GetMicrosecondCount(); EX \ mss=GetMicrosecondCount()-mss;\ printf("%-30s%llu µs; Сумма - %llu",msg,mss,s);} //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { ulong sum = 0; ushort in[]; ArrayResize(in,Num*2); for (int i=0; i<Num*2; i++) in[i] = (ushort)rand(); SpeedTest("test binary shift : ", sum, for (int i =0; i<(2*Num-1);i+=2) { sum+=in[i]<<(sizeof(ushort)*8) | in[i+1]; }); //+------------------------------------------------------------------+ sum = 0; union ushortTouint { uint param; ushort in[2]; } u; SpeedTest("test union : ", sum, for (int i =0; i<(2*Num-1);i+=2) { u.in[0]=in[i+1]; u.in[1]=in[i]; sum+=u.param; }); //+------------------------------------------------------------------+ sum=0; SpeedTest("test binary shift + rand() : ", sum, for (int i =0; i<(2*Num-1);i+=2) { sum+=(ushort)rand()<<(sizeof(ushort)*8) | (ushort)rand(); }); //+------------------------------------------------------------------+ sum = 0; SpeedTest("test union + rand() : ", sum, for (int i =0; i<(2*Num-1);i+=2) { u.in[0]=(ushort)rand(); u.in[1]=(ushort)rand(); sum+=u.param; }); } 出来栄え 2020.10.15 18:30:34.752 TestMakanu (USDCAD,M1) test binary shift : 13474 µs; Сумма - 10736778112806491 2020.10.15 18:30:34.763 TestMakanu (USDCAD,M1) test union : 10189 µs; Сумма - 10736778112806491 2020.10.15 18:30:34.792 TestMakanu (USDCAD,M1) test binary shift + rand() : 29103 µs; Сумма - 10741215942967312 2020.10.15 18:30:34.820 TestMakanu (USDCAD,M1) test union + rand() : 28125 µs; Сумма - 10737655794873175 2020.10.15 18:30:37.802 TestMakanu (USDCAD,M1) test binary shift : 11144 µs; Сумма - 10739125609966082 2020.10.15 18:30:37.812 TestMakanu (USDCAD,M1) test union : 10334 µs; Сумма - 10739125609966082 2020.10.15 18:30:37.840 TestMakanu (USDCAD,M1) test binary shift + rand() : 27495 µs; Сумма - 10739749025492645 2020.10.15 18:30:37.867 TestMakanu (USDCAD,M1) test union + rand() : 26782 µs; Сумма - 10738717766184542 2020.10.15 18:30:40.356 TestMakanu (USDCAD,M1) test binary shift : 10618 µs; Сумма - 10738510882058397 2020.10.15 18:30:40.367 TestMakanu (USDCAD,M1) test union : 11354 µs; Сумма - 10738510882058397 2020.10.15 18:30:40.395 TestMakanu (USDCAD,M1) test binary shift + rand() : 27637 µs; Сумма - 10738670876702722 2020.10.15 18:30:40.422 TestMakanu (USDCAD,M1) test union + rand() : 26772 µs; Сумма - 10737441784096963 Nikolai Semko 2020.10.15 22:36 #28794 要は、ユニオンを使ってもバイナリシフトを使ってもほとんど変わらないということだと思います。 私は、iCanvasのライブラリで、この両方のメソッドを使用して色を扱っています。 union argb { uint clr; uchar c[4]; }; そういえば、私もパフォーマンステストをしたことがあるのですが、ほとんど差がないという結論になりました。しかし、unionを使ったコードの方が読みやすい。 ユニオンで顕著な性能向上を期待していただけに、正直言ってがっかりしています。 Igor Makanu 2020.10.15 22:40 #28795 Nikolai Semko:あらかじめ用意された配列に乱数を入れると最適化に走るというのは理解できない。上記のhubrに2つのリンクがありますが、最初の記事は、コンパイル後の通常のループがどのように見えるかをよく表しています。必ずしも実行時最適化にたどり着かなければならないとは言いませんが、イマイチ、配列が変化しない、つまり本来ループのサイズが一定のメモリ空間であれば、ある種のプロセッサでは最適化が飛び出さないということはなく、コンパイラからも、キャッシュを持つプロセッサからも最適化が期待できるのではと思いますニコライ・セムコ: 要は、ユニオンとバイナリシフト、どちらを使ってもほとんど変わらないということだと思います。 そうです、シフトを使います。コードは読みやすく、新しいデータ型 であるユニオンを導入する必要はありません。 Nikolai Semko 2020.10.15 22:42 #28796 Igor Makanu:hbrの2つのリンクを紹介しましたが、最初の記事は、コンパイル後の通常のループがどのように見えるかをよく表しています。実行時の最適化に手を出さなければならないとは言いませんが、イマイチ、配列が変化しない場合、つまり、基本的にループのサイズが一定のメモリ空間である場合、最適化が飛び出さないとは言い切れないのです 結果から判断すると、最適化の兆しはない Igor Makanu 2020.10.15 22:46 #28797 Nikolai Semko:結果は、最適化されている印象を全く受けない は 議論は、特定のコードについてではありません しかし、テストの方法論では、私はまだ私が最適にテストするものに固執し、rand()は歪みを導入するが、比例ではなく、線形係数である、すなわち、5%未満の速度差がない場合は、精度はあまり重要ではありません、イミホ 削除済み 2020.10.16 06:10 #28798 親愛なる皆様、私が理解できないこの状況について、せめてどなたかお答えいただけないでしょうか。 AlexInRush 2020.10.16 06:33 #28799 みなさん、こんにちは。 MQL5の開発者に質問があります。 誰か知っているかもしれませんが...。MEコンパイラ/コードエディタと、IDEAやVisual Studioの ような一般的な開発環境との統合は予定されていますか?Meta Editorは私にとって大きな痛手です。ブロックの折りたたみ、自動置換テンプレート(例えば、for(...)をタイプし始めると、ループパターンやその他多くのものを置換するよう即座に提案してくれる)、コードの様々な重要部分の強調表示もありません。などなど。現代のロボットが複雑だと言っているのではなく、これらは大規模なプロジェクトであり、コード管理やチーム開発能力に対する要求はもっとシビアです。 エディターやコンパイラーを自作する人はいなくなり、みんなそれを手放してマイクロソフトやジェットブレインズなどの既成のソリューションに移行しています。最近のエディタには、カスタマイズ可能なプラグインのシステムがあり、好きなものを追加することができます。 この作業は原理的に難しくありません。 TheXpert 2020.10.16 09:26 #28800 Сергей Таболин: 親愛なる皆様、このよくわからない状況に対して、どなたかお答えいただける方はいらっしゃいませんか? さらにプログラマーをいじめろそうすれば、必ず助けてもらえるはずです。 1...287328742875287628772878287928802881288228832884288528862887...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ノー
繰り返しのコード部分があれば、最適化テストを受けることができます
rand()の実行時間にはどんな違いがあるのでしょうか?
テスト時間の2/3を実行させ、rand()の時間を一定にするのがポイント
MQLコードは、システムのMQL-functionsを使用するのですよね?- 完璧なコードをテストすることに何の意味があるのでしょうか?
)) 速度の差は、どちらかの方法が4倍有利になる可能性がありますが (1〜4)、rand 演算は他のコードより10倍遅いので、この差は目に見えません (11〜14)
)) 速度の差は、どちらかの方法が4倍有利であったかもしれません(1~4)が、この演算は 他のコードより10倍長いため、この差は目に見えないでしょう(11~14)
ちゃらっぽこ
その差は一目瞭然
開発者が発表したイノベーションの中で、ある関数の時系列へのアクセス時間が最適化された=長い間チェックされていない、とよく書かれていることを確認しましょう。
2020.10.16 02:11:20.671 SpeedTst (EURUSD,H1) tst 1 : : loops=10000000 ms=353174
2020.10.16 02:11:21.967 SpeedTst (EURUSD,H1) tst 2 : : loops=10000000 ms=1296043
2020.10.16 02:11:21.967 SpeedTst (EURUSD,H1) 11304533.15558525 : 11303930.69247558
2020.10.16 02:11:44.012 SpeedTst (EURUSD,H1) tst 1 : : loops=10000000 ms=359757
2020.10.16 02:11:45.369 SpeedTst (EURUSD,H1) tst 2 : : loops=10000000 ms=1357325
2020.10.16 02:11:45.369 SpeedTst (EURUSD,H1) 11304350.05612442 : 11304321.21848488
一顧だにしない
rand() の実行時間は一定で、一般的なC++関数である可能性が高い。"rand c++ source code "でググってみてください。
は初期化する必要がありますが、定数で初期化すると最適化に遭遇する可能性があります。
一般に、rand()が嫌われるのは理解できない。
というような初期化も可能です。
は速いだろう。
は、あなたのスクリプトを実行しましたが、正しくありません。
主な時間は、コードをキャッシュにロードし、プロセッサにロードすることです
を追加し、システムタイマーの離散性
うーんほぼ乱数
100500回くらいテストしてください。
私のコンピュータでは、1回のループの繰り返しに約1.5ナノ秒かかります。
2つのrand()を使用した場合、1回の反復にかかる時間は2倍、最大で3ナノ秒近くになります。この繰り返しでは、大きな配列の1項目への2回のアクセスが消滅し、それもかなり高価であることを認識する必要があります。
全反復時間の約2/3が2つのrand()に費やされていることになる。もちろん、「桁違い」に少し興奮しました ))
あらかじめ用意された配列に乱数を入れると最適化に走るというのは理解できない。
すでに一度rand()の性能について議論されています。自分でも似たような機能を書いてみたりもしました。https://www.mql5.com/ru/forum/170952/page137#comment_12010041。
出来栄え
要は、ユニオンを使ってもバイナリシフトを使ってもほとんど変わらないということだと思います。
私は、iCanvasのライブラリで、この両方のメソッドを使用して色を扱っています。
そういえば、私もパフォーマンステストをしたことがあるのですが、ほとんど差がないという結論になりました。しかし、unionを使ったコードの方が読みやすい。
ユニオンで顕著な性能向上を期待していただけに、正直言ってがっかりしています。
あらかじめ用意された配列に乱数を入れると最適化に走るというのは理解できない。
上記のhubrに2つのリンクがありますが、最初の記事は、コンパイル後の通常のループがどのように見えるかをよく表しています。
必ずしも実行時最適化にたどり着かなければならないとは言いませんが、イマイチ、配列が変化しない、つまり本来ループのサイズが一定のメモリ空間であれば、ある種のプロセッサでは最適化が飛び出さないということはなく、コンパイラからも、キャッシュを持つプロセッサからも最適化が期待できるのではと思います
要は、ユニオンとバイナリシフト、どちらを使ってもほとんど変わらないということだと思います。
hbrの2つのリンクを紹介しましたが、最初の記事は、コンパイル後の通常のループがどのように見えるかをよく表しています。
実行時の最適化に手を出さなければならないとは言いませんが、イマイチ、配列が変化しない場合、つまり、基本的にループのサイズが一定のメモリ空間である場合、最適化が飛び出さないとは言い切れないのです
結果から判断すると、最適化の兆しはない
結果は、最適化されている印象を全く受けない
は
議論は、特定のコードについてではありません
しかし、テストの方法論では、私はまだ私が最適にテストするものに固執し、rand()は歪みを導入するが、比例ではなく、線形係数である、すなわち、5%未満の速度差がない場合は、精度はあまり重要ではありません、イミホ
みなさん、こんにちは。
MQL5の開発者に質問があります。 誰か知っているかもしれませんが...。MEコンパイラ/コードエディタと、IDEAやVisual Studioの ような一般的な開発環境との統合は予定されていますか?Meta Editorは私にとって大きな痛手です。ブロックの折りたたみ、自動置換テンプレート(例えば、for(...)をタイプし始めると、ループパターンやその他多くのものを置換するよう即座に提案してくれる)、コードの様々な重要部分の強調表示もありません。などなど。現代のロボットが複雑だと言っているのではなく、これらは大規模なプロジェクトであり、コード管理やチーム開発能力に対する要求はもっとシビアです。
エディターやコンパイラーを自作する人はいなくなり、みんなそれを手放してマイクロソフトやジェットブレインズなどの既成のソリューションに移行しています。最近のエディタには、カスタマイズ可能なプラグインのシステムがあり、好きなものを追加することができます。 この作業は原理的に難しくありません。
親愛なる皆様、このよくわからない状況に対して、どなたかお答えいただける方はいらっしゃいませんか?
さらにプログラマーをいじめろそうすれば、必ず助けてもらえるはずです。