Seite 1 von 1

AVX/SSE-Projekt

Verfasst: Mo Okt 31, 2016 2:54 pm
von Xin
Da mir die Klothoiden kürzlich um die Ohren geflogen sind, habe ich mir überlegt, spaßeshalber softwaregetriebene Doubles zu programmieren. Das nimmt auch seinen Weg, aber mit dem Wissen, dass es nur spaßeshalber (weil saulahm) ist, kam auch die Überlegung wie man es richtig(er) machen könnte.
Und da fielen mir die AVX-Erweiterung auf: 256 Bit breite Register bei modernen Prozessoren, bzw. SSE mit 128 Bit breiten Registern.
Derartiges habe ich aber noch nicht angefasst.

Daher die Frage, ob hier schon Erkenntisse in der Richtung sind, ganz blöd: Wie spricht man diese Register aus C/C++ an und was muss man am Compiler ändern? Die Architektur verändert sich... war das schon alles? Ist dann ein Double schon 256 Bit breit?
Ich fand was zu __float128 und eine Boost-Lib.

Hat jemand mit den Prozessorerweiterungen schonmal gespielt?

Re: AVX/SSE-Projekt

Verfasst: Mo Nov 14, 2016 1:44 pm
von nufan
Sorry, komplett untergegangen. Hier findest du intrinsische Funktionen für Intel CPU-Erweiterungen:
https://software.intel.com/sites/landin ... sicsGuide/
Wobei diese auf Parallelität ausgelegt sind, heißt grundsätzlich für dein Vorhaben eher unpraktisch.

Re: AVX/SSE-Projekt

Verfasst: Mo Nov 14, 2016 3:52 pm
von mfro
Xin hat geschrieben: Daher die Frage, ob hier schon Erkenntisse in der Richtung sind, ganz blöd: Wie spricht man diese Register aus C/C++ an und was muss man am Compiler ändern?
Mit gcc: compilieren mit -O3 und -mavx2/-mavx512xx und/oder -msse2.
(siehe gcc --help=target).

Wenn man die Register unbedingt selber handhaben will, hat gcc auch dafür builtins: https://gcc.gnu.org/onlinedocs/gcc-4.8. ... tions.html