Hochleistungsrechnen WS 2016/17 Mo. 07.11.2016 Prof. Dr. Steffen Börm, Dipl. Inf. Sven Christophersen Serie 3 Aufgabe 3.1 (Sinus mit SSE/AVX) SIMD-Erweiterungen wie SSE und AVX bieten im Wesentlichen nur die Grundrechenoperation +,-,*,/ an. Komplexere Funktionen wie zum Beispiel die Sinus-Funktion lassen sich dennoch mit Vektoroperationen beschleunigen, indem man eine Taylor-Entwicklung um 0 herum vornimmt und diese bis zu einem gewissen Grad mit SSE/AVX-Operationen umsetzt. So gilt für den Sinus die Näherung sin(x) ≈ x − x3 x5 x7 x9 x11 + − + − . 3! 5! 7! 9! 11! Effizient Auswerten kann man diese Formel, indem man sukzessive x2 sowie gewisse Konstanten ausklammert. Es ergibt sich dann: x2 x2 x2 x2 x2 sin(x) ≈ x 1 − 1− 1− 1− 1− . 6 20 42 72 110 Implementieren Sie auf diese Weise die Sinus-Funktion in der Datei sinus.c wahlweise mit SSE- und/oder AVX-Instruktionen. Aufgabe 3.2 (Kehrwert und Division) In vielen Anwendungen ist die Berechnung des Kehrwerts 1/y einer Zahl y ∈ R \ {0} unumgänglich genau so wie die Division x/y zweier Zahlen x ∈ R, y ∈ R \ {0}. Da solche Ausdrücke außerdem häufig in den Hot-spots der Programme auftreten, ist es von großem Interesse diese besonders schnell auswerten zu können. Erweitern Sie die Datei rcp.c um folgende Funktionalitäten. (a) Schreiben Sie mit SSE- und/oder AVX-Befehlen eine Methode zur schnellen Berechnung des Kehrwerts. Nutzen Sie hierfür zunächst den Befehl _mm_rcp_ps bzw. _mm256_rcp_ps, der lediglich eine Näherung berechnet. Diese Näherung soll anschließend per Newton-Verfahren verbessert werden. Nutzen Sie dazu die Funktion f (x) = 1/x − a, die bei x = 1/a eine Nullstelle besitzt. (b) Schreiben Sie außerdem eine Funktion die möglichst schnell die Division per SSE und/oder AVX ausrechen kann. Vergleichen Sie die Performance ihrer Lösung mit der des Befehls _mm_div_ps bzw. _mm256_div_ps. Hinweis: Als Referenz für Vektorerweiterungen empfiehlt http://software.intel.com/sites/landingpage/IntrinsicsGuide/ sich die Internetseite Website: www.scicom.informatik.uni-kiel.de/de/lehre/hochleistungsrechnen/hochleistungsrechnenim-ws16-17 Abgabe: Per Email an [email protected] bis Mo, 14.11.16, 14:00 Uhr.