Como você carrega / armazena de / para uma matriz de duplas com as Extensões de Vetor GNU
Estou a usarGNU C extensões de vetor, não da Intel_mm_*
intrínseca.
Quero fazer a mesma coisa que a Intel_m256_loadu_pd
intrínseco. Atribuir os valores um a um é lento: o gcc produz código com 4 instruções de carregamento, em vez de um únicovmovupd
(qual_m256_loadu_pd
gera).
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];
}
Eu quero algo assim:
v = (vector)(a);
o
v = *((vector*)(a));
mas nem trabalho. O primeiro falha com "não é possível converter valor em um vetor", enquanto o segundo resulta em segfaults.