8000 Accept only unique_ptr for distributed vector constructors by MarcelKoch · Pull Request #1284 · ginkgo-project/ginkgo · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Accept only unique_ptr for distributed vector constructors #1284

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Mar 14, 2023

Conversation

MarcelKoch
Copy link
Member

Inspired by #1279 I decided to clear up the ownership transfer in the distributed vector constructor. Currently, distributed vectors can be created from existing local vectors by passing them as raw pointers to the constructor. But the constructor will move from the passed in pointer, so this is potentially unsafe.
One argument in favor of raw pointers was that working with views of local vectors would be simpler (I think?). Since now there is a helper function to create a view of a dense vector, this can now be done as easily with a unique_ptr parameter.

To make this work, I had to add create_const functions, but I guess that might be useful anyway.

@MarcelKoch MarcelKoch added the 1:ST:ready-for-review This PR is ready for review label Feb 17, 2023
@MarcelKoch MarcelKoch self-assigned this Feb 17, 2023
@ginkgo-bot ginkgo-bot added mod:core This is related to the core module. type:solver This is related to the solvers labels Feb 17, 2023
Copy link
Member
@upsj upsj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! We should probably merge this after the pointer_param PR is merged?

@MarcelKoch
Copy link
Member Author

@upsj yes, since this is based on that PR, that makes the most sense.

@upsj upsj force-pushed the pointer_param_interface branch from 6fbeca5 to 9b77b7a Compare February 20, 2023 15:06
@ginkgo-bot ginkgo-bot force-pushed the pointer_param_interface branch from f7c0b4d to 14b7f69 Compare February 21, 2023 15:51
Base automatically changed from pointer_param_interface to develop February 22, 2023 09:36
@MarcelKoch MarcelKoch force-pushed the change-dist-vector-constructor branch from a8c4a15 to 2b80d1a Compare February 22, 2023 09:59
@MarcelKoch
Copy link
Member Author

format-rebase!

@MarcelKoch MarcelKoch force-pushed the change-dist-vector-constructor branch from 2b80d1a to ef978c5 Compare February 23, 2023 14:28
@MarcelKoch MarcelKoch requested review from a team February 23, 2023 14:28
Copy link
Collaborator
@fritzgoebel fritzgoebel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Copy link
Member
@thoasm thoasm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tests for new functions create_const are missing.


