1#include <ae2fVK/Ann/Slp.h>
2#include <vulkan/vulkan_core.h>
6#include "ae2f/errGlob.h"
19ActDummy(ae2f_float_t* _0,
const ae2f_float_t* _1, size_t _2, size_t _3) {};
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);
31 memset(&(mk), 0,
sizeof(mk));
37 , ActDummy, ActDummy, LossDeriv
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"
48 ,
"/** This is also a comment */\n"
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;
54 puts(
"__ae2fVK_AnnSlpMk_imp is done");
58 printf(
"Stateval: %d\n", (mk).m_U0.m_alter.m_ptr->m_vkres);
60 assert(mk.m_U0.m_alter.m_ptr &&
"__ae2fVK_AnnSlpMk_imp has failed");
63 assert(mk.m_U0.m_alter.m_ptr->m_vkres == VK_SUCCESS);
71 ae2fVK_AnnSlpUnMap_t v_unmap;
75 , mk.m_U0.m_alter.m_ptr
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;
91 , mk.m_U0.m_alter.m_ptr[0]
93 } puts(
"WB init done");
97 ae2fVK_AnnSlpUnMap_t v_unmap;
100 * OutputMapped = NULL,
101 * InputMapped = NULL,
107 , mk.m_U0.m_alter.m_ptr
112 puts(
"Before OutputMapped written");
115 assert(OutputMapped);
118 assert((mk.m_U0.m_alter.m_ptr[0].m_vkres) == VK_SUCCESS);
120 puts(
"Before IOMap Writting")
127 printf(
"Inputmapped before predict: %f %f\n", InputMapped[0], InputMapped[1]);
128 printf(
"Outputmapped before predict: %f\n", OutputMapped[0]);
134 GoalMapped[0] = 0.2222;
135 printf(
"Goal before predict %f\n", GoalMapped[0]);
139 puts(
"After __ae2fVK_AnnSlpIOUnMapOutput_imp.");
143 VkCommandBuffer vkcmdbuf = NULL;
144 VkCommandPool vkcmdpool = NULL;
147 VkCommandPoolCreateInfo vkcmdpoolcreatinfo;
148 vkcmdpoolcreatinfo.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT;
149 vkcmdpoolcreatinfo.pNext = NULL;
150 vkcmdpoolcreatinfo.queueFamilyIndex = 0;
152 if((((mk).m_U0.m_alter.m_ptr->m_vkres) = vkCreateCommandPool(
154 , &vkcmdpoolcreatinfo
159 printf(
"Errval: %d\n", (mk).m_U0.m_alter.m_ptr->m_vkres);
160 assert(!
"vkCreateCommandPool has failed.");
164 puts(
"After vkCreateCommandPool.");
168 assert(!
"vkCreateCommandPool went null");
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;
181 if((mk.m_U0.m_alter.m_ptr->m_vkres =
182 vkAllocateCommandBuffers(
188 printf(
"Errval: %d\n", (mk).m_U0.m_alter.m_ptr->m_vkres);
189 assert(!
"vkAllocateCommandBuffers has failed.");
193 puts(
"After vkAllocateCommandBuffers.");
198 printf(
"Errval: %d\n", (mk).m_U0.m_alter.m_ptr->m_vkres);
199 assert(!
"vkAllocateCommandBuffers went null.");
205 ae2fVK_AnnSlpCreatDescPool_t v_poolmk;
206 ae2fVK_AnnSlpDescPoolCmdMk_t v_cmdmk;
208 ae2fVK_AnnSlpDescPool v_descpool;
209 ae2fVK_AnnSlpDescPoolCmd v_descpoolcmd;
213 puts(
"Before __ae2fVK_AnnSlpPredictPerformed_imp");
220 , (mk.m_U0.m_alter.m_ptr[0])
221 , VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT
228 , (mk.m_U0.m_alter.m_ptr[0])
235 puts(
"After __ae2fVK_AnnSlpPredictPerformed_imp");
241 "Vulkan state number %d: \n"
242 , mk.m_U0.m_alter.m_ptr->m_vkres
245 printf(
"Error value %x, \n", err);
246 assert(!
"__ae2fVK_AnnSlpPredictPerformed_imp has failed.");
250 unless((v_descpoolcmd).m_vkdescset) {
251 assert(!
"__ae2fVK_AnnSlpPredictPerformed_imp went null.");
256 VkSubmitInfo submit_info = {
257 .sType = VK_STRUCTURE_TYPE_SUBMIT_INFO,
258 .commandBufferCount = 1,
259 .pCommandBuffers = &vkcmdbuf,
262 ae2fVK_AnnSlpUnMap_t v_unmap;
265 * OutputMapped = NULL,
266 * InputMapped = NULL,
278 assert(!
"vkQueueSubmit failed");
282 if (vkQueueWaitIdle(vkqueue) != VK_SUCCESS) {
283 assert(!
"vkQueueWaitIdle failed");
290 , mk.m_U0.m_alter.m_ptr
295 assert(OutputMapped);
296 assert((mk.m_U0.m_alter.m_ptr[0].m_vkres) == VK_SUCCESS);
298 printf(
"Inputmapped before predict: %f %f\n", InputMapped[0], InputMapped[1]);
299 printf(
"Outputmapped before prediction %f\n", OutputMapped[0]);
303 , *mk.m_U0.m_alter.m_ptr
306 for(i = 0; i < 8000; i++) {
314 assert(!
"vkQueueSubmit failed");
318 if (vkQueueWaitIdle(vkqueue) != VK_SUCCESS) {
319 assert(!
"vkQueueWaitIdle failed");
324 puts(
"After vkQueueSubmit");
330 , mk.m_U0.m_alter.m_ptr
335 assert(OutputMapped);
336 assert((mk.m_U0.m_alter.m_ptr[0].m_vkres) == VK_SUCCESS);
338 printf(
"Inputmapped after predict: %f %f\n", InputMapped[0], InputMapped[1]);
339 printf(
"Outputmapped after prediction %f\n", OutputMapped[0]);
343 , *mk.m_U0.m_alter.m_ptr
348 printf(
"Goal after prediction: %f\n", GoalMapped[0]);
354 mk.m_U0.m_alter.m_ptr[0]
360 mk.m_U0.m_alter.m_ptr[0]
366 vkFreeCommandBuffers(vkdev, vkcmdpool, 1, &vkcmdbuf);
367 vkDestroyCommandPool(vkdev, vkcmdpool, NULL);
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);
372 memset(&mk, 0,
sizeof(mk));
#define unless(...)
Invokes when condition is false.
#define ae2f_errGlob_OK
The Operation you've wanted went successful.
#define ae2f_errGlob_NFOUND
Found some errors, but not by parameters. The operation has failed.
uint8_t ae2f_err_t
Informs that this number represents the error.
#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 __ae2fVK_AnnSlpIOMap(r_err, slp, ir_ptrinp, ir_ptrout)
#define __ae2fVK_AnnSlpGoalUnMap_imp(v_out, vi_slp)
#define __ae2fVK_AnnSlpWBMap(r_err, slp, ir_ptrweight, ir_ptrbias)
#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)
#define __ae2fVK_AnnSlpGoalMap(r_err, slp, ir_ptrgoal)
#define __ae2fVK_AnnSlpIOUnMap_imp(v_out, vi_slp)
#define __ae2fVK_AnnSlpClean_imp(block)
#define __ae2fVK_AnnSlpWBUnMap_imp(v_out, vi_slp)