Ich sehe einen Code wie folgt:.SSE (SIMD Extensions) Unterstützung in gcc
#include "stdio.h"
#define VECTOR_SIZE 4
typedef float v4sf __attribute__ ((vector_size(sizeof(float)*VECTOR_SIZE)));
// vector of four single floats
typedef union f4vector
{
v4sf v;
float f[VECTOR_SIZE];
} f4vector;
void print_vector (f4vector *v)
{
printf("%f,%f,%f,%f\n", v->f[0], v->f[1], v->f[2], v->f[3]);
}
int main()
{
union f4vector a, b, c;
a.v = (v4sf){1.2, 2.3, 3.4, 4.5};
b.v = (v4sf){5., 6., 7., 8.};
c.v = a.v + b.v;
print_vector(&a);
print_vector(&b);
print_vector(&c);
}
Dieser Code baut fein und arbeitet expectedly gcc (es ist inbuild SSE/MMX-Erweiterungen und Vektordatentypen dieser Code tut a. SIMD-Vektoraddition mit 4 Einzel Schwimmer
ich möchte im Detail verstehen, was sich jedes Schlüsselwort/Funktionsaufruf auf dieser typedef Linie bedeutet und tut:
typedef float v4sf __attribute__ ((vector_size(sizeof(float)*VECTOR_SIZE)));
Was die VECTOR_SIZE ist () Funktionsrückgabe;
Was ist das __attribute__
Schlüsselwort für
Hier ist der Schwimmer Datentyp Sein Typ definiert Typ vfsf?
Ich verstehe den Rest Teil.
Dank,
-AD
Auch weg weniger lesbar :) – LtWorf
Die intrinsics sind nur portabler zu MSVC. Die Vektorerweiterungen funktionieren für GCC, Clang und ICC. Sie sind auch nicht von der Hardware abhängig. Dies bedeutet, dass Sie sie auch für z. B. ARM verwenden können. Sie können die Macht der Vektorerweiterungen von ihnen [hier] sehen (https://Stackoverflow.com/a/48283672/2542702), die ich für GCC und Clang sowohl auf x86 als auch auf ARM verklagte. Es wäre leicht, sie für ICC zu erweitern, hätte aber meine Antwort länger gemacht. –