Ответ 1
Если вам действительно нужно сделать это с плавающей точкой, а не целой/фиксированной точкой, тогда вам нужно будет загрузить ваши 8-битные данные, распаковать до 32 бит (требуется две операции: от 8 до 16 бит, затем от 16 бит до 32 бит), а затем преобразовать в float. Однако это ужасно неэффективно, и вы должны смотреть на это, например. 16-битные операции с фиксированной точкой.
Обратите внимание, что для каждой загрузки 16 пикселей у вас будет 4 блока с 4 поплавками x, то есть ваши векторы размером 16 x 8 бит станут 4 x векторами из 4 x поплавков.
Сводка необходимых свойств:
_mm_load_si128(...) // load 16 x 8 bit values
_mm_unpacklo_epi8(...) // unpack 8 bit -> 16 bit
_mm_unpackhi_epi8(...)
_mm_unpacklo_epi16(...) // unpack 16 bit -> 32 bit
_mm_unpackhi_epi16(...)
_mm_cvtepi32_ps(...) // convert 32 bit int -> float