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

AVX2整数向量运算「建议收藏」在C/C++程序中,使用AVX2指令有很多种方法。嵌入汇编是一般的方法,但是对于不熟悉汇编语言的人来说,有点勉为其难。gcc编译支持AVX2指令的编程。程序中需要使用头文件和,这样通过调用其中定义的一些函数,达到使用AVX2指令的目的,即用C/C++调用SIMD指令(单指令多数据)。这里给出的样例程序是有关浮点向量运算的例子。其中函数_mm_add_epi32()实现的是整数向量(

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

在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指令,其优点在于各个分量是并行计算的,计算速度相对比较快。

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

#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;
}

运算结果:

0: 8
1: 6
2: 4
3: 2

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

#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;
}

运算结果:

0: 33
1: 55
2: 77
3: 99

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
上一篇 2022年5月25日 上午6:00
下一篇 2022年5月25日 上午6:20


相关推荐

  • 汉罗塔问题_6层汉诺塔最少步骤

    汉罗塔问题_6层汉诺塔最少步骤Hanoi汉诺塔是一个发源于印度的益智游戏,也叫河内塔。相传它源于印度神话中的大梵天创造的三个金刚柱,一根柱子上叠着上下从小到大64个黄金圆盘。大梵天命令婆罗门将这些圆盘按从小到大的顺序移动到另一根柱子上,其中大圆盘不能放在小圆盘上面。当这64个圆盘移动完的时候,世界就将毁灭。好吧上面这个东西是我直接百度copy的.这个源自孤古印度的游戏,还是有点意思的,也和递归扯上关系.但是我不明白…

    2022年10月12日
    4
  • radius认证服务器ip该怎么填_radius认证服务器拒绝原因

    radius认证服务器ip该怎么填_radius认证服务器拒绝原因1.AAA和Radius概述  AAA是验证授权和记账Authentication,Authorization,andAccounting的简称。它是运行于NAS上的客户端程序,它提供了一个用来对验证、授权和记账这三种安全功能进行配置的一致的框架。AAA的配置实际上是对网络安全的一种管理,这里的网络安全主要指访问控制,包括哪些用户可以访问网络服务器,具有访问权的用户可以得到哪些服务,如何

    2025年8月3日
    9
  • Pytest(1)安装与入门「建议收藏」

    Pytest(1)安装与入门「建议收藏」pytest介绍pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。根据pytest的官方网站介绍,它

    2022年7月31日
    9
  • JS 匿名函数——几种不同的调用方式[通俗易懂]

    JS 匿名函数——几种不同的调用方式[通俗易懂]匿名函数有两种用法: 1.赋值 vara=function(){}; 2.自我执行这里我总结了4种匿名函数调用方法: //1. functionshow(){ document.write(‘nihao’); } show(); //2. (function(){ document.write(‘wohao’); })();…

    2022年10月4日
    3
  • 桶排序算法c语言_哪种排序算法最快

    桶排序算法c语言_哪种排序算法最快在前几回我们已经对冒泡排序、直接插入排序、希尔排序、选择排序、快速排序、归并排序、堆排序、计数排序做了说明分析(具体详情可在公众号历史消息中查看)。本回,将对桶排序进行相关说明分析。一、排序算法系列目录说明冒泡排序(BubbleSort)插入排序(InsertionSort)希尔排序(ShellSort)选择排序(SelectionSort)快速排序(Quick…

    2025年8月9日
    5
  • metro风格的特点

    metro风格的特点避免过度设计因为 metro 的出现 微软终于将他们的设计简单化 只突必要的 这不仅仅更好的突出了内容 也让工作量大大的减少 下面是两年前他们的网站 有很多方块图片 里面有些文字内容 相信做了很多工作但是我找不到究竟是些什么 除非很认真的去看 和现在主页的内容盒子和方框相比 那些剪纸艺术和 90s 图片的堆砌已经一去不复返了 在新主页里你能找到浓烈的颜色 基本但有

    2026年3月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号