AVX/SSE-Projekt

Algorithmen, Sprachunabhängige Diskussionen zu Konzepten, Programmiersprachen-Design
Antworten
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8472
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

AVX/SSE-Projekt

Beitrag von Xin » Mo Okt 31, 2016 2:54 pm

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?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nufan
Wiki-Moderator
Beiträge: 2443
Registriert: Sa Jul 05, 2008 3:21 pm

Re: AVX/SSE-Projekt

Beitrag von nufan » Mo Nov 14, 2016 1:44 pm

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.

mfro
Beiträge: 303
Registriert: Mi Jan 16, 2013 4:58 pm

Re: AVX/SSE-Projekt

Beitrag von mfro » Mo Nov 14, 2016 3:52 pm

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
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

Antworten