Support running a different Kelvin benchmark binary Allow passing in of 'kelvin_benchmark_info' which is a dictionary that contains the needed info for the kelvin_binary (e.g srcs). This allows the benchmark to run a different Kelvin binary while still keeping the SEC and SMC ones the same. Tested: best_of_times, silence with ISS+FPGA Change-Id: Iabba3fd2e19524a66c3f530f095828e5201d0e9c
diff --git a/benchmarks/benchmark_kelvin.cc b/benchmarks/benchmark_kelvin.cc index c01ffde..1871619 100644 --- a/benchmarks/benchmark_kelvin.cc +++ b/benchmarks/benchmark_kelvin.cc
@@ -34,7 +34,7 @@ // In order to include the model data generate from Bazel, include the header // using the name passed as a macro. -#define MODEL_HEADER_DIRECTORY benchmarks/ +#define MODEL_HEADER_DIRECTORY BENCHMARK_PATH/ #define MODEL_HEADER_TYPE _model.h #define MODEL_HEADER STR(MODEL_HEADER_DIRECTORY BENCHMARK_NAME MODEL_HEADER_TYPE) #include MODEL_HEADER
diff --git a/benchmarks/benchmark_sec.c b/benchmarks/benchmark_sec.c index b1b5040..251bd08 100644 --- a/benchmarks/benchmark_sec.c +++ b/benchmarks/benchmark_sec.c
@@ -34,10 +34,10 @@ // In order to include the model data generate from Bazel, include the header // using the name passed as a macro. For some reason this binary (vs Kelvin) // adds space when concatinating so use the model format -smc_bin.h. -#define MODEL_HEADER_DIRECTORY benchmarks -#define MODEL_HEADER_TYPE smc_bin.h -#define MODEL_HEADER STR(MODEL_HEADER_DIRECTORY/BENCHMARK_NAME-MODEL_HEADER_TYPE) -#include MODEL_HEADER +#define SMC_BINARY_DIRECTORY BENCHMARK_PATH +#define SMC_BINARY_TYPE smc_bin.h +#define SMC_BINARY STR(SMC_BINARY_DIRECTORY/BENCHMARK_NAME-SMC_BINARY_TYPE) +#include SMC_BINARY static dif_pinmux_t pinmux; static dif_smc_ctrl_t smc_ctrl;
diff --git a/benchmarks/benchmarks.bzl b/benchmarks/benchmarks.bzl index f02e544..3414e7d 100644 --- a/benchmarks/benchmarks.bzl +++ b/benchmarks/benchmarks.bzl
@@ -23,53 +23,67 @@ iterations, test_data = None, profile = False, + kelvin_binary_info = None, + benchmark_path = "benchmarks", hw_test_size = "medium", hw_test_tags = [], iss_test_size = "small", iss_test_tags = [], **kwargs): - kelvin_headers = ["@kelvin_sw//benchmarks:benchmark.h"] - model_header_name = "{}_model".format(name) - bin_to_c_file( - name = model_header_name, - srcs = [model], - var_name = "g_benchmark_model_data", - ) - kelvin_headers.append(model_header_name) - - if test_data: - test_data_header_name = "{}_test_data".format(name) - bin_to_c_file( - name = test_data_header_name, - srcs = [test_data], - var_name = "g_benchmark_test_data", + if kelvin_binary_info: + kelvin_test( + name = kelvin_binary_info['name'], + srcs = kelvin_binary_info['srcs'], + hdrs = kelvin_binary_info['hdrs'], + copts = kelvin_binary_info['copts'], + deps = kelvin_binary_info['deps'], + hw_test_size = "medium", + iss_test_size = "medium", ) - kelvin_headers.append(test_data_header_name) + else: + kelvin_headers = ["@kelvin_sw//benchmarks:benchmark.h"] + model_header_name = "{}_model".format(name) + bin_to_c_file( + name = model_header_name, + srcs = [model], + var_name = "g_benchmark_model_data", + ) + kelvin_headers.append(model_header_name) - # Test to run in simulator and MPACT. - kelvin_test( - name = "{}".format(name), - srcs = ["@kelvin_sw//benchmarks:benchmark_kelvin.cc"], - hdrs = kelvin_headers, - copts = [ - "-DITERATIONS={}".format(iterations), - "-DBENCHMARK_NAME={}".format(name), - "-DTEST_DATA={}".format(1 if test_data else 0), - "-DPROFILE={}".format(1 if profile else 0), - ], - deps = [ - "@kelvin_sw//crt", - "@kelvin_sw//benchmarks:benchmark_header", - "@kelvin_sw//benchmarks:cycle_count", - "@tflite-micro//tensorflow/lite/micro:micro_framework", - "@tflite-micro//tensorflow/lite/micro:system_setup", - ], - hw_test_size = hw_test_size, - hw_test_tags = hw_test_tags, - iss_test_size = iss_test_size, - iss_test_tags = iss_test_tags, - ) + if test_data: + test_data_header_name = "{}_test_data".format(name) + bin_to_c_file( + name = test_data_header_name, + srcs = [test_data], + var_name = "g_benchmark_test_data", + ) + kelvin_headers.append(test_data_header_name) + + # Test to run in simulator and MPACT. + kelvin_test( + name = "{}".format(name), + srcs = ["@kelvin_sw//benchmarks:benchmark_kelvin.cc"], + hdrs = kelvin_headers, + copts = [ + "-DITERATIONS={}".format(iterations), + "-DBENCHMARK_NAME={}".format(name), + "-DTEST_DATA={}".format(1 if test_data else 0), + "-DPROFILE={}".format(1 if profile else 0), + "-DBENCHMARK_PATH={}".format(benchmark_path), + ], + deps = [ + "@kelvin_sw//crt", + "@kelvin_sw//benchmarks:benchmark_header", + "@kelvin_sw//benchmarks:cycle_count", + "@tflite-micro//tensorflow/lite/micro:micro_framework", + "@tflite-micro//tensorflow/lite/micro:system_setup", + ], + hw_test_size = hw_test_size, + hw_test_tags = hw_test_tags, + iss_test_size = iss_test_size, + iss_test_tags = iss_test_tags, + ) def kelvin_benchmark_fpga( name, @@ -77,6 +91,8 @@ iterations, test_data = None, profile = False, + kelvin_binary_info = None, + benchmark_path = "benchmarks", **kwargs): _kelvin_benchmark_device( name = name, @@ -85,6 +101,8 @@ iterations = iterations, test_data = test_data, profile = profile, + kelvin_binary_info = kelvin_binary_info, + benchmark_path = benchmark_path, **kwargs, ) @@ -94,6 +112,8 @@ iterations, test_data = None, profile = False, + kelvin_binary_info = None, + benchmark_path = "benchmarks", **kwargs): _kelvin_benchmark_device( @@ -103,6 +123,8 @@ iterations = iterations, test_data = test_data, profile = profile, + kelvin_binary_info = kelvin_binary_info, + benchmark_path = benchmark_path, **kwargs, ) @@ -112,6 +134,8 @@ iterations, test_data = None, profile = False, + kelvin_binary_info = None, + benchmark_path = "benchmarks", **kwargs): kelvin_benchmark_asic( @@ -120,6 +144,8 @@ iterations = iterations, test_data = test_data, profile = profile, + kelvin_binary_info = kelvin_binary_info, + benchmark_path = benchmark_path, **kwargs, ) @@ -129,6 +155,8 @@ iterations = iterations, test_data = test_data, profile = profile, + kelvin_binary_info = kelvin_binary_info, + benchmark_path = benchmark_path, **kwargs, ) @@ -149,6 +177,8 @@ iterations, test_data = None, profile = False, + kelvin_binary_info = None, + benchmark_path = "benchmarks", **kwargs): # Creation of binaries for running on FPGA @@ -187,7 +217,10 @@ "{}-smc_bin.h".format(name), "@kelvin_sw//benchmarks:benchmark.h", ], - copts = ["-DBENCHMARK_NAME={}".format(name)], + copts = [ + "-DBENCHMARK_NAME={}".format(name), + "-DBENCHMARK_PATH={}".format(benchmark_path), + ], per_device_deps = { device_type: device_deps("secure_core").get(device_type), }, @@ -202,43 +235,54 @@ ], ) - kelvin_headers = ["@kelvin_sw//benchmarks:benchmark.h"] - model_header_name = "{}_model".format(name) - bin_to_c_file( - name = "{}_model".format(name), - srcs = [model], - var_name = "g_benchmark_model_data", - ) - kelvin_headers.append(model_header_name) - - if test_data: - test_data_header_name = "{}_test_data".format(name) - bin_to_c_file( - name = test_data_header_name, - srcs = [test_data], - var_name = "g_benchmark_test_data", + # If provided Kelvin binary info, use that instead of the standard + if kelvin_binary_info: + kelvin_binary( + name = "{}_kelvin".format(name), + srcs = kelvin_binary_info['srcs'], + copts = kelvin_binary_info['copts'], + hdrs = kelvin_binary_info['hdrs'], + deps = kelvin_binary_info['deps'], ) - kelvin_headers.append(test_data_header_name) + else: + kelvin_headers = ["@kelvin_sw//benchmarks:benchmark.h"] + model_header_name = "{}_model".format(name) + bin_to_c_file( + name = "{}_model".format(name), + srcs = [model], + var_name = "g_benchmark_model_data", + ) + kelvin_headers.append(model_header_name) - kelvin_binary( - name = "{}_kelvin".format(name), - srcs = [ - "@kelvin_sw//benchmarks:benchmark_kelvin.cc", - ], - copts = [ - "-DITERATIONS={}".format(iterations), - "-DBENCHMARK_NAME={}".format(name), - "-DTEST_DATA={}".format(1 if test_data else 0), - "-DPROFILE={}".format(1 if profile else 0), - ], - hdrs = kelvin_headers, - deps = [ - "@kelvin_sw//benchmarks:benchmark_header", - "@kelvin_sw//benchmarks:cycle_count", - "@tflite-micro//tensorflow/lite/micro:micro_framework", - "@tflite-micro//tensorflow/lite/micro:system_setup", - ], - ) + if test_data: + test_data_header_name = "{}_test_data".format(name) + bin_to_c_file( + name = test_data_header_name, + srcs = [test_data], + var_name = "g_benchmark_test_data", + ) + kelvin_headers.append(test_data_header_name) + + kelvin_binary( + name = "{}_kelvin".format(name), + srcs = [ + "@kelvin_sw//benchmarks:benchmark_kelvin.cc", + ], + copts = [ + "-DITERATIONS={}".format(iterations), + "-DBENCHMARK_NAME={}".format(name), + "-DTEST_DATA={}".format(1 if test_data else 0), + "-DPROFILE={}".format(1 if profile else 0), + "-DBENCHMARK_PATH={}".format(benchmark_path), + ], + hdrs = kelvin_headers, + deps = [ + "@kelvin_sw//benchmarks:benchmark_header", + "@kelvin_sw//benchmarks:cycle_count", + "@tflite-micro//tensorflow/lite/micro:micro_framework", + "@tflite-micro//tensorflow/lite/micro:system_setup", + ], + ) matcha_extflash_tar( name = "{}_extflash".format(name),