Evaluierung von CPU-Kernen zur Optimierung - Seite 11

 
Aleksey Vyazmikin:

Es stellt sich die Frage, wie sich das auswirkt - natürlich habe ich dem Code entnommen, dass sie das "if" tatsächlich entfernt haben. Ich möchte jedoch einen Kommentar dazu abgeben, denn es ist nicht klar, worin der Gewinn in Bezug auf eine schnellere Logik besteht.

Intuitive Lösung - großen Code in eine Funktion verschieben (noch besser wäre ein separates Include), if, increment und break abschaffen.

Ich bin auch sehr verwirrt, wenn es darum geht, die Werte der zu analysierenden Variablen zu erhalten. Im Testbeispiel handelt es sich um Zufallszahlen, aber in der Realität? Ich würde bereits reine boolesche Werte dort belassen, um zu prüfen, ob (bool_a > 10.0) anstelle von (double_a).

 
Igor Zakharov:

Neuer Build, neuer Tester, neuer Compiler... In der Übersichtstabelle fehlt die Spalte "build mt5".

Bislang ist das Ergebnis stabil - ich habe es gestern überprüft, erwarten Sie also keine Leistungssprünge von Build zu Build.

 
Andrey Khatimlianskii:

Die intuitive Lösung besteht darin, den umfangreichen Code in eine Funktion (oder besser noch in ein separates Inlude) zu packen und if, increment und break loszuwerden.

Tatsächlich ist es bereits eine Funktion, so dass es nicht klar ist, warum es einen solchen Leistungsgewinn gibt!

Ich verwende inlude in meinem Arbeitscode, aber es ist rein Code-Migration, wie schlagen Sie vor, es zu organisieren? Bray trägt erheblich zur Leistung bei - wie kann ich es loswerden, ohne an Geschwindigkeit zu verlieren?

Andrey Khatimlianskii:

Ich bin auch sehr verwirrt, wenn ich die Werte der analysierten Variablen erhalte. Im Testbeispiel sind es Zufallszahlen, aber in der Realität? Ich würde bereits reine boolesche Werte dort belassen, so dass ich (bool_a > 10.0) anstelle von (double_a) prüfen könnte.

In Wirklichkeit ist es dasselbe wie bei double - die Daten werden aus einer externen Datei entnommen, die bei der Initialisierung vollständig in den Puffer eingelesen wird. Ich habe also nicht genau verstanden, wie man aus ihnen ein bool macht.

 
Maxim Romanov:
Der 3800x hat den i7 8700 in Bezug auf die Leistung beim Streaming fast eingeholt. Und es kam aus dem 2700.
Dies ist wahrscheinlich auf die geringere Speicherlatenz und den doppelt so großen Cache zurückzuführen.
Fazit: Für mt5 sind die Speicherzugriffslatenz und die Speicherlesegeschwindigkeit der entscheidende Faktor.
Dies zeigt sich auch an der geringen Leistung des 2990 wx Threads. Sie haben hohe Speicherlatenzen trotz der 4-Kanal- und speziellen Cache-Verarbeitung.
Die Geschwindigkeit der Kerne selbst ist also nicht so wichtig.
Vielleicht funktioniert es ja so.

und die 3800X soll sich nicht von der 2700 absetzen?

 
Aleksey Vyazmikin:

Dann gehe ich davon aus, dass während der Optimierung die Frequenz einfach durch die Ideologie sinkt. Führen Sie interessehalber einen längeren Durchlauf eines beliebigen EA durch - nicht 16 Durchläufe, sondern sagen wir 160 - ich frage mich, wie sich die Zeit des Durchlaufs ändert - der Unterschied sollte minimal sein - innerhalb von 1 Sekunde.

F


PS Vielleicht haben Sie einen Test, der RAM lädt?

 
Pavel Verveyko:

F


PS Vielleicht haben Sie einen Test, der RAM lädt?

Danke, der Durchschnitt war ungefähr derselbe wie bei den 16 Durchläufen - wir nehmen an, dass das die richtigen Daten sind.

Für das Gedächtnis gibt es leider nichts Geeignetes im öffentlichen Bereich.

 
Pavel Verveyko:

Hätte sich die 3800X nicht von der 2700 absetzen müssen?

Ich habe Gründe vorgeschlagen, auf denen man aufbauen kann, um bei der Wahl der Hardware auf etwas zurückgreifen zu können.
 
Maxim Romanov:
Das hätte ich tun sollen, ich habe die Gründe vermutet, damit ich in Zukunft bei der Wahl des Bügeleisens etwas in der Hand habe.

Verstanden, danke.

 
Aleksey Vyazmikin:

Bray trägt erheblich zur Leistung bei - wie kann ich es loswerden, ohne an Geschwindigkeit zu verlieren?

Ersetzen Sie ihn durch einen Return, wie in meinem Beispiel.


Aleksey Vyazmikin:

In Wirklichkeit ist es auch doppelt - die Daten werden aus einer externen Datei entnommen, die bei der Initialisierung vollständig in den Puffer eingelesen wird. Deshalb habe ich auch nicht verstanden, wie genau man es zu einem bool macht.

Anstelle von

int Povtor_High_M1 = X;

if ( Povtor_High_M1>=0 ) ***

if ( Povtor_High_M1< 0 ) ***

Machen Sie

bool Povtor_High_M1 = (X >= 0);

if ( Povtor_High_M1 ) ***

if ( !Povtor_High_M1 ) ***
 
Andrey Khatimlianskii:

Ersetzen Sie sie durch einen Rückkehrer, wie in meinem Beispiel.


Anstelle von

Machen Sie

Leider bin ich nicht schlau, aber X>=0 kann größer sein als jede andere Zahl - es gibt viele Kombinationen - man kann nicht alles im Code vorhersehen, und der Code wird durch die verschiedenen Kombinationen um viele Größenordnungen wachsen.

Grund der Beschwerde: