Fehler, Irrtümer, Fragen - Seite 2880
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
keine
wenn es sich wiederholende Codeabschnitte gibt, werden Sie Optimierungsprüfungen durchführen!
Welchen Unterschied macht es aus, wie lange rand() ausgeführt wird?
Lassen Sie ihn 2/3 der Testzeit ausführen, Hauptsache, die rand()-Zeit ist konstant
Ihr MQL-Code wird die MQL-Funktionen des Systems verwenden, richtig? - Was nützt es, einen perfekten Code zu testen?
)) könnte der Geschwindigkeitsunterschied 4 Mal zugunsten einer der Methoden (1 bis 4) ausfallen, aber da die Rand-Operation 10 Mal langsamer ist als der Rest des Codes, wäre dieser Unterschied nicht sichtbar (11 bis 14)
)) Der Geschwindigkeitsunterschied hätte 4 Mal zugunsten einer der Methoden ausfallen können (1 bis 4), aber da die Operation 10 Mal länger dauert als der Rest des Codes, wäre dieser Unterschied nicht sichtbar gewesen (11 bis 14)
nein, das kann nicht sein
der Unterschied ist sofort sichtbar
Überprüfen wir etwas, das die Entwickler in den Neuerungen angekündigt haben. Sie schreiben oft, dass die Zugriffszeit auf Zeitreihen für eine Funktion optimiert = lange Zeit nicht überprüft wurde
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
Überhaupt nicht kritisch
Die Ausführungszeit von rand() ist konstant, höchstwahrscheinlich handelt es sich um eine gängige C++-Funktion, googeln Sie "rand c++ source code".
müssen Sie ihn initialisieren, aber wenn Sie ihn mit Konstanten initialisieren, kann es zu einer Optimierung kommen
Im Allgemeinen verstehe ich die Abneigung gegen rand() nicht.
eine Option ist die Initialisierung mit etwas wie diesem:
schnell sein würde.
Ihr Skript ausgeführt, imho nicht korrekt.
Die meiste Zeit wird für das Laden von Code in den Zwischenspeicher und dann in den Prozessor benötigt.
und fügen die Diskretion des Systemzeitgebers hinzu
bekommen wir... fast eine Zufallszahl.
Sie müssen es lange Zeit testen, etwa 100500 Mal, imho
rand() löscht das Ergebnis.
Auf meinem Computer dauert eine Schleifeniteration etwa 1,5 Nanosekunden.
Mit zwei rand() dauert eine Iteration doppelt so lange - bis zu fast 3 Nanosekunden. Sie sollten sich darüber im Klaren sein, dass in dieser Iteration zwei Zugriffe auf ein Element eines großen Arrays verschwinden werden, was ebenfalls ziemlich teuer ist.
Das bedeutet, dass etwa 2/3 der gesamten Iterationszeit auf zwei rands() entfällt. Natürlich habe ich mich ein wenig über "um eine Größenordnung" aufgeregt ))
Ich verstehe nicht, wie man in die Optimierung laufen kann, wenn ein vorbereiteter Array mit Zufallszahlen gefüllt wird.
Es wurde schon einmal über die Leistung von rand() diskutiert. Ich habe sogar selbst versucht, eine ähnliche Funktion zu schreiben.https://www.mql5.com/ru/forum/170952/page137#comment_12010041
Ergebnis
Ich denke, unterm Strich macht es fast keinen Unterschied, ob Sie union oder binary shift verwenden.
Ich verwende beide Methoden in meiner iCanvas-Bibliothek, um mit Farben zu arbeiten.
Ich erinnere mich, ich habe auch einige Leistungstests durchgeführt und bin zu dem Schluss gekommen, dass es fast keinen Unterschied macht. Aber der Code mit union ist besser lesbar.
Ich muss zugeben, dass ich enttäuscht war, denn ich hatte einen spürbaren Leistungszuwachs mit Union erwartet.
Ich verstehe nicht, wie man eine Optimierung durchführen kann, wenn ein vorbereiteter Bereich mit Zufallszahlen gefüllt wird.
Ich gab Ihnen 2 Links auf der Hubr oben, der erste Artikel zeigt gut, wie eine normale Schleife sieht aus wie nach der Kompilierung
Ich sage nicht, dass Sie unbedingt zur Laufzeit-Optimierung zu bekommen, aber imho, wenn das Array nicht ändern, die im Wesentlichen eine konstante Speicherplatz mit einer konstanten Größe für die Schleife ist, ist es nicht eine Tatsache, dass die Optimierung nicht auftauchen wird auf irgendeine Art von Prozessor, und die Optimierung kann aus dem Compiler erwartet werden, als auch von dem Prozessor mit einem Cache
Ich denke, unterm Strich macht es fast keinen Unterschied, was man verwendet - Union oder binäre Verschiebung.
Ich gab Ihnen 2 Links auf der hbr oben, der erste Artikel zeigt gut, wie eine normale Schleife nach der Kompilierung aussieht
Ich sage nicht, dass Sie zur Laufzeit-Optimierung zu erhalten, aber imho, wenn das Array nicht ändern, die im Wesentlichen eine konstante Speicherplatz mit einer konstanten Größe für die Schleife ist, ist es nicht sicher, dass keine Optimierung auftauchen wird
Nach den Ergebnissen zu urteilen, gibt es keine Anzeichen für eine Optimierung
Die Ergebnisse erwecken überhaupt nicht den Eindruck einer Optimierung
ja
Der Streit geht nicht um einen bestimmten Code
aber in der Methodik der Prüfung, ich immer noch zu halten, was ich optimal testen, und rand(), obwohl es Verzerrungen einführt, aber es ist ein linearer Koeffizient, nicht proportional, dh die Genauigkeit ist nicht sehr wichtig, wenn es keinen Unterschied in der Geschwindigkeit von weniger als 5%, imho
Hallo zusammen!
Ich habe eine Frage, vielleicht an die MQL5-Entwickler, vielleicht weiß es jemand anders... Gibt es Pläne, ME Compiler/Code-Editor in gängige Entwicklungsumgebungen wie IDEA oder Visual Studio zu integrieren? Der Meta-Editor ist ein großes Problem für mich. Kein Blockzusammenbruch, keine automatischen Ersetzungsvorlagen (z.B. wenn Sie for(...) eingeben, bietet es Ihnen sofort an, ein Schleifenmuster und viele andere Dinge zu ersetzen), keine Hervorhebung verschiedener wichtiger Teile des Codes. Und so weiter und so fort. Ich will damit nicht sagen, dass moderne Roboter kompliziert sind, aber es handelt sich um große Projekte, bei denen die Anforderungen an das Code-Management und die Team-Entwicklungsfähigkeiten viel höher sind.
Keiner schreibt mehr seine eigenen Editoren und Compiler - alle geben sie auf und greifen auf fertige Lösungen von Microsoft, JetBrains und anderen zurück. Alle modernen Editoren verfügen über ein System von anpassbaren Plugins, die es Ihnen ermöglichen, ihnen alles hinzuzufügen, was Sie möchten. Die Aufgabe ist im Prinzip nicht schwierig.
Sehr geehrte Damen und Herren, gibt es jemanden, der mir eine Antwort auf diese Situation geben kann , die ich nicht verstehe?
Und Sie sollten die Programmierer noch mehr schikanieren. Dann werden Sie sicher Hilfe bekommen.