#ifndef GPU_INTEL_INCLUDE_SCALES_H
#define GPU_INTEL_INCLUDE_SCALES_H
inline void block_read_scales(float4 *data, int idx, int sg_local_id,
__global float *runtime_scales) {
if (OC > idx + (SUB_GROUP_SIZE * 4)) {
*data = as_float4(intel_sub_group_block_read4(
(__global uint *)&runtime_scales[idx]));
} else {
float local_dat[4] = {};
for (int i = 0; i < 4; ++i)
if (idx + ((i + 1) * SUB_GROUP_SIZE) <= OC) {
local_dat[i] = as_float(intel_sub_group_block_read(
(__global uint *)&runtime_scales[idx
+ (SUB_GROUP_SIZE * i)]));
} else if (idx + (i * SUB_GROUP_SIZE) + sg_local_id < OC) {
local_dat[i] = runtime_scales[idx + (SUB_GROUP_SIZE * i)
+ sg_local_id];
}
(*data).s0 = local_dat[0];
(*data).s1 = local_dat[1];
(*data).s2 = local_dat[2];
(*data).s3 = local_dat[3];
}
}
#endif