Skip to content

Commit 97e69f0

Browse files
committed
Merge branch '55-update-readme-and-add-cla-for-release' into 'master'
Resolve "Update Readme and Add CLA for release" Closes #55 See merge request chase/chase-library/ChASE!74
2 parents e93c077 + 2503a12 commit 97e69f0

File tree

4 files changed

+97
-27
lines changed

4 files changed

+97
-27
lines changed

.gitlab-ci.yml

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
variables:
22
SCHEDULER_PARAMETERS: '-Aslai -N1'
3+
CUSTOM_CI_BUILDS_DIR: /p/scratch/cslai
34

45
stages:
56
- build
@@ -11,7 +12,18 @@ build_cpu:
1112
tags: [ docker-proton ]
1213
image:
1314
name: opensuse:jsc-gcc12
14-
15+
#rules:
16+
# - changes:
17+
# - '**/*.cpp'
18+
# - '**/*.h'
19+
# - '**/*.hpp'
20+
# - '**/*.c'
21+
# - '**/*.cu'
22+
# - '**/*.cuh'
23+
# - '**/*.f90'
24+
# - '**/*.inc'
25+
# - '**/*.cmake'
26+
# - '**/CMakeLists.txt'
1527
script:
1628
- cmake --version
1729
- mkdir -p build_cpu
@@ -32,6 +44,17 @@ test_cpu:
3244
tags: [ docker-proton ]
3345
image:
3446
name: opensuse:jsc-gcc12
47+
#rules:
48+
# - changes:
49+
# - '**/*.cpp'
50+
# - '**/*.h'
51+
# - '**/*.hpp'
52+
# - '**/*.c'
53+
# - '**/*.f90'
54+
# - '**/*.inc'
55+
# - '**/*.cmake'
56+
# - '**/CMakeLists.txt'
57+
3558
script:
3659
- cd build_cpu
3760
- CTEST_OUTPUT_ON_FAILURE=1 make test
@@ -48,6 +71,19 @@ build_gpu:
4871
- jacamar
4972
- login
5073
- shell
74+
#rules:
75+
# - changes:
76+
# - '**/*.cpp'
77+
# - '**/*.h'
78+
# - '**/*.hpp'
79+
# - '**/*.c'
80+
# - '**/*.cu'
81+
# - '**/*.cuh'
82+
# - '**/*.f90'
83+
# - '**/*.inc'
84+
# - '**/*.cmake'
85+
# - '**/CMakeLists.txt'
86+
5187
id_tokens:
5288
SITE_ID_TOKEN:
5389
aud: https://gitlab.jsc.fz-juelich.de
@@ -67,6 +103,7 @@ build_gpu:
67103
- build_gpu/Makefile
68104
- build_gpu/CTestTestfile.cmake
69105
- build_gpu/tests
106+
expire_in: 1 week
70107

71108
test_gpu:
72109
stage: test
@@ -77,6 +114,19 @@ test_gpu:
77114
- jacamar
78115
- compute
79116
- slurm
117+
#rules:
118+
# - changes:
119+
# - '**/*.cpp'
120+
# - '**/*.h'
121+
# - '**/*.hpp'
122+
# - '**/*.c'
123+
# - '**/*.cu'
124+
# - '**/*.cuh'
125+
# - '**/*.f90'
126+
# - '**/*.inc'
127+
# - '**/*.cmake'
128+
# - '**/CMakeLists.txt'
129+
80130
id_tokens:
81131
SITE_ID_TOKEN:
82132
aud: https://gitlab.jsc.fz-juelich.de
@@ -90,6 +140,7 @@ test_gpu:
90140
artifacts:
91141
paths:
92142
- build_gpu/*
143+
expire_in: 1 week
93144

94145
coverage:
95146
stage: coverage
@@ -100,6 +151,19 @@ coverage:
100151
tags: [ docker-proton ]
101152
image:
102153
name: opensuse:jsc-gcc12
154+
#rules:
155+
# - changes:
156+
# - '**/*.cpp'
157+
# - '**/*.h'
158+
# - '**/*.hpp'
159+
# - '**/*.c'
160+
# - '**/*.cu'
161+
# - '**/*.cuh'
162+
# - '**/*.f90'
163+
# - '**/*.inc'
164+
# - '**/*.cmake'
165+
# - '**/CMakeLists.txt'
166+
103167
script:
104168
# Merge the two coverage files
105169
- lcov --capture --directory ./build_cpu --output-file coverage_cpu.info

