From d98651efe5768542254aecfd8f72887fe41a43c6 Mon Sep 17 00:00:00 2001 From: Eric Phipps Date: Sat, 2 Nov 2024 07:31:31 -0600 Subject: [PATCH] Fix bug in sptensor create_mirror_view that wasn't handling global subs correctly --- src/Genten_Sptensor.hpp | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/Genten_Sptensor.hpp b/src/Genten_Sptensor.hpp index 9f9bea0ea..22c1d39b3 100644 --- a/src/Genten_Sptensor.hpp +++ b/src/Genten_Sptensor.hpp @@ -635,11 +635,29 @@ typename SptensorT::HostMirror create_mirror_view(const SptensorT& a) { typedef typename SptensorT::HostMirror HostMirror; - HostMirror hm( create_mirror_view(a.size()), - create_mirror_view(a.getValues()), - create_mirror_view(a.getSubscripts()), - create_mirror_view(a.getPerm()), - a.isSorted() ); + HostMirror hm; + if (a.getGlobalSubscripts().data() == a.getSubscripts().data()) { + // When subs_gids aliases gids, don't create a new view for subs_gids + auto sv = create_mirror_view(a.getSubscripts()); + hm = HostMirror( create_mirror_view(a.size()), + create_mirror_view(a.getValues()), + sv, + create_mirror_view(a.getPerm()), + a.isSorted(), + sv, + create_mirror_view(a.getLowerBounds()), + create_mirror_view(a.getUpperBounds()) ); + } + else { + hm = HostMirror( create_mirror_view(a.size()), + create_mirror_view(a.getValues()), + create_mirror_view(a.getSubscripts()), + create_mirror_view(a.getPerm()), + a.isSorted(), + create_mirror_view(a.getGlobalSubscripts()), + create_mirror_view(a.getLowerBounds()), + create_mirror_view(a.getUpperBounds()) ); + } hm.copy_extra_data(a); return hm; }