ae2f_docs
SlpPredict-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
18
19static void
20ActDummy(ae2f_float_t* r, const ae2f_float_t* output, size_t i, size_t c) {
21}
22
23/** Cross entrophy */
24static void
25LossDeriv(ae2f_float_t* r, const ae2f_float_t* output, const ae2f_float_t* target, size_t i, size_t c) {
26 ae2f_float_t epsilon = 1e-7; // Small value to prevent division by zero
27 ae2f_float_t o_i = output[i];
28 // Clip output to avoid log(0) or division by zero
29 o_i = o_i < epsilon ? epsilon : (o_i > 1.0 - epsilon ? 1.0 - epsilon : o_i);
30 *r = (o_i - target[i]) / (c * o_i * (1.0 - o_i));
31}
32
33ae2f_float_t* map;
34
35#define fgetc(...)
36
37int main() {
38 Test_VkInit();
39 memset(&(mk), 0, sizeof(mk));
40
42 mk,
43 0, 0, 0
44 , 2, 1, 0, 0
45 , ActDummy, ActDummy, LossDeriv
46 , 0, 0
47 , vkdev
48 , vkphydevmemprops
49 , NULL
50 ,
51 "#define CL_Q 0\n"
52 "#define LOSS_DERIV(r, y, y_desired, i, c) \n"
53 "#define ACT(r, y, i, c) { (*(r) = (1.0 / (1.0 + exp(-y[i])))); } \n"
54 , "/** This is also a comment */\n"
55 );
56
57 puts("__ae2fVK_AnnSlpMk_imp is done");
58 fgetc(stdin);
59
60 assert(mk.m_U0.m_alter.m_ptr->m_slp.m_Slp[0].m_inc == 2);
61 assert(mk.m_U0.m_alter.m_ptr->m_slp.m_Slp[0].m_outc == 1);
62
63 printf("Stateval: %d\n", (mk).m_U0.m_alter.m_ptr->m_vkres);
64
65 assert(mk.m_U0.m_alter.m_ptr && "__ae2fVK_AnnSlpMk_imp has failed");
66 assert(mk.m_reterr == ae2f_errGlob_OK);
67
68 assert(mk.m_U0.m_alter.m_ptr->m_vkres == VK_SUCCESS);
69
70 {
71 ae2f_float_t* weight;
72 ae2f_float_t* bias;
73 ae2f_err_t e;
74 size_t i, j;
75
76 ae2fVK_AnnSlpUnMap_t v_unmap;
77
79 &e
80 , mk.m_U0.m_alter.m_ptr
81 , &weight
82 , &bias
83 );
84
85 assert(ae2f_errGlob_OK == e && "__ae2fVK_AnnSlpWBMap has failed.");
86 assert(weight);
87 assert(bias);
88
89 for(i = 0; i < 2; i++) {
90 bias[0] = ((double)rand() / RAND_MAX) - 0.5;
91 weight[i] = ((double)rand() / RAND_MAX) - 0.5;
92 }
93
95 v_unmap
96 , mk.m_U0.m_alter.m_ptr[0]
97 );
98 }
99
100 {
101 ae2f_err_t err = 0;
102 ae2fVK_AnnSlpUnMap_t v_unmap;
103
104 ae2f_float_t
105 * OutputMapped = NULL,
106 * InputMapped = NULL
107 ;
108
110 &err
111 , mk.m_U0.m_alter.m_ptr
112 , (&InputMapped)
113 , (&OutputMapped)
114 );
115
116 puts("Before OutputMapped written");
117 fgetc(stdin);
118
119 assert(OutputMapped);
120 assert(InputMapped);
121
122 assert((mk.m_U0.m_alter.m_ptr[0].m_vkres) == VK_SUCCESS);
123
124 OutputMapped[0] = 7;
125 InputMapped[0] = 7;
126 InputMapped[1] = 7;
127
128 printf("Inputmapped before predict: %f %f\n", InputMapped[0], InputMapped[1]);
129 printf("Outputmapped before predict: %f\n", OutputMapped[0]);
130
131 fgetc(stdin);
132 __ae2fVK_AnnSlpIOUnMap_imp(v_unmap, mk.m_U0.m_alter.m_ptr[0]);
133
134 puts("After __ae2fVK_AnnSlpIOUnMapOutput_imp.");
135 fgetc(stdin);
136 }
137
138 VkCommandBuffer vkcmdbuf = NULL;
139 VkCommandPool vkcmdpool = NULL;
140
141 {
142 VkCommandPoolCreateInfo vkcmdpoolcreatinfo;
143 vkcmdpoolcreatinfo.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT;
144 vkcmdpoolcreatinfo.pNext = NULL;
145 vkcmdpoolcreatinfo.queueFamilyIndex = 0;
146 vkcmdpoolcreatinfo.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
147
148 if((((mk).m_U0.m_alter.m_ptr->m_vkres) = vkCreateCommandPool(
149 vkdev
150 , &vkcmdpoolcreatinfo
151 , NULL
152 , &vkcmdpool
153 )) != VK_SUCCESS)
154 {
155 printf("Errval: %d\n", (mk).m_U0.m_alter.m_ptr->m_vkres);
156 assert(!"vkCreateCommandPool has failed.");
157 return -1;
158 }
159
160 puts("After vkCreateCommandPool.");
161 fgetc(stdin);
162
163 unless(vkcmdpool) {
164 assert(!"vkCreateCommandPool went null");
165 return -1;
166 }
167 }
168
169 {
170 VkCommandBufferAllocateInfo vkcmdallocinfo;
171 vkcmdallocinfo.commandBufferCount = 1;
172 vkcmdallocinfo.pNext = NULL;
173 vkcmdallocinfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
174 vkcmdallocinfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
175 vkcmdallocinfo.commandPool = vkcmdpool;
176
177 if((mk.m_U0.m_alter.m_ptr->m_vkres =
178 vkAllocateCommandBuffers(
179 (vkdev)
180 , &vkcmdallocinfo
181 , &vkcmdbuf
182 )) != VK_SUCCESS)
183 {
184 printf("Errval: %d\n", (mk).m_U0.m_alter.m_ptr->m_vkres);
185 assert(!"vkAllocateCommandBuffers has failed.");
186 return -1;
187 }
188
189 puts("After vkAllocateCommandBuffers.");
190 fgetc(stdin);
191
192 unless((vkcmdbuf))
193 {
194 printf("Errval: %d\n", (mk).m_U0.m_alter.m_ptr->m_vkres);
195 assert(!"vkAllocateCommandBuffers went null.");
196 return -1;
197 }
198 }
199
200 {
201 ae2fVK_AnnSlpCreatDescPool_t v_poolmk;
202 ae2fVK_AnnSlpDescPoolCmdMk_t v_cmdmk;
203
204 ae2fVK_AnnSlpDescPool v_descpool;
205 ae2fVK_AnnSlpDescPoolCmd v_descpoolcmd;
206
207
208 ae2f_err_t err = 0;
209
210 puts("Before __ae2fVK_AnnSlpPredictPerformed_imp");
211
212 /** Getting pool */
214 v_poolmk
215 , v_descpool
216 , err
217 , (mk.m_U0.m_alter.m_ptr[0])
218 , VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT
219 , 1
220 );
221
222 /** Getting predict command */
224 v_cmdmk
225 , (mk.m_U0.m_alter.m_ptr[0])
226 , err
227 , v_descpool
228 , v_descpoolcmd
229 , vkcmdbuf
230 );
231
232 puts("After __ae2fVK_AnnSlpPredictPerformed_imp");
233 fgetc(stdin);
234
235 if(err != ae2f_errGlob_OK) {
236 if (err & ae2f_errGlob_NFOUND)
237 printf(
238 "Vulkan state number %d: \n"
239 , mk.m_U0.m_alter.m_ptr->m_vkres
240 );
241
242 printf("Error value %x, \n", err);
243 assert(!"__ae2fVK_AnnSlpPredictPerformed_imp has failed.");
244 return -1;
245 }
246
247 unless((v_descpoolcmd).m_vkdescset) {
248 assert(!"__ae2fVK_AnnSlpPredictPerformed_imp went null.");
249 return -1;
250 }
251
252 {
253 VkSubmitInfo submit_info = {
254 .sType = VK_STRUCTURE_TYPE_SUBMIT_INFO,
255 .commandBufferCount = 1,
256 .pCommandBuffers = &vkcmdbuf,
257 };
258
259 ae2fVK_AnnSlpUnMap_t v_unmap;
260
261 ae2f_float_t
262 * OutputMapped = NULL,
263 * InputMapped = NULL
264 ;
265
266 if (vkQueueSubmit(
267 vkqueue
268 , 1
269 , &submit_info
270 , VK_NULL_HANDLE
271 ) != VK_SUCCESS)
272 {
273 assert(!"vkQueueSubmit failed");
274 return -1;
275 }
276
277 if (vkQueueWaitIdle(vkqueue) != VK_SUCCESS) {
278 assert(!"vkQueueWaitIdle failed");
279 return -1;
280 }
281
282 puts("After vkQueueSubmit");
283 fgetc(stdin);
284
285 if (vkQueueSubmit(
286 vkqueue
287 , 1
288 , &submit_info
289 , VK_NULL_HANDLE
290 ) != VK_SUCCESS)
291 {
292 assert(!"vkQueueSubmit failed");
293 return -1;
294 }
295
296 if (vkQueueWaitIdle(vkqueue) != VK_SUCCESS) {
297 assert(!"vkQueueWaitIdle failed");
298 return -1;
299 }
300
301 puts("After vkQueueSubmit 2");
302 fgetc(stdin);
303
304 if (vkQueueSubmit(
305 vkqueue
306 , 1
307 , &submit_info
308 , VK_NULL_HANDLE
309 ) != VK_SUCCESS)
310 {
311 assert(!"vkQueueSubmit failed");
312 return -1;
313 }
314
315 if (vkQueueWaitIdle(vkqueue) != VK_SUCCESS) {
316 assert(!"vkQueueWaitIdle failed");
317 return -1;
318 }
319
320 puts("After vkQueueSubmit 3");
321 fgetc(stdin);
322
323 puts("After vkQueueWaitIdle");
324 fgetc(stdin);
325
326 /** Check is required, but not planned to write for no */
328 &err
329 , mk.m_U0.m_alter.m_ptr
330 , &InputMapped
331 , &OutputMapped
332 );
333
334 assert(OutputMapped);
335 assert((mk.m_U0.m_alter.m_ptr[0].m_vkres) == VK_SUCCESS);
336
337 printf("Inputmapped before predict: %f %f\n", InputMapped[0], InputMapped[1]);
338 printf("Outputmapped after prediction %f\n", OutputMapped[0]);
339
341 v_unmap
342 , *mk.m_U0.m_alter.m_ptr
343 );
344 }
345
347 mk.m_U0.m_alter.m_ptr[0]
348 , v_descpool
349 , v_descpoolcmd
350 );
351
353 mk.m_U0.m_alter.m_ptr[0]
354 , v_descpool
355 );
356 }
357
358 __ae2fVK_AnnSlpClean_imp((*mk.m_U0.m_alter.m_ptr));
359 vkFreeCommandBuffers(vkdev, vkcmdpool, 1, &vkcmdbuf);
360 vkDestroyCommandPool(vkdev, vkcmdpool, NULL);
361
362 memset(mk.m_U0.m_alter.m_ptr, 0, sizeof(*mk.m_U0.m_alter.m_ptr));
363 free(mk.m_U0.m_alter.m_ptr);
364
365 memset(&mk, 0, sizeof(mk));
366 Test_VkEnd();
367 return 0;
368}
369
370#else
371
372int main() {
373 return 0;
374}
375
376#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_AnnSlpDescPoolMk_imp(v_descpool, r_pool, r_reterr, iv_slp, i_vkdescpoolcreatflags, i_vkmaxdescsets)
#define __ae2fVK_AnnSlpDescPoolCmdMkPredict_imp(v_cmdmk, iv_slp, iv_err, i_pool, r_cmd, i_vkcmdbuf)
#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_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_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