Skip to content

Commit

Permalink
opt wip
Browse files Browse the repository at this point in the history
  • Loading branch information
nihui committed Aug 19, 2023
1 parent 60630e5 commit 7592811
Showing 1 changed file with 141 additions and 200 deletions.
341 changes: 141 additions & 200 deletions src/layer/x86/convolution_im2col_gemm_int8.h
Original file line number Diff line number Diff line change
Expand Up @@ -1352,198 +1352,79 @@ static void convolution_gemm_transB_packed_tile_int8(const Mat& AT_tile, const M
}

int kk = 0;
for (; kk + 1 < max_kk; kk += 2)
{
#if !__AVX512F__
__m256i _sum0z = _mm256_setzero_si256();
__m256i _sum1z = _mm256_setzero_si256();
__m256i _sum2z = _mm256_setzero_si256();
__m256i _sum3z = _mm256_setzero_si256();
__m256i _sum4z = _mm256_setzero_si256();
__m256i _sum5z = _mm256_setzero_si256();
__m256i _sum6z = _mm256_setzero_si256();
__m256i _sum7z = _mm256_setzero_si256();
#endif
for (; kk + 1 < max_kk; kk += 2)
{
__m128i _pA = _mm_loadu_si128((const __m128i*)pA);
__m128i _pB = _mm_loadu_si128((const __m128i*)pB);
__m128i _pA = _mm_loadu_si128((const __m128i*)pA);
__m128i _pB = _mm_loadu_si128((const __m128i*)pB);

__m256i _pA0 = _mm256_cvtepi8_epi16(_pA);
__m256i _pBB = _mm256_cvtepi8_epi16(_pB);
__m256i _pA0 = _mm256_cvtepi8_epi16(_pA);
__m256i _pBB = _mm256_cvtepi8_epi16(_pB);

#if __AVX512F__
__m512i _pAA = _mm512_inserti32x8(_mm512_castsi256_si512(_pA0), _pA0, 1);
__m512i _pAA = _mm512_inserti32x8(_mm512_castsi256_si512(_pA0), _pA0, 1);

// 0123 4567 -> 0213 4657
_pBB = _mm256_shuffle_epi32(_pBB, _MM_SHUFFLE(3, 1, 2, 0));
// 0123 4567 -> 0213 4657
_pBB = _mm256_shuffle_epi32(_pBB, _MM_SHUFFLE(3, 1, 2, 0));

// 0213 4657 -> 0246 1357
_pBB = _mm256_permute4x64_epi64(_pBB, _MM_SHUFFLE(3, 1, 2, 0));
// 0213 4657 -> 0246 1357
_pBB = _mm256_permute4x64_epi64(_pBB, _MM_SHUFFLE(3, 1, 2, 0));

// 0246 1357 -> 0246 0246 1357 1357
__m512i _pBBBB = _mm512_shuffle_i32x4(_mm512_castsi256_si512(_pBB), _mm512_castsi256_si512(_pBB), _MM_SHUFFLE(1, 1, 0, 0));
// 0246 1357 -> 0246 0246 1357 1357
__m512i _pBBBB = _mm512_shuffle_i32x4(_mm512_castsi256_si512(_pBB), _mm512_castsi256_si512(_pBB), _MM_SHUFFLE(1, 1, 0, 0));

// 0246 0246 1357 1357 -> 00000000 11111111
__m512i _pB01 = _mm512_shuffle_epi32(_pBBBB, _MM_PERM_AAAA);
__m512i _pB23 = _mm512_shuffle_epi32(_pBBBB, _MM_PERM_BBBB);
__m512i _pB45 = _mm512_shuffle_epi32(_pBBBB, _MM_PERM_CCCC);
__m512i _pB67 = _mm512_shuffle_epi32(_pBBBB, _MM_PERM_DDDD);
// 0246 0246 1357 1357 -> 00000000 11111111
__m512i _pB01 = _mm512_shuffle_epi32(_pBBBB, _MM_PERM_AAAA);
__m512i _pB23 = _mm512_shuffle_epi32(_pBBBB, _MM_PERM_BBBB);
__m512i _pB45 = _mm512_shuffle_epi32(_pBBBB, _MM_PERM_CCCC);
__m512i _pB67 = _mm512_shuffle_epi32(_pBBBB, _MM_PERM_DDDD);
#if __AVX512VNNI__
_sum01 = _mm512_dpwssd_epi32(_sum01, _pAA, _pB01);
_sum23 = _mm512_dpwssd_epi32(_sum23, _pAA, _pB23);
_sum45 = _mm512_dpwssd_epi32(_sum45, _pAA, _pB45);
_sum67 = _mm512_dpwssd_epi32(_sum67, _pAA, _pB67);
_sum01 = _mm512_dpwssd_epi32(_sum01, _pAA, _pB01);
_sum23 = _mm512_dpwssd_epi32(_sum23, _pAA, _pB23);
_sum45 = _mm512_dpwssd_epi32(_sum45, _pAA, _pB45);
_sum67 = _mm512_dpwssd_epi32(_sum67, _pAA, _pB67);
#else
_sum01 = _mm512_add_epi32(_sum01, _mm512_madd_epi16(_pAA, _pB01));
_sum23 = _mm512_add_epi32(_sum23, _mm512_madd_epi16(_pAA, _pB23));
_sum45 = _mm512_add_epi32(_sum45, _mm512_madd_epi16(_pAA, _pB45));
_sum67 = _mm512_add_epi32(_sum67, _mm512_madd_epi16(_pAA, _pB67));
_sum01 = _mm512_add_epi32(_sum01, _mm512_madd_epi16(_pAA, _pB01));
_sum23 = _mm512_add_epi32(_sum23, _mm512_madd_epi16(_pAA, _pB23));
_sum45 = _mm512_add_epi32(_sum45, _mm512_madd_epi16(_pAA, _pB45));
_sum67 = _mm512_add_epi32(_sum67, _mm512_madd_epi16(_pAA, _pB67));
#endif // __AVX512VNNI__
#else // __AVX512F__

// 0123 4567
// 4567 0123
__m256i _pA1 = _mm256_permute4x64_epi64(_pA0, _MM_SHUFFLE(1, 0, 3, 2));

// 0123 4567
// 1230 5674
// 2301 6745
// 3012 7456
__m256i _pB0 = _pBB;
__m256i _pB1 = _mm256_shuffle_epi32(_pBB, _MM_SHUFFLE(2, 1, 0, 3));
__m256i _pB2 = _mm256_shuffle_epi32(_pBB, _MM_SHUFFLE(1, 0, 3, 2));
__m256i _pB3 = _mm256_shuffle_epi32(_pBB, _MM_SHUFFLE(0, 3, 2, 1));

#if __AVXVNNI__
_sum0z = _mm256_dpwssd_epi32(_sum0z, _pA0, _pB0);
_sum1z = _mm256_dpwssd_epi32(_sum1z, _pA0, _pB1);
_sum2z = _mm256_dpwssd_epi32(_sum2z, _pA0, _pB2);
_sum3z = _mm256_dpwssd_epi32(_sum3z, _pA0, _pB3);
_sum4z = _mm256_dpwssd_epi32(_sum4z, _pA1, _pB0);
_sum5z = _mm256_dpwssd_epi32(_sum5z, _pA1, _pB1);
_sum6z = _mm256_dpwssd_epi32(_sum6z, _pA1, _pB2);
_sum7z = _mm256_dpwssd_epi32(_sum7z, _pA1, _pB3);
#else
_sum0z = _mm256_add_epi32(_sum0z, _mm256_madd_epi16(_pA0, _pB0));
_sum1z = _mm256_add_epi32(_sum1z, _mm256_madd_epi16(_pA0, _pB1));
_sum2z = _mm256_add_epi32(_sum2z, _mm256_madd_epi16(_pA0, _pB2));
_sum3z = _mm256_add_epi32(_sum3z, _mm256_madd_epi16(_pA0, _pB3));
_sum4z = _mm256_add_epi32(_sum4z, _mm256_madd_epi16(_pA1, _pB0));
_sum5z = _mm256_add_epi32(_sum5z, _mm256_madd_epi16(_pA1, _pB1));
_sum6z = _mm256_add_epi32(_sum6z, _mm256_madd_epi16(_pA1, _pB2));
_sum7z = _mm256_add_epi32(_sum7z, _mm256_madd_epi16(_pA1, _pB3));
#endif // __AVXVNNI__

// __m256i _pBBl = _mm256_permute4x64_epi64(_pBB, _MM_SHUFFLE(1, 0, 1, 0));
// __m256i _pBBh = _mm256_permute4x64_epi64(_pBB, _MM_SHUFFLE(3, 2, 3, 2));
//
// // 01230123 -> 00000000 11111111 22222222 33333333
// __m256i _pB0 = _mm256_shuffle_epi32(_pBBl, _MM_SHUFFLE(0, 0, 0, 0));
// __m256i _pB1 = _mm256_shuffle_epi32(_pBBl, _MM_SHUFFLE(1, 1, 1, 1));
// __m256i _pB2 = _mm256_shuffle_epi32(_pBBl, _MM_SHUFFLE(2, 2, 2, 2));
// __m256i _pB3 = _mm256_shuffle_epi32(_pBBl, _MM_SHUFFLE(3, 3, 3, 3));
// __m256i _pB4 = _mm256_shuffle_epi32(_pBBh, _MM_SHUFFLE(0, 0, 0, 0));
// __m256i _pB5 = _mm256_shuffle_epi32(_pBBh, _MM_SHUFFLE(1, 1, 1, 1));
// __m256i _pB6 = _mm256_shuffle_epi32(_pBBh, _MM_SHUFFLE(2, 2, 2, 2));
// __m256i _pB7 = _mm256_shuffle_epi32(_pBBh, _MM_SHUFFLE(3, 3, 3, 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, _pA0, _pB4);
// _sum5 = _mm256_dpwssd_epi32(_sum5, _pA0, _pB5);
// _sum6 = _mm256_dpwssd_epi32(_sum6, _pA0, _pB6);
// _sum7 = _mm256_dpwssd_epi32(_sum7, _pA0, _pB7);
// #else
// _sum0 = _mm256_add_epi32(_sum0, _mm256_madd_epi16(_pA0, _pB0));
// _sum1 = _mm256_add_epi32(_sum1, _mm256_madd_epi16(_pA0, _pB1));
// _sum2 = _mm256_add_epi32(_sum2, _mm256_madd_epi16(_pA0, _pB2));
// _sum3 = _mm256_add_epi32(_sum3, _mm256_madd_epi16(_pA0, _pB3));
// _sum4 = _mm256_add_epi32(_sum4, _mm256_madd_epi16(_pA0, _pB4));
// _sum5 = _mm256_add_epi32(_sum5, _mm256_madd_epi16(_pA0, _pB5));
// _sum6 = _mm256_add_epi32(_sum6, _mm256_madd_epi16(_pA0, _pB6));
// _sum7 = _mm256_add_epi32(_sum7, _mm256_madd_epi16(_pA0, _pB7));
// #endif // __AVXVNNI__
#endif // __AVX512F__

pA += 16;
pB += 16;
}
#if !__AVX512F__
// 00 11 22 33 44 55 66 77
// 03 10 21 32 47 54 65 76
// 02 13 20 31 46 57 64 75
// 01 12 23 30 45 56 67 74

// 40 51 62 73 04 15 26 37
// 43 50 61 72 07 14 25 36
// 42 53 60 71 06 17 24 35
// 41 52 63 70 05 16 27 34

_sum0z = _sum0z;
_sum1z = _mm256_shuffle_epi32(_sum1z, _MM_SHUFFLE(0, 3, 2, 1));
_sum2z = _mm256_shuffle_epi32(_sum2z, _MM_SHUFFLE(1, 0, 3, 2));
_sum3z = _mm256_shuffle_epi32(_sum3z, _MM_SHUFFLE(2, 1, 0, 3));
_sum4z = _sum4z;
_sum5z = _mm256_shuffle_epi32(_sum5z, _MM_SHUFFLE(0, 3, 2, 1));
_sum6z = _mm256_shuffle_epi32(_sum6z, _MM_SHUFFLE(1, 0, 3, 2));
_sum7z = _mm256_shuffle_epi32(_sum7z, _MM_SHUFFLE(2, 1, 0, 3));

// 00 11 22 33 44 55 66 77
// 10 21 32 03 54 65 76 47
// 20 31 02 13 64 75 46 57
// 30 01 12 23 74 45 56 67

// 40 51 62 73 04 15 26 37
// 50 61 72 43 14 25 36 07
// 60 71 42 53 24 35 06 17
// 70 41 52 63 34 05 16 27

transpose8x8_epi32(_sum0z, _sum1z, _sum2z, _sum3z, _sum4z, _sum5z, _sum6z, _sum7z);

// 0123 4567
// 1230 5674
// 2301 6745
// 3012 7456
// 4567 0123
// 5674 1230
// 6745 2301
// 7456 3012

_sum4z = _mm256_permute4x64_epi64(_sum4z, _MM_SHUFFLE(1, 0, 3, 2));
_sum5z = _mm256_permute4x64_epi64(_sum5z, _MM_SHUFFLE(1, 0, 3, 2));
_sum6z = _mm256_permute4x64_epi64(_sum6z, _MM_SHUFFLE(1, 0, 3, 2));
_sum7z = _mm256_permute4x64_epi64(_sum7z, _MM_SHUFFLE(1, 0, 3, 2));
__m256i _pA1 = _mm256_permute4x64_epi64(_pA0, _MM_SHUFFLE(1, 0, 3, 2));

// 0123 4567
// 1230 5674
// 2301 6745
// 3012 7456
// 0123 4567
// 1230 5674
// 2301 6745
// 3012 7456
// 1230 5674
__m256i _pB0 = _pBB;
__m256i _pB1 = _mm256_shuffle_epi32(_pBB, _MM_SHUFFLE(2, 1, 0, 3));
__m256i _pB2 = _mm256_shuffle_epi32(_pBB, _MM_SHUFFLE(1, 0, 3, 2));
__m256i _pB3 = _mm256_shuffle_epi32(_pBB, _MM_SHUFFLE(0, 3, 2, 1));

_sum0z = _sum0z;
_sum1z = _mm256_shuffle_epi32(_sum1z, _MM_SHUFFLE(2, 1, 0, 3));
_sum2z = _mm256_shuffle_epi32(_sum2z, _MM_SHUFFLE(1, 0, 3, 2));
_sum3z = _mm256_shuffle_epi32(_sum3z, _MM_SHUFFLE(0, 3, 2, 1));
_sum4z = _sum4z;
_sum5z = _mm256_shuffle_epi32(_sum5z, _MM_SHUFFLE(2, 1, 0, 3));
_sum6z = _mm256_shuffle_epi32(_sum6z, _MM_SHUFFLE(1, 0, 3, 2));
_sum7z = _mm256_shuffle_epi32(_sum7z, _MM_SHUFFLE(0, 3, 2, 1));

_sum0 = _mm256_add_epi32(_sum0, _sum0z);
_sum1 = _mm256_add_epi32(_sum1, _sum1z);
_sum2 = _mm256_add_epi32(_sum2, _sum2z);
_sum3 = _mm256_add_epi32(_sum3, _sum3z);
_sum4 = _mm256_add_epi32(_sum4, _sum4z);
_sum5 = _mm256_add_epi32(_sum5, _sum5z);
_sum6 = _mm256_add_epi32(_sum6, _sum6z);
_sum7 = _mm256_add_epi32(_sum7, _sum7z);
#endif // !__AVX512F__
#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);
#else
_sum0 = _mm256_add_epi32(_sum0, _mm256_madd_epi16(_pA0, _pB0));
_sum1 = _mm256_add_epi32(_sum1, _mm256_madd_epi16(_pA0, _pB1));
_sum2 = _mm256_add_epi32(_sum2, _mm256_madd_epi16(_pA0, _pB2));
_sum3 = _mm256_add_epi32(_sum3, _mm256_madd_epi16(_pA0, _pB3));
_sum4 = _mm256_add_epi32(_sum4, _mm256_madd_epi16(_pA1, _pB0));
_sum5 = _mm256_add_epi32(_sum5, _mm256_madd_epi16(_pA1, _pB1));
_sum6 = _mm256_add_epi32(_sum6, _mm256_madd_epi16(_pA1, _pB2));
_sum7 = _mm256_add_epi32(_sum7, _mm256_madd_epi16(_pA1, _pB3));
#endif // __AVXVNNI__
#endif // __AVX512F__

pA += 16;
pB += 16;
}
for (; kk < max_kk; kk += 1)
{
Expand Down Expand Up @@ -1581,34 +1462,28 @@ static void convolution_gemm_transB_packed_tile_int8(const Mat& AT_tile, const M
_sum45 = _mm512_add_epi32(_sum45, _s45);
_sum67 = _mm512_add_epi32(_sum67, _s67);
#else
// 01234567 -> 00112233 / 44556677
__m128i _pB0123 = _mm_unpacklo_epi16(_pB, _pB);
__m128i _pB4567 = _mm_unpackhi_epi16(_pB, _pB);

// 00112233 -> 00001111 / 22223333
__m128i _pB01 = _mm_unpacklo_epi32(_pB0123, _pB0123);
__m128i _pB23 = _mm_unpackhi_epi32(_pB0123, _pB0123);
__m128i _pB45 = _mm_unpacklo_epi32(_pB4567, _pB4567);
__m128i _pB67 = _mm_unpackhi_epi32(_pB4567, _pB4567);

// 00001111 -> 00000000 / 11111111
__m128i _pB0 = _mm_unpacklo_epi64(_pB01, _pB01);
__m128i _pB1 = _mm_unpackhi_epi64(_pB01, _pB01);
__m128i _pB2 = _mm_unpacklo_epi64(_pB23, _pB23);
__m128i _pB3 = _mm_unpackhi_epi64(_pB23, _pB23);
__m128i _pB4 = _mm_unpacklo_epi64(_pB45, _pB45);
__m128i _pB5 = _mm_unpackhi_epi64(_pB45, _pB45);
__m128i _pB6 = _mm_unpacklo_epi64(_pB67, _pB67);
__m128i _pB7 = _mm_unpackhi_epi64(_pB67, _pB67);
// 0123 4567
// 4567 0123
__m128i _pA0 = _pA;
__m128i _pA1 = _mm_shuffle_epi32(_pA, _MM_SHUFFLE(1, 0, 3, 2));

__m256i _s0 = _mm256_cvtepi16_epi32(_mm_mullo_epi16(_pA, _pB0));
__m256i _s1 = _mm256_cvtepi16_epi32(_mm_mullo_epi16(_pA, _pB1));
__m256i _s2 = _mm256_cvtepi16_epi32(_mm_mullo_epi16(_pA, _pB2));
__m256i _s3 = _mm256_cvtepi16_epi32(_mm_mullo_epi16(_pA, _pB3));
__m256i _s4 = _mm256_cvtepi16_epi32(_mm_mullo_epi16(_pA, _pB4));
__m256i _s5 = _mm256_cvtepi16_epi32(_mm_mullo_epi16(_pA, _pB5));
__m256i _s6 = _mm256_cvtepi16_epi32(_mm_mullo_epi16(_pA, _pB6));
__m256i _s7 = _mm256_cvtepi16_epi32(_mm_mullo_epi16(_pA, _pB7));
// 0123 4567
// 3012 7456
// 2301 6745
// 1230 5674
__m128i _pB0 = _pB;
__m128i _pB1 = _mm_shufflehi_epi16(_mm_shufflelo_epi16(_pB, _MM_SHUFFLE(2, 1, 0, 3)), _MM_SHUFFLE(2, 1, 0, 3));
__m128i _pB2 = _mm_shuffle_epi32(_pB, _MM_SHUFFLE(2, 3, 0, 1));
__m128i _pB3 = _mm_shufflehi_epi16(_mm_shufflelo_epi16(_pB, _MM_SHUFFLE(0, 3, 2, 1)), _MM_SHUFFLE(0, 3, 2, 1));

__m256i _s0 = _mm256_cvtepi16_epi32(_mm_mullo_epi16(_pA0, _pB0));
__m256i _s1 = _mm256_cvtepi16_epi32(_mm_mullo_epi16(_pA0, _pB1));
__m256i _s2 = _mm256_cvtepi16_epi32(_mm_mullo_epi16(_pA0, _pB2));
__m256i _s3 = _mm256_cvtepi16_epi32(_mm_mullo_epi16(_pA0, _pB3));
__m256i _s4 = _mm256_cvtepi16_epi32(_mm_mullo_epi16(_pA1, _pB0));
__m256i _s5 = _mm256_cvtepi16_epi32(_mm_mullo_epi16(_pA1, _pB1));
__m256i _s6 = _mm256_cvtepi16_epi32(_mm_mullo_epi16(_pA1, _pB2));
__m256i _s7 = _mm256_cvtepi16_epi32(_mm_mullo_epi16(_pA1, _pB3));

_sum0 = _mm256_add_epi32(_sum0, _s0);
_sum1 = _mm256_add_epi32(_sum1, _s1);
Expand All @@ -1626,6 +1501,72 @@ static void convolution_gemm_transB_packed_tile_int8(const Mat& AT_tile, const M

if (k_end)
{
#if !__AVX512F__
// 00 11 22 33 44 55 66 77
// 03 10 21 32 47 54 65 76
// 02 13 20 31 46 57 64 75
// 01 12 23 30 45 56 67 74

// 40 51 62 73 04 15 26 37
// 43 50 61 72 07 14 25 36
// 42 53 60 71 06 17 24 35
// 41 52 63 70 05 16 27 34

_sum0 = _sum0;
_sum1 = _mm256_shuffle_epi32(_sum1, _MM_SHUFFLE(0, 3, 2, 1));
_sum2 = _mm256_shuffle_epi32(_sum2, _MM_SHUFFLE(1, 0, 3, 2));
_sum3 = _mm256_shuffle_epi32(_sum3, _MM_SHUFFLE(2, 1, 0, 3));
_sum4 = _sum4;
_sum5 = _mm256_shuffle_epi32(_sum5, _MM_SHUFFLE(0, 3, 2, 1));
_sum6 = _mm256_shuffle_epi32(_sum6, _MM_SHUFFLE(1, 0, 3, 2));
_sum7 = _mm256_shuffle_epi32(_sum7, _MM_SHUFFLE(2, 1, 0, 3));

// 00 11 22 33 44 55 66 77
// 10 21 32 03 54 65 76 47
// 20 31 02 13 64 75 46 57
// 30 01 12 23 74 45 56 67

// 40 51 62 73 04 15 26 37
// 50 61 72 43 14 25 36 07
// 60 71 42 53 24 35 06 17
// 70 41 52 63 34 05 16 27

transpose8x8_epi32(_sum0, _sum1, _sum2, _sum3, _sum4, _sum5, _sum6, _sum7);

// 0123 4567
// 1230 5674
// 2301 6745
// 3012 7456
// 4567 0123
// 5674 1230
// 6745 2301
// 7456 3012

_sum4 = _mm256_permute4x64_epi64(_sum4, _MM_SHUFFLE(1, 0, 3, 2));
_sum5 = _mm256_permute4x64_epi64(_sum5, _MM_SHUFFLE(1, 0, 3, 2));
_sum6 = _mm256_permute4x64_epi64(_sum6, _MM_SHUFFLE(1, 0, 3, 2));
_sum7 = _mm256_permute4x64_epi64(_sum7, _MM_SHUFFLE(1, 0, 3, 2));

// 0123 4567
// 1230 5674
// 2301 6745
// 3012 7456
// 0123 4567
// 1230 5674
// 2301 6745
// 3012 7456

_sum0 = _sum0;
_sum1 = _mm256_shuffle_epi32(_sum1, _MM_SHUFFLE(2, 1, 0, 3));
_sum2 = _mm256_shuffle_epi32(_sum2, _MM_SHUFFLE(1, 0, 3, 2));
_sum3 = _mm256_shuffle_epi32(_sum3, _MM_SHUFFLE(0, 3, 2, 1));
_sum4 = _sum4;
_sum5 = _mm256_shuffle_epi32(_sum5, _MM_SHUFFLE(2, 1, 0, 3));
_sum6 = _mm256_shuffle_epi32(_sum6, _MM_SHUFFLE(1, 0, 3, 2));
_sum7 = _mm256_shuffle_epi32(_sum7, _MM_SHUFFLE(0, 3, 2, 1));

#endif // !__AVX512F__

if (out_elempack == 8)
{
#if __AVX512F__
Expand Down

0 comments on commit 7592811

Please sign in to comment.