ae2f_docs
MlpTrainSimple-Primal.c
Go to the documentation of this file.
1#include <ae2fVK/Ann/Mlp.h>
2#include "../vk.h"
3
4static ae2fVK_AnnMlpMk_t s_mk;
5static ae2fVK_AnnMlpMapRangedGeneric_t s_mapranged;
6static ae2f_float* s_ptr0;
7static ae2f_float* s_ptr1;
8
9static void ActDummy(ae2f_float*, ae2f_float);
10static void LossDummy(ae2f_float* a, const ae2f_float* b, const ae2f_float* c, size_t d, size_t e)
11{
12 return;
13}
14
15static size_t s_lpModelLen[] = {2, 4, 4, 1};
16
17#define NULL_GENERIC(T) ((T*)NULL)
18
19int main() {
20 Test_VkInit();
21
23 s_mk
28 , sizeof(s_lpModelLen) / sizeof(s_lpModelLen[0])
29 , s_lpModelLen
30 , NULL_GENERIC(size_t)
31 , 0, 0
33 , LossDummy
34 , 0.1, 0.1, vkdev, vkphydevmemprops
35 , NULL_GENERIC(VkAllocationCallbacks)
36 , ""
37 "#define CL_Q 1\n"
38 "#define ACT_DERIV(lidx, r, output) { *(r) = (((output) + 1e-7) * (1.0 - (output) - 1e-7)); } \n"
39 "#define ACT(lidx, r, x) { *(r) = (1.0 / (1.0 + exp(-(x)))); } \n"
40 "#define LOSS_DERIV(r, o, t, i, c) { *(r) = ((o)[i] - (t)[i]) / (c); } \n"
41 , "\n"
42 );
43
44 {
46 s_mapranged
47 , *(s_mk).m_U0.m_mkswap.m_mkbase
48 , (s_mk).m_ret.m_err
49 , s_ptr0
50 , s_ptr1
51 );
52
53 assert(s_ptr0);
54 assert(s_ptr1);
55
56 size_t i = (s_mk).m_U0.m_mkswap.m_mkbase->m_mlp.m_depth - 1;
57
58 while(i--) {
59 size_t j = (s_mk).m_U0.m_mkswap.m_mkbase->m_mlp.m_outc;
60 const size_t k1 = j;
61 while(j--) {
62 size_t k = k1;
63 s_ptr1[k1 * i + j] = 0.2;
64 while(k--) {
65 s_ptr0[k1 * k1 * i + k1 * k + j] = 0.5;
66 }
67 }
68 }
69
71 s_mapranged
72 , *(s_mk).m_U0.m_mkswap.m_mkbase
73 );
74 }
75
76 {
78 s_mapranged
79 , (*(s_mk).m_U0.m_mkswap.m_mkbase)
80 , (s_mk).m_ret.m_err
81 , s_ptr0
82 );
83
84 assert(s_ptr0);
85 s_ptr0[0] = 0.281236;
86 printf("Goal has set: %f\n", s_ptr0[0]);
87
89 s_mapranged
90 , *(s_mk).m_U0.m_mkswap.m_mkbase
91 )
92 }
93
94 {
96 s_mapranged
97 , *(s_mk).m_U0.m_mkswap.m_mkbase
98 , s_mk.m_ret.m_err
99 , s_ptr0
100 );
101
102 s_ptr0[0] = 12;
103 s_ptr0[1] = 13;
104
105 const size_t
106 a_depth = (s_mk).m_U0.m_mkswap.m_mkbase->m_mlp.m_depth
107 , a_outc = (s_mk).m_U0.m_mkswap.m_mkbase->m_mlp.m_outc;
108
109
110 printf("OUT INIT FOR TEST: %f\n", (s_ptr0[(a_depth - 1) * a_outc] = 4));
111
112 __ae2fVK_AnnMlpUnMapOutStream_imp(s_mapranged, *(s_mk).m_U0.m_mkswap.m_mkbase);
113 }
114
115 VkCommandBuffer vkcmdbuf = NULL;
116 VkCommandPool vkcmdpool = NULL;
117 {
118 VkCommandPoolCreateInfo vkcmdpoolcreatinfo;
119 vkcmdpoolcreatinfo.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT;
120 vkcmdpoolcreatinfo.pNext = NULL;
121 vkcmdpoolcreatinfo.queueFamilyIndex = 0;
122 vkcmdpoolcreatinfo.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
123
124 if((((s_mk).m_U0.m_mkswap.m_mkbase->m_vkres) = vkCreateCommandPool(
125 vkdev
126 , &vkcmdpoolcreatinfo
127 , NULL
128 , &vkcmdpool
129 )) != VK_SUCCESS)
130 {
131 printf("Errval: %d\n", (s_mk.m_U0.m_mkswap.m_mkbase)->m_vkres);
132 assert(!"vkCreateCommandPool has failed.");
133 return -1;
134 }
135
136 unless(vkcmdpool) {
137 assert(!"vkCreateCommandPool went null");
138 return -1;
139 }
140 }
141
142 {
143 VkCommandBufferAllocateInfo vkcmdallocinfo;
144 vkcmdallocinfo.commandBufferCount = 1;
145 vkcmdallocinfo.pNext = NULL;
146 vkcmdallocinfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
147 vkcmdallocinfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
148 vkcmdallocinfo.commandPool = vkcmdpool;
149
150 if((s_mk.m_U0.m_mkswap.m_mkbase->m_vkres =
151 vkAllocateCommandBuffers(
152 (vkdev)
153 , &vkcmdallocinfo
154 , &vkcmdbuf
155 )) != VK_SUCCESS)
156 {
157 printf("Errval: %d\n", (s_mk.m_U0.m_mkswap.m_mkbase)->m_vkres);
158 assert(!"vkAllocateCommandBuffers has failed.");
159 return -1;
160 }
161
162 unless((vkcmdbuf))
163 {
164 printf("Errval: %d\n", (s_mk.m_U0.m_mkswap.m_mkbase)->m_vkres);
165 assert(!"vkAllocateCommandBuffers went null.");
166 return -1;
167 }
168 }
169
170 {
173
174 ae2fVK_AnnMlpDescPool v_descpool;
175 ae2fVK_AnnMlpDescPoolCmd v_descpoolcmd;
176
177 /** Getting pool */
179 v_poolmk
180 , v_descpool
181 , s_mk.m_ret.m_err
182 , (s_mk.m_U0.m_mkswap.m_mkbase[0])
183 , VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT
184 , 1
185 );
186
187 /** Getting predict command */
189 v_cmdmk
190 , (s_mk.m_U0.m_mkswap.m_mkbase[0])
191 , s_mk.m_ret.m_err
192 , v_descpool
193 , v_descpoolcmd
194 , vkcmdbuf
195 );
196
197 assert(s_mk.m_ret.m_err == ae2f_errGlob_OK);
198
199
200 VkSubmitInfo submit_info = {
201 .sType = VK_STRUCTURE_TYPE_SUBMIT_INFO,
202 .commandBufferCount = 1,
203 .pCommandBuffers = &vkcmdbuf,
204 };
205 size_t i;
206
207 if (vkQueueSubmit(
208 vkqueue
209 , 1
210 , &submit_info
211 , VK_NULL_HANDLE
212 ) != VK_SUCCESS)
213 {
214 assert(!"vkQueueSubmit failed");
215 return -1;
216 }
217
218 if (vkQueueWaitIdle(vkqueue) != VK_SUCCESS) {
219 assert(!"vkQueueWaitIdle failed");
220 return -1;
221 }
222
223 {
225 s_mapranged
226 , *(s_mk).m_U0.m_mkswap.m_mkbase
227 , s_mk.m_ret.m_err
228 , s_ptr0
229 );
230
231 const size_t
232 a_depth = (s_mk).m_U0.m_mkswap.m_mkbase->m_mlp.m_depth
233 , a_outc = (s_mk).m_U0.m_mkswap.m_mkbase->m_mlp.m_outc;
234
235 printf("OUT: %f\n", s_ptr0[(a_depth - 1) * (a_outc)]);
236 printf("IN: %f %f\n", s_ptr0[0], s_ptr0[1]);
237
238
239 __ae2fVK_AnnMlpUnMapOutStream_imp(s_mapranged, *(s_mk).m_U0.m_mkswap.m_mkbase);
240
241 }
242
243
244 for(i = 0; i < 10000; i++) {
245 if (vkQueueSubmit(
246 vkqueue
247 , 1
248 , &submit_info
249 , VK_NULL_HANDLE
250 ) != VK_SUCCESS)
251 {
252 assert(!"vkQueueSubmit failed");
253 return -1;
254 }
255
256 if (vkQueueWaitIdle(vkqueue) != VK_SUCCESS) {
257 assert(!"vkQueueWaitIdle failed");
258 return -1;
259 }
260 }
261
263 s_mk.m_U0.m_mkswap.m_mkbase[0]
264 , v_descpool
265 , v_descpoolcmd
266 );
267
269 s_mk.m_U0.m_mkswap.m_mkbase[0]
270 , v_descpool
271 );
272 }
273
274 {
276 s_mapranged
277 , *(s_mk).m_U0.m_mkswap.m_mkbase
278 , s_mk.m_ret.m_err
279 , s_ptr0
280 );
281
282 const size_t
283 a_depth = (s_mk).m_U0.m_mkswap.m_mkbase->m_mlp.m_depth
284 , a_outc = (s_mk).m_U0.m_mkswap.m_mkbase->m_mlp.m_outc;
285
286 printf("OUT: %f\n", s_ptr0[(a_depth - 1) * (a_outc)]);
287 printf("IN: %f %f\n", s_ptr0[0], s_ptr0[1]);
288
289
290 __ae2fVK_AnnMlpUnMapOutStream_imp(s_mapranged, *(s_mk).m_U0.m_mkswap.m_mkbase);
291 }
292
293 vkFreeCommandBuffers(vkdev, vkcmdpool, 1, &vkcmdbuf);
294 vkDestroyCommandPool(vkdev, vkcmdpool, NULL);
295
296 __ae2fVK_AnnMlpClean_imp(*((s_mk).m_U0.m_mkswap.m_mkbase));
297 free((s_mk).m_U0.m_mkswap.m_mkbase);
298 Test_VkEnd();
299 return 0;
300}
void ae2f_AnnAct_t(ae2f_float_t *ret, ae2f_float_t x)
Customisable activasion function type.
Definition Act.h:19
#define unless(...)
Invokes when condition is false.
Definition Cast.h:103
#define ae2f_float
Predefined floating point type.
Definition Float.auto.h:17
VkMappedMemoryRange ae2fVK_AnnMlpMapRangedGeneric_t
Definition Mlp.core.h:118
#define __ae2fVK_AnnMlpDescPoolMk_imp
Definition Mlp.core.h:161
#define __ae2fVK_AnnMlpDescPoolClean_imp
Definition Mlp.core.h:162
#define __ae2fVK_AnnMlpDescPoolCmdClean_imp
Definition Mlp.core.h:165
ae2fVK_AnnSlpDescPoolCmdMk_t ae2fVK_AnnMlpDescPoolCmdMk_t
Definition Mlp.core.h:119
#define NULL_GENERIC(T)
Definition MlpInit.c:14
#define __ae2fVK_AnnMlpDescPoolCmdMkTrain_imp(v_cmdmk, iv_mlp, iv_err, i_pool, r_cmd, i_vkcmdbuf)
#define ae2f_errGlob_OK
The Operation you've wanted went successful.
Definition errGlob.h:23
#define __ae2fVK_AnnMlpUnMapOutStream_imp(v_unmap, iv_mlp)
Definition Mlp.auto.h:665
#define __ae2fVK_AnnMlpMapGoal_imp(v_map, iv_mlp, r_err, r_ptr)
Definition Mlp.auto.h:604
#define __ae2fVK_AnnMlpUnMapGoal_imp(v_unmap, iv_mlp)
Definition Mlp.auto.h:626
#define __ae2fVK_AnnMlpMapWB_imp(v_map, iv_mlp, r_err, r_ptrweight, r_ptrbias)
Definition Mlp.auto.h:682
#define __ae2fVK_AnnMlpMapOutStream_imp(v_map, iv_mlp, r_err, r_ptr)
Definition Mlp.auto.h:643
#define __ae2fVK_AnnMlpClean_imp(v_mlp)
Definition Mlp.auto.h:524
#define __ae2fVK_AnnMlpUnMapWB_imp(v_unmap, iv_mlp)
Definition Mlp.auto.h:723
#define __ae2fVK_AnnMlpMk_imp(v_mk, iv_weight_opt, iv_bias_opt, iv_outstream_opt, iv_deltastream_opt, i_len_count, i_len, i_len_swap, i_prm_offset, i_extra, i_act, i_actderiv, i_lossderiv, i_learningrate, i_learningrate_bias, i_vkdev, i_vkmemprops, iv_vkalloccalls, i_vkcldeclaration, i_vkcldefinition)
Make MLP with OpenCL compute shader.
Definition Mlp.auto.h:65
ae2fVK_AnnSlpDescPoolCmd ae2fVK_AnnMlpDescPoolCmd
Definition Mlp.h:28
ae2fVK_AnnSlpCreatDescPool_t ae2fVK_AnnMlpCreatDescPool_t
Definition Mlp.h:30
ae2fVK_AnnSlpDescPool ae2fVK_AnnMlpDescPool
Definition Mlp.h:27