1#pragma OPENCL EXTENSION cl-fast-relaxed-math : enable
2#pragma OPENCL EXTENSION pod-pushconstant : enable
4#if __ae2f_MACRO_GENERATED
5#define ae2fVK_clspv_IS_OPENCL 1
8#define ae2f_NEED_CLASS 0
14#include "./Mlp.auto.h"
17#define ACT(layer_idx, r, y, i, c) *(r) = (y)[i]
21#define ACT_DERIV(layer_idx, r, y, i, c) *(r) = 1
25#define LOSS_DERIV(r, y, y_desired, i, c) *(r) = (y)[i] - (y_desired)[i]
73#define r_inp_then _r_inp(lidx-1
)
74#define r_out_then _r_out(lidx-1
)
76#define r_bias_then _r_bias(lidx-1
)
78#define r_isz_then _r_isz(lidx-1
)
79#define r_osz_then _r_osz(lidx-1
)
82#define l_inp(O_R) (((loc) + pgsz * ((lidx) O_R)))
83#define l_out(O_R) (((loc) + pgsz * ((lidx + 1
) O_R)))
85#define lp_deltastream ((loc) + pgsz * ((2
)))
91#define ACT_RUN(r, y, i, c) ACT(lidx, r, y, i, c)
92#define ACT_DERIV_RUN(r, y, i, c) ACT_DERIV(lidx, r, y, i, c)
94#define ACT_RUN_THEN(r, y, i, c) ACT((lidx - 1
), r, y, i, c)
95#define ACT_DERIV_RUN_THEN(r, y, i, c) ACT_DERIV((lidx - 1
), r, y, i, c)
104#define lsz push.m_lsz
105#define weightsz push.m_wsz
108
109
110
111
114 oidx = get_global_id(0)
115 , iidx = get_global_id(1)
116 , sz = get_global_size(0);
120 ae2f_float_t r_predict;
122 _clSlpPredict(
__local, v_predict, r_predict,
l_out(&1),
r_inp,
r_weight,
r_bias, iidx,
r_isz, oidx,
r_osz, ACT_RUN);
124 while(++lidx <
llsz - 1) {
125 if(iidx <
r_isz && !oidx)
l_inp(&1)[iidx] = r_predict;
126 _clSlpPredict(
__local, v_predict, r_predict,
l_out(&1),
l_inp(&1),
r_weight,
r_bias, iidx,
r_isz, oidx,
r_osz, ACT_RUN);
129 if(iidx <
r_isz && !oidx)
l_inp(&1)[iidx] = r_predict;
130 _clSlpPredict(
__local, v_predict,
r_out[oidx],
l_out(&1),
l_inp(&1),
r_weight,
r_bias, iidx,
r_isz, oidx,
r_osz, ACT_RUN);
135
136
137
138
141 oidx = get_global_id(0)
142 , iidx = get_global_id(1)
143 , sz = get_global_size(0);
146 ae2f_float_t v_predict;
149 _clSlpPredict(
__local, slppredict, v_predict,
l_out(&1),
r_inp,
r_weight,
r_bias, iidx,
r_isz, oidx,
r_osz, ACT_RUN);
152 while(++lidx <
llsz - 1) {
153 if(iidx <
r_isz && !oidx)
l_inp(&1)[iidx] = v_predict;
154 _clSlpPredict(
__local, slppredict, v_predict,
l_out(&1),
l_inp(&1),
r_weight,
r_bias, iidx,
r_isz, oidx,
r_osz, ACT_RUN);
156 if(oidx <
r_osz && !iidx)
157 r_out[oidx] = v_predict;
161 if(iidx <
r_isz && !oidx)
l_inp(&1)[iidx] = v_predict;
162 _clSlpPredict(
__local, slppredict,
r_out[oidx],
l_out(&1),
l_inp(&1),
r_weight,
r_bias, iidx,
r_isz, oidx,
r_osz, ACT_RUN);
172 lrlszel_t m_lsz, m_weight, m_bias, m_wsz;
175typedef char STATIC_ASSERT_LRLSZEL_SZ[
180typedef char STATIC_ASSERT_LRLSZ_SZ[
sizeof(lrlsz_t) ==
sizeof(lrlszel_t) * 4 ? 1 : -1];
186#define lsz lr.m_lsz.m_u
189#define weightsz lr.m_wsz.m_u
192
193
194
195
202 oidx = get_global_id(0)
203 , iidx = get_global_id(1)
204 , sz = get_global_size(0);
244 ,
r_isz, ACT_DERIV_RUN_THEN
286 ,
r_isz, ACT_DERIV_RUN_THEN
316
317
318
319
323 oidx = get_global_id(0)
324 , iidx = get_global_id(1)
325 , sz = get_global_size(0);
327 ae2f_float_t tmp0, tmp2;
330#define tmp1 gethd.m_atom[0
].m_f
337 if(iidx <
r_isz && oidx == 0)
340 for(; lidx <
llsz - 1; lidx++) {
359 if(oidx <
r_osz && iidx == 0) {
361 l_out()[oidx] = tmp2;
411 ,
r_isz, ACT_DERIV_RUN_THEN
#define ae2f_structdef(key, name)
#define unless(...)
Invokes when condition is false.
#define ACT(layer_idx, r, y, i, c)
#define ACT_DERIV(layer_idx, r, y, i, c)
#define __ae2f_AnnSlpFetchDeltaOne_imp(rret, ptr_tmp0, ptr_tmp1, prm_out, prm_out_desired, prm_oidx, prm_osz, fn_actderiv, fn_lossderiv)
#define __ae2f_AnnSlpFollowOneW_imp(inp, delta, weight, learningrate, inp_sz, inp_idx, out_sz, out_idx)
#define __ae2f_AnnSlpFollowOneB_imp(rret_bias, prm_delta, prm_learningrate_bias)
#define _clMlpGetHD1(__global, v_mem, r_delta_then, i_weight, i_delta, i_iidx, i_isz, i_oidx, i_osz)
#define _clMlpRvrse(v_tmp, r_delta_then, i_oidx, i_iidx, i_isz, i_actderiv_then, i_inp, i_deltaseed)
#define _clAtomAddF_t(__global, host_float_t)
#define _clSlpPredict(__global, v_mem, ret, loc, p_inp, p_weight, p_bias, iidx, isz, oidx, osz, ACT)