C - Zugriff auf Vektorelemente mit der GCC SSE-Vektorerweiterung

8

Normalerweise arbeite ich mit 3D-Vektoren mit folgenden Typen:

%Vor%

Initialisierung von Vektoren mit etw. wie:

%Vor%

und Zugriff auf sie mit etw. wie:

%Vor%

Jetzt brauche ich eine Vektor-Arithmetik mit SSE-Anweisungen. Ich habe folgenden Code:

%Vor%

GCC unterstützt solche Art und Weise. Aber... Zuerst gibt es mir 0,00000 als Ergebnis. Zweitens kann ich nicht auf die Elemente solcher Vektoren zugreifen. Meine Frage ist: Wie kann ich auf Elemente solcher Vektoren zugreifen? Ich brauche etwas. wie eine [0], um auf ein X-Element zuzugreifen, eine [1], um auf ein Y-Element usw. zuzugreifen.

PS: Ich kompiliere diesen Code mit:

%Vor%     
psihodelia 20.11.2009, 17:12
quelle

3 Antworten

16

Der sichere und empfohlene Weg, um auf die Elemente zuzugreifen, ist eine Union, anstelle eines Pointer-Punnings, der die Aliasing-Erkennungsmechanismen des Compilers täuscht und zu instabilem Code führen kann.

%Vor%

    
hirschhornsalz 20.11.2009, 18:44
quelle
6

Beachten Sie, dass gcc 4.6 jetzt indizierte Vektoren unterstützt:

  

In C können Vektoren so subskribiert werden, als wäre der Vektor ein Array mit der gleichen Anzahl von Elementen und dem gleichen Basistyp. Ungebundene Zugriffe rufen zur Laufzeit undefiniertes Verhalten auf. Warnungen für außerhalb der Grenzen liegende Zugriffe auf Vektor-Subskriptionen können mit -Warray-Grenzen aktiviert werden.

    
Alexandre Hamez 05.05.2011 16:35
quelle
5

Sie vergessen, dass Sie a als Array von Floats neu interpretieren müssen. Der folgende Code funktioniert ordnungsgemäß:

%Vor%

P.S .: Danke für diese Frage, ich wusste nicht, dass gcc solche SSE-Unterstützung hat.

UPDATE: Diese Lösung schlägt fehl, sobald die Arrays nicht mehr ausgerichtet sind. Die Lösung von @drhirsh ist frei von diesem Problem.

    
elder_george 20.11.2009 17:38
quelle

Tags und Links