/**
* Creates a constant (immutable) distributed Vector from a constant local
* vector.The global size will be deduced from the local sizes, which will
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: missing space

Suggested change
* vector.The global size will be deduced from the local sizes, which will
* vector. The global size will be deduced from the local sizes, which will

*
* @param exec Executor associated with this vector
* @param comm Communicator associated with this vector
* @param global_size The global size of the vector
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This parameter does not exist in this overload.

Suggested change
* @param global_size The global size of the vector

Comment on lines +487 to +488
static std::unique_ptr<const Vector> create_const(
std::shared_ptr<const Executor> exec, mpi::communicator comm,
std::unique_ptr<const local_vector_type> local_vector);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tests are missing for this and the previous overload of create_const.

@MarcelKoch MarcelKoch requested a review from thoasm February 23, 2023 16:53
Copy link
Member
@thoasm thoasm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@upsj upsj added 1:ST:ready-to-merge This PR is ready to merge. and removed 1:ST:ready-for-review This PR is ready for review labels Feb 24, 2023
@upsj upsj added 1:ST:ready-for-review This PR is ready for review and removed 1:ST:ready-to-merge This PR is ready to merge. labels Feb 24, 2023
@MarcelKoch
Copy link
Member Author

rebase!

@ginkgo-bot ginkgo-bot force-pushed the change-dist-vector-constructor branch from b8bdc03 to 5a46fab Compare March 8, 2023 13:50
@MarcelKoch MarcelKoch added 1:ST:ready-to-merge This PR is ready to merge. and removed 1:ST:ready-for-review This PR is ready for review labels Mar 9, 2023
@codecov
Copy link
codecov bot commented Mar 10, 2023

Codecov Report

Patch coverage: 52.23% and project coverage change: -1.07 ⚠️

Comparison is base (c8d4be5) 91.69% compared to head (a20207f) 90.62%.

Additional details and impacted files
@@             Coverage Diff             @@
##           develop    #1284      +/-   ##
===========================================
- Coverage    91.69%   90.62%   -1.07%     
===========================================
  Files          567      570       +3     
  Lines        48212    48558     +346     
===========================================
- Hits         44207    44008     -199     
- Misses        4005     4550     +545     
Impacted Files Coverage Δ
core/device_hooks/common_kernels.inc.cpp 0.00% <0.00%> (ø)
core/factorization/elimination_forest.cpp 100.00% <ø> (ø)
include/ginkgo/core/distributed/vector.hpp 33.33% <ø> (ø)
test/factorization/cholesky_kernels.cpp 0.00% <0.00%> (-93.34%) ⬇️
test/factorization/lu_kernels.cpp 0.00% <0.00%> (ø)
omp/factorization/cholesky_kernels.cpp 28.75% <3.38%> (-71.25%) ⬇️
core/factorization/lu.cpp 98.14% <50.00%> (-1.86%) ⬇️
core/distributed/vector.cpp 83.17% <80.00%> (-2.33%) ⬇️
reference/test/factorization/cholesky_kernels.cpp 93.10% <90.60%> (+2.26%) ⬆️
reference/test/factorization/lu_kernels.cpp 95.45% <94.73%> (-1.36%) ⬇️
... and 6 more

... and 13 files with indirect coverage changes

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

☔ View full report in Codecov by Sentry.
📢 Do you have feedback about the report comment? Let us know in this issue.

@MarcelKoch
Copy link
Member Author

rebase!

@ginkgo-bot ginkgo-bot force-pushed the change-dist-vector-constructor branch from 4f40118 to a20207f Compare March 13, 2023 07:37
@sonarqubecloud
Copy link

Kudos, SonarCloud Quality Gate passed!    Quality Gate passed

Bug A 0 Bugs
Vulnerability A 0 Vulnerabilities
Security Hotspot A 0 Security Hotspots
Code Smell A 2 Code Smells

86.4% 86.4% Coverage
0.0% 0.0% Duplication

@MarcelKoch MarcelKoch merged commit f050721 into develop Mar 14, 2023
@MarcelKoch MarcelKoch deleted the change-dist-vector-constructor branch March 14, 2023 08:09
tcojean pushed a commit that referenced this pull request Jun 16, 2023
Release 1.6.0 of Ginkgo.

The Ginkgo team is proud to announce the new Ginkgo minor release 1.6.0. This release brings new features such as:
- Several building blocks for GPU-resident sparse direct solvers like symbolic
  and numerical LU and Cholesky factorization, ...,
- A distributed Schwarz preconditioner,
- New FGMRES and GCR solvers,
- Distributed benchmarks for the SpMV operation, solvers, ...
- Support for non-default streams in the CUDA and HIP backends,
- Mixed precision support for the CSR SpMV,
- A new profiling logger which integrates with NVTX, ROCTX, TAU and VTune to
  provide internal Ginkgo knowledge to most HPC profilers!

and much more.

If you face an issue, please first check our [known issues page](https://github.com/ginkgo-project/ginkgo/wiki/Known-Issues) and the [open issues list](https://github.com/ginkgo-project/ginkgo/issues) and if you do not find a solution, feel free to [open a new issue](https://github.com/ginkgo-project/ginkgo/issues/new/choose) or ask a question using the [github discussions](https://github.com/ginkgo-project/ginkgo/discussions).

Supported systems and requirements:
+ For all platforms, CMake 3.13+
+ C++14 compliant compiler
+ Linux and macOS
  + GCC: 5.5+
  + clang: 3.9+
  + Intel compiler: 2018+
  + Apple Clang: 14.0 is tested. Earlier versions might also work.
  + NVHPC: 22.7+
  + Cray Compiler: 14.0.1+
  + CUDA module: CUDA 9.2+ or NVHPC 22.7+
  + HIP module: ROCm 4.5+
  + DPC++ module: Intel OneAPI 2021.3+ with oneMKL and oneDPL. Set the CXX compiler to `dpcpp`.
+ Windows
  + MinGW: GCC 5.5+
  + Microsoft Visual Studio: VS 2019+
  + CUDA module: CUDA 9.2+, Microsoft Visual Studio
  + OpenMP module: MinGW.

### Version Support Changes
+ ROCm 4.0+ -> 4.5+ after [#1303](#1303)
+ Removed Cygwin pipeline and support [#1283](#1283)

### Interface Changes
+ Due to internal changes, `ConcreteExecutor::run` will now always throw if the corresponding module for the `ConcreteExecutor` is not build [#1234](#1234)
+ The constructor of `experimental::distributed::Vector` was changed to only accept local vectors as `std::unique_ptr` [#1284](#1284)
+ The default parameters for the `solver::MultiGrid` were improved. In particular, the smoother defaults to one iteration of `Ir` with `Jacobi` preconditioner, and the coarse grid solver uses the new direct solver with LU factorization. [#1291](#1291) [#1327](#1327)
+ The `iteration_complete` event gained a more expressive overload with additional parameters, the old overloads were deprecated. [#1288](#1288) [#1327](#1327)

### Deprecations
+ Deprecated less expressive `iteration_complete` event. Users are advised to now implement the function `void iteration_complete(const LinOp* solver, const LinOp* b, const LinOp* x, const size_type& it, const LinOp* r, const LinOp* tau, const LinOp* implicit_tau_sq, const array<stopping_status>* status, bool stopped)` [#1288](#1288)

### Added Features
+ A distributed Schwarz preconditioner. [#1248](#1248)
+ A GCR solver [#1239](#1239)
+ Flexible Gmres solver [#1244](#1244)
+ Enable Gmres solver for distributed matrices and vectors [#1201](#1201)
+ An example that uses Kokkos to assemble the system matrix [#1216](#1216)
+ A symbolic LU factorization allowing the `gko::experimental::factorization::Lu` and `gko::experimental::solver::Direct` classes to be used for matrices with non-symmetric sparsity pattern [#1210](#1210)
+ A numerical Cholesky factorization [#1215](#1215)
+ Symbolic factorizations in host-side operations are now wrapped in a host-side `Operation` to make their execution visible to loggers. This means that profiling loggers and benchmarks are no longer missing a separate entry for their runtime [#1232](#1232)
+ Symbolic factorization benchmark [#1302](#1302)
+ The `ProfilerHook` logger allows annotating the Ginkgo execution (apply, operations, ...) for profiling frameworks like NVTX, ROCTX and TAU. [#1055](#1055)
+ `ProfilerHook::created_(nested_)summary` allows the generation of a lightweight runtime profile over all Ginkgo functions written to a user-defined stream [#1270](#1270) for both host and device timing functionality [#1313](#1313)
+ It is now possible to enable host buffers for MPI communications at runtime even if the compile option `GINKGO_FORCE_GPU_AWARE_MPI` is set. [#1228](#1228)
+ A stencil matrices generator (5-pt, 7-pt, 9-pt, and 27-pt) for benchmarks [#1204](#1204)
+ Distributed benchmarks (multi-vector blas, SpMV, solver) [#1204](#1204)
+ Benchmarks for CSR sorting and lookup [#1219](#1219)
+ A timer for MPI benchmarks that reports the longest time [#1217](#1217)
+ A `timer_method=min|max|average|median` flag for benchmark timing summary [#1294](#1294)
+ Support for non-default streams in CUDA and HIP executors [#1236](#1236)
+ METIS integration for nested dissection reordering [#1296](#1296)
+ SuiteSparse AMD integration for fillin-reducing reordering [#1328](#1328)
+ Csr mixed-precision SpMV support [#1319](#1319)
+ A `with_loggers` function for all `Factory` parameters [#1337](#1337)

### Improvements
+ Improve naming of kernel operations for loggers [#1277](#1277)
+ Annotate solver iterations in `ProfilerHook` [#1290](#1290)
+ Allow using the profiler hooks and inline input strings in benchmarks [#1342](#1342)
+ Allow passing smart pointers in place of raw pointers to most matrix functions. This means that things like `vec->compute_norm2(x.get())` or `vec->compute_norm2(lend(x))` can be simplified to `vec->compute_norm2(x)` [#1279](#1279) [#1261](#1261)
+ Catch overflows in prefix sum operations, which makes Ginkgo's operations much less likely to crash. This also improves the performance of the prefix sum kernel [#1303](#1303)
+ Make the installed GinkgoConfig.cmake file relocatable and follow more best practices [#1325](#1325)

### Fixes
+ Fix OpenMPI version check [#1200](#1200)
+ Fix the mpi cxx type binding by c binding [#1306](#1306)
+ Fix runtime failures for one-sided MPI wrapper functions observed on some OpenMPI versions [#1249](#1249)
+ Disable thread pinning with GPU executors due to poor performance [#1230](#1230)
+ Fix hwloc version detection [#1266](#1266)
+ Fix PAPI detection in non-implicit include directories [#1268](#1268)
+ Fix PAPI support for newer PAPI versions: [#1321](#1321)
+ Fix pkg-config file generation for library paths outside prefix [#1271](#1271)
+ Fix various build failures with ROCm 5.4, CUDA 12, and OneAPI 6 [#1214](#1214), [#1235](#1235), [#1251](#1251)
+ Fix incorrect read for skew-symmetric MatrixMarket files with explicit diagonal entries [#1272](#1272)
+ Fix handling of missing diagonal entries in symbolic factorizations [#1263](#1263)
+ Fix segmentation fault in benchmark matrix construction [#1299](#1299)
+ Fix the stencil matrix creation for benchmarking [#1305](#1305)
+ Fix the additional residual check in IR [#1307](#1307)
+ Fix the cuSPARSE CSR SpMM issue on single strided vector when cuda >= 11.6 [#1322](#1322) [#1331](#1331)
+ Fix Isai generation for large sparsity powers [#1327](#1327)
+ Fix Ginkgo compilation and test with NVHPC >= 22.7 [#1331](#1331)
+ Fix Ginkgo compilation of 32 bit binaries with MSVC [#1349](#1349)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
1:ST:ready-to-merge This PR is ready to merge. mod:core This is related to the core module. type:distributed-functionality type:solver This is related to the solvers
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants
0