首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >AVX2整数向量运算「建议收藏」

AVX2整数向量运算「建议收藏」

作者头像
全栈程序员站长
发布2022-09-01 16:05:48
发布2022-09-01 16:05:48
1K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

在C/C++程序中,使用AVX2指令有很多种方法。

嵌入汇编是一般的方法,但是对于不熟悉汇编语言的人来说,有点勉为其难。

gcc编译支持AVX2指令的编程。程序中需要使用头文件<immintrin.h>和<avx2intrin.h>,这样通过调用其中定义的一些函数,达到使用AVX2指令的目的,即用C/C++调用SIMD指令(单指令多数据)。

这里给出的样例程序是有关浮点向量运算的例子。

其中函数_mm_add_epi32()实现的是整数向量(4个数)加法运算。样例程序中使用了若干有关avx2的函数。

编程操作系统是Ubuntu15.10,使用Qt编写程序,编译器是gcc的版本是5.2.1。

使用AVX2指令实现向量运算,由于使用的是SIMD指令,其优点在于各个分量是并行计算的,计算速度相对比较快。

整数向量运算样例程序一:

代码语言:javascript
代码运行次数:0
运行
复制
#include <iostream>
#include <immintrin.h>
#include <avx2intrin.h>

using namespace std;

int main()
{
    __m128i x = _mm_set_epi32(1, 2, 3, 4);
    __m128i y = _mm_set_epi32(1, 2, 3, 4);

    __m128i z = _mm_add_epi32(x, y);
    int* pi;
    pi = (int*)(&z);

    printf("0: %d\n", *pi);
    printf("1: %d\n", *(pi+1));
    printf("2: %d\n", *(pi+2));
    printf("3: %d\n", *(pi+3));

    return 0;
}

运算结果:

代码语言:javascript
代码运行次数:0
运行
复制
0: 8
1: 6
2: 4
3: 2

整数向量运算样例程序二:

代码语言:javascript
代码运行次数:0
运行
复制
#include <iostream>
#include <immintrin.h>
#include <avx2intrin.h>

using namespace std;

int main()
{
    __m128i x;
    __m128i y;
    __m128i z;

    int op1[4] = {11, 22, 33, 44};
    int op2[4] = {22, 33, 44, 55};
    int result[4];

    // Load
    x = _mm_loadu_si128((__m128i*)op1);
    y = _mm_load_si128((__m128i*)op2);

    // Calculate
    z = _mm_add_epi32(x, y);   // z = x + y

    // Store
    _mm_store_si128((__m128i*)result, z);

    printf("0: %d\n", result[0]);
    printf("1: %d\n", result[1]);
    printf("2: %d\n", result[2]);
    printf("3: %d\n", result[3]);

    return 0;
}

运算结果:

代码语言:javascript
代码运行次数:0
运行
复制
0: 33
1: 55
2: 77
3: 99

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/141797.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档