ae2f_docs
Slp.h
Go to the documentation of this file.
1#ifndef Slp_h
2#define Slp_h
3
4#define ae2f_NEED_CLASS 0
5
6#include <ae2fVK/clspv_clkeys.h>
7#include <ae2f/Ann/Slp.core.h>
8#include <ae2f/Ann/Slp.auto.h>
9#include "mac.h"
10
11typedef ae2f_AnnSlpPredictOne_t _clSlpPredict_t;
12
13ae2f_MAC() clSlpPredict(
14 _clSlpPredict_t v_predict,
16
17 const ae2f_float_t* const p_inp,
18 const ae2f_float_t* const p_weight,
19 const ae2f_float_t* const p_bias,
20
21 const size_t iidx, const size_t isz,
22 const size_t oidx, const size_t osz,
23
25 )
26{
27 if((iidx) == 0 && (oidx) < (osz)) {
28 _clSlpPredict_t _v_predict;
29 (_v_predict).m_tmp = 0;
30 for((_v_predict).m_j = (isz); (_v_predict).m_j--;) {
31 (_v_predict).m_tmp
32 += p_inp[(_v_predict).m_j] * p_weight[(_v_predict).m_j + (isz) * (oidx)];
33 }
34
35 (_v_predict).m_tmp += (p_bias)[oidx];
36 ACT(&(_v_predict).m_ret, (_v_predict).m_tmp);
37 (loc)[oidx] = (_v_predict).m_ret;
38 }
39}
40
41ae2f_structdef(struct, _clSlpPredict_t_Q) {
42 ae2f_float_t m_sum, m_ret;
43};
44
45/** Quick version, not precise. */
46ae2f_MAC() clSlpPredict_Q(
47 _clSlpPredict_t_Q v_predict,
48
49 __local ae2f_float_t* const loc,
50
51 const ae2f_float_t* const p_inp,
52 const ae2f_float_t* const p_weight,
53 const ae2f_float_t* const p_bias,
54
55 const size_t iidx, const size_t isz,
56 const size_t oidx, const size_t osz,
57
59 )
60{
61 if((oidx) < (osz) && (iidx) < (isz)) {
62 (v_predict).m_sum = work_group_reduce_add(
63 (p_weight)[(oidx) * (isz) + (iidx)] * (p_inp)[iidx]
64 );
65
66 if((iidx) == 0) {
67 ACT((&(v_predict).m_ret), ((v_predict).m_sum + (p_bias)[oidx]));
68 (loc)[oidx] = (v_predict).m_ret;
69 }
70 }
71}
72
73#define clSlpPredict CL_Q_CVRT(_clSlpPredict)
74#define clSlpPredict_t CL_Q_CVRT(_clSlpPredict_t)
75
76#endif
void ae2f_AnnAct_t(ae2f_float_t *ret, ae2f_float_t x)
Customisable activasion function type.
Definition Act.h:19
#define ae2f_structdef(key, name)
Definition Cast.h:110
ae2f_float ae2f_float_t
Definition Float.h:38
#define __local
#define size_t
#define work_group_reduce_add(x)
#define CL_Q_CVRT(x)
Definition mac.h:12
#define ae2f_MAC()
delta to delta
Definition mac.h:4
ae2f_float_t *const const ae2f_float_t *const const ae2f_float_t *const const ae2f_float_t *const p_bias
Definition Slp.h:19
ae2f_float_t *const loc
Definition Slp.h:15
ae2f_float_t *const const ae2f_float_t *const const ae2f_float_t *const const ae2f_float_t *const const size_t iidx
Definition Slp.h:21
ae2f_float_t *const const ae2f_float_t *const const ae2f_float_t *const const ae2f_float_t *const const size_t const size_t isz
Definition Slp.h:21
ae2f_float_t *const const ae2f_float_t *const const ae2f_float_t *const const ae2f_float_t *const const size_t const size_t const size_t oidx
Definition Slp.h:22
ae2f_float_t *const const ae2f_float_t *const p_inp
Definition Slp.h:17
ae2f_float_t *const const ae2f_float_t *const const ae2f_float_t *const const ae2f_float_t *const const size_t const size_t const size_t const size_t osz
Definition Slp.h:22
ae2f_float_t *const const ae2f_float_t *const const ae2f_float_t *const p_weight
Definition Slp.h:18
ae2f_float_t *const const ae2f_float_t *const const ae2f_float_t *const const ae2f_float_t *const const size_t const size_t const size_t const size_t ae2f_AnnAct_t ACT
Definition Slp.h:26