Über den MT5-Code-Profiler - Seite 7

 

Was ist das?!


 
fxsaber #:

Der Profiler zeigt Funktionsaufrufe an, die eigentlich nicht stattgefunden haben. Ich bin sogar schon auf etwas Ähnliches gestoßen:

Eine Art von ArrayCopy, die nicht in der mqh-Datei enthalten ist! Ich habe sogar eine rote Linie in der Deklaration eines statischen Arrays gezeichnet.

Leider kann ich den Profiler immer noch nicht verwenden.

Und denken Sie darüber nach, wie und was sich Arrays beim Konstruieren, Zuweisen und Verschieben von Objekten bewegen (und Sie haben ein Objekt).

Glauben Sie wirklich, dass das Programm nur aus Ihren Saiten besteht?

Die Beispiele sind nicht vollständig.

 
Renat Fatkhullin #:

Und denken Sie darüber nach, wie und wodurch Felder beim Konstruieren, Zuweisen und Verschieben von Objekten (und Sie haben ein Objekt) verschoben werden.

Glauben Sie wirklich, dass das Programm nur aus Ihren Saiten besteht?

Die Beispiele sind nicht vollständig.

Geben Sie klare Anweisungen, was meinerseits zu tun ist, damit Sie dieses Thema angehen, ohne es aufzuschieben.

 
fxsaber #:

Geben Sie mir eine klare Anweisung, was ich meinerseits tun muss, damit Sie dieses Thema in Angriff nehmen, ohne es aufzuschieben.

Sie machen Aussagen zu einem Thema (Compiler und ihre Innereien), das Sie nicht verstehen.

Unterricht hilft nicht weiter - Sie nehmen nicht an einem Kurs für Compiler-Entwickler teil, um die riesige Welt des implizit generierten Codes in Objektsprachen zu verstehen. Hochsprachen verwenden eine Vielzahl von Bibliotheken und Inline-Code. Erstellen Sie ein durchschnittliches Projekt in WinAPI und sehen Sie sich die *.map-Datei an - dort gibt es Tausende von Hilfsfunktionen und jede von ihnen kann bei der Profilerstellung erscheinen.

Auch die von mir dutzende Male wiederholten Worte "der resultierende Code hat nichts mit Ihrem Code zu tun, er wird vom optimierenden Compiler optimiert, eingebettet und umgeschichtet" finden bei mir kein Gehör. Die Hauptaufgabe des Compilers ist es, den Code so schnell wie möglich zu machen, nicht lesbar. Die Aufgabe des Profilers ist es, echte Engpässe im optimierten (realen) Code aufzuzeigen, und nicht zu schummeln, indem man Zeilen abgleicht.

Zum Vergleich: Die Profilerstellung von C++-Code ist derzeit oft eine sehr schwierige Aufgabe, da der Optimierer eine große Anpassungsleistung erbringt. Und ja, Microsoft Visual Studio C++ ist kein Benchmark, der Code, den es erzeugt, ist sehr schwach/schlecht. Er ist 20-30% schlechter als seine LLVM/Clang-Konkurrenten.


Wieder einmal haben wir einen Profiler, der den untersuchten Code nicht verändert. Die Prüfzeit erhöht sich, aber der Code wird nicht wirklich durch die Einbettung von Zählern beeinträchtigt, was die Codeoptimierung zunichte machen würde.

Die für die Profilerstellung verwendete Methode ist das "Sampling". Der Profiler pausiert das MQL-Programm (~1000 Mal pro Sekunde) und sammelt Statistiken darüber, wie oft eine Pause in einem bestimmten Codefragment aufgetreten ist. Dazu gehört die Analyse von Aufrufstapeln, um den "Beitrag" jeder Funktion zur Gesamtlaufzeit des Codes zu ermitteln. Am Ende der Profilerstellung erfahren Sie, wie oft jede Funktion angehalten wurde und wie oft jede Funktion im Aufrufstapel enthalten war:

  • Gesamte CPU-Aktivität [Einheit, %] - die Gesamtzahl der Male, die eine Funktion im Aufrufstapel "auftauchte".
  • Eigene CPU-Aktivität [Einheit, %] - die Anzahl der "Pausen", die direkt innerhalb der angegebenen Funktion aufgetreten sind. Dieser Zähler ist der wichtigste für die Ermittlung von Engpässen, da statistisch gesehen das Anhalten häufiger in den Teilen des Programms auftritt, die mehr CPU-Zeit benötigen.



