SSE AVX 发展简单介绍
创始人
2024-03-01 03:04:06
0

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表示指令支持操作非内存对齐的地址,但是如果数据内存地址是对齐的,那么操作也会更快。

相关内容

热门资讯

山东诸城偷排危废致4死案一名主... 山东潍坊诸城市舜王街道一厂房深夜偷排危废,产生硫化氢等大量有毒气体,导致4人死亡、3人重伤以及32人...
男子称在邯郸一超市购买的猪肉检... 近日,河北省邯郸市丛台区一消费者王先生反映,其在阳光超市龙湖店购买的猪肉,食用时感觉有异样。随后,他...
市场监管总局:今年首次以法律形... 市场监管总局副局长柳军23日在专题发布会上介绍,2025年,全国食品安全形势总体平稳。市场监管总局坚...
关于健全对刑事案件犯罪嫌疑人、... “两高一部”发布《关于健全对刑事案件犯罪嫌疑人、被告人身份审查工作机制的意见》 为准确、及时查明案件...
完善幼儿园收费政策 三部门发通... 中新网12月23日电 据国家发展和改革委员会网站消息,23日,国家发展改革委、教育部、财政部发布关于...
男子4年强奸继女六七十次,被判... 日前,河北省石家庄市栾城区人民法院在中国裁判文书网公开了一份刑事判决书,男子刘冬(化名)在4年间竟六...
合肥一烤肉店回应宠物狗上桌吃饭... 12月22日,安徽合肥一家烤肉店有宠物狗上桌吃饭,餐桌上的餐盘里放有食物,宠物狗在不断啃食生肉。 2...
中国人民银行关于实施一次性信用... 中国人民银行上海总部,各省、自治区、直辖市及计划单列市分行,征信中心;国家开发银行,各政策性银行、国...
徐杰20分萨林杰32+11 广... 【搜狐体育战报】北京时间12月23日CBA常规赛第5轮,客场作战的广东东阳光以93-85击败广州朗肽...
完善幼儿园收费政策,三部门发通... 今天(12月23日),国家发展改革委、教育部、财政部发布关于完善幼儿园收费政策的通知,全文如下: 各...