你有一个三(或四)个浮点数的向量.总结它们的最快方法是什么?
SSE(movaps,shuffle,add,movd)总是比x87快吗?SSE4.2中的水平加法说明值得吗?移动到FPU的成本是多少,然后是faddp,faddp?什么是最快的特定指令序列?
"尝试安排事情,这样你可以一次总结四个向量"将不被接受作为答案.:-)
memset比for循环更有效.所以,如果我有
char x[500];
memset(x,0,sizeof(x));
Run Code Online (Sandbox Code Playgroud)
要么
char x[500];
for(int i = 0 ; i < 500 ; i ++) x[i] = 0;
Run Code Online (Sandbox Code Playgroud)
哪一个更有效率,为什么?是否在硬件中有任何特殊指令来进行块级初始化.
我有一个名为reorder.cc的源文件,如下所示:
void reorder(float *output, float *input) {
output[56] = input[0];
output[57] = input[1];
output[58] = input[2];
output[59] = input[3];
output[60] = input[4];
...
output[75] = input[19];
output[76] = input[20];
output[77] = input[21];
output[78] = input[22];
output[79] = input[23];
output[80] = input[24];
...
output[98] = 0;
output[99] = 0;
output[100] = 0;
output[101] = 0;
output[102] = 0;
output[103] = 0;
output[104] = 0;
output[105] = input[1];
output[106] = input[2];
output[107] = input[3];
output[108] = input[4];
output[109] = input[5];
output[110] = …
Run Code Online (Sandbox Code Playgroud) assembly ×2
c++ ×2
optimization ×2
c ×1
memcpy ×1
memory ×1
memset ×1
performance ×1
sse ×1
x86 ×1