Diskussion zum Artikel "Statistische Verteilungen in MQL5 - Nur das Beste aus R" - Seite 6

 
Renat Fatkhullin:

Dies ist lediglich ein praktischer und theoretischer Beweis für die Falschheit der von einigen Händlern im Thema https://www.mql5.com/ru/forum/96176/page10 vertretenen Position (es wurde irgendwo erwähnt):

  • in R sind alle Bibliotheken optimiert und so schnell wie möglich
  • es gibt viele Optimierungen in R, einschließlich der Intel Threading Building Blocks, usw.


Es stellte sich heraus, dass dies nicht stimmt. Bei der einfachsten Funktion stellte sich heraus, dass es sich um einen Abfluss handelt und MQL5 effizienter ist. Außerdem habe ich begründet, warum es theoretisch schneller ist. Zusätzlich zu den praktischen Ergebnissen.

R wird sogar offiziell als "Sprache und Umgebung" bezeichnet - im Inneren ist es eigentlich ein Schema mit seinen dsl, Makros, sexpr und Müll, das an verschiedene Libs und Umgebungen "klebt"... Aber es ist kompakt und leicht zu erweitern, es ist eigentlich gut, deshalb wird es geschätzt. Und es ist noch gar nicht so lange her, dass die Apologeten der mat.stat. Pakete auf der einen Seite und die Fans von FP auf der anderen Seite R als Bremse anprangerten :-).

PS. Übrigens besteht der Verdacht, dass in microbenchmark seq() bereits innerhalb der Messungen eingesetzt wird. Eine Kleinigkeit, natürlich.

 
Maxim Kuznetsov:

R wird sogar offiziell als "Sprache und Umgebung" bezeichnet - im Inneren ist es eigentlich ein Schema mit seinen dsl, Makros, sexpr und Müll, die an verschiedene Libs und Umgebungen "kleben"... Aber es ist kompakt und leicht zu erweitern, es ist wirklich so gut, deshalb wird es geschätzt. Und es ist noch gar nicht so lange her, dass Apologeten von mat.stat. Paketen auf der einen Seite und Fans von FP auf der anderen Seite R als Bremse anprangerten :-))

Man kann es nennen, wie man will.

Es ist nur so, dass sich die Aussage über seine Optimierung als falsch herausgestellt hat, auch wenn es viele Funktionen in nativen 64-bit DLLs hat. Nun werden wir überall darauf hinweisen, dass unsere Matrixberechnungen schneller sind als in R. Und dass die Übertragung der entwickelten Ideen von R auf MQL5 einen echten Vorteil bringen wird.


PS. Übrigens besteht der Verdacht, dass im Microbenchmark seq() bereits innerhalb der Messungen eingesetzt wird. Eine Kleinigkeit, natürlich.

Nein, seq ist außerhalb der Messung.

Versuchen Sie, es selbst viele Male nach einer einzigen Füllung über seq aufzurufen

res <- microbenchmark(a<-dbinom(k, n, pi/10, log = TRUE))
print(res)
 
Als Theoretiker würde ich es nie wagen, mit einem Entwickler-Praktiker zu streiten, denn als Entwickler-Praktiker in meinem Bereich sehe ich die Kritik der Theoretiker immer mit Herablassung.
 
Renat Fatkhullin:

In MQL5 wird es doppelt so schnell gezählt: 10 Mikrosekunden gegenüber 20 Mikrosekunden in R.

Ich habe ein wenig anders.
Durchschnittliche Zeit: MT5 12 Mikrosekunden, R 16 Mikrosekunden
Minimum: MT5 8 Mikrosekunden, R 15 Mikrosekunden.

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

Glückwunsch, mql Compiler kann gut optimieren.

<nerd mode.

Zu den MT5-Ergebnissen sollten Sie 100 Millisekunden für die Kompilierung hinzufügen.
R schafft es in 16 Mikrosekunden, die Eingabe eines Strings zu interpretieren, sie an die Bibliothek zu übergeben und das Ergebnis zurückzubekommen.

</nerd mode>

 
Dr.Trader:
<Nerd-Modus>

Zu den MT5-Ergebnissen sollten Sie 100 Millisekunden für die Kompilierung hinzurechnen.
R braucht 16 Mikrosekunden, um das Ergebnis aus einem String zu interpretieren, es an die Bibliothek zu übergeben und das Ergebnis zurückzubekommen.

</ Nerd-Modus>.

Nein, tut es nicht.

Auch ich war der Meinung, dass es in R optimiert werden sollte. Aber ich habe es selbst installiert, habe angefangen, es selbst zu verstehen und musste feststellen, dass dieses System wegen des System-Overheads der dynamischen Sprache nicht das Maximum herausholen kann.


Sie sollten sich die minimale Zeit ansehen. Sie haben eine direkte Bestätigung für meine Ergebnisse: 8 vs. 15.

 
Renat Fatkhullin:

Man kann es nennen, wie man will.

Es ist nur so, dass sich die Aussage über seine Optimierung als falsch herausgestellt hat, auch wenn es eine Menge Funktionen in nativen 64-Bit-DLLs hat. Wir werden nun überall darauf hinweisen, dass unsere Matrixberechnungen schneller sind als in R. Und dass die Übertragung der entwickelten Ideen von R auf MQL5 einen echten Vorteil bringen wird.


Nein, seq ist nicht mehr messbar.

Versuchen Sie einmal, nach einer einzigen Befüllung durch seq viele Male selbst aufzurufen.

Es ist überhaupt keine Tatsache...R ist ein FP, es kann einen bedeutenden Teil der Berechnungen "weglassen", einfach weil es unnötig ist, es kann eine bestimmte Schlussfolgerung über den Berechnungsweg machen. Einfach unvergleichbare Dinge, wie sauer und weich :-)

 
Maxim Kuznetsov:

R ist ein FP, es kann einen bedeutenden Teil der Berechnung "auslassen", einfach weil es unnötig ist, es kann eine bestimmte Schlussfolgerung über den Weg der Berechnung machen. Einfach unvergleichbare Dinge, wie sauer und weich :-)

Genug mit dem Unsinn.

Immer wieder wird versucht, die Realität zu widerlegen.

 

Ich spreche über R, aber meine Kenntnisse sind sehr gering)) kann jemand die Korrektheit des Codes überprüfen?

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)


Die Ergebnisse zeigen die gleichen Graphen für diesen Code,




und den Code von Renate.


Wenn der Code korrekt ist, können Sie den Benchmark überprüfen?

 
Dr.Trader:

Zu den MT5-Ergebnissen sollten Sie 100 Millisekunden für die Kompilierung addieren.

Ich meine, dass der mql-Compiler bereits während der Kompilierung alle Eingabeparameter kennt. Es reicht, wenn er alles während der Kompilierung berechnet und beim Aufruf des Skripts einfach das vorberechnete Ergebnis zurückgibt. Ich habe einige Artikel im Hub gesehen, in denen C++-Compiler verglichen wurden, und nach der Analyse des Assembler-Codes zu urteilen, passiert dort genau das Gleiche.

 
ivanivan_11:

Wenn der Code korrekt ist, können Sie den Benchmark überprüfen?

Die Frage wird abgebrochen, im ersten Test waren die Ergebnisse in Mikrosekunden, hier sind sie in Millisekunden. habe zuerst nicht aufgepasst