Punktprodukt - SSE2 vs BLAS

9

Was ist meine beste Wette für die Berechnung des Skalarprodukts eines Vektors x mit einer großen Anzahl von Vektoren y_i, wobei x und y_i eine Länge von etwa 10k haben.

  1. Schieben Sie die y's in eine Matrix und verwenden Sie eine optimierte s/dgemv Routine?
  2. Oder versuchen Sie vielleicht, eine SSE2-Lösung manuell zu codieren (ich habe keine SSE3, laut cpuinfo).

Ich suche hier nur eine allgemeine Anleitung, also werden alle Vorschläge nützlich sein.
Und ja, ich brauche die Aufführung. Danke für jedes Licht.

    
Aamir 07.07.2009, 03:34
quelle

5 Antworten

4

Ich denke, GPUs sind speziell dafür ausgelegt, 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.

    
Patrick Gryciuk 07.07.2009 04:31
quelle
1

Alternativen für optimierte BLAS-Routinen:

  • Wenn Sie Intel Compiler verwenden, können Sie hab Zugang zu Intel MKL
  • Für andere Compiler bietet ATLAS normalerweise nette Leistungszahlen
Kjetil Joergensen 07.07.2009 16:45
quelle
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 erreicht, so dass Sie die Datenparallelität und -ausrichtung ausnutzen können.

    
Christopher 07.07.2009 12:37
quelle
0

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

    
vitaly 03.10.2009 10:34
quelle
0

Im Folgenden werden BLAS-Level-1-Routinen (Vektoroperationen) mit SSE bereitgestellt.

Ссылка

Wenn Sie eine nVidia-Grafikkarte haben, können Sie cuBLAS bekommen, die den Vorgang auf der Grafikkarte ausführen.

Ссылка

Für ATI (AMD) Grafikkarten

Ссылка

    
Michael Conlen 06.05.2012 20:25
quelle

Tags und Links