сбой при использовании функции AVX - PullRequest
0 голосов
/ 03 мая 2018
#include "stdio.h"
#include "math.h"
#include "stdlib.h"
#include "x86intrin.h"

void dd_m(double *clo, int m) 
{
int j;
__m256d *vclo = (__m256d *)clo;
__m256d al=_mm256_set_pd(0,0,0,0);
__m256d clo_n=_mm256_set_pd(0,0,0,0);
int i;
for (j = 0; j < m; j++) {
    for (i = 0; i < m; i++) {
        al = _mm256_add_pd(vclo[m/4*j+i] , clo_n);
    }
}
}
int main(int argc, const char * argv[]){

int m;
double* zlo;
int i;


m=(int)pow(2,8);

zlo=(double *)_mm_malloc(sizeof(double) * m*m,32);
for (i=0;i<m*m;i++) {
    zlo[i]=0.0;
}
dd_m(zlo, m);

_mm_free(zlo);

return 0;
}

Вот мой код. Он генерирует ошибку «Поток 1: EXC_BAD_ACCESS (код = 1, адрес = 0x102900000)» внутри цикла.

Я использовал последний XCode с Clang.

Что мне делать?

1 Ответ

0 голосов
/ 04 мая 2018

Приведя clo к 256-битным векторам как vclo, ваша длина строки делится на четыре, вы изменили ее в вычислении индекса, но не во внутреннем цикле над i.

for (j = 0; j < m; j++) {
    for (i = 0; i < m/4; i++) { // in vclo, the rows are only m/4 long
        al = _mm256_add_pd(vclo[m/4*j+i] , clo_n);
    }
}
...