diff --git a/applications/message_process/include/message_process.hpp b/applications/message_process/include/message_process.hpp
index 602c2a4..96da30e 100644
--- a/applications/message_process/include/message_process.hpp
+++ b/applications/message_process/include/message_process.hpp
@@ -96,7 +96,13 @@
     void run();
     bool handleMessage();
     void sendPong();
-    void sendInferenceRsp(uint64_t userArg, std::vector<InferenceProcess::DataPtr> &ofm, bool failed);
+    void sendInferenceRsp(uint64_t userArg,
+                          std::vector<InferenceProcess::DataPtr> &ofm,
+                          bool failed,
+                          std::vector<uint8_t> &pmuEventConfig,
+                          uint32_t pmuCycleCounterEnable,
+                          std::vector<uint32_t> &pmuEventCount,
+                          uint64_t pmuCycleCounterCount);
 
 private:
     QueueImpl queueIn;
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 @@
 
         vector<DataPtr> expectedOutput;
 
-        InferenceJob job("job", networkModel, ifm, ofm, expectedOutput, -1);
+        vector<uint8_t> 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 @@
     mailbox.sendMessage();
 }
 
-void MessageProcess::sendInferenceRsp(uint64_t userArg, vector<DataPtr> &ofm, bool failed) {
-    ethosu_core_inference_rsp rsp;
+void MessageProcess::sendInferenceRsp(uint64_t userArg,
+                                      vector<DataPtr> &ofm,
+                                      bool failed,
+                                      vector<uint8_t> &pmuEventConfig,
+                                      uint32_t pmuCycleCounterEnable,
+                                      vector<uint32_t> &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 @@
         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,
