1#include <ae2fVK/Ann/Mlp.h>
6static ae2fVK_AnnMlpMk_t s_mk;
7static ae2fVK_AnnMlpMapRangedGeneric_t s_mapranged;
8static ae2f_float* s_ptr0;
9static ae2f_float* s_ptr1;
11static void ActDummy(ae2f_float*, ae2f_float);
12static void LossDummy(ae2f_float* a,
const ae2f_float* b,
const ae2f_float* c, size_t d, size_t e)
17static size_t s_lpModelLen[] = {2, 4, 3, 12, 1};
19#define NULL_GENERIC(T) ((T*)NULL)
24 __ae2fVK_AnnMlpMk_imp_V(
27 , NULL_GENERIC(ae2f_float)
28 , NULL_GENERIC(ae2f_float)
29 , NULL_GENERIC(ae2f_float)
30 , NULL_GENERIC(ae2f_float)
31 ,
sizeof(s_lpModelLen) /
sizeof(s_lpModelLen[0])
33 , NULL_GENERIC(size_t)
35 , NULL_GENERIC(ae2f_AnnActFFN_t*), NULL_GENERIC(ae2f_AnnActFFN_t*)
37 , 0.1, 0.1, vkdev, vkphydevmemprops
38 , NULL_GENERIC(VkAllocationCallbacks)
40 "#define ACT_DERIV(lidx, r, x, i, c) { *(r) = (((x)[i] + 1e-7) * (1.0 - (x)[i] - 1e-7)); } \n"
41 "#define ACT(lidx, r, x, i, c) { *(r) = (1.0 / (1.0 + exp(-(x[i])))); } \n"
42 "#define LOSS_DERIV(r, o, t, i, c) { *(r) = ((o)[i] - (t)[i]) / (c); } \n"
43 "#pragma OPENCL EXTENSION cl_khr_fp16 : enable\n"
44 "#define ae2f_float_t half\n"
50 __ae2fVK_AnnMlpMapWB_imp(
52 , *(s_mk).m_U0.m_mkswap.m_mkbase
61 size_t i = (s_mk).m_U0.m_mkswap.m_mkbase->m_mlp.m_depth - 1;
64 size_t j = (s_mk).m_U0.m_mkswap.m_mkbase->m_mlp.m_outc;
68 s_ptr1[k1 * i + j] = 0.2;
70 s_ptr0[k1 * k1 * i + k1 * k + j] = 0.5;
75 __ae2fVK_AnnMlpUnMapWB_imp(
77 , *(s_mk).m_U0.m_mkswap.m_mkbase
82 __ae2fVK_AnnMlpMapGoal_imp(
84 , (*(s_mk).m_U0.m_mkswap.m_mkbase)
91 printf(
"Goal has set: %f\n", s_ptr0[0]);
93 __ae2fVK_AnnMlpUnMapGoal_imp(
95 , *(s_mk).m_U0.m_mkswap.m_mkbase
100 __ae2fVK_AnnMlpMapOutStream_imp(
102 , *(s_mk).m_U0.m_mkswap.m_mkbase
111 a_depth = (s_mk).m_U0.m_mkswap.m_mkbase->m_mlp.m_depth
112 , a_outc = (s_mk).m_U0.m_mkswap.m_mkbase->m_mlp.m_outc;
115 printf(
"OUT INIT FOR TEST: %f\n", (s_ptr0[(a_depth - 1) * a_outc] = 4));
117 __ae2fVK_AnnMlpUnMapOutStream_imp(s_mapranged, *(s_mk).m_U0.m_mkswap.m_mkbase);
120 VkCommandBuffer vkcmdbuf = NULL;
121 VkCommandPool vkcmdpool = NULL;
123 VkCommandPoolCreateInfo vkcmdpoolcreatinfo;
124 vkcmdpoolcreatinfo.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT;
125 vkcmdpoolcreatinfo.pNext = NULL;
126 vkcmdpoolcreatinfo.queueFamilyIndex = 0;
127 vkcmdpoolcreatinfo.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
129 if((((s_mk).m_U0.m_mkswap.m_mkbase->m_vkres) = vkCreateCommandPool(
131 , &vkcmdpoolcreatinfo
136 printf(
"Errval: %d\n", (s_mk.m_U0.m_mkswap.m_mkbase)->m_vkres);
137 assert(!
"vkCreateCommandPool has failed.");
142 assert(!
"vkCreateCommandPool went null");
148 VkCommandBufferAllocateInfo vkcmdallocinfo;
149 vkcmdallocinfo.commandBufferCount = 1;
150 vkcmdallocinfo.pNext = NULL;
151 vkcmdallocinfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
152 vkcmdallocinfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
153 vkcmdallocinfo.commandPool = vkcmdpool;
155 if((s_mk.m_U0.m_mkswap.m_mkbase->m_vkres =
156 vkAllocateCommandBuffers(
162 printf(
"Errval: %d\n", (s_mk.m_U0.m_mkswap.m_mkbase)->m_vkres);
163 assert(!
"vkAllocateCommandBuffers has failed.");
169 printf(
"Errval: %d\n", (s_mk.m_U0.m_mkswap.m_mkbase)->m_vkres);
170 assert(!
"vkAllocateCommandBuffers went null.");
176 ae2fVK_AnnMlpCreatDescPool_t v_poolmk;
177 ae2fVK_AnnMlpDescPoolCmdMk_t v_cmdmk;
179 ae2fVK_AnnMlpDescPool v_descpool;
180 ae2fVK_AnnMlpDescPoolCmd v_descpoolcmd;
183 __ae2fVK_AnnMlpDescPoolMk_imp(
187 , (s_mk.m_U0.m_mkswap.m_mkbase[0])
188 , VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT
193 __ae2fVK_AnnMlpDescPoolCmdMkTrain_imp(
195 , (s_mk.m_U0.m_mkswap.m_mkbase[0])
202 assert(s_mk.m_ret.m_err == ae2f_errGlob_OK);
205 VkSubmitInfo submit_info = {
206 .sType = VK_STRUCTURE_TYPE_SUBMIT_INFO,
207 .commandBufferCount = 1,
208 .pCommandBuffers = &vkcmdbuf,
219 assert(!
"vkQueueSubmit failed");
223 if (vkQueueWaitIdle(vkqueue) != VK_SUCCESS) {
224 assert(!
"vkQueueWaitIdle failed");
229 __ae2fVK_AnnMlpMapOutStream_imp(
231 , *(s_mk).m_U0.m_mkswap.m_mkbase
237 a_depth = (s_mk).m_U0.m_mkswap.m_mkbase->m_mlp.m_depth
238 , a_outc = (s_mk).m_U0.m_mkswap.m_mkbase->m_mlp.m_outc;
240 printf(
"OUT: %f\n", s_ptr0[(a_depth - 1) * (a_outc)]);
241 printf(
"IN: %f %f\n", s_ptr0[0], s_ptr0[1]);
244 __ae2fVK_AnnMlpUnMapOutStream_imp(s_mapranged, *(s_mk).m_U0.m_mkswap.m_mkbase);
251 for(i = 0; i < 10000; i++) {
259 assert(!
"vkQueueSubmit failed");
263 if (vkQueueWaitIdle(vkqueue) != VK_SUCCESS) {
264 assert(!
"vkQueueWaitIdle failed");
269 printf(
"TIME ELAPSED: %lf\n", ((
double)(clock() - curr)) / ((
double)CLOCKS_PER_SEC));
271 __ae2fVK_AnnMlpDescPoolCmdClean_imp(
272 s_mk.m_U0.m_mkswap.m_mkbase[0]
277 __ae2fVK_AnnMlpDescPoolClean_imp(
278 s_mk.m_U0.m_mkswap.m_mkbase[0]
284 __ae2fVK_AnnMlpMapOutStream_imp(
286 , *(s_mk).m_U0.m_mkswap.m_mkbase
292 a_depth = (s_mk).m_U0.m_mkswap.m_mkbase->m_mlp.m_depth
293 , a_outc = (s_mk).m_U0.m_mkswap.m_mkbase->m_mlp.m_outc;
295 printf(
"OUT: %f\n", s_ptr0[(a_depth - 1) * (a_outc)]);
296 printf(
"IN: %f %f\n", s_ptr0[0], s_ptr0[1]);
299 __ae2fVK_AnnMlpUnMapOutStream_imp(s_mapranged, *(s_mk).m_U0.m_mkswap.m_mkbase);
302 vkFreeCommandBuffers(vkdev, vkcmdpool, 1, &vkcmdbuf);
303 vkDestroyCommandPool(vkdev, vkcmdpool, NULL);
305 __ae2fVK_AnnMlpClean_imp(*((s_mk).m_U0.m_mkswap.m_mkbase));
306 free((s_mk).m_U0.m_mkswap.m_mkbase);
313int main () {
return 0; }