aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNir Ekhauz <nir.ekhauz@arm.com>2021-06-27 11:20:24 +0300
committerNir Ekhauz <nir.ekhauz@arm.com>2021-09-01 13:44:44 +0300
commit4756bf12f9dbe6502b3831808d7e4f217586980a (patch)
treeaaa39fd7e3f2d8e15e9ca6c6880477da83643463
parentb62e944b466e41dce4495162210ef3af59dfcb29 (diff)
downloadethos-u-core-platform-4756bf12f9dbe6502b3831808d7e4f217586980a.tar.gz
run_platform.py PMU configuration
Enable configuration of up to 4 PMU counters Jira: MLBEDSW-4744 Change-Id: I08e9073d827033b3340bffd680288b1a83833d64
-rw-r--r--applications/baremetal/main.cpp26
-rwxr-xr-xscripts/run_platform.py16
-rw-r--r--targets/corstone-300/CMakeLists.txt11
3 files changed, 45 insertions, 8 deletions
diff --git a/applications/baremetal/main.cpp b/applications/baremetal/main.cpp
index 8b1bc2b..af14e20 100644
--- a/applications/baremetal/main.cpp
+++ b/applications/baremetal/main.cpp
@@ -54,16 +54,34 @@ InferenceProcess::InferenceProcess inferenceProcess(TFLuTensorArena, TENSOR_AREN
uint8_t outputData[sizeof(expectedOutputData)] __attribute__((aligned(16), section("output_data_sec")));
+#ifndef ETHOSU_PMU_EVENT_0
+#define ETHOSU_PMU_EVENT_0 ETHOSU_PMU_CYCLE
+#endif
+#ifndef ETHOSU_PMU_EVENT_1
+#define ETHOSU_PMU_EVENT_1 ETHOSU_PMU_NPU_ACTIVE
+#endif
+#ifndef ETHOSU_PMU_EVENT_2
+#define ETHOSU_PMU_EVENT_2 ETHOSU_PMU_NO_EVENT
+#endif
+#ifndef ETHOSU_PMU_EVENT_3
+#define ETHOSU_PMU_EVENT_3 ETHOSU_PMU_NO_EVENT
+#endif
+
#ifdef ETHOSU
constexpr int32_t EventComponentNo = 0x00;
namespace {
-std::vector<ethosu_pmu_event_type> pmuEventConfig{ETHOSU_PMU_CYCLE, ETHOSU_PMU_NPU_ACTIVE};
-std::vector<int32_t> eventRecMessageIds{EventID(EventLevelDetail, EventComponentNo, ETHOSU_PMU_CYCLE),
- EventID(EventLevelDetail, EventComponentNo, ETHOSU_PMU_NPU_ACTIVE)};
+std::vector<ethosu_pmu_event_type> pmuEventConfig{ethosu_pmu_event_type(ETHOSU_PMU_EVENT_0),
+ ethosu_pmu_event_type(ETHOSU_PMU_EVENT_1),
+ ethosu_pmu_event_type(ETHOSU_PMU_EVENT_2),
+ ethosu_pmu_event_type(ETHOSU_PMU_EVENT_3)};
+std::vector<int32_t> eventRecMessageIds{EventID(EventLevelDetail, EventComponentNo, ETHOSU_PMU_EVENT_0),
+ EventID(EventLevelDetail, EventComponentNo, ETHOSU_PMU_EVENT_1),
+ EventID(EventLevelDetail, EventComponentNo, ETHOSU_PMU_EVENT_2),
+ EventID(EventLevelDetail, EventComponentNo, ETHOSU_PMU_EVENT_3)};
const uint32_t delayMs = SystemCoreClock / 60ul;
struct ethosu_driver *ethosuDrv;
-EthosUMonitor ethosuMonitor(eventRecMessageIds, EthosUMonitor::Backend::EVENT_RECORDER);
+EthosUMonitor ethosuMonitor(eventRecMessageIds, EthosUMonitor::Backend::PRINTF);
} // namespace
extern "C" {
diff --git a/scripts/run_platform.py b/scripts/run_platform.py
index 93ba7cd..c0ee822 100755
--- a/scripts/run_platform.py
+++ b/scripts/run_platform.py
@@ -39,13 +39,21 @@ def run_cmd(cmd, **kwargs):
print(f"Running command: {cmd_str}")
return subprocess.run(cmd, check=True, **kwargs)
-def build_core_platform(output_folder, target, toolchain):
+
+def build_core_platform(output_folder, target, toolchain, pmu):
build_folder = output_folder/"model"/"build"
+ inner_pmu = [0, 0, 0, 0]
+ for idx in range(len(pmu)):
+ inner_pmu[idx] = pmu[idx]
cmake_cmd = ["cmake",
CORE_PLATFORM_PATH/"targets"/target,
f"-B{build_folder}",
f"-DCMAKE_TOOLCHAIN_FILE={CORE_PLATFORM_PATH/'cmake'/'toolchain'/(toolchain + '.cmake')}",
- f"-DBAREMETAL_PATH={output_folder}"]
+ f"-DBAREMETAL_PATH={output_folder}",
+ f"-DETHOSU_PMU_EVENT_0={inner_pmu[0]}",
+ f"-DETHOSU_PMU_EVENT_1={inner_pmu[1]}",
+ f"-DETHOSU_PMU_EVENT_2={inner_pmu[2]}",
+ f"-DETHOSU_PMU_EVENT_3={inner_pmu[3]}"]
run_cmd(cmake_cmd)
@@ -137,6 +145,7 @@ def main():
}
parser = argparse.ArgumentParser()
parser.add_argument("-o", "--output-folder", type=pathlib.Path, default="output", help="Output folder for build and generated files")
+ parser.add_argument("--pmu", type=int, action='append', help="PMU Event Counters")
parser.add_argument("--network-path", type=pathlib.Path, required=True, help="Path to .tflite file")
parser.add_argument("--target", choices=target_mapping, default="corstone-300", help=f"Configure target")
parser.add_argument("--toolchain", choices=["armclang", "arm-none-eabi-gcc"], default="armclang", help=f"Configure toolchain")
@@ -144,13 +153,12 @@ def main():
parser.add_argument("--custom-output", type=pathlib.Path, help="Custom expected output data for network")
args = parser.parse_args()
-
args.output_folder.mkdir(exist_ok=True)
try:
optimize_network(args.output_folder, args.network_path, target_mapping[args.target])
generate_reference_data(args.output_folder, args.network_path, args.custom_input, args.custom_output)
- build_core_platform(args.output_folder, args.target, args.toolchain)
+ build_core_platform(args.output_folder, args.target, args.toolchain, args.pmu)
run_model(args.output_folder)
except subprocess.CalledProcessError as err:
print(f"Command: '{err.cmd}' failed", file=sys.stderr)
diff --git a/targets/corstone-300/CMakeLists.txt b/targets/corstone-300/CMakeLists.txt
index 9c527fc..06469d8 100644
--- a/targets/corstone-300/CMakeLists.txt
+++ b/targets/corstone-300/CMakeLists.txt
@@ -58,6 +58,17 @@ set(ETHOSU_TARGET_NPU_CONFIG "ethos-u55-128" CACHE STRING "NPU configuration")
set(ETHOSU_TARGET_NPU_COUNT 1 CACHE INTERNAL "Number of NPUs")
set(ETHOSU_TARGET_NPU_TA_COUNT 2 CACHE INTERNAL "Number of timing adapters per NPU")
+set(ETHOSU_PMU_EVENT_0 0 CACHE STRING "PMU Event #0")
+set(ETHOSU_PMU_EVENT_1 0 CACHE STRING "PMU Event #1")
+set(ETHOSU_PMU_EVENT_2 0 CACHE STRING "PMU Event #2")
+set(ETHOSU_PMU_EVENT_3 0 CACHE STRING "PMU Event #3")
+
+target_compile_definitions(ethosu_target_common INTERFACE
+ ETHOSU_PMU_EVENT_0=${ETHOSU_PMU_EVENT_0}
+ ETHOSU_PMU_EVENT_1=${ETHOSU_PMU_EVENT_1}
+ ETHOSU_PMU_EVENT_2=${ETHOSU_PMU_EVENT_2}
+ ETHOSU_PMU_EVENT_3=${ETHOSU_PMU_EVENT_3})
+
target_compile_definitions(ethosu_target_common INTERFACE
ETHOSU_NPU_TA_COUNT=${ETHOSU_TARGET_NPU_TA_COUNT}
ETHOSU_NPU_COUNT=${ETHOSU_TARGET_NPU_COUNT})