case GGML_UNARY_OP_EXP: op_num = OP_UNARY_NUM_EXP; break;
case GGML_UNARY_OP_SOFTPLUS: op_num = OP_UNARY_NUM_SOFTPLUS; break;
case GGML_UNARY_OP_EXPM1: op_num = OP_UNARY_NUM_EXPM1; break;
+ case GGML_UNARY_OP_FLOOR: op_num = OP_UNARY_NUM_FLOOR; break;
+ case GGML_UNARY_OP_CEIL: op_num = OP_UNARY_NUM_CEIL; break;
+ case GGML_UNARY_OP_ROUND: op_num = OP_UNARY_NUM_ROUND; break;
+ case GGML_UNARY_OP_TRUNC: op_num = OP_UNARY_NUM_TRUNC; break;
default: GGML_ABORT("fatal error");
} break;
default: GGML_ABORT("fatal error");
case GGML_UNARY_OP_EXP:
case GGML_UNARY_OP_SOFTPLUS:
case GGML_UNARY_OP_EXPM1:
+ case GGML_UNARY_OP_FLOOR:
+ case GGML_UNARY_OP_CEIL:
+ case GGML_UNARY_OP_ROUND:
+ case GGML_UNARY_OP_TRUNC:
return ggml_is_contiguous_rows(op->src[0]) && (op->src[0]->type == GGML_TYPE_F32 || op->src[0]->type == GGML_TYPE_F16);
default:
return false;
#define OP_UNARY_NUM_EXP 114
#define OP_UNARY_NUM_SOFTPLUS 115
#define OP_UNARY_NUM_EXPM1 116
+#define OP_UNARY_NUM_FLOOR 117
+#define OP_UNARY_NUM_CEIL 118
+#define OP_UNARY_NUM_ROUND 119
+#define OP_UNARY_NUM_TRUNC 120
#define OP_SUM_ROWS_NUM_SUM_ROWS 10
#define OP_SUM_ROWS_NUM_MEAN 11
// TODO: precise implementation
dst_ptr[i0] = (T) (exp(x) - 1);
}
+
+ if (FC_OP == OP_UNARY_NUM_FLOOR) {
+ dst_ptr[i0] = (T) floor(x);
+ }
+
+ if (FC_OP == OP_UNARY_NUM_CEIL) {
+ dst_ptr[i0] = (T) ceil(x);
+ }
+
+ if (FC_OP == OP_UNARY_NUM_ROUND) {
+ dst_ptr[i0] = (T) round(x);
+ }
+
+ if (FC_OP == OP_UNARY_NUM_TRUNC) {
+ dst_ptr[i0] = (T) trunc(x);
+ }
}
#undef FC_OP