मैं एसएसई प्रकारों के बीच रूपांतरण लागू कर रहा हूं और मैंने पाया कि पूर्व-एसएसई 4.1 लक्ष्यों के लिए int8-> int64 चौड़ा रूपांतरण लागू करना बोझिल है।एसएसई के साथ 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, वहाँ इस बिंदु पर दो विकल्प हैं:
_mm_srai_epi64
, या- को लागू करने एक अलग तरीके से
convert_i8_i64
लागू करना।
मुझे यकीन नहीं है कि कौन सा सबसे कुशल समाधान होगा। कोई उपाय?