#include "gpu/gpu_reorder_pd.hpp"
#include "gpu/intel/primitive_conf.hpp"
#include "gpu/intel/utils.hpp"
#ifndef GPU_INTEL_REORDER_CONFIG_HPP
#define GPU_INTEL_REORDER_CONFIG_HPP
namespace dnnl {
namespace impl {
namespace gpu {
namespace intel {
namespace reorder {
using pd_t = gpu_reorder_pd_t;
enum class custom_kernel_t {
none,
dense_vector,
unroll_16b,
unroll_16b16c,
unroll_16a16b,
plain_to_ABcd84a42b,
vectorize_last_dim,
plain_to_ABxx8ayb,
plain_xFxE_to_abcdef,
transpose8x8,
transpose16x16,
nchw,
unaligned_sizes,
alt,
vectorize_groups,
pad_innermost,
xb_to_xab_xba
};
struct block_desc_t {
dim_idx_t dim_idx;
int blk_size;
int step_size;
};
#define LOOP_NEST_LEVEL 4
struct vectorize_last_dim_t {
dim_idx_t vector_dim;
int rescale_coeff;
block_desc_t src_vct[LOOP_NEST_LEVEL];
block_desc_t dst_vct[LOOP_NEST_LEVEL];
block_desc_t src_blk[LOOP_NEST_LEVEL];
block_desc_t dst_blk[LOOP_NEST_LEVEL];
int src_blk_limits[MAX_NDIMS];
int dst_blk_limits[MAX_NDIMS];
int src_vect_limit;
int dst_vect_limit;
};
struct vectorize_group_t {
dim_idx_t vector_dim;
dim_idx_t src_loop_dim;
dim_idx_t dst_loop_dim;
int group_size;
int innermost_size;
};
struct xb_to_xab_xba_t {
int vd;
dim_t blk_size;
dim_idx_t src_blk_dim;
dim_t src_blk_coeff;
dim_idx_t dst_blk_dim;
dim_t dst_blk_coeff;
};
union implementation_t {
vectorize_group_t vg;
xb_to_xab_xba_t ab;
vectorize_last_dim_t vld;
};
struct conf_t {
bool has_padding;
quantization_t src_quant, dst_quant;
sum_quantization_t sum_quant;
custom_kernel_t implementation;
int ndims;
size_t nelems;
bool subbyte_pack = false;
bool require_stateless_addressing;
compute::dispatch_t dispatch;
int sub_group_size;
memory_desc_info_t src_md_info;
memory_desc_info_t dst_md_info;
implementation_t aux_data;
};
} } } } }
#endif