Fehler, Irrtümer, Fragen - Seite 2162
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
Enum ist eine ganzzahlige Aufzählung.
Enthält eine Funktionsvorlage
EnumToString();
Probleme auftreten...
Enthält die Funktionsvorlage
EnumToString();
Probleme entstehen...
Ein Beispiel ist nötig.
Ich habe eine Überladung gemacht, von denen eine ein Muster war...
damit ich die Fliegen von den Koteletts trennen konnte...
Ich habe eine Überladung gemacht, von denen eine ein Muster war...
damit ich die Fliegen von den Koteletts trennen konnte...
Optimierung der Mathematik: Versuch der Verwendung von Arrays anstelle von sqrt.
Die Entnahme eines Elements nach Index aus einem einfachen Array sollte also eine sehr schnelle Operation sein, nicht wahr?
so nehmen ein Element durch Index aus einem einfachen Array sollte eine sehr schnelle Operation sein, nicht wahr?
Wo sehen Sie ein einfaches Array?
Es handelt sich um ein dynamisches Array einer verwalteten Sprache mit allen Kontrollimplikationen. Und sqrt ist ein einziger nativer CPU-Befehl.
Willkommen in der Welt der verblüffenden Entdeckungen von Optimierungen und des Einflusses einer Masse von Faktoren in jedem Fall in jeder CPU-Generation, jedem Unterschied in Cache-Größen, Multitasking, Strafen usw.
Noch vor 20 Jahren bastelte ich an Assembler-Code auf einem 486er-Prozessor und kämpfte mit Geschwindigkeitsunterschieden von mehreren Dutzend Prozent, die auf die Neuanordnung von Befehlen, die Ausrichtung und die einfache Speicherpositionierung zurückzuführen waren. Es schien verrückt zu sein, aber die Intel-Handbücher und Vtune erklärten später das Bild.
Aber heute ist die Situation mit den Optimierungsergebnissen längst aus dem Ruder gelaufen. Es gibt so viele verschiedene Prozessoren mit unterschiedlichen Caches auf dem Markt, dass Ihr Code garantiert mit unterschiedlichen Geschwindigkeiten ausgeführt wird. Prozessor-Caches und Prozessorarchitektur haben einen großen Einfluss. Sogar die dynamische CPU-Frequenzkontrolle muss ausgeschaltet werden, um bei einem Benchmark einen Unterschied von mehreren zehn Prozent zu beseitigen.
Zum Beispiel: Atome mit Cache-Misses, die scheinbar auf einer anständigen Architektur oder auf strangulierten U-Modellen basieren, zeigen selbst in einfachen Fällen oft um ein Vielfaches niedrigere Ergebnisse. Mehr Cache-Misses und auf Wiedersehen.
Ich kenne die Fliegen, ich habe die Koteletts gesehen, aber das Problem ist ohne den Funktionscode nicht sichtbar.
Wo sehen Sie ein einfaches Array?
Es ist nicht der richtige Fall, um die Komplexität festzulegen. Arrays werden überall verwendet, in Indikatoren sind sie der Hauptberechnungsteil, und Sie geben jetzt fast direkt zu, dass Ihre Implementierung von Arrays langsam ist.
Ich glaube, dass Sie bei Optimierungen viel besser sind, aber aus der Sicht eines gewöhnlichen Benutzers sieht es seltsam aus - Sie geben an, dass der MQL-Compiler Code erzeugt, der mit C++ vergleichbar ist, aber es stellt sich plötzlich heraus, dass Arrays in MQL überhaupt nicht schnell sind.Es ist nicht der richtige Fall, um die Komplexität festzulegen. Arrays werden überall verwendet, in Indikatoren sind sie der Hauptberechnungsteil, und Sie geben jetzt fast direkt zu, dass Ihre Implementierung von Arrays langsam ist.
Im Vergleich zu einem direkten einzelnen Assembler-Befehl?
Ja, ganz einfach. Was Sie nicht wissen, ist, dass Prozessoren seit langem vorberechnete Tabellen mit verschiedenen mathematischen Funktionen eingebaut haben. Und teure CPU-Mathebefehle nutzen sie, um Dinge zu beschleunigen.
Wir werden am Montag eine detaillierte Analyse seines Beispiels durchführen und die genaue Ursache herausfinden.Im Vergleich zu einem direkten einzelnen Assembler-Befehl?
derArray-Index ist bestenfalls auch auf einen einzigen direkten Assembler-Befehl reduziert, so dass die Frage immer noch besteht