错误、漏洞、问题 - 页 2880 1...287328742875287628772878287928802881288228832884288528862887...3184 新评论 Alexandr Andreev 2020.10.15 21:58 #28791 Igor Makanu:不如果有重复的代码部分,你会得到优化的测试!rand()执行多长时间有什么区别?让它执行2/3的测试时间,主要是让rand()的时间不变。您的MQL代码将使用系统的MQL-函数,对吗?- 测试一个完美的代码有什么意义? ))的速度差异可能是其中一种方法的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 Strand 2D array problem Error 130 on OrderModify Nikolai Semko 2020.10.15 22:31 #28793 Igor Makanu:不太重要rand()的执行时间是恒定的,很可能是一个普通的C++函数,谷歌 "rand c++源代码"你必须初始化它,但如果你用常数初始化它,你可能会遇到优化问题总的来说,我不明白为什么不喜欢rand()。一个选择是用类似这样的方法来初始化。将是快速的。运行了你的脚本,我认为不正确。主要的时间是将代码加载到高速缓存中,然后再加载到处理器中。并加上系统定时器的离散性我们得到...几乎是一个随机数。你需要长时间的测试,大约100500次,我认为。 rand()使结果沉默。 在我的电脑上,一个循环迭代大约需要1.5纳秒。 用两个rand()进行一次迭代需要两倍的时间--高达近3纳秒。你应该意识到,在这个迭代中,对一个大数组的一个项的两次访问将消失,这也是相当昂贵的。 这意味着大约2/3的迭代时间花在两个rands()上。当然,我对 "一个数量级 "有点兴奋 )) 我不明白,当一个预先准备好的数组被填入随机数时,怎么会遇到优化问题。 已经讨论过一次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 我认为底线是,无论你使用union还是binary shift,都几乎没有区别。,我在我的iCanvas库中使用这两种方法来处理颜色。 union argb { uint clr; uchar c[4]; }; 我记得,我也一直在做一些性能测试,我的结论是,这几乎没有什么区别。但带有union的代码更容易阅读。 我必须承认,我很失望,因为我期待着用工会获得一个明显的性能提升。 Igor Makanu 2020.10.15 22:40 #28795 Nikolai Semko:我不明白,当一个预先准备好的数组被填满随机数时,你怎么会遇到优化问题。我在上面的hubr上给了你两个链接,第一篇文章很好地展示了一个正常的循环在编译后的样子我不是说你一定要到运行时优化,但我认为,如果数组不改变,这基本上是一个恒定的内存空间,循环的大小是恒定的,在某种类型的处理器上,优化不会冒出来,这不是一个事实,优化可以从编译器,以及有缓存的处理器中期待。Nikolai Semko: 我认为底线是,使用什么几乎没有区别--联合或二进制转移。 是的,没错,我将使用shift,代码是可读的,而且没有必要引入一个新的数据类型--union Nikolai Semko 2020.10.15 22:42 #28796 Igor Makanu:我在上面给了你2个关于Hbr的链接,第一篇文章很好地展示了一个正常循环在编译后的样子我不是说你一定要进入运行时优化,但我认为,如果数组不改变,这基本上是一个恒定的内存空间,循环的大小是恒定的,不一定会有优化出现 从结果来看,没有优化的迹象 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 集成?元编辑对我来说是个大麻烦。没有区块折叠,没有自动替换模板(例如,当你开始输入for(...)时,它立即为你提供替换循环模式和其他许多东西),没有突出显示代码的各种重要部分。诸如此类。我不是说现代机器人很复杂,这些都是大项目,对代码管理和团队开发能力有更严重的要求。 没有人再写自己的编辑器和编译器了--他们都放弃了,转而使用微软、JetBrains和其他公司的现成解决方案。所有现代编辑器都有可定制的插件系统,允许你在其中添加任何你喜欢的东西。 这项任务在原则上并不困难。 TheXpert 2020.10.16 09:26 #28800 Сергей Таболин: 亲爱的先生们,有没有人可以给我 一个答案,我不明白这个情况? 而且你应该更多地欺负程序员。那么你肯定会得到帮助。 1...287328742875287628772878287928802881288228832884288528862887...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
不
如果有重复的代码部分,你会得到优化的测试!
rand()执行多长时间有什么区别?
让它执行2/3的测试时间,主要是让rand()的时间不变。
您的MQL代码将使用系统的MQL-函数,对吗?- 测试一个完美的代码有什么意义?
))的速度差异可能是其中一种方法的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++源代码"
你必须初始化它,但如果你用常数初始化它,你可能会遇到优化问题
总的来说,我不明白为什么不喜欢rand()。
一个选择是用类似这样的方法来初始化。
将是快速的。
运行了你的脚本,我认为不正确。
主要的时间是将代码加载到高速缓存中,然后再加载到处理器中。
并加上系统定时器的离散性
我们得到...几乎是一个随机数。
你需要长时间的测试,大约100500次,我认为。
rand()使结果沉默。
在我的电脑上,一个循环迭代大约需要1.5纳秒。
用两个rand()进行一次迭代需要两倍的时间--高达近3纳秒。你应该意识到,在这个迭代中,对一个大数组的一个项的两次访问将消失,这也是相当昂贵的。
这意味着大约2/3的迭代时间花在两个rands()上。当然,我对 "一个数量级 "有点兴奋 ))
我不明白,当一个预先准备好的数组被填入随机数时,怎么会遇到优化问题。
已经讨论过一次rand()的性能。我甚至试图自己写一个类似的函数。https://www.mql5.com/ru/forum/170952/page137#comment_12010041
结果
我认为底线是,无论你使用union还是binary shift,都几乎没有区别。
,我在我的iCanvas库中使用这两种方法来处理颜色。
我记得,我也一直在做一些性能测试,我的结论是,这几乎没有什么区别。但带有union的代码更容易阅读。
我必须承认,我很失望,因为我期待着用工会获得一个明显的性能提升。
我不明白,当一个预先准备好的数组被填满随机数时,你怎么会遇到优化问题。
我在上面的hubr上给了你两个链接,第一篇文章很好地展示了一个正常的循环在编译后的样子
我不是说你一定要到运行时优化,但我认为,如果数组不改变,这基本上是一个恒定的内存空间,循环的大小是恒定的,在某种类型的处理器上,优化不会冒出来,这不是一个事实,优化可以从编译器,以及有缓存的处理器中期待。
我认为底线是,使用什么几乎没有区别--联合或二进制转移。
我在上面给了你2个关于Hbr的链接,第一篇文章很好地展示了一个正常循环在编译后的样子
我不是说你一定要进入运行时优化,但我认为,如果数组不改变,这基本上是一个恒定的内存空间,循环的大小是恒定的,不一定会有优化出现
从结果来看,没有优化的迹象
结果完全没有给人以优化的印象
是
争论的焦点不在于具体的代码
但在测试方法上,我仍然坚持我的最佳测试方法,而rand()虽然引入了失真,但它是一个线性系数,而不是比例,也就是说,如果没有低于5%的速度差异,准确性就不是很重要,我认为
大家好!
我有一个问题,也许是给MQL5的开发者的? 也许有其他人知道...是否有计划将ME编译器/代码编辑器与一些流行的开发环境如IDEA或Visual Studio 集成?元编辑对我来说是个大麻烦。没有区块折叠,没有自动替换模板(例如,当你开始输入for(...)时,它立即为你提供替换循环模式和其他许多东西),没有突出显示代码的各种重要部分。诸如此类。我不是说现代机器人很复杂,这些都是大项目,对代码管理和团队开发能力有更严重的要求。
没有人再写自己的编辑器和编译器了--他们都放弃了,转而使用微软、JetBrains和其他公司的现成解决方案。所有现代编辑器都有可定制的插件系统,允许你在其中添加任何你喜欢的东西。 这项任务在原则上并不困难。
亲爱的先生们,有没有人可以给我 一个答案,我不明白这个情况?
而且你应该更多地欺负程序员。那么你肯定会得到帮助。