diff --git a/src/layer/x86/convolution_3x3_winograd_int8.h b/src/layer/x86/convolution_3x3_winograd_int8.h index acdb7cf83db..e742cfa80e7 100644 --- a/src/layer/x86/convolution_3x3_winograd_int8.h +++ b/src/layer/x86/convolution_3x3_winograd_int8.h @@ -1620,14 +1620,14 @@ static void gemm_transB_packed_tile_int8(const Mat& AT_tile, const Mat& BT_tile, __m256i _pB3 = _mm256_shuffle_epi32(_pB0, _MM_SHUFFLE(2, 1, 0, 3)); #if __AVXVNNI__ - _sum0 = _mm256_dpwssd_epi32(_sum0, _pA0, _pB0); - _sum1 = _mm256_dpwssd_epi32(_sum1, _pA0, _pB1); - _sum2 = _mm256_dpwssd_epi32(_sum2, _pA0, _pB2); - _sum3 = _mm256_dpwssd_epi32(_sum3, _pA0, _pB3); - _sum4 = _mm256_dpwssd_epi32(_sum4, _pA1, _pB0); - _sum5 = _mm256_dpwssd_epi32(_sum5, _pA1, _pB1); - _sum6 = _mm256_dpwssd_epi32(_sum6, _pA1, _pB2); - _sum7 = _mm256_dpwssd_epi32(_sum7, _pA1, _pB3); + _sum0 = _mm256_comp_dpwssd_epi32(_sum0, _pA0, _pB0); + _sum1 = _mm256_comp_dpwssd_epi32(_sum1, _pA0, _pB1); + _sum2 = _mm256_comp_dpwssd_epi32(_sum2, _pA0, _pB2); + _sum3 = _mm256_comp_dpwssd_epi32(_sum3, _pA0, _pB3); + _sum4 = _mm256_comp_dpwssd_epi32(_sum4, _pA1, _pB0); + _sum5 = _mm256_comp_dpwssd_epi32(_sum5, _pA1, _pB1); + _sum6 = _mm256_comp_dpwssd_epi32(_sum6, _pA1, _pB2); + _sum7 = _mm256_comp_dpwssd_epi32(_sum7, _pA1, _pB3); #else _sum0 = _mm256_add_epi32(_sum0, _mm256_madd_epi16(_pA0, _pB0)); _sum1 = _mm256_add_epi32(_sum1, _mm256_madd_epi16(_pA0, _pB1)); @@ -1855,10 +1855,10 @@ static void gemm_transB_packed_tile_int8(const Mat& AT_tile, const Mat& BT_tile, __m256i _pB1 = _mm256_shuffle_epi32(_pB0, _MM_SHUFFLE(0, 3, 2, 1)); #if __AVXVNNI__ || __AVX512VNNI__ - _sum0 = _mm256_dpwssd_epi32(_sum0, _pA0, _pB0); - _sum1 = _mm256_dpwssd_epi32(_sum1, _pA0, _pB1); - _sum2 = _mm256_dpwssd_epi32(_sum2, _pA1, _pB0); - _sum3 = _mm256_dpwssd_epi32(_sum3, _pA1, _pB1); + _sum0 = _mm256_comp_dpwssd_epi32(_sum0, _pA0, _pB0); + _sum1 = _mm256_comp_dpwssd_epi32(_sum1, _pA0, _pB1); + _sum2 = _mm256_comp_dpwssd_epi32(_sum2, _pA1, _pB0); + _sum3 = _mm256_comp_dpwssd_epi32(_sum3, _pA1, _pB1); #else _sum0 = _mm256_add_epi32(_sum0, _mm256_madd_epi16(_pA0, _pB0)); _sum1 = _mm256_add_epi32(_sum1, _mm256_madd_epi16(_pA0, _pB1)); @@ -1949,8 +1949,8 @@ static void gemm_transB_packed_tile_int8(const Mat& AT_tile, const Mat& BT_tile, __m256i _pB1 = _mm256_shuffle_epi32(_pB0, _MM_SHUFFLE(0, 1, 0, 1)); #if __AVXVNNI__ || __AVX512VNNI__ - _sum0 = _mm256_dpwssd_epi32(_sum0, _pA, _pB0); - _sum1 = _mm256_dpwssd_epi32(_sum1, _pA, _pB1); + _sum0 = _mm256_comp_dpwssd_epi32(_sum0, _pA, _pB0); + _sum1 = _mm256_comp_dpwssd_epi32(_sum1, _pA, _pB1); #else _sum0 = _mm256_add_epi32(_sum0, _mm256_madd_epi16(_pA, _pB0)); _sum1 = _mm256_add_epi32(_sum1, _mm256_madd_epi16(_pA, _pB1)); @@ -2232,10 +2232,10 @@ static void gemm_transB_packed_tile_int8(const Mat& AT_tile, const Mat& BT_tile, __m256i _pB1 = _mm256_shuffle_epi32(_pB0, _MM_SHUFFLE(0, 3, 2, 1)); #if __AVXVNNI__ || __AVX512VNNI__ - _sum0 = _mm256_dpwssd_epi32(_sum0, _pA0, _pB0); - _sum1 = _mm256_dpwssd_epi32(_sum1, _pA0, _pB1); - _sum2 = _mm256_dpwssd_epi32(_sum2, _pA1, _pB0); - _sum3 = _mm256_dpwssd_epi32(_sum3, _pA1, _pB1); + _sum0 = _mm256_comp_dpwssd_epi32(_sum0, _pA0, _pB0); + _sum1 = _mm256_comp_dpwssd_epi32(_sum1, _pA0, _pB1); + _sum2 = _mm256_comp_dpwssd_epi32(_sum2, _pA1, _pB0); + _sum3 = _mm256_comp_dpwssd_epi32(_sum3, _pA1, _pB1); #else _sum0 = _mm256_add_epi32(_sum0, _mm256_madd_epi16(_pA0, _pB0)); _sum1 = _mm256_add_epi32(_sum1, _mm256_madd_epi16(_pA0, _pB1)); diff --git a/src/layer/x86/convolution_im2col_gemm_int8.h b/src/layer/x86/convolution_im2col_gemm_int8.h index 6c06a7edce6..bda8b96a172 100644 --- a/src/layer/x86/convolution_im2col_gemm_int8.h +++ b/src/layer/x86/convolution_im2col_gemm_int8.h @@ -2828,14 +2828,14 @@ static void convolution_gemm_transB_packed_tile_int8(const Mat& AT_tile, const M __m256i _pB3 = _mm256_shuffle_epi32(_pB0, _MM_SHUFFLE(2, 1, 0, 3)); #if __AVXVNNI__ - _sum0 = _mm256_dpwssd_epi32(_sum0, _pA0, _pB0); - _sum1 = _mm256_dpwssd_epi32(_sum1, _pA0, _pB1); - _sum2 = _mm256_dpwssd_epi32(_sum2, _pA0, _pB2); - _sum3 = _mm256_dpwssd_epi32(_sum3, _pA0, _pB3); - _sum4 = _mm256_dpwssd_epi32(_sum4, _pA1, _pB0); - _sum5 = _mm256_dpwssd_epi32(_sum5, _pA1, _pB1); - _sum6 = _mm256_dpwssd_epi32(_sum6, _pA1, _pB2); - _sum7 = _mm256_dpwssd_epi32(_sum7, _pA1, _pB3); + _sum0 = _mm256_comp_dpwssd_epi32(_sum0, _pA0, _pB0); + _sum1 = _mm256_comp_dpwssd_epi32(_sum1, _pA0, _pB1); + _sum2 = _mm256_comp_dpwssd_epi32(_sum2, _pA0, _pB2); + _sum3 = _mm256_comp_dpwssd_epi32(_sum3, _pA0, _pB3); + _sum4 = _mm256_comp_dpwssd_epi32(_sum4, _pA1, _pB0); + _sum5 = _mm256_comp_dpwssd_epi32(_sum5, _pA1, _pB1); + _sum6 = _mm256_comp_dpwssd_epi32(_sum6, _pA1, _pB2); + _sum7 = _mm256_comp_dpwssd_epi32(_sum7, _pA1, _pB3); #else _sum0 = _mm256_add_epi32(_sum0, _mm256_madd_epi16(_pA0, _pB0)); _sum1 = _mm256_add_epi32(_sum1, _mm256_madd_epi16(_pA0, _pB1)); @@ -3316,10 +3316,10 @@ static void convolution_gemm_transB_packed_tile_int8(const Mat& AT_tile, const M __m256i _pB1 = _mm256_shuffle_epi32(_pB0, _MM_SHUFFLE(0, 3, 2, 1)); #if __AVXVNNI__ || __AVX512VNNI__ - _sum0 = _mm256_dpwssd_epi32(_sum0, _pA0, _pB0); - _sum1 = _mm256_dpwssd_epi32(_sum1, _pA0, _pB1); - _sum2 = _mm256_dpwssd_epi32(_sum2, _pA1, _pB0); - _sum3 = _mm256_dpwssd_epi32(_sum3, _pA1, _pB1); + _sum0 = _mm256_comp_dpwssd_epi32(_sum0, _pA0, _pB0); + _sum1 = _mm256_comp_dpwssd_epi32(_sum1, _pA0, _pB1); + _sum2 = _mm256_comp_dpwssd_epi32(_sum2, _pA1, _pB0); + _sum3 = _mm256_comp_dpwssd_epi32(_sum3, _pA1, _pB1); #else _sum0 = _mm256_add_epi32(_sum0, _mm256_madd_epi16(_pA0, _pB0)); _sum1 = _mm256_add_epi32(_sum1, _mm256_madd_epi16(_pA0, _pB1)); @@ -3518,8 +3518,8 @@ static void convolution_gemm_transB_packed_tile_int8(const Mat& AT_tile, const M __m256i _pB1 = _mm256_shuffle_epi32(_pB0, _MM_SHUFFLE(0, 1, 0, 1)); #if __AVXVNNI__ || __AVX512VNNI__ - _sum0 = _mm256_dpwssd_epi32(_sum0, _pA0, _pB0); - _sum1 = _mm256_dpwssd_epi32(_sum1, _pA0, _pB1); + _sum0 = _mm256_comp_dpwssd_epi32(_sum0, _pA0, _pB0); + _sum1 = _mm256_comp_dpwssd_epi32(_sum1, _pA0, _pB1); #else _sum0 = _mm256_add_epi32(_sum0, _mm256_madd_epi16(_pA0, _pB0)); _sum1 = _mm256_add_epi32(_sum1, _mm256_madd_epi16(_pA0, _pB1)); @@ -3654,7 +3654,7 @@ static void convolution_gemm_transB_packed_tile_int8(const Mat& AT_tile, const M __m256i _pB0 = _mm256_shuffle_epi32(_pBB, _MM_SHUFFLE(0, 0, 0, 0)); #if __AVXVNNI__ || __AVX512VNNI__ - _sum0 = _mm256_dpwssd_epi32(_sum0, _pA0, _pB0); + _sum0 = _mm256_comp_dpwssd_epi32(_sum0, _pA0, _pB0); #else _sum0 = _mm256_add_epi32(_sum0, _mm256_madd_epi16(_pA0, _pB0)); #endif @@ -3984,10 +3984,10 @@ static void convolution_gemm_transB_packed_tile_int8(const Mat& AT_tile, const M __m256i _pB1 = _mm256_shuffle_epi32(_pB0, _MM_SHUFFLE(0, 3, 2, 1)); #if __AVXVNNI__ || __AVX512VNNI__ - _sum0 = _mm256_dpwssd_epi32(_sum0, _pA0, _pB0); - _sum1 = _mm256_dpwssd_epi32(_sum1, _pA0, _pB1); - _sum2 = _mm256_dpwssd_epi32(_sum2, _pA1, _pB0); - _sum3 = _mm256_dpwssd_epi32(_sum3, _pA1, _pB1); + _sum0 = _mm256_comp_dpwssd_epi32(_sum0, _pA0, _pB0); + _sum1 = _mm256_comp_dpwssd_epi32(_sum1, _pA0, _pB1); + _sum2 = _mm256_comp_dpwssd_epi32(_sum2, _pA1, _pB0); + _sum3 = _mm256_comp_dpwssd_epi32(_sum3, _pA1, _pB1); #else _sum0 = _mm256_add_epi32(_sum0, _mm256_madd_epi16(_pA0, _pB0)); _sum1 = _mm256_add_epi32(_sum1, _mm256_madd_epi16(_pA0, _pB1)); @@ -4943,8 +4943,8 @@ static void convolution_gemm_transB_packed_tile_int8(const Mat& AT_tile, const M __m256i _pB1 = _mm256_shuffle_epi32(_pB0, _MM_SHUFFLE(0, 3, 2, 1)); #if __AVX512VNNI__ || __AVXVNNI__ - _sum0 = _mm256_dpwssd_epi32(_sum0, _pA0, _pB0); - _sum1 = _mm256_dpwssd_epi32(_sum1, _pA0, _pB1); + _sum0 = _mm256_comp_dpwssd_epi32(_sum0, _pA0, _pB0); + _sum1 = _mm256_comp_dpwssd_epi32(_sum1, _pA0, _pB1); #else _sum0 = _mm256_add_epi32(_sum0, _mm256_madd_epi16(_pA0, _pB0)); _sum1 = _mm256_add_epi32(_sum1, _mm256_madd_epi16(_pA0, _pB1)); @@ -5467,7 +5467,7 @@ static void convolution_gemm_transB_packed_tile_int8(const Mat& AT_tile, const M __m256i _pB0 = _mm256_cvtepi8_epi16(_pB); #if __AVX512VNNI__ || __AVXVNNI__ - _sum0 = _mm256_dpwssd_epi32(_sum0, _pA0, _pB0); + _sum0 = _mm256_comp_dpwssd_epi32(_sum0, _pA0, _pB0); #else _sum0 = _mm256_add_epi32(_sum0, _mm256_madd_epi16(_pA0, _pB0)); #endif // __AVX512VNNI__ || __AVXVNNI__ diff --git a/src/layer/x86/convolution_packed_int8.h b/src/layer/x86/convolution_packed_int8.h index 8a1659565f5..3c854bbcbc3 100644 --- a/src/layer/x86/convolution_packed_int8.h +++ b/src/layer/x86/convolution_packed_int8.h @@ -2064,22 +2064,22 @@ static void convolution_packed_int8(const Mat& bottom_blob, Mat& top_blob, const __m256i _rr3 = _mm256_inserti128_si256(_mm256_castsi128_si256(_r3), _r3, 1); #if __AVXVNNI__ || __AVX512VNNI__ - _sum0 = _mm256_dpwssd_epi32(_sum0, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(0, 0, 0, 0)), _w0); - _sum1 = _mm256_dpwssd_epi32(_sum1, _mm256_shuffle_epi32(_rr1, _MM_SHUFFLE(0, 0, 0, 0)), _w0); - _sum2 = _mm256_dpwssd_epi32(_sum2, _mm256_shuffle_epi32(_rr2, _MM_SHUFFLE(0, 0, 0, 0)), _w0); - _sum3 = _mm256_dpwssd_epi32(_sum3, _mm256_shuffle_epi32(_rr3, _MM_SHUFFLE(0, 0, 0, 0)), _w0); - _sum0 = _mm256_dpwssd_epi32(_sum0, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(1, 1, 1, 1)), _w1); - _sum1 = _mm256_dpwssd_epi32(_sum1, _mm256_shuffle_epi32(_rr1, _MM_SHUFFLE(1, 1, 1, 1)), _w1); - _sum2 = _mm256_dpwssd_epi32(_sum2, _mm256_shuffle_epi32(_rr2, _MM_SHUFFLE(1, 1, 1, 1)), _w1); - _sum3 = _mm256_dpwssd_epi32(_sum3, _mm256_shuffle_epi32(_rr3, _MM_SHUFFLE(1, 1, 1, 1)), _w1); - _sum0 = _mm256_dpwssd_epi32(_sum0, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(2, 2, 2, 2)), _w2); - _sum1 = _mm256_dpwssd_epi32(_sum1, _mm256_shuffle_epi32(_rr1, _MM_SHUFFLE(2, 2, 2, 2)), _w2); - _sum2 = _mm256_dpwssd_epi32(_sum2, _mm256_shuffle_epi32(_rr2, _MM_SHUFFLE(2, 2, 2, 2)), _w2); - _sum3 = _mm256_dpwssd_epi32(_sum3, _mm256_shuffle_epi32(_rr3, _MM_SHUFFLE(2, 2, 2, 2)), _w2); - _sum0 = _mm256_dpwssd_epi32(_sum0, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(3, 3, 3, 3)), _w3); - _sum1 = _mm256_dpwssd_epi32(_sum1, _mm256_shuffle_epi32(_rr1, _MM_SHUFFLE(3, 3, 3, 3)), _w3); - _sum2 = _mm256_dpwssd_epi32(_sum2, _mm256_shuffle_epi32(_rr2, _MM_SHUFFLE(3, 3, 3, 3)), _w3); - _sum3 = _mm256_dpwssd_epi32(_sum3, _mm256_shuffle_epi32(_rr3, _MM_SHUFFLE(3, 3, 3, 3)), _w3); + _sum0 = _mm256_comp_dpwssd_epi32(_sum0, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(0, 0, 0, 0)), _w0); + _sum1 = _mm256_comp_dpwssd_epi32(_sum1, _mm256_shuffle_epi32(_rr1, _MM_SHUFFLE(0, 0, 0, 0)), _w0); + _sum2 = _mm256_comp_dpwssd_epi32(_sum2, _mm256_shuffle_epi32(_rr2, _MM_SHUFFLE(0, 0, 0, 0)), _w0); + _sum3 = _mm256_comp_dpwssd_epi32(_sum3, _mm256_shuffle_epi32(_rr3, _MM_SHUFFLE(0, 0, 0, 0)), _w0); + _sum0 = _mm256_comp_dpwssd_epi32(_sum0, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(1, 1, 1, 1)), _w1); + _sum1 = _mm256_comp_dpwssd_epi32(_sum1, _mm256_shuffle_epi32(_rr1, _MM_SHUFFLE(1, 1, 1, 1)), _w1); + _sum2 = _mm256_comp_dpwssd_epi32(_sum2, _mm256_shuffle_epi32(_rr2, _MM_SHUFFLE(1, 1, 1, 1)), _w1); + _sum3 = _mm256_comp_dpwssd_epi32(_sum3, _mm256_shuffle_epi32(_rr3, _MM_SHUFFLE(1, 1, 1, 1)), _w1); + _sum0 = _mm256_comp_dpwssd_epi32(_sum0, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(2, 2, 2, 2)), _w2); + _sum1 = _mm256_comp_dpwssd_epi32(_sum1, _mm256_shuffle_epi32(_rr1, _MM_SHUFFLE(2, 2, 2, 2)), _w2); + _sum2 = _mm256_comp_dpwssd_epi32(_sum2, _mm256_shuffle_epi32(_rr2, _MM_SHUFFLE(2, 2, 2, 2)), _w2); + _sum3 = _mm256_comp_dpwssd_epi32(_sum3, _mm256_shuffle_epi32(_rr3, _MM_SHUFFLE(2, 2, 2, 2)), _w2); + _sum0 = _mm256_comp_dpwssd_epi32(_sum0, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(3, 3, 3, 3)), _w3); + _sum1 = _mm256_comp_dpwssd_epi32(_sum1, _mm256_shuffle_epi32(_rr1, _MM_SHUFFLE(3, 3, 3, 3)), _w3); + _sum2 = _mm256_comp_dpwssd_epi32(_sum2, _mm256_shuffle_epi32(_rr2, _MM_SHUFFLE(3, 3, 3, 3)), _w3); + _sum3 = _mm256_comp_dpwssd_epi32(_sum3, _mm256_shuffle_epi32(_rr3, _MM_SHUFFLE(3, 3, 3, 3)), _w3); #else _sum0 = _mm256_add_epi32(_sum0, _mm256_madd_epi16(_mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(0, 0, 0, 0)), _w0)); _sum1 = _mm256_add_epi32(_sum1, _mm256_madd_epi16(_mm256_shuffle_epi32(_rr1, _MM_SHUFFLE(0, 0, 0, 0)), _w0)); @@ -2130,10 +2130,10 @@ static void convolution_packed_int8(const Mat& bottom_blob, Mat& top_blob, const __m256i _w = _mm256_cvtepi8_epi16(_mm_load_si128((const __m128i*)kptr)); #if __AVXVNNI__ || __AVX512VNNI__ - _sum0 = _mm256_dpwssd_epi32(_sum0, _rr0, _w); - _sum1 = _mm256_dpwssd_epi32(_sum1, _rr1, _w); - _sum2 = _mm256_dpwssd_epi32(_sum2, _rr2, _w); - _sum3 = _mm256_dpwssd_epi32(_sum3, _rr3, _w); + _sum0 = _mm256_comp_dpwssd_epi32(_sum0, _rr0, _w); + _sum1 = _mm256_comp_dpwssd_epi32(_sum1, _rr1, _w); + _sum2 = _mm256_comp_dpwssd_epi32(_sum2, _rr2, _w); + _sum3 = _mm256_comp_dpwssd_epi32(_sum3, _rr3, _w); #else _sum0 = _mm256_add_epi32(_sum0, _mm256_madd_epi16(_rr0, _w)); _sum1 = _mm256_add_epi32(_sum1, _mm256_madd_epi16(_rr1, _w)); @@ -2423,14 +2423,14 @@ static void convolution_packed_int8(const Mat& bottom_blob, Mat& top_blob, const __m256i _rr1 = _mm256_inserti128_si256(_mm256_castsi128_si256(_r1), _r1, 1); #if __AVXVNNI__ || __AVX512VNNI__ - _sum0 = _mm256_dpwssd_epi32(_sum0, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(0, 0, 0, 0)), _w0); - _sum1 = _mm256_dpwssd_epi32(_sum1, _mm256_shuffle_epi32(_rr1, _MM_SHUFFLE(0, 0, 0, 0)), _w0); - _sum2 = _mm256_dpwssd_epi32(_sum2, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(1, 1, 1, 1)), _w1); - _sum3 = _mm256_dpwssd_epi32(_sum3, _mm256_shuffle_epi32(_rr1, _MM_SHUFFLE(1, 1, 1, 1)), _w1); - _sum0 = _mm256_dpwssd_epi32(_sum0, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(2, 2, 2, 2)), _w2); - _sum1 = _mm256_dpwssd_epi32(_sum1, _mm256_shuffle_epi32(_rr1, _MM_SHUFFLE(2, 2, 2, 2)), _w2); - _sum2 = _mm256_dpwssd_epi32(_sum2, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(3, 3, 3, 3)), _w3); - _sum3 = _mm256_dpwssd_epi32(_sum3, _mm256_shuffle_epi32(_rr1, _MM_SHUFFLE(3, 3, 3, 3)), _w3); + _sum0 = _mm256_comp_dpwssd_epi32(_sum0, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(0, 0, 0, 0)), _w0); + _sum1 = _mm256_comp_dpwssd_epi32(_sum1, _mm256_shuffle_epi32(_rr1, _MM_SHUFFLE(0, 0, 0, 0)), _w0); + _sum2 = _mm256_comp_dpwssd_epi32(_sum2, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(1, 1, 1, 1)), _w1); + _sum3 = _mm256_comp_dpwssd_epi32(_sum3, _mm256_shuffle_epi32(_rr1, _MM_SHUFFLE(1, 1, 1, 1)), _w1); + _sum0 = _mm256_comp_dpwssd_epi32(_sum0, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(2, 2, 2, 2)), _w2); + _sum1 = _mm256_comp_dpwssd_epi32(_sum1, _mm256_shuffle_epi32(_rr1, _MM_SHUFFLE(2, 2, 2, 2)), _w2); + _sum2 = _mm256_comp_dpwssd_epi32(_sum2, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(3, 3, 3, 3)), _w3); + _sum3 = _mm256_comp_dpwssd_epi32(_sum3, _mm256_shuffle_epi32(_rr1, _MM_SHUFFLE(3, 3, 3, 3)), _w3); #else _sum0 = _mm256_add_epi32(_sum0, _mm256_madd_epi16(_mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(0, 0, 0, 0)), _w0)); _sum1 = _mm256_add_epi32(_sum1, _mm256_madd_epi16(_mm256_shuffle_epi32(_rr1, _MM_SHUFFLE(0, 0, 0, 0)), _w0)); @@ -2465,8 +2465,8 @@ static void convolution_packed_int8(const Mat& bottom_blob, Mat& top_blob, const __m256i _w = _mm256_cvtepi8_epi16(_mm_load_si128((const __m128i*)kptr)); #if __AVXVNNI__ || __AVX512VNNI__ - _sum0 = _mm256_dpwssd_epi32(_sum0, _rr0, _w); - _sum1 = _mm256_dpwssd_epi32(_sum1, _rr1, _w); + _sum0 = _mm256_comp_dpwssd_epi32(_sum0, _rr0, _w); + _sum1 = _mm256_comp_dpwssd_epi32(_sum1, _rr1, _w); #else _sum0 = _mm256_add_epi32(_sum0, _mm256_madd_epi16(_rr0, _w)); _sum1 = _mm256_add_epi32(_sum1, _mm256_madd_epi16(_rr1, _w)); @@ -2684,10 +2684,10 @@ static void convolution_packed_int8(const Mat& bottom_blob, Mat& top_blob, const __m256i _rr0 = _mm256_inserti128_si256(_mm256_castsi128_si256(_r0), _r0, 1); #if __AVXVNNI__ || __AVX512VNNI__ - _sum0 = _mm256_dpwssd_epi32(_sum0, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(0, 0, 0, 0)), _w0); - _sum1 = _mm256_dpwssd_epi32(_sum1, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(1, 1, 1, 1)), _w1); - _sum2 = _mm256_dpwssd_epi32(_sum2, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(2, 2, 2, 2)), _w2); - _sum3 = _mm256_dpwssd_epi32(_sum3, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(3, 3, 3, 3)), _w3); + _sum0 = _mm256_comp_dpwssd_epi32(_sum0, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(0, 0, 0, 0)), _w0); + _sum1 = _mm256_comp_dpwssd_epi32(_sum1, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(1, 1, 1, 1)), _w1); + _sum2 = _mm256_comp_dpwssd_epi32(_sum2, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(2, 2, 2, 2)), _w2); + _sum3 = _mm256_comp_dpwssd_epi32(_sum3, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(3, 3, 3, 3)), _w3); #else _sum0 = _mm256_add_epi32(_sum0, _mm256_madd_epi16(_mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(0, 0, 0, 0)), _w0)); _sum1 = _mm256_add_epi32(_sum1, _mm256_madd_epi16(_mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(1, 1, 1, 1)), _w1)); @@ -2718,7 +2718,7 @@ static void convolution_packed_int8(const Mat& bottom_blob, Mat& top_blob, const __m256i _w = _mm256_cvtepi8_epi16(_mm_load_si128((const __m128i*)kptr)); #if __AVXVNNI__ || __AVX512VNNI__ - _sum0 = _mm256_dpwssd_epi32(_sum0, _val, _w); + _sum0 = _mm256_comp_dpwssd_epi32(_sum0, _val, _w); #else _sum0 = _mm256_add_epi32(_sum0, _mm256_madd_epi16(_val, _w)); #endif @@ -3038,14 +3038,14 @@ static void convolution_packed_int8(const Mat& bottom_blob, Mat& top_blob, const __m256i _rr3 = _mm256_inserti128_si256(_mm256_castsi128_si256(_r3), _mm_shuffle_epi32(_r3, _MM_SHUFFLE(2, 3, 0, 1)), 1); #if __AVXVNNI__ || __AVX512VNNI__ - _sum00 = _mm256_dpwssd_epi32(_sum00, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(0, 0, 0, 0)), _w0); - _sum11 = _mm256_dpwssd_epi32(_sum11, _mm256_shuffle_epi32(_rr1, _MM_SHUFFLE(0, 0, 0, 0)), _w0); - _sum22 = _mm256_dpwssd_epi32(_sum22, _mm256_shuffle_epi32(_rr2, _MM_SHUFFLE(0, 0, 0, 0)), _w0); - _sum33 = _mm256_dpwssd_epi32(_sum33, _mm256_shuffle_epi32(_rr3, _MM_SHUFFLE(0, 0, 0, 0)), _w0); - _sum00 = _mm256_dpwssd_epi32(_sum00, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(2, 2, 2, 2)), _w1); - _sum11 = _mm256_dpwssd_epi32(_sum11, _mm256_shuffle_epi32(_rr1, _MM_SHUFFLE(2, 2, 2, 2)), _w1); - _sum22 = _mm256_dpwssd_epi32(_sum22, _mm256_shuffle_epi32(_rr2, _MM_SHUFFLE(2, 2, 2, 2)), _w1); - _sum33 = _mm256_dpwssd_epi32(_sum33, _mm256_shuffle_epi32(_rr3, _MM_SHUFFLE(2, 2, 2, 2)), _w1); + _sum00 = _mm256_comp_dpwssd_epi32(_sum00, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(0, 0, 0, 0)), _w0); + _sum11 = _mm256_comp_dpwssd_epi32(_sum11, _mm256_shuffle_epi32(_rr1, _MM_SHUFFLE(0, 0, 0, 0)), _w0); + _sum22 = _mm256_comp_dpwssd_epi32(_sum22, _mm256_shuffle_epi32(_rr2, _MM_SHUFFLE(0, 0, 0, 0)), _w0); + _sum33 = _mm256_comp_dpwssd_epi32(_sum33, _mm256_shuffle_epi32(_rr3, _MM_SHUFFLE(0, 0, 0, 0)), _w0); + _sum00 = _mm256_comp_dpwssd_epi32(_sum00, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(2, 2, 2, 2)), _w1); + _sum11 = _mm256_comp_dpwssd_epi32(_sum11, _mm256_shuffle_epi32(_rr1, _MM_SHUFFLE(2, 2, 2, 2)), _w1); + _sum22 = _mm256_comp_dpwssd_epi32(_sum22, _mm256_shuffle_epi32(_rr2, _MM_SHUFFLE(2, 2, 2, 2)), _w1); + _sum33 = _mm256_comp_dpwssd_epi32(_sum33, _mm256_shuffle_epi32(_rr3, _MM_SHUFFLE(2, 2, 2, 2)), _w1); #else _sum00 = _mm256_add_epi32(_sum00, _mm256_madd_epi16(_mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(0, 0, 0, 0)), _w0)); _sum11 = _mm256_add_epi32(_sum11, _mm256_madd_epi16(_mm256_shuffle_epi32(_rr1, _MM_SHUFFLE(0, 0, 0, 0)), _w0)); @@ -3147,10 +3147,10 @@ static void convolution_packed_int8(const Mat& bottom_blob, Mat& top_blob, const #endif #if __AVXVNNI__ || __AVX512VNNI__ - _sum0 = _mm_dpwssd_epi32(_sum0, _r0, _w); - _sum1 = _mm_dpwssd_epi32(_sum1, _r1, _w); - _sum2 = _mm_dpwssd_epi32(_sum2, _r2, _w); - _sum3 = _mm_dpwssd_epi32(_sum3, _r3, _w); + _sum0 = _mm_comp_dpwssd_epi32(_sum0, _r0, _w); + _sum1 = _mm_comp_dpwssd_epi32(_sum1, _r1, _w); + _sum2 = _mm_comp_dpwssd_epi32(_sum2, _r2, _w); + _sum3 = _mm_comp_dpwssd_epi32(_sum3, _r3, _w); #elif __XOP__ _sum0 = _mm_maddd_epi16(_r0, _w, _sum0); _sum1 = _mm_maddd_epi16(_r1, _w, _sum1); @@ -3449,10 +3449,10 @@ static void convolution_packed_int8(const Mat& bottom_blob, Mat& top_blob, const __m256i _rr1 = _mm256_inserti128_si256(_mm256_castsi128_si256(_r1), _mm_shuffle_epi32(_r1, _MM_SHUFFLE(2, 3, 0, 1)), 1); #if __AVXVNNI__ || __AVX512VNNI__ - _sum00 = _mm256_dpwssd_epi32(_sum00, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(0, 0, 0, 0)), _w0); - _sum11 = _mm256_dpwssd_epi32(_sum11, _mm256_shuffle_epi32(_rr1, _MM_SHUFFLE(0, 0, 0, 0)), _w0); - _sum22 = _mm256_dpwssd_epi32(_sum22, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(2, 2, 2, 2)), _w1); - _sum33 = _mm256_dpwssd_epi32(_sum33, _mm256_shuffle_epi32(_rr1, _MM_SHUFFLE(2, 2, 2, 2)), _w1); + _sum00 = _mm256_comp_dpwssd_epi32(_sum00, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(0, 0, 0, 0)), _w0); + _sum11 = _mm256_comp_dpwssd_epi32(_sum11, _mm256_shuffle_epi32(_rr1, _MM_SHUFFLE(0, 0, 0, 0)), _w0); + _sum22 = _mm256_comp_dpwssd_epi32(_sum22, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(2, 2, 2, 2)), _w1); + _sum33 = _mm256_comp_dpwssd_epi32(_sum33, _mm256_shuffle_epi32(_rr1, _MM_SHUFFLE(2, 2, 2, 2)), _w1); #else _sum00 = _mm256_add_epi32(_sum00, _mm256_madd_epi16(_mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(0, 0, 0, 0)), _w0)); _sum11 = _mm256_add_epi32(_sum11, _mm256_madd_epi16(_mm256_shuffle_epi32(_rr1, _MM_SHUFFLE(0, 0, 0, 0)), _w0)); @@ -3528,8 +3528,8 @@ static void convolution_packed_int8(const Mat& bottom_blob, Mat& top_blob, const #endif #if __AVXVNNI__ || __AVX512VNNI__ - _sum0 = _mm_dpwssd_epi32(_sum0, _r0, _w); - _sum1 = _mm_dpwssd_epi32(_sum1, _r1, _w); + _sum0 = _mm_comp_dpwssd_epi32(_sum0, _r0, _w); + _sum1 = _mm_comp_dpwssd_epi32(_sum1, _r1, _w); #elif __XOP__ _sum0 = _mm_maddd_epi16(_r0, _w, _sum0); _sum1 = _mm_maddd_epi16(_r1, _w, _sum1); @@ -3753,8 +3753,8 @@ static void convolution_packed_int8(const Mat& bottom_blob, Mat& top_blob, const __m256i _rr0 = _mm256_inserti128_si256(_mm256_castsi128_si256(_r0), _mm_shuffle_epi32(_r0, _MM_SHUFFLE(2, 3, 0, 1)), 1); #if __AVXVNNI__ || __AVX512VNNI__ - _sum00 = _mm256_dpwssd_epi32(_sum00, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(0, 0, 0, 0)), _w0); - _sum11 = _mm256_dpwssd_epi32(_sum11, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(2, 2, 2, 2)), _w1); + _sum00 = _mm256_comp_dpwssd_epi32(_sum00, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(0, 0, 0, 0)), _w0); + _sum11 = _mm256_comp_dpwssd_epi32(_sum11, _mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(2, 2, 2, 2)), _w1); #else _sum00 = _mm256_add_epi32(_sum00, _mm256_madd_epi16(_mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(0, 0, 0, 0)), _w0)); _sum11 = _mm256_add_epi32(_sum11, _mm256_madd_epi16(_mm256_shuffle_epi32(_rr0, _MM_SHUFFLE(2, 2, 2, 2)), _w1)); @@ -3816,7 +3816,7 @@ static void convolution_packed_int8(const Mat& bottom_blob, Mat& top_blob, const #endif #if __AVXVNNI__ || __AVX512VNNI__ - _sum0 = _mm_dpwssd_epi32(_sum0, _r0, _w); + _sum0 = _mm_comp_dpwssd_epi32(_sum0, _r0, _w); #elif __XOP__ _sum0 = _mm_maddd_epi16(_r0, _w, _sum0); #else @@ -4116,10 +4116,10 @@ static void convolution_packed_int8(const Mat& bottom_blob, Mat& top_blob, const __m256i _w = _mm256_cvtepi8_epi16(_w01); #if __AVXVNNI__ || __AVX512VNNI__ - _sum00 = _mm256_dpwssd_epi32(_sum00, _valval0, _w); - _sum11 = _mm256_dpwssd_epi32(_sum11, _valval1, _w); - _sum22 = _mm256_dpwssd_epi32(_sum22, _valval2, _w); - _sum33 = _mm256_dpwssd_epi32(_sum33, _valval3, _w); + _sum00 = _mm256_comp_dpwssd_epi32(_sum00, _valval0, _w); + _sum11 = _mm256_comp_dpwssd_epi32(_sum11, _valval1, _w); + _sum22 = _mm256_comp_dpwssd_epi32(_sum22, _valval2, _w); + _sum33 = _mm256_comp_dpwssd_epi32(_sum33, _valval3, _w); #else _sum00 = _mm256_add_epi32(_sum00, _mm256_madd_epi16(_valval0, _w)); _sum11 = _mm256_add_epi32(_sum11, _mm256_madd_epi16(_valval1, _w)); @@ -4415,8 +4415,8 @@ static void convolution_packed_int8(const Mat& bottom_blob, Mat& top_blob, const __m256i _valval1 = _mm256_inserti128_si256(_mm256_castsi128_si256(_r1), _r1, 1); #if __AVXVNNI__ || __AVX512VNNI__ - _sum0 = _mm256_dpwssd_epi32(_sum0, _valval0, _w); - _sum1 = _mm256_dpwssd_epi32(_sum1, _valval1, _w); + _sum0 = _mm256_comp_dpwssd_epi32(_sum0, _valval0, _w); + _sum1 = _mm256_comp_dpwssd_epi32(_sum1, _valval1, _w); #else _sum0 = _mm256_add_epi32(_sum0, _mm256_madd_epi16(_valval0, _w)); _sum1 = _mm256_add_epi32(_sum1, _mm256_madd_epi16(_valval1, _w)); @@ -4630,7 +4630,7 @@ static void convolution_packed_int8(const Mat& bottom_blob, Mat& top_blob, const __m256i _rr0 = _mm256_inserti128_si256(_mm256_castsi128_si256(_r0), _r0, 1); #if __AVXVNNI__ || __AVX512VNNI__ - _sum = _mm256_dpwssd_epi32(_sum, _rr0, _w); + _sum = _mm256_comp_dpwssd_epi32(_sum, _rr0, _w); #else _sum = _mm256_add_epi32(_sum, _mm256_madd_epi16(_rr0, _w)); #endif @@ -4797,10 +4797,10 @@ static void convolution_packed_int8(const Mat& bottom_blob, Mat& top_blob, const __m256i _w = _mm256_cvtepi8_epi16(_mm_load_si128((const __m128i*)kptr)); #if __AVXVNNI__ || __AVX512VNNI__ - _sum0 = _mm256_dpwssd_epi32(_sum0, _val0, _w); - _sum1 = _mm256_dpwssd_epi32(_sum1, _val1, _w); - _sum2 = _mm256_dpwssd_epi32(_sum2, _val2, _w); - _sum3 = _mm256_dpwssd_epi32(_sum3, _val3, _w); + _sum0 = _mm256_comp_dpwssd_epi32(_sum0, _val0, _w); + _sum1 = _mm256_comp_dpwssd_epi32(_sum1, _val1, _w); + _sum2 = _mm256_comp_dpwssd_epi32(_sum2, _val2, _w); + _sum3 = _mm256_comp_dpwssd_epi32(_sum3, _val3, _w); #else _sum0 = _mm256_add_epi32(_sum0, _mm256_madd_epi16(_val0, _w)); _sum1 = _mm256_add_epi32(_sum1, _mm256_madd_epi16(_val1, _w)); @@ -4899,10 +4899,10 @@ static void convolution_packed_int8(const Mat& bottom_blob, Mat& top_blob, const #endif #if __AVXVNNI__ || __AVX512VNNI__ - _sum0 = _mm_dpwssd_epi32(_sum0, _r0, _w); - _sum1 = _mm_dpwssd_epi32(_sum1, _r1, _w); - _sum2 = _mm_dpwssd_epi32(_sum2, _r2, _w); - _sum3 = _mm_dpwssd_epi32(_sum3, _r3, _w); + _sum0 = _mm_comp_dpwssd_epi32(_sum0, _r0, _w); + _sum1 = _mm_comp_dpwssd_epi32(_sum1, _r1, _w); + _sum2 = _mm_comp_dpwssd_epi32(_sum2, _r2, _w); + _sum3 = _mm_comp_dpwssd_epi32(_sum3, _r3, _w); #elif __XOP__ _sum0 = _mm_maddd_epi16(_r0, _w, _sum0); _sum1 = _mm_maddd_epi16(_r1, _w, _sum1); @@ -5074,8 +5074,8 @@ static void convolution_packed_int8(const Mat& bottom_blob, Mat& top_blob, const __m256i _w = _mm256_cvtepi8_epi16(_mm_load_si128((const __m128i*)kptr)); #if __AVXVNNI__ || __AVX512VNNI__ - _sum0 = _mm256_dpwssd_epi32(_sum0, _val0, _w); - _sum1 = _mm256_dpwssd_epi32(_sum1, _val1, _w); + _sum0 = _mm256_comp_dpwssd_epi32(_sum0, _val0, _w); + _sum1 = _mm256_comp_dpwssd_epi32(_sum1, _val1, _w); #else _sum0 = _mm256_add_epi32(_sum0, _mm256_madd_epi16(_val0, _w)); _sum1 = _mm256_add_epi32(_sum1, _mm256_madd_epi16(_val1, _w)); @@ -5150,8 +5150,8 @@ static void convolution_packed_int8(const Mat& bottom_blob, Mat& top_blob, const #endif #if __AVXVNNI__ || __AVX512VNNI__ - _sum0 = _mm_dpwssd_epi32(_sum0, _r0, _w); - _sum1 = _mm_dpwssd_epi32(_sum1, _r1, _w); + _sum0 = _mm_comp_dpwssd_epi32(_sum0, _r0, _w); + _sum1 = _mm_comp_dpwssd_epi32(_sum1, _r1, _w); #elif __XOP__ _sum0 = _mm_maddd_epi16(_r0, _w, _sum0); _sum1 = _mm_maddd_epi16(_r1, _w, _sum1); @@ -5265,7 +5265,7 @@ static void convolution_packed_int8(const Mat& bottom_blob, Mat& top_blob, const __m256i _w = _mm256_cvtepi8_epi16(_mm_load_si128((const __m128i*)kptr)); #if __AVXVNNI__ || __AVX512VNNI__ - _sum = _mm256_dpwssd_epi32(_sum, _val, _w); + _sum = _mm256_comp_dpwssd_epi32(_sum, _val, _w); #else _sum = _mm256_add_epi32(_sum, _mm256_madd_epi16(_val, _w)); #endif @@ -5325,7 +5325,7 @@ static void convolution_packed_int8(const Mat& bottom_blob, Mat& top_blob, const #endif #if __AVXVNNI__ || __AVX512VNNI__ - _sum = _mm_dpwssd_epi32(_sum, _r0, _w); + _sum = _mm_comp_dpwssd_epi32(_sum, _r0, _w); #elif __XOP__ _sum = _mm_maddd_epi16(_r0, _w, _sum); #else diff --git a/src/layer/x86/lstm_int8.h b/src/layer/x86/lstm_int8.h index 0bc9cda343a..a6655611e18 100644 --- a/src/layer/x86/lstm_int8.h +++ b/src/layer/x86/lstm_int8.h @@ -870,10 +870,10 @@ static void lstm_transform_weight_int8(const Mat& weight_xc, const Mat& weight_x __m256i _w1 = _mm256_loadu_si256((const __m256i*)(kptr + 32)); __m256i _w2 = _mm256_loadu_si256((const __m256i*)(kptr + 64)); __m256i _w3 = _mm256_loadu_si256((const __m256i*)(kptr + 96)); - _w0_shift = _mm256_dpbusd_epi32(_w0_shift, _v127, _w0); - _w1_shift = _mm256_dpbusd_epi32(_w1_shift, _v127, _w1); - _w2_shift = _mm256_dpbusd_epi32(_w2_shift, _v127, _w2); - _w3_shift = _mm256_dpbusd_epi32(_w3_shift, _v127, _w3); + _w0_shift = _mm256_comp_dpbusd_epi32(_w0_shift, _v127, _w0); + _w1_shift = _mm256_comp_dpbusd_epi32(_w1_shift, _v127, _w1); + _w2_shift = _mm256_comp_dpbusd_epi32(_w2_shift, _v127, _w2); + _w3_shift = _mm256_comp_dpbusd_epi32(_w3_shift, _v127, _w3); kptr += 128; } @@ -900,8 +900,8 @@ static void lstm_transform_weight_int8(const Mat& weight_xc, const Mat& weight_x __m256i _w0 = _mm256_loadu_si256((const __m256i*)kptr); __m256i _w1 = _mm256_loadu_si256((const __m256i*)(kptr + 32)); - _w0_shift = _mm256_dpbusd_epi32(_w0_shift, _v127, _w0); - _w1_shift = _mm256_dpbusd_epi32(_w1_shift, _v127, _w1); + _w0_shift = _mm256_comp_dpbusd_epi32(_w0_shift, _v127, _w0); + _w1_shift = _mm256_comp_dpbusd_epi32(_w1_shift, _v127, _w1); kptr += 64; } @@ -946,7 +946,7 @@ static void lstm_transform_weight_int8(const Mat& weight_xc, const Mat& weight_x kptr[24 + 7] = weight_xc_G_1[i + 3]; __m256i _w = _mm256_loadu_si256((const __m256i*)kptr); - _w_shift = _mm256_dpbusd_epi32(_w_shift, _v127, _w); + _w_shift = _mm256_comp_dpbusd_epi32(_w_shift, _v127, _w); kptr += 32; } @@ -1062,10 +1062,10 @@ static void lstm_transform_weight_int8(const Mat& weight_xc, const Mat& weight_x __m256i _w1 = _mm256_loadu_si256((const __m256i*)(kptr + 32)); __m256i _w2 = _mm256_loadu_si256((const __m256i*)(kptr + 64)); __m256i _w3 = _mm256_loadu_si256((const __m256i*)(kptr + 96)); - _w0_shift = _mm256_dpbusd_epi32(_w0_shift, _v127, _w0); - _w1_shift = _mm256_dpbusd_epi32(_w1_shift, _v127, _w1); - _w2_shift = _mm256_dpbusd_epi32(_w2_shift, _v127, _w2); - _w3_shift = _mm256_dpbusd_epi32(_w3_shift, _v127, _w3); + _w0_shift = _mm256_comp_dpbusd_epi32(_w0_shift, _v127, _w0); + _w1_shift = _mm256_comp_dpbusd_epi32(_w1_shift, _v127, _w1); + _w2_shift = _mm256_comp_dpbusd_epi32(_w2_shift, _v127, _w2); + _w3_shift = _mm256_comp_dpbusd_epi32(_w3_shift, _v127, _w3); kptr += 128; } @@ -1092,8 +1092,8 @@ static void lstm_transform_weight_int8(const Mat& weight_xc, const Mat& weight_x __m256i _w0 = _mm256_loadu_si256((const __m256i*)kptr); __m256i _w1 = _mm256_loadu_si256((const __m256i*)(kptr + 32)); - _w0_shift = _mm256_dpbusd_epi32(_w0_shift, _v127, _w0); - _w1_shift = _mm256_dpbusd_epi32(_w1_shift, _v127, _w1); + _w0_shift = _mm256_comp_dpbusd_epi32(_w0_shift, _v127, _w0); + _w1_shift = _mm256_comp_dpbusd_epi32(_w1_shift, _v127, _w1); kptr += 64; } @@ -1138,7 +1138,7 @@ static void lstm_transform_weight_int8(const Mat& weight_xc, const Mat& weight_x kptr[24 + 7] = weight_hc_G_1[i + 3]; __m256i _w = _mm256_loadu_si256((const __m256i*)kptr); - _w_shift = _mm256_dpbusd_epi32(_w_shift, _v127, _w); + _w_shift = _mm256_comp_dpbusd_epi32(_w_shift, _v127, _w); kptr += 32; } @@ -1299,10 +1299,10 @@ static void lstm_transform_weight_int8(const Mat& weight_xc, const Mat& weight_x __m128i _w1 = _mm_loadu_si128((const __m128i*)(kptr + 16)); __m128i _w2 = _mm_loadu_si128((const __m128i*)(kptr + 32)); __m128i _w3 = _mm_loadu_si128((const __m128i*)(kptr + 48)); - _w0_shift = _mm_dpbusd_epi32(_w0_shift, _v127, _w0); - _w1_shift = _mm_dpbusd_epi32(_w1_shift, _v127, _w1); - _w2_shift = _mm_dpbusd_epi32(_w2_shift, _v127, _w2); - _w3_shift = _mm_dpbusd_epi32(_w3_shift, _v127, _w3); + _w0_shift = _mm_comp_dpbusd_epi32(_w0_shift, _v127, _w0); + _w1_shift = _mm_comp_dpbusd_epi32(_w1_shift, _v127, _w1); + _w2_shift = _mm_comp_dpbusd_epi32(_w2_shift, _v127, _w2); + _w3_shift = _mm_comp_dpbusd_epi32(_w3_shift, _v127, _w3); kptr += 64; } @@ -1326,8 +1326,8 @@ static void lstm_transform_weight_int8(const Mat& weight_xc, const Mat& weight_x __m128i _w0 = _mm_loadu_si128((const __m128i*)kptr); __m128i _w1 = _mm_loadu_si128((const __m128i*)(kptr + 16)); - _w0_shift = _mm_dpbusd_epi32(_w0_shift, _v127, _w0); - _w1_shift = _mm_dpbusd_epi32(_w1_shift, _v127, _w1); + _w0_shift = _mm_comp_dpbusd_epi32(_w0_shift, _v127, _w0); + _w1_shift = _mm_comp_dpbusd_epi32(_w1_shift, _v127, _w1); kptr += 32; } @@ -1356,7 +1356,7 @@ static void lstm_transform_weight_int8(const Mat& weight_xc, const Mat& weight_x kptr[8 + 7] = weight_xc_G[i + 3]; __m128i _w = _mm_loadu_si128((const __m128i*)kptr); - _w_shift = _mm_dpbusd_epi32(_w_shift, _v127, _w); + _w_shift = _mm_comp_dpbusd_epi32(_w_shift, _v127, _w); kptr += 16; } @@ -1437,10 +1437,10 @@ static void lstm_transform_weight_int8(const Mat& weight_xc, const Mat& weight_x __m128i _w1 = _mm_loadu_si128((const __m128i*)(kptr + 16)); __m128i _w2 = _mm_loadu_si128((const __m128i*)(kptr + 32)); __m128i _w3 = _mm_loadu_si128((const __m128i*)(kptr + 48)); - _w0_shift = _mm_dpbusd_epi32(_w0_shift, _v127, _w0); - _w1_shift = _mm_dpbusd_epi32(_w1_shift, _v127, _w1); - _w2_shift = _mm_dpbusd_epi32(_w2_shift, _v127, _w2); - _w3_shift = _mm_dpbusd_epi32(_w3_shift, _v127, _w3); + _w0_shift = _mm_comp_dpbusd_epi32(_w0_shift, _v127, _w0); + _w1_shift = _mm_comp_dpbusd_epi32(_w1_shift, _v127, _w1); + _w2_shift = _mm_comp_dpbusd_epi32(_w2_shift, _v127, _w2); + _w3_shift = _mm_comp_dpbusd_epi32(_w3_shift, _v127, _w3); kptr += 64; } @@ -1464,8 +1464,8 @@ static void lstm_transform_weight_int8(const Mat& weight_xc, const Mat& weight_x __m128i _w0 = _mm_loadu_si128((const __m128i*)kptr); __m128i _w1 = _mm_loadu_si128((const __m128i*)(kptr + 16)); - _w0_shift = _mm_dpbusd_epi32(_w0_shift, _v127, _w0); - _w1_shift = _mm_dpbusd_epi32(_w1_shift, _v127, _w1); + _w0_shift = _mm_comp_dpbusd_epi32(_w0_shift, _v127, _w0); + _w1_shift = _mm_comp_dpbusd_epi32(_w1_shift, _v127, _w1); kptr += 32; } @@ -1494,7 +1494,7 @@ static void lstm_transform_weight_int8(const Mat& weight_xc, const Mat& weight_x kptr[8 + 7] = weight_hc_G[i + 3]; __m128i _w = _mm_loadu_si128((const __m128i*)kptr); - _w_shift = _mm_dpbusd_epi32(_w_shift, _v127, _w); + _w_shift = _mm_comp_dpbusd_epi32(_w_shift, _v127, _w); kptr += 16; } @@ -2273,10 +2273,10 @@ static void lstm_int8(const Mat& bottom_blob_int8, const Mat& bottom_blob_int8_d __m256i _xii = _mm256_inserti128_si256(_mm256_castsi128_si256(_xi), _xi, 1); - _sum0 = _mm256_dpbusd_epi32(_sum0, _xii, _w0); - _sum1 = _mm256_dpbusd_epi32(_sum1, _xii, _w1); - _sum2 = _mm256_dpbusd_epi32(_sum2, _xii, _w2); - _sum3 = _mm256_dpbusd_epi32(_sum3, _xii, _w3); + _sum0 = _mm256_comp_dpbusd_epi32(_sum0, _xii, _w0); + _sum1 = _mm256_comp_dpbusd_epi32(_sum1, _xii, _w1); + _sum2 = _mm256_comp_dpbusd_epi32(_sum2, _xii, _w2); + _sum3 = _mm256_comp_dpbusd_epi32(_sum3, _xii, _w3); kptr += 128; } @@ -2296,8 +2296,8 @@ static void lstm_int8(const Mat& bottom_blob_int8, const Mat& bottom_blob_int8_d __m256i _w0 = _mm256_loadu_si256((const __m256i*)kptr); __m256i _w1 = _mm256_loadu_si256((const __m256i*)(kptr + 32)); - _sum0 = _mm256_dpbusd_epi32(_sum0, _xi, _w0); - _sum1 = _mm256_dpbusd_epi32(_sum1, _xi, _w1); + _sum0 = _mm256_comp_dpbusd_epi32(_sum0, _xi, _w0); + _sum1 = _mm256_comp_dpbusd_epi32(_sum1, _xi, _w1); kptr += 64; } @@ -2314,7 +2314,7 @@ static void lstm_int8(const Mat& bottom_blob_int8, const Mat& bottom_blob_int8_d #ifdef _MSC_VER _xi = _mm256_add_epi32(_xi, _mm256_set1_epi8(127)); #endif - _lstm_IFOGx0 = _mm256_dpbusd_epi32(_lstm_IFOGx0, _xi, _w); + _lstm_IFOGx0 = _mm256_comp_dpbusd_epi32(_lstm_IFOGx0, _xi, _w); kptr += 32; } @@ -2395,7 +2395,7 @@ static void lstm_int8(const Mat& bottom_blob_int8, const Mat& bottom_blob_int8_d __m256i _xixi0 = _mm256_shuffle_epi32(_xixi, _MM_SHUFFLE(0, 0, 0, 0)); #if __AVXVNNI__ || __AVX512VNNI__ - _lstm_IFOGx0 = _mm256_dpwssd_epi32(_lstm_IFOGx0, _ww, _xixi0); + _lstm_IFOGx0 = _mm256_comp_dpwssd_epi32(_lstm_IFOGx0, _ww, _xixi0); #else _lstm_IFOGx0 = _mm256_add_epi32(_lstm_IFOGx0, _mm256_madd_epi16(_ww, _xixi0)); #endif // __AVXVNNI__ || __AVX512VNNI__ @@ -2434,10 +2434,10 @@ static void lstm_int8(const Mat& bottom_blob_int8, const Mat& bottom_blob_int8_d __m256i _hh_cont = _mm256_broadcastsi128_si256(_h_cont); - _sum0 = _mm256_dpbusd_epi32(_sum0, _hh_cont, _w0); - _sum1 = _mm256_dpbusd_epi32(_sum1, _hh_cont, _w1); - _sum2 = _mm256_dpbusd_epi32(_sum2, _hh_cont, _w2); - _sum3 = _mm256_dpbusd_epi32(_sum3, _hh_cont, _w3); + _sum0 = _mm256_comp_dpbusd_epi32(_sum0, _hh_cont, _w0); + _sum1 = _mm256_comp_dpbusd_epi32(_sum1, _hh_cont, _w1); + _sum2 = _mm256_comp_dpbusd_epi32(_sum2, _hh_cont, _w2); + _sum3 = _mm256_comp_dpbusd_epi32(_sum3, _hh_cont, _w3); kptr += 128; } @@ -2457,8 +2457,8 @@ static void lstm_int8(const Mat& bottom_blob_int8, const Mat& bottom_blob_int8_d __m256i _w0 = _mm256_loadu_si256((const __m256i*)kptr); __m256i _w1 = _mm256_loadu_si256((const __m256i*)(kptr + 32)); - _sum0 = _mm256_dpbusd_epi32(_sum0, _h_cont, _w0); - _sum1 = _mm256_dpbusd_epi32(_sum1, _h_cont, _w1); + _sum0 = _mm256_comp_dpbusd_epi32(_sum0, _h_cont, _w0); + _sum1 = _mm256_comp_dpbusd_epi32(_sum1, _h_cont, _w1); kptr += 64; } @@ -2475,7 +2475,7 @@ static void lstm_int8(const Mat& bottom_blob_int8, const Mat& bottom_blob_int8_d #ifdef _MSC_VER _h_cont = _mm256_add_epi32(_h_cont, _mm256_set1_epi8(127)); #endif - _lstm_IFOGh0 = _mm256_dpbusd_epi32(_lstm_IFOGh0, _h_cont, _w); + _lstm_IFOGh0 = _mm256_comp_dpbusd_epi32(_lstm_IFOGh0, _h_cont, _w); kptr += 32; } @@ -2556,7 +2556,7 @@ static void lstm_int8(const Mat& bottom_blob_int8, const Mat& bottom_blob_int8_d __m256i _hh_cont0 = _mm256_shuffle_epi32(_hh_cont, _MM_SHUFFLE(0, 0, 0, 0)); #if __AVXVNNI__ || __AVX512VNNI__ - _lstm_IFOGh0 = _mm256_dpwssd_epi32(_lstm_IFOGh0, _ww, _hh_cont0); + _lstm_IFOGh0 = _mm256_comp_dpwssd_epi32(_lstm_IFOGh0, _ww, _hh_cont0); #else _lstm_IFOGh0 = _mm256_add_epi32(_lstm_IFOGh0, _mm256_madd_epi16(_ww, _hh_cont0)); #endif // __AVXVNNI__ || __AVX512VNNI__ @@ -2635,10 +2635,10 @@ static void lstm_int8(const Mat& bottom_blob_int8, const Mat& bottom_blob_int8_d __m128i _w2 = _mm_loadu_si128((const __m128i*)(kptr + 32)); __m128i _w3 = _mm_loadu_si128((const __m128i*)(kptr + 48)); - _sum0 = _mm_dpbusd_epi32(_sum0, _xi, _w0); - _sum1 = _mm_dpbusd_epi32(_sum1, _xi, _w1); - _sum2 = _mm_dpbusd_epi32(_sum2, _xi, _w2); - _sum3 = _mm_dpbusd_epi32(_sum3, _xi, _w3); + _sum0 = _mm_comp_dpbusd_epi32(_sum0, _xi, _w0); + _sum1 = _mm_comp_dpbusd_epi32(_sum1, _xi, _w1); + _sum2 = _mm_comp_dpbusd_epi32(_sum2, _xi, _w2); + _sum3 = _mm_comp_dpbusd_epi32(_sum3, _xi, _w3); kptr += 64; } @@ -2659,8 +2659,8 @@ static void lstm_int8(const Mat& bottom_blob_int8, const Mat& bottom_blob_int8_d __m128i _w0 = _mm_loadu_si128((const __m128i*)kptr); __m128i _w1 = _mm_loadu_si128((const __m128i*)(kptr + 16)); - _sum0 = _mm_dpbusd_epi32(_sum0, _xi, _w0); - _sum1 = _mm_dpbusd_epi32(_sum1, _xi, _w1); + _sum0 = _mm_comp_dpbusd_epi32(_sum0, _xi, _w0); + _sum1 = _mm_comp_dpbusd_epi32(_sum1, _xi, _w1); kptr += 32; } @@ -2677,7 +2677,7 @@ static void lstm_int8(const Mat& bottom_blob_int8, const Mat& bottom_blob_int8_d #ifdef _MSC_VER _xi = _mm_add_epi32(_xi, _mm_set1_epi8(127)); #endif - _lstm_IFOGx0 = _mm_dpbusd_epi32(_lstm_IFOGx0, _xi, _w); + _lstm_IFOGx0 = _mm_comp_dpbusd_epi32(_lstm_IFOGx0, _xi, _w); kptr += 16; } @@ -2844,10 +2844,10 @@ static void lstm_int8(const Mat& bottom_blob_int8, const Mat& bottom_blob_int8_d __m128i _w2 = _mm_loadu_si128((const __m128i*)(kptr + 32)); __m128i _w3 = _mm_loadu_si128((const __m128i*)(kptr + 48)); - _sum0 = _mm_dpbusd_epi32(_sum0, _h_cont, _w0); - _sum1 = _mm_dpbusd_epi32(_sum1, _h_cont, _w1); - _sum2 = _mm_dpbusd_epi32(_sum2, _h_cont, _w2); - _sum3 = _mm_dpbusd_epi32(_sum3, _h_cont, _w3); + _sum0 = _mm_comp_dpbusd_epi32(_sum0, _h_cont, _w0); + _sum1 = _mm_comp_dpbusd_epi32(_sum1, _h_cont, _w1); + _sum2 = _mm_comp_dpbusd_epi32(_sum2, _h_cont, _w2); + _sum3 = _mm_comp_dpbusd_epi32(_sum3, _h_cont, _w3); kptr += 64; } @@ -2868,8 +2868,8 @@ static void lstm_int8(const Mat& bottom_blob_int8, const Mat& bottom_blob_int8_d __m128i _w0 = _mm_loadu_si128((const __m128i*)kptr); __m128i _w1 = _mm_loadu_si128((const __m128i*)(kptr + 16)); - _sum0 = _mm_dpbusd_epi32(_sum0, _h_cont, _w0); - _sum1 = _mm_dpbusd_epi32(_sum1, _h_cont, _w1); + _sum0 = _mm_comp_dpbusd_epi32(_sum0, _h_cont, _w0); + _sum1 = _mm_comp_dpbusd_epi32(_sum1, _h_cont, _w1); kptr += 32; } @@ -2886,7 +2886,7 @@ static void lstm_int8(const Mat& bottom_blob_int8, const Mat& bottom_blob_int8_d #ifdef _MSC_VER _h_cont = _mm_add_epi32(_h_cont, _mm_set1_epi8(127)); #endif - _lstm_IFOGh0 = _mm_dpbusd_epi32(_lstm_IFOGh0, _h_cont, _w); + _lstm_IFOGh0 = _mm_comp_dpbusd_epi32(_lstm_IFOGh0, _h_cont, _w); kptr += 16; } diff --git a/src/layer/x86/x86_usability.h b/src/layer/x86/x86_usability.h index 53bc40c3c32..4dbef6b089b 100644 --- a/src/layer/x86/x86_usability.h +++ b/src/layer/x86/x86_usability.h @@ -859,6 +859,24 @@ static NCNN_FORCEINLINE __m256i _mm256_comp_dpbusd_epi32(__m256i src, __m256i a, return _mm256_dpbusd_avx_epi32(src, a, b); #endif } + +static NCNN_FORCEINLINE __m128i _mm_comp_dpwssd_epi32(__m128i src, __m128i a, __m128i b) +{ +#if __AVX512VNNI__ + return _mm_dpwssd_epi32(src, a, b); +#else + return _mm_dpwssd_avx_epi32(src, a, b); +#endif +} + +static NCNN_FORCEINLINE __m256i _mm256_comp_dpwssd_epi32(__m256i src, __m256i a, __m256i b) +{ +#if __AVX512VNNI__ + return _mm256_dpwssd_epi32(src, a, b); +#else + return _mm256_dpwssd_avx_epi32(src, a, b); +#endif +} #endif // __AVX512VNNI__ || __AVXVNNI__ static NCNN_FORCEINLINE void transpose8x2_epi32(__m256i& _r0, __m256i& _r1)