Ohne einstufige, reproduzierbare Beispiele werden die Probleme nicht berücksichtigt. Vereinfachte Synthetiken aus einigen Aufrufen zu Kleinstaufgaben können auch nicht in Bezug auf den prozentualen Zeitaufwand oder den Beitrag zur Gesamtzeit berücksichtigt werden.

 
Renat Fatkhullin #:

Sie machen Aussagen zu einem Thema (Compiler und ihre Innereien), das Sie nicht verstehen.

Völlig unwissend über das Thema, das Sie genannt haben. Der Profiler zeigt einige Daten an, die in keiner Weise interpretiert werden können.

Wieder einmal haben wir einen Profiler, der fast keine Verzögerungen in den zu untersuchenden Code einführt. Die Prüfzeit erhöht sich, aber der Code wird durch die Einbettung von Zählern nicht wirklich beeinträchtigt - das würde die Codeoptimierung zunichte machen.

Ich versuche, die Engpässe mit dem neuen Profiler zu erkennen. Kein Glück, obwohl ich mich sehr anstrenge.

Ohne einstufige, reproduzierbare Beispiele gehen wir nicht auf Probleme ein. Vereinfachte Synthetiken aus einigen Aufrufen zu Kleinstaufgaben können weder in Bezug auf den prozentualen Zeitaufwand noch auf den Anteil an der Gesamtzeit berücksichtigt werden.

An wen sende ich die Daten zur Wiedergabe? Die Daten von LS zeigen, dass LS-Nachrichten möglicherweise lange Zeit nicht gelesen werden.

Zwei grüne Häkchen zeigen an, dass die Nachricht gelesen wurde, eines zeigt an, dass sie nicht gelesen wurde.

 
fxsaber #:

Völlig unwissend über das Thema, das Sie genannt haben. Der Profiler zeigt einige Daten an, die ich in keiner Weise interpretieren kann.

Ich versuche, die Engpässe mit dem neuen Profiler zu erkennen. Kein Glück, obwohl ich es versuche.

An wen sende ich die Daten zur Wiedergabe? Die Daten aus dem PM zeigen, dass PM-Nachrichten möglicherweise lange Zeit nicht gelesen werden.

Zwei grüne Häkchen - Nachricht gelesen, eines - nicht gelesen.

Je öfter der Hammer an der einen oder anderen Stelle angeschlagen wird, desto teurer wird die Funktion.

Wie hoch ist die Wahrscheinlichkeit, dass ein Zähler auf billige Variablen trifft? fast 0

es gibt sofort verständliche Funktionen, die der Zähler treffen wird, sie werden übersprungen, siehe die folgenden benutzerdefinierten Funktionen

 
Fast235 #:

Je öfter der Hammer an der einen oder anderen Stelle zugeschlagen wird, desto kostspieliger ist die Funktion.

Wie hoch ist die Wahrscheinlichkeit, dass ein Zähler auf billige Variablen trifft? fast 0

es gibt sofort verständliche Funktionen, die der Zähler treffen wird, sie werden übersprungen, siehe die folgenden benutzerdefinierten Funktionen

Ich spreche von praktischer Anwendung, nicht von schöner Theorie, die auf den ersten Blick klar ist.

 
fxsaber #:

Ich spreche von praktischer Anwendung, nicht von schöner Theorie, die beim ersten Mal leicht zu verstehen ist.

praktisch ist, was es einmal war, wie oft wird es aufgerufen?

es ist ein rein perfektionistisches Interesse,

Ich stimme zu, dass zusätzliche Anrufe gesehen werden müssen, auch wenn sie billig sind.

 
Fast235 #:

Das Praktikum ist so wie es vorher war, wie oft wird es aufgerufen?

Der vorherige Profiler war in der Lage, Engpässe zu finden, aber hier geht es um einen neuen Profiler, dessen Daten uns nicht erlauben zu verstehen, was vor sich geht, obwohl es in der Theorie mehrfach untersucht wurde.

 
fxsaber #:

Der vorherige Profiler ermöglichte es, Engpässe zu finden, aber hier handelt es sich um einen neuen, dessen Daten es nicht erlauben zu verstehen, was vor sich geht, obwohl theoretisch alles mehrfach untersucht wurde.

Renat sollte den neuen Profiler nicht in allgemeinen Phrasen abbilden, sondern ihn auch den Überzeugten wie dem Sub klar machen (ich will das nicht verharmlosen).