SSE AVX 发展简单介绍

SIMD全称是"Single Instruction, Multiple Data". 

SSE1是Pentium III引入的,它操作于16 bytes寄存器。在C和C++中,这些寄存器以__m128的形式作为数据类型(128 bits=16 bytes)。每个寄存器包含4个单精度浮点数float,指令集一共有8个这样的寄存器,他们被命名为xmm0xmm7

SSE2是2000年Pentium 4引入的,它增加了支持双精度浮点数和整型数的SIMD指令。SSE2还是操作同样的8个寄存器,但是为了类型安全,双精度浮点数和整型数以__m128d__m128i的形式作为数据类型。

2003年,AMD引入了AMD64架构,增加了8个向量寄存器,新增的8个寄存器被命名为xmm8xmm15

2011年,Intel在Sandy Bridge处理器中引入了AVX。AVX将寄存器从16 bytes扩展到32 bytes,所以寄存器就可以包含8个单精度浮点数float或者4个双精度浮点数double。寄存器的个数并没有变化,还是16个。在汇编语言中,寄存器被新命名为ymm0ymm15,它们的低128位仍然可以以xmm0xmm15的名字访问。AVX同时支持32位和64位浮点数,但是并不完全支持整型。

2013年,Intel引入了AVX2。AVX2增加了对整型数据运算的支持,但并没有增加新寄存器。AVX和AVX2现在已经广泛支持了。具体硬件支持历史可以看下图:

 

记住,在编译64位程序时,一共有16个寄存器可供使用,但编译32位程序时,只有8个。编译器总是自动的将变量赋值到寄存器里,但是如果你定义了太多的局部变量,或者代码逻辑牵扯很多变量依赖关系导致编译器无法重复使用寄存器,那么编译器会把变量移到RAM上。而这样在某些情况下,会给程序性能带来负面影响。

_mm256_load_ps_mm256_loadu_ps的区别:

不带u表示指令要求它所操作的数据内存地址必须是16或32 bytes对齐的(align);

带u表示指令支持操作非内存对齐的地址,但是如果数据内存地址是对齐的,那么操作也会更快。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SSE (Streaming SIMD Extensions) 和 AVX (Advanced Vector Extensions) 是英特尔处理器的指令集扩展,用于实现单指令多数据 (SIMD) 并行处理。在排序算法中,可以利用 SSEAVX 提供的向量指令来加速排序过程。 在使用 SSEAVX 进行排序时,可以将待排序的数据划分为多个小块,然后对每个小块进行并行排序。排序算法的基本思想是将数据加载到 SIMD 寄存器中,并使用向量指令进行比较和交换操作。通过并行处理多个数据,可以极大地提高排序的效率。 对于较小的数据集,可以使用插入排序、冒泡排序或选择排序等简单的排序算法,并结合 SSEAVX 指令进行优化。这样可以减少比较和交换的次数,并利用向量指令同时对多个数据进行操作。 对于较大的数据集,可以使用更复杂的排序算法如归并排序、快速排序等,并借助 SSEAVX 进行优化。例如,在归并排序中,可以将待排序的数据分割为多个子序列,并使用 SSEAVX 进行并行的归并操作。 此外,在排序算法中还可以利用 SSEAVX 提供的指令进行数据的加载、存储和移动。这些指令可以高效地对数据进行复制、填充、移位等操作,从而进一步提高排序算法的性能。 总之,SSEAVX 是用于实现 SIMD 并行处理的指令集扩展,可以在排序算法中利用 SIMD 操作的优势,通过并行处理多个数据,提高排序算法的效率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值