Leinwand ist cool! - Seite 16

 

Bei der derzeitigen Prozessorleistung können Sie die Bremsen der Doppelmathematik vergessen. Es gibt keine Verzögerungen.

Und die Methoden der Optimierung durch Umrechnung in Ganzzahlen sind schon sehr veraltet. Sie werden bei der Umrechnung ein Vielfaches mehr verlieren als Sie bei der Mathematik gewinnen.


In Anbetracht des 64-Bit-Codes und unseres Compilers sollten Sie Integer in der Klasse der auf Doppelberechnungen basierenden Aufgaben vergessen.

Hier ist ein früheres Beispiel für Nikolais Optimierungsversuche: https://www.mql5.com/ru/forum/1111/page2164#comment_6796332

Dem Compiler gelang es, Berechnungen von zwei 64-Bit-Doppelwurzeln aus verschiedenen Ausdrücken in einem 128-Bit-Assemblerbefehl zusammenzufassen. Bei der Arbeit mit Double-Mathematik wird dringend davon abgeraten, zu Integer-Typen zu springen/zu konvertieren. Bei der Konvertierung gibt es wilde CPU-Mehrkosten (nicht unsere).

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2018.03.11
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 
Nikolai Semko:

Sie müssen nichts aufrunden.

Hier ist ein Skript als Beispiel.

Führen Sie es zunächst mit den Standardparametern aus (Kreise mit Antialiasing und Koordinaten und Abmessungen vom Typ double)

und führen Sie es dann mit dem Parameter typ = not_smoothed_circles aus (mit ungeglätteten Kreisen und Koordinaten und Größen vom Typ int - aus der Klasse CCanvas).

Das hat hervorragend funktioniert.

Ich habe 347 fps ohne Antialiasing und 97 mit Antialiasing auf Leinwand mit 2100x550 Pixeln.

Zur Information: Die Aktualisierungsrate des Fensters ist auf 500 fps begrenzt. Dies zeigt, wie viel Leistung in der Grafik erreicht werden kann.

 
Renat Fatkhullin:

Beim derzeitigen Stand der Prozessoren können Sie das Bremsen von Doppelmathematik vergessen. Es gibt keine Bremsen.

Und die Methoden der Optimierung durch Umrechnung in Ganzzahlen sind schon sehr veraltet. Sie werden bei der Umrechnung ein Vielfaches mehr verlieren als Sie bei der Mathematik gewinnen.


In Anbetracht des 64-Bit-Codes und unseres Compilers sollten Sie Integer in der Klasse der auf Doppelberechnungen basierenden Aufgaben vergessen.

Hier ist ein früheres Beispiel für Nikolais Optimierungsversuche: https://www.mql5.com/ru/forum/1111/page2164#comment_6796332

Der Compiler hat es geschafft, Berechnungen von zwei 64-Bit-Doppelwurzeln aus verschiedenen Ausdrücken in einem 128-Bit-Assembler-Befehl zusammenzufassen. Bei der Arbeit mit Double-Mathematik wird dringend davon abgeraten, zu Integer-Typen zu springen/zu konvertieren. Bei der Konvertierung gibt es wilde CPU-Mehrkosten (nicht unsere).

Ich bin mir fast sicher, dass der Tester viel schneller arbeiten wird, wenn wir die Ticks ganzzahlig machen.

 
Artyom Trishkin:

Nein, das ist kein Morphing. Es ist etwas weit hergeholt, dies als Morphing zu bezeichnen:


Eigentlich war ich zu faul, selbst eine echte zu erstellen - ich habe sie in den Beispielordnern gefunden.

Morphing, wörtlich: Kasteiung.

 
fxsaber:

Es ist fast sicher, dass der Tester viel schneller arbeiten wird, wenn Sie die Ticks ganzzahlig machen.

Für das Pferd ist das klar, wie Elena Jurjewna sagte.

 
Nikolai Semko:

Basierend auf Doom und dem Rat von @fxsaber.

Ich habe den Algorithmus vondieser Website mit einigen leichten Änderungen verwendet.

Echt cool!

Womit machen Sie Ihre Bilder, Nikolai?

 
fxsaber:

Es ist fast sicher, dass der Tester viel schneller arbeiten wird, wenn Sie die Ticks ganzzahlig machen.

Nein.

Machen Sie sich zunächst einmal klar, dass:

  1. muss alles in Ints umgewandelt werden.
  2. Bei der Datenkonvertierung kommt es zu großen Verzögerungen
  3. wilden Speicherverbrauch bekommen
  4. eine 100-prozentige Wahrscheinlichkeit von Überläufen bei jedem Vorgang und ein vollständiges Absterben des Systems erhalten
  5. eine Missachtung von Entwicklern erfahren, denen angeboten wird, ihre Indikatoren zu lesen und in Ints statt in Dubs zu arbeiten
  6. Und siehe da, es gibt keinen Unterschied mehr zwischen Dubs und Ints in der Geschwindigkeit. Kaum zu glauben, aber ja.
Ich habe nicht umsonst die oben genannten Beweise angeführt. Dort versuchte Nikolai, die Optimierungsmethode über vorberechnete Wurzeltabellen anzuwenden, und verlor gegen die zeitnahe Berechnung von Stäbchenwurzeln im Prozess.
 
Алексей Тарабанов:

Morphing, wörtlich: Tod.

Nicht wert, hier zu diskutieren, aber Morphing ( morphing) Wo sehen Sie tote Menschen, nüchtern...

 
Artyom Trishkin:

Es lohnt sich nicht, hier darüber zu diskutieren, aber Morphing ( Morphing- Verwandlung) Wo du tote Menschen siehst - nüchtern werden...

Die morphometrische Analyse ist die Analyse der toten Zellen. Zuerst töten wir sie, dann legen wir sie unter das Mikroskop.

 
Renat Fatkhullin:

Nein.

#define  BENCH(A)                                                              \
{                                                                             \
  const ulong StartTime = GetMicrosecondCount();                              \
  A;                                                                          \
  Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - StartTime)); \
}  

template <typename T>
T Tester( const int Amount = 1 e7 )
{
  T Sum = 1;
  T Price = 1;
  
  for (int i = 0; i < Amount; i++)
  {
    Price = 1 - Price;
    
    Sum += (Sum > Price) ? 1 : 0;
  }
  
  Print(Sum);
  
  return(Sum);
}

void OnStart()
{
  BENCH(Tester<int>());
  BENCH(Tester<double>());
}


Double int ist doppelt so schnell wie double

10000001
Time[Tester<int>()] = 25523
10000001.0
Time[Tester<double>()] = 51253