arrange of proj structure
This commit is contained in:
@@ -59,41 +59,22 @@ typedef union scalar_pack {
|
||||
#define LEFT_RIGHT_ANS_SCALAR_PARAM 4
|
||||
#define ANS_SCALAR_PARAM 5
|
||||
|
||||
typedef struct matrix_op_mode {
|
||||
int16_t operation_style; /* PANEL_OP, BUFFER_OP, KERNEL_OP */
|
||||
int16_t parameter_style; /* RIGHT_ANS_PARAM, LEFT_RIGHT_ANS_PARAM, e.g. */
|
||||
} matrix_op_mode;
|
||||
|
||||
/* Mirrors StgSharp.Mathematics.Numeric.MatrixParallelTaskPackage<T> (128 bytes). */
|
||||
#define MAT_TASK(T) \
|
||||
struct { \
|
||||
MAT_KERNEL(T) * left; /* Offset 0: left matrix kernel base */ \
|
||||
MAT_KERNEL(T) * right; /* Offset 8: right matrix kernel base */ \
|
||||
MAT_KERNEL(T) * result; /* Offset 16: result matrix kernel base */ \
|
||||
int32_t element_size; /* Offset 24: sizeof(T) */ \
|
||||
int32_t reserved_ptr0; /* Offset 28: reserved/extension slot */ \
|
||||
int32_t left_prim_offset; /* Offset 32 */ \
|
||||
int32_t left_prim_stride; /* Offset 36 */ \
|
||||
int32_t left_sec_offset; /* Offset 40 */ \
|
||||
int32_t left_sec_stride; /* Offset 44 */ \
|
||||
int32_t right_prim_offset; /* Offset 48 */ \
|
||||
int32_t right_prim_stride; /* Offset 52 */ \
|
||||
int32_t right_sec_offset; /* Offset 56 */ \
|
||||
int32_t right_sec_stride; /* Offset 60 */ \
|
||||
int32_t result_prim_offset; /* Offset 64 */ \
|
||||
int32_t result_prim_stride; /* Offset 68 */ \
|
||||
int32_t result_sec_offset; /* Offset 72 */ \
|
||||
int32_t result_sec_stride; /* Offset 76 */ \
|
||||
scalar_pack *scalar; /* Offset 80 */ \
|
||||
void *compute_handle; /* Offset 88 */ \
|
||||
int32_t prim_count; /* Offset 96 */ \
|
||||
matrix_op_mode compute_mode; /* Offset 100 */ \
|
||||
int32_t sec_count; /* Offset 104 */ \
|
||||
int32_t reserved_int0; /* Offset 108 */ \
|
||||
int32_t prim_tile_offset; /* Offset 112 */ \
|
||||
int32_t sec_tile_offset; /* Offset 116 */ \
|
||||
int32_t prim_cols_in_tile; /* Offset 120 */ \
|
||||
int32_t sec_cols_in_tile; /* Offset 124 */ \
|
||||
#define MAT_TASK(T) \
|
||||
struct { \
|
||||
MAT_KERNEL(T) * mat_0; /* Offset 0: 1st matrix kernel base */ \
|
||||
MAT_KERNEL(T) * mat_1; /* Offset 8: 2nd matrix kernel base */ \
|
||||
MAT_KERNEL(T) * mat_2; /* Offset 16: 3rd matrix kernel base */ \
|
||||
void *scalar; /* Offset 24: scalar pack */ \
|
||||
int32_t i; /* Offset 32: row index of the result tile */ \
|
||||
int32_t j; /* Offset 36: column index of the result tile */ \
|
||||
int32_t k; /* Offset 40: column index of the result tile */ \
|
||||
int32_t common_i; /* Offset 44: row index of the result tile */ \
|
||||
int32_t common_j; /* Offset 48: column index of the result tile */ \
|
||||
int32_t common_k; /* Offset 52: column index of the result tile */ \
|
||||
uint32_t mask; /* Offset 56: mask for task schedualing, not useful in C side */ \
|
||||
uint32_t reverse; /* Offset 60: reserved for future use */ \
|
||||
scalar_pack padding; /* Offset 64: padding to make the struct size 128 bytes */ \
|
||||
}
|
||||
typedef struct matrix_task matrix_task;
|
||||
|
||||
@@ -103,6 +84,9 @@ static_assert(sizeof(matrix_task) == 128, "matrix_parallel_task_package size mis
|
||||
static_assert(sizeof(MAT_TASK(float)) == 128, "matrix_parallel_task_package size mismatch");
|
||||
#endif
|
||||
|
||||
typedef void(SN_DECL *UNIFIKERNELPROC)(matrix_task *task);
|
||||
#define UNIFIKERNRLPROC(T_arch, T_feature, T_op) mat_proc_##T_op##_##T_arch##_##T_feature
|
||||
|
||||
#pragma region matrix buffer operation function type
|
||||
|
||||
typedef void(SN_DECL *BUF_PROC_AS)(mat_kernel *ans, scalar_pack *scalar, int count);
|
||||
@@ -247,17 +231,15 @@ typedef int(SN_DECL *INDEX_PAIR)(short const *stram, uint32_t target, int length
|
||||
#pragma endregion
|
||||
|
||||
typedef struct mat_intrinsic {
|
||||
BUF_PROC_LRA buffer_add;
|
||||
BUF_PROC_AS buffer_fill;
|
||||
BUF_PROC_RAS buffer_scalar_mul;
|
||||
BUF_PROC_LRA buffer_sub;
|
||||
KER_PROC_RA buffer_transpose;
|
||||
PANEL_PROC build_panel;
|
||||
PANEL_PROC clear_panel;
|
||||
PNL_PROC_LRA ker_fma;
|
||||
KERTILE_PROC_LRA ker_tile_fma;
|
||||
PIVOTPROC pivot;
|
||||
PANEL_PROC store_panel;
|
||||
UNIFIKERNELPROC buffer_add;
|
||||
UNIFIKERNELPROC buffer_fill;
|
||||
UNIFIKERNELPROC buffer_scalar_mul;
|
||||
UNIFIKERNELPROC buffer_sub;
|
||||
UNIFIKERNELPROC buffer_transpose;
|
||||
UNIFIKERNELPROC clear_panel;
|
||||
UNIFIKERNELPROC ker_fma;
|
||||
UNIFIKERNELPROC ker_tile_fma;
|
||||
UNIFIKERNELPROC pivot;
|
||||
|
||||
} mat_intrinsic;
|
||||
|
||||
@@ -270,21 +252,7 @@ typedef struct sn_intrinsic {
|
||||
mat_intrinsic mat[4];
|
||||
} sn_intrinsic;
|
||||
|
||||
typedef enum elment_type { F32 = 0, F64 = 1, I32 = 2, I64 = 3 } element_type;
|
||||
|
||||
typedef enum most_advanced_instruction {
|
||||
#ifdef _MSC_VER
|
||||
SSE = __IA_SUPPORT_SSE42,
|
||||
AVX256 = __IA_SUPPORT_VECTOR256,
|
||||
AVX512 = __IA_SUPPORT_VECTOR512,
|
||||
NEON
|
||||
#else
|
||||
SSE,
|
||||
AVX256,
|
||||
AVX512,
|
||||
NEON
|
||||
#endif
|
||||
} most_advanced_instruction;
|
||||
typedef enum elment_mask { F32 = 0, F64 = 1, I32 = 2, I64 = 3 } element_mask;
|
||||
|
||||
#include "sn_target.h"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user