1#include <ae2fVK/Ann/Slp.h>
2#include <vulkan/vulkan_core.h>
6#include "ae2f/errGlob.h"
20ActDummy(ae2f_float_t* r,
const ae2f_float_t* output, size_t i, size_t c) {
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;
27 ae2f_float_t o_i = output[i];
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));
39 memset(&(mk), 0,
sizeof(mk));
45 , ActDummy, ActDummy, LossDeriv
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"
57 puts(
"__ae2fVK_AnnSlpMk_imp is done");
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);
63 printf(
"Stateval: %d\n", (mk).m_U0.m_alter.m_ptr->m_vkres);
65 assert(mk.m_U0.m_alter.m_ptr &&
"__ae2fVK_AnnSlpMk_imp has failed");
68 assert(mk.m_U0.m_alter.m_ptr->m_vkres == VK_SUCCESS);
76 ae2fVK_AnnSlpUnMap_t v_unmap;
80 , mk.m_U0.m_alter.m_ptr
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;
96 , mk.m_U0.m_alter.m_ptr[0]
102 ae2fVK_AnnSlpUnMap_t v_unmap;
105 * OutputMapped = NULL,
111 , mk.m_U0.m_alter.m_ptr
116 puts(
"Before OutputMapped written");
119 assert(OutputMapped);
122 assert((mk.m_U0.m_alter.m_ptr[0].m_vkres) == VK_SUCCESS);
128 printf(
"Inputmapped before predict: %f %f\n", InputMapped[0], InputMapped[1]);
129 printf(
"Outputmapped before predict: %f\n", OutputMapped[0]);
134 puts(
"After __ae2fVK_AnnSlpIOUnMapOutput_imp.");
138 VkCommandBuffer vkcmdbuf = NULL;
139 VkCommandPool vkcmdpool = NULL;
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;
148 if((((mk).m_U0.m_alter.m_ptr->m_vkres) = vkCreateCommandPool(
150 , &vkcmdpoolcreatinfo
155 printf(
"Errval: %d\n", (mk).m_U0.m_alter.m_ptr->m_vkres);
156 assert(!
"vkCreateCommandPool has failed.");
160 puts(
"After vkCreateCommandPool.");
164 assert(!
"vkCreateCommandPool went null");
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;
177 if((mk.m_U0.m_alter.m_ptr->m_vkres =
178 vkAllocateCommandBuffers(
184 printf(
"Errval: %d\n", (mk).m_U0.m_alter.m_ptr->m_vkres);
185 assert(!
"vkAllocateCommandBuffers has failed.");
189 puts(
"After vkAllocateCommandBuffers.");
194 printf(
"Errval: %d\n", (mk).m_U0.m_alter.m_ptr->m_vkres);
195 assert(!
"vkAllocateCommandBuffers went null.");
201 ae2fVK_AnnSlpCreatDescPool_t v_poolmk;
202 ae2fVK_AnnSlpDescPoolCmdMk_t v_cmdmk;
204 ae2fVK_AnnSlpDescPool v_descpool;
205 ae2fVK_AnnSlpDescPoolCmd v_descpoolcmd;
210 puts(
"Before __ae2fVK_AnnSlpPredictPerformed_imp");
217 , (mk.m_U0.m_alter.m_ptr[0])
218 , VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT
225 , (mk.m_U0.m_alter.m_ptr[0])
232 puts(
"After __ae2fVK_AnnSlpPredictPerformed_imp");
238 "Vulkan state number %d: \n"
239 , mk.m_U0.m_alter.m_ptr->m_vkres
242 printf(
"Error value %x, \n", err);
243 assert(!
"__ae2fVK_AnnSlpPredictPerformed_imp has failed.");
247 unless((v_descpoolcmd).m_vkdescset) {
248 assert(!
"__ae2fVK_AnnSlpPredictPerformed_imp went null.");
253 VkSubmitInfo submit_info = {
254 .sType = VK_STRUCTURE_TYPE_SUBMIT_INFO,
255 .commandBufferCount = 1,
256 .pCommandBuffers = &vkcmdbuf,
259 ae2fVK_AnnSlpUnMap_t v_unmap;
262 * OutputMapped = NULL,
273 assert(!
"vkQueueSubmit failed");
277 if (vkQueueWaitIdle(vkqueue) != VK_SUCCESS) {
278 assert(!
"vkQueueWaitIdle failed");
282 puts(
"After vkQueueSubmit");
292 assert(!
"vkQueueSubmit failed");
296 if (vkQueueWaitIdle(vkqueue) != VK_SUCCESS) {
297 assert(!
"vkQueueWaitIdle failed");
301 puts(
"After vkQueueSubmit 2");
311 assert(!
"vkQueueSubmit failed");
315 if (vkQueueWaitIdle(vkqueue) != VK_SUCCESS) {
316 assert(!
"vkQueueWaitIdle failed");
320 puts(
"After vkQueueSubmit 3");
323 puts(
"After vkQueueWaitIdle");
329 , mk.m_U0.m_alter.m_ptr
334 assert(OutputMapped);
335 assert((mk.m_U0.m_alter.m_ptr[0].m_vkres) == VK_SUCCESS);
337 printf(
"Inputmapped before predict: %f %f\n", InputMapped[0], InputMapped[1]);
338 printf(
"Outputmapped after prediction %f\n", OutputMapped[0]);
342 , *mk.m_U0.m_alter.m_ptr
347 mk.m_U0.m_alter.m_ptr[0]
353 mk.m_U0.m_alter.m_ptr[0]
359 vkFreeCommandBuffers(vkdev, vkcmdpool, 1, &vkcmdbuf);
360 vkDestroyCommandPool(vkdev, vkcmdpool, NULL);
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);
365 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_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 __ae2fVK_AnnSlpIOMap(r_err, slp, ir_ptrinp, ir_ptrout)
#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_AnnSlpIOUnMap_imp(v_out, vi_slp)
#define __ae2fVK_AnnSlpClean_imp(block)
#define __ae2fVK_AnnSlpWBUnMap_imp(v_out, vi_slp)