From ffe845d4aad5a389e295bab5f78c8088ef187ea0 Mon Sep 17 00:00:00 2001 From: Bhavik Patel Date: Mon, 16 Nov 2020 12:13:56 +0100 Subject: MLBEDSW-3269 Add pmu counters for inference_process Change-Id: I6594acc228fe8048f56cb96ac7846a87491eed38 --- .../message_process/src/message_process.cc | 40 +++++++++++++++++++--- 1 file changed, 36 insertions(+), 4 deletions(-) (limited to 'applications/message_process/src') diff --git a/applications/message_process/src/message_process.cc b/applications/message_process/src/message_process.cc index c890399..8a8eec7 100644 --- a/applications/message_process/src/message_process.cc +++ b/applications/message_process/src/message_process.cc @@ -240,13 +240,25 @@ bool MessageProcess::handleMessage() { vector expectedOutput; - InferenceJob job("job", networkModel, ifm, ofm, expectedOutput, -1); + vector pmuEventConfig; + for (uint32_t i = 0; i < ETHOSU_CORE_PMU_MAX; i++) { + pmuEventConfig[i] = req.pmu_event_config[i]; + } + + InferenceJob job( + "job", networkModel, ifm, ofm, expectedOutput, -1, pmuEventConfig, req.pmu_cycle_counter_enable); job.invalidate(); bool failed = inferenceProcess.runJob(job); job.clean(); - sendInferenceRsp(req.user_arg, job.output, failed); + sendInferenceRsp(req.user_arg, + job.output, + failed, + job.pmuEventConfig, + job.pmuCycleCounterEnable, + job.pmuEventCount, + job.pmuCycleCounterCount); break; } default: { @@ -266,8 +278,19 @@ void MessageProcess::sendPong() { mailbox.sendMessage(); } -void MessageProcess::sendInferenceRsp(uint64_t userArg, vector &ofm, bool failed) { - ethosu_core_inference_rsp rsp; +void MessageProcess::sendInferenceRsp(uint64_t userArg, + vector &ofm, + bool failed, + vector &pmuEventConfig, + uint32_t pmuCycleCounterEnable, + vector &pmuEventCount, + uint64_t pmuCycleCounterCount) { + ethosu_core_inference_rsp rsp = { + .pmu_event_count = + { + 0, + }, + }; rsp.user_arg = userArg; rsp.ofm_count = ofm.size(); @@ -277,6 +300,15 @@ void MessageProcess::sendInferenceRsp(uint64_t userArg, vector &ofm, bo rsp.ofm_size[i] = ofm[i].size; } + for (size_t i = 0; i < pmuEventConfig.size(); i++) { + rsp.pmu_event_config[i] = pmuEventConfig[i]; + } + rsp.pmu_cycle_counter_enable = pmuCycleCounterEnable; + for (size_t i = 0; i < pmuEventCount.size(); i++) { + rsp.pmu_event_count[i] = pmuEventCount[i]; + } + rsp.pmu_cycle_counter_count = pmuCycleCounterCount; + printf("Sending inference response. userArg=0x%" PRIx64 ", ofm_count=%" PRIu32 ", status=%" PRIu32 "\n", rsp.user_arg, rsp.ofm_count, -- cgit v1.2.1