inline bool use_adreno_moe_kernels(const ggml_backend_opencl_context *backend_ctx, const ggml_tensor *tensor) {
GGML_UNUSED(backend_ctx);
int ne01 = tensor->ne[1];
- return (((strstr(tensor->name, "ffn") != NULL) && (strstr(tensor->name, "exps") != NULL)) || (strstr(tensor->name, "as") != NULL)) && (ne01 % 64 == 0);
+ return (((strstr(tensor->name, "ffn") != NULL) && (strstr(tensor->name, "exps") != NULL)) || (strstr(tensor->name, "as") != NULL)) && (ne01 % 32 == 0);
}
inline bool enable_adreno_trans_weight(const ggml_backend_opencl_context *backend_ctx, const ggml_tensor *tensor) {
CL_CHECK(status);
// set thread grid
- global_size[0] = static_cast<size_t>(ne01);
+ global_size[0] = static_cast<size_t>(((ne01 + 63) / 64) * 64);
global_size[1] = 4;
global_size[2] = static_cast<size_t>(ne20);
local_size[1] = 4;
CL_CHECK(status);
// set thread grid
- global_size[0] = static_cast<size_t>(ne01);
+ global_size[0] = static_cast<size_t>(((ne01 + 63) / 64) * 64);
global_size[1] = 4;
global_size[2] = static_cast<size_t>(ne20);
local_size[1] = 4;
CL_CHECK(status);
// set thread grid
- global_size[0] = static_cast<size_t>(ne01);
+ global_size[0] = static_cast<size_t>(((ne01 + 63) / 64) * 64);
global_size[1] = 4;
global_size[2] = static_cast<size_t>(ne20);
local_size[1] = 4;
CL_CHECK(status);
// set thread grid
- global_size[0] = static_cast<size_t>(ne01);
+ global_size[0] = static_cast<size_t>(((ne01 + 63) / 64) * 64);
global_size[1] = 4;
global_size[2] = static_cast<size_t>(ne20);
local_size[1] = 4;
CL_CHECK(status);
// set thread grid
- global_size[0] = static_cast<size_t>(ne01);
+ global_size[0] = static_cast<size_t>(((ne01 + 63) / 64) * 64);
global_size[1] = 4;
global_size[2] = static_cast<size_t>(ne20);
local_size[1] = 4;
CL_CHECK(status);
// set thread grid
- global_size[0] = static_cast<size_t>(ne01);
+ global_size[0] = static_cast<size_t>(((ne01 + 63) / 64) * 64);
global_size[1] = 4;
global_size[2] = static_cast<size_t>(ne20);
local_size[1] = 4;
CL_CHECK(status);
// set thread grid
- global_size[0] = static_cast<size_t>(ne01);
+ global_size[0] = static_cast<size_t>(((ne01 + 63) / 64) * 64);
global_size[1] = 4;
global_size[2] = static_cast<size_t>(ne20);
local_size[1] = 4;
CL_CHECK(status);
// set thread grid
- global_size[0] = static_cast<size_t>(ne01);
+ global_size[0] = static_cast<size_t>(((ne01 + 63) / 64) * 64);
global_size[1] = 4;
global_size[2] = static_cast<size_t>(ne20);
local_size[1] = 4;
uint i01 = get_global_id(0);
uint i02 = get_global_id(2);
+ if (i01 >= ne01) {
+ return;
+ }
+
uint ne00_blk = ne00 / QK4_0;
uint src_blk_offset = i00 + i01 * ne00_blk + i02 * ne00_blk * ne01;
uint dst_blk_offset = i01 + i00 * ne01 + i02 * ne00_blk * ne01;
uint i01 = get_global_id(0);
uint i02 = get_global_id(2);
+ if (i01 >= ne01) {
+ return;
+ }
+
uint ne00_blk = ne00 / QK4_0;
uint dst_blk_offset = i00 + i01 * ne00_blk + i02 * ne00_blk * ne01;
uint src_d_offset = i01 + i00 * ne01 + i02 * ne00_blk * ne01;
uint i01 = get_global_id(0);
uint i02 = get_global_id(2);
+ if (i01 >= ne01) {
+ return;
+ }
+
uint ne00_blk = ne00 / QK4_1;
uint src_blk_offset = i00 + i01 * ne00_blk + i02 * ne00_blk * ne01;
uint dst_blk_offset = i01 + i00 * ne01 + i02 * ne00_blk * ne01;
uint i01 = get_global_id(0);
uint i02 = get_global_id(2);
+ if (i01 >= ne01) {
+ return;
+ }
+
uint ne00_blk = ne00 / QK4_1;
uint dst_blk_offset = i00 + i01 * ne00_blk + i02 * ne00_blk * ne01;
uint src_dm_offset = i01 + i00 * ne01 + i02 * ne00_blk * ne01;
uint i01 = get_global_id(0);
uint i02 = get_global_id(2);
+ if (i01 >= ne01) {
+ return;
+ }
+
uint ne00_blk = ne00 / QK5_0;
uint src_blk_offset = i00 + i01 * ne00_blk + i02 * ne00_blk * ne01;
uint dst_blk_offset = i01 + i00 * ne01 + i02 * ne00_blk * ne01;
uint i01 = get_global_id(0);
uint i02 = get_global_id(2);
+ if (i01 >= ne01) {
+ return;
+ }
+
uint ne00_blk = ne00 / QK5_0;
uint dst_blk_offset = i00 + i01 * ne00_blk + i02 * ne00_blk * ne01;
uint src_blk_offset = i01 + i00 * ne01 + i02 * ne00_blk * ne01;
uint i01 = get_global_id(0);
uint i02 = get_global_id(2);
+ if (i01 >= ne01) {
+ return;
+ }
+
uint ne00_blk = ne00 / QK5_1;
uint src_blk_offset = i00 + i01 * ne00_blk + i02 * ne00_blk * ne01;
uint dst_blk_offset = i01 + i00 * ne01 + i02 * ne00_blk * ne01;
uint i01 = get_global_id(0);
uint i02 = get_global_id(2);
+ if (i01 >= ne01) {
+ return;
+ }
+
uint ne00_blk = ne00 / QK5_1;
uint dst_blk_offset = i00 + i01 * ne00_blk + i02 * ne00_blk * ne01;
uint src_blk_offset = i01 + i00 * ne01 + i02 * ne00_blk * ne01;
uint i01 = get_global_id(0);
uint i02 = get_global_id(2);
+ if (i01 >= ne01) {
+ return;
+ }
+
uint ne00_blk = ne00 / QK_K;
uint src_blk_offset = i00 + i01 * ne00_blk + i02 * ne00_blk * ne01;
uint dst_blk_offset = i01 + i00 * ne01 + i02 * ne00_blk * ne01;
uint i01 = get_global_id(0); // row index
uint i02 = get_global_id(2); // batch index
+ if (i01 >= ne01) {
+ return;
+ }
+
uint ne00_blk = ne00 / QK_K;
uint src_blk_offset = i01 + i00 * ne01 + i02 * ne00_blk * ne01;
uint i01 = get_global_id(0);
uint i02 = get_global_id(2);
+ if (i01 >= ne01) {
+ return;
+ }
+
uint ne00_blk = ne00 / QK_K;
uint src_blk_offset = i00 + i01 * ne00_blk + i02 * ne00_blk * ne01;
uint dst_blk_offset = i01 + i00 * ne01 + i02 * ne00_blk * ne01;
uint i01 = get_global_id(0); // row index
uint i02 = get_global_id(2); // batch index
+ if (i01 >= ne01) {
+ return;
+ }
+
uint ne00_blk = ne00 / QK_K;
uint src_blk_offset = i01 + i00 * ne01 + i02 * ne00_blk * ne01;
uint i01 = get_global_id(0);
uint i02 = get_global_id(2);
+ if (i01 >= ne01) {
+ return;
+ }
+
uint ne00_blk = ne00 / QK_K;
uint src_blk_offset = i00 + i01 * ne00_blk + i02 * ne00_blk * ne01;
uint i01 = get_global_id(0); // row index
uint i02 = get_global_id(2); // batch index
+ if (i01 >= ne01) {
+ return;
+ }
+
uint ne00_blk = ne00 / QK_K;
uint src_blk_offset = i01 + i00 * ne01 + i02 * ne00_blk * ne01;
uint i01 = get_global_id(0);
uint i02 = get_global_id(2);
+ if (i01 >= ne01) {
+ return;
+ }
+
uint ne00_blk = ne00 / QK_MXFP4;
uint src_blk_offset = i00 + i01 * ne00_blk + i02 * ne00_blk * ne01;
uint dst_blk_offset = i01 + i00 * ne01 + i02 * ne00_blk * ne01;
uint i01 = get_global_id(0);
uint i02 = get_global_id(2);
+ if (i01 >= ne01) {
+ return;
+ }
+
uint ne00_blk = ne00 / QK_MXFP4;
uint dst_blk_offset = i00 + i01 * ne00_blk + i02 * ne00_blk * ne01;
uint src_d_offset = i01 + i00 * ne01 + i02 * ne00_blk * ne01;
uint block_id_n = get_global_id(2); // n_tile
// Boundary check
- if (((get_global_id(0) + block_id_m * TILESIZE_M) >= ne01) || (block_id_n >= total_tiles[0])) {
+ if (block_id_n >= total_tiles[0]) {
return;
}
dotx16_reduce8(reg_a, shared_b, reg_c.hi, 16);
}
+ if ((get_global_id(0) + block_id_m * TILESIZE_M) >= ne01) {
+ return;
+ }
+
// Load poster router and share in LM
__local uint out_idx[TILESIZE_N];
uint block_id_n = get_global_id(2); // n_tile
// Boundary check
- if (((get_global_id(0) + block_id_m * TILESIZE_M) >= ne01) || (block_id_n >= total_tiles[0])) {
+ if (block_id_n >= total_tiles[0]) {
return;
}
dotx16_reduce8(reg_a, shared_b, reg_c.hi, 16);
}
+ if ((get_global_id(0) + block_id_m * TILESIZE_M) >= ne01) {
+ return;
+ }
+
// Load poster router and share in LM
__local uint out_idx[TILESIZE_N];
uint block_id_n = get_global_id(2); // n_tile
// Boundary check
- if (((get_global_id(0) + block_id_m * TILESIZE_M) >= ne01) || (block_id_n >= total_tiles[0])) {
+ if (block_id_n >= total_tiles[0]) {
return;
}
dotx16_reduce8(reg_a, shared_b, reg_c.hi, 16);
}
+ if ((get_global_id(0) + block_id_m * TILESIZE_M) >= ne01) {
+ return;
+ }
+
// Load poster router and share in LM
__local uint out_idx[TILESIZE_N];
uint block_id_n = get_global_id(2); // n_tile
// Boundary check
- if (((get_global_id(0) + block_id_m * TILESIZE_M) >= ne01) || (block_id_n >= total_tiles[0])) {
+ if (block_id_n >= total_tiles[0]) {
return;
}
dotx16_reduce8(reg_a, shared_b, reg_c.hi, 16);
}
+ if ((get_global_id(0) + block_id_m * TILESIZE_M) >= ne01) {
+ return;
+ }
+
// Load post router and share in LM
__local uint out_idx[TILESIZE_N];
uint block_id_n = get_global_id(2); // n_tile
// Boundary check
- if (((get_global_id(0) + block_id_m * TILESIZE_M) >= ne01) || (block_id_n >= total_tiles[0])) {
+ if (block_id_n >= total_tiles[0]) {
return;
}
dotx16_reduce8(reg_a, shared_b, reg_c.hi, 16);
}
+ if ((get_global_id(0) + block_id_m * TILESIZE_M) >= ne01) {
+ return;
+ }
+
// Load poster router and share in LM
__local uint out_idx[TILESIZE_N];
uint block_id_n = get_global_id(2); // n_tile
// Boundary check
- if (((get_global_id(0) + block_id_m * TILESIZE_M) >= ne01) || (block_id_n >= total_tiles[0])) {
+ if (block_id_n >= total_tiles[0]) {
return;
}
dotx16_reduce8(reg_a, shared_b, reg_c.hi, 16);
}
+ if ((get_global_id(0) + block_id_m * TILESIZE_M) >= ne01) {
+ return;
+ }
+
// Load poster router and share in LM
__local uint out_idx[TILESIZE_N];
uint block_id_n = get_global_id(2); // n_tile
// Boundary check
- if (((get_global_id(0) + block_id_m * TILESIZE_M) >= ne01) || (block_id_n >= total_tiles[0])) {
+ if (block_id_n >= total_tiles[0]) {
return;
}
dotx16_reduce8(reg_a, shared_b, reg_c.hi, 16);
}
+ if ((get_global_id(0) + block_id_m * TILESIZE_M) >= ne01) {
+ return;
+ }
+
// Load post router and share in LM
__local uint out_idx[TILESIZE_N];
uint block_id_n = get_global_id(2); // n_tile
// Boundary check
- if (((get_global_id(0) + block_id_m * TILESIZE_M) >= ne01) || (block_id_n >= total_tiles[0])) {
+ if (block_id_n >= total_tiles[0]) {
return;
}
dotx16_reduce8(reg_a, shared_b, reg_c.hi, 16);
}
+ if ((get_global_id(0) + block_id_m * TILESIZE_M) >= ne01) {
+ return;
+ }
+
// Load post router and share in LM
__local uint out_idx[TILESIZE_N];
uint sgid = get_local_id(1);
uint slid = get_sub_group_local_id();
+ if (i01 >= ne01) {
+ return;
+ }
+
uint i11 = i20 % ne11;
uint expert_id = src2[i20];
uint sgid = get_local_id(1);
uint slid = get_sub_group_local_id();
+ if (i01 >= ne01) {
+ return;
+ }
+
uint i11 = i20 % ne11;
uint expert_id = src2[i20];
uint sgid = get_local_id(1);
uint slid = get_sub_group_local_id();
+ if (i01 >= ne01) {
+ return;
+ }
+
uint i11 = i20 % ne11;
uint expert_id = src2[i20];
uint sgid = get_local_id(1);
uint slid = get_sub_group_local_id();
+ if (i01 >= ne01) {
+ return;
+ }
+
uint i11 = i20 % ne11;
uint expert_id = src2[i20];
uint sgid = get_local_id(1);
uint slid = get_sub_group_local_id();
+ if (i01 >= ne01) {
+ return;
+ }
+
uint i11 = i20 % ne11;
uint expert_id = src2[i20];
uint sgid = get_local_id(1);
uint slid = get_sub_group_local_id();
+ if (i01 >= ne01) {
+ return;
+ }
+
uint i11 = i20 % ne11;
uint expert_id = src2[i20];
uint sgid = get_local_id(1);
uint slid = get_sub_group_local_id();
+ if (i01 >= ne01) {
+ return;
+ }
+
uint i11 = i20 % ne11;
uint expert_id = src2[i20];
uint sgid = get_local_id(1);
uint slid = get_sub_group_local_id();
+ if (i01 >= ne01) {
+ return;
+ }
+
uint i11 = i20 % ne11;
uint expert_id = src2[i20];