AVX2 Matrix 4x4乘法不起作用

时间:2016-11-20 11:00:08

标签: c++ sse matrix-multiplication simd avx

这是一个使用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;
}

0 个答案:

没有答案