diff options
Diffstat (limited to 'applications/inference_process')
-rw-r--r-- | applications/inference_process/include/inference_process.hpp | 6 | ||||
-rw-r--r-- | applications/inference_process/src/inference_process.cc | 46 |
2 files changed, 52 insertions, 0 deletions
diff --git a/applications/inference_process/include/inference_process.hpp b/applications/inference_process/include/inference_process.hpp index 53b9331..ec682d1 100644 --- a/applications/inference_process/include/inference_process.hpp +++ b/applications/inference_process/include/inference_process.hpp @@ -29,6 +29,9 @@ struct DataPtr { size_t size; DataPtr(void *data = nullptr, size_t size = 0); + + void invalidate(); + void clean(); }; struct InferenceJob { @@ -46,6 +49,9 @@ struct InferenceJob { const std::vector<DataPtr> &output, const std::vector<DataPtr> &expectedOutput, size_t numBytesToPrint); + + void invalidate(); + void clean(); }; class InferenceProcess { diff --git a/applications/inference_process/src/inference_process.cc b/applications/inference_process/src/inference_process.cc index 7743f8c..61db73d 100644 --- a/applications/inference_process/src/inference_process.cc +++ b/applications/inference_process/src/inference_process.cc @@ -87,6 +87,20 @@ bool copyOutput(const TfLiteTensor &src, InferenceProcess::DataPtr &dst) { namespace InferenceProcess { DataPtr::DataPtr(void *_data, size_t _size) : data(_data), size(_size) {} +void DataPtr::invalidate() { +#if defined(__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + printf("Invalidate. data=%p, size=%zu\n", data, size); + SCB_InvalidateDCache_by_Addr(reinterpret_cast<uint32_t *>(data), size); +#endif +} + +void DataPtr::clean() { +#if defined(__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + printf("Clean. data=%p, size=%zu\n", data, size); + SCB_CleanDCache_by_Addr(reinterpret_cast<uint32_t *>(data), size); +#endif +} + InferenceJob::InferenceJob() : numBytesToPrint(0) {} InferenceJob::InferenceJob(const string &_name, @@ -99,6 +113,38 @@ InferenceJob::InferenceJob(const string &_name, networkModel(_networkModel), input(_input), output(_output), expectedOutput(_expectedOutput), numBytesToPrint(_numBytesToPrint) {} +void InferenceJob::invalidate() { + networkModel.invalidate(); + + for (auto &it : input) { + it.invalidate(); + } + + for (auto &it : output) { + it.invalidate(); + } + + for (auto &it : expectedOutput) { + it.invalidate(); + } +} + +void InferenceJob::clean() { + networkModel.clean(); + + for (auto &it : input) { + it.clean(); + } + + for (auto &it : output) { + it.clean(); + } + + for (auto &it : expectedOutput) { + it.clean(); + } +} + InferenceProcess::InferenceProcess() : lock(0) {} // NOTE: Adding code for get_lock & free_lock with some corrections from |