Files
2026-07-13 13:33:03 +08:00

42 lines
1.4 KiB
Common Lisp

#ifdef MNN_SUPPORT_FP16
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
#endif
#define GLOBAL_SIZE_2_DIMS \
__private const int global_size_dim0, __private const int global_size_dim1,
#define DEAL_NON_UNIFORM_DIM2(input1, input2) \
if (input1 >= global_size_dim0 || input2 >= global_size_dim1) { \
return; \
}
__kernel void range_buf(GLOBAL_SIZE_2_DIMS
__global const INPUT_TYPE* input0,
__global const INPUT_TYPE* input2,
__global OUTPUT_TYPE* output,
__private const int size
) {
const int x = get_global_id(0);
const int y = get_global_id(1);
DEAL_NON_UNIFORM_DIM2(x, y);
int index = x << 2;
int4 index4 = (int4)(index, index + 1, index + 2, index + 3);
INPUT_TYPE start = input0[0];
INPUT_TYPE step = input2[0];
OUTPUT_TYPE4 value = (OUTPUT_TYPE4)start + CONVERT_OUTPUT4(index4) * (OUTPUT_TYPE4)step;
#ifdef PACK_LEAVE
if(index + 3 >= size){
OUTPUT_TYPE* value_ptr = (OUTPUT_TYPE*)&value;
for(int i = 0; i < size - index; ++i){
output[index + i] = value_ptr[i];
}
}else{
#endif
vstore4(value, 0, output + index);
#ifdef PACK_LEAVE
}
#endif
}