Wie lade / speichere ich mit GNU C Vector Extensions von / zu einem Array von Doubles?
Ich benutze GNU C Vector Extensions, nicht Intels_mm_*
intrinsics.
Ich möchte das Gleiche tun wie Intels_m256_loadu_pd
intrinsic. Das Zuweisen der Werte nacheinander ist langsam: gcc erzeugt Code mit 4 Ladeanweisungen anstelle eines einzelnenvmovupd
(welche_m256_loadu_pd
erzeugt).
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];
}
Ich möchte so etwas:
v = (vector)(a);
ode
v = *((vector*)(a));
aber auch nicht arbeiten. Der erste Fehler schlägt mit "Wert kann nicht in einen Vektor konvertiert werden" fehl, während der zweite Fehler zu Segfaults führt.