C++笔记之SIMD与SSE指令集

C++笔记之SIMD与SSE指令集

code review!

文章目录

  • C++笔记之SIMD与SSE指令集
    • [1. SIMD 与 SSE](#1. SIMD 与 SSE)
      • [1.1 作用](#1.1 作用)
      • [1.2 关系](#1.2 关系)
    • [2. SSE 使用demo(C语言,使用Intrinsics)](#2. SSE 使用demo(C语言,使用Intrinsics))
      • [2.1 关键点](#2.1 关键点)

1. SIMD 与 SSE

SIMD:Single Instruction Multiple Data(单指令多数据流)

SSE:Streaming SIMD Extensions(流式SIMD扩展)

1.1 作用

  • SIMD:一种并行计算技术概念,用一条指令同时处理多个数据,提升计算效率
  • SSE:Intel推出的一套具体指令集,是SIMD概念的一种硬件实现,主要用于加速浮点运算(图形、音视频处理等)

1.2 关系

SIMD是概念/技术范畴,SSE是其具体实现之一

  • SIMD ⊃ SSE(包含关系)
  • 其他SIMD实现还包括:MMX、AVX、AVX2、AVX-512(x86平台,均为SSE的前身或后续演进)、NEON(ARM平台)等
  • 可理解为:SIMD是"电动车",SSE是"特斯拉Model 3"------一个是类别,一个是具体产品

2. SSE 使用demo(C语言,使用Intrinsics)

c 复制代码
#include <xmmintrin.h>  // SSE头文件
#include <stdio.h>

int main() {
    // 两个数组,各4个float(128位 = 4×32位)
    float a[4] = {1.0f, 2.0f, 3.0f, 4.0f};
    float b[4] = {10.0f, 20.0f, 30.0f, 40.0f};
    float result[4];

    // 加载数据到SSE寄存器(128位,一次装4个float)
    __m128 va = _mm_loadu_ps(a);
    __m128 vb = _mm_loadu_ps(b);

    // 一条指令完成4个float的加法!
    __m128 vresult = _mm_add_ps(va, vb);

    // 结果存回数组
    _mm_storeu_ps(result, vresult);

    // 输出结果
    for (int i = 0; i < 4; i++) {
        printf("%.1f + %.1f = %.1f\n", a[i], b[i], result[i]);
    }

    return 0;
}

输出:

复制代码
1.0 + 10.0 = 11.0
2.0 + 20.0 = 22.0
3.0 + 30.0 = 33.0
4.0 + 40.0 = 44.0

2.1 关键点

  • __m128:SSE的128位数据类型,可装4个float
  • _mm_loadu_ps:加载数据到寄存器
  • _mm_add_ps:一条指令同时完成4次加法(这就是SIMD的核心)
  • _mm_storeu_ps:取出结果

编译 :gcc -msse demo.c -o demo(需开启SSE支持)

相关推荐
汉克老师1 小时前
GESP2026年9月认证C++一级( 第二部分判断题(1~10题)精讲
c++·gesp·小学生·学c++编程
福兮说1 小时前
URL 编码的七个坑:c++ 传到后端变空格、%25 套娃、截断 emoji 直接报错
开发语言·前端·javascript·node.js·url
陈工大模型1 小时前
2026年9月AI可见度监测工具横评:从采样一致性与中立性出发的技术选型笔记
大数据·人工智能·笔记
小的时候可菜了2 小时前
JS 异步的本质:从单线程到 thenable(一条进化链)
开发语言·前端·javascript
高山有多高2 小时前
【Linux笔记】UpdSocket
linux·运维·笔记
可乐鸡翅yeah_2 小时前
hls.js 配置 loadStartPosition,点播起始播放位置踩坑
开发语言·javascript·网络协议·ecmascript·m3u8在线
一只旭宝2 小时前
C++ 后端开发面试题整理
java·c++·面试
RickyWasYoung2 小时前
二阶魔方底层逻辑分析
笔记
xlq223222 小时前
全面复习1
c++