ae2f_docs
Mlp.def.cc
Go to the documentation of this file.
1#ifndef ae2fVK_Ann_Mlp_auto_h
2
3#if __ae2f_MACRO_GENERATED
4#define ae2fVK_Ann_Mlp_auto_h
5#endif
6
7#include <ae2fVK/Ann/Mlp.h>
8#include <ae2fVK/Ann/Mlp.auto.h>
9#include <ae2fVK/Ann/MlpSHADER.auto.h>
10#include <ae2fVK/Ann/Slp.auto.h>
11
13#include <ae2f/Macro.h>
14#endif
15
17#include <stdlib.h>
18#include <limits.h>
19#include <string.h>
20#include <assert.h>
21#endif
22
23/**
24 * @brief
25 * Make MLP with OpenCL compute shader.
26 *
27 * @details
28 * The shader itself is incomplete. \n
29 * For using it you will need to define three macros as function. \n
30 * Below is the required snippet.
31 *
32 * #define ACT(const ae2f_float_t) -> ae2f_float_t \n
33 * #define ACT_DERIV(const ae2f_float_t) -> ae2f_float_t \n
34 * #define LOSS_DERIV(
35 * ae2f_float_t* retval
36 * const ae2f_float_t* const out
37 * , const ae2f_float_t* const out_desired
38 * , const size_t index
39 * , const size_t length_out_goal
40 * );
41 *
42 * @param vkcldeclaration
43 * @param vkcldefinition
44 * */
45ae2f_MAC() _ae2fVK_AnnMlpMk_imp(
46 ae2fVK_AnnMlpMk_t v_mk,
47
52
53 const uint32_t i_len_count,
54 const size_t* const i_len,
55 ae2f_opt size_t* const i_len_swap,
56
57 ae2f_opt const size_t i_prm_offset,
58 ae2f_opt const size_t i_extra,
59
62
64
67
68 const VkDevice i_vkdev,
69 const VkPhysicalDeviceMemoryProperties i_vkmemprops,
70
71 ae2f_opt VkAllocationCallbacks* const iv_vkalloccalls,
72
73 ae2f_opt const char* const i_vkcldeclaration,
74 ae2f_opt const char* const i_vkcldefinition
75 )
76{
77 (v_mk).m_ret.m_err = ae2f_errGlob_OK;
78 assert(i_len_count > 2);
79
80 do {
81 (v_mk).m_U1.m_i = (i_len_count);
82 while((v_mk).m_U1.m_i-- && (i_len)[(v_mk).m_U1.m_i] <= UINT32_MAX) {}
83 if((v_mk).m_U1.m_i != ae2f_static_cast(size_t, -1)) {
84 assert(!"`i_len` exceeds the expected size (4 bytes)");
85 (v_mk).m_ret.m_err |= ae2f_errGlob_IMP_NOT_FOUND;
86 break;
87 }
88
90 (v_mk).m_U0.m_mk
92 , i_len
94 , i_act
103 , ((i_prm_offset) + sizeof(ae2fVK_AnnMlp) - sizeof(ae2f_AnnMlp))
104 , i_extra
105 );
106
107 unless((v_mk).m_U0.m_mkswap.m_mkbase) {
108 assert(!"__ae2f_AnnMlpMk_imp went null");
109 (v_mk).m_ret.m_err |= ae2f_errGlob_ALLOC_FAILED;
110 break;
111 }
112
113 if((v_mk).m_ret.m_err) {
114 assert(!"__ae2f_AnnMlpMk_imp has failed.");
115 break;
116 }
117
118 (v_mk).m_U0.m_mkswap.m_mkbase->m_vkres = VK_SUCCESS;
120 assert(!"i_vkdev is null");
121 (v_mk).m_ret.m_err |= ae2f_errGlob_PTR_IS_NULL; break;
122 }
123 (v_mk).m_U0.m_mkswap.m_mkbase->m_vkdev = (i_vkdev);
124 (v_mk).m_U0.m_mkswap.m_mkbase->m_vkalloccalls = (iv_vkalloccalls);
125
126 assert((v_mk).m_U0.m_mk.m_outc == (v_mk).m_U0.m_mkswap.m_mkbase->m_mlp.m_outc);
127
128 /** Global memory allocation */
130 break
131 , __ae2fVK_AnnMlpGlobMemSz(i_len_count, (v_mk).m_U0.m_mk.m_outc)
132 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkres
133 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkglobbuf
134 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkglobdevmem /** r_vkdevmem */
135 , (v_mk).m_ret.m_err /** v_errbit */
136 , (v_mk).m_U1.m_vkbufcreatinfo /** v_vkbufcreatinfo */
137 , (v_mk).m_U1.m_vkmemallocinfo
138 , VK_BUFFER_USAGE_STORAGE_BUFFER_BIT/** vkbufuseflags */
139 , VK_SHARING_MODE_EXCLUSIVE
140 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkdev
141 , (v_mk).m_U2.m_vkmemreqs
143 , (v_mk).m_U3.m_vkmemtypeidx
144 , UCHAR_MAX
145 , VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
147 );
148
149 {
150 (v_mk).m_U2.m_i = (i_len_count) * sizeof(uint32_t);
151
153 ae2f_float_t
154 , (v_mk).m_U1.m_map
155 , (*(v_mk).m_U0.m_mkswap.m_mkbase)
156 , (v_mk).m_ret.m_err
157 , (v_mk).m_U3.m_mapped
158 , 0
159 , (v_mk).m_U2.m_i
160 );
161
162 if((v_mk).m_ret.m_err) {
163 assert(!"__ae2fVK_AnnMlpMapRanged_imp has failed.");
165 (v_mk).m_U1.m_unmap
166 , *(v_mk).m_U0.m_mkswap.m_mkbase
167 , 0, ((i_len_count) * sizeof(uint32_t))
168 );
169 break;
170 }
171
172 unless((v_mk).m_U3.m_mapped) {
173 assert(!"__ae2fVK_AnnMlpMapRanged_imp went null");
174 (v_mk).m_ret.m_err |= ae2f_errGlob_ALLOC_FAILED;
175 }
176
177 (v_mk).m_U2.m_i = (i_len_count);
178 while((v_mk).m_U2.m_i--) {
179 ae2f_reinterpret_cast(uint32_t*, (v_mk).m_U3.m_mapped)[(v_mk).m_U2.m_i]
180 = (i_len)[(v_mk).m_U2.m_i];
181 }
182
184 (v_mk).m_U1.m_unmap
185 , *(v_mk).m_U0.m_mkswap.m_mkbase
186 , 0, ((i_len_count) * sizeof(uint32_t))
187 );
188 }
189
190 /** Local memory allocation */
192 break
193 , ((
194 (v_mk).m_U0.m_mk.m_mkbase->m_outc *
195 ((v_mk).m_U0.m_mk.m_mkbase->m_depth + 2)
196 ) * sizeof(ae2f_float_t))
197 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkres
198 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vklocbuf
199 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vklocdevmem /** r_vkdevmem */
200 , (v_mk).m_ret.m_err /** v_errbit */
201 , (v_mk).m_U1.m_vkbufcreatinfo /** v_vkbufcreatinfo */
202 , (v_mk).m_U1.m_vkmemallocinfo
203 , VK_BUFFER_USAGE_STORAGE_BUFFER_BIT /** vkbufuseflags */
204 , VK_SHARING_MODE_EXCLUSIVE
205 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkdev
206 , (v_mk).m_U2.m_vkmemreqs
208 , (v_mk).m_U3.m_vkmemtypeidx
209 , UCHAR_MAX
210 , VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
212 );
213
214 if((v_mk).m_U0.m_mkswap.m_mkbase->m_vkres) {
215 assert(!"__ae2fVK_AnnSlpMkAllocVKMem_imp");
216 break;
217 }
218
219 (v_mk).m_U1.m_vkdescsetlayoutbind[0].descriptorType
220 = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
221 (v_mk).m_U1.m_vkdescsetlayoutbind[0].descriptorCount = 1;
222 (v_mk).m_U1.m_vkdescsetlayoutbind[0].pImmutableSamplers = NULL;
223 (v_mk).m_U1.m_vkdescsetlayoutbind[0].stageFlags = VK_SHADER_STAGE_COMPUTE_BIT;
224
225 (v_mk).m_U1.m_vkdescsetlayoutbind[1]
226 = (v_mk).m_U1.m_vkdescsetlayoutbind[0];
227
228 (v_mk).m_U1.m_vkdescsetlayoutbind[0].binding = 0;
229 (v_mk).m_U1.m_vkdescsetlayoutbind[1].binding = 1;
230
231 (v_mk).m_U2.m_vkdescsetlayoutcreatinfo.sType
232 = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
233 (v_mk).m_U2.m_vkdescsetlayoutcreatinfo.pNext = NULL;
234 (v_mk).m_U2.m_vkdescsetlayoutcreatinfo.bindingCount = 2;
235 (v_mk).m_U2.m_vkdescsetlayoutcreatinfo.pBindings
236 = (v_mk).m_U1.m_vkdescsetlayoutbind;
237 (v_mk).m_U2.m_vkdescsetlayoutcreatinfo.flags = 0;
238
239 if(((v_mk).m_U0.m_mkswap.m_mkbase->m_vkres = vkCreateDescriptorSetLayout(
240 (i_vkdev)
241 , &(v_mk).m_U2.m_vkdescsetlayoutcreatinfo
243 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkdescsetlayout
244 )) != VK_SUCCESS)
245 {
246 assert(!"Failed VkCreateDescriptorSetLayout");
247 break;
248 }
249
250 if(!(v_mk).m_U0.m_mkswap.m_mkbase->m_vkdescsetlayout[0]) {
251 assert(!"VkCreateDescriptorSetLayout went null");
252 (v_mk).m_ret.m_err |= ae2f_errGlob_ALLOC_FAILED;
253 break;
254 }
255
256 (v_mk).m_U1.m_vkpushconstrange.offset = 0;
257 (v_mk).m_U1.m_vkpushconstrange.size = 0;
258 (v_mk).m_U1.m_vkpushconstrange.stageFlags = VK_SHADER_STAGE_COMPUTE_BIT;
259
260 (v_mk).m_U2.m_vkpipelayoutcreatinfo.flags = 0;
261 (v_mk).m_U2.m_vkpipelayoutcreatinfo.pNext = NULL;
262 (v_mk).m_U2.m_vkpipelayoutcreatinfo.pPushConstantRanges
263 = &(v_mk).m_U1.m_vkpushconstrange;
264 (v_mk).m_U2.m_vkpipelayoutcreatinfo.pushConstantRangeCount = 1;
265 (v_mk).m_U2.m_vkpipelayoutcreatinfo.setLayoutCount = 1;
266 (v_mk).m_U2.m_vkpipelayoutcreatinfo.sType
267 = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
268 (v_mk).m_U2.m_vkpipelayoutcreatinfo.pSetLayouts
269 = (v_mk).m_U0.m_mkswap.m_mkbase->m_vkdescsetlayout;
270
272 break
273 , (v_mk).m_U1.m_vkpushconstrange
274 , (v_mk).m_U2.m_vkpipelayoutcreatinfo
275 , (v_mk).m_ret.m_err
276 , (v_mk).m_U0.m_mkswap.m_mkbase
277 , ae2fVK_eAnnMlpPipeLayouts_kPredict
278 , sizeof(uint32_t) /* szrequired */
280 , i_vkdev
281 );
282
283 if((v_mk).m_U0.m_mkswap.m_mkbase->m_vkres != VK_SUCCESS) {
284 assert(!"__ae2fVK_AnnSlpMkOnePipeLayoutVerbose_imp 0 has failed.");
285 break;
286 }
287
289 break
290 , (v_mk).m_U1.m_vkpushconstrange
291 , (v_mk).m_U2.m_vkpipelayoutcreatinfo
292 , (v_mk).m_ret.m_err
293 , (v_mk).m_U0.m_mkswap.m_mkbase
294 , ae2fVK_eAnnMlpPipeLayouts_kTrain
295 , sizeof(uint32_t) + (sizeof(ae2f_float_t) * 2)
297 , (i_vkdev)
298 );
299
300 if((v_mk).m_U0.m_mkswap.m_mkbase->m_vkres != VK_SUCCESS) {
301 assert(!"__ae2fVK_AnnSlpMkOnePipeLayoutVerbose_imp 0 has failed.");
302 break;
303 }
304
307
308 {
310 (v_mk).m_U1.m_clsrc_v
311 , (v_mk).m_ret.m_err
315 );
316
317 unless((v_mk).m_U1.m_clsrc_v) {
318 assert(!"__ae2fVK_AnnSlpMkCLSPVVerbose_imp has failed.");
319 (v_mk).m_ret.m_err |= ae2f_errGlob_ALLOC_FAILED;
320 break;
321 }
322
323 if(((v_mk).m_U4.m_clspverror = clspvCompileFromSourcesString(
324 1, NULL
325 , &(v_mk).m_U1.m_clsrc
326 , ""
327 "-pod-pushconstant "
328 "-cl-fast-relaxed-math "
329 "-cl-single-precision-constant"
330
332 char**
334 const char**
335 , &(v_mk).m_U2.m_vkshadermodcreatinfo.pCode
336 )
337 )
338 , &(v_mk).m_U2.m_vkshadermodcreatinfo.codeSize
339 , &(v_mk).m_U3.m_cllog
340 )) != CLSPV_SUCCESS)
341 {
342 free((v_mk).m_U1.m_clsrc_v);
343 free(ae2f_const_cast(uint32_t*, (v_mk).m_U2.m_vkshadermodcreatinfo.pCode));
344 free((v_mk).m_U3.m_cllog);
345
346 switch((v_mk).m_U4.m_clspverror) {
347 case CLSPV_ERROR:
348 (v_mk).m_ret.m_err |= ae2f_errGlob_NFOUND;
349 assert(!"clspvCompileFromSourcesString has failed.");
350 break;
351 case CLSPV_OUT_OF_HOST_MEM:
352 (v_mk).m_ret.m_err |= ae2f_errGlob_ALLOC_FAILED;
353 assert(!"clspvCompileFromSourcesString has failed its allocation.");
354 break;
355
356 case CLSPV_INVALID_ARG:
357 (v_mk).m_ret.m_err |= ae2f_errGlob_WRONG_OPERATION;
358 assert(!"clspvCompileFromSourcesString found arguments invalid.");
359 break;
360
361 case CLSPV_SUCCESS: abort();
362 }
363
364 break;
365 }
366
367 unless((v_mk).m_U2.m_vkshadermodcreatinfo.pCode) {
368 assert(!"clspvCompileFromSourcesString went null.");
369 (v_mk).m_ret.m_err |= ae2f_errGlob_ALLOC_FAILED;
370 break;
371 }
372
373 free((v_mk).m_U1.m_clsrc_v);
374
375 (v_mk).m_U2.m_vkshadermodcreatinfo.sType
376 = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
377 (v_mk).m_U2.m_vkshadermodcreatinfo.flags = 0;
378 (v_mk).m_U2.m_vkshadermodcreatinfo.pNext = NULL;
379
380 if((((v_mk).m_U0.m_mkswap.m_mkbase->m_vkres = vkCreateShaderModule(
381 (i_vkdev)
382 , &(v_mk).m_U2.m_vkshadermodcreatinfo
384 , &(v_mk).m_U0.m_mkswap.m_mkbase->m_vkshadermodule
385 )) != VK_SUCCESS)) {
386 assert(!"vkCreateShaderModule has failed.");
387 free(ae2f_const_cast(uint32_t*, (v_mk).m_U2.m_vkshadermodcreatinfo.pCode));
388 free((v_mk).m_U3.m_cllog);
389 break;
390 }
391
392 unless((v_mk).m_U0.m_mkswap.m_mkbase->m_vkshadermodule) {
393 assert(!"vkCreateShaderModule went null");
394 free(ae2f_const_cast(uint32_t*, (v_mk).m_U2.m_vkshadermodcreatinfo.pCode));
395 free((v_mk).m_U3.m_cllog);
396 (v_mk).m_ret.m_err |= ae2f_errGlob_PTR_IS_NULL;
397 break;
398 }
399
400 free(ae2f_const_cast(uint32_t*, (v_mk).m_U2.m_vkshadermodcreatinfo.pCode));
401 free((v_mk).m_U3.m_cllog);
402 }
403
405 break
406 , (v_mk).m_ret.m_err
407 , (v_mk).m_U1.m_vkcomputepipecreatinfo
408 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkpipelayout
409 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkshadermodule
410 , "kPredict"
411 , ae2fVK_eAnnMlpPipes_kPredict
412 , ae2fVK_eAnnMlpPipeLayouts_kPredict
413 );
414
415 if((v_mk).m_ret.m_err) {
416 assert(!"__ae2fVK_AnnSlpMkLoadPipeCreat_imp");
417 break;
418 }
419
421 break
422 , (v_mk).m_ret.m_err
423 , (v_mk).m_U1.m_vkcomputepipecreatinfo
424 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkpipelayout
425 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkshadermodule
426 , "kPredictStream"
427 , ae2fVK_eAnnMlpPipes_kPredictStream
428 , ae2fVK_eAnnMlpPipeLayouts_kPredict
429 );
430
431 if((v_mk).m_ret.m_err) {
432 assert(!"__ae2fVK_AnnSlpMkLoadPipeCreat_imp");
433 break;
434 }
435
437 break
438 , (v_mk).m_ret.m_err
439 , (v_mk).m_U1.m_vkcomputepipecreatinfo
440 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkpipelayout
441 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkshadermodule
442 , "kFollow"
443 , ae2fVK_eAnnMlpPipes_kFollow
444 , ae2fVK_eAnnMlpPipeLayouts_kTrain
445 );
446
447 if((v_mk).m_ret.m_err) {
448 assert(!"__ae2fVK_AnnSlpMkLoadPipeCreat_imp");
449 break;
450 }
451
453 break
454 , (v_mk).m_ret.m_err
455 , (v_mk).m_U1.m_vkcomputepipecreatinfo
456 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkpipelayout
457 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkshadermodule
458 , "kTrainAuto"
459 , ae2fVK_eAnnMlpPipes_kTrainAuto
460 , ae2fVK_eAnnMlpPipeLayouts_kTrain
461 );
462
463 if((v_mk).m_ret.m_err) {
464 assert(!"__ae2fVK_AnnSlpMkLoadPipeCreat_imp");
465 break;
466 }
467
468 if(((v_mk).m_U0.m_mkswap.m_mkbase->m_vkres
469 = vkCreateComputePipelines(
470 (i_vkdev)
471 , VK_NULL_HANDLE
472 , ae2fVK_eAnnMlpPipes_LEN
473 , (v_mk).m_U1.m_vkcomputepipecreatinfo
475 , (v_mk).m_U0.m_mkswap.m_mkbase->m_vkpipeline
476 )
477 ) != VK_SUCCESS)
478 {
479 assert(!"vkCreateComputePipelines has failed.");
480 break;
481 }
482
483 assert((v_mk).m_ret.m_err == ae2f_errGlob_OK);
484 assert((v_mk).m_U0.m_mkswap.m_mkbase->m_vkres == VK_SUCCESS);
485
486 if((v_mk).m_ret.m_err) {
487 assert(!"__ae2fVK_AnnSlpMkCreatDescPool has failed.");
488 break;
489 }
490 } while(0);
491
492 do {
493 if(!(v_mk).m_U0.m_mkswap.m_mkbase) {
494 assert(!"Allocation has failed.");
495 (v_mk).m_ret.m_err |= ae2f_errGlob_ALLOC_FAILED;
496 break;
497 }
498
499 if((v_mk).m_U0.m_mkswap.m_mkbase->m_vkres != VK_SUCCESS) {
500 assert(!"m_vkres was not VK_SUCCESS");
501 (v_mk).m_ret.m_err |= ae2f_errGlob_NFOUND;
502 break;
503 }
504
505 assert((v_mk).m_ret.m_err == ae2f_errGlob_OK && "Final status is no good");
506 } while(0);
507}
508
509ae2f_MAC() _ae2fVK_AnnMlpClean_imp(ae2fVK_AnnMlp v_mlp) {
510 vkDestroyBuffer(
511 (v_mlp).m_vkdev
512 , (v_mlp).m_vklocbuf
513 , (v_mlp).m_vkalloccalls
514 );
515
516 vkDestroyBuffer(
517 (v_mlp).m_vkdev
518 , (v_mlp).m_vkglobbuf
519 , (v_mlp).m_vkalloccalls
520 );
521
522 vkDestroyPipeline(
523 (v_mlp).m_vkdev
524 , (v_mlp).m_vkpipeline
525 [ae2fVK_eAnnMlpPipes_kPredict]
526 , (v_mlp).m_vkalloccalls
527 );
528
529 vkDestroyPipeline(
530 (v_mlp).m_vkdev
531 , (v_mlp).m_vkpipeline
532 [ae2fVK_eAnnMlpPipes_kFollow]
533 , (v_mlp).m_vkalloccalls
534 );
535
536 vkDestroyPipeline(
537 (v_mlp).m_vkdev
538 , (v_mlp).m_vkpipeline
539 [ae2fVK_eAnnMlpPipes_kTrainAuto]
540 , (v_mlp).m_vkalloccalls
541 );
542
543 vkDestroyPipeline(
544 (v_mlp).m_vkdev
545 , (v_mlp).m_vkpipeline
546 [ae2fVK_eAnnMlpPipes_kPredictStream]
547 , (v_mlp).m_vkalloccalls
548 );
549
550 vkDestroyDescriptorSetLayout(
551 (v_mlp).m_vkdev
552 , (v_mlp).m_vkdescsetlayout
553 [ae2fVK_eAnnMlpDescLayouts_ONLY]
554 , (v_mlp).m_vkalloccalls
555 );
556
557 vkFreeMemory(
558 (v_mlp).m_vkdev
559 , (v_mlp).m_vkglobdevmem
560 , (v_mlp).m_vkalloccalls
561 );
562 vkFreeMemory(
563 (v_mlp).m_vkdev
564 , (v_mlp).m_vklocdevmem
565 , (v_mlp).m_vkalloccalls
566 );
567
568 vkDestroyPipelineLayout(
569 (v_mlp).m_vkdev
570 , (v_mlp).m_vkpipelayout
571 [ae2fVK_eAnnMlpPipeLayouts_kPredict]
572 , (v_mlp).m_vkalloccalls
573 );
574
575 vkDestroyPipelineLayout(
576 (v_mlp).m_vkdev
577 , (v_mlp).m_vkpipelayout
578 [ae2fVK_eAnnMlpPipeLayouts_kTrain]
579 , (v_mlp).m_vkalloccalls
580 );
581}
582
583ae2f_MAC() _ae2fVK_AnnMlpMapGoal_imp(
585 ae2fVK_AnnMlp iv_mlp,
588 )
589{
591 ae2f_float_t
592 , v_map
593 , iv_mlp
594 , r_err
595 , r_ptr
596 , __ae2fVK_AnnMlpGoalOff((iv_mlp).m_mlp.m_depth, (iv_mlp).m_mlp.m_outc)
597 , __ae2fVK_AnnMlpGoalSz((iv_mlp).m_map.m_depth, (iv_mlp).m_mlp.m_outc)
598 );
599}
600
601ae2f_MAC() _ae2fVK_AnnMlpUnMapGoal_imp(
602 ae2fVK_AnnMlpUnMap_t v_unmap,
603 ae2fVK_AnnMlp iv_mlp
604 )
605{
607 v_unmap
608 , iv_mlp
609 , __ae2fVK_AnnMlpGoalOff((iv_mlp).m_mlp.m_depth, (iv_mlp).m_mlp.m_outc)
610 , __ae2fVK_AnnMlpGoalSz((iv_mlp).m_map.m_depth, (iv_mlp).m_mlp.m_outc)
611 );
612}
613
614ae2f_MAC() _ae2fVK_AnnMlpMapOutStream_imp(
616 ae2fVK_AnnMlp iv_mlp,
617 ae2f_err_t r_err,
618 ae2f_float_t* r_ptr
619 )
620{
622 ae2f_float_t
623 , v_map
624 , iv_mlp
625 , r_err
626 , r_ptr
627 , __ae2fVK_AnnMlpOutStreamOff((iv_mlp).m_mlp.m_depth, (iv_mlp).m_mlp.m_outc)
628 , __ae2fVK_AnnMlpOutStreamSz((iv_mlp).m_mlp.m_depth, (iv_mlp).m_mlp.m_outc)
629 );
630}
631
632ae2f_MAC() _ae2fVK_AnnMlpUnMapOutStream_imp(
633 ae2fVK_AnnMlpUnMap_t v_unmap,
634 ae2fVK_AnnMlp iv_mlp
635 )
636{
638 v_unmap
639 , iv_mlp
640 , sizeof(uint32_t) * (iv_mlp).m_mlp.m_depth
641 , sizeof(ae2f_float_t) * (iv_mlp).m_mlp.m_outc * (iv_mlp).m_mlp.m_depth
642 );
643}
644
645ae2f_MAC() _ae2fVK_AnnMlpMapWB_imp(
647 ae2fVK_AnnMlp iv_mlp,
648 ae2f_err_t r_err,
651 )
652{
654 ae2f_float_t
655 , v_map
656 , iv_mlp
657 , r_err
659 , sizeof(uint32_t) * (iv_mlp).m_mlp.m_depth /** size vector */
660 + sizeof(ae2f_float_t) * (iv_mlp).m_mlp.m_outc * (iv_mlp).m_mlp.m_depth /** ostream */
661 , sizeof(ae2f_float_t) * (iv_mlp).m_mlp.m_outc * ((iv_mlp).m_mlp.m_outc + 1) * ((iv_mlp).m_mlp.m_depth - 1)
662 );
663 do {
664 if(r_err) {
665 assert(!"__ae2fVK_AnnSlpMapRangedGeneric_imp has failed.");
666 break;
667 }
668
670 assert(!"__ae2fVK_AnnSlpMapRangedGeneric_imp went null.");
671 break;
672 }
673
674 r_ptrbias =
675 (r_ptrweight) +
676 ((iv_mlp).m_mlp.m_depth - 1) *
677 (iv_mlp).m_mlp.m_outc * (iv_mlp).m_mlp.m_outc;
678
679 } while(0);
680}
681
682ae2f_MAC() _ae2fVK_AnnMlpUnMapWB_imp(
683 ae2fVK_AnnMlpUnMap_t v_unmap,
684 ae2fVK_AnnMlp iv_mlp
685 )
686{
688 v_unmap
689 , iv_mlp
690 , sizeof(uint32_t) * (iv_mlp).m_mlp.m_depth
691 + sizeof(ae2f_float_t) * (iv_mlp).m_mlp.m_outc * (iv_mlp).m_mlp.m_depth
692 , sizeof(ae2f_float_t) * (iv_mlp).m_mlp.m_outc * ((iv_mlp).m_mlp.m_outc + 1) * ((iv_mlp).m_mlp.m_depth - 1)
693 );
694}
695#endif
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_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_AnnMlpUnMapRanged_imp
Definition Mlp.core.h:168
ae2fVK_AnnSlpUnMap_t ae2fVK_AnnMlpUnMap_t
Definition Mlp.core.h:117
#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_AnnMlpOutStreamSz(i_depth, i_outc)
Definition Mlp.core.h:127
#define __ae2fVK_AnnMlpGoalOff(i_depth, i_outc)
Definition Mlp.core.h:154
#define __ae2fVK_AnnMlpOutStreamOff(i_depth, i_outc)
Definition Mlp.core.h:130
#define __ae2fVK_AnnMlpGlobMemSz(i_depth, i_outc)
Definition Mlp.core.h:157
#define ae2f_MAC_BUILD
Definition Util.h:4
#define ae2fVK_AnnMlpSHADER
#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 __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