【发布时间】:2012-03-26 20:12:06
【问题描述】:
我尝试将一些代码从 FANN Lib(用 C 编写的神经网络)移植到 SSE2。 但是 SSE2 的性能比普通代码差。使用我的 SSE2 实现运行一次运行需要 5.50 分钟而不需要 5.20 分钟。
SSE2 怎么会比正常运行慢?难道是因为_mm_set_ps?我使用 Apple LLVM 编译器 (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];
【问题讨论】:
-
如果您查看程序集,应该很清楚为什么它变慢了。您可能会对
_mm_set_ps编译成的内容感到惊讶。 (所以是的,你怀疑_mm_set_ps是对的。) -
对不起。这只是一个定义。 #define fann_mult(x,y) (x*y)
标签: c performance sse2 fann