文章 "MQL5 中的统计分布 - 取最佳的 R" - 页 6

 
Renat Fatkhullin:

这只是在实践中和理论上纯粹证明了一些交易者在https://www.mql5.com/ru/forum/96176/page10 主题中表达的立场的谬误(在某处提到过):

  • 在 R 中,所有库都经过优化,速度尽可能快
  • R 中有许多优化,包括英特尔线程构建模块等。


事实证明并非如此。在最简单的函数中,事实证明这是一种消耗,MQL5 的效率更高。此外,我还从理论上证实了它更快的原因。除了实际结果之外。

R 甚至被官方称为 "语言和环境"--它的内部实际上是一个方案,包括其 dsl、宏、sexpr 和 "粘合 "到不同库和环境的垃圾......但它结构紧凑,易于扩展,实际上很好,这就是它受到重视的原因。不久前,mat.stat.软件包的辩护者和 FP 的拥趸还在谴责 R 的刹车:-)。

顺便说一句,在微基准测试中,seq() 有可能已经在测量中使用了。当然,这只是一件小事。

 
Maxim Kuznetsov:

R 甚至被正式称为 "语言和环境"--它的内部实际上是一个方案,包括 dsl、宏、sexpr 以及与不同库和环境 "粘合 "的垃圾......但它结构紧凑,易于扩展,实际上就是这么好,这就是它受到赞赏的原因。不久前,mat.stat.软件包的辩护者和 FP 的拥趸还在谴责 R 的刹车:-))

随你怎么称呼它。

只是,即使它在本地 64 位动态链接库中拥有大量函数,关于其优化的说法也是错误的。现在,我们会到处指出,我们的矩阵计算比 R 语言更快。从 R 到 MQL5 的开发理念将带来真正的优势。


顺便说一下,有人怀疑在微基准测试中,seq() 已经在测量中部署了。这当然是小题大做。

不,seq 在测量之外。

试着在通过 seq 进行一次填充后多次调用它吧

res <- microbenchmark(a<-dbinom(k, n, pi/10, log = TRUE))
print(res)
 
作为一个理论家,我从来不敢与一个开发实践者争论,因为在我的领域里,作为一个开发实践者,我总是以居高临下的姿态看待理论家的批评。
 
Renat Fatkhullin:

在 MQL5 中,计算速度是 R 的两倍:10 微秒对 20 微秒。

我有一点不同。
平均时间:MT5 12 微秒,R 16 微秒
最少时间:MT5 8 微秒,R 15 微秒。

基于 Windows 10 Pro(x64 电脑)、IE 11.00、UAC、Intel Core i7-6700 @ 3.40GHz
R - 3.3.1 x64
MT5 1445

恭喜你,mql 编译器的优化效果不错。

<nerd 模式。

在 MT5 的结果中,您应该加上 100 毫秒的编译时间。
R 在 16 微秒内成功解释了字符串输入,并将其传递给库,然后返回结果。

</ 呆子模式

 
Dr.Trader:
< 呆子模式

在 MT5 的结果中,您应该加上 100 毫秒的编译时间。
R 需要 16 微秒来解释字符串的结果,并将其传递给函数库,然后返回结果。

</书呆子模式>。

不,不需要。

我也认为应该在 R 中进行优化。但我自己安装了它,开始亲自了解它,并完全意识到,由于动态语言的系统开销,这个系统无法挤出最大值。


你应该看看最短的时间。我的结果得到了直接证实:8 对 15。

 
Renat Fatkhullin:

想叫它什么就叫什么吧。

只是,即使它在原生 64 位动态链接库中拥有大量函数,关于其优化的说法也是错误的。现在,我们会到处指出,我们的矩阵计算比 R 语言更快。 从 R 到 MQL5 的开发理念将带来真正的优势


不,seq 无法测量。

试着在通过 seq 进行一次填充后多次调用。

这根本不是事实。R 是 FP,它可以 "省略 "计算的重要部分,仅仅因为它是不必要的,它可以对计算路径做出特定的结论。这些都是不可比拟的,就像酸和软一样:-)

 
Maxim Kuznetsov:

R是一种 FP,它可以 "省略 "计算的重要部分,只因为没有必要,它可以对计算路径做出特定的推断。这些都是无法比拟的,就像 "酸 "和 "软":-)

废话少说。

一次又一次地试图推翻现实。

 

我说的是 R 语言,但我的水平很低))有人能检查一下代码的正确性吗?

library(microbenchmark)
library(compiler)
n <- 2000
k <- seq(0,n,by=20)
q<- function(xx) { dbinom(k, n, pi/10, log = TRUE) }
res <- microbenchmark(cmpfun(q))
print(res)


这段代码的结果显示了相同的图形、




和 Renate 的代码。


如果代码是正确的,您能检查一下基准吗?

 
Dr.Trader:

在 MT5 的结果中,您应该加上 100 毫秒的编译时间。

我的意思是,mql 编译器在编译时已经知道所有输入参数。在编译过程中计算出所有参数,调用脚本时只需返回预先计算的结果即可。我在集线器上看到过一些比较 c++ 编译器的文章,根据对汇编代码的分析判断,这正是发生在那里的事情。

 
ivanivan_11:

如果代码是正确的,你能检查一下基准吗?

问题被取消了,第一次测试的结果是以微秒为单位,而这里是以毫秒为单位。