/src/llama.cpp/ggml/src/ggml-cpu/unary-ops.cpp
Line | Count | Source |
1 | | #include "unary-ops.h" |
2 | | |
3 | 0 | static inline float op_abs(float x) { |
4 | 0 | return fabsf(x); |
5 | 0 | } |
6 | | |
7 | 0 | static inline float op_sgn(float x) { |
8 | 0 | return (x > 0.f) ? 1.f : ((x < 0.f) ? -1.f : 0.f); |
9 | 0 | } |
10 | | |
11 | 0 | static inline float op_neg(float x) { |
12 | 0 | return -x; |
13 | 0 | } |
14 | | |
15 | 0 | static inline float op_step(float x) { |
16 | 0 | return (x > 0.f) ? 1.f : 0.f; |
17 | 0 | } |
18 | | |
19 | 0 | static inline float op_tanh(float x) { |
20 | 0 | return tanhf(x); |
21 | 0 | } |
22 | | |
23 | 0 | static inline float op_elu(float x) { |
24 | 0 | return (x > 0.f) ? x : expm1f(x); |
25 | 0 | } |
26 | | |
27 | 0 | static inline float op_relu(float x) { |
28 | 0 | return (x > 0.f) ? x : 0.f; |
29 | 0 | } |
30 | | |
31 | 0 | static inline float op_sigmoid(float x) { |
32 | 0 | return 1.f / (1.f + expf(-x)); |
33 | 0 | } |
34 | | |
35 | 0 | static inline float op_hardsigmoid(float x) { |
36 | 0 | return fminf(1.0f, fmaxf(0.0f, (x + 3.0f) / 6.0f)); |
37 | 0 | } |
38 | | |
39 | 0 | static inline float op_exp(float x) { |
40 | 0 | return expf(x); |
41 | 0 | } |
42 | | |
43 | 0 | static inline float op_hardswish(float x) { |
44 | 0 | return x * fminf(1.0f, fmaxf(0.0f, (x + 3.0f) / 6.0f)); |
45 | 0 | } |
46 | | |
47 | 0 | static inline float op_sqr(float x) { |
48 | 0 | return x * x; |
49 | 0 | } |
50 | | |
51 | 0 | static inline float op_sqrt(float x) { |
52 | 0 | return sqrtf(x); |
53 | 0 | } |
54 | | |
55 | 0 | static inline float op_xielu(float x, float alpha_n, float alpha_p, float beta, float eps) { |
56 | 0 | if (x > 0.0f) { |
57 | 0 | return alpha_p * x * x + beta * x; |
58 | 0 | } else { |
59 | 0 | const float min_x_eps = fminf(x, eps); |
60 | 0 | return (expm1f(min_x_eps) - x) * alpha_n + beta * x; |
61 | 0 | } |
62 | 0 | } |
63 | | |
64 | 0 | static inline float op_sin(float x) { |
65 | 0 | return sinf(x); |
66 | 0 | } |
67 | | |
68 | 0 | static inline float op_cos(float x) { |
69 | 0 | return cosf(x); |
70 | 0 | } |
71 | | |
72 | 0 | static inline float op_log(float x) { |
73 | 0 | return logf(x); |
74 | 0 | } |
75 | | |
76 | 0 | static inline float op_expm1(float x) { |
77 | 0 | return expf(x) - 1.0f; |
78 | 0 | } |
79 | | |
80 | 0 | static inline float op_softplus(float x) { |
81 | 0 | return (x > 20.0f) ? x : logf(1.0f + expf(x)); |
82 | 0 | } |
83 | | |
84 | 0 | static inline float op_floor(float x) { |
85 | 0 | return floorf(x); |
86 | 0 | } |
87 | | |
88 | 0 | static inline float op_ceil(float x) { |
89 | 0 | return ceilf(x); |
90 | 0 | } |
91 | | |
92 | 0 | static inline float op_round(float x) { |
93 | 0 | return roundf(x); |
94 | 0 | } |
95 | | |
96 | 0 | static inline float op_trunc(float x) { |
97 | 0 | return truncf(x); |
98 | 0 | } |
99 | | |
100 | | template <float (*op)(float), typename src0_t, typename dst_t> |
101 | 0 | static inline void vec_unary_op(int64_t n, dst_t * y, const src0_t * x) { |
102 | 0 | constexpr auto src0_to_f32 = type_conversion_table<src0_t>::to_f32; |
103 | 0 | constexpr auto f32_to_dst = type_conversion_table<dst_t >::from_f32; |
104 | |
|
105 | 0 | for (int i = 0; i < n; i++) { |
106 | 0 | y[i] = f32_to_dst(op(src0_to_f32(x[i]))); |
107 | 0 | } |
108 | 0 | } Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_abs(float)), float, float>(long, float*, float const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_abs(float)), unsigned short, unsigned short>(long, unsigned short*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_abs(float)), ggml_bf16_t, ggml_bf16_t>(long, ggml_bf16_t*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_abs(float)), ggml_bf16_t, float>(long, float*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_abs(float)), unsigned short, float>(long, float*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_sgn(float)), float, float>(long, float*, float const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_sgn(float)), unsigned short, unsigned short>(long, unsigned short*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_sgn(float)), ggml_bf16_t, ggml_bf16_t>(long, ggml_bf16_t*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_sgn(float)), ggml_bf16_t, float>(long, float*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_sgn(float)), unsigned short, float>(long, float*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_neg(float)), float, float>(long, float*, float const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_neg(float)), unsigned short, unsigned short>(long, unsigned short*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_neg(float)), ggml_bf16_t, ggml_bf16_t>(long, ggml_bf16_t*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_neg(float)), ggml_bf16_t, float>(long, float*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_neg(float)), unsigned short, float>(long, float*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_step(float)), float, float>(long, float*, float const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_step(float)), unsigned short, unsigned short>(long, unsigned short*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_step(float)), ggml_bf16_t, ggml_bf16_t>(long, ggml_bf16_t*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_step(float)), ggml_bf16_t, float>(long, float*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_step(float)), unsigned short, float>(long, float*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_tanh(float)), float, float>(long, float*, float const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_tanh(float)), unsigned short, unsigned short>(long, unsigned short*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_tanh(float)), ggml_bf16_t, ggml_bf16_t>(long, ggml_bf16_t*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_tanh(float)), ggml_bf16_t, float>(long, float*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_tanh(float)), unsigned short, float>(long, float*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_elu(float)), float, float>(long, float*, float const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_elu(float)), unsigned short, unsigned short>(long, unsigned short*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_elu(float)), ggml_bf16_t, ggml_bf16_t>(long, ggml_bf16_t*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_elu(float)), ggml_bf16_t, float>(long, float*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_elu(float)), unsigned short, float>(long, float*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_relu(float)), float, float>(long, float*, float const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_relu(float)), unsigned short, unsigned short>(long, unsigned short*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_relu(float)), ggml_bf16_t, ggml_bf16_t>(long, ggml_bf16_t*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_relu(float)), ggml_bf16_t, float>(long, float*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_relu(float)), unsigned short, float>(long, float*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_sigmoid(float)), float, float>(long, float*, float const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_sigmoid(float)), unsigned short, unsigned short>(long, unsigned short*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_sigmoid(float)), ggml_bf16_t, ggml_bf16_t>(long, ggml_bf16_t*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_sigmoid(float)), ggml_bf16_t, float>(long, float*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_sigmoid(float)), unsigned short, float>(long, float*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_hardsigmoid(float)), float, float>(long, float*, float const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_hardsigmoid(float)), unsigned short, unsigned short>(long, unsigned short*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_hardsigmoid(float)), ggml_bf16_t, ggml_bf16_t>(long, ggml_bf16_t*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_hardsigmoid(float)), ggml_bf16_t, float>(long, float*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_hardsigmoid(float)), unsigned short, float>(long, float*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_exp(float)), float, float>(long, float*, float const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_exp(float)), unsigned short, unsigned short>(long, unsigned short*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_exp(float)), ggml_bf16_t, ggml_bf16_t>(long, ggml_bf16_t*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_exp(float)), ggml_bf16_t, float>(long, float*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_exp(float)), unsigned short, float>(long, float*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_hardswish(float)), float, float>(long, float*, float const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_hardswish(float)), unsigned short, unsigned short>(long, unsigned short*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_hardswish(float)), ggml_bf16_t, ggml_bf16_t>(long, ggml_bf16_t*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_hardswish(float)), ggml_bf16_t, float>(long, float*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_hardswish(float)), unsigned short, float>(long, float*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_sqr(float)), float, float>(long, float*, float const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_sqr(float)), unsigned short, unsigned short>(long, unsigned short*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_sqr(float)), ggml_bf16_t, ggml_bf16_t>(long, ggml_bf16_t*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_sqr(float)), ggml_bf16_t, float>(long, float*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_sqr(float)), unsigned short, float>(long, float*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_sqrt(float)), float, float>(long, float*, float const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_sqrt(float)), unsigned short, unsigned short>(long, unsigned short*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_sqrt(float)), ggml_bf16_t, ggml_bf16_t>(long, ggml_bf16_t*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_sqrt(float)), ggml_bf16_t, float>(long, float*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_sqrt(float)), unsigned short, float>(long, float*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_sin(float)), float, float>(long, float*, float const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_sin(float)), unsigned short, unsigned short>(long, unsigned short*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_sin(float)), ggml_bf16_t, ggml_bf16_t>(long, ggml_bf16_t*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_sin(float)), ggml_bf16_t, float>(long, float*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_sin(float)), unsigned short, float>(long, float*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_cos(float)), float, float>(long, float*, float const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_cos(float)), unsigned short, unsigned short>(long, unsigned short*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_cos(float)), ggml_bf16_t, ggml_bf16_t>(long, ggml_bf16_t*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_cos(float)), ggml_bf16_t, float>(long, float*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_cos(float)), unsigned short, float>(long, float*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_log(float)), float, float>(long, float*, float const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_log(float)), unsigned short, unsigned short>(long, unsigned short*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_log(float)), ggml_bf16_t, ggml_bf16_t>(long, ggml_bf16_t*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_log(float)), ggml_bf16_t, float>(long, float*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_log(float)), unsigned short, float>(long, float*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_expm1(float)), float, float>(long, float*, float const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_expm1(float)), unsigned short, unsigned short>(long, unsigned short*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_expm1(float)), ggml_bf16_t, ggml_bf16_t>(long, ggml_bf16_t*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_expm1(float)), ggml_bf16_t, float>(long, float*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_expm1(float)), unsigned short, float>(long, float*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_softplus(float)), float, float>(long, float*, float const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_softplus(float)), unsigned short, unsigned short>(long, unsigned short*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_softplus(float)), ggml_bf16_t, ggml_bf16_t>(long, ggml_bf16_t*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_softplus(float)), ggml_bf16_t, float>(long, float*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_softplus(float)), unsigned short, float>(long, float*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_floor(float)), float, float>(long, float*, float const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_floor(float)), unsigned short, unsigned short>(long, unsigned short*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_floor(float)), ggml_bf16_t, ggml_bf16_t>(long, ggml_bf16_t*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_floor(float)), ggml_bf16_t, float>(long, float*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_floor(float)), unsigned short, float>(long, float*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_ceil(float)), float, float>(long, float*, float const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_ceil(float)), unsigned short, unsigned short>(long, unsigned short*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_ceil(float)), ggml_bf16_t, ggml_bf16_t>(long, ggml_bf16_t*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_ceil(float)), ggml_bf16_t, float>(long, float*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_ceil(float)), unsigned short, float>(long, float*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_round(float)), float, float>(long, float*, float const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_round(float)), unsigned short, unsigned short>(long, unsigned short*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_round(float)), ggml_bf16_t, ggml_bf16_t>(long, ggml_bf16_t*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_round(float)), ggml_bf16_t, float>(long, float*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_round(float)), unsigned short, float>(long, float*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_trunc(float)), float, float>(long, float*, float const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_trunc(float)), unsigned short, unsigned short>(long, unsigned short*, unsigned short const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_trunc(float)), ggml_bf16_t, ggml_bf16_t>(long, ggml_bf16_t*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_trunc(float)), ggml_bf16_t, float>(long, float*, ggml_bf16_t const*) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op<&(op_trunc(float)), unsigned short, float>(long, float*, unsigned short const*) |
109 | | |
110 | | template <float (*op)(float), typename src0_t, typename dst_t> |
111 | 0 | static void apply_unary_op(const ggml_compute_params * params, ggml_tensor * dst) { |
112 | 0 | const ggml_tensor * src0 = dst->src[0]; |
113 | |
|
114 | 0 | GGML_ASSERT(ggml_is_contiguous_1(src0) && ggml_is_contiguous_1(dst) && ggml_are_same_shape(src0, dst)); |
115 | |
|
116 | 0 | GGML_TENSOR_UNARY_OP_LOCALS |
117 | |
|
118 | 0 | GGML_ASSERT( nb0 == sizeof(dst_t)); |
119 | 0 | GGML_ASSERT(nb00 == sizeof(src0_t)); |
120 | |
|
121 | 0 | const auto [ir0, ir1] = get_thread_range(params, src0); |
122 | |
|
123 | 0 | for (int64_t ir = ir0; ir < ir1; ++ir) { |
124 | 0 | const int64_t i03 = ir/(ne02*ne01); |
125 | 0 | const int64_t i02 = (ir - i03*ne02*ne01)/ne01; |
126 | 0 | const int64_t i01 = (ir - i03*ne02*ne01 - i02*ne01); |
127 | |
|
128 | 0 | dst_t * dst_ptr = (dst_t *) ((char *) dst->data + i03*nb3 + i02*nb2 + i01*nb1 ); |
129 | 0 | const src0_t * src0_ptr = (const src0_t *) ((const char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01); |
130 | |
|
131 | 0 | vec_unary_op<op>(ne0, dst_ptr, src0_ptr); |
132 | 0 | } |
133 | 0 | } Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_abs(float)), float, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_abs(float)), unsigned short, unsigned short>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_abs(float)), ggml_bf16_t, ggml_bf16_t>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_abs(float)), ggml_bf16_t, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_abs(float)), unsigned short, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_sgn(float)), float, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_sgn(float)), unsigned short, unsigned short>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_sgn(float)), ggml_bf16_t, ggml_bf16_t>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_sgn(float)), ggml_bf16_t, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_sgn(float)), unsigned short, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_neg(float)), float, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_neg(float)), unsigned short, unsigned short>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_neg(float)), ggml_bf16_t, ggml_bf16_t>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_neg(float)), ggml_bf16_t, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_neg(float)), unsigned short, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_step(float)), float, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_step(float)), unsigned short, unsigned short>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_step(float)), ggml_bf16_t, ggml_bf16_t>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_step(float)), ggml_bf16_t, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_step(float)), unsigned short, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_tanh(float)), float, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_tanh(float)), unsigned short, unsigned short>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_tanh(float)), ggml_bf16_t, ggml_bf16_t>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_tanh(float)), ggml_bf16_t, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_tanh(float)), unsigned short, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_elu(float)), float, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_elu(float)), unsigned short, unsigned short>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_elu(float)), ggml_bf16_t, ggml_bf16_t>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_elu(float)), ggml_bf16_t, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_elu(float)), unsigned short, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_relu(float)), float, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_relu(float)), unsigned short, unsigned short>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_relu(float)), ggml_bf16_t, ggml_bf16_t>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_relu(float)), ggml_bf16_t, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_relu(float)), unsigned short, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_sigmoid(float)), float, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_sigmoid(float)), unsigned short, unsigned short>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_sigmoid(float)), ggml_bf16_t, ggml_bf16_t>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_sigmoid(float)), ggml_bf16_t, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_sigmoid(float)), unsigned short, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_hardsigmoid(float)), float, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_hardsigmoid(float)), unsigned short, unsigned short>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_hardsigmoid(float)), ggml_bf16_t, ggml_bf16_t>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_hardsigmoid(float)), ggml_bf16_t, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_hardsigmoid(float)), unsigned short, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_exp(float)), float, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_exp(float)), unsigned short, unsigned short>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_exp(float)), ggml_bf16_t, ggml_bf16_t>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_exp(float)), ggml_bf16_t, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_exp(float)), unsigned short, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_hardswish(float)), float, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_hardswish(float)), unsigned short, unsigned short>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_hardswish(float)), ggml_bf16_t, ggml_bf16_t>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_hardswish(float)), ggml_bf16_t, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_hardswish(float)), unsigned short, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_sqr(float)), float, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_sqr(float)), unsigned short, unsigned short>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_sqr(float)), ggml_bf16_t, ggml_bf16_t>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_sqr(float)), ggml_bf16_t, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_sqr(float)), unsigned short, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_sqrt(float)), float, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_sqrt(float)), unsigned short, unsigned short>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_sqrt(float)), ggml_bf16_t, ggml_bf16_t>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_sqrt(float)), ggml_bf16_t, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_sqrt(float)), unsigned short, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_sin(float)), float, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_sin(float)), unsigned short, unsigned short>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_sin(float)), ggml_bf16_t, ggml_bf16_t>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_sin(float)), ggml_bf16_t, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_sin(float)), unsigned short, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_cos(float)), float, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_cos(float)), unsigned short, unsigned short>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_cos(float)), ggml_bf16_t, ggml_bf16_t>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_cos(float)), ggml_bf16_t, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_cos(float)), unsigned short, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_log(float)), float, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_log(float)), unsigned short, unsigned short>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_log(float)), ggml_bf16_t, ggml_bf16_t>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_log(float)), ggml_bf16_t, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_log(float)), unsigned short, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_expm1(float)), float, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_expm1(float)), unsigned short, unsigned short>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_expm1(float)), ggml_bf16_t, ggml_bf16_t>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_expm1(float)), ggml_bf16_t, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_expm1(float)), unsigned short, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_softplus(float)), float, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_softplus(float)), unsigned short, unsigned short>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_softplus(float)), ggml_bf16_t, ggml_bf16_t>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_softplus(float)), ggml_bf16_t, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_softplus(float)), unsigned short, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_floor(float)), float, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_floor(float)), unsigned short, unsigned short>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_floor(float)), ggml_bf16_t, ggml_bf16_t>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_floor(float)), ggml_bf16_t, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_floor(float)), unsigned short, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_ceil(float)), float, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_ceil(float)), unsigned short, unsigned short>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_ceil(float)), ggml_bf16_t, ggml_bf16_t>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_ceil(float)), ggml_bf16_t, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_ceil(float)), unsigned short, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_round(float)), float, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_round(float)), unsigned short, unsigned short>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_round(float)), ggml_bf16_t, ggml_bf16_t>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_round(float)), ggml_bf16_t, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_round(float)), unsigned short, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_trunc(float)), float, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_trunc(float)), unsigned short, unsigned short>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_trunc(float)), ggml_bf16_t, ggml_bf16_t>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_trunc(float)), ggml_bf16_t, float>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op<&(op_trunc(float)), unsigned short, float>(ggml_compute_params const*, ggml_tensor*) |
134 | | |
135 | | // TODO: Use the 'traits' lookup table (for type conversion fns), instead of a mass of 'if' conditions with long templates |
136 | | template <float (*op)(float)> |
137 | 0 | static void unary_op(const ggml_compute_params * params, ggml_tensor * dst) { |
138 | 0 | const ggml_tensor * src0 = dst->src[0]; |
139 | | |
140 | 0 | /* */ if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) { // all f32 |
141 | 0 | apply_unary_op<op, float, float>(params, dst); |
142 | 0 | } else if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F16) { // all f16 |
143 | 0 | apply_unary_op<op, ggml_fp16_t, ggml_fp16_t>(params, dst); |
144 | 0 | } else if (src0->type == GGML_TYPE_BF16 && dst->type == GGML_TYPE_BF16) { // all bf16 |
145 | 0 | apply_unary_op<op, ggml_bf16_t, ggml_bf16_t>(params, dst); |
146 | 0 | } else if (src0->type == GGML_TYPE_BF16 && dst->type == GGML_TYPE_F32) { |
147 | 0 | apply_unary_op<op, ggml_bf16_t, float>(params, dst); |
148 | 0 | } else if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F32) { |
149 | 0 | apply_unary_op<op, ggml_fp16_t, float>(params, dst); |
150 | 0 | } else { |
151 | 0 | fprintf(stderr, "%s: unsupported types: dst: %s, src0: %s\n", __func__, |
152 | 0 | ggml_type_name(dst->type), ggml_type_name(src0->type)); |
153 | 0 | GGML_ABORT("fatal error"); |
154 | 0 | } |
155 | 0 | } Unexecuted instantiation: unary-ops.cpp:void unary_op<&(op_abs(float))>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void unary_op<&(op_sgn(float))>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void unary_op<&(op_neg(float))>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void unary_op<&(op_step(float))>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void unary_op<&(op_tanh(float))>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void unary_op<&(op_elu(float))>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void unary_op<&(op_relu(float))>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void unary_op<&(op_sigmoid(float))>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void unary_op<&(op_hardsigmoid(float))>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void unary_op<&(op_exp(float))>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void unary_op<&(op_hardswish(float))>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void unary_op<&(op_sqr(float))>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void unary_op<&(op_sqrt(float))>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void unary_op<&(op_sin(float))>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void unary_op<&(op_cos(float))>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void unary_op<&(op_log(float))>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void unary_op<&(op_expm1(float))>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void unary_op<&(op_softplus(float))>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void unary_op<&(op_floor(float))>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void unary_op<&(op_ceil(float))>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void unary_op<&(op_round(float))>(ggml_compute_params const*, ggml_tensor*) Unexecuted instantiation: unary-ops.cpp:void unary_op<&(op_trunc(float))>(ggml_compute_params const*, ggml_tensor*) |
156 | | |
157 | | template <float (*op)(float, ggml_tensor *)> |
158 | | static void unary_op_params(const ggml_compute_params * params, ggml_tensor * dst) { |
159 | | const ggml_tensor * src0 = dst->src[0]; |
160 | | |
161 | | /* */ if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) { // all f32 |
162 | | apply_unary_op<op, float, float>(params, dst); |
163 | | } else if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F16) { // all f16 |
164 | | apply_unary_op<op, ggml_fp16_t, ggml_fp16_t>(params, dst); |
165 | | } else if (src0->type == GGML_TYPE_BF16 && dst->type == GGML_TYPE_BF16) { // all bf16 |
166 | | apply_unary_op<op, ggml_bf16_t, ggml_bf16_t>(params, dst); |
167 | | } else if (src0->type == GGML_TYPE_BF16 && dst->type == GGML_TYPE_F32) { |
168 | | apply_unary_op<op, ggml_bf16_t, float>(params, dst); |
169 | | } else if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F32) { |
170 | | apply_unary_op<op, ggml_fp16_t, float>(params, dst); |
171 | | } else { |
172 | | fprintf(stderr, "%s: unsupported types: dst: %s, src0: %s\n", __func__, |
173 | | ggml_type_name(dst->type), ggml_type_name(src0->type)); |
174 | | GGML_ABORT("fatal error"); |
175 | | } |
176 | | } |
177 | | |
178 | | // Extend vec_unary_op to support functors |
179 | | template <typename Op, typename src0_t, typename dst_t> |
180 | 0 | static inline void vec_unary_op_functor(int64_t n, dst_t * y, const src0_t * x, Op op) { |
181 | 0 | constexpr auto src0_to_f32 = type_conversion_table<src0_t>::to_f32; |
182 | 0 | constexpr auto f32_to_dst = type_conversion_table<dst_t >::from_f32; |
183 | |
|
184 | 0 | for (int i = 0; i < n; i++) { |
185 | 0 | y[i] = f32_to_dst(op(src0_to_f32(x[i]))); |
186 | 0 | } |
187 | 0 | } Unexecuted instantiation: unary-ops.cpp:void vec_unary_op_functor<ggml_compute_forward_xielu::$_0, float, float>(long, float*, float const*, ggml_compute_forward_xielu::$_0) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op_functor<ggml_compute_forward_xielu::$_0, unsigned short, unsigned short>(long, unsigned short*, unsigned short const*, ggml_compute_forward_xielu::$_0) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op_functor<ggml_compute_forward_xielu::$_0, ggml_bf16_t, ggml_bf16_t>(long, ggml_bf16_t*, ggml_bf16_t const*, ggml_compute_forward_xielu::$_0) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op_functor<ggml_compute_forward_xielu::$_0, ggml_bf16_t, float>(long, float*, ggml_bf16_t const*, ggml_compute_forward_xielu::$_0) Unexecuted instantiation: unary-ops.cpp:void vec_unary_op_functor<ggml_compute_forward_xielu::$_0, unsigned short, float>(long, float*, unsigned short const*, ggml_compute_forward_xielu::$_0) |
188 | | |
189 | | // Extend apply_unary_op to support functors |
190 | | template <typename Op, typename src0_t, typename dst_t> |
191 | 0 | static void apply_unary_op_functor(const ggml_compute_params * params, ggml_tensor * dst, Op op) { |
192 | 0 | const ggml_tensor * src0 = dst->src[0]; |
193 | |
|
194 | 0 | GGML_ASSERT(ggml_is_contiguous_1(src0) && ggml_is_contiguous_1(dst) && ggml_are_same_shape(src0, dst)); |
195 | |
|
196 | 0 | GGML_TENSOR_UNARY_OP_LOCALS |
197 | |
|
198 | 0 | GGML_ASSERT( nb0 == sizeof(dst_t)); |
199 | 0 | GGML_ASSERT(nb00 == sizeof(src0_t)); |
200 | |
|
201 | 0 | const auto [ir0, ir1] = get_thread_range(params, src0); |
202 | |
|
203 | 0 | for (int64_t ir = ir0; ir < ir1; ++ir) { |
204 | 0 | const int64_t i03 = ir/(ne02*ne01); |
205 | 0 | const int64_t i02 = (ir - i03*ne02*ne01)/ne01; |
206 | 0 | const int64_t i01 = (ir - i03*ne02*ne01 - i02*ne01); |
207 | |
|
208 | 0 | dst_t * dst_ptr = (dst_t *) ((char *) dst->data + i03*nb3 + i02*nb2 + i01*nb1 ); |
209 | 0 | const src0_t * src0_ptr = (const src0_t *) ((const char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01); |
210 | |
|
211 | 0 | vec_unary_op_functor(ne0, dst_ptr, src0_ptr, op); |
212 | 0 | } |
213 | 0 | } Unexecuted instantiation: unary-ops.cpp:void apply_unary_op_functor<ggml_compute_forward_xielu::$_0, float, float>(ggml_compute_params const*, ggml_tensor*, ggml_compute_forward_xielu::$_0) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op_functor<ggml_compute_forward_xielu::$_0, unsigned short, unsigned short>(ggml_compute_params const*, ggml_tensor*, ggml_compute_forward_xielu::$_0) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op_functor<ggml_compute_forward_xielu::$_0, ggml_bf16_t, ggml_bf16_t>(ggml_compute_params const*, ggml_tensor*, ggml_compute_forward_xielu::$_0) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op_functor<ggml_compute_forward_xielu::$_0, ggml_bf16_t, float>(ggml_compute_params const*, ggml_tensor*, ggml_compute_forward_xielu::$_0) Unexecuted instantiation: unary-ops.cpp:void apply_unary_op_functor<ggml_compute_forward_xielu::$_0, unsigned short, float>(ggml_compute_params const*, ggml_tensor*, ggml_compute_forward_xielu::$_0) |
214 | | |
215 | | // Generic dispatcher for functors |
216 | | template <typename Op> |
217 | 0 | static void unary_op_functor(const ggml_compute_params * params, ggml_tensor * dst, Op op) { |
218 | 0 | const ggml_tensor * src0 = dst->src[0]; |
219 | | |
220 | 0 | /* */ if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) { // all f32 |
221 | 0 | apply_unary_op_functor<Op, float, float>(params, dst, op); |
222 | 0 | } else if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F16) { // all f16 |
223 | 0 | apply_unary_op_functor<Op, ggml_fp16_t, ggml_fp16_t>(params, dst, op); |
224 | 0 | } else if (src0->type == GGML_TYPE_BF16 && dst->type == GGML_TYPE_BF16) { // all bf16 |
225 | 0 | apply_unary_op_functor<Op, ggml_bf16_t, ggml_bf16_t>(params, dst, op); |
226 | 0 | } else if (src0->type == GGML_TYPE_BF16 && dst->type == GGML_TYPE_F32) { |
227 | 0 | apply_unary_op_functor<Op, ggml_bf16_t, float>(params, dst, op); |
228 | 0 | } else if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F32) { |
229 | 0 | apply_unary_op_functor<Op, ggml_fp16_t, float>(params, dst, op); |
230 | 0 | } else { |
231 | 0 | fprintf(stderr, "%s: unsupported types: dst: %s, src0: %s\n", __func__, |
232 | 0 | ggml_type_name(dst->type), ggml_type_name(src0->type)); |
233 | 0 | GGML_ABORT("fatal error"); |
234 | 0 | } |
235 | 0 | } |
236 | | |
237 | 0 | void ggml_compute_forward_abs(const ggml_compute_params * params, ggml_tensor * dst) { |
238 | 0 | unary_op<op_abs>(params, dst); |
239 | 0 | } |
240 | | |
241 | 0 | void ggml_compute_forward_sgn(const ggml_compute_params * params, ggml_tensor * dst) { |
242 | 0 | unary_op<op_sgn>(params, dst); |
243 | 0 | } |
244 | | |
245 | 0 | void ggml_compute_forward_neg(const ggml_compute_params * params, ggml_tensor * dst) { |
246 | 0 | unary_op<op_neg>(params, dst); |
247 | 0 | } |
248 | | |
249 | 0 | void ggml_compute_forward_step(const ggml_compute_params * params, ggml_tensor * dst) { |
250 | 0 | unary_op<op_step>(params, dst); |
251 | 0 | } |
252 | | |
253 | 0 | void ggml_compute_forward_tanh(const ggml_compute_params * params, ggml_tensor * dst) { |
254 | 0 | unary_op<op_tanh>(params, dst); |
255 | 0 | } |
256 | | |
257 | 0 | void ggml_compute_forward_elu(const ggml_compute_params * params, ggml_tensor * dst) { |
258 | 0 | unary_op<op_elu>(params, dst); |
259 | 0 | } |
260 | | |
261 | 0 | void ggml_compute_forward_relu(const ggml_compute_params * params, ggml_tensor * dst) { |
262 | 0 | unary_op<op_relu>(params, dst); |
263 | 0 | } |
264 | | |
265 | 0 | void ggml_compute_forward_sigmoid(const ggml_compute_params * params, ggml_tensor * dst) { |
266 | 0 | unary_op<op_sigmoid>(params, dst); |
267 | 0 | } |
268 | | |
269 | 0 | void ggml_compute_forward_hardsigmoid(const ggml_compute_params * params, ggml_tensor * dst) { |
270 | 0 | unary_op<op_hardsigmoid>(params, dst); |
271 | 0 | } |
272 | | |
273 | 0 | void ggml_compute_forward_exp(const ggml_compute_params * params, ggml_tensor * dst) { |
274 | 0 | unary_op<op_exp>(params, dst); |
275 | 0 | } |
276 | | |
277 | 0 | void ggml_compute_forward_hardswish(const ggml_compute_params * params, ggml_tensor * dst) { |
278 | 0 | unary_op<op_hardswish>(params, dst); |
279 | 0 | } |
280 | | |
281 | 0 | void ggml_compute_forward_sqr(const ggml_compute_params * params, ggml_tensor * dst) { |
282 | 0 | unary_op<op_sqr>(params, dst); |
283 | 0 | } |
284 | | |
285 | 0 | void ggml_compute_forward_sqrt(const ggml_compute_params * params, ggml_tensor * dst) { |
286 | 0 | unary_op<op_sqrt>(params, dst); |
287 | 0 | } |
288 | | |
289 | 0 | void ggml_compute_forward_sin(const ggml_compute_params * params, ggml_tensor * dst) { |
290 | 0 | unary_op<op_sin>(params, dst); |
291 | 0 | } |
292 | | |
293 | 0 | void ggml_compute_forward_cos(const ggml_compute_params * params, ggml_tensor * dst) { |
294 | 0 | unary_op<op_cos>(params, dst); |
295 | 0 | } |
296 | | |
297 | 0 | void ggml_compute_forward_log(const ggml_compute_params * params, ggml_tensor * dst) { |
298 | 0 | unary_op<op_log>(params, dst); |
299 | 0 | } |
300 | | |
301 | 0 | void ggml_compute_forward_expm1(const ggml_compute_params * params, ggml_tensor * dst) { |
302 | 0 | unary_op<op_expm1>(params, dst); |
303 | 0 | } |
304 | | |
305 | 0 | void ggml_compute_forward_softplus(const ggml_compute_params * params, ggml_tensor * dst) { |
306 | 0 | unary_op<op_softplus>(params, dst); |
307 | 0 | } |
308 | | |
309 | 0 | void ggml_compute_forward_floor(const ggml_compute_params * params, ggml_tensor * dst) { |
310 | 0 | unary_op<op_floor>(params, dst); |
311 | 0 | } |
312 | | |
313 | 0 | void ggml_compute_forward_ceil(const ggml_compute_params * params, ggml_tensor * dst) { |
314 | 0 | unary_op<op_ceil>(params, dst); |
315 | 0 | } |
316 | | |
317 | 0 | void ggml_compute_forward_round(const ggml_compute_params * params, ggml_tensor * dst) { |
318 | 0 | unary_op<op_round>(params, dst); |
319 | 0 | } |
320 | | |
321 | 0 | void ggml_compute_forward_trunc(const ggml_compute_params * params, ggml_tensor * dst) { |
322 | 0 | unary_op<op_trunc>(params, dst); |
323 | 0 | } |
324 | | |
325 | 0 | void ggml_compute_forward_xielu(const ggml_compute_params * params, ggml_tensor * dst) { |
326 | 0 | const float alpha_n = ggml_get_op_params_f32(dst, 1); |
327 | 0 | const float alpha_p = ggml_get_op_params_f32(dst, 2); |
328 | 0 | const float beta = ggml_get_op_params_f32(dst, 3); |
329 | 0 | const float eps = ggml_get_op_params_f32(dst, 4); |
330 | |
|
331 | 0 | const auto xielu_op_params = [alpha_n, alpha_p, beta, eps](float f) { |
332 | 0 | return op_xielu(f, alpha_n, alpha_p, beta, eps); |
333 | 0 | }; |
334 | |
|
335 | 0 | unary_op_functor(params, dst, xielu_op_params); |
336 | 0 | } |
337 | | |