From ea6803e7d1e60b44b18d30edb1a1201e0b6b9a14 Mon Sep 17 00:00:00 2001 From: William Isaksson Date: Mon, 9 Dec 2024 21:17:16 +0100 Subject: [PATCH] MLBEDSW-10098: Add scheduled op tracking to debugDB This patch adds trackability for scheduled ops. Change-Id: I93181468b2459150026785f49ef128ec72998a5d Signed-off-by: William Isaksson --- ethosu/regor/compiler/compiler.cpp | 11 ++++--- ethosu/regor/compiler/graph_optimiser.cpp | 33 +++++++------------- ethosu/regor/compiler/graph_optimiser_db.hpp | 6 ++-- 3 files changed, 21 insertions(+), 29 deletions(-) diff --git a/ethosu/regor/compiler/compiler.cpp b/ethosu/regor/compiler/compiler.cpp index 4ef54232..134a6a14 100644 --- a/ethosu/regor/compiler/compiler.cpp +++ b/ethosu/regor/compiler/compiler.cpp @@ -361,12 +361,11 @@ void Compiler::RecordNPUOp(const NPUOperation &npuOp, const CmdRanges &cmdRanges opMap.emplace(scheduleOp->Uid(), scheduleOp.get()); // Add subOps to DB - std::vector subOpKeys; for ( auto &subOp : scheduleOp->SubOps() ) { - subOpKeys.push_back(subOp->_srcKey); + opMap.emplace(subOp->Uid(), subOp.get()); + _optDb->AddSubOp(scheduleOp->Uid(), subOp->Uid()); } - _optDb->AddSubOps(scheduleOp->_srcKey, subOpKeys); } // Record command stream op ranges for this NPU op @@ -377,7 +376,11 @@ void Compiler::RecordNPUOp(const NPUOperation &npuOp, const CmdRanges &cmdRanges if ( opMap.try_get(std::get<0>(cmd), scheduleOp) ) { assert(scheduleOp); - _optDb->AddCommand(scheduleOp->_srcKey, streamId, std::get<2>(cmd) - 1); + _optDb->AddCommand(scheduleOp->_srcKey, streamId, std::get<2>(cmd) - 1, std::get<0>(cmd)); + } + else + { + _optDb->AddCommand(nullptr, streamId, std::get<2>(cmd) - 1, std::get<0>(cmd)); } } } diff --git a/ethosu/regor/compiler/graph_optimiser.cpp b/ethosu/regor/compiler/graph_optimiser.cpp index 39b60490..c7e0d665 100644 --- a/ethosu/regor/compiler/graph_optimiser.cpp +++ b/ethosu/regor/compiler/graph_optimiser.cpp @@ -243,7 +243,7 @@ OptimiserDatabase::OptimiserDatabase(Database *db) : _db(db) _db->AddColumns(_sourceTable, {"operator", "kernel_w", "kernel_h", "ofm_w", "ofm_h", "ofm_d", "ext_key"}); _db->AddColumns(_optTable, {"source_id", "operator", "kernel_w", "kernel_h", "ofm_w", "ofm_h", "ofm_d"}); _db->AddColumns(_groupTable, {"group_id"}); - _db->AddColumns(_cmdTable, {"offset", "cmdstream_id", "optimised_id"}); + _db->AddColumns(_cmdTable, {"offset", "cmdstream_id", "optimised_id", "scheduled_id"}); } Database *OptimiserDatabase::Get() @@ -332,35 +332,24 @@ void OptimiserDatabase::AddOptimised(const void *from, const Operation *to) o ? std::to_string(o.Width()) : "", o ? std::to_string(o.Height()) : "", o ? std::to_string(o.Depth()) : ""}); } -void OptimiserDatabase::AddSubOps(const void *primaryKey, const std::vector &subOpKeys) +void OptimiserDatabase::AddSubOp(UniqueId primaryUid, UniqueId subOpUid) { - if ( subOpKeys.empty() ) - { - return; - } + assert(primaryUid > 0 && subOpUid > 0); - assert(primaryKey); - auto primaryPos = _optimised.find(primaryKey); - assert(primaryPos != _optimised.end()); - int primaryOptId = std::get<1>(primaryPos->second); - _db->AddRow(_groupTable, primaryOptId, {std::to_string(primaryOptId)}); - for ( auto subOpKey : subOpKeys ) - { - assert(subOpKey); - auto subOpPos = _optimised.find(subOpKey); - assert(subOpPos != _optimised.end()); - int subOpOptId = std::get<1>(subOpPos->second); - _db->AddRow(_groupTable, subOpOptId, {std::to_string(primaryOptId)}); - } + _db->AddRow(_groupTable, subOpUid, {std::to_string(primaryUid)}); } -void OptimiserDatabase::AddCommand(void *key, int stream, int cmdIndex) +void OptimiserDatabase::AddCommand(void *key, int stream, int cmdIndex, UniqueId schedId) { auto pos = _optimised.find(key); - if ( pos != _optimised.end() ) + if ( key && pos != _optimised.end() ) { int optId = std::get<1>(pos->second); - _db->AddRow(_cmdTable, 0, {std::to_string(4 * cmdIndex), std::to_string(stream), std::to_string(optId)}); + _db->AddRow(_cmdTable, 0, {std::to_string(4 * cmdIndex), std::to_string(stream), std::to_string(optId), std::to_string(schedId)}); + } + else + { + _db->AddRow(_cmdTable, 0, {std::to_string(4 * cmdIndex), std::to_string(stream), "0", std::to_string(schedId)}); } } diff --git a/ethosu/regor/compiler/graph_optimiser_db.hpp b/ethosu/regor/compiler/graph_optimiser_db.hpp index a9345b48..da057722 100644 --- a/ethosu/regor/compiler/graph_optimiser_db.hpp +++ b/ethosu/regor/compiler/graph_optimiser_db.hpp @@ -1,5 +1,5 @@ // -// SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its affiliates +// SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its affiliates // // SPDX-License-Identifier: Apache-2.0 // @@ -54,8 +54,8 @@ public: int OptimisedId(const void *op); int SourceOp(const Operation *op, int ext_key = -1); void AddOptimised(const void *from, const Operation *to); - void AddSubOps(const void *primaryKey, const std::vector &subOpKeys); - void AddCommand(void *key, int stream, int cmdIndex); + void AddSubOp(UniqueId primaryUid, UniqueId subOpUid); + void AddCommand(void *key, int stream, int cmdIndex, UniqueId id); int AddStream(); }; -- GitLab