1#ifndef GGML_SYCL_ELEMENTWISE_HPP
 2#define GGML_SYCL_ELEMENTWISE_HPP
 3
 4#include "common.hpp"
 5#include "ggml.h"
 6#include <limits> // For std::numeric_limits
 7
 8#define SYCL_GLU_BLOCK_SIZE 256
 9
10template <typename T>
11T neg_infinity() {
12    return -std::numeric_limits<T>::infinity();
13}
14
15template<typename T_Dst, typename T_Src = T_Dst>
16struct typed_data {
17    const T_Src * src;
18    T_Dst * dst;
19};
20
21template<typename T_Dst, typename T_Src = T_Dst>
22typed_data<T_Dst, T_Src> cast_data(ggml_tensor * dst) {
23    return {
24        /* .src = */ static_cast<const T_Src *>(dst->src[0]->data),
25        /* .dst = */ static_cast<T_Dst *>(dst->data)
26    };
27}
28
29const float GELU_QUICK_COEF = -1.702f;
30
31
32void ggml_sycl_sqrt(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
33
34void ggml_sycl_sin(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
35
36void ggml_sycl_cos(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
37
38void ggml_sycl_acc(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
39
40void ggml_sycl_gelu(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
41
42void ggml_sycl_silu(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
43
44void ggml_sycl_gelu_quick(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
45
46void ggml_sycl_swiglu_oai(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
47
48void ggml_sycl_gelu_erf(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
49
50void ggml_sycl_tanh(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
51
52void ggml_sycl_relu(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
53
54void ggml_sycl_sigmoid(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
55
56void ggml_sycl_hardsigmoid(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
57
58void ggml_sycl_hardswish(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
59
60void ggml_sycl_exp(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
61
62void ggml_sycl_log(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
63
64void ggml_sycl_softplus(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
65
66void ggml_sycl_neg(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
67
68void ggml_sycl_step(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
69
70void ggml_sycl_leaky_relu(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
71
72void ggml_sycl_sqr(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
73
74void ggml_sycl_upscale(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
75
76void ggml_sycl_clamp(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
77
78void ggml_sycl_sgn(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
79
80void ggml_sycl_abs(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
81
82void ggml_sycl_elu(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
83
84void ggml_sycl_geglu(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
85void ggml_sycl_reglu(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
86void ggml_sycl_swiglu(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
87void ggml_sycl_geglu_erf(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
88void ggml_sycl_geglu_quick(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
89void ggml_sycl_floor(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
90void ggml_sycl_ceil(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
91void ggml_sycl_round(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
92void ggml_sycl_trunc(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
93
94void ggml_sycl_arange(ggml_backend_sycl_context & ctx, ggml_tensor * dst);
95
96#endif // GGML_SYCL_ELEMENTWISE_HPP