Skip to content

Commit

Permalink
Update paper and bib
Browse files Browse the repository at this point in the history
  • Loading branch information
rohanbabbar04 committed Oct 4, 2024
1 parent 0454874 commit 2bf1b7c
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 26 deletions.
36 changes: 31 additions & 5 deletions joss/paper.bib
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ @article{Ravasi:2020
url = {https://www.sciencedirect.com/science/article/pii/S2352711019301086}
}

@article{Dalcin,
@article{Dalcin:2021,
author = {Dalcin, Lisandro and Fang, Yao-Lung L.},
journal = {Computing in Science & Engineering},
title = {mpi4py: Status Update After 12 Years of Development},
Expand All @@ -20,7 +20,7 @@ @article{Dalcin
doi = {10.1109/MCSE.2021.3083216}
}

@article{Mortensen2019,
@article{Mortensen:2019,
doi = {10.21105/joss.01340},
url = {https://doi.org/10.21105/joss.01340},
year = {2019},
Expand All @@ -33,7 +33,7 @@ @article{Mortensen2019
journal = {Journal of Open Source Software}
}

@article{Morgan2024,
@article{Morgan:2024,
doi = {10.21105/joss.06415},
url = {https://doi.org/10.21105/joss.06415},
year = {2024},
Expand All @@ -59,7 +59,7 @@ @article{mpi4jax
journal = {Journal of Open Source Software}
}

@article{harris2020array,
@article{Harris:2020,
title = {Array programming with {NumPy}},
author = {Charles R. Harris and K. Jarrod Millman and St{\'{e}}fan J.
van der Walt and Ralf Gommers and Pauli Virtanen and David
Expand All @@ -82,10 +82,36 @@ @article{harris2020array
url = {https://doi.org/10.1038/s41586-020-2649-2}
}

@inproceedings{cupy_learningsys2017,
@inproceedings{cupy,
author = "Okuta, Ryosuke and Unno, Yuya and Nishino, Daisuke and Hido, Shohei and Loomis, Crissman",
title = "CuPy: A NumPy-Compatible Library for NVIDIA GPU Calculations",
booktitle = "Proceedings of Workshop on Machine Learning Systems (LearningSys) in The Thirty-first Annual Conference on Neural Information Processing Systems (NIPS)",
year = "2017",
url = "http://learningsys.org/nips17/assets/papers/paper_16.pdf"
}

@article{Ravasi:2021,
author = {Ravasi, Matteo and Birnie, Claire},
title = "{A joint inversion-segmentation approach to assisted seismic interpretation}",
journal = {Geophysical Journal International},
volume = {228},
number = {2},
pages = {893-912},
year = {2021},
month = {09},
issn = {0956-540X},
doi = {10.1093/gji/ggab388},
url = {https://doi.org/10.1093/gji/ggab388},
eprint = {https://academic.oup.com/gji/article-pdf/228/2/893/40552446/ggab388.pdf},
}

@article{Nemeth:1999,
title={Least-squares migration of incomplete reflection data},
author={Nemeth, Tamas and Wu, Chengjun and Schuster, Gerard T},
journal={Geophysics},
volume={64},
number={1},
pages={208--221},
year={1999},
publisher={Society of Exploration Geophysicists}
}
40 changes: 19 additions & 21 deletions joss/paper.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,29 +46,21 @@ When addressing distributed inverse problems, we identify three distinct use cas
flexible, scalable framework:

- **Fully Distributed Models and Data**: Both the model and data are distributed across nodes, with minimal
communication during the modeling process. Communication
occurs mainly during the solver stage when dot products or regularization, such as the Laplacian, are applied. This
scenario is common
in [Post-Stack seismic inversion](https://pylops.readthedocs.io/en/stable/tutorials/poststack.html#sphx-glr-tutorials-poststack-py),
where each node handles a portion of the model and data, and communication only happens when adding spatial
regularizers.
communication during the modeling process. Communication occurs mainly during the solver stage when dot
products or regularization, such as the Laplacian, are applied. In this scenario where each node
handles a portion of the model and data, and communication only happens between the model and data at each node.

- **Distributed Data, Model Available on All Nodes**: In this case, data is distributed across nodes while the model is
available at all nodes. Communication is required
during the adjoint pass when models produced by each node need to be summed, and in the solver when performing dot
products on the data. This pattern is typical in fields
like [CT/MRI imaging](https://pylops.readthedocs.io/en/stable/tutorials/ctscan.html#sphx-glr-tutorials-ctscan-py)
and [seismic least-squares migration](https://pylops.readthedocs.io/en/stable/tutorials/lsm.html#sphx-glr-tutorials-lsm-py).
available at all nodes. Communication is required during the adjoint pass when models produced by each node need
to be summed, and in the solver when performing dot products on the data.

- **Model and Data Available on All Nodes or Master**: Here, communication is confined to the operator, with the master
node distributing parts of the model or data to
workers. The workers then perform computations without requiring communication in the solver. An example of this is
[MDC-based inversions](https://github.com/DIG-Kaust/TLR-MDC), which allow for the storage
of out-of-memory kernels.
node distributing parts of the model or data to workers. The workers then perform computations without requiring
communication in the solver.

Recent updates to mpi4py (version 3.0 and above) [@Dalcin] have simplified its integration, enabling more efficient data
Recent updates to mpi4py (version 3.0 and above) [@Dalcin:2021] have simplified its integration, enabling more efficient data
communication between nodes and processes.
Some projects in the Python ecosystem, such as mpi4py-fft [@Mortensen2019], mcdc [@Morgan2024], and mpi4jax [@mpi4jax],
Some projects in the Python ecosystem, such as mpi4py-fft [@Mortensen:2019], mcdc [@Morgan:2024], and mpi4jax [@mpi4jax],
utilize MPI to extend its capabilities,
improving the efficiency and scalability of distributed computing.

Expand Down Expand Up @@ -97,7 +89,7 @@ The main components of the library include:

The `pylops_mpi.DistributedArray` class serves as the fundamental array class used throughout the library. It enables
the
partitioning of large NumPy[@harris2020array] or CuPy[@cupy_learningsys2017] arrays into smaller local arrays, which can
partitioning of large NumPy[@Harris:2020] or CuPy[@cupy] arrays into smaller local arrays, which can
be distributed across different ranks.
Additionally, it allows for broadcasting the NumPy or CuPy array to multiple processes.

Expand Down Expand Up @@ -153,8 +145,14 @@ the need for explicit inter-process communication, thereby avoiding heavy commun

# Use Cases

- *Post Stack Inversion - 3D* -
- *Post Stack Inversion - 3D* - Post-stack inversion represents the quantitative characterization of the
subsurface [@Ravasi:2021]. In 3D, both the post-stack linear model and the data are three-dimensional. PyLops-MPI
solves this problem by distributing one of the axes across different ranks, allowing matrix-vector products and
inversions to take place at each rank, which are later gathered to obtain the inverted model.

- *Least-Squares Seismic Migration* -
- *Least-Squares Seismic Migration (LSSM)* involves manipulating seismic data to create an image of subsurface
reflectivity[@Nemeth:1999]. PyLops MPI breaks this problem by distributing the sources across different MPI ranks.
Each rank applies the source modeling operator to perform matrix-vector products with the broadcasted reflectivity.
The resulting data is then inverted using the MPI-Powered solvers to produce the desired subsurface image.

# References
# References

0 comments on commit 2bf1b7c

Please sign in to comment.