这是一个使用AVX2的4x4矩阵乘法程序。但该程序没有显示输出。请看问题在哪里,我是否必须做任何事情来进行内存对齐?请建议。
#include <iostream>
#include <immintrin.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
void m4x4_AVX(float *A, float *B, float *C) {
__m256 row1 = _mm256_load_ps(&B[0]);
__m256 row2 = _mm256_load_ps(&B[4]);
__m256 row3 = _mm256_load_ps(&B[8]);
__m256 row4 = _mm256_load_ps(&B[12]);
for(int i=0; i<4; i++) {
__m256 brod1 = _mm256_set1_ps(A[4*i + 0]);
__m256 brod2 = _mm256_set1_ps(A[4*i + 1]);
__m256 brod3 = _mm256_set1_ps(A[4*i + 2]);
__m256 brod4 = _mm256_set1_ps(A[4*i + 3]);
__m256 row = _mm256_add_ps(
_mm256_add_ps(
_mm256_mul_ps(brod1, row1),
_mm256_mul_ps(brod2, row2)),
_mm256_add_ps(
_mm256_mul_ps(brod3, row3),
_mm256_mul_ps(brod4, row4)));
_mm256_store_ps(&C[4*i], row);
printf("%f\t", C[4*i]);
}
}
int main(){
float a[4][4] = {{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{9,10,11,12}
};
float b[4][4] = {{5,2,3,4},
{6,6,7,8},
{7,10,11,12},
{8,10,11,12}
};
float c[4][4];
m4x4_AVX((float*)&a, (float*)&b , (float*)&c);
return 0;
}