[PyTorch] Fix SourceRangeDeserializer vector copy (#64031)
authorScott Wolchok <swolchok@fb.com>
Tue, 14 Sep 2021 21:18:55 +0000 (14:18 -0700)
committerFacebook GitHub Bot <facebook-github-bot@users.noreply.github.com>
Tue, 14 Sep 2021 21:20:45 +0000 (14:20 -0700)
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

index b9e2df8..6a30107 100644 (file)
@@ -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> 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<Source> 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<std::string> filename_ = tup_elems[1].toOptional<std::string>();