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支持)

相关推荐
emfuture8 分钟前
龙芯2K300 PLC 在拉丝机收线系统改造中的应用:硬件选型、张力控制与国产化替代实践
java·开发语言·智能制造·plc·国产化替代
Source.Liu20 分钟前
【A11】服务器数据库结构笔记
服务器·数据库·笔记
geovindu22 分钟前
rust: Mediator Pattern
开发语言·后端·设计模式·rust·中介者模式·行为模式
传奇开心果编程32 分钟前
【Rust入门练中学】第8课:错误处理
开发语言·rust·错误处理·编程语言理论·通用编程语言
郑同学的笔记1 小时前
【c++随笔30】C++ 注册回调函数
开发语言·c++
1314lay_10071 小时前
ABAP 读取服务器的文件 OPEN DATASET,READ DATASET f_filepath INTO l_file.
经验分享·笔记
七夜zippoe1 小时前
启元 Q1 腿部运动学逆解:Python 算站立下蹲关节角
开发语言·python·ai·机器人·腿部运动学
熊猫钓鱼>_>1 小时前
精准碰一碰近场分享与拖拽投送实战:把文件“碰“进另一台设备【鸿蒙心迹】
开发语言·华为·harmonyos·鸿蒙·openharmony
MichaelJohn1 小时前
我用 Obsidian + Claude Code + GitHub 搭了个真正「会生长」的第二大脑
笔记
lengxuenong1 小时前
树状数组 · 信息学学习手册2-离散化与逆序对
c++·学习·算法