我目前正在与 SSE 打交道以进行代码优化。
这里是一小部分代码(不管这里做了什么):
__m128 r_x, r_y, r_width, r_height, width;
data[0] = (double*)computer->imageIntegralChannels[current0->r_channel].data;
data[1] = (double*)computer->imageIntegralChannels[current1->r_channel].data;
data[2] = (double*)computer->imageIntegralChannels[current2->r_channel].data;
data[3] = (double*)computer->imageIntegralChannels[current3->r_channel].data;
r_x = _mm_setr_ps(current0->r_x, current1->r_x, current2->r_x, current3->r_x);
r_y = _mm_setr_ps(current0->r_y, current1->r_y, current2->r_y, current3->r_y);
r_width = _mm_setr_ps(current0->r_width, current1->r_width, current2->r_width, current3->r_width);
r_height = _mm_setr_ps(current0->r_height, current1->r_height, current2->r_height, current3->r_height);
width = _mm_setr_ps(computer->imageIntegralChannels[current0->r_channel].cols, computer->imageIntegralChannels[current1->r_channel].cols, computer->imageIntegralChannels[current2->r_channel].cols, computer->imageIntegralChannels[current3->r_channel].cols);
__m128 w_x_p = _mm_setr_ps(window_x_pos, window_x_pos + padding , window_x_pos + padding + padding, window_x_pos + padding + padding + padding);
__m128 w_y_p = _mm_set_ps1(window_y_pos);
__m128 m1, m2, m3, m4, m5, m6, m7, m8, m9, m10;
// First data parameter
m1 = _mm_add_ps(r_x, w_x_p);
m2 = _mm_add_ps(r_y, w_y_p);
m3 = _mm_mul_ps(m2, width);
m4 = _mm_add_ps(m3, m1);
// Second data parameter
m5 = _mm_add_ps(m1, r_width);
m6 = _mm_add_ps(m2, r_height);
m7 = _mm_mul_ps(m6, width);
m8 = _mm_add_ps(m5, m7);
// Third data parameter
m9 = _mm_add_ps(m5, m3);
// Fourth data parameter
m10 = _mm_add_ps(m1, m7);
_mm_store_ps(data_p1, m4);
_mm_store_ps(data_p2, m8);
_mm_store_ps(data_p3, m9);
_mm_store_ps(data_p4, m10);
我知道 SSE 实现了 16 个寄存器,每个寄存器 128 位(仅限 x64 架构)。在我的代码中,我同时使用了 16 个以上的寄存器(实际上是 17 个)。
同时使用超过 16 个寄存器是否在浪费时间?内存中发生了什么?我是否应该始终尝试管理少于 16 个 __m128 寄存器的 SSE 代码?
提前致谢! 保罗
最佳答案
不会有问题的。虽然 __m128
数据类型映射到 SSE 寄存器,但一旦您在编译器中启用优化,它应该能够以最小的溢出执行智能寄存器分配。
如果你担心,你可以编译成汇编并自己检查正在使用哪些寄存器,但乍一看我想不会有任何寄存器。
关于c++ - 上交所注册管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29773199/