From 5ed4bea4b1d829728fc9e18e5651bab7c67318d6 Mon Sep 17 00:00:00 2001 From: Guillaume Emile <emile.guillaume@etu.univ-grenoble-alpes.fr> Date: Mon, 18 Jul 2022 15:23:22 +0200 Subject: [PATCH] add central demon (need to be tested) + add random unsafe node (need to be test) --- lib/Random/lustre_consts.c | 4 + lib/Random/lustre_consts.h | 4 + lib/Random/lustre_types.h | 16 ++++ lib/Random/random.exec | Bin 0 -> 17864 bytes lib/Random/random.sh | 4 + lib/Random/random.sh~ | 4 + lib/Random/utils_random.c | 13 +++ lib/Random/utils_random.h | 24 ++++++ lib/Random/utils_random_ext.c | 6 ++ lib/Random/utils_random_ext.c~ | 5 ++ lib/Random/utils_random_ext.h | 1 + lib/Random/utils_random_loop.c | 151 +++++++++++++++++++++++++++++++++ lib/sas.lus | 29 +++++++ lib/use_random.lus | 2 + lib/utils.lus | 10 ++- 15 files changed, 272 insertions(+), 1 deletion(-) create mode 100644 lib/Random/lustre_consts.c create mode 100644 lib/Random/lustre_consts.h create mode 100644 lib/Random/lustre_types.h create mode 100755 lib/Random/random.exec create mode 100644 lib/Random/random.sh create mode 100644 lib/Random/random.sh~ create mode 100644 lib/Random/utils_random.c create mode 100644 lib/Random/utils_random.h create mode 100644 lib/Random/utils_random_ext.c create mode 100644 lib/Random/utils_random_ext.c~ create mode 100644 lib/Random/utils_random_ext.h create mode 100644 lib/Random/utils_random_loop.c create mode 100644 lib/use_random.lus diff --git a/lib/Random/lustre_consts.c b/lib/Random/lustre_consts.c new file mode 100644 index 00000000..bc36e0d3 --- /dev/null +++ b/lib/Random/lustre_consts.c @@ -0,0 +1,4 @@ +/* This file was generated by lv6 version v6.106.1. */ +/* lv6 utils.lus -n random -2c -exec -dir Random */ +/* on PC-Travail the 18/07/2022 at 15:00:26 */ +#include "lustre_consts.h" \ No newline at end of file diff --git a/lib/Random/lustre_consts.h b/lib/Random/lustre_consts.h new file mode 100644 index 00000000..0c80098e --- /dev/null +++ b/lib/Random/lustre_consts.h @@ -0,0 +1,4 @@ +/* This file was generated by lv6 version v6.106.1. */ +/* lv6 utils.lus -n random -2c -exec -dir Random */ +/* on PC-Travail the 18/07/2022 at 15:00:26 */ +#include "lustre_types.h" \ No newline at end of file diff --git a/lib/Random/lustre_types.h b/lib/Random/lustre_types.h new file mode 100644 index 00000000..d9385f1c --- /dev/null +++ b/lib/Random/lustre_types.h @@ -0,0 +1,16 @@ +/* This file was generated by lv6 version v6.106.1. */ +/* lv6 utils.lus -n random -2c -exec -dir Random */ +/* on PC-Travail the 18/07/2022 at 15:00:26 */ + +#ifndef _SOC2C_PREDEF_TYPES +#define _SOC2C_PREDEF_TYPES +typedef int _boolean; +typedef int _integer; +typedef char* _string; +typedef double _real; +typedef double _double; +typedef float _float; +#define _false 0 +#define _true 1 +#endif +// end of _SOC2C_PREDEF_TYPES \ No newline at end of file diff --git a/lib/Random/random.exec b/lib/Random/random.exec new file mode 100755 index 0000000000000000000000000000000000000000..7b1d5ae64a2428c32e49038e36a4253f2c56db0d GIT binary patch literal 17864 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 NbF<Q@^cZ+p@t^US**O3J literal 0 HcmV?d00001 diff --git a/lib/Random/random.sh b/lib/Random/random.sh new file mode 100644 index 00000000..07a6da31 --- /dev/null +++ b/lib/Random/random.sh @@ -0,0 +1,4 @@ +if [ -z ${C_COMPILER} ]; then C_COMPILER=gcc; fi +$C_COMPILER -o random.exec \ + Random/utils_random_ext.c Random/lustre_consts.c Random/utils_random.c Random/utils_random_loop.c + diff --git a/lib/Random/random.sh~ b/lib/Random/random.sh~ new file mode 100644 index 00000000..07a6da31 --- /dev/null +++ b/lib/Random/random.sh~ @@ -0,0 +1,4 @@ +if [ -z ${C_COMPILER} ]; then C_COMPILER=gcc; fi +$C_COMPILER -o random.exec \ + Random/utils_random_ext.c Random/lustre_consts.c Random/utils_random.c Random/utils_random_loop.c + diff --git a/lib/Random/utils_random.c b/lib/Random/utils_random.c new file mode 100644 index 00000000..5d2b57e7 --- /dev/null +++ b/lib/Random/utils_random.c @@ -0,0 +1,13 @@ +/* This file was generated by lv6 version v6.106.1. */ +/* lv6 utils.lus -n random -2c -exec -dir Random */ +/* on PC-Travail the 18/07/2022 at 15:00:26 */ +#include "utils_random.h" +//// Defining step functions +// Step function(s) for utils_c_rand_ctx +// Step function(s) for utils_random_ctx +void utils_random_step(_integer x,_integer *res){ + + utils_c_rand_step(x,res); + +} // End of utils_random_step + diff --git a/lib/Random/utils_random.h b/lib/Random/utils_random.h new file mode 100644 index 00000000..91093483 --- /dev/null +++ b/lib/Random/utils_random.h @@ -0,0 +1,24 @@ +/* This file was generated by lv6 version v6.106.1. */ +/* lv6 utils.lus -n random -2c -exec -dir Random */ +/* on PC-Travail the 18/07/2022 at 15:00:26 */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "lustre_consts.h" + +// User typedef +#ifndef _utils_random_TYPES +#define _utils_random_TYPES +// Memoryless soc ctx typedef +// Memoryfull soc ctx typedef +#endif // end of _utils_random_TYPES + +#ifndef _utils_random_H_FILE +#include "utils_random_ext.h" +#define _utils_random_H_FILE +#endif // _utils_random_H_FILE + +void utils_random_step(_integer ,_integer *); + +///////////////////////////////////////////////// diff --git a/lib/Random/utils_random_ext.c b/lib/Random/utils_random_ext.c new file mode 100644 index 00000000..83e091f8 --- /dev/null +++ b/lib/Random/utils_random_ext.c @@ -0,0 +1,6 @@ +#include "utils_random.h" +#include <assert.h> +void utils_c_rand_step(_integer x,_integer *res){ + assert (0 < x ); + *res = (rand() % x); +} diff --git a/lib/Random/utils_random_ext.c~ b/lib/Random/utils_random_ext.c~ new file mode 100644 index 00000000..482555db --- /dev/null +++ b/lib/Random/utils_random_ext.c~ @@ -0,0 +1,5 @@ +#include "utils_random.h" +void utils_c_rand_step(_integer x,_integer *res){ + assert (0 < x ); + *res = (rand() % x); +} diff --git a/lib/Random/utils_random_ext.h b/lib/Random/utils_random_ext.h new file mode 100644 index 00000000..80c5463d --- /dev/null +++ b/lib/Random/utils_random_ext.h @@ -0,0 +1 @@ +void utils_c_rand_step(_integer ,_integer *); diff --git a/lib/Random/utils_random_loop.c b/lib/Random/utils_random_loop.c new file mode 100644 index 00000000..4aac425f --- /dev/null +++ b/lib/Random/utils_random_loop.c @@ -0,0 +1,151 @@ +/* This file was generated by lv6 version v6.106.1. */ +/* lv6 utils.lus -n random -2c -exec -dir Random */ +/* on PC-Travail the 18/07/2022 at 15:00:26 */ + +#include <stdlib.h> +#include <stdio.h> +#include <unistd.h> +#include "utils_random.h" +/* Print a promt ? ************************/ +static int ISATTY; +/* MACROS DEFINITIONS ****************/ +#ifndef TT +#define TT "1" +#endif +#ifndef FF +#define FF "0" +#endif +#ifndef BB +#define BB "bottom" +#endif +#ifdef CKCHECK +/* set this macro for testing output clocks */ +#endif + +void _read_pragma(char b[]) { + + if (!strcmp(b,"#quit")) exit(0); + if (!strcmp(b,"#q")) exit(0); +} +char* _get_string(char* n){ + static char b[10] = "dummy"; + return b; +} +/* Standard Input procedures **************/ +_boolean _get_bool(char* n){ + char b[512]; + char c; + _boolean r = 0; + int s = 1; + do { + if(ISATTY) { + if((s != 1)||(r == -1)) printf("\a"); + // printf("%s (1,t,T/0,f,F) ? ", n); + } + if(scanf("%s", b)==EOF) exit(0); + r = -1; + c=b[0]; + if(c == 'q') exit(0); + if(c == '#') _read_pragma(b); + if((c == '0') || (c == 'f') || (c == 'F')) r = 0; + if((c == '1') || (c == 't') || (c == 'T')) r = 1; + } while((s != 1) || (r == -1)); + return r; +} +_integer _get_int(char* n){ + char b[512]; + _integer r; + int s = 1; + do { + if(ISATTY) { + if(s != 1) printf("\a"); + //printf("%s (integer) ? ", n); + } + if(scanf("%s", b)==EOF) exit(0); + if(*b == 'q') exit(0); + if(*b == '#') { + _read_pragma(b); + } else { + s = sscanf(b, "%d", &r); + } + } while(s != 1); + return r; +} +#define REALFORMAT ((sizeof(_real)==8)?"%lf":"%f") +_real _get_real(char* n){ + char b[512]; + _real r; + int s = 1; + do { + if(ISATTY) { + if(s != 1) printf("\a"); + //printf("%s (real) ? ", n); + } + if(scanf("%s", b)==EOF) exit(0); + if(*b == 'q') exit(0); + if(*b == '#') { + _read_pragma(b); + } else { + s = sscanf(b, REALFORMAT, &r); + } + } while(s != 1); + return r; +} +/* Standard Output procedures **************/ +void _put_bottom(char* n){ + if(ISATTY) printf("%s = ", n); + printf("%s ", BB); + if(ISATTY) printf("\n"); +} +void _put_bool(char* n, _boolean _V){ + if(ISATTY) printf("%s = ", n); + printf("%s ", (_V)? TT : FF); + if(ISATTY) printf("\n"); +} +void _put_int(char* n, _integer _V){ + if(ISATTY) printf("%s = ", n); + printf("%d ", _V); + if(ISATTY) printf("\n"); +} +void _put_real(char* n, _real _V){ + if(ISATTY) printf("%s = ", n); + printf("%f ", _V); + if(ISATTY) printf("\n"); +} +void _put_string(char* n, char* _V){ + if(ISATTY) printf("%s = ", n); + printf("%s ", _V); + if(ISATTY) printf("\n"); +} + +/* Output procedures **********************/ +#ifdef CKCHECK +void %s_BOT_n(void* cdata){ + _put_bottom("n"); +} +#endif + +/* Main procedure *************************/ +int main(){ + int _s = 0; + _integer x; + _integer res; + + printf("#inputs \"x\":int\n"); + printf("#outputs \"res\":int\n"); + + /* Main loop */ + ISATTY = isatty(0); + while(1){ + if (ISATTY) printf("#step %d \n", _s+1); + else if(_s) printf("\n"); + fflush(stdout); + ++_s; + x = _get_int("x"); + utils_random_step(x,&res); + // printf("%d #outs %d\n",x,res); + printf("%d\n",res); + } + return 1; + +} diff --git a/lib/sas.lus b/lib/sas.lus index 2451a5be..ffa29ac8 100644 --- a/lib/sas.lus +++ b/lib/sas.lus @@ -37,6 +37,10 @@ let and (silent<<an,pn>>(enab) or boolred<<1,pn,pn>>(map<<boolany<<an>>, pn>>(acti))); tel; +(*function distributed<<const an:int; const pn:int>>(enab : bool^an^pn) +returns (acti : bool^an^pn); +var + nb_enab,rng:int;*) -- Exactly one node is activated. node daemon_is_central<<const an:int; const pn:int>>(acti, enab : bool^an^pn) returns (y : bool); @@ -46,6 +50,31 @@ let tel; +function make_activ_tab<<const an:int>>(ain:int; elem:bool^an) +returns(aout:int; res:bool^an); +var + elem_is_true:bool; +let + elem_is_true = boolany<<an>>(elem); + res= if elem_is_true and (ain=0) then elem else false^an; + aout = if elem_is_true then ain-1 else ain; +tel; + +function if_true_add_1<<const an:int>>(ain: int; elem: bool^an) +returns(aout : int); +let + aout= if boolany<<an>>(elem) then ain+1 else ain; +tel; + +unsafe function central<<const an:int; const pn:int>>(enab : bool^an^pn) +returns (acti : bool^an^pn); +var + nb_enab,rng,temp:int; +let + nb_enab = red<<if_true_add_1<<an>>,pn>>(0,enab); + rng = random(nb_enab); + temp,acti = fillred<<make_activ_tab<<an>>,pn>>(rng,enab); +tel; -- No two neighboring nodes are active at once. node daemon_is_locally_central<<const an:int; const pn:int>>( diff --git a/lib/use_random.lus b/lib/use_random.lus new file mode 100644 index 00000000..975f3669 --- /dev/null +++ b/lib/use_random.lus @@ -0,0 +1,2 @@ +--Make a random function for Lustre by using C function: +unsafe extern function c_rand(x:int) returns (res:int); \ No newline at end of file diff --git a/lib/utils.lus b/lib/utils.lus index 4d16cbb3..1568d3a7 100644 --- a/lib/utils.lus +++ b/lib/utils.lus @@ -1,3 +1,11 @@ +include "use_random.lus" + +--Random (unsafe extern function): +unsafe function random(x:int) returns (res:int); +let + res = c_rand(x); +tel + -- Generates an array of indexes: [0, 1, ..., N-1] function range<<const N:int>>(_ : bool) returns (r : int^N); let @@ -80,4 +88,4 @@ function weight (e:neigh) returns(res : int); let res = e.weight; -tel; +tel; \ No newline at end of file -- GitLab