ae2f_docs
Mlp.auto.h
Go to the documentation of this file.
1#undef __ae2f_MACRO_GENERATED
2#define __ae2f_MACRO_GENERATED 1
3#ifndef ae2fVK_Ann_Mlp_auto_h
4
6#define ae2fVK_Ann_Mlp_auto_h
7#endif
8
9#include <ae2fVK/Ann/Mlp.h>
10#undef __ae2f_MACRO_GENERATED
11#define __ae2f_MACRO_GENERATED 1
12#include <ae2fVK/Ann/Mlp.auto.h>
13#undef __ae2f_MACRO_GENERATED
14#define __ae2f_MACRO_GENERATED 1
15#include <ae2fVK/Ann/MlpSHADER.auto.h>
16#undef __ae2f_MACRO_GENERATED
17#define __ae2f_MACRO_GENERATED 1
18#include <ae2fVK/Ann/Slp.auto.h>
19#undef __ae2f_MACRO_GENERATED
20#define __ae2f_MACRO_GENERATED 1
21
23#include <ae2f/Macro.h>
24#undef __ae2f_MACRO_GENERATED
25#define __ae2f_MACRO_GENERATED 1
26#endif
27
29#include <stdlib.h>
30#undef __ae2f_MACRO_GENERATED
31#define __ae2f_MACRO_GENERATED 1
32#include <limits.h>
33#undef __ae2f_MACRO_GENERATED
34#define __ae2f_MACRO_GENERATED 1
35#include <string.h>
36#undef __ae2f_MACRO_GENERATED
37#define __ae2f_MACRO_GENERATED 1
38#include <assert.h>
39#undef __ae2f_MACRO_GENERATED
40#define __ae2f_MACRO_GENERATED 1
41#endif
42
43/**
44 * @brief
45 * Make MLP with OpenCL compute shader.
46 *
47 * @details
48 * The shader itself is incomplete. \n
49 * For using it you will need to define three macros as function. \n
50 * Below is the required snippet.
51 *
52 * #define ACT(const ae2f_float_t) -> ae2f_float_t \n
53 * #define ACT_DERIV(const ae2f_float_t) -> ae2f_float_t \n
54 * #define LOSS_DERIV(
55 * ae2f_float_t* retval
56 * const ae2f_float_t* const out
57 * , const ae2f_float_t* const out_desired
58 * , const size_t index
59 * , const size_t length_out_goal
60 * );
61 *
62 * @param vkcldeclaration
63 * @param vkcldefinition
64 * */
65#define __ae2fVK_AnnMlpMk_imp(
66 /** tparam */
67
68
69 /** param */
70 /* , ae2fVK_AnnMlpMk_t */ v_mk,
71 /* ae2f_optae2f_float_t* const */ iv_weight_opt,
72 /* ae2f_optae2f_float_t* const */ iv_bias_opt,
73 /* ae2f_optae2f_float_t* const */ iv_outstream_opt,
74 /* ae2f_optae2f_float_t* const */ iv_deltastream_opt,
75 /* const uint32_t */ i_len_count,
76 /* constsize_t* const */ i_len,
77 /* ae2f_optsize_t* const */ i_len_swap,
78 /* ae2f_opt const size_t */ i_prm_offset,
79 /* ae2f_opt const size_t */ i_extra,
80 /* ae2f_optae2f_AnnAct_t** const */ i_act,
81 /* ae2f_optae2f_AnnAct_t** const */ i_actderiv,
82 /* ae2f_AnnLoss_t* const */ i_lossderiv,
83 /* ae2f_float_t */ i_learningrate,
84 /* ae2f_float_t */ i_learningrate_bias,
85 /* const VkDevice */ i_vkdev,
86 /* const VkPhysicalDeviceMemoryProperties */ i_vkmemprops,
87 /* ae2f_optVkAllocationCallbacks* const */ iv_vkalloccalls,
88 /* ae2f_opt constchar* const */ i_vkcldeclaration,
89 /* ae2f_opt constchar* const */ i_vkcldefinition \
90)\
91{
92 (v_mk).m_ret.m_err = ae2f_errGlob_OK;
93 assert(i_len_count > 2);
94
95 do {
96 (v_mk).m_U1.m_i = (i_len_count);
97 while((v_mk).m_U1.m_i-- && (i_len)[(v_mk).m_U1.m_i] <= UINT32_MAX) {}
98 if((v_mk).m_U1.m_i != ae2f_static_cast(size_t, -1)) {
99 assert(!"`i_len` exceeds the expected size (4 bytes)");
100 (v_mk).m_ret.m_err |= ae2f_errGlob_IMP_NOT_FOUND;
101 break;
102 }
103
105 (v_mk).m_U0.m_mk
106 , i_len_count
107 , i_len
108 , i_len_swap
109 , i_act
110 , i_actderiv
111 , i_lossderiv
112 , iv_deltastream_opt
113 , iv_outstream_opt
114 , iv_weight_opt
115 , iv_bias_opt
116 , i_learningrate
117 , i_learningrate_bias
118 , ((i_prm_offset) + sizeof(ae2fVK_AnnMlp) - sizeof(ae2f_AnnMlp))
119 , i_extra
120 );
121
122 unless((v_mk).m_U0.m_mkswap.m_mkbase) {
123 assert(!"__ae2f_AnnMlpMk_imp went null");
124 (v_mk).m_ret.m_err |= ae2f_errGlob_ALLOC_FAILED;
125 break;
126 }
127
128 if((v_mk).m_ret.m_err) {
129 assert(!"__ae2f_AnnMlpMk_imp has failed.");
130 break;
131 }
132
133 (v_mk).m_U0.m_mkswap.m_mkbase->m_vkres = VK_SUCCESS;
134 unless((i_vkdev)) {
135 assert(!"i_vkdev is null");
136 (v_mk).m_ret.m_err |= ae2f_errGlob_PTR_IS_NULL; break;
137 }
138 (v_mk).m_U0.m_mkswap.m_mkbase->m_vkdev = (i_vkdev);
139 (v_mk).m_U0.m_mkswap.m_mkbase->m_vkalloccalls = (iv_vkalloccalls);
140
141 assert((v_mk).m_U0.m_mk.m_outc == (v_mk).m_U0.m_mkswap.m_mkbase->m_mlp.m_outc);
142
143 /** Global memory allocation */
145 break
146 , __ae2fVK_AnnMlpGlobMemSz(i_len_count, (v_mk).m_U0.m_mk.m_outc)
147 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkres
148 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkglobbuf
149 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkglobdevmem /** r_vkdevmem */
150 , (v_mk).m_ret.m_err /** v_errbit */
151 , (v_mk).m_U1.m_vkbufcreatinfo /** v_vkbufcreatinfo */
152 , (v_mk).m_U1.m_vkmemallocinfo
153 , VK_BUFFER_USAGE_STORAGE_BUFFER_BIT/** vkbufuseflags */
154 , VK_SHARING_MODE_EXCLUSIVE
155 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkdev
156 , (v_mk).m_U2.m_vkmemreqs
157 , (iv_vkalloccalls)
158 , (v_mk).m_U3.m_vkmemtypeidx
159 , UCHAR_MAX
160 , VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
161 , i_vkmemprops
162 );
163
164 {
165 (v_mk).m_U2.m_i = (i_len_count) * sizeof(uint32_t);
166
168 ae2f_float_t
169 , (v_mk).m_U1.m_map
170 , (*(v_mk).m_U0.m_mkswap.m_mkbase)
171 , (v_mk).m_ret.m_err
172 , (v_mk).m_U3.m_mapped
173 , 0
174 , (v_mk).m_U2.m_i
175 );
176
177 if((v_mk).m_ret.m_err) {
178 assert(!"__ae2fVK_AnnMlpMapRanged_imp has failed.");
180 (v_mk).m_U1.m_unmap
181 , *(v_mk).m_U0.m_mkswap.m_mkbase
182 , 0, ((i_len_count) * sizeof(uint32_t))
183 );
184 break;
185 }
186
187 unless((v_mk).m_U3.m_mapped) {
188 assert(!"__ae2fVK_AnnMlpMapRanged_imp went null");
189 (v_mk).m_ret.m_err |= ae2f_errGlob_ALLOC_FAILED;
190 }
191
192 (v_mk).m_U2.m_i = (i_len_count);
193 while((v_mk).m_U2.m_i--) {
194 ae2f_reinterpret_cast(uint32_t*, (v_mk).m_U3.m_mapped)[(v_mk).m_U2.m_i]
195 = (i_len)[(v_mk).m_U2.m_i];
196 }
197
199 (v_mk).m_U1.m_unmap
200 , *(v_mk).m_U0.m_mkswap.m_mkbase
201 , 0, ((i_len_count) * sizeof(uint32_t))
202 );
203 }
204
205 /** Local memory allocation */
207 break
208 , ((
209 (v_mk).m_U0.m_mk.m_mkbase->m_outc *
210 ((v_mk).m_U0.m_mk.m_mkbase->m_depth + 2)
211 ) * sizeof(ae2f_float_t))
212 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkres
213 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vklocbuf
214 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vklocdevmem /** r_vkdevmem */
215 , (v_mk).m_ret.m_err /** v_errbit */
216 , (v_mk).m_U1.m_vkbufcreatinfo /** v_vkbufcreatinfo */
217 , (v_mk).m_U1.m_vkmemallocinfo
218 , VK_BUFFER_USAGE_STORAGE_BUFFER_BIT /** vkbufuseflags */
219 , VK_SHARING_MODE_EXCLUSIVE
220 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkdev
221 , (v_mk).m_U2.m_vkmemreqs
222 , (iv_vkalloccalls)
223 , (v_mk).m_U3.m_vkmemtypeidx
224 , UCHAR_MAX
225 , VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
226 , i_vkmemprops
227 );
228
229 if((v_mk).m_U0.m_mkswap.m_mkbase->m_vkres) {
230 assert(!"__ae2fVK_AnnSlpMkAllocVKMem_imp");
231 break;
232 }
233
234 (v_mk).m_U1.m_vkdescsetlayoutbind[0].descriptorType
235 = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
236 (v_mk).m_U1.m_vkdescsetlayoutbind[0].descriptorCount = 1;
237 (v_mk).m_U1.m_vkdescsetlayoutbind[0].pImmutableSamplers = NULL;
238 (v_mk).m_U1.m_vkdescsetlayoutbind[0].stageFlags = VK_SHADER_STAGE_COMPUTE_BIT;
239
240 (v_mk).m_U1.m_vkdescsetlayoutbind[1]
241 = (v_mk).m_U1.m_vkdescsetlayoutbind[0];
242
243 (v_mk).m_U1.m_vkdescsetlayoutbind[0].binding = 0;
244 (v_mk).m_U1.m_vkdescsetlayoutbind[1].binding = 1;
245
246 (v_mk).m_U2.m_vkdescsetlayoutcreatinfo.sType
247 = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
248 (v_mk).m_U2.m_vkdescsetlayoutcreatinfo.pNext = NULL;
249 (v_mk).m_U2.m_vkdescsetlayoutcreatinfo.bindingCount = 2;
250 (v_mk).m_U2.m_vkdescsetlayoutcreatinfo.pBindings
251 = (v_mk).m_U1.m_vkdescsetlayoutbind;
252 (v_mk).m_U2.m_vkdescsetlayoutcreatinfo.flags = 0;
253
254 if(((v_mk).m_U0.m_mkswap.m_mkbase->m_vkres = vkCreateDescriptorSetLayout(
255 (i_vkdev)
256 , &(v_mk).m_U2.m_vkdescsetlayoutcreatinfo
257 , (iv_vkalloccalls)
258 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkdescsetlayout
259 )) != VK_SUCCESS)
260 {
261 assert(!"Failed VkCreateDescriptorSetLayout");
262 break;
263 }
264
265 if(!(v_mk).m_U0.m_mkswap.m_mkbase->m_vkdescsetlayout[0]) {
266 assert(!"VkCreateDescriptorSetLayout went null");
267 (v_mk).m_ret.m_err |= ae2f_errGlob_ALLOC_FAILED;
268 break;
269 }
270
271 (v_mk).m_U1.m_vkpushconstrange.offset = 0;
272 (v_mk).m_U1.m_vkpushconstrange.size = 0;
273 (v_mk).m_U1.m_vkpushconstrange.stageFlags = VK_SHADER_STAGE_COMPUTE_BIT;
274
275 (v_mk).m_U2.m_vkpipelayoutcreatinfo.flags = 0;
276 (v_mk).m_U2.m_vkpipelayoutcreatinfo.pNext = NULL;
277 (v_mk).m_U2.m_vkpipelayoutcreatinfo.pPushConstantRanges
278 = &(v_mk).m_U1.m_vkpushconstrange;
279 (v_mk).m_U2.m_vkpipelayoutcreatinfo.pushConstantRangeCount = 1;
280 (v_mk).m_U2.m_vkpipelayoutcreatinfo.setLayoutCount = 1;
281 (v_mk).m_U2.m_vkpipelayoutcreatinfo.sType
282 = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
283 (v_mk).m_U2.m_vkpipelayoutcreatinfo.pSetLayouts
284 = (v_mk).m_U0.m_mkswap.m_mkbase->m_vkdescsetlayout;
285
287 break
288 , (v_mk).m_U1.m_vkpushconstrange
289 , (v_mk).m_U2.m_vkpipelayoutcreatinfo
290 , (v_mk).m_ret.m_err
291 , (v_mk).m_U0.m_mkswap.m_mkbase
292 , ae2fVK_eAnnMlpPipeLayouts_kPredict
293 , sizeof(uint32_t) /* szrequired */
294 , iv_vkalloccalls
295 , i_vkdev
296 );
297
298 if((v_mk).m_U0.m_mkswap.m_mkbase->m_vkres != VK_SUCCESS) {
299 assert(!"__ae2fVK_AnnSlpMkOnePipeLayoutVerbose_imp 0 has failed.");
300 break;
301 }
302
304 break
305 , (v_mk).m_U1.m_vkpushconstrange
306 , (v_mk).m_U2.m_vkpipelayoutcreatinfo
307 , (v_mk).m_ret.m_err
308 , (v_mk).m_U0.m_mkswap.m_mkbase
309 , ae2fVK_eAnnMlpPipeLayouts_kTrain
310 , sizeof(uint32_t) + (sizeof(ae2f_float_t) * 2)
311 , (iv_vkalloccalls)
312 , (i_vkdev)
313 );
314
315 if((v_mk).m_U0.m_mkswap.m_mkbase->m_vkres != VK_SUCCESS) {
316 assert(!"__ae2fVK_AnnSlpMkOnePipeLayoutVerbose_imp 0 has failed.");
317 break;
318 }
319
320 assert(i_vkcldefinition);
321 assert(i_vkcldeclaration);
322
323 {
325 (v_mk).m_U1.m_clsrc_v
326 , (v_mk).m_ret.m_err
327 , (i_vkcldeclaration)
329 , (i_vkcldefinition)
330 );
331
332 unless((v_mk).m_U1.m_clsrc_v) {
333 assert(!"__ae2fVK_AnnSlpMkCLSPVVerbose_imp has failed.");
334 (v_mk).m_ret.m_err |= ae2f_errGlob_ALLOC_FAILED;
335 break;
336 }
337
338 if(((v_mk).m_U4.m_clspverror = clspvCompileFromSourcesString(
339 1, NULL
340 , &(v_mk).m_U1.m_clsrc
341 , ""
342 "-pod-pushconstant "
343 "-cl-fast-relaxed-math "
344 "-cl-single-precision-constant"
345
347 char**
349 const char**
350 , &(v_mk).m_U2.m_vkshadermodcreatinfo.pCode
351 )
352 )
353 , &(v_mk).m_U2.m_vkshadermodcreatinfo.codeSize
354 , &(v_mk).m_U3.m_cllog
355 )) != CLSPV_SUCCESS)
356 {
357 free((v_mk).m_U1.m_clsrc_v);
358 free(ae2f_const_cast(uint32_t*, (v_mk).m_U2.m_vkshadermodcreatinfo.pCode));
359 free((v_mk).m_U3.m_cllog);
360
361 switch((v_mk).m_U4.m_clspverror) {
362 case CLSPV_ERROR:
363 (v_mk).m_ret.m_err |= ae2f_errGlob_NFOUND;
364 assert(!"clspvCompileFromSourcesString has failed.");
365 break;
366 case CLSPV_OUT_OF_HOST_MEM:
367 (v_mk).m_ret.m_err |= ae2f_errGlob_ALLOC_FAILED;
368 assert(!"clspvCompileFromSourcesString has failed its allocation.");
369 break;
370
371 case CLSPV_INVALID_ARG:
372 (v_mk).m_ret.m_err |= ae2f_errGlob_WRONG_OPERATION;
373 assert(!"clspvCompileFromSourcesString found arguments invalid.");
374 break;
375
376 case CLSPV_SUCCESS: abort();
377 }
378
379 break;
380 }
381
382 unless((v_mk).m_U2.m_vkshadermodcreatinfo.pCode) {
383 assert(!"clspvCompileFromSourcesString went null.");
384 (v_mk).m_ret.m_err |= ae2f_errGlob_ALLOC_FAILED;
385 break;
386 }
387
388 free((v_mk).m_U1.m_clsrc_v);
389
390 (v_mk).m_U2.m_vkshadermodcreatinfo.sType
391 = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
392 (v_mk).m_U2.m_vkshadermodcreatinfo.flags = 0;
393 (v_mk).m_U2.m_vkshadermodcreatinfo.pNext = NULL;
394
395 if((((v_mk).m_U0.m_mkswap.m_mkbase->m_vkres = vkCreateShaderModule(
396 (i_vkdev)
397 , &(v_mk).m_U2.m_vkshadermodcreatinfo
398 , (iv_vkalloccalls)
399 , &(v_mk).m_U0.m_mkswap.m_mkbase->m_vkshadermodule
400 )) != VK_SUCCESS)) {
401 assert(!"vkCreateShaderModule has failed.");
402 free(ae2f_const_cast(uint32_t*, (v_mk).m_U2.m_vkshadermodcreatinfo.pCode));
403 free((v_mk).m_U3.m_cllog);
404 break;
405 }
406
407 unless((v_mk).m_U0.m_mkswap.m_mkbase->m_vkshadermodule) {
408 assert(!"vkCreateShaderModule went null");
409 free(ae2f_const_cast(uint32_t*, (v_mk).m_U2.m_vkshadermodcreatinfo.pCode));
410 free((v_mk).m_U3.m_cllog);
411 (v_mk).m_ret.m_err |= ae2f_errGlob_PTR_IS_NULL;
412 break;
413 }
414
415 free(ae2f_const_cast(uint32_t*, (v_mk).m_U2.m_vkshadermodcreatinfo.pCode));
416 free((v_mk).m_U3.m_cllog);
417 }
418
420 break
421 , (v_mk).m_ret.m_err
422 , (v_mk).m_U1.m_vkcomputepipecreatinfo
423 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkpipelayout
424 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkshadermodule
425 , "kPredict"
426 , ae2fVK_eAnnMlpPipes_kPredict
427 , ae2fVK_eAnnMlpPipeLayouts_kPredict
428 );
429
430 if((v_mk).m_ret.m_err) {
431 assert(!"__ae2fVK_AnnSlpMkLoadPipeCreat_imp");
432 break;
433 }
434
436 break
437 , (v_mk).m_ret.m_err
438 , (v_mk).m_U1.m_vkcomputepipecreatinfo
439 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkpipelayout
440 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkshadermodule
441 , "kPredictStream"
442 , ae2fVK_eAnnMlpPipes_kPredictStream
443 , ae2fVK_eAnnMlpPipeLayouts_kPredict
444 );
445
446 if((v_mk).m_ret.m_err) {
447 assert(!"__ae2fVK_AnnSlpMkLoadPipeCreat_imp");
448 break;
449 }
450
452 break
453 , (v_mk).m_ret.m_err
454 , (v_mk).m_U1.m_vkcomputepipecreatinfo
455 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkpipelayout
456 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkshadermodule
457 , "kFollow"
458 , ae2fVK_eAnnMlpPipes_kFollow
459 , ae2fVK_eAnnMlpPipeLayouts_kTrain
460 );
461
462 if((v_mk).m_ret.m_err) {
463 assert(!"__ae2fVK_AnnSlpMkLoadPipeCreat_imp");
464 break;
465 }
466
468 break
469 , (v_mk).m_ret.m_err
470 , (v_mk).m_U1.m_vkcomputepipecreatinfo
471 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkpipelayout
472 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkshadermodule
473 , "kTrainAuto"
474 , ae2fVK_eAnnMlpPipes_kTrainAuto
475 , ae2fVK_eAnnMlpPipeLayouts_kTrain
476 );
477
478 if((v_mk).m_ret.m_err) {
479 assert(!"__ae2fVK_AnnSlpMkLoadPipeCreat_imp");
480 break;
481 }
482
483 if(((v_mk).m_U0.m_mkswap.m_mkbase->m_vkres
484 = vkCreateComputePipelines(
485 (i_vkdev)
486 , VK_NULL_HANDLE
487 , ae2fVK_eAnnMlpPipes_LEN
488 , (v_mk).m_U1.m_vkcomputepipecreatinfo
489 , (iv_vkalloccalls)
490 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkpipeline
491 )
492 ) != VK_SUCCESS)
493 {
494 assert(!"vkCreateComputePipelines has failed.");
495 break;
496 }
497
498 assert((v_mk).m_ret.m_err == ae2f_errGlob_OK);
499 assert((v_mk).m_U0.m_mkswap.m_mkbase->m_vkres == VK_SUCCESS);
500
501 if((v_mk).m_ret.m_err) {
502 assert(!"__ae2fVK_AnnSlpMkCreatDescPool has failed.");
503 break;
504 }
505 } while(0);
506
507 do {
508 if(!(v_mk).m_U0.m_mkswap.m_mkbase) {
509 assert(!"Allocation has failed.");
510 (v_mk).m_ret.m_err |= ae2f_errGlob_ALLOC_FAILED;
511 break;
512 }
513
514 if((v_mk).m_U0.m_mkswap.m_mkbase->m_vkres != VK_SUCCESS) {
515 assert(!"m_vkres was not VK_SUCCESS");
516 (v_mk).m_ret.m_err |= ae2f_errGlob_NFOUND;
517 break;
518 }
519
520 assert((v_mk).m_ret.m_err == ae2f_errGlob_OK && "Final status is no good");
521 } while(0); \
522}
523
524#define __ae2fVK_AnnMlpClean_imp(
525 /** tparam */
526
527
528 /** param */
529 /* , ae2fVK_AnnMlp */ v_mlp \
530){
531 vkDestroyBuffer(
532 (v_mlp).m_vkdev
533 , (v_mlp).m_vklocbuf
534 , (v_mlp).m_vkalloccalls
535 );
536
537 vkDestroyBuffer(
538 (v_mlp).m_vkdev
539 , (v_mlp).m_vkglobbuf
540 , (v_mlp).m_vkalloccalls
541 );
542
543 vkDestroyPipeline(
544 (v_mlp).m_vkdev
545 , (v_mlp).m_vkpipeline
546 [ae2fVK_eAnnMlpPipes_kPredict]
547 , (v_mlp).m_vkalloccalls
548 );
549
550 vkDestroyPipeline(
551 (v_mlp).m_vkdev
552 , (v_mlp).m_vkpipeline
553 [ae2fVK_eAnnMlpPipes_kFollow]
554 , (v_mlp).m_vkalloccalls
555 );
556
557 vkDestroyPipeline(
558 (v_mlp).m_vkdev
559 , (v_mlp).m_vkpipeline
560 [ae2fVK_eAnnMlpPipes_kTrainAuto]
561 , (v_mlp).m_vkalloccalls
562 );
563
564 vkDestroyPipeline(
565 (v_mlp).m_vkdev
566 , (v_mlp).m_vkpipeline
567 [ae2fVK_eAnnMlpPipes_kPredictStream]
568 , (v_mlp).m_vkalloccalls
569 );
570
571 vkDestroyDescriptorSetLayout(
572 (v_mlp).m_vkdev
573 , (v_mlp).m_vkdescsetlayout
574 [ae2fVK_eAnnMlpDescLayouts_ONLY]
575 , (v_mlp).m_vkalloccalls
576 );
577
578 vkFreeMemory(
579 (v_mlp).m_vkdev
580 , (v_mlp).m_vkglobdevmem
581 , (v_mlp).m_vkalloccalls
582 );
583 vkFreeMemory(
584 (v_mlp).m_vkdev
585 , (v_mlp).m_vklocdevmem
586 , (v_mlp).m_vkalloccalls
587 );
588
589 vkDestroyPipelineLayout(
590 (v_mlp).m_vkdev
591 , (v_mlp).m_vkpipelayout
592 [ae2fVK_eAnnMlpPipeLayouts_kPredict]
593 , (v_mlp).m_vkalloccalls
594 );
595
596 vkDestroyPipelineLayout(
597 (v_mlp).m_vkdev
598 , (v_mlp).m_vkpipelayout
599 [ae2fVK_eAnnMlpPipeLayouts_kTrain]
600 , (v_mlp).m_vkalloccalls
601 ); \
602}
603
604#define __ae2fVK_AnnMlpMapGoal_imp(
605 /** tparam */
606
607
608 /** param */
609 /* , ae2fVK_AnnMlpMapRangedGeneric_t */ v_map,
610 /* ae2fVK_AnnMlp */ iv_mlp,
611 /* ae2f_err_t */ r_err,
612 /* ae2f_float_t* */ r_ptr \
613)\
614{
616 ae2f_float_t
617 , v_map
618 , iv_mlp
619 , r_err
620 , r_ptr
621 , __ae2fVK_AnnMlpGoalOff((iv_mlp).m_mlp.m_depth, (iv_mlp).m_mlp.m_outc)
622 , __ae2fVK_AnnMlpGoalSz((iv_mlp).m_map.m_depth, (iv_mlp).m_mlp.m_outc)
623 ); \
624}
625
626#define __ae2fVK_AnnMlpUnMapGoal_imp(
627 /** tparam */
628
629
630 /** param */
631 /* , ae2fVK_AnnMlpUnMap_t */ v_unmap,
632 /* ae2fVK_AnnMlp */ iv_mlp \
633)\
634{
636 v_unmap
637 , iv_mlp
638 , __ae2fVK_AnnMlpGoalOff((iv_mlp).m_mlp.m_depth, (iv_mlp).m_mlp.m_outc)
639 , __ae2fVK_AnnMlpGoalSz((iv_mlp).m_map.m_depth, (iv_mlp).m_mlp.m_outc)
640 ); \
641}
642
643#define __ae2fVK_AnnMlpMapOutStream_imp(
644 /** tparam */
645
646
647 /** param */
648 /* , ae2fVK_AnnMlpMapRangedGeneric_t */ v_map,
649 /* ae2fVK_AnnMlp */ iv_mlp,
650 /* ae2f_err_t */ r_err,
651 /* ae2f_float_t* */ r_ptr \
652)\
653{
655 ae2f_float_t
656 , v_map
657 , iv_mlp
658 , r_err
659 , r_ptr
660 , __ae2fVK_AnnMlpOutStreamOff((iv_mlp).m_mlp.m_depth, (iv_mlp).m_mlp.m_outc)
661 , __ae2fVK_AnnMlpOutStreamSz((iv_mlp).m_mlp.m_depth, (iv_mlp).m_mlp.m_outc)
662 ); \
663}
664
665#define __ae2fVK_AnnMlpUnMapOutStream_imp(
666 /** tparam */
667
668
669 /** param */
670 /* , ae2fVK_AnnMlpUnMap_t */ v_unmap,
671 /* ae2fVK_AnnMlp */ iv_mlp \
672) \
673{
675 v_unmap
676 , iv_mlp
677 , sizeof(uint32_t) * (iv_mlp).m_mlp.m_depth
678 , sizeof(ae2f_float_t) * (iv_mlp).m_mlp.m_outc * (iv_mlp).m_mlp.m_depth
679 ); \
680}
681
682#define __ae2fVK_AnnMlpMapWB_imp(
683 /** tparam */
684
685
686 /** param */
687 /* , ae2fVK_AnnMlpMapRangedGeneric_t */ v_map,
688 /* ae2fVK_AnnMlp */ iv_mlp,
689 /* ae2f_err_t */ r_err,
690 /* ae2f_float_t* */ r_ptrweight,
691 /* ae2f_float_t* */ r_ptrbias \
692)\
693{
695 ae2f_float_t
696 , v_map
697 , iv_mlp
698 , r_err
699 , r_ptrweight
700 , sizeof(uint32_t) * (iv_mlp).m_mlp.m_depth /** size vector */
701 + sizeof(ae2f_float_t) * (iv_mlp).m_mlp.m_outc * (iv_mlp).m_mlp.m_depth /** ostream */
702 , sizeof(ae2f_float_t) * (iv_mlp).m_mlp.m_outc * ((iv_mlp).m_mlp.m_outc + 1) * ((iv_mlp).m_mlp.m_depth - 1)
703 );
704 do {
705 if(r_err) {
706 assert(!"__ae2fVK_AnnSlpMapRangedGeneric_imp has failed.");
707 break;
708 }
709
710 unless(r_ptrweight) {
711 assert(!"__ae2fVK_AnnSlpMapRangedGeneric_imp went null.");
712 break;
713 }
714
715 r_ptrbias =
716 (r_ptrweight) +
717 ((iv_mlp).m_mlp.m_depth - 1) *
718 (iv_mlp).m_mlp.m_outc * (iv_mlp).m_mlp.m_outc;
719
720 } while(0); \
721}
722
723#define __ae2fVK_AnnMlpUnMapWB_imp(
724 /** tparam */
725
726
727 /** param */
728 /* , ae2fVK_AnnMlpUnMap_t */ v_unmap,
729 /* ae2fVK_AnnMlp */ iv_mlp \
730) \
731{
733 v_unmap
734 , iv_mlp
735 , sizeof(uint32_t) * (iv_mlp).m_mlp.m_depth
736 + sizeof(ae2f_float_t) * (iv_mlp).m_mlp.m_outc * (iv_mlp).m_mlp.m_depth
737 , sizeof(ae2f_float_t) * (iv_mlp).m_mlp.m_outc * ((iv_mlp).m_mlp.m_outc + 1) * ((iv_mlp).m_mlp.m_depth - 1)
738 ); \
739}
740#endif
741
742#undef __ae2f_MACRO_GENERATED
743
744#define __ae2f_MACRO_GENERATED 0
void ae2f_AnnAct_t(ae2f_float_t *ret, ae2f_float_t x)
Customisable activasion function type.
Definition Act.h:19
void ae2f_AnnLoss_t(ae2f_float_t *ret, const ae2f_float_t *out, const ae2f_float_t *goal, size_t index, size_t count)
Specify the way of calculating loss.
Definition Act.h:29
#define ae2f_enumdef(name,...)
Definition Cast.h:111
#define ae2f_structdef(key, name)
Definition Cast.h:110
#define ae2f_const_cast(t, v)
Definition Cast.h:57
#define ae2f_static_cast(t, v)
Definition Cast.h:42
#define ae2f_reinterpret_cast(t, v)
Definition Cast.h:52
#define unless(...)
Invokes when condition is false.
Definition Cast.h:103
ae2f_float ae2f_float_t
Definition Float.h:38
#define ae2f_opt
Definition Guide.h:26
#define __ae2fVK_AnnMlpBiasOff(i_depth, i_outc)
Definition Mlp.core.h:142
#define __ae2fVK_AnnMlpUnMapRanged_imp
Definition Mlp.core.h:168
ae2fVK_AnnSlpUnMap_t ae2fVK_AnnMlpUnMap_t
Definition Mlp.core.h:117
#define __ae2fVK_AnnMlpDeltaStreamSz(i_depth, i_outc)
Definition Mlp.core.h:145
#define __ae2fVK_AnnMlpMapRangedGeneric_imp
Definition Mlp.core.h:167
#define __ae2fVK_AnnMlpGoalSz(i_depth, i_outc)
Definition Mlp.core.h:151
VkMappedMemoryRange ae2fVK_AnnMlpMapRangedGeneric_t
Definition Mlp.core.h:118
#define __ae2fVK_AnnMlpMdlOff(...)
Definition Mlp.core.h:125
#define __ae2fVK_AnnMlpOutStreamSz(i_depth, i_outc)
Definition Mlp.core.h:127
#define __ae2fVK_AnnMlpWeightOff(i_depth, i_outc)
Definition Mlp.core.h:136
#define __ae2fVK_AnnMlpMdlSz(i_depth,...)
Definition Mlp.core.h:122
#define __ae2fVK_AnnMlpGoalOff(i_depth, i_outc)
Definition Mlp.core.h:154
ae2fVK_AnnSlpDescPoolCmdMk_t ae2fVK_AnnMlpDescPoolCmdMk_t
Definition Mlp.core.h:119
#define __ae2fVK_AnnMlpOutStreamOff(i_depth, i_outc)
Definition Mlp.core.h:130
#define __ae2fVK_AnnMlpWeightSz(i_depth, i_outc)
Definition Mlp.core.h:133
#define __ae2fVK_AnnMlpBiasSz(i_depth, i_outc)
Definition Mlp.core.h:139
#define __ae2fVK_AnnMlpGlobMemSz(i_depth, i_outc)
Definition Mlp.core.h:157
#define __ae2fVK_AnnMlpDeltaStreamOff(i_depth, i_outc)
Definition Mlp.core.h:148
#define __ae2fVK_AnnSlpGoalSz(i_inp, i_out)
Definition Slp.core.h:172
ae2fVK_eAnnSlpDescLayouts
Definition Slp.core.h:47
@ ae2fVK_eAnnSlpDescLayouts_kPredict
Definition Slp.core.h:48
@ ae2fVK_eAnnSlpDescLayouts_LEN
Definition Slp.core.h:50
@ ae2fVK_eAnnSlpDescLayouts_kTrain
Definition Slp.core.h:49
#define __ae2fVK_AnnSlpBiasOff(i_inp, i_out)
Definition Slp.core.h:175
#define __ae2fVK_AnnSlpGoalOff(i_inp, i_out)
Definition Slp.core.h:179
#define __ae2fVK_AnnSlpOutOff(i_inp, i_out)
Definition Slp.core.h:177
#define __ae2fVK_AnnSlpInpSz(i_inp,...)
Definition Slp.core.h:169
VkMappedMemoryRange ae2fVK_AnnSlpMapRangedGeneric_t
Definition Slp.core.h:152
#define __ae2fVK_AnnSlpBiasSz(i_inp, i_out)
Definition Slp.core.h:168
#define __ae2fVK_AnnSlpWeightSz(i_inp, i_out)
Definition Slp.core.h:167
#define __ae2fVK_AnnSlpInpOff(i_inp, i_out)
Definition Slp.core.h:176
ae2fVK_eAnnSlpPipeLayouts
Definition Slp.core.h:40
@ ae2fVK_eAnnSlpPipeLayouts_LEN
Definition Slp.core.h:44
@ ae2fVK_eAnnSlpPipeLayouts_kTrain
Definition Slp.core.h:42
@ ae2fVK_eAnnSlpPipeLayouts_kPredict
Definition Slp.core.h:41
@ ae2fVK_eAnnSlpPipeLayouts_kFit
Definition Slp.core.h:43
#define __ae2fVK_AnnSlpDeltaSz(i_inp, i_out)
Definition Slp.core.h:171
#define __ae2fVK_AnnSlpWeightOff(i_inp, i_out)
Definition Slp.core.h:174
ae2fVK_eAnnSlpDescPools
Definition Slp.core.h:34
@ ae2fVK_eAnnSlpDescPools_kPredict
Definition Slp.core.h:35
@ ae2fVK_eAnnSlpDescPools_kTrain
Definition Slp.core.h:36
@ ae2fVK_eAnnSlpDescPools_LEN
Definition Slp.core.h:37
#define __ae2fVK_AnnSlpOutSz(i_inp, i_out)
Definition Slp.core.h:170
VkMappedMemoryRange ae2fVK_AnnSlpUnMap_t
Definition Slp.core.h:152
char STATIC_ASSERT_ae2fVK_AnnSlpMkU2_vkdescsetlayoutbind_sz[sizeof(ae2fVK_AnnSlpMkU2S0_t)==sizeof(VkDescriptorSetLayoutBinding) *2 ? 1 :-1]
Definition Slp.core.h:117
ae2fVK_eAnnSlpPipes
Definition Slp.core.h:24
@ ae2fVK_eAnnSlpPipes_kFit
Definition Slp.core.h:28
@ ae2fVK_eAnnSlpPipes_kTrain
Definition Slp.core.h:27
@ ae2fVK_eAnnSlpPipes_kPredict
Definition Slp.core.h:25
@ ae2fVK_eAnnSlpPipes_LEN
This is the end of the value, which typically means the count of actual kernel used.
Definition Slp.core.h:31
@ ae2fVK_eAnnSlpPipes_kFollow
Definition Slp.core.h:26
#define __ae2fVK_AnnSlpDeltaOff(i_inp, i_out)
Definition Slp.core.h:178
#define ae2f_MAC_BUILD
Definition Util.h:4
#define ae2fVK_AnnMlpSHADER
#define __ae2fVK_AnnSlpDescPoolMk_imp(v_descpool, r_pool, r_reterr, iv_slp, i_vkdescpoolcreatflags, i_vkmaxdescsets)
#define __ae2fVK_AnnSlpDescPoolCmdClean_imp(iv_slp, i_pool, i_cmd)
#define __ae2fVK_AnnSlpDescPoolCmdMk_imp(COMMANDONRECORDING, v_cmdmk, r_cmd, iv_slp, i_pool, iv_err, i_desccount, i_offglob, i_szglob, i_offloc, i_szloc, i_desclayout, i_pipe, i_pipelayout, i_vkcmdbuf)
#define __ae2fVK_AnnSlpDescPoolClean_imp(i_slp, i_pool)
#define ae2f_errGlob_OK
The Operation you've wanted went successful.
Definition errGlob.h:23
#define ae2f_errGlob_ALLOC_FAILED
stdlib allocating functions (malloc, calloc, realloc) has been failed.
Definition errGlob.h:40
#define ae2f_errGlob_NFOUND
Found some errors, but not by parameters. The operation has failed.
Definition errGlob.h:50
#define ae2f_errGlob_WRONG_OPERATION
Found that parameter sent by programmer is invalid. The operation may have been ceased while the midd...
Definition errGlob.h:45
uint8_t ae2f_err_t
Informs that this number represents the error.
Definition errGlob.h:19
#define ae2f_errGlob_PTR_IS_NULL
Failed to refer the pointer either l-value inside the function.
Definition errGlob.h:32
#define ae2f_errGlob_IMP_NOT_FOUND
Failed to find the function on preprocessor which is callable for some reason No operation has beed d...
Definition errGlob.h:28
ae2fVK_AnnSlpDescPoolCmd ae2fVK_AnnMlpDescPoolCmd
Definition Mlp.h:28
ae2fVK_AnnSlpCreatDescPool_t ae2fVK_AnnMlpCreatDescPool_t
Definition Mlp.h:30
ae2fVK_AnnSlpDescPool ae2fVK_AnnMlpDescPool
Definition Mlp.h:27
#define __ae2fVK_AnnSlpMkCLSPVVerbose_imp(r_handle, ir_err, i_first, i_second, i_third)
Definition Slp.auto.h:760
#define __ae2fVK_AnnSlpMapRangedGeneric_imp(T, v_vkmapmemrange, iv_slp, r_err, r_ptr, i_off, i_sz)
Definition Slp.auto.h:834
#define __ae2fVK_AnnSlpMkLoadPipeCreat_imp(CMDONERR, r_reterr, pipecreat, pipelayout, shadermod, entrypoint, idx_pipe, idx_pipelayout)
Definition Slp.auto.h:209
#define __ae2fVK_AnnSlpMkOnePipeLayoutVerbose_imp(CMDONERR, v_vkpushconstrange, v_vkpipelayoutcreatinfo, r_reterr, iv_slpptr, idx, szrequired, vkalloccalls, vkdev)
Definition Slp.auto.h:248
#define __ae2fVK_AnnSlpUnMapRanged_imp(v_out, vi_slp, i_off, i_sz)
Definition Slp.auto.h:907
#define __ae2fVK_AnnSlpMkAllocVKMem_imp(CMDONERR, sz, r_vkres, r_vkbuf, r_vkdevmem, v_errbit, v_vkbufcreatinfo, v_memallocinfo, vkbufuseflags, vksharemode, vkdev, v_vkmemreq, vkalloccalls, v_memtypeidx, memtypeidx_invalid_minus_one, vkpropflag_req, vkphydevmemprops)
Definition Slp.auto.h:110
#define __ae2f_MACRO_GENERATED
Definition Mlp.auto.h:2
#define __ae2f_AnnMlpMk_imp(...)
Definition Mlp.auto.h:315
#define ae2f_MAC()
delta to delta
Definition mac.h:4
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const iv_bias_opt
Definition Mlp.def.cc:49
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t const size_t *const ae2f_opt size_t *const ae2f_opt const size_t ae2f_opt const size_t ae2f_opt ae2f_AnnAct_t **const ae2f_opt ae2f_AnnAct_t **const ae2f_AnnLoss_t *const ae2f_float_t ae2f_float_t const VkDevice const VkPhysicalDeviceMemoryProperties ae2f_opt VkAllocationCallbacks *const iv_vkalloccalls
Definition Mlp.def.cc:71
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t const size_t *const ae2f_opt size_t *const ae2f_opt const size_t ae2f_opt const size_t ae2f_opt ae2f_AnnAct_t **const ae2f_opt ae2f_AnnAct_t **const ae2f_AnnLoss_t *const ae2f_float_t ae2f_float_t const VkDevice const VkPhysicalDeviceMemoryProperties i_vkmemprops
Definition Mlp.def.cc:69
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t const size_t *const ae2f_opt size_t *const ae2f_opt const size_t ae2f_opt const size_t i_extra
Definition Mlp.def.cc:58
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t const size_t *const ae2f_opt size_t *const ae2f_opt const size_t ae2f_opt const size_t ae2f_opt ae2f_AnnAct_t **const ae2f_opt ae2f_AnnAct_t **const ae2f_AnnLoss_t *const ae2f_float_t i_learningrate
Definition Mlp.def.cc:65
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const iv_outstream_opt
Definition Mlp.def.cc:50
ae2fVK_AnnMlp ae2f_err_t ae2f_float_t ae2f_float_t * r_ptrbias
Definition Mlp.def.cc:652
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const iv_deltastream_opt
Definition Mlp.def.cc:51
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t i_len_count
Definition Mlp.def.cc:53
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t const size_t *const ae2f_opt size_t *const ae2f_opt const size_t ae2f_opt const size_t ae2f_opt ae2f_AnnAct_t **const ae2f_opt ae2f_AnnAct_t **const i_actderiv
Definition Mlp.def.cc:61
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t const size_t *const ae2f_opt size_t *const ae2f_opt const size_t ae2f_opt const size_t ae2f_opt ae2f_AnnAct_t **const ae2f_opt ae2f_AnnAct_t **const ae2f_AnnLoss_t *const ae2f_float_t ae2f_float_t i_learningrate_bias
Definition Mlp.def.cc:66
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t const size_t *const ae2f_opt size_t *const ae2f_opt const size_t ae2f_opt const size_t ae2f_opt ae2f_AnnAct_t **const ae2f_opt ae2f_AnnAct_t **const ae2f_AnnLoss_t *const ae2f_float_t ae2f_float_t const VkDevice const VkPhysicalDeviceMemoryProperties ae2f_opt VkAllocationCallbacks *const ae2f_opt const char *const ae2f_opt const char *const i_vkcldefinition
Definition Mlp.def.cc:76
ae2f_opt ae2f_float_t *const iv_weight_opt
Definition Mlp.def.cc:48
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t const size_t *const ae2f_opt size_t *const ae2f_opt const size_t ae2f_opt const size_t ae2f_opt ae2f_AnnAct_t **const ae2f_opt ae2f_AnnAct_t **const ae2f_AnnLoss_t *const ae2f_float_t ae2f_float_t const VkDevice i_vkdev
Definition Mlp.def.cc:68
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t const size_t *const ae2f_opt size_t *const ae2f_opt const size_t i_prm_offset
Definition Mlp.def.cc:57
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t const size_t *const ae2f_opt size_t *const ae2f_opt const size_t ae2f_opt const size_t ae2f_opt ae2f_AnnAct_t **const i_act
Definition Mlp.def.cc:60
ae2fVK_AnnMlp iv_mlp
Definition Mlp.def.cc:585
ae2fVK_AnnMlp ae2f_err_t ae2f_float_t * r_ptr
Definition Mlp.def.cc:589
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t const size_t *const ae2f_opt size_t *const ae2f_opt const size_t ae2f_opt const size_t ae2f_opt ae2f_AnnAct_t **const ae2f_opt ae2f_AnnAct_t **const ae2f_AnnLoss_t *const ae2f_float_t ae2f_float_t const VkDevice const VkPhysicalDeviceMemoryProperties ae2f_opt VkAllocationCallbacks *const ae2f_opt const char *const i_vkcldeclaration
Definition Mlp.def.cc:73
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t const size_t *const ae2f_opt size_t *const i_len_swap
Definition Mlp.def.cc:55
ae2fVK_AnnMlp ae2f_err_t r_err
Definition Mlp.def.cc:586
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t const size_t *const i_len
Definition Mlp.def.cc:54
ae2fVK_AnnMlp ae2f_err_t ae2f_float_t * r_ptrweight
Definition Mlp.def.cc:649
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t const size_t *const ae2f_opt size_t *const ae2f_opt const size_t ae2f_opt const size_t ae2f_opt ae2f_AnnAct_t **const ae2f_opt ae2f_AnnAct_t **const ae2f_AnnLoss_t *const i_lossderiv
Definition Mlp.def.cc:63