加速计算技术---基于SSE/AVX指令集

基于指令集的加速是利用了SIMD(Single Instruction Stream, Multiple Data Stream单指令流多数据流操作)的思路,它可以一次指令操作多组数据。

#include <pmmintrin.h>//SSE
#include <immintrin.h>//AVX

	

RecordTimer tm; tm.start(); float sum_avg[10000000]; for (int i = 0; i < 10000000; i++) { sum_avg[i] = i * 1.0 * i; } tm.end(); double ticks = tm.getTick(); std::cout <<"无并行计算:" << ticks << std::endl;//耗时 45.6397 tm.start(); float sum_avg2[10000000]; __m128 m1; __m128* dst = (__m128*)sum_avg2; for (int i = 0; i < 10000000; i+=4) { m1 = _mm_set_ps(i+3, i + 2, i + 1, i); *dst = _mm_mul_ps(m1, m1); dst++; } tm.end(); ticks = tm.getTick(); std::cout << "并行计算1:" << ticks << std::endl;//耗时22.8161 tm.start(); float sum_avg3[10000000]; __m256 m2; __m256* dst2 = (__m256*)sum_avg3; for (int i = 0; i < 10000000; i += 8) { m2 = _mm256_set_ps(i + 7, i + 6, i + 5, i + 4, i + 3, i + 2, i + 1, i); *dst2 = _mm256_mul_ps(m2, m2); dst2++; } tm.end(); ticks = tm.getTick(); std::cout << "并行计算2:" << ticks << std::endl; //耗时10.7683

  上面是操作同一组数据测试得到的计算时间,可以发现,AVX > SSE > 未优化的。

原文地址:https://www.cnblogs.com/merlinzjl/p/14615450.html