zoukankan      html  css  js  c++  java
  • AVX2整数向量运算

    在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
    ", *pi);
        printf("1: %d
    ", *(pi+1));
        printf("2: %d
    ", *(pi+2));
        printf("3: %d
    ", *(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
    ", result[0]);
        printf("1: %d
    ", result[1]);
        printf("2: %d
    ", result[2]);
        printf("3: %d
    ", result[3]);
    
        return 0;
    }

    运算结果:

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


  • 相关阅读:
    1058 A+B in Hogwarts (20)
    1046 Shortest Distance (20)
    1061 Dating (20)
    1041 Be Unique (20)
    1015 Reversible Primes (20)(20 分)
    pat 1027 Colors in Mars (20)
    PAT 1008 Elevator (20)
    操作系统 死锁
    Ajax的get方式传值 避免& 与= 号
    让IE浏览器支持CSS3表现
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564241.html
Copyright © 2011-2022 走看看