From 8995267cd3b59f4e9d47fa55d8a9bb3d96bc9d5a Mon Sep 17 00:00:00 2001 From: felsabbagh3 Date: Fri, 17 May 2019 08:34:00 +0400 Subject: [PATCH] Added barriers --- kernel/vx_include/vx_front.c | 43 ++++++++++++++++++++++++ kernel/vx_include/vx_mem.c | 40 ++++++++++++++++++++++ kernel/vx_include/vx_mem.h | 15 +++++++++ rtl/obj_dir/VVortex__ALL.a | Bin 92480 -> 92480 bytes rtl/obj_dir/VVortex__verFiles.dat | 54 +++++++++++++++--------------- 5 files changed, 125 insertions(+), 27 deletions(-) create mode 100644 kernel/vx_include/vx_mem.c create mode 100644 kernel/vx_include/vx_mem.h diff --git a/kernel/vx_include/vx_front.c b/kernel/vx_include/vx_front.c index cc51ba2e..33fdf8fd 100644 --- a/kernel/vx_include/vx_front.c +++ b/kernel/vx_include/vx_front.c @@ -435,5 +435,48 @@ void _vx_e_mat_mult(unsigned tid, unsigned wid) } +void sleep(int num) +{ + for (int i = 0; i < num; i++); +} + + +bool barrier_bool = false; +bool barriers[32]; + +void barrier(unsigned wid, int num) +{ + barriers[wid] = true; + + if (wid == 0) + { + bool cont = false; + int count = 0; + while(cont) + { + count = 0; + for (int i = 0; i < num; i++) + { + if (barriers[i]) count++; + } + + if (count == num) + { + for (int i = 0; i < num; i++) + { + barriers[i] = false; + barrier_bool = true; + sleep(70); + barrier_bool = false; + } + } + } + } + else + { + while(!barrier_bool); + sleep(100); + } +} diff --git a/kernel/vx_include/vx_mem.c b/kernel/vx_include/vx_mem.c new file mode 100644 index 00000000..b6a1867e --- /dev/null +++ b/kernel/vx_include/vx_mem.c @@ -0,0 +1,40 @@ + +#include "vx_mem.h" + + +void * vx_malloc_shared(unsigned size) +{ + void * to_return; + + bool done = false; + unsigned curr_size; + + unsigned curr_index = 0; + while ((curr_index < free_index) && !done) + { + curr_size = (unsigned) *(free_array[curr_index].ptr - 4); + if (curr_size <= size) + { + to_return = free_array[curr_index].ptr; + done = true; + } + + curr_index++; + } + + unsigned * u_heap_ptr = (unsigned *) heap_ptr; + + if (!done) + { + u_heap_ptr[0] = size; + to_return = heap_ptr + 4; + heap_ptr = to_return + size; + } + + return to_return; +} + +void vx_free(void * to_free) +{ + +} \ No newline at end of file diff --git a/kernel/vx_include/vx_mem.h b/kernel/vx_include/vx_mem.h new file mode 100644 index 00000000..2f03dedc --- /dev/null +++ b/kernel/vx_include/vx_mem.h @@ -0,0 +1,15 @@ + +void * vx_malloc_shared(unsigned); +void vx_free(void *); + +typedef struct +{ + void * ptr; + +} free_t; + +void * heap_ptr = (void *) 0xFF000000; + +free_t free_array[100]; +unsigned free_index = 0; + diff --git a/rtl/obj_dir/VVortex__ALL.a b/rtl/obj_dir/VVortex__ALL.a index 5826850fd0ce66fc417fbc5cac299eca9104c1f5..0656f70edc0aa525b760369f1206652ebe76b3ba 100644 GIT binary patch delta 51 xcmX?biS@uG)(O(=76xYKre;PPl?quQY*X{*S*+V