562 lines
20 KiB
C++
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
|
|
}
|
|
};
|
|
|
|
}
|