ae2f_docs
SlpTrain-Primal.c
Go to the documentation of this file.
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
19Act(ae2f_float_t* r, ae2f_float_t x) {
20 *r = 1.0 / (1.0 + exp(-x));
21}
22
23static void
24ActDeriv(ae2f_float_t* r, ae2f_float_t output) {
25 *r = ((output) + 1e-7) * (1.0 - (output) - 1e-7);
26}
27
28static void LossDeriv(ae2f_float_t* r, const ae2f_float_t* output, const ae2f_float_t* target, size_t i, size_t c) {
29 *r = ((output[i] - target[i]) / c);
30}
31
33
34#define fgetc(...)
35
36int main() {
37 Test_VkInit();
38 memset(&(mk), 0, sizeof(mk));
39
41 mk,
42 0, 0, 0
43 , 2, 1, 0, 0
44 , Act, ActDeriv, LossDeriv
45 , 0, 0
46 , vkdev
47 , vkphydevmemprops
48 , NULL
49 ,
50 "// #define CL_Q 0\n"
51 "#define ACT_DERIV(r, output) *(r) = (((output) + 1e-7) * (1.0 - (output) - 1e-7)); \n"
52 "#define ACT(r, x) *(r) = (1.0 / (1.0 + exp(-(x)))); \n"
53 "#define LOSS_DERIV(r, o, t, i, c) *(r) = ((o)[i] - (t)[i]) / (c);\n"
54 ""
55 , "/** This is also a comment */\n"
56 );
57
58 mk.m_U0.m_alter.m_ptr->m_slp.m_learningrate = 0.6;
59 mk.m_U0.m_alter.m_ptr->m_slp.m_learningrate_bias = 0.5;
60
61 puts("__ae2fVK_AnnSlpMk_imp is done");
62 fgetc(stdin);
63
64 assert(mk.m_U0.m_alter.m_ptr->m_slp.m_Slp[0].m_inc == 2);
65 assert(mk.m_U0.m_alter.m_ptr->m_slp.m_Slp[0].m_outc == 1);
66
67 printf("Stateval: %d\n", (mk).m_U0.m_alter.m_ptr->m_vkres);
68
69 assert(mk.m_U0.m_alter.m_ptr && "__ae2fVK_AnnSlpMk_imp has failed");
70 assert(mk.m_reterr == ae2f_errGlob_OK);
71
72 assert(mk.m_U0.m_alter.m_ptr->m_vkres == VK_SUCCESS);
73
74 {
75 ae2f_float_t* weight;
76 ae2f_float_t* bias;
77 ae2f_err_t e;
78 size_t i, j;
79
81
83 &e
84 , mk.m_U0.m_alter.m_ptr
85 , &weight
86 , &bias
87 );
88
89 assert(ae2f_errGlob_OK == e && "__ae2fVK_AnnSlpWBMap has failed.");
90 assert(weight);
91 assert(bias);
92
93 for(i = 0; i < 2; i++) {
94 bias[0] = ((double)rand() / RAND_MAX) - 0.5;
95 weight[i] = ((double)rand() / RAND_MAX) - 0.5;
96 }
97
99 v_unmap
100 , mk.m_U0.m_alter.m_ptr[0]
101 );
102 } puts("WB init done");
103
104 {
105 ae2f_err_t err = 0;
106 ae2fVK_AnnSlpUnMap_t v_unmap;
107
109 * OutputMapped = NULL,
110 * InputMapped = NULL,
111 * GoalMapped = NULL
112 ;
113
115 &err
116 , mk.m_U0.m_alter.m_ptr
117 , (&InputMapped)
118 , (&OutputMapped)
119 );
120
121 puts("Before OutputMapped written");
122 fgetc(stdin);
123
124 assert(OutputMapped);
125 assert(InputMapped);
126
127 assert((mk.m_U0.m_alter.m_ptr[0].m_vkres) == VK_SUCCESS);
128
129 puts("Before IOMap Writting")
130 ;
131
132 OutputMapped[0] = 7;
133 InputMapped[0] = 7;
134 InputMapped[1] = 7;
135
136 printf("Inputmapped before predict: %f %f\n", InputMapped[0], InputMapped[1]);
137 printf("Outputmapped before predict: %f\n", OutputMapped[0]);
138
139 __ae2fVK_AnnSlpIOUnMap_imp(v_unmap, mk.m_U0.m_alter.m_ptr[0]);
140
141 __ae2fVK_AnnSlpGoalMap(&err, mk.m_U0.m_alter.m_ptr, &GoalMapped);
142
143 GoalMapped[0] = 0.2222;
144 printf("Goal before predict %f\n", GoalMapped[0]);
145
146 __ae2fVK_AnnSlpGoalUnMap_imp(v_unmap, *mk.m_U0.m_alter.m_ptr);
147
148 puts("After __ae2fVK_AnnSlpIOUnMapOutput_imp.");
149 fgetc(stdin);
150 }
151
152 VkCommandBuffer vkcmdbuf = NULL;
153 VkCommandPool vkcmdpool = NULL;
154
155 {
156 VkCommandPoolCreateInfo vkcmdpoolcreatinfo;
157 vkcmdpoolcreatinfo.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT;
158 vkcmdpoolcreatinfo.pNext = NULL;
159 vkcmdpoolcreatinfo.queueFamilyIndex = 0;
160
161 if((((mk).m_U0.m_alter.m_ptr->m_vkres) = vkCreateCommandPool(
162 vkdev
163 , &vkcmdpoolcreatinfo
164 , NULL
165 , &vkcmdpool
166 )) != VK_SUCCESS)
167 {
168 printf("Errval: %d\n", (mk).m_U0.m_alter.m_ptr->m_vkres);
169 assert(!"vkCreateCommandPool has failed.");
170 return -1;
171 }
172
173 puts("After vkCreateCommandPool.");
174 fgetc(stdin);
175
176 unless(vkcmdpool) {
177 assert(!"vkCreateCommandPool went null");
178 return -1;
179 }
180 }
181
182 {
183 VkCommandBufferAllocateInfo vkcmdallocinfo;
184 vkcmdallocinfo.commandBufferCount = 1;
185 vkcmdallocinfo.pNext = NULL;
186 vkcmdallocinfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
187 vkcmdallocinfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
188 vkcmdallocinfo.commandPool = vkcmdpool;
189
190 if((mk.m_U0.m_alter.m_ptr->m_vkres =
191 vkAllocateCommandBuffers(
192 (vkdev)
193 , &vkcmdallocinfo
194 , &vkcmdbuf
195 )) != VK_SUCCESS)
196 {
197 printf("Errval: %d\n", (mk).m_U0.m_alter.m_ptr->m_vkres);
198 assert(!"vkAllocateCommandBuffers has failed.");
199 return -1;
200 }
201
202 puts("After vkAllocateCommandBuffers.");
203 fgetc(stdin);
204
205 unless((vkcmdbuf))
206 {
207 printf("Errval: %d\n", (mk).m_U0.m_alter.m_ptr->m_vkres);
208 assert(!"vkAllocateCommandBuffers went null.");
209 return -1;
210 }
211 }
212
213 {
214 ae2fVK_AnnSlpCreatDescPool_t v_poolmk;
215 ae2fVK_AnnSlpDescPoolCmdMk_t v_cmdmk;
216
217 ae2fVK_AnnSlpDescPool v_descpool;
218 ae2fVK_AnnSlpDescPoolCmd v_descpoolcmd;
219
220 ae2f_err_t err = 0;
221
222 puts("Before __ae2fVK_AnnSlpPredictPerformed_imp");
223
224 /** Getting pool */
226 v_poolmk
227 , v_descpool
228 , err
229 , (mk.m_U0.m_alter.m_ptr[0])
230 , VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT
231 , 1
232 );
233
234 /** Getting train command */
236 v_cmdmk
237 , (mk.m_U0.m_alter.m_ptr[0])
238 , err
239 , v_descpool
240 , v_descpoolcmd
241 , vkcmdbuf
242 );
243
244 puts("After __ae2fVK_AnnSlpPredictPerformed_imp");
245 fgetc(stdin);
246
247 if(err != ae2f_errGlob_OK) {
248 if (err & ae2f_errGlob_NFOUND)
249 printf(
250 "Vulkan state number %d: \n"
251 , mk.m_U0.m_alter.m_ptr->m_vkres
252 );
253
254 printf("Error value %x, \n", err);
255 assert(!"__ae2fVK_AnnSlpPredictPerformed_imp has failed.");
256 return -1;
257 }
258
259 unless((v_descpoolcmd).m_vkdescset) {
260 assert(!"__ae2fVK_AnnSlpPredictPerformed_imp went null.");
261 return -1;
262 }
263
264 {
265 VkSubmitInfo submit_info = {
266 .sType = VK_STRUCTURE_TYPE_SUBMIT_INFO,
267 .commandBufferCount = 1,
268 .pCommandBuffers = &vkcmdbuf,
269 };
270
271 ae2fVK_AnnSlpUnMap_t v_unmap;
272
274 * OutputMapped = NULL,
275 * InputMapped = NULL,
276 * GoalMapped = NULL
277 ;
278 size_t i;
279
280 if (vkQueueSubmit(
281 vkqueue
282 , 1
283 , &submit_info
284 , VK_NULL_HANDLE
285 ) != VK_SUCCESS)
286 {
287 assert(!"vkQueueSubmit failed");
288 return -1;
289 }
290
291 if (vkQueueWaitIdle(vkqueue) != VK_SUCCESS) {
292 assert(!"vkQueueWaitIdle failed");
293 return -1;
294 }
295
296 /** Check is required, but not planned to write for no */
298 &err
299 , mk.m_U0.m_alter.m_ptr
300 , &InputMapped
301 , &OutputMapped
302 );
303
304 assert(OutputMapped);
305 assert((mk.m_U0.m_alter.m_ptr[0].m_vkres) == VK_SUCCESS);
306
307 printf("Inputmapped before predict: %f %f\n", InputMapped[0], InputMapped[1]);
308 printf("Outputmapped before prediction %f\n", OutputMapped[0]);
309
311 v_unmap
312 , *mk.m_U0.m_alter.m_ptr
313 );
314
315 for(i = 0; i < 1000; i++) {
316 if (vkQueueSubmit(
317 vkqueue
318 , 1
319 , &submit_info
320 , VK_NULL_HANDLE
321 ) != VK_SUCCESS)
322 {
323 assert(!"vkQueueSubmit failed");
324 return -1;
325 }
326
327 if (vkQueueWaitIdle(vkqueue) != VK_SUCCESS) {
328 assert(!"vkQueueWaitIdle failed");
329 return -1;
330 }
331 }
332
333 puts("After vkQueueSubmit");
334 fgetc(stdin);
335
336 /** Check is required, but not planned to write for no */
338 &err
339 , mk.m_U0.m_alter.m_ptr
340 , &InputMapped
341 , &OutputMapped
342 );
343
344 assert(OutputMapped);
345 assert((mk.m_U0.m_alter.m_ptr[0].m_vkres) == VK_SUCCESS);
346
347 printf("Inputmapped after predict: %f %f\n", InputMapped[0], InputMapped[1]);
348 printf("Outputmapped after prediction %f\n", OutputMapped[0]);
349
351 v_unmap
352 , *mk.m_U0.m_alter.m_ptr
353 );
354
355 __ae2fVK_AnnSlpGoalMap(&err, mk.m_U0.m_alter.m_ptr, &GoalMapped);
356
357 printf("Goal after prediction: %f\n", GoalMapped[0]);
358
359 __ae2fVK_AnnSlpGoalUnMap_imp(v_unmap, *mk.m_U0.m_alter.m_ptr);
360 }
361
363 mk.m_U0.m_alter.m_ptr[0]
364 , v_descpool
365 , v_descpoolcmd
366 );
367
369 mk.m_U0.m_alter.m_ptr[0]
370 , v_descpool
371 );
372 }
373
374 __ae2fVK_AnnSlpClean_imp((*mk.m_U0.m_alter.m_ptr));
375 vkFreeCommandBuffers(vkdev, vkcmdpool, 1, &vkcmdbuf);
376 vkDestroyCommandPool(vkdev, vkcmdpool, NULL);
377
378 memset(mk.m_U0.m_alter.m_ptr, 0, sizeof(*mk.m_U0.m_alter.m_ptr));
379 free(mk.m_U0.m_alter.m_ptr);
380
381 memset(&mk, 0, sizeof(mk));
382 Test_VkEnd();
383 return 0;
384}
385
386#else
387
388int main() {
389 return 0;
390}
391
392#endif
#define unless(...)
Invokes when condition is false.
Definition Cast.h:103
ae2f_float ae2f_float_t
Definition Float.h:38
VkMappedMemoryRange ae2fVK_AnnSlpUnMap_t
Definition Slp.core.h:152
#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)
size_t mapinp
#define fgetc(...)
ae2f_float_t * map
ae2fVK_AnnSlpMk_t mk
#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_AnnSlpIOMap(r_err, slp, ir_ptrinp, ir_ptrout)
Definition Slp.auto.h:1154
#define __ae2fVK_AnnSlpGoalUnMap_imp(v_out, vi_slp)
Definition Slp.auto.h:1252
#define __ae2fVK_AnnSlpWBMap(r_err, slp, ir_ptrweight, ir_ptrbias)
Maps Weight and Bias.
Definition Slp.auto.h:1087
#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)
Make slp with OpenCL compute shader.
Definition Slp.auto.h:389
#define __ae2fVK_AnnSlpGoalMap(r_err, slp, ir_ptrgoal)
Definition Slp.auto.h:1269
#define __ae2fVK_AnnSlpIOUnMap_imp(v_out, vi_slp)
Definition Slp.auto.h:1133
#define __ae2fVK_AnnSlpClean_imp(block)
Definition Slp.auto.h:941
#define __ae2fVK_AnnSlpWBUnMap_imp(v_out, vi_slp)
Unmaps Weight and Bias.
Definition Slp.auto.h:1067