From 452402b984fb92d278b5ccfc36b780365b632de8 Mon Sep 17 00:00:00 2001 From: Scott Wolchok Date: Tue, 14 Sep 2021 14:18:55 -0700 Subject: [PATCH] [PyTorch] Fix SourceRangeDeserializer vector copy (#64031) Summary: Pull Request resolved: https://github.com/pytorch/pytorch/pull/64031 More copies of tuple elements. ghstack-source-id: 137978948 Test Plan: Pixel 3 before: https://our.intern.facebook.com/intern/aibench/details/724509739115867 Pixel 3 after: https://our.intern.facebook.com/intern/aibench/details/232361457767293 Top-line number doesn't seem to have moved, but we can see that the vector copy disappeared in the flame graph. Reviewed By: raziel Differential Revision: D30559545 fbshipit-source-id: e5343abae96b8e80e0ccec482ad316884ae231ea --- torch/csrc/jit/serialization/source_range_serialization.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/torch/csrc/jit/serialization/source_range_serialization.cpp b/torch/csrc/jit/serialization/source_range_serialization.cpp index b9e2df8..6a30107 100644 --- a/torch/csrc/jit/serialization/source_range_serialization.cpp +++ b/torch/csrc/jit/serialization/source_range_serialization.cpp @@ -23,7 +23,7 @@ class SourceRangeSerializer { }; SourceRange SourceRangeDeserializer::deserialize(const c10::IValue& iv) { - auto tup_elems = iv.toTuple()->elements(); + const auto& tup_elems = iv.toTuple()->elements(); TORCH_INTERNAL_ASSERT(tup_elems.size() == 3); std::shared_ptr source_ = deserialize_source(tup_elems[0]); int64_t start_ = tup_elems[1].toInt(); @@ -34,11 +34,12 @@ SourceRange SourceRangeDeserializer::deserialize(const c10::IValue& iv) { std::shared_ptr SourceRangeDeserializer::deserialize_source( const c10::IValue& iv) { auto tup = iv.toTuple(); - if (cached_sources.count(tup)) { - return cached_sources.at(tup); + auto it = cached_sources.find(tup); + if (it != cached_sources.end()) { + return it->second; } - auto tup_elems = tup->elements(); + const auto& tup_elems = tup->elements(); TORCH_INTERNAL_ASSERT(tup_elems.size() == 3); std::string text_ = tup_elems[0].toString()->string(); c10::optional filename_ = tup_elems[1].toOptional(); -- 2.7.4