FANN Lib(Cで書かれたニューロンネットワーク)からSSE2にコードを移植しようとしました。しかし、SSE2のパフォーマンスは通常のコードよりも悪くなりました。私のSSE2実装の実行では、1回の実行に5.20分なしで5.50分かかります。
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];