2014-03-27 9 views
5

Mit GCC 4.8.1 auf der vorherigen Generation i7 Prozessor mit Fahnen:Was bedeutet diese Compiler-Nachricht (Vektorisierung, GCC)?

-O3 -ftree-vectorizer-verbose=5 -fomit-frame-pointer -DNDEBUG -fno-operator-names -msse2 -mfpmath=sse -march=native -funsafe-math-optimizations -ffast-math 

(zB alle ‚hem!)

ich:

.cpp:31:note: not vectorized: relevant stmt not supported: D.56044_367 = __builtin_logf (D.55726_232); 

für die Zeile:

for(i=0;i<N5;i++) d3[i]=std::log(d2[i]); 

Was bedeutet diese Fehlermeldung? (d3 und d2 sind Vektor von Schwimmern). Ist es hoffnungslos, die Log-Funktion zu vektorisieren?

Antwort

4

Nach vectorize bedeutet, mehrere Datenelemente in ein Register zu packen und parallel unter Verwendung der vector (a.k.a.packed) Anweisungen zu bearbeiten. Viele Fließkommaoperationen haben vector Formen, LOG ist keiner von ihnen. Hier ist eine Liste von einfacher Genauigkeit gepackter Form Vektorbefehle, von http://docs.oracle.com/cd/E19253-01/817-5477/epmoa/index.html

  • ADDPS Add verpackt mit einfacher Genauigkeit Gleitkommazahlen
  • DIVPS divide gepackt mit einfacher Genauigkeit Gleitkommazahlen
  • MAXPS retournieren maximal gepackte Gleitkommawerte einfacher Genauigkeit
  • MINPS zurückgeben Minimum verpackt single-preci sion Gleitkommawerte
  • MULPS multiply einfacher Genauigkeit gepackte Gleitkommaoperationen
  • RCPPS compute reziproken gepackte einfacher Genauigkeit Gleitkommawerte Werte
  • RSQRTPS compute reziproken Quadratwurzeln gepackte mit einfacher Genauigkeit Gleitkommawerte
  • SQRTPS compute Quadratwurzeln gepackte einfacher Genauigkeit Gleitkommawerte
  • SUBPS subtrahieren gepackte Gleitkommawerte einfacher Genauigkeit
+0

schnelle Frage: würden Sie wissen, ob ICC in der Lage wäre, das Protokoll() zu vektorisieren? – user189035

+0

Wahrscheinlich nicht, aber hier ist eine Open-Source-Anwendung, die das für Sie erledigt: http://code.google.com/p/fastapprox/ – amdn

+1

Vielen Dank, Herr (ich wünschte, ich könnte mehr aufzählen)! – user189035

1

Dies bedeutet, dass der Compiler keine SIMD (SSE) -Anweisungen zum Auswerten des Protokolls hat.

SIMD Anweisungen erlauben, mehrere Operationen für den Preis von einem sozusagen zu bewerten. Log und seine Verwandten haben normalerweise keine übereinstimmenden Hardware-Anweisungen.