Я реализую преобразования между типами SSE, и я обнаружил, что внедрение расширения int8-> int64 для целей до SSE4.1 является громоздким.Как эффективно выполнить преобразование int8/int64 с помощью SSE?
Непосредственное осуществление будет:
inline __m128i convert_i8_i64(__m128i a)
{
#ifdef __SSE4_1__
return _mm_cvtepi8_epi64(a);
#else
a = _mm_unpacklo_epi8(a, a);
a = _mm_unpacklo_epi16(a, a);
a = _mm_unpacklo_epi32(a, a);
return _mm_srai_epi64(a, 56); // missing instrinsic!
#endif
}
Но поскольку _mm_srai_epi64
не существует до тех пор, AVX-512, не два варианта на данный момент:
- реализующие
_mm_srai_epi64
или - реализуя
convert_i8_i64
по-другому.
Я не уверен, какой из них был бы наиболее эффективным решением. Есть идеи?