Fehler, Irrtümer, Fragen - Seite 2162

 
Artyom Trishkin:
Enum ist eine ganzzahlige Aufzählung.
0,1,2,3..., usw...

Enthält eine Funktionsvorlage

EnumToString();

Probleme auftreten...

 
Vladimir Pastushak:

Enthält die Funktionsvorlage

EnumToString();

Probleme entstehen...

Ein Beispiel ist nötig.
 
Artyom Trishkin:
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...

 
Vladimir Pastushak:

Ich habe eine Überladung gemacht, von denen eine ein Muster war...

damit ich die Fliegen von den Koteletts trennen konnte...

Ich kenne die Fliegen, ich habe die Koteletts gesehen, aber ich kann das Problem ohne den Funktionscode nicht erkennen.
 
Renat Fatkhullin:

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.

 
Artyom Trishkin:
Ich kenne die Fliegen, ich habe die Koteletts gesehen, aber das Problem ist ohne den Funktionscode nicht sichtbar.
Wenn eine überladene Funktion eine Zeichenkette hat, gibt es ein Problem, wenn Sie sie für eine ganze Zahl aufrufen...
 
Renat Fatkhullin:

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.
 
Renat Fatkhullin:

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