エラー、バグ、質問 - ページ 2668 1...266126622663266426652666266726682669267026712672267326742675...3185 新しいコメント fxsaber 2020.03.05 16:24 #26671 Sergey Dzyublik: 問題は、メモリを確保して配列の要素を 1つずつ作成すると、一度に作成 するよりも何倍も時間がかかることです。 コードでは気がつかなかった。説明すると、ifトリガーは1つだけで、サイズが変化していなければ終了するようになっています。 Sergey Dzyublik 2020.03.05 16:33 #26672 fxsaber: コードでは気がつかなかった。説明すると、ifトリガーは1つだけで、サイズが変化していなければ終了するようになっています。 上記コードの説明#2666 test1では、最初の呼び出しですべての要素を一度に作成し、ArrayResizeの残りの呼び出しは「アイドル」状態になります。 ArrayResize 呼び出しの総数 == array_size: T class_array[]; for(int i = 1; i <= array_size; i++){ ArrayResize(class_array, array_size); } test2 では、1 つの要素を作成し、別の array_size-1 要素のための領域を確保します。ArrayResize の残りのコールは、以前に確保したメモリから配列に +1 の要素を作成するために行われます。 ArrayResize == array_size を呼び出した回数の合計です。 T class_array[]; ArrayResize(class_array, 1, array_size - 1); for(int i = 2; i <= array_size; i++){ ArrayResize(class_array, i); } * 元のコードに誤りがありました(+- 1要素の差)。コードが更新されました。 なぜ test2 は test1 よりも構造体で 7 倍、クラスと int で 2 倍も遅いのでしょうか? Alain Verleyen 2020.03.05 16:52 #26673 Sergey Dzyublik : 私の方では、比較対象は想定内のものでした。 配列に入れる要素の数がわかっているので、一度に全部作るのではなく、未作成の要素用にメモリを確保しています。 問題は、メモリを確保して配列項目を 1つずつ作成すると、一度に作成するよりも何倍も時間がかかることです。 つまり、構造物の場合は7倍も遅くなるわけです。 また、classとintデータ型では2倍遅くなる。 これは非常に大きな違いであり、開発者が望めば解消できることだと思います。 この場合、オーバーヘッドが低ければいいというのは賛成です。 でも、問題はむしろ比較の仕方だと思うんです。test1のループは、おそらくコンパイラによって最適化され、削除され、おそらく次もそうでしょう。 for ( ulong ii= 0 ;ii<count&&! _StopFlag ;ii++) プロファイラを試してみても、わずかな違いしかわからないでしょう。 Alain Verleyen 2020.03.05 16:55 #26674 プロファイラによる コンパイラの最適化なし。 fxsaber 2020.03.05 18:30 #26675 Sergey Dzyublik: 疑問が残ります。なぜ test2 は test1 よりも構造体で 7 倍、クラスと int で 2 倍も遅いのでしょうか? デフォルトのコンストラクタです。 Sergey Dzyublik 2020.03.05 18:38 #26676 Alain Verleyen: test1のループは、おそらくコンパイラによって最適化され、削除されたものだと思われます 上記のコード#2666を Debugモードで実行すると、ユーザーコードの最適化ではなく、ArrayResize関数の働きによって速度低下が起こるため、先ほどと同様の結果が得られるでしょう。 デバッグモードは最適化なしで実行されます。コードに書かれていることが実行され、実行されたものは、ユーザーブレークポイントのためのnop-typesが命令の間に挿入されるだけです。 Aleksei Skrypnev 2020.03.05 23:00 #26677 新サービスのSMSでデモ口座開設の確認メールが届かない。 https://www.mql5.com/ru/forum/334179#comment_1529250 Не могу открыть демо счет в AMP Global 2020.03.04www.mql5.com Собственно, проблема описана в названии темы. Запрашивает подтверждение с электронки и телефона... Alain Verleyen 2020.03.05 23:33 #26678 Sergey Dzyublik : 上記のコード#2666を Debugモードで実行すると、ArrayResize関数の動作にラグがあり、ユーザーコードの最適化には関係ないため、先ほどと同様の結果が得られると思います。 デバッグモードでは、最適化を行わず、コードに書かれていることが実行され、ユーザーブレークポイントのために命令の間にnopsが挿入されるだけです。 投稿番号26674に あるように、ArrayResize()では問題ないのですが、比較テストのみです。私が何かを見逃していなければ。 Sergey Dzyublik 2020.03.06 00:14 #26679 Alain Verleyen: 投稿番号26674に あるように、ArrayResize()では問題なく、比較テストのみで問題ありません。私が何かを見逃していなければ。 この問題は、実際のプロジェクトで、vector<T>::push_backアルゴリズムのボトルネックを探しているときに検出されました。 この問題は、ReleaseとDebugの両方のコンパイルにおいて、予約メモリがある場合にArrayResizeの実行が遅くなることの一部として現れます。 プロファイリングで何も検出されなかったから大丈夫と言い張るのか。 得られた結果を気にする人はいない。 しかし、プロファイリングで明らかな問題がなくても、100%のユーザーが使用するReleaseコンパイルやDebugコンパイルでは、その問題がキャンセルされるわけではありません。 Alain Verleyen 2020.03.06 00:51 #26680 Sergey Dzyublik : 実際のプロジェクトで、vector<T>::push_backアルゴリズムのボトルネックを探しているときに、この問題が検出されました。 Release版、Debug版ともに予約メモリがある場合、ArrayResizeの実行が遅くなる問題が発生します。 プロファイリングで何も検出されなかったから大丈夫と言い張るのか。 得られた結果を気にする人はいない。 しかし、プロファイリングで明らかな問題がなくても、100%のユーザーが使用するReleaseコンパイルやDebugコンパイルでは、その問題がキャンセルされるわけではありません。 提供されたテストコードについてしかお話できませんが。 いずれにせよ、開発者の声を聞いてみよう。そうかもしれませんね。 1...266126622663266426652666266726682669267026712672267326742675...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
問題は、メモリを確保して配列の要素を 1つずつ作成すると、一度に作成 するよりも何倍も時間がかかることです。
コードでは気がつかなかった。説明すると、ifトリガーは1つだけで、サイズが変化していなければ終了するようになっています。
コードでは気がつかなかった。説明すると、ifトリガーは1つだけで、サイズが変化していなければ終了するようになっています。
上記コードの説明#2666
test1では、最初の呼び出しですべての要素を一度に作成し、ArrayResizeの残りの呼び出しは「アイドル」状態になります。
ArrayResize 呼び出しの総数 == array_size:
test2 では、1 つの要素を作成し、別の array_size-1 要素のための領域を確保します。ArrayResize の残りのコールは、以前に確保したメモリから配列に +1 の要素を作成するために行われます。
ArrayResize == array_size を呼び出した回数の合計です。
* 元のコードに誤りがありました(+- 1要素の差)。コードが更新されました。
なぜ test2 は test1 よりも構造体で 7 倍、クラスと int で 2 倍も遅いのでしょうか?
私の方では、比較対象は想定内のものでした。
配列に入れる要素の数がわかっているので、一度に全部作るのではなく、未作成の要素用にメモリを確保しています。
問題は、メモリを確保して配列項目を 1つずつ作成すると、一度に作成するよりも何倍も時間がかかることです。
つまり、構造物の場合は7倍も遅くなるわけです。
また、classとintデータ型では2倍遅くなる。
これは非常に大きな違いであり、開発者が望めば解消できることだと思います。
この場合、オーバーヘッドが低ければいいというのは賛成です。
でも、問題はむしろ比較の仕方だと思うんです。test1のループは、おそらくコンパイラによって最適化され、削除され、おそらく次もそうでしょう。
プロファイラを試してみても、わずかな違いしかわからないでしょう。
プロファイラによる コンパイラの最適化なし。
疑問が残ります。なぜ test2 は test1 よりも構造体で 7 倍、クラスと int で 2 倍も遅いのでしょうか?
デフォルトのコンストラクタです。
test1のループは、おそらくコンパイラによって最適化され、削除されたものだと思われます
上記のコード#2666を Debugモードで実行すると、ユーザーコードの最適化ではなく、ArrayResize関数の働きによって速度低下が起こるため、先ほどと同様の結果が得られるでしょう。
デバッグモードは最適化なしで実行されます。コードに書かれていることが実行され、実行されたものは、ユーザーブレークポイントのためのnop-typesが命令の間に挿入されるだけです。
新サービスのSMSでデモ口座開設の確認メールが届かない。
https://www.mql5.com/ru/forum/334179#comment_1529250
上記のコード#2666を Debugモードで実行すると、ArrayResize関数の動作にラグがあり、ユーザーコードの最適化には関係ないため、先ほどと同様の結果が得られると思います。
デバッグモードでは、最適化を行わず、コードに書かれていることが実行され、ユーザーブレークポイントのために命令の間にnopsが挿入されるだけです。
投稿番号26674に あるように、ArrayResize()では問題なく、比較テストのみで問題ありません。私が何かを見逃していなければ。
この問題は、実際のプロジェクトで、vector<T>::push_backアルゴリズムのボトルネックを探しているときに検出されました。
この問題は、ReleaseとDebugの両方のコンパイルにおいて、予約メモリがある場合にArrayResizeの実行が遅くなることの一部として現れます。
プロファイリングで何も検出されなかったから大丈夫と言い張るのか。
得られた結果を気にする人はいない。
しかし、プロファイリングで明らかな問題がなくても、100%のユーザーが使用するReleaseコンパイルやDebugコンパイルでは、その問題がキャンセルされるわけではありません。
実際のプロジェクトで、vector<T>::push_backアルゴリズムのボトルネックを探しているときに、この問題が検出されました。
Release版、Debug版ともに予約メモリがある場合、ArrayResizeの実行が遅くなる問題が発生します。
プロファイリングで何も検出されなかったから大丈夫と言い張るのか。
得られた結果を気にする人はいない。
しかし、プロファイリングで明らかな問題がなくても、100%のユーザーが使用するReleaseコンパイルやDebugコンパイルでは、その問題がキャンセルされるわけではありません。
提供されたテストコードについてしかお話できませんが。
いずれにせよ、開発者の声を聞いてみよう。そうかもしれませんね。