AVX Intrinsics - Speicherzugriffsfehler



  • Kann mir jmd erklären, wieso das zu einem Speicherzugriffsfehler führt?

    #include <iostream>
    #include <immintrin.h>
    
    using namespace std;
    
    int main()
    {
      double *x = (double*) malloc(4 * sizeof(double));
      double *y = (double*) malloc(4 * sizeof(double));
    
      x[0] = 1; y[0] = 1.23;
      x[1] = 2; y[1] = 2.34;
      x[2] = 3; y[2] = 3.45;
      x[3] = 4; y[3] = 4.56;
    
     double *r = (double*) malloc(4 * sizeof(double));
    
      __m256d* vx = (__m256d*) x;
      __m256d* vy = (__m256d*) y;
      __m256d* vr = (__m256d*) r;
    
      vr[0] = _mm256_add_pd( vx[0], vy[0]);
    
      for(int i=0; i < 4; i++)
        cout << r[i] << endl;
    
      return 0;
    }
    

    Ich hatte schon ein ähnliches Beispiel probiert, welches ohne Probleme funktioniert. ABer das hier will nicht und ich sehe nicht, warum ...



  • __m256d muss auf 32 Byte ausgerichtet sein. Vermutlich macht malloc das schlicht nicht.



  • seldon schrieb:

    __m256d muss auf 32 Byte ausgerichtet sein. Vermutlich macht malloc das schlicht nicht.

    So siehts aus. memalign wirkt wunder. In meinem vorigen Beispiel habe ich kein manuelles Alignment eingebracht, aber es hat funtioniert.

    Eventuell war eine bestimmte Compileroption für ALignments gesetzt?

    Von sowas hatte ich mal gehört für g++, kann es im Moment aber nicht finden.


Anmelden zum Antworten