Tpetra: Make CrsMatrix MatrixMarket I/O memory scalable
Created by: mhoemmen
@trilinos/tpetra Epic: #769.
MatrixMarket input and output (I/O) for Tpetra::CrsMatrix currently gathers the whole matrix to Process 0 before writing it. This is not memory scalable. "Memory scalable" means that no single process has to store more than a small constant factor times the maximum per-process memory usage of the distributed data structure. See also #352 and #1017.
Tasks:
-
#1018 (closed): Write functions for packing and unpacking matrix triples (i, j, A(i,j)). -
#1025 (closed): Implement DistObject subclass that communicates by triples, using the above functions. -
Rewrite CrsMatrix reader in the following way: -
#1031 (closed): Deal out chunks of triples to all the processes, in card-dealer fashion. -
Push all the triples into the aforementioned DistObject subclass. -
Do an Export of the subclass to the desired 1-to-1 Map. (If we wanted to be fancy, we could let CrsMatrix be the direct target of that Export.) -
As the Matrix Market reader already does, redistribute again if the original desired row Map is not 1-to-1.
-