我不确定我调用_mm_load_ps时会发生什么?我是说我知道将4个浮点数组加载到__m128中,可以用来执行SIMD加速算术然后将它们存储回去,但这不是__m128数据类型仍然在堆栈上吗?我的意思是显然没有足够的寄存器来装入任意数量的向量。因此,每次使用一些SIMD指令进行计算时,都会来回移动这128位数据?比_mm_load_ps的意义何在?
也许我全都错了?
具有SSE,AVX或AVX-512的Intel处理器可以具有8到32个SIMD寄存器(请参阅下文)。寄存器的数量还取决于它是32位代码还是64位代码。因此,当您调用_mm_load_ps
这些值时,会将它们加载到SIMD寄存器中。如果所有寄存器都被使用,则必须将某些寄存器压入堆栈。
带SSE的处理器
8 128-bit registers labeled XMM0 - XMM7 //32-bit operating mode
16 128-bit registers labeled XMM0 - XMM15 //64-bit operating mode
带有AVX / AVX2的处理器
8 256-bit registers labeled YMM0 - YMM7 //32-bit operating mode
16 256 bit registers labeled YMM0 - YMM15 //64-bt operating mode
配备AVX-512的处理器(2015/2016)
//32-bit operating mode?
32 512-bit registers labeled ZMM0 - ZMM31 //64-bit operating mode
Wikipedia对此AVX-512进行了很好的总结。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句