Cómo carga / almacena desde / a una matriz de dobles con GNU C Vector Extensions?
Estoy usandoGNU C Extensiones de vectores, no Intel's_mm_*
intrínsecos.
Quiero hacer lo mismo que Intel's_m256_loadu_pd
intrínseco. Asignar los valores uno por uno es lento: gcc produce código que tiene 4 instrucciones de carga, en lugar de una solavmovupd
(cual_m256_loadu_pd
genera).
typedef double vector __attribute__((vector_size(4 * sizeof(double))));
int main(int argc, char **argv) {
double a[4] = {1.0, 2.0, 3.0, 4.0};
vector v;
/* I currently do this */
v[0] = a[0];
v[1] = a[1];
v[2] = a[2];
v[3] = a[3];
}
Quiero algo como esto
v = (vector)(a);
v = *((vector*)(a));
pero tampoco funciona. El primero falla con "no se puede convertir el valor en un vector", mientras que el segundo produce segfaults.