2009-07-07 11 views
9

Was ist meine beste Wette für die Berechnung der Skalarprodukt eines Vektors x mit einer großen Anzahl von Vektoren y_i, wobei x und y_i eine Länge von 10k oder so haben.Punkt Produkt - SSE2 vs BLAS

  1. Schieben Sie die y in einer Matrix und verwenden Sie eine optimierte s/dgemv Routine?
  2. Oder vielleicht Handcoding eine SSE2-Lösung (ich habe keine SSE3, nach cpuinfo).

Ich bin nur auf der Suche nach allgemeinen Leitlinien hier, so dass alle Vorschläge nützlich sein werden.
Und ja, ich brauche die Leistung. Danke für jedes Licht.

+0

Welche Compiler verwenden Sie? –

Antwort

4

Ich denke, GPUs wurden speziell entwickelt, um Operationen (ua) schnell durchzuführen. Sie könnten also wahrscheinlich DirectX- oder OpenGL-Bibliotheken verwenden, um die Vektoroperationen durchzuführen. D3DXVec2Dot Dadurch sparen Sie auch CPU-Zeit.

+2

D3DXVec2Dot verwendet nicht die GPU. Außerdem sehen Sie nur eine Beschleunigung von GPGPU-Programmen, wenn Sie sehr große Datenmengen transformieren oder sehr teure Programme auf der GPU verwenden. Dies liegt an den Kosten für die Einrichtung der GPU, um die Arbeit zu erledigen, und dann das Ergebnis zurücklesen. Jede Übertragung von Daten zu/von der GPU ist ein sehr kostspieliger Vorgang. – Christopher

+0

Es ist schwer, DirectX's Dot-Produkt zu schlagen, wenn Floats gut genug sind. –

+0

Aktuelle CPUs sind auch für diese Art der Verarbeitung durchaus geeignet. –

0

Das Handcoding einer SSE2-Lösung ist nicht sehr schwierig und bringt eine schöne Beschleunigung gegenüber einer reinen C-Routine. Wie viel das über eine BLAS-Routine bringt, muss von Ihnen bestimmt werden.

Die größte Beschleunigung wird durch Strukturieren der Daten in ein Format abgeleitet, so dass Sie Datenparallelität und -ausrichtung ausnutzen können.

1

Alternativen für optimierte BLAS-Routinen:

  • Wenn Sie Intel Compiler verwenden zu können, Zugriff haben MKL
  • Für andere Compiler von Intel ATLAS in der Regel schöne Leistung Zahlen
0

Ich benutze bietet ein GotoBLAS. Es sind die High-Perfomance-Kernroutinen. Das ist viel besser als MKL und BLAS.

+0

gibt es Lizenzprobleme mit Gotoblas. –