我试图将一些来自FANN Lib(用C语言编写的神经网络)的代码移植到SSE2中。 但是SSE2的性能比普通代码差。随着我的SSE2实施运行,一次运行需要5.50分钟而没有5.20分钟。sse2浮点乘法
SSE2如何比正常运行慢?难道是因为_mm_set_ps
?我使用Apple LLVM Compiler(XCode 4)编译代码(所有SSE扩展标志都打开,优化级别为-Os
)。没有SSE2
代码
neuron_sum +=
fann_mult(weights[i], neurons[i].value) +
fann_mult(weights[i + 1], neurons[i + 1].value) +
fann_mult(weights[i + 2], neurons[i + 2].value) +
fann_mult(weights[i + 3], neurons[i + 3].value);
SSE2代码
__m128 a_line=_mm_loadu_ps(&weights[i]);
__m128 b_line=_mm_set_ps(neurons[i+3].value,neurons[i+2].value,neurons[i+1].value,neurons[i].value);
__m128 c_line=_mm_mul_ps(a_line, b_line);
neuron_sum+=c_line[0]+c_line[1]+c_line[2]+c_line[3];
什么是'fann_mult'? – 2012-03-26 20:14:28
如果你看一下装配体,它应该很清楚为什么它会变慢。您可能会惊讶于_mm_set_ps编译的内容。 (所以是的,你是在怀疑'_mm_set_ps'。) – Mysticial 2012-03-26 20:16:37
sry。这只是一个定义。 #define fann_mult(x,y)(x * y) – 2012-03-26 20:16:52