ae2f_docs
SlpTrain-Primal.c
1#include <ae2fVK/Ann/Slp.h>
2#include <vulkan/vulkan_core.h>
3#include "../vk.h"
4#include "ae2f/Cast.h"
5#include "ae2f/Float.h"
6#include "ae2f/errGlob.h"
7
8#include <string.h>
9#include <math.h>
10
11
12#if 1
13
14ae2fVK_AnnSlpMk_t mk;
15
16size_t mapinp;
17
18static void
19ActDummy(ae2f_float_t* _0, const ae2f_float_t* _1, size_t _2, size_t _3) {};
20
21static void LossDeriv(ae2f_float_t* r, const ae2f_float_t* output, const ae2f_float_t* target, size_t i, size_t c) {
22 *r = ((output[i] - target[i]) / c);
23}
24
25ae2f_float_t* map;
26
27#define fgetc(...)
28
29int main() {
30 Test_VkInit();
31 memset(&(mk), 0, sizeof(mk));
32
34 mk,
35 0, 0, 0
36 , 1000, 2, 0, 0
37 , ActDummy, ActDummy, LossDeriv
38 , 0.1, 0.1
39 , vkdev
40 , vkphydevmemprops
41 , NULL
42 ,
43 "#define CL_Q 0\n"
44 "#define ACT_DERIV(r, x, i, c) *(r) = (((x)[i] + 1e-7) * (1.0 - (x)[i] - 1e-7)); \n"
45 "#define ACT(r, x, i, c) *(r) = (1.0 / (1.0 + exp(-(x[i])))); \n"
46 "#define LOSS_DERIV(r, o, t, i, c) *(r) = ((o)[i] - (t)[i]) / (c);\n"
47 ""
48 , "/** This is also a comment */\n"
49 );
50
51 mk.m_U0.m_alter.m_ptr->m_slp.m_learningrate = 0.6;
52 mk.m_U0.m_alter.m_ptr->m_slp.m_learningrate_bias = 0.5;
53
54 puts("__ae2fVK_AnnSlpMk_imp is done");
55 fgetc(stdin);
56
57
58 printf("Stateval: %d\n", (mk).m_U0.m_alter.m_ptr->m_vkres);
59
60 assert(mk.m_U0.m_alter.m_ptr && "__ae2fVK_AnnSlpMk_imp has failed");
61 assert(mk.m_reterr == ae2f_errGlob_OK);
62
63 assert(mk.m_U0.m_alter.m_ptr->m_vkres == VK_SUCCESS);
64
65 {
66 ae2f_float_t* weight;
67 ae2f_float_t* bias;
68 ae2f_err_t e;
69 size_t i, j;
70
71 ae2fVK_AnnSlpUnMap_t v_unmap;
72
74 &e
75 , mk.m_U0.m_alter.m_ptr
76 , &weight
77 , &bias
78 );
79
80 assert(ae2f_errGlob_OK == e && "__ae2fVK_AnnSlpWBMap has failed.");
81 assert(weight);
82 assert(bias);
83
84 for(i = 0; i < 2; i++) {
85 bias[0] = ((double)rand() / RAND_MAX) - 0.5;
86 weight[i] = ((double)rand() / RAND_MAX) - 0.5;
87 }
88
90 v_unmap
91 , mk.m_U0.m_alter.m_ptr[0]
92 );
93 } puts("WB init done");
94
95 {
96 ae2f_err_t err = 0;
97 ae2fVK_AnnSlpUnMap_t v_unmap;
98
99 ae2f_float_t
100 * OutputMapped = NULL,
101 * InputMapped = NULL,
102 * GoalMapped = NULL
103 ;
104
106 &err
107 , mk.m_U0.m_alter.m_ptr
108 , (&InputMapped)
109 , (&OutputMapped)
110 );
111
112 puts("Before OutputMapped written");
113 fgetc(stdin);
114
115 assert(OutputMapped);
116 assert(InputMapped);
117
118 assert((mk.m_U0.m_alter.m_ptr[0].m_vkres) == VK_SUCCESS);
119
120 puts("Before IOMap Writting")
121 ;
122
123 OutputMapped[0] = 4;
124 InputMapped[0] = 7;
125 InputMapped[1] = 7;
126
127 printf("Inputmapped before predict: %f %f\n", InputMapped[0], InputMapped[1]);
128 printf("Outputmapped before predict: %f\n", OutputMapped[0]);
129
130 __ae2fVK_AnnSlpIOUnMap_imp(v_unmap, mk.m_U0.m_alter.m_ptr[0]);
131
132 __ae2fVK_AnnSlpGoalMap(&err, mk.m_U0.m_alter.m_ptr, &GoalMapped);
133
134 GoalMapped[0] = 0.2222;
135 printf("Goal before predict %f\n", GoalMapped[0]);
136
137 __ae2fVK_AnnSlpGoalUnMap_imp(v_unmap, *mk.m_U0.m_alter.m_ptr);
138
139 puts("After __ae2fVK_AnnSlpIOUnMapOutput_imp.");
140 fgetc(stdin);
141 }
142
143 VkCommandBuffer vkcmdbuf = NULL;
144 VkCommandPool vkcmdpool = NULL;
145
146 {
147 VkCommandPoolCreateInfo vkcmdpoolcreatinfo;
148 vkcmdpoolcreatinfo.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT;
149 vkcmdpoolcreatinfo.pNext = NULL;
150 vkcmdpoolcreatinfo.queueFamilyIndex = 0;
151
152 if((((mk).m_U0.m_alter.m_ptr->m_vkres) = vkCreateCommandPool(
153 vkdev
154 , &vkcmdpoolcreatinfo
155 , NULL
156 , &vkcmdpool
157 )) != VK_SUCCESS)
158 {
159 printf("Errval: %d\n", (mk).m_U0.m_alter.m_ptr->m_vkres);
160 assert(!"vkCreateCommandPool has failed.");
161 return -1;
162 }
163
164 puts("After vkCreateCommandPool.");
165 fgetc(stdin);
166
167 unless(vkcmdpool) {
168 assert(!"vkCreateCommandPool went null");
169 return -1;
170 }
171 }
172
173 {
174 VkCommandBufferAllocateInfo vkcmdallocinfo;
175 vkcmdallocinfo.commandBufferCount = 1;
176 vkcmdallocinfo.pNext = NULL;
177 vkcmdallocinfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
178 vkcmdallocinfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
179 vkcmdallocinfo.commandPool = vkcmdpool;
180
181 if((mk.m_U0.m_alter.m_ptr->m_vkres =
182 vkAllocateCommandBuffers(
183 (vkdev)
184 , &vkcmdallocinfo
185 , &vkcmdbuf
186 )) != VK_SUCCESS)
187 {
188 printf("Errval: %d\n", (mk).m_U0.m_alter.m_ptr->m_vkres);
189 assert(!"vkAllocateCommandBuffers has failed.");
190 return -1;
191 }
192
193 puts("After vkAllocateCommandBuffers.");
194 fgetc(stdin);
195
196 unless((vkcmdbuf))
197 {
198 printf("Errval: %d\n", (mk).m_U0.m_alter.m_ptr->m_vkres);
199 assert(!"vkAllocateCommandBuffers went null.");
200 return -1;
201 }
202 }
203
204 {
205 ae2fVK_AnnSlpCreatDescPool_t v_poolmk;
206 ae2fVK_AnnSlpDescPoolCmdMk_t v_cmdmk;
207
208 ae2fVK_AnnSlpDescPool v_descpool;
209 ae2fVK_AnnSlpDescPoolCmd v_descpoolcmd;
210
211 ae2f_err_t err = 0;
212
213 puts("Before __ae2fVK_AnnSlpPredictPerformed_imp");
214
215 /** Getting pool */
217 v_poolmk
218 , v_descpool
219 , err
220 , (mk.m_U0.m_alter.m_ptr[0])
221 , VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT
222 , 1
223 );
224
225 /** Getting train command */
227 v_cmdmk
228 , (mk.m_U0.m_alter.m_ptr[0])
229 , err
230 , v_descpool
231 , v_descpoolcmd
232 , vkcmdbuf
233 );
234
235 puts("After __ae2fVK_AnnSlpPredictPerformed_imp");
236 fgetc(stdin);
237
238 if(err != ae2f_errGlob_OK) {
239 if (err & ae2f_errGlob_NFOUND)
240 printf(
241 "Vulkan state number %d: \n"
242 , mk.m_U0.m_alter.m_ptr->m_vkres
243 );
244
245 printf("Error value %x, \n", err);
246 assert(!"__ae2fVK_AnnSlpPredictPerformed_imp has failed.");
247 return -1;
248 }
249
250 unless((v_descpoolcmd).m_vkdescset) {
251 assert(!"__ae2fVK_AnnSlpPredictPerformed_imp went null.");
252 return -1;
253 }
254
255 {
256 VkSubmitInfo submit_info = {
257 .sType = VK_STRUCTURE_TYPE_SUBMIT_INFO,
258 .commandBufferCount = 1,
259 .pCommandBuffers = &vkcmdbuf,
260 };
261
262 ae2fVK_AnnSlpUnMap_t v_unmap;
263
264 ae2f_float_t
265 * OutputMapped = NULL,
266 * InputMapped = NULL,
267 * GoalMapped = NULL
268 ;
269 size_t i;
270
271 if (vkQueueSubmit(
272 vkqueue
273 , 1
274 , &submit_info
275 , VK_NULL_HANDLE
276 ) != VK_SUCCESS)
277 {
278 assert(!"vkQueueSubmit failed");
279 return -1;
280 }
281
282 if (vkQueueWaitIdle(vkqueue) != VK_SUCCESS) {
283 assert(!"vkQueueWaitIdle failed");
284 return -1;
285 }
286
287 /** Check is required, but not planned to write for no */
289 &err
290 , mk.m_U0.m_alter.m_ptr
291 , &InputMapped
292 , &OutputMapped
293 );
294
295 assert(OutputMapped);
296 assert((mk.m_U0.m_alter.m_ptr[0].m_vkres) == VK_SUCCESS);
297
298 printf("Inputmapped before predict: %f %f\n", InputMapped[0], InputMapped[1]);
299 printf("Outputmapped before prediction %f\n", OutputMapped[0]);
300
302 v_unmap
303 , *mk.m_U0.m_alter.m_ptr
304 );
305
306 for(i = 0; i < 8000; i++) {
307 if (vkQueueSubmit(
308 vkqueue
309 , 1
310 , &submit_info
311 , VK_NULL_HANDLE
312 ) != VK_SUCCESS)
313 {
314 assert(!"vkQueueSubmit failed");
315 return -1;
316 }
317
318 if (vkQueueWaitIdle(vkqueue) != VK_SUCCESS) {
319 assert(!"vkQueueWaitIdle failed");
320 return -1;
321 }
322 }
323
324 puts("After vkQueueSubmit");
325 fgetc(stdin);
326
327 /** Check is required, but not planned to write for no */
329 &err
330 , mk.m_U0.m_alter.m_ptr
331 , &InputMapped
332 , &OutputMapped
333 );
334
335 assert(OutputMapped);
336 assert((mk.m_U0.m_alter.m_ptr[0].m_vkres) == VK_SUCCESS);
337
338 printf("Inputmapped after predict: %f %f\n", InputMapped[0], InputMapped[1]);
339 printf("Outputmapped after prediction %f\n", OutputMapped[0]);
340
342 v_unmap
343 , *mk.m_U0.m_alter.m_ptr
344 );
345
346 __ae2fVK_AnnSlpGoalMap(&err, mk.m_U0.m_alter.m_ptr, &GoalMapped);
347
348 printf("Goal after prediction: %f\n", GoalMapped[0]);
349
350 __ae2fVK_AnnSlpGoalUnMap_imp(v_unmap, *mk.m_U0.m_alter.m_ptr);
351 }
352
354 mk.m_U0.m_alter.m_ptr[0]
355 , v_descpool
356 , v_descpoolcmd
357 );
358
360 mk.m_U0.m_alter.m_ptr[0]
361 , v_descpool
362 );
363 }
364
365 __ae2fVK_AnnSlpClean_imp((*mk.m_U0.m_alter.m_ptr));
366 vkFreeCommandBuffers(vkdev, vkcmdpool, 1, &vkcmdbuf);
367 vkDestroyCommandPool(vkdev, vkcmdpool, NULL);
368
369 memset(mk.m_U0.m_alter.m_ptr, 0, sizeof(*mk.m_U0.m_alter.m_ptr));
370 free(mk.m_U0.m_alter.m_ptr);
371
372 memset(&mk, 0, sizeof(mk));
373 Test_VkEnd();
374 return 0;
375}
376
377#else
378
379int main() {
380 return 0;
381}
382
383#endif
#define unless(...)
Invokes when condition is false.
Definition Cast.h:103
#define ae2f_errGlob_OK
The Operation you've wanted went successful.
Definition errGlob.h:23
#define ae2f_errGlob_NFOUND
Found some errors, but not by parameters. The operation has failed.
Definition errGlob.h:50
uint8_t ae2f_err_t
Informs that this number represents the error.
Definition errGlob.h:19
#define __ae2fVK_AnnSlpDescPoolCmdMkTrain_imp(v_cmdmk, iv_slp, iv_err, i_pool, r_cmd, i_vkcmdbuf)
#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_AnnSlpDescPoolClean_imp(i_slp, i_pool)
#define fgetc(...)
#define __ae2fVK_AnnSlpIOMap(r_err, slp, ir_ptrinp, ir_ptrout)
Definition Slp.auto.h:1188
#define __ae2fVK_AnnSlpGoalUnMap_imp(v_out, vi_slp)
Definition Slp.auto.h:1285
#define __ae2fVK_AnnSlpWBMap(r_err, slp, ir_ptrweight, ir_ptrbias)
Definition Slp.auto.h:1121
#define __ae2fVK_AnnSlpMk_imp(v_mk, weight_opt, bias_opt, cache_opt, inc, outc, prm_offset, extra, act, actderiv, lossderiv, learningrate, learningrate_bias, vkdev, vkmemprops, vkalloccalls, vkcldeclaration, vkcldefinition)
Definition Slp.auto.h:366
#define __ae2fVK_AnnSlpGoalMap(r_err, slp, ir_ptrgoal)
Definition Slp.auto.h:1302
#define __ae2fVK_AnnSlpIOUnMap_imp(v_out, vi_slp)
Definition Slp.auto.h:1167
#define __ae2fVK_AnnSlpClean_imp(block)
Definition Slp.auto.h:975
#define __ae2fVK_AnnSlpWBUnMap_imp(v_out, vi_slp)
Definition Slp.auto.h:1101