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),