首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVX2 SIMD加法不工作

AVX2 SIMD加法不工作
EN

Stack Overflow用户
提问于 2016-12-10 11:16:05
回答 1查看 212关注 0票数 0

我试图添加这两个向量使用AVX2 SIMD指令。

代码编译时没有错误和警告,但在运行时会崩溃。为什么?

无论在主方法中初始化的数组有多大,都应该用AVX2打印SIMD加法的结果。

代码语言:javascript
复制
#include <iostream>
#include <immintrin.h>
#include <stdio.h>
#include <stdlib.h>

using namespace std;



void mul(float *a, float *b, float *c, int ARR_SIZE){

        for (int i=0; i < ARR_SIZE ; i+=8){

         __m256 vecA = _mm256_load_ps(&a[i]);

         __m256 vecB = _mm256_load_ps(&b[i]);

         __m256 res  = _mm256_add_ps(vecA,vecB);

         _mm256_store_ps(&c[i],res);

        float* f = (float*)&c[i];
        printf("%f %f %f %f %f %f %f %f\n", f[i + 0], f[i + 1], f[i + 2], f[i + 3], f[i + 4], f[i + 5], f[i + 6], f[i + 7]);

        }

}

int main(){

    float a[] = {1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0};
    float b[] = {1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0};

    int arrsize = sizeof(a) / sizeof (a[0]);

    float c[arrsize];

    mul((float*)&a, (float*)&b , (float*)&c, arrsize);

   return 0;

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-10 13:17:58

在尝试了两种非对齐加载和存储之后,程序完美地工作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41074900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档