У меня есть большая функция обработки пикселей, которую я в настоящее время пытаюсь оптимизировать с помощью встроенных функций.
Будучи новичком SSE, я не уверен, как решить часть кода, которая включает в себя таблицы поиска.
В принципе, я пытаюсь прорисовать следующий код ванильного С++:
//outside loop
const float LUT_RATIO = 1000.0F;
//in loop
float v = ... //input value
v = myLookupTable[static_cast<int>(v * LUT_RATIO)];
Что я пытаюсь:
//outside loop
const __m128 LUT_RATIO = _mm_set1_ps(1000.0F);
//in loop
__m128 v = _mm_set_ps(v1, v2, v3, v4); //input values
__m128i vI = _mm_cvtps_epi32(_mm_mul_ps(v, LUT_RATIO)); //multiply and convert to integers
v = ??? // how to get vI indices of myLookupTable?
edit: ildjarn делает точку, требующую уточнения с моей стороны. Я не пытаюсь добиться ускорения для кода таблицы поиска, я просто пытаюсь избежать необходимости сохранять регистры обратно в float специально для выполнения поиска, так как эта часть зажата между двумя другими частями, которые теоретически могут выиграть от SSE.