Merge changes from topic "nexus-benchmark" * changes: Update benchmark device rule to support tags Format benchmarks.bzl
diff --git a/benchmarks/benchmarks.bzl b/benchmarks/benchmarks.bzl index d49ba07..c941f22 100644 --- a/benchmarks/benchmarks.bzl +++ b/benchmarks/benchmarks.bzl
@@ -14,8 +14,8 @@ """Rules to run Kelvin benchmarks""" -load("@kelvin_sw//build_tools/bazel:kelvin.bzl","kelvin_binary", "kelvin_test", "generate_cc_arrays") -load("@matcha//rules:matcha.bzl", "bin_to_c_file", "matcha_extflash_tar", "sec_flash_binary", "smc_flash_binary", "device_deps") +load("@kelvin_sw//build_tools/bazel:kelvin.bzl", "generate_cc_arrays", "kelvin_binary", "kelvin_test") +load("@matcha//rules:matcha.bzl", "bin_to_c_file", "device_deps", "matcha_extflash_tar", "sec_flash_binary", "smc_flash_binary") def kelvin_benchmark_simulator( name, @@ -30,72 +30,71 @@ hw_test_tags = [], iss_test_size = "small", iss_test_tags = [], - arena_size_bytes = 1536 * 1024, # 1.5MB + arena_size_bytes = 1536 * 1024, # 1.5MB **kwargs): + 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", + ) + 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) - 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", - ) - else: - kelvin_headers = ["@kelvin_sw//benchmarks:benchmark.h"] - model_header_name = "{}_model".format(name) + if test_data_input: + input_header_name = "{}_input".format(name) bin_to_c_file( - name = model_header_name, - srcs = [model], - var_name = "g_benchmark_model_data", + name = input_header_name, + srcs = [test_data_input], + var_name = "g_benchmark_input", ) - kelvin_headers.append(model_header_name) - - if test_data_input: - input_header_name = "{}_input".format(name) - bin_to_c_file( - name = input_header_name, - srcs = [test_data_input], - var_name = "g_benchmark_input", - ) - kelvin_headers.append(input_header_name) - if test_data_output: - output_header_name = "{}_output".format(name) - bin_to_c_file( - name = output_header_name, - srcs = [test_data_output], - var_name = "g_benchmark_output", - ) - kelvin_headers.append(output_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_INPUT={}".format(1 if test_data_input else 0), - "-DTEST_DATA_OUTPUT={}".format(1 if test_data_output else 0), - "-DPROFILE={}".format(1 if profile else 0), - "-DBENCHMARK_PATH={}".format(benchmark_path), - "-DARENA_SIZE_BYTES={}".format(arena_size_bytes), - ], - 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, + kelvin_headers.append(input_header_name) + if test_data_output: + output_header_name = "{}_output".format(name) + bin_to_c_file( + name = output_header_name, + srcs = [test_data_output], + var_name = "g_benchmark_output", ) + kelvin_headers.append(output_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_INPUT={}".format(1 if test_data_input else 0), + "-DTEST_DATA_OUTPUT={}".format(1 if test_data_output else 0), + "-DPROFILE={}".format(1 if profile else 0), + "-DBENCHMARK_PATH={}".format(benchmark_path), + "-DARENA_SIZE_BYTES={}".format(arena_size_bytes), + ], + 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, @@ -106,17 +105,17 @@ kelvin_binary_info = None, benchmark_path = "benchmarks", **kwargs): - _kelvin_benchmark_device( - name = name, - model = model, - device_type = "fpga_nexus", - iterations = iterations, - test_data = test_data, - profile = profile, - kelvin_binary_info = kelvin_binary_info, - benchmark_path = benchmark_path, - **kwargs, - ) + _kelvin_benchmark_device( + name = name, + model = model, + device_type = "fpga_nexus", + iterations = iterations, + test_data = test_data, + profile = profile, + kelvin_binary_info = kelvin_binary_info, + benchmark_path = benchmark_path, + **kwargs + ) def kelvin_benchmark_asic( name, @@ -127,18 +126,17 @@ kelvin_binary_info = None, benchmark_path = "benchmarks", **kwargs): - - _kelvin_benchmark_device( - name = name, - model = model, - device_type = "asic", - iterations = iterations, - test_data = test_data, - profile = profile, - kelvin_binary_info = kelvin_binary_info, - benchmark_path = benchmark_path, - **kwargs, - ) + _kelvin_benchmark_device( + name = name, + model = model, + device_type = "asic", + iterations = iterations, + test_data = test_data, + profile = profile, + kelvin_binary_info = kelvin_binary_info, + benchmark_path = benchmark_path, + **kwargs + ) def kelvin_benchmark_devices( name, @@ -149,38 +147,37 @@ kelvin_binary_info = None, benchmark_path = "benchmarks", **kwargs): + kelvin_benchmark_asic( + name = "{}_asic".format(name), + model = model, + iterations = iterations, + test_data = test_data, + profile = profile, + kelvin_binary_info = kelvin_binary_info, + benchmark_path = benchmark_path, + **kwargs + ) - kelvin_benchmark_asic( - name = "{}_asic".format(name), - model = model, - iterations = iterations, - test_data = test_data, - profile = profile, - kelvin_binary_info = kelvin_binary_info, - benchmark_path = benchmark_path, - **kwargs, - ) + kelvin_benchmark_fpga( + name = "{}_fpga".format(name), + model = model, + iterations = iterations, + test_data = test_data, + profile = profile, + kelvin_binary_info = kelvin_binary_info, + benchmark_path = benchmark_path, + **kwargs + ) - kelvin_benchmark_fpga( - name = "{}_fpga".format(name), - model = model, - iterations = iterations, - test_data = test_data, - profile = profile, - kelvin_binary_info = kelvin_binary_info, - benchmark_path = benchmark_path, - **kwargs, - ) - - # Create a filegroup to allow building all devices - native.filegroup( - name = "{}".format(name), - srcs = [ - ":{}_asic".format(name), - ":{}_fpga".format(name), - ], - output_group = "device_files", - ) + # Create a filegroup to allow building all devices + native.filegroup( + name = "{}".format(name), + srcs = [ + ":{}_asic".format(name), + ":{}_fpga".format(name), + ], + output_group = "device_files", + ) def _kelvin_benchmark_device( name, @@ -192,136 +189,137 @@ profile = False, kelvin_binary_info = None, benchmark_path = "benchmarks", - arena_size_bytes = 1536 * 1024, # 1.5MB + arena_size_bytes = 1536 * 1024, # 1.5MB + tags = [], **kwargs): + # Creation of binaries for running on FPGA + smc_flash_binary( + name = "{}_smc".format(name), + srcs = [ + "@kelvin_sw//benchmarks:benchmark_smc.c", + "@kelvin_sw//benchmarks:benchmark.h", + ], + copts = ["-DBENCHMARK_NAME={}".format(name)], + per_device_deps = { + device_type: device_deps("smc").get(device_type), + }, + deps = [ + "@matcha//sw/device/lib/dif:ml_top", + "@matcha//sw/device/tests:test_lib_smc", + "@matcha//sw/device/lib/dif:i2s", + "@matcha//sw/device/lib/dif:tlul_mailbox", + "@kelvin_sw//benchmarks:benchmark_header", + "@kelvin_sw//benchmarks:cycle_count", + "@lowrisc_opentitan//sw/device/lib/dif:rv_plic", + "@lowrisc_opentitan//sw/device/lib/dif:rv_timer", + ], + ) - # Creation of binaries for running on FPGA - smc_flash_binary( - name = "{}_smc".format(name), - srcs = [ - "@kelvin_sw//benchmarks:benchmark_smc.c", - "@kelvin_sw//benchmarks:benchmark.h", - ], - copts = ["-DBENCHMARK_NAME={}".format(name)], - per_device_deps = { - device_type: device_deps("smc").get(device_type), - }, - deps = [ - "@matcha//sw/device/lib/dif:ml_top", - "@matcha//sw/device/tests:test_lib_smc", - "@matcha//sw/device/lib/dif:i2s", - "@matcha//sw/device/lib/dif:tlul_mailbox", - "@kelvin_sw//benchmarks:benchmark_header", - "@kelvin_sw//benchmarks:cycle_count", - "@lowrisc_opentitan//sw/device/lib/dif:rv_plic", - "@lowrisc_opentitan//sw/device/lib/dif:rv_timer", - ], + bin_to_c_file( + name = "{}-smc_bin".format(name), + srcs = ["{}_smc_{}_bin".format(name, device_type)], + var_name = "smc_bin", + ) + + sec_flash_binary( + name = "{}_sec".format(name), + srcs = [ + "@kelvin_sw//benchmarks:benchmark_sec.c", + "{}-smc_bin.h".format(name), + "@kelvin_sw//benchmarks:benchmark.h", + ], + copts = [ + "-DBENCHMARK_NAME={}".format(name), + "-DBENCHMARK_PATH={}".format(benchmark_path), + ], + per_device_deps = { + device_type: device_deps("secure_core").get(device_type), + }, + deps = [ + "@matcha//sw/device/lib:spi_flash", + "@matcha//sw/device/tests:test_lib", + "@matcha//sw/device/lib/dif:smc_ctrl", + "@matcha//sw/device/lib/dif:tlul_mailbox", + "@kelvin_sw//benchmarks:benchmark_header", + "@kelvin_sw//benchmarks:cycle_count", + "@lowrisc_opentitan//sw/device/lib/dif:rv_plic", + ], + ) + + # 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"], ) - + else: + kelvin_headers = ["@kelvin_sw//benchmarks:benchmark.h"] + model_header_name = "{}_model".format(name) bin_to_c_file( - name = "{}-smc_bin".format(name), - srcs = ["{}_smc_{}_bin".format(name, device_type)], - var_name = "smc_bin", + name = "{}_model".format(name), + srcs = [model], + var_name = "g_benchmark_model_data", ) + kelvin_headers.append(model_header_name) - sec_flash_binary( - name = "{}_sec".format(name), + if test_data_input: + input_header_name = "{}_input".format(name) + bin_to_c_file( + name = input_header_name, + srcs = [test_data_input], + var_name = "g_benchmark_input", + ) + kelvin_headers.append(input_header_name) + if test_data_output: + output_header_name = "{}_output".format(name) + bin_to_c_file( + name = output_header_name, + srcs = [test_data_output], + var_name = "g_benchmark_output", + ) + kelvin_headers.append(output_header_name) + + kelvin_binary( + name = "{}_kelvin".format(name), srcs = [ - "@kelvin_sw//benchmarks:benchmark_sec.c", - "{}-smc_bin.h".format(name), - "@kelvin_sw//benchmarks:benchmark.h", + "@kelvin_sw//benchmarks:benchmark_kelvin.cc", ], copts = [ + "-DITERATIONS={}".format(iterations), "-DBENCHMARK_NAME={}".format(name), + "-DTEST_DATA_INPUT={}".format(1 if test_data_input else 0), + "-DTEST_DATA_OUTPUT={}".format(1 if test_data_output else 0), + "-DPROFILE={}".format(1 if profile else 0), "-DBENCHMARK_PATH={}".format(benchmark_path), + "-DARENA_SIZE_BYTES={}".format(arena_size_bytes), ], - per_device_deps = { - device_type: device_deps("secure_core").get(device_type), - }, + hdrs = kelvin_headers, deps = [ - "@matcha//sw/device/lib:spi_flash", - "@matcha//sw/device/tests:test_lib", - "@matcha//sw/device/lib/dif:smc_ctrl", - "@matcha//sw/device/lib/dif:tlul_mailbox", "@kelvin_sw//benchmarks:benchmark_header", "@kelvin_sw//benchmarks:cycle_count", - "@lowrisc_opentitan//sw/device/lib/dif:rv_plic", + "@tflite-micro//tensorflow/lite/micro:micro_framework", + "@tflite-micro//tensorflow/lite/micro:system_setup", ], ) - # 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'], - ) - 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) + matcha_extflash_tar( + name = "{}_extflash".format(name), + kelvin_binary = ":{}_kelvin.bin".format(name), + sc_binary = ":{}_sec_{}_bin".format(name, device_type), + tags = tags, + ) - if test_data_input: - input_header_name = "{}_input".format(name) - bin_to_c_file( - name = input_header_name, - srcs = [test_data_input], - var_name = "g_benchmark_input", - ) - kelvin_headers.append(input_header_name) - if test_data_output: - output_header_name = "{}_output".format(name) - bin_to_c_file( - name = output_header_name, - srcs = [test_data_output], - var_name = "g_benchmark_output", - ) - kelvin_headers.append(output_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_INPUT={}".format(1 if test_data_input else 0), - "-DTEST_DATA_OUTPUT={}".format(1 if test_data_output else 0), - "-DPROFILE={}".format(1 if profile else 0), - "-DBENCHMARK_PATH={}".format(benchmark_path), - "-DARENA_SIZE_BYTES={}".format(arena_size_bytes), - ], - 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), - kelvin_binary = ":{}_kelvin.bin".format(name), - sc_binary = ":{}_sec_{}_bin".format(name, device_type), - ) - - # Create a filegroup with all device targets. - native.filegroup( - name = "{}".format(name), - srcs = [ - ":{}_sec".format(name), - ":{}-smc_bin".format(name), - ":{}_kelvin".format(name), - ":{}_extflash".format(name), - ], - output_group = "{}_files".format(device_type), - ) + # Create a filegroup with all device targets. + native.filegroup( + name = "{}".format(name), + srcs = [ + ":{}_sec".format(name), + ":{}-smc_bin".format(name), + ":{}_kelvin".format(name), + ":{}_extflash".format(name), + ], + output_group = "{}_files".format(device_type), + )