एक पूर्णांक 255 से विभाजन के सन्निकटन है:
inline __m128i DivideI16By255(__m128i value)
{
return _mm_srli_epi16(_mm_add_epi16(
_mm_add_epi16(value, _mm_set1_epi16(1)), _mm_srli_epi16(value, 8)), 8);
}
: यह कैसा दिखाई देगा
inline int DivideBy255(int value)
{
return (value + 1 + (value >> 8)) >> 8;
}
तो SSE2 का उपयोग करने के साथ
AVX2 के लिए:
inline __m256i DivideI16By255(__m256i value)
{
return _mm256_srli_epi16(_mm256_add_epi16(
_mm256_add_epi16(value, _mm256_set1_epi16(1)), _mm256_srli_epi16(value, 8)), 8);
}
Altivec के लिए (पावर):
typedef __vector int16_t v128_s16;
const v128_s16 K16_0001 = {1, 1, 1, 1, 1, 1, 1, 1};
const v128_s16 K16_0008 = {8, 8, 8, 8, 8, 8, 8, 8};
inline v128_s16 DivideBy255(v128_s16 value)
{
return vec_sr(vec_add(vec_add(value, K16_0001), vec_sr(value, K16_0008)), K16_0008);
}
नियोन के लिए (एआरएम):
inline int16x8_t DivideI16By255(int16x8_t value)
{
return vshrq_n_s16(vaddq_s16(
vaddq_s16(value, vdupq_n_s16(1)), vshrq_n_s16(value, 8)), 8);
}
क्या [यह] (http://stackoverflow.com/q/16822757/3959454) मदद करता है? –
आमतौर पर आप 256 (विभाजन के बजाए गोलाकार के साथ) विभाजित करेंगे - क्या इसका कोई कारण है कि इसे 255 होना चाहिए और 256 क्यों नहीं? –
शायद [यह] (http://stackoverflow.com/questions/31575833/fastest-method-of-vectorized-integer-division-by-non-constant-divisor) प्रश्न भी आपके लिए दिलचस्प है। जब आपको भविष्य में गैर-निरंतर पूर्णांक विभाजन से निपटना होगा, तो फ्लोट में रूपांतरण भी एक तेज़ विकल्प है। – Youka