SSE 유형간에 변환을 구현하고 있으며 SSE4 이전 대상에 대해 int8-> int64 확장 변환을 구현하는 것이 번거롭다는 것을 발견했습니다.SSE로 int8/int64 변환을 효율적으로 수행하는 방법은 무엇입니까?
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
}
그러나 AVX-512은,이 시점에서 옵션이 될 때까지 _mm_srai_epi64
부터 존재하지 않습니다 :
똑 바른 구현 될 _mm_srai_epi64
, 또는
- 가
convert_i8_i64
을 다른 방식으로 구현합니다.
어느 것이 가장 효율적인 솔루션인지 확실하지 않습니다. 어떤 생각?