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


  • 相关阅读:
    【杭电】[2071]无限的路
    【杭电】[1161]Eddy's mistakes
    【杭电】[1859]最小长方形
    【杭电】[2083]简易版之最短距离
    【CodeForces】[614A]Link/Cut Tree
    【杭电】[2076]夹角有多大
    【杭电】[2055]An easy problem
    【杭电】[2036]改革春风吹满地
    【杭电 】[2040]亲和数
    【杭电】[2044]一只小蜜蜂...
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564242.html
Copyright © 2011-2022 走看看