veo un código de la siguiente manera:.(extensiones SIMD) SSE apoyo en 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);
}
Este código se construye muy bien y funciona como era de esperar con gcc (se inbuild extensiones SSE/MMX y tipos de datos vectoriales este código está haciendo . una suma de vectores usando SIMD 4 flotadores individuales
Quiero comprender en detalle lo que cada palabra clave/llamada a la función en esta línea typedef significa y hace:
typedef float v4sf __attribute__ ((vector_size(sizeof(float)*VECTOR_SIZE)));
Cuál es el vector_size () función de retorno;
¿Cuál es la palabra clave para __attribute__
Aquí está el flotador tipo de datos que se define el tipo de vfsf tipo?
Entiendo la parte de descanso.
gracias,
-AD
También es menos legible :) – LtWorf
Los intrínsecos son solo más portátiles para MSVC. Las extensiones vectoriales funcionan para GCC, Clang e ICC. Tampoco dependen del hardware. Esto significa que también puede usarlos para, por ejemplo, ARM. Puedes ver el poder de las extensiones vectoriales de ellos [aquí] (https://stackoverflow.com/a/48283672/2542702) que demandé para GCC y Clang en ambos, x86 y ARM. Sería fácil extenderlos para ICC también, pero hubiera hecho que mi respuesta fuera más larga. –