Я попытался перенести код из 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
.) - person Mysticial   schedule 27.03.2012