Discussão do artigo "Distribuições estatísticas no MQL5 - tirando o melhor de R" - página 6

 
Renat Fatkhullin:

Isso é apenas uma prova pura, na prática e na teoria, da falácia da posição expressa por alguns operadores no tópico https://www.mql5.com/ru/forum/96176/page10 (houve uma menção em algum lugar):

  • no R, todas as bibliotecas são otimizadas e tão rápidas quanto possível
  • há muitas otimizações no R, incluindo Intel Threading Building Blocks, etc.


Descobriu-se que isso não é verdade. Na função mais simples, isso acabou se revelando um dreno e a MQL5 é mais eficiente. Além disso, fundamentei teoricamente por que ela é mais rápida. Além dos resultados práticos.

O R é até oficialmente chamado de "linguagem e ambiente" - por dentro, é na verdade um esquema com suas dsl, macros, sexpr e lixo que "cola" em diferentes bibliotecas e ambientes... Mas é compacto e fácil de estender, é realmente bom, por isso é valorizado. E não faz muito tempo que os apologistas dos pacotes mat.stat., por um lado, e os fãs do FP, por outro, estavam denunciando o R por causa dos freios :-).

PS. a propósito, há uma suspeita de que, no microbenchmark, o seq() já está implantado dentro das medições. Uma coisa pequena, é claro.

 
Maxim Kuznetsov:

O R é até mesmo oficialmente chamado de "linguagem e ambiente" - por dentro ele é, na verdade, um esquema com seus dsl, macros, sexpr e lixo que "cola" em diferentes bibliotecas e ambientes... Mas ele é compacto e fácil de estender, é realmente muito bom, por isso é apreciado. E não faz muito tempo que os apologistas dos pacotes mat.stat., por um lado, e os fãs do FP, por outro, estavam denunciando o R por causa dos freios :-))

Que ele seja chamado como você quiser.

Só que a afirmação sobre sua otimização acabou sendo falsa, mesmo que ele tenha muitas funções em DLLs nativas de 64 bits. Agora, vamos apontar em todos os lugares que nossos cálculos de matriz são mais rápidos do que no R. E que a transferência de ideias desenvolvidas do R para a MQL5 proporcionará uma vantagem real.


PS. a propósito, há uma suspeita de que, no microbenchmark, o seq() já está implantado dentro das medições. É claro que isso é bobagem.

Não, o seq está fora da medição.

Tente chamá-lo várias vezes depois de um único preenchimento via seq

res <- microbenchmark(a<-dbinom(k, n, pi/10, log = TRUE))
print(res)
 
Um teórico jamais ousaria discutir com um desenvolvedor-praticante, porque, como desenvolvedor-praticante em meu campo, sempre vejo com condescendência as críticas dos teóricos.
 
Renat Fatkhullin:

Na MQL5, ele é contado duas vezes mais rápido: 10 microssegundos contra 20 microssegundos no R.

Eu tenho um pouco diferente.
Tempo médio: MT5 12 microssegundos, R 16 microssegundos
Mínimo: MT5 8 microssegundos, R 15 microssegundos.

Windows 10 Pro (PC baseado em x64), IE 11.00, UAC, Intel Core i7-6700 @ 3.40GHz
R - 3.3.1 x64
MT5 1445

Parabéns, o compilador mql consegue uma boa otimização.

<nerd mode>.

Para os resultados do MT5, você deve adicionar 100 milissegundos gastos na compilação.
O R em 16 microssegundos consegue interpretar a entrada de uma string e passá-la para a biblioteca e obter o resultado de volta.

</ nerd mode>

 
Dr.Trader:
<modo nerd>

Para os resultados do MT5, você deve adicionar 100 milissegundos gastos na compilação.
O R leva 16 microssegundos para interpretar o resultado de uma string e passá-lo para a biblioteca e obter o resultado de volta.

</ modo nerd>.

Não, não demora.

Eu também acreditava que isso deveria ser otimizado no R. Mas eu mesmo o instalei, comecei a entendê-lo e percebi que esse sistema não consegue extrair o máximo devido à sobrecarga do sistema da linguagem dinâmica.


Você deve considerar o tempo mínimo. Você tem uma confirmação direta dos meus resultados: 8 vs. 15.

 
Renat Fatkhullin:

Deixe que ele seja chamado como você quiser.

Só que a afirmação sobre sua otimização acabou sendo falsa, mesmo que ele tenha muitas funções em DLLs nativas de 64 bits. Agora, vamos apontar em todos os lugares que nossos cálculos de matriz são mais rápidos do que no R. E que a transferência de ideias desenvolvidas do R para o MQL5 proporcionará uma vantagem real.


Não, o seq está fora de medida.

Tente chamar muitas vezes você mesmo depois de um único preenchimento com seq.

Isso não é um fato. O R é um FP, ele pode "omitir" uma parte significativa dos cálculos simplesmente porque é desnecessário, ele pode fazer uma conclusão específica sobre o caminho do cálculo. São coisas incomparáveis, como azedo e mole :-)

 
Maxim Kuznetsov:

R é um FP, ele pode "omitir" uma parte significativa do cálculo simplesmente por ser desnecessário, ele pode fazer uma inferência específica sobre o caminho do cálculo. São coisas incomparáveis, como azedo e mole :-)

Chega de bobagens.

Sempre tentando refutar a realidade.

 

Estou falando de R, mas minha habilidade é muito pequena)) Alguém pode verificar a exatidão do código?

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)


Os resultados mostram os mesmos gráficos para esse código,




e o código da Renate.


Se o código estiver correto, você pode verificar o benchmark?

 
Dr.Trader:

Para os resultados do MT5, você deve adicionar 100 milissegundos gastos na compilação.

Quero dizer que o compilador mql já conhece todos os parâmetros de entrada durante a compilação. É suficiente que ele calcule tudo durante a compilação e, ao chamar o script, ele apenas retorna o resultado pré-calculado. Vi alguns artigos no hub em que os compiladores c++ foram comparados e, a julgar pela análise do código assembler, é exatamente isso que acontece lá.

 
ivanivan_11:

Se o código estiver correto, você pode verificar o benchmark?

A pergunta foi cancelada, no primeiro teste os resultados estavam em microssegundos, aqui eles estão em milissegundos.