CLA_ChASE.pdf

192 KB
Binary file not shown.

README.md

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16,25 +16,22 @@ ChASE is written in C++ using the modern software engineering concepts that favo
1616
- **Degree optimization:** For a fixed accuracy level, ChASE can optimize the degree of the Chebyshev polynomial filter so as to minimize the number of FLOPs necessary to reach convergence.
1717
- **Precision:** ChASE is also templated to work in *Single Precision* (SP) or *Double Precision* (DP).
1818

19-
## Versions of the library
19+
## Builds of ChASE
2020

21-
T
22-
Currently, the library comes in one main versions:
23-
24-
1. **ChASE-MPI**
25-
26-
ChASE-MPI is the default version of the library and can be installed with the minimum amount of dependencies (BLAS, LAPACK, and MPI). It supports different configurations depending on the available hardware resources.
27-
28-
- **Shared memory build:** This is the simplest configuration and should be exclusively selected when ChASE is used on only one computing node or on a single CPU.
21+
ChASE supports different builds for different systems with different architectures:
22+
- **Shared memory build:** This is the simplest configuration and should be exclusively selected when ChASE is used on only one computing node or on a single GPU.
2923
- **MPI+Threads build:** On multi-core homogeneous CPU clusters, ChASE is best used in its pure MPI build. In this configuration, ChASE is typically used with one MPI rank per NUMA domain and as many threads as number of available cores per NUMA domain.
30-
- **GPU build:** ChASE-MPI can be configured to take advantage of GPUs on heterogeneous computing clusters. Currently we support the use of one GPU per MPI rank. Multiple-GPU per computing node can be used when MPI rank
31-
number per node equals to the GPU number per node.
32-
33-
ChASE-MPI support two types of data distribution of matrix `A` across 2D MPI grid:
34-
35-
- **Block Distribution**: each MPI rank of 2D grid is assigned a block of dense matrix **A**.
24+
- **Multi-GPU build:** ChASE can be configured to take advantage of GPUs on heterogeneous computing clusters. Currently we support the use of one GPU per MPI rank. Multiple-GPU per computing node can be used when MPI rank number per node equals to the GPU number per node.
25+
- **NCCL Backend:** by default, ChASE uses **[NCCL](https://developer.nvidia.com/nccl)** as backend for the collective communications across different GPUs.
26+
- **CUDA-Aware MPI Backend**: alternatively, CUDA-Aware MPI can be used for the communications.
3627

37-
- **Block-Cyclic Distribution**: an distribution scheme for implementation of dense matrix computations on distributed-memory machines, to improve the load balance of matrix computation if the amount of work differs for different entries of a matrix. For more details, please refer to [Netlib](https://www.netlib.org/scalapack/slug/node75.html) .
28+
## Supported Data types
29+
30+
ChASE supports different data types:
31+
- **Shared memory build** requires dense matrices to be column major.
32+
- **Distributed-memory build** support two types of data distribution of matrix `A` across 2D MPI/GPU grid:
33+
- **Block Distribution**: each MPI rank of 2D grid is assigned a block of dense matrix **A**.
34+
- **Block-Cyclic Distribution**: an distribution scheme for implementation of dense matrix computations on distributed-memory machines, to improve the load balance of matrix computation if the amount of work differs for different entries of a matrix. For more details, please refer to [Netlib](https://www.netlib.org/scalapack/slug/node75.html) .
3835

3936
## Quick Start
4037

@@ -73,7 +70,9 @@ cmake .. -DCMAKE_INSTALL_PREFIX=${ChASEROOT}
7370
make install
7471
```
7572
76-
More details about the installation on both local machine and clusters, please refer to [User Documentation](https://chase-library.github.io/ChASE/quick-start.html).
73+
More details about the installation on both local machine and clusters, please refer to [User Documentation](https://chase-library.github.io/ChASE/quick-start.html) (⚠️**To be updated**).
74+
75+
<!-- a normal html comment
7776
7877
## Documentation
7978
@@ -84,12 +83,12 @@ Compiling the documentation in local requires enable `-DBUILD_WITH_DOCS=ON` fla
8483
```bash
8584
cmake .. -DBUILD_WITH_DOCS=ON
8685
```
87-
86+
-->
8887
## Examples
8988
9089
Multiple examples are provided, which helps user get familiar with ChASE.
9190
92-
**Build ChASE with Examples** requires enable `-DBUILD_WITH_EXAMPLES=ON` flag when compiling ChASE library:
91+
**Build ChASE with Examples** requires enable `-DCHASE_BUILD_WITH_EXAMPLES=ON` flag when compiling ChASE library:
9392
9493
```bash
9594
cmake .. -DCHASE_BUILD_WITH_EXAMPLES=ON
@@ -99,7 +98,7 @@ cmake .. -DCHASE_BUILD_WITH_EXAMPLES=ON
9998
10099
0. The example [0_hello_world](https://github.com/ChASE-library/ChASE/tree/master/examples/0_hello_world) constructs a simple Clement matrix and find a given number of its eigenpairs.
101100
102-
1. The example [1_sequence_eigenproblems](https://github.com/ChASE-library/ChASE/tree/master/examples/1_sequence_eigenproblems) illustrates how ChASE can be used to solve a sequence of eigenproblems.
101+
1. The example [1_sequence_eigenproblems](https://github.com/ChASE-library/ChASE/tree/master/examples/1_sequence_eigenproblems) illustrates how ChASE can be used to solve a sequence of eigenproblems. (⚠️**To be included**).
103102
2. The example [2_input_output](https://github.com/ChASE-library/ChASE/tree/master/examples/2_input_output) provides the configuration of parameters of ChASE from command line (supported by Boost); the parallel I/O which loads the local matrices into the computing nodes in parallel.
104103
3. The example [3_installation](https://github.com/ChASE-library/ChASE/tree/master/examples/3_installation) shows the way to link ChASE to other applications.
105104
4. The example [4_interface](https://github.com/ChASE-library/ChASE/tree/master/examples/4_interface) shows examples to use the C and Fortran interfaces of ChASE.
@@ -113,10 +112,10 @@ cmake .. -DCHASE_BUILD_WITH_EXAMPLES=ON
113112
114113
### Current contributors
115114
115+
- Clément Richefort - Integration of ChASE into [YAMBO](https://www.yambo-code.eu/) code.
116116
- Davor Davidović – Advanced parallel GPU implementation and optimization
117117
- Nenad Mijić – ARM-based implementation and optimization, CholeskyQR, unitests, parallel IO
118118
119-
120119
### Past contributors
121120
122121
- Xiao Zhang – Integration of ChASE into Jena BSE code
@@ -132,17 +131,25 @@ cmake .. -DCHASE_BUILD_WITH_EXAMPLES=ON
132131
133132
## Contribution
134133
135-
This repository mirrors the principal Gitlab repository. If you want to contribute as developer to this project please contact e.di.napoli@fz-juelich.de.
134+
This Github repository mirrors the principal Gitlab repository hosted at the Juelich Supercomputing Centre. There are two main ways you can contribute:
135+
136+
1. you can fork the open source ChASE repository on Github (https://github.com/ChASE-library/ChASE). Modify the source code (and relative inlined documentation, if necessary) and then submit a pull request. If you have not contributed to the ChASE library before, we will ask you to agree to a Collaboration Agreement (CLA) before the pull request can be approved. Currentlly there is no automatic mechanism to sign such an agreement and we need you to download the file CLA.pdf (that is part of the repository), print it, sign it, scan it and send it back to chase@fz-juelich.de. Upon reception of your signed CLA, your pull request will be reviewed and then eventually approved.
137+
2. Alternatively, if you want to contribute as a developer stably integrated into this project please contact us at chase@fz-juelich.de with a motivated request of collaboration. We will consider your request and get in touch with you to evaluate if and how to give you access directly to the Gitlab repository where the major developments of this software is carried out.
138+
139+
An automatic process to approve a pull request and sign a CLA is under development and will soon substitute option 1. In the meantime, we ask you for your patience and understanding in having to follow such a time consuming procedure.
136140
137141
## How to Cite the Code
138142
139-
The main reference of ChASE is [1] while [2] provides some early results on scalability and usage on sequences of eigenproblems generated by Materials Science applications.
143+
The main reference of ChASE is [1] while [2] provides some early results on scalability and usage on sequences of eigenproblems generated by Materials Science applications. [3] and [5] provides the distributed-memory multi-GPU implementation and performance analysis.
140144
141145
- [1] J. Winkelmann, P. Springer, and E. Di Napoli. *ChASE: a Chebyshev Accelerated Subspace iteration Eigensolver for sequences of Hermitian eigenvalue problems.* ACM Transaction on Mathematical Software, **45** Num.2, Art.21, (2019). [DOI:10.1145/3313828](https://doi.org/10.1145/3313828) , [[arXiv:1805.10121](https://arxiv.org/abs/1805.10121/) ]
142146
- [2] M. Berljafa, D. Wortmann, and E. Di Napoli. *An Optimized and Scalable Eigensolver for Sequences of Eigenvalue Problems.* Concurrency & Computation: Practice and Experience **27** (2015), pp. 905-922. [DOI:10.1002/cpe.3394](https://onlinelibrary.wiley.com/doi/pdf/10.1002/cpe.3394) , [[arXiv:1404.4161](https://arxiv.org/abs/1404.4161) ].
143-
- [3] X. Wu, D. Davidović, S. Achilles,E. Di Napoli. ChASE: a distributed hybrid CPU-GPU eigensolver for large-scale hermitian eigenvalue problems. Proceedings of the Platform for Advanced Scientific Computing Conference (PASC22). [DOI:10.1145/3539781.3539792](https://dl.acm.org/doi/10.1145/3539781.3539792) , [[arXiv:2205.02491](https://arxiv.org/pdf/2205.02491/) ].
147+
- [3] X. Wu, D. Davidović, S. Achilles,E. Di Napoli. *ChASE: a distributed hybrid CPU-GPU eigensolver for large-scale hermitian eigenvalue problems.* Proceedings of the Platform for Advanced Scientific Computing Conference (PASC22). [DOI:10.1145/3539781.3539792](https://dl.acm.org/doi/10.1145/3539781.3539792) , [[arXiv:2205.02491](https://arxiv.org/pdf/2205.02491/) ].
148+
- [4] X. Wu, E. Di Napoli. *Advancing the distributed Multi-GPU ChASE library through algorithm optimization and NCCL library.* Proceedings of the SC'23 Workshops of The International Conference on High Performance Computing, Network, Storage, and Analysis (pp. 1688-1696). [DOI:10.1145/3624062.3624249](https://dl.acm.org/doi/abs/10.1145/3624062.3624249), [[arXiv:2309.15595](https://arxiv.org/pdf/2309.15595)].
144149
145150
## Copyright and License
146151
147152
[3-Clause BSD License (BSD License 2.0)](https://github.com/ChASE-library/ChASE/blob/master/LICENSE)
148153
154+
<!-- @Edo, add CLA here -->
155+

examples/0_hello_world/0_hello_world.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
#include <random>
1212
#include <type_traits>
1313
#include <vector>
14-
1514
#include "algorithm/performance.hpp"
1615
#ifdef HAS_CUDA
1716
#include "Impl/pchase_gpu/pchase_gpu.hpp"
@@ -29,7 +28,6 @@ using BackendType = chase::grid::backend::NCCL;
2928
using ARCH = chase::platform::CPU;
3029
#endif
3130

32-
3331
int main(int argc, char** argv)
3432
{
3533
MPI_Init(&argc, &argv);
@@ -128,6 +126,7 @@ int main(int argc, char** argv)
128126
#else
129127
auto single = chase::Impl::pChASECPU(nev, nex, &Hmat, &Vec, Lambda.data());
130128
#endif
129+
131130
//Setup configure for ChASE
132131
auto& config = single.GetConfig();
133132
//Tolerance for Eigenpair convergence

0 commit comments

Comments
 (0)