32-bit-oder 64-bit-floating-point-performance

Habe ich lief in einem kuriosen problem. Ein Algorithmus, an dem ich arbeite besteht aus vielen Berechnungen wie diese

q = x(0)*y(0)*z(0) + x(1)*y(1)*z(1) + ...

wobei die Länge der Summe zwischen 4 und 7.

Den ursprünglichen Berechnungen erfolgen mit 64-bit-Präzision. Für Experimente, versuchte ich mit 32-bit-Genauigkeit für x -, y -, z-input-Werte (so dass die Berechnungen werden durchgeführt unter Verwendung der 32-bit), und speichern endgültige Ergebnis als 64-bit-Wert (einfache Besetzung).

Ich erwartete 32-bit-Leistung besser zu sein (cache-Größe, SIMD Größe, etc.), aber zu meiner überraschung gab es keinen Unterschied in der Leistung, vielleicht sogar sinken.

Der Architektur in Frage, Intel 64, Linux, und GCC. Beide codes tun scheinen SSE und arrays in beiden Fällen orientieren sich an 16-byte-Grenze.

Warum wäre es so? Meine Vermutung bisher ist, dass 32-bit-Genauigkeit verwenden können, SSE nur auf die ersten vier Elemente, der rest erfolgt Seriell verstärkt durch Darsteller overhead.

  • Sie habe ein Kopfgeld - was hat Euch nicht gefallen über dsimcha Antwort? Es könnte auch einen Versuch Wert, die neueste GCC-Sie können oder Intel-compiler software.intel.com/en-us/articles/..., um zu sehen, wenn Sie tun, einen besseren job zu kompilieren / vectorising.
  • Ich mag seine Antwort, dennoch möchten, dass andere Meinungen auch, so dass ich ein Kopfgeld
InformationsquelleAutor Anycorn | 2010-06-29
Schreibe einen Kommentar