sglang_v0.5.2/pytorch_2.8.0/third_party/fbgemm/src/FbgemmFPCommon.cc

562 lines
20 KiB
C++

/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree.
*/
#include "fbgemm/FbgemmFPCommon.h"
#include "fbgemm/Fbgemm.h"
#include <array>
#include <cmath>
#include <utility>
namespace fbgemm {
/// class that performs packing of matrix in
/// row-major or col-major format into
/// internal packed blocked-row major format
/// Todo: make it fast with AVX2 transpose
void PackA(int nrow, int ncol, const float* from, int ldim, float* to) {
// for (int r = 0; r < nrow; ++r) {
// for (int c = 0; c < ncol; ++c) {
// to[r + c * nrow] = from[r * ldim + c];
// }
// }
transpose_simd(nrow, ncol, from, ldim, to, nrow);
}
// Each kernel does the following computation that multiplies
// mb x k A sub-matrix with k x b_block_cols*64 B sub-matrix
// for (int j = 0; j < b_block_cols * 64; j += 64) {
// for (int kk = 0; kk < k; ++k) {
// for (int i = 0; i < mb; ++i) {
// c[i][j:j+64] += a[i][kk] * b[kk][j:j+64]
// }
// }
// }
// autotuned kernel splits for various cases m = 1:mb_max
// may need re-autotuning for new uarch
// clang-format off
partition_array_t partition_avx2 = {
// NOTE: clang-format wants to use a different formatting but the current
// formatting should be easier to read.
{
{{ { 0, 0 }, { 0, 0 } } }, // 0
{{ { 1, 1 }, { 0, 0 } } }, // 1
{{ { 2, 1 }, { 0, 0 } } }, // 2
{{ { 3, 1 }, { 0, 0 } } }, // 3
{{ { 4, 1 }, { 0, 0 } } }, // 4
{{ { 5, 1 }, { 0, 0 } } }, // 5
{{ { 6, 1 }, { 0, 0 } } }, // 6
{{ { 5, 1 }, { 2, 1 } } }, // 7
{{ { 4, 2 }, { 0, 0 } } }, // 8
{{ { 5, 1 }, { 4, 1 } } }, // 9
{{ { 5, 2 }, { 0, 0 } } }, // 10
{{ { 6, 1 }, { 5, 1 } } }, // 11
{{ { 6, 2 }, { 0, 0 } } }, // 12
{{ { 5, 2 }, { 3, 1 } } }, // 13
{{ { 6, 2 }, { 2, 1 } } }, // 14
{{ { 5, 3 }, { 0, 0 } } }, // 15
{{ { 6, 2 }, { 4, 1 } } }, // 16
{{ { 6, 2 }, { 5, 1 } } }, // 17
{{ { 6, 3 }, { 0, 0 } } }, // 18
{{ { 5, 3 }, { 4, 1 } } }, // 19
{{ { 5, 4 }, { 0, 0 } } }, // 20
{{ { 5, 3 }, { 6, 1 } } }, // 21
{{ { 6, 3 }, { 4, 1 } } }, // 22
{{ { 6, 3 }, { 5, 1 } } }, // 23
{{ { 6, 4 }, { 0, 0 } } }, // 24
{{ { 5, 5 }, { 0, 0 } } }, // 25
{{ { 5, 4 }, { 6, 1 } } }, // 26
{{ { 6, 4 }, { 3, 1 } } }, // 27
{{ { 6, 4 }, { 4, 1 } } }, // 28
{{ { 6, 4 }, { 5, 1 } } }, // 29
{{ { 6, 5 }, { 0, 0 } } }, // 30
{{ { 6, 5 }, { 1, 1 } } }, // 31
{{ { 6, 5 }, { 2, 1 } } }, // 32
{{ { 6, 5 }, { 3, 1 } } }, // 33
{{ { 6, 5 }, { 4, 1 } } }, // 34
{{ { 6, 5 }, { 5, 1 } } }, // 35
{{ { 6, 6 }, { 0, 0 } } }, // 36
{{ { 6, 6 }, { 1, 1 } } }, // 37
{{ { 6, 6 }, { 2, 1 } } }, // 38
{{ { 6, 6 }, { 3, 1 } } }, // 39
{{ { 6, 6 }, { 4, 1 } } }, // 40
{{ { 6, 6 }, { 5, 1 } } }, // 41
{{ { 6, 7 }, { 0, 0 } } }, // 42
{{ { 6, 7 }, { 1, 1 } } }, // 43
{{ { 6, 7 }, { 2, 1 } } }, // 44
{{ { 6, 7 }, { 3, 1 } } }, // 45
{{ { 6, 7 }, { 4, 1 } } }, // 46
{{ { 6, 7 }, { 5, 1 } } }, // 47
{{ { 6, 8 }, { 0, 0 } } }, // 48
{{ { 6, 8 }, { 1, 1 } } }, // 49
{{ { 6, 8 }, { 2, 1 } } }, // 50
{{ { 6, 8 }, { 3, 1 } } }, // 51
{{ { 6, 8 }, { 4, 1 } } }, // 52
{{ { 6, 8 }, { 5, 1 } } }, // 53
{{ { 6, 9 }, { 0, 0 } } }, // 54
{{ { 6, 9 }, { 1, 1 } } }, // 55
{{ { 6, 9 }, { 2, 1 } } }, // 56
{{ { 6, 9 }, { 3, 1 } } }, // 57
{{ { 6, 9 }, { 4, 1 } } }, // 58
{{ { 6, 9 }, { 5, 1 } } }, // 59
{{ { 6, 10 }, { 0, 0 } } }, // 60
{{ { 6, 10 }, { 1, 1 } } }, // 61
{{ { 6, 10 }, { 2, 1 } } }, // 62
{{ { 6, 10 }, { 3, 1 } } }, // 63
{{ { 6, 10 }, { 4, 1 } } }, // 64
{{ { 6, 10 }, { 5, 1 } } }, // 65
{{ { 6, 11 }, { 0, 0 } } }, // 66
{{ { 6, 11 }, { 1, 1 } } }, // 67
{{ { 6, 11 }, { 2, 1 } } }, // 68
{{ { 6, 11 }, { 3, 1 } } }, // 69
{{ { 6, 11 }, { 4, 1 } } }, // 70
{{ { 6, 11 }, { 5, 1 } } }, // 71
{{ { 6, 12 }, { 0, 0 } } }, // 72
{{ { 6, 12 }, { 1, 1 } } }, // 73
{{ { 6, 12 }, { 2, 1 } } }, // 74
{{ { 6, 12 }, { 3, 1 } } }, // 75
{{ { 6, 12 }, { 4, 1 } } }, // 76
{{ { 6, 12 }, { 5, 1 } } }, // 77
{{ { 6, 13 }, { 0, 0 } } }, // 78
{{ { 6, 13 }, { 1, 1 } } }, // 79
{{ { 6, 13 }, { 2, 1 } } }, // 80
{{ { 6, 13 }, { 3, 1 } } }, // 81
{{ { 6, 13 }, { 4, 1 } } }, // 82
{{ { 6, 13 }, { 5, 1 } } }, // 83
{{ { 6, 14 }, { 0, 0 } } }, // 84
{{ { 6, 14 }, { 1, 1 } } }, // 85
{{ { 6, 14 }, { 2, 1 } } }, // 86
{{ { 6, 14 }, { 3, 1 } } }, // 87
{{ { 6, 14 }, { 4, 1 } } }, // 88
{{ { 6, 14 }, { 5, 1 } } }, // 89
{{ { 6, 15 }, { 0, 0 } } }, // 90
{{ { 6, 15 }, { 1, 1 } } }, // 91
{{ { 6, 15 }, { 2, 1 } } }, // 92
{{ { 6, 15 }, { 3, 1 } } }, // 93
{{ { 6, 15 }, { 4, 1 } } }, // 94
{{ { 6, 15 }, { 5, 1 } } }, // 95
{{ { 6, 16 }, { 0, 0 } } }, // 96
{{ { 6, 16 }, { 1, 1 } } }, // 97
{{ { 6, 16 }, { 2, 1 } } }, // 98
{{ { 6, 16 }, { 3, 1 } } }, // 99
{{ { 6, 16 }, { 4, 1 } } }, // 100
{{ { 6, 16 }, { 5, 1 } } }, // 101
{{ { 6, 17 }, { 0, 0 } } }, // 102
{{ { 6, 17 }, { 1, 1 } } }, // 103
{{ { 6, 17 }, { 2, 1 } } }, // 104
{{ { 6, 17 }, { 3, 1 } } }, // 105
{{ { 6, 17 }, { 4, 1 } } }, // 106
{{ { 6, 17 }, { 5, 1 } } }, // 107
{{ { 6, 18 }, { 0, 0 } } }, // 108
{{ { 6, 18 }, { 1, 1 } } }, // 109
{{ { 6, 18 }, { 2, 1 } } }, // 110
{{ { 6, 18 }, { 3, 1 } } }, // 111
{{ { 6, 18 }, { 4, 1 } } }, // 112
{{ { 6, 18 }, { 5, 1 } } }, // 113
{{ { 6, 19 }, { 0, 0 } } }, // 114
{{ { 6, 19 }, { 1, 1 } } }, // 115
{{ { 6, 19 }, { 2, 1 } } }, // 116
{{ { 6, 19 }, { 3, 1 } } }, // 117
{{ { 6, 19 }, { 4, 1 } } }, // 118
{{ { 6, 19 }, { 5, 1 } } }, // 119
{{ { 6, 20 }, { 0, 0 } } }, // 120
}
};
// autotuned kernel splits for various cases m = 1:mb_max
// may need re-autotuning for new uarch
// clang-format off
partition_array_t partition_sve128 = {
// NOTE: clang-format wants to use a different formatting but the current
// formatting should be easier to read.
{
{{ { 0, 0 }, { 0, 0 } } }, // 0
{{ { 1, 1 }, { 0, 0 } } }, // 1
{{ { 2, 1 }, { 0, 0 } } }, // 2
{{ { 3, 1 }, { 0, 0 } } }, // 3
{{ { 4, 1 }, { 0, 0 } } }, // 4
{{ { 5, 1 }, { 0, 0 } } }, // 5
{{ { 6, 1 }, { 0, 0 } } }, // 6
{{ { 5, 1 }, { 2, 1 } } }, // 7
{{ { 4, 2 }, { 0, 0 } } }, // 8
{{ { 5, 1 }, { 4, 1 } } }, // 9
{{ { 5, 2 }, { 0, 0 } } }, // 10
{{ { 6, 1 }, { 5, 1 } } }, // 11
{{ { 6, 2 }, { 0, 0 } } }, // 12
{{ { 5, 2 }, { 3, 1 } } }, // 13
{{ { 6, 2 }, { 2, 1 } } }, // 14
{{ { 5, 3 }, { 0, 0 } } }, // 15
{{ { 6, 2 }, { 4, 1 } } }, // 16
{{ { 6, 2 }, { 5, 1 } } }, // 17
{{ { 6, 3 }, { 0, 0 } } }, // 18
{{ { 5, 3 }, { 4, 1 } } }, // 19
{{ { 5, 4 }, { 0, 0 } } }, // 20
{{ { 5, 3 }, { 6, 1 } } }, // 21
{{ { 6, 3 }, { 4, 1 } } }, // 22
{{ { 6, 3 }, { 5, 1 } } }, // 23
{{ { 6, 4 }, { 0, 0 } } }, // 24
{{ { 5, 5 }, { 0, 0 } } }, // 25
{{ { 5, 4 }, { 6, 1 } } }, // 26
{{ { 6, 4 }, { 3, 1 } } }, // 27
{{ { 6, 4 }, { 4, 1 } } }, // 28
{{ { 6, 4 }, { 5, 1 } } }, // 29
{{ { 6, 5 }, { 0, 0 } } }, // 30
{{ { 6, 5 }, { 1, 1 } } }, // 31
{{ { 6, 5 }, { 2, 1 } } }, // 32
{{ { 6, 5 }, { 3, 1 } } }, // 33
{{ { 6, 5 }, { 4, 1 } } }, // 34
{{ { 6, 5 }, { 5, 1 } } }, // 35
{{ { 6, 6 }, { 0, 0 } } }, // 36
{{ { 6, 6 }, { 1, 1 } } }, // 37
{{ { 6, 6 }, { 2, 1 } } }, // 38
{{ { 6, 6 }, { 3, 1 } } }, // 39
{{ { 6, 6 }, { 4, 1 } } }, // 40
{{ { 6, 6 }, { 5, 1 } } }, // 41
{{ { 6, 7 }, { 0, 0 } } }, // 42
{{ { 6, 7 }, { 1, 1 } } }, // 43
{{ { 6, 7 }, { 2, 1 } } }, // 44
{{ { 6, 7 }, { 3, 1 } } }, // 45
{{ { 6, 7 }, { 4, 1 } } }, // 46
{{ { 6, 7 }, { 5, 1 } } }, // 47
{{ { 6, 8 }, { 0, 0 } } }, // 48
{{ { 6, 8 }, { 1, 1 } } }, // 49
{{ { 6, 8 }, { 2, 1 } } }, // 50
{{ { 6, 8 }, { 3, 1 } } }, // 51
{{ { 6, 8 }, { 4, 1 } } }, // 52
{{ { 6, 8 }, { 5, 1 } } }, // 53
{{ { 6, 9 }, { 0, 0 } } }, // 54
{{ { 6, 9 }, { 1, 1 } } }, // 55
{{ { 6, 9 }, { 2, 1 } } }, // 56
{{ { 6, 9 }, { 3, 1 } } }, // 57
{{ { 6, 9 }, { 4, 1 } } }, // 58
{{ { 6, 9 }, { 5, 1 } } }, // 59
{{ { 6, 10 }, { 0, 0 } } }, // 60
{{ { 6, 10 }, { 1, 1 } } }, // 61
{{ { 6, 10 }, { 2, 1 } } }, // 62
{{ { 6, 10 }, { 3, 1 } } }, // 63
{{ { 6, 10 }, { 4, 1 } } }, // 64
{{ { 6, 10 }, { 5, 1 } } }, // 65
{{ { 6, 11 }, { 0, 0 } } }, // 66
{{ { 6, 11 }, { 1, 1 } } }, // 67
{{ { 6, 11 }, { 2, 1 } } }, // 68
{{ { 6, 11 }, { 3, 1 } } }, // 69
{{ { 6, 11 }, { 4, 1 } } }, // 70
{{ { 6, 11 }, { 5, 1 } } }, // 71
{{ { 6, 12 }, { 0, 0 } } }, // 72
{{ { 6, 12 }, { 1, 1 } } }, // 73
{{ { 6, 12 }, { 2, 1 } } }, // 74
{{ { 6, 12 }, { 3, 1 } } }, // 75
{{ { 6, 12 }, { 4, 1 } } }, // 76
{{ { 6, 12 }, { 5, 1 } } }, // 77
{{ { 6, 13 }, { 0, 0 } } }, // 78
{{ { 6, 13 }, { 1, 1 } } }, // 79
{{ { 6, 13 }, { 2, 1 } } }, // 80
{{ { 6, 13 }, { 3, 1 } } }, // 81
{{ { 6, 13 }, { 4, 1 } } }, // 82
{{ { 6, 13 }, { 5, 1 } } }, // 83
{{ { 6, 14 }, { 0, 0 } } }, // 84
{{ { 6, 14 }, { 1, 1 } } }, // 85
{{ { 6, 14 }, { 2, 1 } } }, // 86
{{ { 6, 14 }, { 3, 1 } } }, // 87
{{ { 6, 14 }, { 4, 1 } } }, // 88
{{ { 6, 14 }, { 5, 1 } } }, // 89
{{ { 6, 15 }, { 0, 0 } } }, // 90
{{ { 6, 15 }, { 1, 1 } } }, // 91
{{ { 6, 15 }, { 2, 1 } } }, // 92
{{ { 6, 15 }, { 3, 1 } } }, // 93
{{ { 6, 15 }, { 4, 1 } } }, // 94
{{ { 6, 15 }, { 5, 1 } } }, // 95
{{ { 6, 16 }, { 0, 0 } } }, // 96
{{ { 6, 16 }, { 1, 1 } } }, // 97
{{ { 6, 16 }, { 2, 1 } } }, // 98
{{ { 6, 16 }, { 3, 1 } } }, // 99
{{ { 6, 16 }, { 4, 1 } } }, // 100
{{ { 6, 16 }, { 5, 1 } } }, // 101
{{ { 6, 17 }, { 0, 0 } } }, // 102
{{ { 6, 17 }, { 1, 1 } } }, // 103
{{ { 6, 17 }, { 2, 1 } } }, // 104
{{ { 6, 17 }, { 3, 1 } } }, // 105
{{ { 6, 17 }, { 4, 1 } } }, // 106
{{ { 6, 17 }, { 5, 1 } } }, // 107
{{ { 6, 18 }, { 0, 0 } } }, // 108
{{ { 6, 18 }, { 1, 1 } } }, // 109
{{ { 6, 18 }, { 2, 1 } } }, // 110
{{ { 6, 18 }, { 3, 1 } } }, // 111
{{ { 6, 18 }, { 4, 1 } } }, // 112
{{ { 6, 18 }, { 5, 1 } } }, // 113
{{ { 6, 19 }, { 0, 0 } } }, // 114
{{ { 6, 19 }, { 1, 1 } } }, // 115
{{ { 6, 19 }, { 2, 1 } } }, // 116
{{ { 6, 19 }, { 3, 1 } } }, // 117
{{ { 6, 19 }, { 4, 1 } } }, // 118
{{ { 6, 19 }, { 5, 1 } } }, // 119
{{ { 6, 20 }, { 0, 0 } } }, // 120
}
};
partition_array_t partition_neon = {
// NOTE: clang-format wants to use a different formatting but the current
// formatting should be easier to read.
{
{{ { 0, 0 }, { 0, 0 } } }, // 0
{{ { 1, 1 }, { 0, 0 } } }, // 1
{{ { 2, 1 }, { 0, 0 } } }, // 2
{{ { 3, 1 }, { 0, 0 } } }, // 3
{{ { 4, 1 }, { 0, 0 } } }, // 4
{{ { 5, 1 }, { 0, 0 } } }, // 5
{{ { 6, 1 }, { 0, 0 } } }, // 6
{{ { 7, 1 }, { 0, 0 } } }, // 7
{{ { 8, 1 }, { 0, 0 } } }, // 8
{{ { 5, 1 }, { 4, 1 } } }, // 9
{{ { 5, 2 }, { 0, 0 } } }, // 10
{{ { 6, 1 }, { 5, 1 } } }, // 11
{{ { 6, 2 }, { 0, 0 } } }, // 12
{{ { 7, 1 }, { 6, 1 } } }, // 13
{{ { 8, 1 }, { 6, 1 } } }, // 14
{{ { 8, 1 }, { 7, 1 } } }, // 15
{{ { 8, 2 }, { 0, 0 } } }, // 16
{{ { 8, 2 }, { 1, 1 } } }, // 17
{{ { 6, 3 }, { 0, 0 } } }, // 18
{{ { 8, 2 }, { 3, 1 } } }, // 19
{{ { 5, 4 }, { 0, 0 } } }, // 20
{{ { 5, 3 }, { 6, 1 } } }, // 21
{{ { 8, 2 }, { 6, 1 } } }, // 22
{{ { 8, 2 }, { 7, 1 } } }, // 23
{{ { 8, 3 }, { 0, 0 } } }, // 24
{{ { 8, 3 }, { 1, 1 } } }, // 25
{{ { 8, 3 }, { 2, 1 } } }, // 26
{{ { 8, 3 }, { 3, 1 } } }, // 27
{{ { 8, 3 }, { 4, 1 } } }, // 28
{{ { 8, 3 }, { 5, 1 } } }, // 29
{{ { 8, 3 }, { 6, 1 } } }, // 30
{{ { 8, 3 }, { 7, 1 } } }, // 31
{{ { 8, 4 }, { 0, 0 } } }, // 32
{{ { 8, 4 }, { 1, 1 } } }, // 33
{{ { 8, 4 }, { 2, 1 } } }, // 34
{{ { 8, 4 }, { 3, 1 } } }, // 35
{{ { 8, 4 }, { 4, 1 } } }, // 36
{{ { 8, 4 }, { 5, 1 } } }, // 37
{{ { 8, 4 }, { 6, 1 } } }, // 38
{{ { 8, 4 }, { 7, 1 } } }, // 39
{{ { 8, 5 }, { 0, 0 } } }, // 40
{{ { 8, 5 }, { 1, 1 } } }, // 41
{{ { 8, 5 }, { 2, 1 } } }, // 42
{{ { 8, 5 }, { 3, 1 } } }, // 43
{{ { 8, 5 }, { 4, 1 } } }, // 44
{{ { 8, 5 }, { 5, 1 } } }, // 45
{{ { 8, 5 }, { 6, 1 } } }, // 46
{{ { 8, 5 }, { 7, 1 } } }, // 47
{{ { 8, 6 }, { 0, 0 } } }, // 48
{{ { 8, 6 }, { 1, 1 } } }, // 49
{{ { 8, 6 }, { 2, 1 } } }, // 50
{{ { 8, 6 }, { 3, 1 } } }, // 51
{{ { 8, 6 }, { 4, 1 } } }, // 52
{{ { 8, 6 }, { 5, 1 } } }, // 53
{{ { 8, 6 }, { 6, 1 } } }, // 54
{{ { 8, 6 }, { 7, 1 } } }, // 55
{{ { 8, 7 }, { 0, 0 } } }, // 56
{{ { 8, 7 }, { 1, 1 } } }, // 57
{{ { 8, 7 }, { 2, 1 } } }, // 58
{{ { 8, 7 }, { 3, 1 } } }, // 59
{{ { 8, 7 }, { 4, 1 } } }, // 60
{{ { 8, 7 }, { 5, 1 } } }, // 61
{{ { 8, 7 }, { 6, 1 } } }, // 62
{{ { 8, 7 }, { 7, 1 } } }, // 63
{{ { 8, 8 }, { 0, 0 } } }, // 64
{{ { 8, 8 }, { 1, 1 } } }, // 65
{{ { 8, 8 }, { 2, 1 } } }, // 66
{{ { 8, 8 }, { 3, 1 } } }, // 67
{{ { 8, 8 }, { 4, 1 } } }, // 68
{{ { 8, 8 }, { 5, 1 } } }, // 69
{{ { 8, 8 }, { 6, 1 } } }, // 70
{{ { 8, 8 }, { 7, 1 } } }, // 71
{{ { 8, 9 }, { 0, 0 } } }, // 72
{{ { 8, 9 }, { 1, 1 } } }, // 73
{{ { 8, 9 }, { 2, 1 } } }, // 74
{{ { 8, 9 }, { 3, 1 } } }, // 75
{{ { 8, 9 }, { 4, 1 } } }, // 76
{{ { 8, 9 }, { 5, 1 } } }, // 77
{{ { 8, 9 }, { 6, 1 } } }, // 78
{{ { 8, 9 }, { 7, 1 } } }, // 79
{{ { 8, 10 }, { 0, 0 } } }, // 80
{{ { 8, 10 }, { 1, 1 } } }, // 81
{{ { 8, 10 }, { 2, 1 } } }, // 82
{{ { 8, 10 }, { 3, 1 } } }, // 83
{{ { 8, 10 }, { 4, 1 } } }, // 84
{{ { 8, 10 }, { 5, 1 } } }, // 85
{{ { 8, 10 }, { 6, 1 } } }, // 86
{{ { 8, 10 }, { 7, 1 } } }, // 87
{{ { 8, 11 }, { 0, 0 } } }, // 88
{{ { 8, 11 }, { 1, 1 } } }, // 89
{{ { 8, 11 }, { 2, 1 } } }, // 90
{{ { 8, 11 }, { 3, 1 } } }, // 91
{{ { 8, 11 }, { 4, 1 } } }, // 92
{{ { 8, 11 }, { 5, 1 } } }, // 93
{{ { 8, 11 }, { 6, 1 } } }, // 94
{{ { 8, 11 }, { 7, 1 } } }, // 95
{{ { 8, 12 }, { 0, 0 } } }, // 96
{{ { 8, 12 }, { 1, 1 } } }, // 97
{{ { 8, 12 }, { 2, 1 } } }, // 98
{{ { 8, 12 }, { 3, 1 } } }, // 99
{{ { 8, 12 }, { 4, 1 } } }, // 100
{{ { 8, 12 }, { 5, 1 } } }, // 101
{{ { 8, 12 }, { 6, 1 } } }, // 102
{{ { 8, 12 }, { 7, 1 } } }, // 103
{{ { 8, 13 }, { 0, 0 } } }, // 104
{{ { 8, 13 }, { 1, 1 } } }, // 105
{{ { 8, 13 }, { 2, 1 } } }, // 106
{{ { 8, 13 }, { 3, 1 } } }, // 107
{{ { 8, 13 }, { 4, 1 } } }, // 108
{{ { 8, 13 }, { 5, 1 } } }, // 109
{{ { 8, 13 }, { 6, 1 } } }, // 110
{{ { 8, 13 }, { 7, 1 } } }, // 111
{{ { 8, 14 }, { 0, 0 } } }, // 112
{{ { 8, 14 }, { 1, 1 } } }, // 113
{{ { 8, 14 }, { 2, 1 } } }, // 114
{{ { 8, 14 }, { 3, 1 } } }, // 115
{{ { 8, 14 }, { 4, 1 } } }, // 116
{{ { 8, 14 }, { 5, 1 } } }, // 117
{{ { 8, 14 }, { 6, 1 } } }, // 118
{{ { 8, 14 }, { 7, 1 } } }, // 119
{{ { 8, 15 }, { 0, 0 } } }, // 120
}
};
partition_array_t partition_avx512 = {
// NOTE: clang-format wants to use a different formatting but the current
// formatting should be easier to read.
{
{{ { 0, 0 }, { 0, 0 } } }, // 0
{{ { 1, 1 }, { 0, 0 } } }, // 1
{{ { 2, 1 }, { 0, 0 } } }, // 2
{{ { 3, 1 }, { 0, 0 } } }, // 3
{{ { 4, 1 }, { 0, 0 } } }, // 4
{{ { 5, 1 }, { 0, 0 } } }, // 5
{{ { 6, 1 }, { 0, 0 } } }, // 6
{{ { 7, 1 }, { 0, 0 } } }, // 7
{{ { 8, 1 }, { 0, 0 } } }, // 8
{{ { 9, 1 }, { 0, 0 } } }, // 9
{{ { 10, 1 }, { 0, 0 } } }, // 10
{{ { 11, 1 }, { 0, 0 } } }, // 11
{{ { 12, 1 }, { 0, 0 } } }, // 12
{{ { 13, 1 }, { 0, 0 } } }, // 13
{{ { 14, 1 }, { 0, 0 } } }, // 14
{{ { 8, 1 }, { 7, 1 } } }, // 15
{{ { 8, 2 }, { 0, 0 } } }, // 16
{{ { 9, 1 }, { 8, 1 } } }, // 17
{{ { 9, 2 }, { 0, 0 } } }, // 18
{{ { 10, 1 }, { 9, 1 } } }, // 19
{{ { 10, 2 }, { 0, 0 } } }, // 20
{{ { 11, 1 }, { 10, 1 } } }, // 21
{{ { 11, 2 }, { 0, 0 } } }, // 22
{{ { 12, 1 }, { 11, 1 } } }, // 23
{{ { 12, 2 }, { 0, 0 } } }, // 24
{{ { 13, 1 }, { 12, 1 } } }, // 25
{{ { 13, 2 }, { 0, 0 } } }, // 26
{{ { 14, 1 }, { 13, 1 } } }, // 27
{{ { 14, 2 }, { 0, 0 } } }, // 28
{{ { 10, 2 }, { 9, 1 } } }, // 29
{{ { 10, 3 }, { 0, 0 } } }, // 30
{{ { 11, 2 }, { 9, 1 } } }, // 31
{{ { 11, 2 }, { 10, 1 } } }, // 32
{{ { 11, 3 }, { 0, 0 } } }, // 33
{{ { 12, 2 }, { 10, 1 } } }, // 34
{{ { 12, 2 }, { 11, 1 } } }, // 35
{{ { 12, 3 }, { 0, 0 } } }, // 36
{{ { 13, 2 }, { 11, 1 } } }, // 37
{{ { 13, 2 }, { 12, 1 } } }, // 38
{{ { 13, 3 }, { 0, 0 } } }, // 39
{{ { 14, 2 }, { 12, 1 } } }, // 40
{{ { 14, 2 }, { 13, 1 } } }, // 41
{{ { 14, 3 }, { 0, 0 } } }, // 42
{{ { 11, 3 }, { 10, 1 } } }, // 43
{{ { 11, 4 }, { 0, 0 } } }, // 44
{{ { 12, 3 }, { 9, 1 } } }, // 45
{{ { 12, 3 }, { 10, 1 } } }, // 46
{{ { 12, 3 }, { 11, 1 } } }, // 47
{{ { 12, 4 }, { 0, 0 } } }, // 48
{{ { 13, 3 }, { 10, 1 } } }, // 49
{{ { 13, 3 }, { 11, 1 } } }, // 50
{{ { 13, 3 }, { 12, 1 } } }, // 51
{{ { 13, 4 }, { 0, 0 } } }, // 52
{{ { 14, 3 }, { 11, 1 } } }, // 53
{{ { 14, 3 }, { 12, 1 } } }, // 54
{{ { 14, 3 }, { 13, 1 } } }, // 55
{{ { 14, 4 }, { 0, 0 } } }, // 56
{{ { 12, 4 }, { 9, 1 } } }, // 57
{{ { 12, 4 }, { 10, 1 } } }, // 58
{{ { 12, 4 }, { 11, 1 } } }, // 59
{{ { 12, 5 }, { 0, 0 } } }, // 60
{{ { 13, 4 }, { 9, 1 } } }, // 61
{{ { 13, 4 }, { 10, 1 } } }, // 62
{{ { 13, 4 }, { 11, 1 } } }, // 63
{{ { 13, 4 }, { 12, 1 } } }, // 64
{{ { 13, 5 }, { 0, 0 } } }, // 65
{{ { 14, 4 }, { 10, 1 } } }, // 66
{{ { 14, 4 }, { 11, 1 } } }, // 67
{{ { 14, 4 }, { 12, 1 } } }, // 68
{{ { 14, 4 }, { 13, 1 } } }, // 69
{{ { 14, 5 }, { 0, 0 } } }, // 70
{{ { 12, 5 }, { 11, 1 } } }, // 71
{{ { 12, 6 }, { 0, 0 } } }, // 72
{{ { 13, 5 }, { 8, 1 } } }, // 73
{{ { 13, 5 }, { 9, 1 } } }, // 74
{{ { 13, 5 }, { 10, 1 } } }, // 75
{{ { 13, 5 }, { 11, 1 } } }, // 76
{{ { 13, 5 }, { 12, 1 } } }, // 77
{{ { 13, 6 }, { 0, 0 } } }, // 78
{{ { 14, 5 }, { 9, 1 } } }, // 79
{{ { 14, 5 }, { 10, 1 } } }, // 80
{{ { 14, 5 }, { 11, 1 } } }, // 81
{{ { 14, 5 }, { 12, 1 } } }, // 82
{{ { 14, 5 }, { 13, 1 } } }, // 83
{{ { 14, 6 }, { 0, 0 } } }, // 84
{{ { 13, 6 }, { 7, 1 } } }, // 85
{{ { 13, 6 }, { 8, 1 } } }, // 86
{{ { 13, 6 }, { 9, 1 } } }, // 87
{{ { 13, 6 }, { 10, 1 } } }, // 88
{{ { 13, 6 }, { 11, 1 } } }, // 89
{{ { 13, 6 }, { 12, 1 } } }, // 90
{{ { 13, 7 }, { 0, 0 } } }, // 91
{{ { 14, 6 }, { 8, 1 } } }, // 92
{{ { 14, 6 }, { 9, 1 } } }, // 93
{{ { 14, 6 }, { 10, 1 } } }, // 94
{{ { 14, 6 }, { 11, 1 } } }, // 95
{{ { 14, 6 }, { 12, 1 } } }, // 96
{{ { 14, 6 }, { 13, 1 } } }, // 97
{{ { 14, 7 }, { 0, 0 } } }, // 98
{{ { 13, 7 }, { 8, 1 } } }, // 99
{{ { 13, 7 }, { 9, 1 } } }, // 100
{{ { 13, 7 }, { 10, 1 } } }, // 101
{{ { 13, 7 }, { 11, 1 } } }, // 102
{{ { 13, 7 }, { 12, 1 } } }, // 103
{{ { 13, 8 }, { 0, 0 } } }, // 104
{{ { 14, 7 }, { 7, 1 } } }, // 105
{{ { 14, 7 }, { 8, 1 } } }, // 106
{{ { 14, 7 }, { 9, 1 } } }, // 107
{{ { 14, 7 }, { 10, 1 } } }, // 108
{{ { 14, 7 }, { 11, 1 } } }, // 109
{{ { 14, 7 }, { 12, 1 } } }, // 110
{{ { 14, 7 }, { 13, 1 } } }, // 111
{{ { 14, 8 }, { 0, 0 } } }, // 112
{{ { 13, 8 }, { 9, 1 } } }, // 113
{{ { 13, 8 }, { 10, 1 } } }, // 114
{{ { 13, 8 }, { 11, 1 } } }, // 115
{{ { 13, 8 }, { 12, 1 } } }, // 116
{{ { 13, 9 }, { 0, 0 } } }, // 117
{{ { 14, 8 }, { 6, 1 } } }, // 118
{{ { 14, 8 }, { 7, 1 } } }, // 119
{{ { 14, 8 }, { 8, 1 } } }, // 120
}
};
}