From ce9ebeddf5a2c207a1527fd9a8558f5d703eec51 Mon Sep 17 00:00:00 2001 From: lucylq Date: Wed, 9 Jul 2025 13:45:47 -0700 Subject: [PATCH] [BE] Clean pte_data_map Pull Request resolved: https://github.com/pytorch/executorch/pull/12255 - Add maybe_unused to size test. - Clean up pte_data_map. This mostly involves removing namespace executorch::ET_RUNTIME_NAMESPACE/executorch::runtime as we're already in it. - Try to reduce some binary size from pte_data_map. Using key.size() and memcmp instead of strncmp saves 16 bytes. ghstack-source-id: 295211970 @exported-using-ghexport Differential Revision: [D77904843](https://our.internmc.facebook.com/intern/diff/D77904843/) --- runtime/executor/pte_data_map.cpp | 33 ++++++++++++++----------------- test/size_test.cpp | 4 ++-- 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/runtime/executor/pte_data_map.cpp b/runtime/executor/pte_data_map.cpp index e9b1c3460be..5fbf4be16c8 100644 --- a/runtime/executor/pte_data_map.cpp +++ b/runtime/executor/pte_data_map.cpp @@ -13,8 +13,8 @@ namespace executorch { namespace ET_RUNTIME_NAMESPACE { namespace internal { -/* static */ executorch::runtime::Result PteDataMap::create( - executorch::runtime::DataLoader* loader, +/* static */ Result PteDataMap::create( + DataLoader* loader, size_t segment_base_offset, const flatbuffers::FlatbufferNamedData* named_data, const flatbuffers::FlatbufferDataSegment* segments) { @@ -26,22 +26,22 @@ namespace internal { } ET_NODISCARD -executorch::runtime::Result -PteDataMap::get_data(executorch::aten::string_view key) const { +Result PteDataMap::get_data( + executorch::aten::string_view key) const { for (uint32_t i = 0; i < named_data_->size(); i++) { + const auto* named_data_item = named_data_->Get(i); ET_CHECK_OR_RETURN_ERROR( - named_data_->Get(i) != nullptr && named_data_->Get(i)->key() != nullptr, + named_data_item != nullptr && named_data_item->key() != nullptr, InvalidArgument, "Searching for key %.*s: NamedData at index %d is null", static_cast(key.size()), key.data(), i); - if (strncmp( - named_data_->Get(i)->key()->c_str(), - key.data(), - named_data_->Get(i)->key()->size()) == 0) { + const auto* named_data_key = named_data_item->key(); + if (named_data_key->size() == key.size() && + memcmp(named_data_key->data(), key.data(), key.size()) == 0) { // Get the segment index. - size_t segment_index = named_data_->Get(i)->segment_index(); + size_t segment_index = named_data_item->segment_index(); // Get the segment offset and size. ET_CHECK_OR_RETURN_ERROR( @@ -54,7 +54,6 @@ PteDataMap::get_data(executorch::aten::string_view key) const { segments_->size()); size_t segment_offset = segments_->Get(segment_index)->offset(); size_t segment_size = segments_->Get(segment_index)->size(); - return loader_->load( /*offset=*/segment_base_offset_ + segment_offset, segment_size, @@ -64,13 +63,11 @@ PteDataMap::get_data(executorch::aten::string_view key) const { return Error::NotFound; } -ET_NODISCARD executorch::runtime::Result PteDataMap::get_num_keys() - const { +ET_NODISCARD Result PteDataMap::get_num_keys() const { return named_data_->size(); } -ET_NODISCARD executorch::runtime::Result PteDataMap::get_key( - uint32_t index) const { +ET_NODISCARD Result PteDataMap::get_key(uint32_t index) const { ET_CHECK_OR_RETURN_ERROR( index < named_data_->size(), InvalidArgument, @@ -78,13 +75,13 @@ ET_NODISCARD executorch::runtime::Result PteDataMap::get_key( named_data_->size(), index); + const auto* item = named_data_->Get(index); ET_CHECK_OR_RETURN_ERROR( - named_data_->Get(index) != nullptr && - named_data_->Get(index)->key() != nullptr, + item != nullptr && item->key() != nullptr, InvalidArgument, "NamedData at index %u is null", index); - return named_data_->Get(index)->key()->c_str(); + return item->key()->c_str(); } } // namespace internal diff --git a/test/size_test.cpp b/test/size_test.cpp index 8f67368f64e..e28c1c5277a 100644 --- a/test/size_test.cpp +++ b/test/size_test.cpp @@ -95,8 +95,8 @@ int main(int argc, char** argv) { // It assumes the outputs are all tensors. for (const auto i : c10::irange(method->outputs_size())) { auto output_tensor = output_list[i].toTensor(); - [[maybe_unused]] auto data_output = output_tensor.const_data_ptr(); - for (const auto j : c10::irange(output_tensor.numel())) { + ET_UNUSED auto data_output = output_tensor.const_data_ptr(); + for (ET_UNUSED const auto j : c10::irange(output_tensor.numel())) { ET_LOG(Info, "%f", data_output[j]); } }