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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 数据库之联合索引

    数据库之联合索引联合索引使用结论:  1):查询条件中出现联合索引第一列,或者全部,则能利用联合索引.  2):条件列中只要条件相连在一起,以本文例子来说就是:  last_name=’1′andfirst_name=’1′  与  first_name=’1′andlast_name=’1′  ,无论前后,都会利用上联合索引.  3):查询条件中没有出现

  • 手机端有没有好用的图片识别文字工具值得推荐?

    手机端有没有好用的图片识别文字工具值得推荐?图片转文字,用到的就是OCR识别技术,针对网络上复杂字体实现精确识别功能,经常用于社交、电商、学习等场景。传统的将图片识别文字的方式选择手动书写,随着AI智能技术的应用,以OCR智能识别工具由于使用简单、转写效率高逐渐代替传统的手动书写。下面给大家分享三款超好用的图片转文字工具,看看你喜欢的有没有上榜。1、微信提取文字微信基本上是现在手机中必装软件,很多人仅用微信用来日常聊天,实际上很多小功能也是非常好用。今天给大家介绍微信提取文字的方法。第一步:打开好友对话框,找到需要识别的图片。第二步:点击右下

  • jenkins 邮件_邮件发送服务

    jenkins 邮件_邮件发送服务前言前面已经实现在jenkins上展示html的测试报告,接下来只差最后一步,把报告发给你的领导,展示你的劳动成果了。安装EmailExtensionPlugin插件jenkins首页-

  • oracle 错误01017,ORA-01017:用户名密码出错 故障实例

    oracle 错误01017,ORA-01017:用户名密码出错 故障实例sysdba登录ORA-01017:用户名密码出错故障排查实例早上接到一个朋友的急call,说是数据库的sys登录不了系统叻。普通用户连接可以登录,只要是assysdba就提示ORA-01017:用户名密码出错。很显然这是一个典型的sysdba登录的问题。首先要他查看了sqlnet文件。SQLNET.AUTHENTICATION_SERVICES=(NONE)启动密码文件验证了,接着查看…

  • Android银弧刀之ProgressBar之最炫民族风「建议收藏」

    Android银弧刀之ProgressBar之最炫民族风「建议收藏」传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229银弧刀     陆无双抬起头来,只见四名乞丐,一字排在门外,或高或矮,一齐望着自己。她曾用银弧刀伤了一个乞丐,一见这四人来意不善,心中暗暗吃惊。。。杨过听了她声音,也是大吃一惊,只听另一个女人声音道:“那叫化子背上的,明明是师妹的银弧刀,就可惜没能起

  • 大气压力换算公式_气压单位换算表(压力单位换算公式大全)

    大气压力换算公式_气压单位换算表(压力单位换算公式大全)1bar=105Pa,一个标准大气压=1.01325*105Pa;1bar=0.98665标准大气压1巴(bar)=100,000帕(Pa)=10牛顿/平方厘米=0.1MPa是压强的单位,早先气象学中常用毫巴.咱们这教材,气压单位一会是hPa,一会是mb,也不说声是什么意思,网上又。mb=mbar毫巴(=百帕)mbar毫巴(=百帕)hPa百帕1百帕=1毫巴=3/4毫米水银柱.参考资料…

发表回复

您的电子邮箱地址不会被公开。

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