你有一个三(或四)个浮点数的向量.总结它们的最快方法是什么?
SSE(movaps,shuffle,add,movd)总是比x87快吗?SSE4.2中的水平加法说明值得吗?移动到FPU的成本是多少,然后是faddp,faddp?什么是最快的特定指令序列?
"尝试安排事情,这样你可以一次总结四个向量"将不被接受作为答案.:-)
有人可以解释英特尔内部指南中给出的延迟和吞吐量值吗?
我是否正确理解延迟是指令运行所需的时间单位,吞吐量是每个时间单位可以启动的指令数量?
如果我的定义是正确的,为什么某些指令的延迟在较新的CPU版本上更高(例如mulps)?
我在SSE2和AVX中实现了4x4矩阵逆.两者都比普通实现更快.但是如果启用AVX(-mavx),则SSE2实现比手动AVX实现运行得更快.似乎编译器使我的SSE2实现与AVX更友好:(
在我的AVX实现中,乘法次数减少,添加次数减少......所以我希望AVX可以比SSE更快.也许有些像说明资讯_mm256_permute2f128_ps,_mm256_permutevar_ps/_mm256_permute_ps使得AVX慢?我不是要将SSE/XMM寄存器加载到AVX/YMM寄存器.
如何使我的AVX实现比SSE更快?
我的CPU:Intel(R)Core(TM)i7-3615QM CPU @ 2.30GHz(Ivy Bridge)
Plain with -O3 : 0.045853 secs
SSE2 with -O3 : 0.026021 secs
SSE2 with -O3 -mavx: 0.024336 secs
AVX1 with -O3 -mavx: 0.031798 secs
Updated (See bottom of question) all have -O3 -mavx flags:
AVX1 (reduced div) : 0.027666 secs
AVX1 (using rcp_ps) : 0.023205 secs
SSE2 (using rcp_ps) : 0.021969 secs
Run Code Online (Sandbox Code Playgroud)
初始矩阵:
Matrix (float4x4):
|0.0714 -0.6589 0.7488 2.0000|
|0.9446 0.2857 0.1613 4.0000|
|-0.3202 0.6958 0.6429 6.0000|
|0.0000 …Run Code Online (Sandbox Code Playgroud) sse ×3
intel ×2
performance ×2
x86 ×2
assembly ×1
avx ×1
intrinsics ×1
matrix ×1
optimization ×1