From 606f9afd2496c56fc9592555df96d7a8a9202fb0 Mon Sep 17 00:00:00 2001 From: "Alexis H. Rivera" Date: Sun, 14 Nov 2021 14:56:34 -0700 Subject: [PATCH 1/3] declare k2c_activationType* extern --- include/k2c_include.h | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/include/k2c_include.h b/include/k2c_include.h index 0a2f387..24347af 100644 --- a/include/k2c_include.h +++ b/include/k2c_include.h @@ -23,15 +23,15 @@ void k2c_softmax_func(float * x, const size_t size); void k2c_softplus_func(float * x, const size_t size); void k2c_softsign_func(float * x, const size_t size); typedef void k2c_activationType(float * x, const size_t size); -k2c_activationType * k2c_linear; -k2c_activationType * k2c_exponential; -k2c_activationType * k2c_relu; -k2c_activationType * k2c_hard_sigmoid; -k2c_activationType * k2c_tanh; -k2c_activationType * k2c_sigmoid; -k2c_activationType * k2c_softmax; -k2c_activationType * k2c_softplus; -k2c_activationType * k2c_softsign; +extern k2c_activationType * k2c_linear; +extern k2c_activationType * k2c_exponential; +extern k2c_activationType * k2c_relu; +extern k2c_activationType * k2c_hard_sigmoid; +extern k2c_activationType * k2c_tanh; +extern k2c_activationType * k2c_sigmoid; +extern k2c_activationType * k2c_softmax; +extern k2c_activationType * k2c_softplus; +extern k2c_activationType * k2c_softsign; // Advanced Activations void k2c_LeakyReLU(float * x, const size_t size, const float alpha); From 4ccbbf122d3a66fa81457241eba74e00fbbbb1ed Mon Sep 17 00:00:00 2001 From: "Alexis H. Rivera" Date: Sun, 14 Nov 2021 20:59:00 -0700 Subject: [PATCH 2/3] changes to generate code without warnings in vs2019 and pass code analysis --- include/k2c_activations.c | 14 +++++++------- include/k2c_helper_functions.c | 4 ++++ include/k2c_recurrent_layers.c | 2 +- keras2c/make_test_suite.py | 2 +- keras2c/weights2c.py | 4 ++-- 5 files changed, 15 insertions(+), 11 deletions(-) diff --git a/include/k2c_activations.c b/include/k2c_activations.c index 4cdc1d4..909256e 100644 --- a/include/k2c_activations.c +++ b/include/k2c_activations.c @@ -35,7 +35,7 @@ k2c_activationType * k2c_linear = k2c_linear_func; void k2c_exponential_func(float * x, const size_t size) { for (size_t i=0; iarray[i*in_width], kernel, recurrent_kernel, bias, fwork, reset_after, recurrent_activation, output_activation); if (return_sequences) { diff --git a/keras2c/make_test_suite.py b/keras2c/make_test_suite.py index d7af7b1..392540e 100644 --- a/keras2c/make_test_suite.py +++ b/keras2c/make_test_suite.py @@ -138,7 +138,7 @@ def make_test_suite(model, function_name, malloc_vars, num_tests=10, stateful=Fa file.write('\n') s = 'clock_t t1 = clock(); \n' s += 'printf("Average time over ' + str(num_tests) + \ - ' tests: %e s \\n\", \n (double)(t1-t0)/(double)CLOCKS_PER_SEC/(double)' + \ + ' tests: %e s \\n\", \n ((double)t1-t0)/(double)CLOCKS_PER_SEC/(double)' + \ str(num_tests) + '); \n' file.write(s) diff --git a/keras2c/weights2c.py b/keras2c/weights2c.py index afeb4ae..a4b3e47 100644 --- a/keras2c/weights2c.py +++ b/keras2c/weights2c.py @@ -80,9 +80,9 @@ def array2c(array, name, malloc=False): elif temp[i] == -np.inf: s += "-HUGE_VALF," else: - s += "{:+.8e}".format(temp[i]) + ',' + s += "{:+.8e}f".format(temp[i]) + ',' count += 1 - if (count) % 5 is 0: + if (count) % 5 == 0: s += '\n' s += '}; \n' s += 'k2c_tensor ' + name + ' = {&' + name + \ From ecfa5427b4c8e6462036a6191dcd23111251ea30 Mon Sep 17 00:00:00 2001 From: "Alexis H. Rivera" Date: Sun, 14 Nov 2021 21:18:45 -0700 Subject: [PATCH 3/3] move input declarations to global scope to reduce stack usage, use float specific functions --- keras2c/make_test_suite.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/keras2c/make_test_suite.py b/keras2c/make_test_suite.py index 392540e..9b6904e 100644 --- a/keras2c/make_test_suite.py +++ b/keras2c/make_test_suite.py @@ -73,8 +73,6 @@ def make_test_suite(model, function_name, malloc_vars, num_tests=10, stateful=Fa s += 'float maxabs(k2c_tensor *tensor1, k2c_tensor *tensor2);\n' s += 'struct timeval GetTimeStamp(); \n \n' file.write(s) - s = 'int main(){\n' - file.write(s) for i in range(num_tests): if i == num_tests//2 and stateful: model.reset_states() @@ -109,6 +107,9 @@ def make_test_suite(model, function_name, malloc_vars, num_tests=10, stateful=Fa model_outputs[j] + '_test' + str(i+1))) file.write(Weights2C.array2c(np.zeros(output.shape), 'c_' + model_outputs[j] + '_test' + str(i+1))) + s = 'int main(){\n' + file.write(s) + s = ' float errors[' + str(num_tests*num_outputs) + '];\n' s += ' size_t num_tests = ' + str(num_tests) + '; \n' s += 'size_t num_outputs = ' + str(num_outputs) + '; \n' @@ -169,7 +170,7 @@ def make_test_suite(model, function_name, malloc_vars, num_tests=10, stateful=Fa float x = 0; \n float y = 0; \n for(size_t i=0; inumel; i++){\n - y = fabs(tensor1->array[i]-tensor2->array[i]); + y = fabsf(tensor1->array[i]-tensor2->array[i]); if (y>x) {x=y;}} return x;}\n\n""" file.write(s)