@@ -667,6 +667,7 @@ struct vk_device_struct {
667667 vk_pipeline pipeline_softplus[2];
668668 vk_pipeline pipeline_step[2];
669669 vk_pipeline pipeline_round[2];
670+ vk_pipeline pipeline_ceil[2];
670671
671672 vk_pipeline pipeline_add1_f16_f16;
672673 vk_pipeline pipeline_add1_f16_f32;
@@ -3840,6 +3841,7 @@ static void ggml_vk_load_shaders(vk_device& device) {
38403841 CREATE_UNARY(softplus)
38413842 CREATE_UNARY(step)
38423843 CREATE_UNARY(round)
3844+ CREATE_UNARY(ceil)
38433845#undef CREATE_UNARY
38443846
38453847#define CREATE_UNARY_RTE(name) \
@@ -8270,6 +8272,8 @@ static vk_pipeline ggml_vk_op_get_pipeline(ggml_backend_vk_context * ctx, const
82708272 return ctx->device->pipeline_step[dst->type == GGML_TYPE_F16];
82718273 case GGML_UNARY_OP_ROUND:
82728274 return ctx->device->pipeline_round[dst->type == GGML_TYPE_F16];
8275+ case GGML_UNARY_OP_CEIL:
8276+ return ctx->device->pipeline_ceil[dst->type == GGML_TYPE_F16];
82738277 default:
82748278 break;
82758279 }
@@ -11294,6 +11298,7 @@ static bool ggml_vk_build_graph(ggml_backend_vk_context * ctx, ggml_cgraph * cgr
1129411298 case GGML_UNARY_OP_SOFTPLUS:
1129511299 case GGML_UNARY_OP_STEP:
1129611300 case GGML_UNARY_OP_ROUND:
11301+ case GGML_UNARY_OP_CEIL:
1129711302 break;
1129811303 default:
1129911304 return false;
@@ -11649,6 +11654,7 @@ static bool ggml_vk_build_graph(ggml_backend_vk_context * ctx, ggml_cgraph * cgr
1164911654 case GGML_UNARY_OP_SOFTPLUS:
1165011655 case GGML_UNARY_OP_STEP:
1165111656 case GGML_UNARY_OP_ROUND:
11657+ case GGML_UNARY_OP_CEIL:
1165211658 ggml_vk_unary(ctx, compute_ctx, src0, node);
1165311659 break;
1165411660 default:
@@ -11928,6 +11934,7 @@ static bool ggml_vk_compute_forward(ggml_backend_vk_context * ctx, ggml_cgraph *
1192811934 case GGML_UNARY_OP_SOFTPLUS:
1192911935 case GGML_UNARY_OP_STEP:
1193011936 case GGML_UNARY_OP_ROUND:
11937+ case GGML_UNARY_OP_CEIL:
1193111938 buf = tensor->buffer;
1193211939 break;
1193311940 default:
@@ -13533,6 +13540,7 @@ static bool ggml_backend_vk_device_supports_op(ggml_backend_dev_t dev, const ggm
1353313540 case GGML_UNARY_OP_SOFTPLUS:
1353413541 case GGML_UNARY_OP_STEP:
1353513542 case GGML_UNARY_OP_ROUND:
13543+ case GGML_UNARY_OP_CEIL:
1353613544 return ggml_is_contiguous(op->src[0]) &&
1353713545 (op->src[0]->type == GGML_TYPE_F32 || op->src[0]->type == GGML_TYPE_F16) &&
1353813546 (op->type == GGML_TYPE_F32 || op->type == GGML_TYPE_F16) &&
@@ -14455,6 +14463,9 @@ static void ggml_vk_check_results_0(ggml_backend_vk_context * ctx, ggml_cgraph *
1445514463 case GGML_UNARY_OP_ROUND:
1445614464 tensor_clone = ggml_round(ggml_ctx, src_clone[0]);
1445714465 break;
14466+ case GGML_UNARY_OP_CEIL:
14467+ tensor_clone = ggml_ceil(ggml_ctx, src_clone[0]);
14468+ break;
1445814469 default:
1445914470 std::cerr << "Missing vk_check_results OP: " << ggml_op_name(tensor->op) << std::endl;
1446014471 GGML_ABORT("fatal error");
0 commit comments