エラー、バグ、質問 - ページ 816 1...809810811812813814815816817818819820821822823...3185 新しいコメント Renat Fatkhullin 2012.08.21 07:06 #8151 私見では、これはオブジェクト・メンバーへの直接アクセスの 最初のケースの最適化に過ぎない。 2つ目のケースでは、参照を介した間接的なアクセスがあり、微細なループ体では当然ながら半分の時間で、2倍の時間がかかる。 Документация по MQL5: Основы языка / Типы данных / Структуры и классы www.mql5.com Основы языка / Типы данных / Структуры и классы - Документация по MQL5 Renat Fatkhullin 2012.08.21 07:08 #8152 このテストはやや不正確で、本来は1つのアセンブラ命令と、1億個のループに配置された2つのアセンブラ命令の違いを比較するものである。 --- 2012.08.21 07:20 #8153 Renat: これは、オブジェクトのメンバに 直接アクセスする最初のケースの最適化に過ぎないと思うのです。 2つ目のケースは、参照を介した間接的なアクセスで、当然ながら時間は半分になり、微小なループ体があると2倍になる。レナート 現実には、大きなデータの配列が処理されています。このテストは、問題箇所を示すために、すでに簡略化してあります。 最初は、自作の配列とクラスを使って作成しました。そして、それをスキームに落とし込みました。つまり、実際には1つのarオブジェクトではなく、複雑なオブジェクトの配列(これも配列で)を持っているのです。というスキームで書くことができます。class A { double prm1; int prm2; string prm3; char prm4; } class B { A m_a[1000]; } B _b[1000]; 私は、特定の配列要素Aへの参照を取得した場合、その配列要素Aを参照することができると推論しました。А *item=GetPointer(_b[i]._a[j]);パラメータ A::prmXを 使った作業がより速くなります。 しかし、配列名からソーセージを取り出すことが判明した_b[i]._a[j].prmX は、特定の 項目を参照するよりも、少なくとも2倍は速いでしょう 。 これには少し驚きました。カーネルが何らかの疑似ポインタを取得していることは明らかです。 せめて速度差を少なくするような最適化の方法はないのでしょうか? mvk 2012.08.21 07:21 #8154 sergeev:エラーなしでこのようになります このテストでは、エラーは発生しません。しかし、この方法では、「なぜコンパイラは、エラーや警告を出さずに、定数オブジェクト参照から非定数参照への変換をスキップするのか」という主な疑問は解決できません。そのような機能であれば問題はありませんが、この場合、クラスメソッドの シグネチャで返される型に対するconst修飾子の意味が失われてしまうのです。 --- 2012.08.21 07:25 #8155 mvk: 今回のテストでは、このような形でのエラーは発生しません。しかし、この方法では、「なぜコンパイラは定数オブジェクト参照から非定数参照への変換をスキップし、エラーや警告を発生させないのか」という主な疑問は解決されません。そのような機能であれば問題はないのですが、この場合、クラスメソッドの シグネチャで返される型に対する修飾子constの意味が失われてしまうのです。を見ると、すべてが納得できる。定数オブジェクト関数は、オブジェクト自体を変更してはならないので、const 修飾子も必要です。について、そして //Ошибки нет. Это НЕ правильно(CONST A* B::getA())! A* a2 = b.getA(); そうですね、C++ではうまくいきませんね。servicedeskに書き込む。 Renat Fatkhullin 2012.08.21 07:51 #8156 sergeev: しかし、配列名からソーセージを取り出すことが判明 したは、特定の アイテムにアクセスするよりも、少なくとも2倍速く なります。本当に速くなったのか、それとも他の単純なケースを基に論理的に組み立てて出力しているのか。私の考えでは、提示された多次元配列への アクセスに基づくきれいな証明は、まだ提示されていない。特に、率直に言って高価な追加関数GetPointerが存在することを考えると。ちょっとびっくりしたんですが、カーネルに何らかの疑似ポインタが入り込んでいることが明らかになったんです。 MQL5では、従来の意味でのポインターは存在せず、ハンドルとなり、その結果もすべて同じです。少なくとも速度差を少なくするような最適化の方法はないのでしょうか?我々は常に最適化に取り組んでいますが、リファレンス/ハンドルの場合、間接アクセスにシステムオーバーヘッドが発生します。とにかく、このようなアクセスの最適化について、もう少し詳しく見ていきましょう。 Документация по MQL5: Основы языка / Переменные www.mql5.com Основы языка / Переменные - Документация по MQL5 --- 2012.08.21 08:03 #8157 Renat:本当に速くなったのか、それとも他の単純な事例をもとに論理的に結論を構築したのか。私のアレイをいっぱいにしてテストしてみましたが、いつも2倍は遅いですね。私の考えでは、提示された多次元配列 アクセスに基づくきれいな証明は、まだ提示されていない。 さて、スキームとクラスA、B、配列のイメージを並べました。 特に、率直に言って高価な追加関数GetPointerを使用しています。はループに入る前に一度だけ呼ばれます。しかし、原理的には、より正確なテストのために、GetTickCount の外側に持っていくことも可能です。いずれにせよ、こうしたアクセスの最適化について、詳しく見ていくことにします。OK、ありがとう、まさにそれが必要なんだ。 Renat Fatkhullin 2012.08.21 08:26 #8158 sergeev: はループに入る前に一度だけ呼ばれます。しかし、より正確なテストのためには、原理的には、GetTickCount の外側に持っていくことも可能です。 このようなコードであれば、ループの外側ではどうでしょうか。А *item=GetPointer(_b[i]._a[j]); Maxim Khrolenko 2012.08.21 08:44 #8159 提案です。テキストのズーム機能をヘルプに含めることはできますか?例えば、+ or - , または Ctrl+ マウスホイールなど。 Rashid Umarov 2012.08.21 08:49 #8160 paladin800: 提案です。テキストのズーム機能をヘルプに含めることはできますか?例えば、+または-、あるいはCtrl+マウスホイールなど。 きっと無理なんでしょうね。オンライン版は適していないのでしょうか?以下は、このテーマについてネットで調べたものです。http://forum.ru-board.com/topic.cgi?forum=62&topic=20907UPDate 詳細http://forum.ixbt.com/topic.cgi?id=23:39211 Невозможно изменить размер шрифта при просмотре .CHM файлов. :: Microsoft Windows :: Компьютерный форум Ru.Board forum.ru-board.com Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору 1...809810811812813814815816817818819820821822823...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
2つ目のケースでは、参照を介した間接的なアクセスがあり、微細なループ体では当然ながら半分の時間で、2倍の時間がかかる。
これは、オブジェクトのメンバに 直接アクセスする最初のケースの最適化に過ぎないと思うのです。
2つ目のケースは、参照を介した間接的なアクセスで、当然ながら時間は半分になり、微小なループ体があると2倍になる。
レナート 現実には、大きなデータの配列が処理されています。このテストは、問題箇所を示すために、すでに簡略化してあります。 最初は、自作の配列とクラスを使って作成しました。そして、それをスキームに落とし込みました。
つまり、実際には1つのarオブジェクトではなく、複雑なオブジェクトの配列(これも配列で)を持っているのです。
というスキームで書くことができます。
私は、特定の配列要素Aへの参照を取得した場合、その配列要素Aを参照することができると推論しました。
パラメータ A::prmXを 使った作業がより速くなります。
しかし、配列名からソーセージを取り出すことが判明した
_b[i]._a[j].prmX
は、特定の 項目を参照するよりも、少なくとも2倍は速いでしょう 。
これには少し驚きました。カーネルが何らかの疑似ポインタを取得していることは明らかです。
せめて速度差を少なくするような最適化の方法はないのでしょうか?
エラーなしでこのようになります
今回のテストでは、このような形でのエラーは発生しません。しかし、この方法では、「なぜコンパイラは定数オブジェクト参照から非定数参照への変換をスキップし、エラーや警告を発生させないのか」という主な疑問は解決されません。そのような機能であれば問題はないのですが、この場合、クラスメソッドの シグネチャで返される型に対する修飾子constの意味が失われてしまうのです。
を見ると、すべてが納得できる。
定数オブジェクト関数は、オブジェクト自体を変更してはならないので、const 修飾子も必要です。
について、そして
//Ошибки нет. Это НЕ правильно(CONST A* B::getA())! A* a2 = b.getA();
そうですね、C++ではうまくいきませんね。
servicedeskに書き込む。
しかし、配列名からソーセージを取り出すことが判明 した
は、特定の アイテムにアクセスするよりも、少なくとも2倍速く なります。
本当に速くなったのか、それとも他の単純なケースを基に論理的に組み立てて出力しているのか。
私の考えでは、提示された多次元配列への アクセスに基づくきれいな証明は、まだ提示されていない。特に、率直に言って高価な追加関数GetPointerが存在することを考えると。
ちょっとびっくりしたんですが、カーネルに何らかの疑似ポインタが入り込んでいることが明らかになったんです。
少なくとも速度差を少なくするような最適化の方法はないのでしょうか?
我々は常に最適化に取り組んでいますが、リファレンス/ハンドルの場合、間接アクセスにシステムオーバーヘッドが発生します。
とにかく、このようなアクセスの最適化について、もう少し詳しく見ていきましょう。
本当に速くなったのか、それとも他の単純な事例をもとに論理的に結論を構築したのか。
私のアレイをいっぱいにしてテストしてみましたが、いつも2倍は遅いですね。
私の考えでは、提示された多次元配列 アクセスに基づくきれいな証明は、まだ提示されていない。
さて、スキームとクラスA、B、配列のイメージを並べました。
特に、率直に言って高価な追加関数GetPointerを使用しています。
はループに入る前に一度だけ呼ばれます。しかし、原理的には、より正確なテストのために、GetTickCount の外側に持っていくことも可能です。
OK、ありがとう、まさにそれが必要なんだ。
はループに入る前に一度だけ呼ばれます。しかし、より正確なテストのためには、原理的には、GetTickCount の外側に持っていくことも可能です。
提案です。テキストのズーム機能をヘルプに含めることはできますか?例えば、+または-、あるいはCtrl+マウスホイールなど。
きっと無理なんでしょうね。オンライン版は適していないのでしょうか?
以下は、このテーマについてネットで調べたものです。http://forum.ru-board.com/topic.cgi?forum=62&topic=20907
UPDate 詳細http://forum.ixbt.com/topic.cgi?id=23:39211