私はSSEタイプ間で変換を実装していますが、SSE4.1より前のターゲットで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
}
しかし_mm_srai_epi64
はAVX-512まで存在していないので、この時点で2つのオプションがあります。_mm_srai_epi64
、または
- は、別の方法で
convert_i8_i64
を実装してください。
どのソリューションが最も効率的なソリューションかわかりません。何か案が?