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

相关推荐
小七在进步24 分钟前
string的使用(1)
c++·visual studio
SomeOtherTime27 分钟前
Rust所有权(AI回答)
开发语言·后端·rust
Easyhood42 分钟前
Android 开发入门实践(十四):Compose 副作用入门与四个常用 API
android·开发语言·kotlin·android jetpack·compose
白杨尚青1 小时前
C++进阶篇(六):map 和 set 的模拟实现——用红黑树封装 mymap/myset(迭代器 + operator[])
开发语言·c++·迭代器·stl·set·map·红黑树
kloc4 小时前
聊天室项目入口网关子服务的实现
linux·c++
饮水桶_T5 小时前
JAVA IO流笔记
开发语言·数据结构·算法
柳鲲鹏5 小时前
内斗学概论:43、平级内斗
笔记
csdn_aspnet7 小时前
C++ 3个有序点的方向(Orientation of 3 ordered points)
c++·算法
Felven7 小时前
C. Brr Brrr Patapim
c语言·开发语言
星恒随风8 小时前
MySQL 从零入门(四):表的增删改查与基础查询详解
linux·服务器·数据库·笔记·mysql