SSE für Vektor und Matrixclasse
-
Hallo Leute ich bin dabei ein bisschen was über die SSE Funktion der CPU zu lernen ,damit ich mir eine eigene Vektor und Matrixklasse schreiben kann, um Berechnungen schneller (gemessen über 2.2 mal so schnell ) zu machen.
Jetzt ist die Frage wie man das umsetzten kann.Dafür währe der Datentyp __m128 geeignet um 4 floats zu speichern.
Das hab ich bisher so gemacht:
float* a = new float(4); a[0] = 1.0f; a[1] = 2.0f; a[2] = 3.0f; a[3] = 4.0f; __m128* ptr = (__m128*)a;Jetzt ist ja die Aufgabe mit diesen Komponenten zu rechen, wobei es ja auch dafür Funktionen gibt von SSE, jedoch versteh ich gerade nicht wie das funktioniert.Ich würde z.B gerne die ersten beiden floats (von 4 ) addieren usw. jedoch kann ich keine Beispiele dafür finden, nur welche wo alle 4 Komponenten addiert werden.
Wäre nett wenm mir das jemand erklären könnte.
Danke
-
Bahnhof 
Bob Wolfskin schrieb:
Hallo Leute ich bin dabei ein bisschen was über die SSE Funktion der CPU zu lernen
Ok.
Bob Wolfskin schrieb:
damit ich mir eine eigene Vektor und Matrixklasse schreiben kann, um Berechnungen schneller (gemessen über 2.2 mal so schnell ) zu machen.
Also 2.2 mal schneller als deine alte Implementierung?
Bob Wolfskin schrieb:
Jetzt ist die Frage wie man das umsetzten kann.Dafür währe der Datentyp __m128 geeignet um 4 floats zu speichern.
Ich kenne weder diesen Datentyp, noch das Wort währe, noch sehe ich hier 4 floats.

Bob Wolfskin schrieb:
Jetzt ist ja die Aufgabe mit diesen Komponenten zu rechen, wobei es ja auch dafür Funktionen gibt von SSE, jedoch versteh ich gerade nicht wie das funktioniert.
Ich auch nicht. Ich kenne diese Funktionen nicht und der C++-Standard kennt sie auch nicht.
Bob Wolfskin schrieb:
Ich würde z.B gerne die ersten beiden floats (von 4 ) addieren usw.
Achso, ja wie gesagt, ich sehe hier nur 1 float.
Bob Wolfskin schrieb:
Wäre nett wenm mir das jemand erklären könnte.
Ich glaube, das wird schwierig, weil aus deinem Beitrag einfach viel zu wenige hervorgeht.
-
float* a = new float(4); __m128* ptr = (__m128*)a;Ich glaube kaum, dass das 16 Byte Alignment so garantiert wird.
Hast du schon mal google dazu befragt? Gibt 1000 und mehr Tutorials zu SSE.
-
Hast Du schon mal gemessen, wie schnell Deine Implementierung wird, wenn Du SSE(2) Unterstützung im Compiler (ggf. Alignment Option dazu) anschaltest?
Dann würde ich mir den Assembler Output mal anschauen. Ggf. macht der Compiler schon das automatisch, was Du von Hand machst/versuchst.
-