Поддержка SSE (расширений SIMD) в 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);
}

Этот код работает нормально и работает с использованием gcc (это встроенные расширения SSE / MMX и векторные типы данных. Этот код выполняет сложение вектора SIMD с использованием 4 одиночных чисел с плавающей запятой.

Я хочу подробно понять, что означает и делает каждый вызов ключевого слова / функции в этой строке typedef:

typedef float v4sf __attribute__ ((vector_size(sizeof(float)*VECTOR_SIZE))); 

Что такое функция vector_size () return;

Что такое ключевое слово __ attribute __ для

Вот тип данных float, определенный как тип vfsf?

Остальное я понимаю.

спасибо,

-AD

5
задан Paul R 5 January 2011 в 10:15
поделиться