SSE指令集加速运算

本文通过代码示例展示了SSE指令集如何显著加速浮点运算,对比了使用SSE与不使用SSE的情况,平均性能提升约两倍。同时,还提及了动态申请内存并进行内存对齐的考虑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先上代码:

/*g++ -msse2 main.cpp -lrt*/

#include <iostream>
#include <xmmintrin.h>//SSE指令集需包含词头文件
#include <time.h>
using namespace std;

#define N 120
int main() {

    struct timespec tpstart,tpend;
    clock_gettime(CLOCK_MONOTONIC, &tpstart);
    /////////////////do something
        {

        __m128 *p1,*p2,*p3;//__m128是一个长128位的数据类型,存放在寄存器中
        __attribute(aligned(128)) float f1[N],f2[N],f3[N];//新建一些浮点型数组
        /*__attribute(aligned(128))强制使编译器在给f1等分配内存空间时对齐在128位(8字节)上*/
        //cout<<f1<<"\t"<<(int)f1%128<<endl;
        /*运行此条语句可以看出地址f1总是128的倍数,在内存上即是总存在一行上,使得总线取值时能够一次取完*/
        for(int i=0; i<N; i++) {
            f1[i]=i+0.12;
            f2[i]=i+0.16;
            }
        for(int time=0; time<10000; time++) {
            p1=(__m128*)f1;
            p2=(__m128*)f2;
            p3=(__m128*)f3;
            fo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值