Diskussion zum Artikel "OpenCL: Vom naiven zum aufschlussreicheren Programmieren" - Seite 2

 
denkir: Sie könnten zum Beispiel einige statistische Berechnungen hinzufügen.

Ich bin schon dabei, es zu tun, (höchstwahrscheinlich) wird es nur die Sammlung von Statistiken über eine große Geschichte sein. Das hat aber nichts mit muves zu tun. Ich hasse muves - ich habe das Recht, es zu tun :)

Zitate synchronisieren.

Dies ist eine Aufgabe für die CPU und nicht für die GPU. Nicht jede Aufgabe ist für die GPU geeignet, nicht wahr? Es ist besser, eine zu wählen, die geeignet ist, denn dafür ist die GPU da.

Dies wird ein zweidimensionales Array sein.

Ich gehe davon aus, dass es in dem zukünftigen Artikel ein dreidimensionales sein wird. Gleichzeitig wird deutlich werden, wie man mit dem GPU-Puffer arbeitet, der ein Array beliebiger Dimension anzeigt.

 
Mathemat:

Bereits gehen, dies zu tun, (wahrscheinlich) wird nur über das Sammeln von Statistiken über eine große Geschichte.... sein.

Ich nehme an, dass in einem zukünftigen Artikel wird dreidimensional sein. Gleichzeitig wird klar werden, wie man ein Array beliebiger Dimensionalität in den GPU-Puffer schreibt und wie man damit arbeitet.

Großartig! Warten wir's ab...

 
denkir: Nehmen Sie den Kursverlauf für alle Instrumente im Terminal. Sagen wir eine Minute. Synchronisieren Sie die Kurse.

Müssen sie auch synchronisiert werden?

P.S. Ich habe die Hilfe gelesen und sehe, dass dies notwendig ist.

 

Ich habe die Ergebnisse des Artikels unter Berücksichtigung des Hardware-Upgrades neu berechnet.

Vor einem Jahr: Intel Pentium G840 CPU (2 Kerne @ 2,8 GHz) + AMD HD4870 Grafikkarte.

Kürzlich: CPU Intel Xeon E3-1230v2 (4 Kerne/8 Threads @ 3,3 GHz; leicht hinter i7-3770) + AMD HD-Grafikkarte.6 870.

Die Ergebnisse der Berechnungen in OpenCL sind in der Grafik dargestellt (horizontal - die Anzahl der im Artikel angewandten Optimierungen):


Die Berechnungszeit wird vertikal in Sekunden angezeigt. Die Ausführungszeit des Skripts "auf einen Schlag auf der CPU" (auf einem Kern, ohne OpenCL) schwankte je nach den Algorithmusänderungen innerhalb von 95 plus/minus 25 Sekunden.

Wie wir sehen können, scheint alles klar, aber immer noch nicht sehr offensichtlich.

Der offensichtliche Außenseiter ist der Dual-Core G840. Nun, das war zu erwarten. Weitere Optimierungen änderten die Ausführungszeit nicht allzu sehr, die zwischen 4 und 5,5 Sekunden lag. Man beachte, dass selbst in diesem Fall die Beschleunigung der Skriptausführung Werte von über 20 Mal erreichte.

Im Wettbewerb zwischen zwei Grafikkarten unterschiedlicher Generationen - der alten HD4870 und der moderneren HD6870 - können wir die 6870 fast als Sieger betrachten. Abgesehen von der letzten Optimierungsphase, in der das alte Monster 4870 noch einen nominellen Sieg errungen hat (obwohl es fast die ganze Zeit hinterherhinkte). Die Gründe dafür sind, offen gesagt, unklar: Die Shader sind kleiner und ihre Frequenz ist auch niedriger - aber sie hat trotzdem gewonnen.

Nehmen wir an, dass es sich dabei um die Unwägbarkeiten der Entwicklung von Grafikkartengenerationen handelt. Oder ein Fehler in meinem Algorithmus :)

Ich war ehrlich gesagt zufrieden mit dem Xeon, der es geschafft hat, bei allen Optimierungen besser zu sein als der alte 4870, und der mit dem 6870 fast auf Augenhöhe gekämpft hat und es am Ende sogar geschafft hat, sie alle zu schlagen. Ich behaupte nicht, dass das bei jeder Aufgabe immer so sein wird. Aber die Aufgabe war rechnerisch ziemlich schwierig - immerhin ging es um die Multiplikation zweier Matrizen der Größe 2000 x 2000!

Die Schlussfolgerung ist einfach: Wenn Sie bereits eine anständige CPU wie den i7 haben und die OpenCL-Berechnungen nicht zu lange dauern, dann brauchen Sie vielleicht keinen zusätzlichen leistungsstarken Heizer (Grafikkarte). Auf der anderen Seite, Laden der Stein bei 100% für Dutzende von Sekunden (während lange Berechnungen) ist nicht sehr angenehm, weil der Computer "verliert Reaktionsfähigkeit" für diese Zeit.

 

Hallo zusammen,

Können Sie ein Beispiel dafür geben, wie OpenCL das Backtesting eines EA im EveryTick-Modus beschleunigen kann? Derzeit brauche ich 18 Minuten, um 14 Jahre Daten im EveryTick-Modus laufen zu lassen. Ich glaube, dass viele Händler daran interessiert sein werden, wenn OpenCL die Testzeit um 50 % reduzieren kann.

 

Toller Artikel, ich habe nicht verstanden, wie das Verschieben der Übertragung der Zeile von innerhalb der Schleife nach außen in den privaten Speicher die Geschwindigkeit erhöht.

Der gleiche Übertragungsvorgang erfolgt trotzdem, ich habe null Auswirkungen auf meinen Code, aber natürlich ist jeder Fall anders. (aber dann wieder 0 Auswirkungen nach dem Hinzufügen von etwas bedeutet, dass etwas beschleunigt, aber kein Gewinn)

Dieser Teil in der OpenCL Quelle :

      "  REALTYPE rowbuf[ COLSROWS ];                                               \r\n"
      "  for( int col = 0; col < COLSROWS; col ++ )                                 \r\n"
      "     rowbuf[ col ] = in1[ r * COLSROWS + col ];                              \r\n"

Wo Sie es außerhalb der Crunch-Schleife verschieben

Dankeschön

 
Vielen Dank für den Artikel, es war sehr lehrreich und ich freue mich darauf, ihn in die Praxis umzusetzen.