ae2f_docs
Mlp.auto.h
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#else
24#include <ae2f/Macro.h>
25#undef __ae2f_MACRO_GENERATED
26#define __ae2f_MACRO_GENERATED 1
27typedef ae2f_float_t cllocfloat_t;
28#endif
29
31#include <stdlib.h>
32#undef __ae2f_MACRO_GENERATED
33#define __ae2f_MACRO_GENERATED 1
34#include <limits.h>
35#undef __ae2f_MACRO_GENERATED
36#define __ae2f_MACRO_GENERATED 1
37#include <string.h>
38#undef __ae2f_MACRO_GENERATED
39#define __ae2f_MACRO_GENERATED 1
40#include <assert.h>
41#undef __ae2f_MACRO_GENERATED
42#define __ae2f_MACRO_GENERATED 1
43#endif
44
45
46#define __ae2fVK_AnnMlpMk_imp(
47 /** tparam */
48
49
50 /** param */
51 /* , ae2fVK_AnnMlpMk_t */ v_mk,
52 /* ae2f_optae2f_float_t* const */ iv_weight_opt,
53 /* ae2f_optae2f_float_t* const */ iv_bias_opt,
54 /* ae2f_optae2f_float_t* const */ iv_outstream_opt,
55 /* ae2f_optae2f_float_t* const */ iv_deltastream_opt,
56 /* const uint32_t */ i_len_count,
57 /* constsize_t* const */ i_len,
58 /* ae2f_optsize_t* const */ i_len_swap,
59 /* ae2f_opt const size_t */ i_prm_offset,
60 /* ae2f_opt const size_t */ i_extra,
61 /* ae2f_optae2f_AnnActFFN_t** const */ i_act,
62 /* ae2f_optae2f_AnnActFFN_t** const */ i_actderiv,
63 /* ae2f_AnnLossFFN_t* const */ i_lossderiv,
64 /* ae2f_float_t */ i_learningrate,
65 /* ae2f_float_t */ i_learningrate_bias,
66 /* const VkDevice */ i_vkdev,
67 /* const VkPhysicalDeviceMemoryProperties */ i_vkmemprops,
68 /* ae2f_optVkAllocationCallbacks* const */ iv_vkalloccalls,
69 /* ae2f_opt constchar* const */ i_vkcldeclaration,
70 /* ae2f_opt constchar* const */ i_vkcldefinition \
71)\
72{
74 ae2f_float_t, v_mk
75 , iv_weight_opt, iv_bias_opt, iv_outstream_opt, iv_deltastream_opt
76 , i_len_count, i_len, i_len_swap
77 , i_prm_offset, i_extra
78 , i_act, i_actderiv, i_lossderiv
79 , i_learningrate, i_learningrate_bias
80 , i_vkdev, i_vkmemprops, iv_vkalloccalls
81 , i_vkcldeclaration, i_vkcldefinition
82 ); \
83}
84
85/**
86 * @brief
87 * Make MLP with OpenCL compute shader.
88 *
89 * @details
90 * The shader itself is incomplete. \n
91 * For using it you will need to define three macros as function. \n
92 * Below is the required snippet.
93 *
94 * #define ACT(const ae2f_float_t) -> ae2f_float_t \n
95 * #define ACT_DERIV(const ae2f_float_t) -> ae2f_float_t \n
96 * #define LOSS_DERIV(
97 * ae2f_float_t* retval
98 * const ae2f_float_t* const out
99 * , const ae2f_float_t* const out_desired
100 * , const size_t index
101 * , const size_t length_out_goal
102 * );
103 *
104 * @param vkcldeclaration
105 * @param vkcldefinition
106 * */
107#define __ae2fVK_AnnMlpMk_imp_V(
108 /** tparam */
109 cllocfloat_t,
110
111 /** param */
112 /* , ae2fVK_AnnMlpMk_t */ v_mk,
113 /* ae2f_optae2f_float_t* const */ iv_weight_opt,
114 /* ae2f_optae2f_float_t* const */ iv_bias_opt,
115 /* ae2f_optae2f_float_t* const */ iv_outstream_opt,
116 /* ae2f_optae2f_float_t* const */ iv_deltastream_opt,
117 /* const uint32_t */ i_len_count,
118 /* constsize_t* const */ i_len,
119 /* ae2f_optsize_t* const */ i_len_swap,
120 /* ae2f_opt const size_t */ i_prm_offset,
121 /* ae2f_opt const size_t */ i_extra,
122 /* ae2f_optae2f_AnnActFFN_t** const */ i_act,
123 /* ae2f_optae2f_AnnActFFN_t** const */ i_actderiv,
124 /* ae2f_AnnLossFFN_t* const */ i_lossderiv,
125 /* ae2f_float_t */ i_learningrate,
126 /* ae2f_float_t */ i_learningrate_bias,
127 /* const VkDevice */ i_vkdev,
128 /* const VkPhysicalDeviceMemoryProperties */ i_vkmemprops,
129 /* ae2f_optVkAllocationCallbacks* const */ iv_vkalloccalls,
130 /* ae2f_opt constchar* const */ i_vkcldeclaration,
131 /* ae2f_opt constchar* const */ i_vkcldefinition \
132)\
133{
134 (v_mk).m_ret.m_err = ae2f_errGlob_OK;
135 assert(i_len_count > 2);
136
137 do {
138 (v_mk).m_U1.m_i = (i_len_count);
139 while((v_mk).m_U1.m_i-- && (i_len)[(v_mk).m_U1.m_i] <= UINT32_MAX) {}
140 if((v_mk).m_U1.m_i != ae2f_static_cast(size_t, -1)) {
141 assert(!"`i_len` exceeds the expected size (4 bytes)");
142 (v_mk).m_ret.m_err |= ae2f_errGlob_IMP_NOT_FOUND;
143 break;
144 }
145
147 (v_mk).m_U0.m_mk
148 , i_len_count
149 , i_len
150 , i_len_swap
151 , i_act
152 , i_actderiv
153 , i_lossderiv
154 , iv_deltastream_opt
155 , iv_outstream_opt
156 , iv_weight_opt
157 , iv_bias_opt
158 , i_learningrate
159 , i_learningrate_bias
160 , ((i_prm_offset) + sizeof(ae2fVK_AnnMlp) - sizeof(ae2f_AnnMlp))
161 , i_extra
162 );
163
164 unless((v_mk).m_U0.m_mkswap.m_mkbase) {
165 assert(!"__ae2f_AnnMlpMk_imp went null");
166 (v_mk).m_ret.m_err |= ae2f_errGlob_ALLOC_FAILED;
167 break;
168 }
169
170 if((v_mk).m_ret.m_err) {
171 assert(!"__ae2f_AnnMlpMk_imp has failed.");
172 break;
173 }
174
175 (v_mk).m_U0.m_mkswap.m_mkbase->m_vkres = VK_SUCCESS;
176 unless((i_vkdev)) {
177 assert(!"i_vkdev is null");
178 (v_mk).m_ret.m_err |= ae2f_errGlob_PTR_IS_NULL; break;
179 }
180 (v_mk).m_U0.m_mkswap.m_mkbase->m_vkdev = (i_vkdev);
181 (v_mk).m_U0.m_mkswap.m_mkbase->m_vkalloccalls = (iv_vkalloccalls);
182
183 assert((v_mk).m_U0.m_mk.m_outc == (v_mk).m_U0.m_mkswap.m_mkbase->m_mlp.m_outc);
184
185 /** Global memory allocation */
187 break
188 , __ae2fVK_AnnMlpGlobMemSz(i_len_count, (v_mk).m_U0.m_mk.m_outc, (v_mk).m_U0.m_mk.m_weightc)
189 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkres
190 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkglobbuf
191 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkglobdevmem /** r_vkdevmem */
192 , (v_mk).m_ret.m_err /** v_errbit */
193 , (v_mk).m_U1.m_vkbufcreatinfo /** v_vkbufcreatinfo */
194 , (v_mk).m_U1.m_vkmemallocinfo
195 , VK_BUFFER_USAGE_STORAGE_BUFFER_BIT/** vkbufuseflags */
196 , VK_SHARING_MODE_EXCLUSIVE
197 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkdev
198 , (v_mk).m_U2.m_vkmemreqs
199 , (iv_vkalloccalls)
200 , (v_mk).m_U3.m_vkmemtypeidx
201 , UCHAR_MAX
202 , VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
203 , i_vkmemprops
204 );
205
206 {
207 (v_mk).m_U2.m_i = (i_len_count) * sizeof(uint32_t);
208
210 ae2f_float_t
211 , (v_mk).m_U1.m_map
212 , (*(v_mk).m_U0.m_mkswap.m_mkbase)
213 , (v_mk).m_ret.m_err
214 , (v_mk).m_U3.m_mapped
215 , 0
216 , (v_mk).m_U2.m_i
217 );
218
219 if((v_mk).m_ret.m_err) {
220 assert(!"__ae2fVK_AnnMlpMapRanged_imp has failed.");
222 (v_mk).m_U1.m_unmap
223 , *(v_mk).m_U0.m_mkswap.m_mkbase
224 , 0, ((i_len_count) * sizeof(uint32_t))
225 );
226 break;
227 }
228
229 unless((v_mk).m_U3.m_mapped) {
230 assert(!"__ae2fVK_AnnMlpMapRanged_imp went null");
231 (v_mk).m_ret.m_err |= ae2f_errGlob_ALLOC_FAILED;
232 }
233
234 (v_mk).m_U2.m_i = (i_len_count);
235 while((v_mk).m_U2.m_i--) {
236 ae2f_reinterpret_cast(uint32_t*, (v_mk).m_U3.m_mapped)[(v_mk).m_U2.m_i]
237 = (i_len)[(v_mk).m_U2.m_i];
238 }
239
241 (v_mk).m_U1.m_unmap
242 , *(v_mk).m_U0.m_mkswap.m_mkbase
243 , 0, ((i_len_count) * sizeof(uint32_t))
244 );
245 }
246
247 /** Local memory allocation */
249 break
250 , ((
251 (v_mk).m_U0.m_mk.m_mkbase->m_outc *
252 ((v_mk).m_U0.m_mk.m_mkbase->m_depth + 2)
253 ) * sizeof(cllocfloat_t))
254 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkres
255 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vklocbuf
256 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vklocdevmem /** r_vkdevmem */
257 , (v_mk).m_ret.m_err /** v_errbit */
258 , (v_mk).m_U1.m_vkbufcreatinfo /** v_vkbufcreatinfo */
259 , (v_mk).m_U1.m_vkmemallocinfo
260 , VK_BUFFER_USAGE_STORAGE_BUFFER_BIT /** vkbufuseflags */
261 , VK_SHARING_MODE_EXCLUSIVE
262 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkdev
263 , (v_mk).m_U2.m_vkmemreqs
264 , (iv_vkalloccalls)
265 , (v_mk).m_U3.m_vkmemtypeidx
266 , UCHAR_MAX
267 , VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
268 , i_vkmemprops
269 );
270
271 if((v_mk).m_U0.m_mkswap.m_mkbase->m_vkres) {
272 assert(!"__ae2fVK_AnnSlpMkAllocVKMem_imp");
273 break;
274 }
275
276 (v_mk).m_U1.m_vkdescsetlayoutbind[0].descriptorType
277 = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
278 (v_mk).m_U1.m_vkdescsetlayoutbind[0].descriptorCount = 1;
279 (v_mk).m_U1.m_vkdescsetlayoutbind[0].pImmutableSamplers = NULL;
280 (v_mk).m_U1.m_vkdescsetlayoutbind[0].stageFlags = VK_SHADER_STAGE_COMPUTE_BIT;
281
282 (v_mk).m_U1.m_vkdescsetlayoutbind[1]
283 = (v_mk).m_U1.m_vkdescsetlayoutbind[0];
284
285 (v_mk).m_U1.m_vkdescsetlayoutbind[0].binding = 0;
286 (v_mk).m_U1.m_vkdescsetlayoutbind[1].binding = 1;
287
288 (v_mk).m_U2.m_vkdescsetlayoutcreatinfo.sType
289 = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
290 (v_mk).m_U2.m_vkdescsetlayoutcreatinfo.pNext = NULL;
291 (v_mk).m_U2.m_vkdescsetlayoutcreatinfo.bindingCount = 2;
292 (v_mk).m_U2.m_vkdescsetlayoutcreatinfo.pBindings
293 = (v_mk).m_U1.m_vkdescsetlayoutbind;
294 (v_mk).m_U2.m_vkdescsetlayoutcreatinfo.flags = 0;
295
296 if(((v_mk).m_U0.m_mkswap.m_mkbase->m_vkres = vkCreateDescriptorSetLayout(
297 (i_vkdev)
298 , &(v_mk).m_U2.m_vkdescsetlayoutcreatinfo
299 , (iv_vkalloccalls)
300 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkdescsetlayout
301 )) != VK_SUCCESS)
302 {
303 assert(!"Failed VkCreateDescriptorSetLayout");
304 break;
305 }
306
307 if(!(v_mk).m_U0.m_mkswap.m_mkbase->m_vkdescsetlayout[0]) {
308 assert(!"VkCreateDescriptorSetLayout went null");
309 (v_mk).m_ret.m_err |= ae2f_errGlob_ALLOC_FAILED;
310 break;
311 }
312
313 (v_mk).m_U1.m_vkpushconstrange.offset = 0;
314 (v_mk).m_U1.m_vkpushconstrange.size = 0;
315 (v_mk).m_U1.m_vkpushconstrange.stageFlags = VK_SHADER_STAGE_COMPUTE_BIT;
316
317 (v_mk).m_U2.m_vkpipelayoutcreatinfo.flags = 0;
318 (v_mk).m_U2.m_vkpipelayoutcreatinfo.pNext = NULL;
319 (v_mk).m_U2.m_vkpipelayoutcreatinfo.pPushConstantRanges
320 = &(v_mk).m_U1.m_vkpushconstrange;
321 (v_mk).m_U2.m_vkpipelayoutcreatinfo.pushConstantRangeCount = 1;
322 (v_mk).m_U2.m_vkpipelayoutcreatinfo.setLayoutCount = 1;
323 (v_mk).m_U2.m_vkpipelayoutcreatinfo.sType
324 = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
325 (v_mk).m_U2.m_vkpipelayoutcreatinfo.pSetLayouts
326 = (v_mk).m_U0.m_mkswap.m_mkbase->m_vkdescsetlayout;
327
329 break
330 , (v_mk).m_U1.m_vkpushconstrange
331 , (v_mk).m_U2.m_vkpipelayoutcreatinfo
332 , (v_mk).m_ret.m_err
333 , (v_mk).m_U0.m_mkswap.m_mkbase
334 , ae2fVK_eAnnMlpPipeLayouts_kPredict
335 , sizeof(uint32_t) /* szrequired */
336 , iv_vkalloccalls
337 , i_vkdev
338 );
339
340 if((v_mk).m_U0.m_mkswap.m_mkbase->m_vkres != VK_SUCCESS) {
341 assert(!"__ae2fVK_AnnSlpMkOnePipeLayoutVerbose_imp 0 has failed.");
342 break;
343 }
344
346 break
347 , (v_mk).m_U1.m_vkpushconstrange
348 , (v_mk).m_U2.m_vkpipelayoutcreatinfo
349 , (v_mk).m_ret.m_err
350 , (v_mk).m_U0.m_mkswap.m_mkbase
351 , ae2fVK_eAnnMlpPipeLayouts_kTrain
352 , sizeof(uint32_t) + (sizeof(ae2f_float_t) * 2)
353 , (iv_vkalloccalls)
354 , (i_vkdev)
355 );
356
357 if((v_mk).m_U0.m_mkswap.m_mkbase->m_vkres != VK_SUCCESS) {
358 assert(!"__ae2fVK_AnnSlpMkOnePipeLayoutVerbose_imp 0 has failed.");
359 break;
360 }
361
362 assert(i_vkcldefinition);
363 assert(i_vkcldeclaration);
364
365 {
367 (v_mk).m_U1.m_clsrc_v
368 , (v_mk).m_ret.m_err
369 , (i_vkcldeclaration)
371 , (i_vkcldefinition)
372 );
373
374 unless((v_mk).m_U1.m_clsrc_v) {
375 assert(!"__ae2fVK_AnnSlpMkCLSPVVerbose_imp has failed.");
376 (v_mk).m_ret.m_err |= ae2f_errGlob_ALLOC_FAILED;
377 break;
378 }
379
380 if(((v_mk).m_U4.m_clspverror = clspvCompileFromSourcesString(
381 1, NULL
382 , &(v_mk).m_U1.m_clsrc
383 , ""
385 char**
387 const char**
388 , &(v_mk).m_U2.m_vkshadermodcreatinfo.pCode
389 )
390 )
391 , &(v_mk).m_U2.m_vkshadermodcreatinfo.codeSize
392 , &(v_mk).m_U3.m_cllog
393 )) != CLSPV_SUCCESS)
394 {
395 free((v_mk).m_U1.m_clsrc_v);
396 free(ae2f_const_cast(uint32_t*, (v_mk).m_U2.m_vkshadermodcreatinfo.pCode));
397 free((v_mk).m_U3.m_cllog);
398
399 switch((v_mk).m_U4.m_clspverror) {
400 case CLSPV_ERROR:
401 (v_mk).m_ret.m_err |= ae2f_errGlob_NFOUND;
402 assert(!"clspvCompileFromSourcesString has failed.");
403 break;
404 case CLSPV_OUT_OF_HOST_MEM:
405 (v_mk).m_ret.m_err |= ae2f_errGlob_ALLOC_FAILED;
406 assert(!"clspvCompileFromSourcesString has failed its allocation.");
407 break;
408
409 case CLSPV_INVALID_ARG:
410 (v_mk).m_ret.m_err |= ae2f_errGlob_WRONG_OPERATION;
411 assert(!"clspvCompileFromSourcesString found arguments invalid.");
412 break;
413
414 case CLSPV_SUCCESS: abort();
415 }
416
417 break;
418 }
419
420 unless((v_mk).m_U2.m_vkshadermodcreatinfo.pCode) {
421 assert(!"clspvCompileFromSourcesString went null.");
422 (v_mk).m_ret.m_err |= ae2f_errGlob_ALLOC_FAILED;
423 break;
424 }
425
426 free((v_mk).m_U1.m_clsrc_v);
427
428 (v_mk).m_U2.m_vkshadermodcreatinfo.sType
429 = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
430 (v_mk).m_U2.m_vkshadermodcreatinfo.flags = 0;
431 (v_mk).m_U2.m_vkshadermodcreatinfo.pNext = NULL;
432
433 if((((v_mk).m_U0.m_mkswap.m_mkbase->m_vkres = vkCreateShaderModule(
434 (i_vkdev)
435 , &(v_mk).m_U2.m_vkshadermodcreatinfo
436 , (iv_vkalloccalls)
437 , &(v_mk).m_U0.m_mkswap.m_mkbase->m_vkshadermodule
438 )) != VK_SUCCESS)) {
439 assert(!"vkCreateShaderModule has failed.");
440 free(ae2f_const_cast(uint32_t*, (v_mk).m_U2.m_vkshadermodcreatinfo.pCode));
441 free((v_mk).m_U3.m_cllog);
442 break;
443 }
444
445 unless((v_mk).m_U0.m_mkswap.m_mkbase->m_vkshadermodule) {
446 assert(!"vkCreateShaderModule went null");
447 free(ae2f_const_cast(uint32_t*, (v_mk).m_U2.m_vkshadermodcreatinfo.pCode));
448 free((v_mk).m_U3.m_cllog);
449 (v_mk).m_ret.m_err |= ae2f_errGlob_PTR_IS_NULL;
450 break;
451 }
452
453 free(ae2f_const_cast(uint32_t*, (v_mk).m_U2.m_vkshadermodcreatinfo.pCode));
454 free((v_mk).m_U3.m_cllog);
455 }
456
458 break
459 , (v_mk).m_ret.m_err
460 , (v_mk).m_U1.m_vkcomputepipecreatinfo
461 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkpipelayout
462 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkshadermodule
463 , "kPredict"
464 , ae2fVK_eAnnMlpPipes_kPredict
465 , ae2fVK_eAnnMlpPipeLayouts_kPredict
466 );
467
468 if((v_mk).m_ret.m_err) {
469 assert(!"__ae2fVK_AnnSlpMkLoadPipeCreat_imp");
470 break;
471 }
472
474 break
475 , (v_mk).m_ret.m_err
476 , (v_mk).m_U1.m_vkcomputepipecreatinfo
477 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkpipelayout
478 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkshadermodule
479 , "kPredictStream"
480 , ae2fVK_eAnnMlpPipes_kPredictStream
481 , ae2fVK_eAnnMlpPipeLayouts_kPredict
482 );
483
484 if((v_mk).m_ret.m_err) {
485 assert(!"__ae2fVK_AnnSlpMkLoadPipeCreat_imp");
486 break;
487 }
488
490 break
491 , (v_mk).m_ret.m_err
492 , (v_mk).m_U1.m_vkcomputepipecreatinfo
493 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkpipelayout
494 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkshadermodule
495 , "kFollow"
496 , ae2fVK_eAnnMlpPipes_kFollow
497 , ae2fVK_eAnnMlpPipeLayouts_kTrain
498 );
499
500 if((v_mk).m_ret.m_err) {
501 assert(!"__ae2fVK_AnnSlpMkLoadPipeCreat_imp");
502 break;
503 }
504
506 break
507 , (v_mk).m_ret.m_err
508 , (v_mk).m_U1.m_vkcomputepipecreatinfo
509 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkpipelayout
510 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkshadermodule
511 , "kTrainAuto"
512 , ae2fVK_eAnnMlpPipes_kTrainAuto
513 , ae2fVK_eAnnMlpPipeLayouts_kTrain
514 );
515
516 if((v_mk).m_ret.m_err) {
517 assert(!"__ae2fVK_AnnSlpMkLoadPipeCreat_imp");
518 break;
519 }
520
521 if(((v_mk).m_U0.m_mkswap.m_mkbase->m_vkres
522 = vkCreateComputePipelines(
523 (i_vkdev)
524 , VK_NULL_HANDLE
525 , ae2fVK_eAnnMlpPipes_LEN
526 , (v_mk).m_U1.m_vkcomputepipecreatinfo
527 , (iv_vkalloccalls)
528 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkpipeline
529 )
530 ) != VK_SUCCESS)
531 {
532 assert(!"vkCreateComputePipelines has failed.");
533 break;
534 }
535
536 assert((v_mk).m_ret.m_err == ae2f_errGlob_OK);
537 assert((v_mk).m_U0.m_mkswap.m_mkbase->m_vkres == VK_SUCCESS);
538
539 if((v_mk).m_ret.m_err) {
540 assert(!"__ae2fVK_AnnSlpMkCreatDescPool has failed.");
541 break;
542 }
543 } while(0);
544
545 do {
546 if(!(v_mk).m_U0.m_mkswap.m_mkbase) {
547 assert(!"Allocation has failed.");
548 (v_mk).m_ret.m_err |= ae2f_errGlob_ALLOC_FAILED;
549 break;
550 }
551
552 if((v_mk).m_U0.m_mkswap.m_mkbase->m_vkres != VK_SUCCESS) {
553 assert(!"m_vkres was not VK_SUCCESS");
554 (v_mk).m_ret.m_err |= ae2f_errGlob_NFOUND;
555 break;
556 }
557
558 assert((v_mk).m_ret.m_err == ae2f_errGlob_OK && "Final status is no good");
559 } while(0); \
560}
561
562#define __ae2fVK_AnnMlpClean_imp(
563 /** tparam */
564
565
566 /** param */
567 /* , ae2fVK_AnnMlp */ v_mlp \
568){
569 vkDestroyBuffer(
570 (v_mlp).m_vkdev
571 , (v_mlp).m_vklocbuf
572 , (v_mlp).m_vkalloccalls
573 );
574
575 vkDestroyBuffer(
576 (v_mlp).m_vkdev
577 , (v_mlp).m_vkglobbuf
578 , (v_mlp).m_vkalloccalls
579 );
580
581 vkDestroyPipeline(
582 (v_mlp).m_vkdev
583 , (v_mlp).m_vkpipeline
584 [ae2fVK_eAnnMlpPipes_kPredict]
585 , (v_mlp).m_vkalloccalls
586 );
587
588 vkDestroyPipeline(
589 (v_mlp).m_vkdev
590 , (v_mlp).m_vkpipeline
591 [ae2fVK_eAnnMlpPipes_kFollow]
592 , (v_mlp).m_vkalloccalls
593 );
594
595 vkDestroyPipeline(
596 (v_mlp).m_vkdev
597 , (v_mlp).m_vkpipeline
598 [ae2fVK_eAnnMlpPipes_kTrainAuto]
599 , (v_mlp).m_vkalloccalls
600 );
601
602 vkDestroyPipeline(
603 (v_mlp).m_vkdev
604 , (v_mlp).m_vkpipeline
605 [ae2fVK_eAnnMlpPipes_kPredictStream]
606 , (v_mlp).m_vkalloccalls
607 );
608
609 vkDestroyDescriptorSetLayout(
610 (v_mlp).m_vkdev
611 , (v_mlp).m_vkdescsetlayout
612 [ae2fVK_eAnnMlpDescLayouts_ONLY]
613 , (v_mlp).m_vkalloccalls
614 );
615
616 vkFreeMemory(
617 (v_mlp).m_vkdev
618 , (v_mlp).m_vkglobdevmem
619 , (v_mlp).m_vkalloccalls
620 );
621 vkFreeMemory(
622 (v_mlp).m_vkdev
623 , (v_mlp).m_vklocdevmem
624 , (v_mlp).m_vkalloccalls
625 );
626
627 vkDestroyPipelineLayout(
628 (v_mlp).m_vkdev
629 , (v_mlp).m_vkpipelayout
630 [ae2fVK_eAnnMlpPipeLayouts_kPredict]
631 , (v_mlp).m_vkalloccalls
632 );
633
634 vkDestroyPipelineLayout(
635 (v_mlp).m_vkdev
636 , (v_mlp).m_vkpipelayout
637 [ae2fVK_eAnnMlpPipeLayouts_kTrain]
638 , (v_mlp).m_vkalloccalls
639 ); \
640}
641
642#define __ae2fVK_AnnMlpMapGoal_imp(
643 /** tparam */
644
645
646 /** param */
647 /* , ae2fVK_AnnMlpMapRangedGeneric_t */ v_map,
648 /* ae2fVK_AnnMlp */ iv_mlp,
649 /* ae2f_err_t */ r_err,
650 /* ae2f_float_t* */ r_ptr \
651)\
652{
654 ae2f_float_t
655 , v_map
656 , iv_mlp
657 , r_err
658 , r_ptr
659 , __ae2fVK_AnnMlpGoalOff((iv_mlp).m_mlp.m_depth, (iv_mlp).m_mlp.m_outc, (iv_mlp).m_mlp.m_weightc)
660 , __ae2fVK_AnnMlpGoalSz((iv_mlp).m_map.m_depth, (iv_mlp).m_mlp.m_outc, (iv_mlp).m_mlp.m_weightc)
661 ); \
662}
663
664#define __ae2fVK_AnnMlpUnMapGoal_imp(
665 /** tparam */
666
667
668 /** param */
669 /* , ae2fVK_AnnMlpUnMap_t */ v_unmap,
670 /* ae2fVK_AnnMlp */ iv_mlp \
671)\
672{
674 v_unmap
675 , iv_mlp
676 , __ae2fVK_AnnMlpGoalOff((iv_mlp).m_mlp.m_depth, (iv_mlp).m_mlp.m_outc, (iv_mlp).m_mlp.m_weightc)
677 , __ae2fVK_AnnMlpGoalSz((iv_mlp).m_map.m_depth, (iv_mlp).m_mlp.m_outc, (iv_mlp).m_mlp.m_weightc)
678 ); \
679}
680
681#define __ae2fVK_AnnMlpMapOutStream_imp(
682 /** tparam */
683
684
685 /** param */
686 /* , ae2fVK_AnnMlpMapRangedGeneric_t */ v_map,
687 /* ae2fVK_AnnMlp */ iv_mlp,
688 /* ae2f_err_t */ r_err,
689 /* ae2f_float_t* */ r_ptr \
690)\
691{
693 ae2f_float_t
694 , v_map
695 , iv_mlp
696 , r_err
697 , r_ptr
698 , __ae2fVK_AnnMlpOutStreamOff((iv_mlp).m_mlp.m_depth, (iv_mlp).m_mlp.m_outc, (iv_mlp).m_mlp.m_weightc)
699 , __ae2fVK_AnnMlpOutStreamSz((iv_mlp).m_mlp.m_depth, (iv_mlp).m_mlp.m_outc, (iv_mlp).m_mlp.m_weightc)
700 ); \
701}
702
703#define __ae2fVK_AnnMlpUnMapOutStream_imp(
704 /** tparam */
705
706
707 /** param */
708 /* , ae2fVK_AnnMlpUnMap_t */ v_unmap,
709 /* ae2fVK_AnnMlp */ iv_mlp \
710) \
711{
713 v_unmap
714 , iv_mlp
715 , sizeof(uint32_t) * (iv_mlp).m_mlp.m_depth
716 , sizeof(ae2f_float_t) * (iv_mlp).m_mlp.m_outc * (iv_mlp).m_mlp.m_depth
717 ); \
718}
719
720#define __ae2fVK_AnnMlpMapWB_imp(
721 /** tparam */
722
723
724 /** param */
725 /* , ae2fVK_AnnMlpMapRangedGeneric_t */ v_map,
726 /* ae2fVK_AnnMlp */ iv_mlp,
727 /* ae2f_err_t */ r_err,
728 /* ae2f_float_t* */ r_ptrweight,
729 /* ae2f_float_t* */ r_ptrbias \
730)\
731{
733 ae2f_float_t
734 , v_map
735 , iv_mlp
736 , r_err
737 , r_ptrweight
738 , sizeof(uint32_t) * (iv_mlp).m_mlp.m_depth /** size vector */
739 + sizeof(ae2f_float_t) * (iv_mlp).m_mlp.m_outc * (iv_mlp).m_mlp.m_depth /** ostream */
740 , sizeof(ae2f_float_t) * (iv_mlp).m_mlp.m_outc * ((iv_mlp).m_mlp.m_outc + 1) * ((iv_mlp).m_mlp.m_depth - 1)
741 );
742 do {
743 if(r_err) {
744 assert(!"__ae2fVK_AnnSlpMapRangedGeneric_imp has failed.");
745 break;
746 }
747
748 unless(r_ptrweight) {
749 assert(!"__ae2fVK_AnnSlpMapRangedGeneric_imp went null.");
750 break;
751 }
752
753 r_ptrbias =
754 (r_ptrweight) +
755 ((iv_mlp).m_mlp.m_depth - 1) *
756 (iv_mlp).m_mlp.m_outc * (iv_mlp).m_mlp.m_outc;
757
758 } while(0); \
759}
760
761#define __ae2fVK_AnnMlpUnMapWB_imp(
762 /** tparam */
763
764
765 /** param */
766 /* , ae2fVK_AnnMlpUnMap_t */ v_unmap,
767 /* ae2fVK_AnnMlp */ iv_mlp \
768) \
769{
771 v_unmap
772 , iv_mlp
773 , sizeof(uint32_t) * (iv_mlp).m_mlp.m_depth
774 + sizeof(ae2f_float_t) * (iv_mlp).m_mlp.m_outc * (iv_mlp).m_mlp.m_depth
775 , sizeof(ae2f_float_t) * (iv_mlp).m_mlp.m_outc * ((iv_mlp).m_mlp.m_outc + 1) * ((iv_mlp).m_mlp.m_depth - 1)
776 ); \
777}
778#endif
779
780#undef __ae2f_MACRO_GENERATED
781
782#define __ae2f_MACRO_GENERATED 0
#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
#define ae2f_opt
Definition Guide.h:26
#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
#define __ae2f_MACRO_GENERATED
Definition Conv.auto.h:2
#define __ae2fVK_AnnMlpOutStreamSz(i_depth, i_outc, i_weightc)
Definition Mlp.core.h:130
#define __ae2fVK_AnnMlpWeightOff(i_depth, i_outc, i_weightc)
Definition Mlp.core.h:139
#define __ae2fVK_AnnMlpUnMapRanged_imp
Definition Mlp.core.h:171
#define __ae2fVK_AnnMlpGoalOff(i_depth, i_outc, i_weightc)
Definition Mlp.core.h:157
#define __ae2fVK_AnnMlpMapRangedGeneric_imp
Definition Mlp.core.h:170
#define __ae2fVK_AnnMlpOutStreamOff(i_depth, i_outc, i_weightc)
Definition Mlp.core.h:133
#define __ae2fVK_AnnMlpMdlOff(...)
Definition Mlp.core.h:128
#define __ae2fVK_AnnMlpBiasSz(i_depth, i_outc, i_weightc)
Definition Mlp.core.h:142
#define __ae2fVK_AnnMlpMdlSz(i_depth,...)
Definition Mlp.core.h:125
#define __ae2fVK_AnnMlpGoalSz(i_depth, i_outc, i_weightc)
Definition Mlp.core.h:154
#define __ae2fVK_AnnMlpDeltaStreamOff(i_depth, i_outc, i_weightc)
Definition Mlp.core.h:151
#define __ae2fVK_AnnMlpGlobMemSz(i_depth, i_outc, i_weightc)
Definition Mlp.core.h:160
#define __ae2fVK_AnnMlpBiasOff(i_depth, i_outc, i_weightc)
Definition Mlp.core.h:145
#define __ae2fVK_AnnMlpDeltaStreamSz(i_depth, i_outc, i_weightc)
Definition Mlp.core.h:148
#define __ae2fVK_AnnMlpWeightSz(i_depth, i_outc, i_weightc)
Definition Mlp.core.h:136
#define __ae2fVK_AnnSlpDeltaOff_V(CLFLOAT, i_inp, i_out)
Definition Slp.core.h:185
#define __ae2fVK_AnnSlpGlobSz_V(CLFLOAT, i_inp, i_out)
Definition Slp.core.h:190
#define __ae2fVK_AnnSlpOutSz_V(CLFLOAT, i_inp, i_out)
Definition Slp.core.h:170
#define __ae2fVK_AnnSlpInpSz_V(CLFLOAT, i_inp, i_out)
Definition Slp.core.h:169
#define __ae2fVK_AnnSlpGoalSz_V(CLFLOAT, i_inp, i_out)
Definition Slp.core.h:172
#define __ae2fVK_AnnSlpDeltaSz_V(CLFLOAT, i_inp, i_out)
Definition Slp.core.h:171
#define __ae2fVK_AnnSlpBiasSz_V(CLFLOAT, i_inp, i_out)
Definition Slp.core.h:168
#define __ae2fVK_AnnSlpInpOff_V(CLFLOAT, i_inp, i_out)
Definition Slp.core.h:179
#define __ae2fVK_AnnSlpWeightSz_V(CLFLOAT, i_inp, i_out)
Definition Slp.core.h:167
#define __ae2fVK_AnnSlpWeightOff_V(CLFLOAT, i_inp, i_out)
Definition Slp.core.h:174
#define __ae2fVK_AnnSlpOutOff_V(CLFLOAT, i_inp, i_out)
Definition Slp.core.h:182
#define __ae2fVK_AnnSlpBiasOff_V(CLFLOAT, i_inp, i_out)
Definition Slp.core.h:176
#define __ae2fVK_AnnSlpGoalOff_V(CLFLOAT, i_inp, i_out)
Definition Slp.core.h:187
#define ae2f_MAC_BUILD
Definition Util.h:5
#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 __ae2fVK_AnnMlpMk_imp_V(cllocfloat_t, v_mk, iv_weight_opt, iv_bias_opt, iv_outstream_opt, iv_deltastream_opt, i_len_count, i_len, i_len_swap, i_prm_offset, i_extra, i_act, i_actderiv, i_lossderiv, i_learningrate, i_learningrate_bias, i_vkdev, i_vkmemprops, iv_vkalloccalls, i_vkcldeclaration, i_vkcldefinition)
Definition Mlp.auto.h:107
#define __ae2fVK_AnnSlpMkCLSPVVerbose_imp(r_handle, ir_err, i_first, i_second, i_third)
Definition Slp.auto.h:794
#define __ae2fVK_AnnSlpMapRangedGeneric_imp(T, v_vkmapmemrange, iv_slp, r_err, r_ptr, i_off, i_sz)
Definition Slp.auto.h:868
#define __ae2fVK_AnnSlpMkLoadPipeCreat_imp(CMDONERR, r_reterr, pipecreat, pipelayout, shadermod, entrypoint, idx_pipe, idx_pipelayout)
Definition Slp.auto.h:208
#define __ae2fVK_AnnSlpMkOnePipeLayoutVerbose_imp(CMDONERR, v_vkpushconstrange, v_vkpipelayoutcreatinfo, r_reterr, iv_slpptr, idx, szrequired, vkalloccalls, vkdev)
Definition Slp.auto.h:247
#define __ae2fVK_AnnSlpUnMapRanged_imp(v_out, vi_slp, i_off, i_sz)
Definition Slp.auto.h:941
#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:109
#define __ae2f_AnnMlpMk_imp(reg_mk, prm_depth, pprm_szvector, propptr_szswap_opt, lppfn_act_opt, lppfn_actderiv_opt, pfn_lossderiv, propptr_deltastream_opt, propptr_outcache_opt, propptr_weight_opt, propptr_bias_opt, prm_learningrate, prm_learningrate_bias, prm_offset_opt, prm_extra_opt)
Automatically allocates ae2f_AnnMlp and store its pointer at (reg_mk).m_mkbase.
Definition Mlp.auto.h:163
#define ae2f_MAC(...)
Definition mac.h:28