From e744a10924ccb7499a494dd3d23e6279d19b89d3 Mon Sep 17 00:00:00 2001 From: Ganesh Kethamalla Date: Thu, 28 Aug 2025 03:40:32 -0700 Subject: [PATCH 1/2] added new kernel for signum function Signed-off-by: Ganesh Kethamalla --- examples/simple/simple-backend-tsi.cpp | 85 ++++++++++++++++++++-- ggml/include/ggml-tsavorite.h | 2 + ggml/src/ggml-tsavorite/ggml-tsavorite.cpp | 12 +++ tsi-pkg-build.sh | 2 +- 4 files changed, 93 insertions(+), 8 deletions(-) diff --git a/examples/simple/simple-backend-tsi.cpp b/examples/simple/simple-backend-tsi.cpp index 2f56f341680..b6b8919e9e1 100644 --- a/examples/simple/simple-backend-tsi.cpp +++ b/examples/simple/simple-backend-tsi.cpp @@ -36,7 +36,11 @@ float test_input_1[GGML_TSAVORITE_KERNEL_TYPE_COUNT][NUM_ELEMENTS] = { //ABS Kernel {1.1, -4.4, 10, -5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, -23, 24, 25, -26, 27, -28, 29, -30, 31, -32.6}, //SIN Kernel - {1.1, 4.4, 10, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 20, 20, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32.6} + {1.1, 4.4, 10, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 20, 20, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32.6}, + //SGN Kernel + {-5, -3, -1, 0, 1, 2, 3, 10, -7, 8, -9, 0, 4, -2, 6, -6, 15, -15, 20, -20, 25, -25, 30, -30, 100, -100, 50, -50, 7, -8, 9, -10} + + }; float test_input_2[GGML_TSAVORITE_KERNEL_TYPE_COUNT][NUM_ELEMENTS] = { //ADD KERNEL @@ -55,7 +59,9 @@ float test_input_2[GGML_TSAVORITE_KERNEL_TYPE_COUNT][NUM_ELEMENTS] = { //ABS KERNEL input not used {1.1, 2.2, 5, 10, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32}, //SIN Kernel input not used - {1.1, 2.2, 5, 10, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32} + {1.1, 2.2, 5, 10, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32}, + //SGN Kernel + {-5, -3, -1, 0, 1, 2, 3, 10, -7, 8, -9, 0, 4, -2, 6, -6, 15, -15, 20, -20, 25, -25, 30, -30, 100, -100, 50, -50, 7, -8, 9, -10} }; float test_result[GGML_TSAVORITE_KERNEL_TYPE_COUNT][NUM_ELEMENTS] = { @@ -74,7 +80,9 @@ float test_result[GGML_TSAVORITE_KERNEL_TYPE_COUNT][NUM_ELEMENTS] = { //ABS Kernel {1.1, 4.4, 10, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32.6}, //SIN Kernel - {0.891207, -0.951602, -0.544021, -0.958924, -0.958924, -0.279416, 0.656987, 0.989358, 0.412118, -0.544021, -0.999990, -0.536573, 0.420167, 0.990607, 0.650288, -0.287903, -0.961398, -0.750987, 0.149877, 0.912945, 0.912945, 0.912945, -0.846220, -0.905578, -0.132352, 0.762559, 0.956376, 0.270906, -0.663634, -0.988032, -0.404039, 0.926149} + {0.891207, -0.951602, -0.544021, -0.958924, -0.958924, -0.279416, 0.656987, 0.989358, 0.412118, -0.544021, -0.999990, -0.536573, 0.420167, 0.990607, 0.650288, -0.287903, -0.961398, -0.750987, 0.149877, 0.912945, 0.912945, 0.912945, -0.846220, -0.905578, -0.132352, 0.762559, 0.956376, 0.270906, -0.663634, -0.988032, -0.404039, 0.926149}, + //SGN Kernel + {-1, -1, -1, 0, 1, 1, 1, 1, -1, 1, -1, 0, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1} }; float test_input_scale_1[GGML_TSAVORITE_KERNEL_TYPE_COUNT][NUM_ELEMENTS_SCALE] = { @@ -125,7 +133,26 @@ float test_input_scale_1[GGML_TSAVORITE_KERNEL_TYPE_COUNT][NUM_ELEMENTS_SCALE] = -9, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -16, 25, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} + -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + //SGN KERNEL + { + -5.3, -4.8, -4.2, -3.9, -3.5, -3.2, -3.0, -2.8, -2.6, -2.4, + -2.2, -2.0, -1.9, -1.7, -1.5, -1.3, -1.1, -1.0, -0.8, -0.6, + -0.5, -0.3, -0.1, 0.0, 0.1, 0.3, 0.5, 0.6, 0.8, 1.0, + 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.4, 2.6, 2.8, 3.0, + 3.2, 3.4, 3.6, 3.8, 4.0, 4.2, 4.4, 4.6, 4.8, 5.0, + -6.1, -6.0, -5.8, -5.6, -5.4, -5.2, -5.0, -4.9, -4.7, -4.5, + -4.3, -4.1, -3.7, -3.4, -3.1, -2.7, -2.5, -2.3, -2.1, -1.8, + -1.4, -1.2, -1.0, -0.7, -0.4, -0.2, 0.2, 0.4, 0.7, 1.1, + 1.3, 1.5, 1.7, 1.9, 2.1, 2.3, 2.5, 2.7, 2.9, 3.1, + 3.3, 3.5, 3.7, 3.9, 4.1, 4.3, 4.5, 4.7, 4.9, 5.1, + -7.5, -7.2, -6.9, -6.6, -6.3, -6.0, -5.7, -5.4, -5.1, -4.8, + -4.5, -4.2, -3.9, -3.6, -3.3, -3.0, -2.7, -2.4, -2.1, -1.8, + -1.5, -1.2, -0.9, -0.6, -0.3, 0.0, 0.3, 0.6, 0.9, 1.2, + 1.5, 1.8, 2.1, 2.4, 2.7, 3.0, 3.3, 3.6, 3.9, 4.2, + 4.5, 4.8, 5.1, 5.4, 5.7, 6.0, 6.3, 6.6, 6.9, 7.2, + 7.5, 7.8, 8.0 + } }; float test_input_scale_2[GGML_TSAVORITE_KERNEL_TYPE_COUNT][NUM_ELEMENTS_SCALE] = { @@ -177,7 +204,26 @@ float test_input_scale_2[GGML_TSAVORITE_KERNEL_TYPE_COUNT][NUM_ELEMENTS_SCALE] = -9, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -16, 25, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} + -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + //SGN KERNEL + { + -5.3, -4.8, -4.2, -3.9, -3.5, -3.2, -3.0, -2.8, -2.6, -2.4, + -2.2, -2.0, -1.9, -1.7, -1.5, -1.3, -1.1, -1.0, -0.8, -0.6, + -0.5, -0.3, -0.1, 0.0, 0.1, 0.3, 0.5, 0.6, 0.8, 1.0, + 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.4, 2.6, 2.8, 3.0, + 3.2, 3.4, 3.6, 3.8, 4.0, 4.2, 4.4, 4.6, 4.8, 5.0, + -6.1, -6.0, -5.8, -5.6, -5.4, -5.2, -5.0, -4.9, -4.7, -4.5, + -4.3, -4.1, -3.7, -3.4, -3.1, -2.7, -2.5, -2.3, -2.1, -1.8, + -1.4, -1.2, -1.0, -0.7, -0.4, -0.2, 0.2, 0.4, 0.7, 1.1, + 1.3, 1.5, 1.7, 1.9, 2.1, 2.3, 2.5, 2.7, 2.9, 3.1, + 3.3, 3.5, 3.7, 3.9, 4.1, 4.3, 4.5, 4.7, 4.9, 5.1, + -7.5, -7.2, -6.9, -6.6, -6.3, -6.0, -5.7, -5.4, -5.1, -4.8, + -4.5, -4.2, -3.9, -3.6, -3.3, -3.0, -2.7, -2.4, -2.1, -1.8, + -1.5, -1.2, -0.9, -0.6, -0.3, 0.0, 0.3, 0.6, 0.9, 1.2, + 1.5, 1.8, 2.1, 2.4, 2.7, 3.0, 3.3, 3.6, 3.9, 4.2, + 4.5, 4.8, 5.1, 5.4, 5.7, 6.0, 6.3, 6.6, 6.9, 7.2, + 7.5, 7.8, 8.0 + } }; float test_result_scale[GGML_TSAVORITE_KERNEL_TYPE_COUNT][NUM_ELEMENTS_SCALE] = { // ADD KERNEL @@ -237,7 +283,26 @@ float test_result_scale[GGML_TSAVORITE_KERNEL_TYPE_COUNT][NUM_ELEMENTS_SCALE] = 0.841471, 0.841471, 0.841471, 0.841471, 0.841471, 0.841471, 0.841471, 0.841471, 0.841471, 0.841471, -0.841471, 0.841471, 0.841471, 0.841471, 0.841471, 0.841471, 0.841471, 0.841471, 0.841471, 0.841471, 0.841471, 0.841471, 0.841471, 0.841471, 0.841471, 0.841471, 0.841471, 0.841471, 0.841471, 0.841471, 0.841471, 0.841471, - 0.841471, 0.841471, 0.841471} + 0.841471, 0.841471, 0.841471}, + //SGN KERNEL + { + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1 + } }; // This is a simple model with two tensors a and b @@ -407,6 +472,9 @@ static struct ggml_cgraph * build_graph(const simple_model& model, enum ggml_tsa case GGML_TSAVORITE_KERNEL_TYPE_SIN: result = ggml_sin(ctx0, model.a); break; + case GGML_TSAVORITE_KERNEL_TYPE_SGN: + result = ggml_sgn(ctx0, model.a); + break; default: ggml_free(ctx0); fprintf(stderr, "\n Non Supported Operation \n"); @@ -457,6 +525,8 @@ enum ggml_tsavorite_kernel_type convert_testcase_to_ops_type (const char *testCa return GGML_TSAVORITE_KERNEL_TYPE_ABS; else if (!strcmp(testCase,"sin")) return GGML_TSAVORITE_KERNEL_TYPE_SIN; + else if (!strcmp(testCase,"sgn")) + return GGML_TSAVORITE_KERNEL_TYPE_SGN; fprintf(stderr, "\n un-supported test case %s hence running default test case which is add operation \n", testCase); return GGML_TSAVORITE_KERNEL_TYPE_ADD; @@ -486,7 +556,8 @@ int main(int argc, char *argv[]) { if (ops_type == GGML_TSAVORITE_KERNEL_TYPE_SQRT || ops_type == GGML_TSAVORITE_KERNEL_TYPE_NEG || ops_type == GGML_TSAVORITE_KERNEL_TYPE_ABS || - ops_type == GGML_TSAVORITE_KERNEL_TYPE_SIN) + ops_type == GGML_TSAVORITE_KERNEL_TYPE_SIN || + ops_type == GGML_TSAVORITE_KERNEL_TYPE_SGN) num_of_input_tensors = NUM_INPUT_URINARY_TENSORS; else num_of_input_tensors = NUM_INPUT_TENSORS; diff --git a/ggml/include/ggml-tsavorite.h b/ggml/include/ggml-tsavorite.h index 238dcc428da..de18d3dd220 100644 --- a/ggml/include/ggml-tsavorite.h +++ b/ggml/include/ggml-tsavorite.h @@ -126,6 +126,7 @@ enum ggml_tsavorite_kernel_type { GGML_TSAVORITE_KERNEL_TYPE_NEG, GGML_TSAVORITE_KERNEL_TYPE_ABS, GGML_TSAVORITE_KERNEL_TYPE_SIN, + GGML_TSAVORITE_KERNEL_TYPE_SGN, GGML_TSAVORITE_KERNEL_TYPE_SIGMOID, GGML_TSAVORITE_KERNEL_TYPE_SILU, @@ -159,6 +160,7 @@ extern void _mlir_ciface_txe_sqrt_host(void *a, void *res); extern void _mlir_ciface_txe_neg_host(void *a, void *res); extern void _mlir_ciface_txe_abs_host(void *a, void *res); extern void _mlir_ciface_txe_sin_host(void *a, void *res); +extern void _mlir_ciface_txe_sgn_host(void *a, void *res); extern void _mlir_ciface_txe_sigmoid_host(void *a, void *res); extern void _mlir_ciface_txe_silu_host(void *a, void *res); extern void ggml_tsi_log_tensor_data(tensor_log log_data); diff --git a/ggml/src/ggml-tsavorite/ggml-tsavorite.cpp b/ggml/src/ggml-tsavorite/ggml-tsavorite.cpp index cdb9842bf7a..22d8dca7830 100644 --- a/ggml/src/ggml-tsavorite/ggml-tsavorite.cpp +++ b/ggml/src/ggml-tsavorite/ggml-tsavorite.cpp @@ -431,6 +431,11 @@ static txe_compute_pipeline_state_s tsi_kernel_setup(enum ggml_tsavorite_kernel_ kernel_pipeline->kernel_name = "TXE_SIN"; flag = true; break; + case GGML_TSAVORITE_KERNEL_TYPE_SGN: + kernel_pipeline->_mlir_fptr_1_input = &_mlir_ciface_txe_sgn_host; + kernel_pipeline->kernel_name = "TXE_SGN"; + flag = true; + break; case GGML_TSAVORITE_KERNEL_TYPE_SIGMOID: kernel_pipeline->_mlir_fptr_1_input = &_mlir_ciface_txe_sigmoid_host; kernel_pipeline->kernel_name = "TXE_SIGMOID"; @@ -592,6 +597,7 @@ static struct ggml_backend_tsavorite_context *ggml_tsavorite_init(ggml_backend_d GGML_TSAVORITE_KERNEL(GGML_TSAVORITE_KERNEL_TYPE_NEG, true); GGML_TSAVORITE_KERNEL(GGML_TSAVORITE_KERNEL_TYPE_ABS, true); GGML_TSAVORITE_KERNEL(GGML_TSAVORITE_KERNEL_TYPE_SIN, true); + GGML_TSAVORITE_KERNEL(GGML_TSAVORITE_KERNEL_TYPE_SGN, true); GGML_TSAVORITE_KERNEL(GGML_TSAVORITE_KERNEL_TYPE_SIGMOID, true); GGML_TSAVORITE_KERNEL(GGML_TSAVORITE_KERNEL_TYPE_SILU, true); } @@ -701,6 +707,7 @@ static bool ggml_tsavorite_supports_op(const struct ggml_backend_tsavorite_devic case GGML_UNARY_OP_ABS: case GGML_UNARY_OP_SIGMOID: case GGML_UNARY_OP_SILU: + case GGML_UNARY_OP_SGN: break; default: return false; @@ -865,6 +872,10 @@ static enum ggml_status ggml_tsavorite_graph_compute(ggml_backend_t backend, kernel_type = GGML_TSAVORITE_KERNEL_TYPE_SILU; num_of_input_tensors = TSAVORITE_UNARY_INPUT_TENSORS; break; + case GGML_UNARY_OP_SGN: + kernel_type = GGML_TSAVORITE_KERNEL_TYPE_SGN; + num_of_input_tensors = TSAVORITE_UNARY_INPUT_TENSORS; + break; default: ggml_backend_tsavorite_device_rel( (struct ggml_backend_tsavorite_device_context *)backend->device->context); @@ -1830,6 +1841,7 @@ static bool ggml_backend_tsavorite_device_offload_op(ggml_backend_dev_t dev, case GGML_UNARY_OP_ABS: case GGML_UNARY_OP_SIGMOID: case GGML_UNARY_OP_SILU: + case GGML_UNARY_OP_SGN: break; default: return false; diff --git a/tsi-pkg-build.sh b/tsi-pkg-build.sh index accc5c9eeb6..f00e099ae84 100755 --- a/tsi-pkg-build.sh +++ b/tsi-pkg-build.sh @@ -67,7 +67,7 @@ fi cat > ./${TSI_GGML_BUNDLE_INSTALL_DIR}/ggml.sh << EOL #!/bin/bash export LD_LIBRARY_PATH=\${LD_LIBRARY_PATH}:\$(pwd) -tsi_kernels=("add" "sub" "mult" "div" "abs" "inv" "neg" "sin" "sqrt" "sigmoid" "silu") +tsi_kernels=("add" "sub" "mult" "div" "abs" "inv" "neg" "sin" "sgn" "sqrt" "sigmoid" "silu") for kernel in "\${tsi_kernels[@]}"; do mkdir -p ${TSI_BLOB_INSTALL_DIR}/txe_\$kernel From 604b52286d5b0920dfb898bf3693fc52c4f100f6 Mon Sep 17 00:00:00 2001 From: Ganesh Kethamalla Date: Thu, 28 Aug 2025 07:32:17 -0700 Subject: [PATCH 2/2] fixed alignment Signed-off-by: Ganesh Kethamalla --- examples/simple/simple-backend-tsi.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/simple/simple-backend-tsi.cpp b/examples/simple/simple-backend-tsi.cpp index b6b8919e9e1..8f2324fcfd4 100644 --- a/examples/simple/simple-backend-tsi.cpp +++ b/examples/simple/simple-backend-tsi.cpp @@ -473,7 +473,7 @@ static struct ggml_cgraph * build_graph(const simple_model& model, enum ggml_tsa result = ggml_sin(ctx0, model.a); break; case GGML_TSAVORITE_KERNEL_TYPE_SGN: - result = ggml_sgn(ctx0, model.a); + result = ggml_sgn(ctx0, model.a); break; default: ggml_free(ctx0);