diff --git a/.github/mirror.sh b/.github/mirror.sh index f7a407601f3..397a8a379af 100755 --- a/.github/mirror.sh +++ b/.github/mirror.sh @@ -1,7 +1,5 @@ #!/usr/bin/env bash -BRANCH_NAME=${BRANCH_NAME##*/} - git remote add fork "git@github.com:${GITHUB_REPO}.git" git remote add gitlab "git@gitlab.com:ginkgo-project/ginkgo-public-ci.git" diff --git a/.github/workflows/mirror.yml b/.github/workflows/mirror.yml index 0bc5b221938..43ebd4a2aae 100644 --- a/.github/workflows/mirror.yml +++ b/.github/workflows/mirror.yml @@ -15,5 +15,5 @@ jobs: run: cp --preserve .github/mirror.sh /tmp && /tmp/mirror.sh env: BOT_KEY: ${{ secrets.GITLAB_MIRROR_PRIV_KEY }} - BRANCH_NAME: ${{ github.ref }} + BRANCH_NAME: ${{ github.ref_name }} GITHUB_REPO: ${{ github.repository }} diff --git a/.github/workflows/osx.yml b/.github/workflows/osx.yml index 958489e09fd..441be04d842 100644 --- a/.github/workflows/osx.yml +++ b/.github/workflows/osx.yml @@ -55,7 +55,7 @@ jobs: mkdir install export INSTALL_PREFIX=`pwd`/install cd build - cmake .. -DCMAKE_CXX_FLAGS=-Wpedantic -DBUILD_SHARED_LIBS=${{ matrix.config.shared }} -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} -DGINKGO_MIXED_PRECISION=${{ matrix.config.mixed }} + cmake .. -DCMAKE_PREFIX_PATH=/opt/homebrew/opt/libomp/ -DCMAKE_CXX_FLAGS=-Wpedantic -DBUILD_SHARED_LIBS=${{ matrix.config.shared }} -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} -DGINKGO_MIXED_PRECISION=${{ matrix.config.mixed }} make -j8 ctest -j10 --output-on-failure diff --git a/.github/workflows/windows-msvc-cuda.yml b/.github/workflows/windows-msvc-cuda.yml index 1bf6a7bee85..b1df1aaf4ed 100644 --- a/.github/workflows/windows-msvc-cuda.yml +++ b/.github/workflows/windows-msvc-cuda.yml @@ -29,7 +29,7 @@ jobs: config: - {version: "latest", name: "cuda-latest/release/shared", "mixed": "ON"} name: msvc/${{ matrix.config.name }} (only compile) - runs-on: [windows-latest] + runs-on: [windows-2019] steps: - name: Checkout the latest code (shallow clone) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a812ad44f80..f3cecee4b71 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -633,7 +633,7 @@ warnings: variables: BUILD_OMP: "ON" BUILD_CUDA: "ON" - CXX_FLAGS: "-Werror=pedantic;-pedantic-errors" + CXX_FLAGS: "-Werror=pedantic -pedantic-errors" allow_failure: yes # Ensure kernel modules do not depend on core @@ -699,6 +699,11 @@ sonarqube_cov_: - .quick_test_short_lived_condition - .before_script_template - .use_gko-cuda101-openmpi-gnu8-llvm7-intel2019 + tags: + - private_ci + - controller + - cpu + - nla-gpu script: - PR_ID=$(curl -s "https://api.github.com/search/issues?q=sha:${CI_COMMIT_SHA}" | jq '.items[0].number') @@ -730,6 +735,11 @@ sonarqube_cov: - .deploy_condition - .before_script_template - .use_gko-cuda101-openmpi-gnu8-llvm7-intel2019 + tags: + - private_ci + - controller + - cpu + - nla-gpu script: - ctest -S cmake/CTestScript.cmake -DCTEST_BUILD_CONFIGURATION=COVERAGE -DGINKGO_SONARQUBE_TEST=ON diff --git a/BENCHMARKING.md b/BENCHMARKING.md index a26d8572068..c93704532b5 100644 --- a/BENCHMARKING.md +++ b/BENCHMARKING.md @@ -11,22 +11,29 @@ repository](https://github.com/ginkgo-project/ginkgo-data/). These results can also be used for performance comparison in order to ensure that you get similar performance as what is published on this repository. -To compile the benchmarks, the flag `-GINKGO_BUILD_BENCHMARKS=ON` has to be set +To compile the benchmarks, the flag `-DGINKGO_BUILD_BENCHMARKS=ON` has to be set during the `cmake` step. In addition, the [`ssget` command-line utility](https://github.com/ginkgo-project/ssget) has to be installed on the system. The purpose of this file is to explain in detail the capacities of this benchmarking suite as well as how to properly setup everything. +There are two ways to benchmark Ginkgo. When compiling the benchmark suite, +executables are generated for collecting matrix statistics, running +sparse-matrix vector product, solvers (possibly distributed) benchmarks. Another +way to run benchmarks is through the convenience script `run_all_benchmarks.sh`, +but not all features are exposed through this tool! + Here is a short description of the content of this file: 1. Ginkgo setup and best practice guidelines 2. Installing and using the `ssget` tool to fetch the [SuiteSparse matrices](https://sparse.tamu.edu/). -3. Benchmarking overview and how to run them in a simple way. -4. How to publish the benchmark results online and use the [Ginkgo Performance +3. Running benchmarks manually +4. Benchmarking with the script utility +5. How to publish the benchmark results online and use the [Ginkgo Performance Explorer (GPE)](https://ginkgo-project.github.io/gpe/) for performance analysis (optional). -5. Using the benchmark suite for performance debugging thanks to the loggers. -6. All available benchmark customization options. +6. Using the benchmark suite for performance debugging thanks to the loggers. +7. Available benchmark customization options with the script utility. ### 1: Ginkgo setup and best practice guidelines @@ -55,13 +62,16 @@ In addition, the following specific options can be considered: `overhead` LinOp. If your purpose is to check Ginkgo's overhead, make sure to try this mode. + ### 2: Using ssget to fetch the matrices -The benchmark suite tests Ginkgo's performance using the [SuiteSparse matrix -collection](https://sparse.tamu.edu/) and artificially generated matrices. The -suite sparse collection will be downloaded automatically when the benchmarks are -run. This is done thanks to the [`ssget` command-line -utility](https://github.com/ginkgo-project/ssget). +To benchmark `ginkgo`, matrices need to be provided as input in the `Matrix +Market` format. A convenient way is to run benchmark with the [SuiteSparse +matrix collection](https://sparse.tamu.edu/). A helper tool, the [`ssget` +command-line utility](https://github.com/ginkgo-project/ssget) can be used to +facilitate downloading and extracting matrices from the suitesparse collection. +When running the benchmarks with the helper script `run_all_benchmarks.sh` (or +calling `make benchmark`), the `ssget` tool is required. To install `ssget`, access the repository and copy the file `ssget` into a directory present in your `PATH` variable as per the tool's `README.md` @@ -107,7 +117,84 @@ for i in $(seq 0 $(ssget -n)); do done ``` -### 3: Benchmarking overview +### 3: Running benchmarks manually +When compiling Ginkgo with the flag `-DGINKGO_BUILD_BENCHMARKS=ON`, a suite of +executables will be generated depending on the CMake configuration. These +executables are the backbone of the benchmarking suite. Note that all of these +executables describe the available options and the required input format when +running them with the `--help` option. All executables have multiple variants +depending on the precision, by default `double` precision is used for the type +of values, but variants with `single` and `complex` (single and double) value +types are also available. Here is a non exhaustive list of the available +benchmarks: + ++ `blas/blas`: supports benchmarking many of Ginkgo's BLAS operations: dot + products, axpy, copy, etc. ++ `conversion/conversion`: conversion between matrix formats. ++ `matrix_generator/matrix_generator`: mostly allows generating block diagonal + matrices (to benchmark the block-jacobi preconditioner). ++ `matrix_statistics/matrix_statistics`: computes size and other matrix + statistics (such as variance, load imbalance, ...). ++ `preconditioner/preconditioner`: benchmarks most Ginkgo preconditioner. ++ `solver/solver`: benchmark most of Ginkgo's solvers in a non distributed + setting. ++ `sparse_blas/sparse_blas`: benchmarks Sparse BLAS operations, such as SpGEMM, + SpGEAM, transpose. ++ `spmv/spmv`: benchmarks Ginkgo's matrix formats (Sparse-Matrix Vector + product). + + +Optionally when compiling with MPI support: ++ `blas/distributed/multi_vector`: measures BLAS performance on (distributed) + multi-vectors. ++ `solver/distributed/solver`: distributed solver benchmarks. ++ `spmv/distributed/spmv`: distributed matrix Sparse-Matrix Vector (SpMV) + product benchmark. + + +All benchmarks require input data as in a `JSON` format. The json file has to +consist of exactly one array, and within that array the test cases are defined. +The exact syntax can change between executables, the `--help` option will +explain the necessary `JSON` input format. For example for the `spmv` benchmark +case, and many other benchmarks the following minimal input should be provided: + +``` +[ + { + "filename": "path/to/your/matrix", + "rhs": "path/to/your/rhs" + }, + { ... } +] +``` +The files have to be in matrix market format. + +Some benchmarks require some extra fields. For example the solver benchmarks +requires the field `"optimal": {"spmv": "matrix format (such as csr)"}`. This is +automatically populated when running the `spmv` benchmark which finds the +optimal (fastest) format among all requested formats. + +After writing the necessary data in a JSON file, the benchmark can be called by +passing in the input via stdin, i.e. + +``` +./solver < input.json +``` + +The output of our benchmarks is again JSON, and it is printed to stdout, while +our status messages are printed to stderr. So, the output can be stored with + +``` +./solver < input.json > output.json +``` + +Note that in most cases, the JSON output by our benchmarks is compatible with +other benchmarks, therefore it is possible to first call the `spmv` benchmark, +use the resulting output JSON as input to the `solver` benchmark, and finally +use the resulting solver JSON output as input to the `preconditioner` benchmark. + + +### 4: Benchmarking overview The benchmark suite is invoked using the `make benchmark` command in the build directory. Under the hood, this command simply calls the script @@ -169,7 +256,7 @@ benchmark options). Here are the most important options: thermal2 ``` -### 4: Publishing the results on Github and analyze the results with the GPE (optional) +### 5: Publishing the results on Github and analyze the results with the GPE (optional) The previous experiments generated json files for each matrices, each containing timing, iteration count, achieved precision, ... depending on the type of @@ -223,7 +310,7 @@ For the generating the plots in the GPE, here are the steps to go through: tabs allow to access the result of the processed data after invoking the processing script. -### 5: Detailed performance analysis and debugging +### 6: Detailed performance analysis and debugging Detailed performance analysis can be ran by passing the environment variable `DETAILED=1` to the benchmarking script. This detailed run is available for @@ -233,12 +320,12 @@ log the time taken by all operations. These features are also available in the to analyze Ginkgo's performance. These features are implemented thanks to the loggers located in the file -`${ginkgo_src_dir}/benchmark/utils/loggers.hpp`. Ginkgo possesses hooks at all important code -location points which can be inspected thanks to the logger. In this fashion, it -is easy to use these loggers also for tracking memory allocation sizes and other -important library aspects. +`${ginkgo_src_dir}/benchmark/utils/loggers.hpp`. Ginkgo possesses hooks at all +important code location points which can be inspected thanks to the logger. In +this fashion, it is easy to use these loggers also for tracking memory +allocation sizes and other important library aspects. -### 6: Available benchmark options +### 7: Available benchmark options There are a set amount of options available for benchmarking. Most important options can be configured through the benchmarking script itself thanks to @@ -311,8 +398,9 @@ The supported environment variables are described in the following list: * `SOLVERS_INITIAL_GUESS={rhs,0,random}` - the initial guess generation of the solvers. `rhs` uses the right-hand side, `0` uses a zero vector and `random` generates a random vector as the initial guess. -* `DETAILED={0,1}` - selects whether detailed benchmarks should be ran for the - solver benchmarks, can be either `0` (off) or `1` (on). The default is `0`. +* `DETAILED={0,1}` - selects whether detailed benchmarks should be ran. This + generally provides extra, verbose information at the cost of one or more + extra benchmark runs. It can be either `0` (off) or `1` (on). * `GPU_TIMER={true, false}` - If set to `true`, use the gpu timer, which is valid for cuda/hip executor, to measure the timing. Default is `false`. * `SOLVERS_JACOBI_MAX_BS` - sets the maximum block size for the Jacobi diff --git a/CHANGELOG.md b/CHANGELOG.md index 90834b209dc..9b5c65f9750 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,127 @@ git log --first-parent Please visit our wiki [Changelog](https://github.com/ginkgo-project/ginkgo/wiki/Changelog) for unreleased changes. +## Version 1.8.0 + +The Ginkgo team is proud to announce the new Ginkgo minor release 1.8.0. This +release brings new features such as: +- A brand new file-based configuration for Ginkgo objects: you can now construct + Ginkgo objects (solvers, preconditioners, ...) from a JSON configuration file. + This simplifies interfacing to Ginkgo as well as exploring different settings + to solve a problem. +- Expand the batched feature set with: the Batched CSR Matrix format, batched CG + solver, batched (Block-)Jacobi preconditioner, usage example and other + features such as scaling, +- New Distributed Multigrid and the PGM coarsening method, +- New CUDA and HIP kernels for Reverse Cuthill McKee (RCM) reordering +- Better Ginkgo and Kokkos interaction thanks to a mapping from simple Ginkgo + types to native Kokkos types + +and 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.16+ ++ C++14 compliant compiler ++ Linux and macOS + + GCC: 5.5+ + + clang: 3.9+ + + Intel compiler: 2019+ + + Apple Clang: 14.0 is tested. Earlier versions might also work. + + NVHPC: 22.7+ + + Cray Compiler: 14.0.1+ + + CUDA module: CMake 3.18+, and CUDA 10.1+ or NVHPC 22.7+ + + HIP module: CMake 3.21+, and ROCm 4.5+ + + DPC++ module: Intel oneAPI 2023.1+ with oneMKL and oneDPL. Set the CXX compiler to `dpcpp` or `icpx`. + + MPI: standard version 3.1+, ideally GPU Aware, for best performance ++ Windows + + MinGW: GCC 5.5+ + + Microsoft Visual Studio: VS 2019+ + + CUDA module: CUDA 10.1+, Microsoft Visual Studio + + OpenMP module: MinGW. + +### Version support changes ++ The Ginkgo license header now uses the SPDX format. [#1404](https://github.com/ginkgo-project/ginkgo/pull/1404) ++ Ginkgo changes the oneapi support to 2023.1+ [#1396](https://github.com/ginkgo-project/ginkgo/pull/1396) ++ Ginkgo's HIP backend now requires CMake 3.21 [#1334](https://github.com/ginkgo-project/ginkgo/pull/1334) + +### Interface changes + ++ The `gko::dim` single-parameter constructor is now `explicit` to avoid accidental conversion from integers [#1474](https://github.com/ginkgo-project/ginkgo/pull/1474) ++ The CMake option `GINKGO_BUILD_HWLOC` is now set to `OFF` by default, and if it is set to `ON`, then `HWLOC` is required to be available [#1513](https://github.com/ginkgo-project/ginkgo/pull/1513). + +### Behavior changes + ++ `gko::write_raw` now defaults to writing sparse output unless otherwise specified [#1533](https://github.com/ginkgo-project/ginkgo/pull/1533) ++ Ginkgo now adheres to the `--prefix` option for `cmake --install`, instead of overwriting it [#1534](https://github.com/ginkgo-project/ginkgo/pull/1534) + +### Deprecations + ++ `array::get_num_elems()` has been renamed to `get_size()` [#1400](https://github.com/ginkgo-project/ginkgo/pull/1400) ++ `matrix_data::ensure_row_major_order()` has been renamed to `sort_row_major()` [#1400](https://github.com/ginkgo-project/ginkgo/pull/1400) ++ `device_matrix_data::get_num_elems()` has been renamed to `get_num_stored_elements()` [#1400](https://github.com/ginkgo-project/ginkgo/pull/1400) ++ The CMake parameter `GINKGO_COMPILER_FLAGS` has been superseded by `CMAKE_CXX_FLAGS`, and `GINKGO_CUDA_COMPILER_FLAGS` has been superseded by `CMAKE_CUDA_FLAGS` [#1535](https://github.com/ginkgo-project/ginkgo/pull/1535) ++ The `std::initializer_list` overloads of matrix `create` methods and constructors are deprecated in favor of explicit `array` parameters [#1433](https://github.com/ginkgo-project/ginkgo/pull/1433) + +### Summary of previous deprecations ++ The `device_reset` parameter of CUDA and HIP executors no longer has an effect, and its `allocation_mode` parameters have been deprecated in favor of the `Allocator` interface. ++ The CMake parameter `GINKGO_BUILD_DPCPP` has been deprecated in favor of `GINKGO_BUILD_SYCL`. ++ The `gko::reorder::Rcm` interface has been deprecated in favor of `gko::experimental::reorder::Rcm` based on `Permutation`. ++ The Permutation class' `permute_mask` functionality. ++ Multiple functions with typos (`set_complex_subpsace()`, range functions such as `conj_operaton` etc). ++ `gko::lend()` is not necessary anymore. ++ The classes `RelativeResidualNorm` and `AbsoluteResidualNorm` are deprecated in favor of `ResidualNorm`. ++ The class `AmgxPgm` is deprecated in favor of `Pgm`. ++ Default constructors for the CSR `load_balance` and `automatical` strategies ++ The PolymorphicObject's move-semantic `copy_from` variant ++ The templated `SolverBase` class. ++ The class `MachineTopology` is deprecated in favor of `machine_topology`. ++ Logger constructors and create functions with the `executor` parameter. ++ The virtual, protected, Dense functions `compute_norm1_impl`, `add_scaled_impl`, etc. ++ Logger events for solvers and criterion without the additional `implicit_tau_sq` parameter. ++ The global `gko::solver::default_krylov_dim`, use instead `gko::solver::gmres_default_krylov_dim`. + +### Added features ++ Add a batched CG solver [#1598](https://github.com/ginkgo-project/ginkgo/pull/1598), [#1609](https://github.com/ginkgo-project/ginkgo/pull/1609) ++ Add a batched Jacobi (scalar/block) preconditioner, [#1542](https://github.com/ginkgo-project/ginkgo/pull/1542), [#1600](https://github.com/ginkgo-project/ginkgo/pull/1600) ++ Add an example for batched iterative solver [#1553](https://github.com/ginkgo-project/ginkgo/pull/1553) ++ Add `add_scaled_identity` and `scale_add` for batch matrix formats. [#1528](https://github.com/ginkgo-project/ginkgo/pull/1528) ++ Add scaling for batch objects (matrix formats and multi-vectors). [#1527](https://github.com/ginkgo-project/ginkgo/pull/1527) ++ Add a `batch::Csr` matrix format class and core and support for batched spmv kernels on CUDA, HIP and SYCL. [#1450](https://github.com/ginkgo-project/ginkgo/pull/1450) ++ Add a script for comparing benchmark JSON outputs [#1467](https://github.com/ginkgo-project/ginkgo/pull/1467) ++ Add an example for reordered preconditioned linear solver [#1465](https://github.com/ginkgo-project/ginkgo/pull/1465) ++ Add single-value access functions `load_value` and `store_value` to `array` [#1485](https://github.com/ginkgo-project/ginkgo/pull/1485) ++ Add the `BlockOperator` format to represent block-matrices [#1435](https://github.com/ginkgo-project/ginkgo/pull/1435) ++ Add CUDA and HIP kernels for Reverse Cuthill McKee (RCM) reordering [#1503](https://github.com/ginkgo-project/ginkgo/pull/1503) ++ Add FileConfig [#1389](https://github.com/ginkgo-project/ginkgo/pull/1389), [#1392](https://github.com/ginkgo-project/ginkgo/pull/1392), [#1395](https://github.com/ginkgo-project/ginkgo/pull/1395), [#1479](https://github.com/ginkgo-project/ginkgo/pull/1479), [#1480](https://github.com/ginkgo-project/ginkgo/pull/1480), [#1607](https://github.com/ginkgo-project/ginkgo/pull/1607) ++ Add Distributed Multigrid [#1269](https://github.com/ginkgo-project/ginkgo/pull/1269) and coarsening method PGM [#1403](https://github.com/ginkgo-project/ginkgo/pull/1403) ++ Add a mapping from simple Ginkgo types to native Kokkos types [#1358](https://github.com/ginkgo-project/ginkgo/pull/1358) ++ Add a segmented array class [#1545](https://github.com/ginkgo-project/ginkgo/pull/1545) ++ Add a class for mapping between global and local indexing [#1543](https://github.com/ginkgo-project/ginkgo/pull/1543) + +### Improvements + ++ Ginkgo installation now has separate `Ginkgo_Runtime` and `Ginkgo_Development` components for easier packaging [#1502](https://github.com/ginkgo-project/ginkgo/pull/1502) ++ The HIP backend now supports complex number operations for sparse matrices based on hipSPARSE [#1538](https://github.com/ginkgo-project/ginkgo/pull/1538) ++ The `create` functions are now documented explicitly instead of using the `EnableCreateMethod` mixin [#1433](https://github.com/ginkgo-project/ginkgo/pull/1433) ++ The `solver` benchmark now supports Ginkgo's binary format for right-hand side vector inputs [#1584](https://github.com/ginkgo-project/ginkgo/pull/1584) ++ The build system now uses native HIP support for CMake, which also provides support for ROCm 6.0 [#1334](https://github.com/ginkgo-project/ginkgo/pull/1334) ++ The Multigrid solver generated from `distributed::Matrix` will use a global scalar Jacobi smoother and a GMRES solver as coarse grid solver [#1612](https://github.com/ginkgo-project/ginkgo/pull/1612) + +### Fixes + ++ Compilation with libc++ was fixed [#1463](https://github.com/ginkgo-project/ginkgo/pull/1463) ++ Fix the `__cplusplus` by `_MSVC_LANG` in MSVC [#1496](https://github.com/ginkgo-project/ginkgo/pull/1496) ++ `Coo::read(const T&)` and `Csr::read(const T&)` will no longer overwrite the locally stored arrays and instead copy directly into them [#1476](https://github.com/ginkgo-project/ginkgo/pull/1476) ++ Fix the interaction of `ProfilerHook::create(_nested)_summary`, executors and GPU timers, which lead to the summary not being printed [#1509](https://github.com/ginkgo-project/ginkgo/pull/1509) ++ Fix compilation in environments where `CPATH` contains the current working directory [#1531](https://github.com/ginkgo-project/ginkgo/pull/1531) ++ Fix read from matrix-market files with CR line endings [#1557](https://github.com/ginkgo-project/ginkgo/pull/1557) ++ Fix undefined behavior that shows up with libstdc++ debug builds [#1176](https://github.com/ginkgo-project/ginkgo/pull/1176) ++ Fix for CUDA 12.4 bug and METIS detection [#1569](https://github.com/ginkgo-project/ginkgo/pull/1569) ++ Fix the pkgconfig installation with DESTDIR [#1597](https://github.com/ginkgo-project/ginkgo/pull/1597) ++ Fix various issues causing build or test failures [#1619](https://github.com/ginkgo-project/ginkgo/pull/1619) + ## Version 1.7.0 The Ginkgo team is proud to announce the new Ginkgo minor release 1.7.0. This release brings new features such as: diff --git a/CMakeLists.txt b/CMakeLists.txt index 7e2464c4088..f363d0b3744 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.16) -project(Ginkgo LANGUAGES CXX VERSION 1.8.0 DESCRIPTION "A numerical linear algebra library targeting many-core architectures") +project(Ginkgo LANGUAGES CXX VERSION 1.9.0 DESCRIPTION "A numerical linear algebra library targeting many-core architectures") set(Ginkgo_VERSION_TAG "develop") set(PROJECT_VERSION_TAG ${Ginkgo_VERSION_TAG}) # Cuda and Hip also look for Threads. Set it before any find_package to ensure the Threads setting is not changed. diff --git a/README.md b/README.md index f9e469c7a26..36235ff53d1 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,7 @@ following: ### Windows -* _cmake 3.13+_ +* _cmake 3.16+_ * C++14 compliant 64-bit compiler: * _MinGW : gcc 5.5+_ * _Microsoft Visual Studio : VS 2019+_ diff --git a/cmake/create_test.cmake b/cmake/create_test.cmake index 7fdbe7d4e53..0aa93a3b141 100644 --- a/cmake/create_test.cmake +++ b/cmake/create_test.cmake @@ -91,13 +91,21 @@ function(ginkgo_add_test test_name test_target_name) endif() set_target_properties(${test_target_name} PROPERTIES OUTPUT_NAME ${test_binary_name}) if (add_test_MPI_SIZE) - add_test(NAME ${REL_BINARY_DIR}/${test_binary_name} - COMMAND - ${MPIEXEC_EXECUTABLE} - ${MPIEXEC_NUMPROC_FLAG} - ${add_test_MPI_SIZE} - "$" - WORKING_DIRECTORY "$") + if (add_test_MPI_SIZE LESS_EQUAL MPIEXEC_MAX_NUMPROCS) + add_test(NAME ${REL_BINARY_DIR}/${test_binary_name} + COMMAND + ${MPIEXEC_EXECUTABLE} + ${MPIEXEC_NUMPROC_FLAG} + ${add_test_MPI_SIZE} + "$" + WORKING_DIRECTORY "$") + else() + message( + WARNING + "Disabling test: ${test_target_name}. Only ${MPIEXEC_MAX_NUMPROCS} " + "MPI processes available but ${add_test_MPI_SIZE} processes required." + ) + endif() else() add_test(NAME ${REL_BINARY_DIR}/${test_binary_name} COMMAND ${test_target_name} diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index 6fc351bc626..292cce89902 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -1,7 +1,22 @@ add_subdirectory(device_hooks) # placeholders for disabled modules -add_library(ginkgo "") -target_sources(ginkgo +set(config_source + config/factorization_config.cpp + config/multigrid_config.cpp + config/preconditioner_config.cpp + config/registry.cpp + config/solver_config.cpp +) +# MSVC: To solve LNK1189, we separate the library as a workaround +# To make ginkgo still be the major library, we make the original to ginkgo_core in MSVC/shared +# TODO: should think another way to solve it like dllexport or def file +set(ginkgo_core "ginkgo") +if(MSVC AND BUILD_SHARED_LIBS) + set(ginkgo_core "ginkgo_core") +endif() + +add_library(${ginkgo_core} "") +target_sources(${ginkgo_core} PRIVATE base/array.cpp base/batch_multi_vector.cpp @@ -22,12 +37,7 @@ target_sources(ginkgo c_api.cpp config/config.cpp config/config_helper.cpp - config/factorization_config.cpp - config/preconditioner_config.cpp config/property_tree.cpp - config/registry.cpp - config/multigrid_config.cpp - config/solver_config.cpp config/stop_config.cpp config/type_descriptor.cpp distributed/index_map.cpp @@ -109,15 +119,15 @@ target_sources(ginkgo ) if(GINKGO_HAVE_PAPI_SDE) - target_sources(ginkgo PRIVATE log/papi.cpp) + target_sources(${ginkgo_core} PRIVATE log/papi.cpp) endif() if(GINKGO_HAVE_METIS) - target_sources(ginkgo PRIVATE reorder/nested_dissection.cpp) + target_sources(${ginkgo_core} PRIVATE reorder/nested_dissection.cpp) endif() if(GINKGO_BUILD_MPI) - target_sources(ginkgo + target_sources(${ginkgo_core} PRIVATE mpi/exception.cpp distributed/matrix.cpp @@ -126,38 +136,55 @@ if(GINKGO_BUILD_MPI) distributed/preconditioner/schwarz.cpp) endif() -ginkgo_compile_features(ginkgo) +# MSVC/shared: make ginkgo be the major library +if(MSVC AND BUILD_SHARED_LIBS) + add_library(ginkgo "") + target_sources(ginkgo PRIVATE ${config_source}) + ginkgo_compile_features(ginkgo) + ginkgo_default_includes(ginkgo) + ginkgo_install_library(ginkgo) + if(GINKGO_CHECK_CIRCULAR_DEPS) + ginkgo_check_headers(ginkgo "") + endif() +else() + target_sources(${ginkgo_core} PRIVATE ${config_source}) +endif() + +ginkgo_compile_features(${ginkgo_core}) # add a namespace alias so Ginkgo can always be included as Ginkgo::ginkgo # regardless of whether it is installed or added as a subdirectory add_library(Ginkgo::ginkgo ALIAS ginkgo) -target_link_libraries(ginkgo +if(MSVC AND BUILD_SHARED_LIBS) + target_link_libraries(ginkgo PUBLIC ${ginkgo_core}) +endif() +target_link_libraries(${ginkgo_core} PUBLIC ginkgo_device ginkgo_omp ginkgo_cuda ginkgo_reference ginkgo_hip ginkgo_dpcpp) if(GINKGO_HAVE_PAPI_SDE) - target_link_libraries(ginkgo PUBLIC PAPI::PAPI_SDE) + target_link_libraries(${ginkgo_core} PUBLIC PAPI::PAPI_SDE) endif() if(GINKGO_HAVE_TAU) - target_link_libraries(ginkgo PRIVATE perfstubs) + target_link_libraries(${ginkgo_core} PRIVATE perfstubs) endif() if(GINKGO_HAVE_VTUNE) - target_link_libraries(ginkgo PRIVATE VTune::ITT) + target_link_libraries(${ginkgo_core} PRIVATE VTune::ITT) endif() if(GINKGO_HAVE_METIS) - target_link_libraries(ginkgo PRIVATE METIS::METIS) + target_link_libraries(${ginkgo_core} PRIVATE METIS::METIS) endif() if(GINKGO_BUILD_MPI) - target_link_libraries(ginkgo PUBLIC MPI::MPI_CXX) + target_link_libraries(${ginkgo_core} PUBLIC MPI::MPI_CXX) endif() -ginkgo_default_includes(ginkgo) -ginkgo_install_library(ginkgo) +ginkgo_default_includes(${ginkgo_core}) +ginkgo_install_library(${ginkgo_core}) if(GINKGO_CHECK_CIRCULAR_DEPS) - ginkgo_check_headers(ginkgo "") + ginkgo_check_headers(${ginkgo_core} "") endif() if(GINKGO_BUILD_TESTS) @@ -166,7 +193,7 @@ endif() if(GINKGO_DEVEL_TOOLS AND CMAKE_SYSTEM_NAME STREQUAL "Linux" AND BUILD_SHARED_LIBS) # Copy pretty-printer next to library - add_custom_command(TARGET ginkgo POST_BUILD + add_custom_command(TARGET ${ginkgo_core} POST_BUILD COMMAND "${CMAKE_COMMAND}" -E copy "${Ginkgo_SOURCE_DIR}/dev_tools/scripts/gdb-ginkgo.py" "$-gdb.py" diff --git a/core/reorder/amd.cpp b/core/reorder/amd.cpp index 79b44abf536..1b3198b248f 100644 --- a/core/reorder/amd.cpp +++ b/core/reorder/amd.cpp @@ -157,7 +157,8 @@ std::unique_ptr Amd::generate_impl( // row workspace const auto col_idxs_plus_workspace_size = nnz + nnz / 5 + 2 * num_rows; array col_idxs_plus_workspace{ - host_exec, col_idxs_plus_workspace_size + 6 * num_rows}; + host_exec, + static_cast(col_idxs_plus_workspace_size + 6 * num_rows)}; host_exec->copy_from(exec, nnz, pattern->get_const_col_idxs(), col_idxs_plus_workspace.get_data()); diff --git a/core/test/gtest/CMakeLists.txt b/core/test/gtest/CMakeLists.txt index cdfc67fafdf..56f83181375 100644 --- a/core/test/gtest/CMakeLists.txt +++ b/core/test/gtest/CMakeLists.txt @@ -9,6 +9,12 @@ function(add_gtest_main suffix definitions) target_compile_definitions(ginkgo_gtest_main_mpi${suffix} PRIVATE ${definitions}) ginkgo_compile_features(ginkgo_gtest_main_mpi${suffix}) endif() + if (GINKGO_BUILD_OMP) + target_link_libraries(ginkgo_gtest_main${suffix} PUBLIC OpenMP::OpenMP_CXX) + if (GINKGO_BUILD_MPI) + target_link_libraries(ginkgo_gtest_main_mpi${suffix} PUBLIC OpenMP::OpenMP_CXX) + endif() + endif() endfunction() add_gtest_main("" "") diff --git a/examples/adaptiveprecision-blockjacobi/CMakeLists.txt b/examples/adaptiveprecision-blockjacobi/CMakeLists.txt index 8edbdc88af0..7b61bf6a175 100644 --- a/examples/adaptiveprecision-blockjacobi/CMakeLists.txt +++ b/examples/adaptiveprecision-blockjacobi/CMakeLists.txt @@ -3,7 +3,7 @@ project(adaptiveprecision-blockjacobi) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() add_executable(adaptiveprecision-blockjacobi adaptiveprecision-blockjacobi.cpp) diff --git a/examples/batched-solver/CMakeLists.txt b/examples/batched-solver/CMakeLists.txt index 33c3d332b96..cc6b694a54a 100644 --- a/examples/batched-solver/CMakeLists.txt +++ b/examples/batched-solver/CMakeLists.txt @@ -3,7 +3,7 @@ project(batched-solver) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() add_executable(batched-solver batched-solver.cpp) diff --git a/examples/build-setup.sh b/examples/build-setup.sh index c4fa523640f..c153be6a77f 100755 --- a/examples/build-setup.sh +++ b/examples/build-setup.sh @@ -3,7 +3,7 @@ # copy libraries LIBRARY_NAMES="ginkgo ginkgo_reference ginkgo_omp ginkgo_cuda ginkgo_hip ginkgo_dpcpp ginkgo_device" SUFFIXES=".so .dylib .dll d.so d.dylib d.dll" -VERSION="1.8.0" +VERSION="1.9.0" for name in ${LIBRARY_NAMES}; do for suffix in ${SUFFIXES}; do cp ${BUILD_DIR}/lib/lib${name}${suffix}.${VERSION} \ diff --git a/examples/cb-gmres/CMakeLists.txt b/examples/cb-gmres/CMakeLists.txt index 8dcc43376b4..f4283c45a34 100644 --- a/examples/cb-gmres/CMakeLists.txt +++ b/examples/cb-gmres/CMakeLists.txt @@ -3,7 +3,7 @@ project(cb-gmres) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() add_executable(cb-gmres cb-gmres.cpp) diff --git a/examples/custom-logger/CMakeLists.txt b/examples/custom-logger/CMakeLists.txt index 2278e0848d2..ef355c2ebb7 100644 --- a/examples/custom-logger/CMakeLists.txt +++ b/examples/custom-logger/CMakeLists.txt @@ -3,7 +3,7 @@ project(custom-logger) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() add_executable(custom-logger custom-logger.cpp) diff --git a/examples/custom-matrix-format/CMakeLists.txt b/examples/custom-matrix-format/CMakeLists.txt index ad6b9c2950f..6881d6448d0 100644 --- a/examples/custom-matrix-format/CMakeLists.txt +++ b/examples/custom-matrix-format/CMakeLists.txt @@ -3,7 +3,7 @@ project(custom-matrix-format CXX CUDA) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) find_package(OpenMP 3.0 REQUIRED) endif() diff --git a/examples/custom-stopping-criterion/CMakeLists.txt b/examples/custom-stopping-criterion/CMakeLists.txt index d77d3d2247a..1cecf5b87ec 100644 --- a/examples/custom-stopping-criterion/CMakeLists.txt +++ b/examples/custom-stopping-criterion/CMakeLists.txt @@ -3,7 +3,7 @@ project(custom-stopping-criterion) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads REQUIRED) endif() diff --git a/examples/ginkgo-overhead/CMakeLists.txt b/examples/ginkgo-overhead/CMakeLists.txt index 382a6813cab..5f888d77aa7 100644 --- a/examples/ginkgo-overhead/CMakeLists.txt +++ b/examples/ginkgo-overhead/CMakeLists.txt @@ -3,7 +3,7 @@ project(ginkgo-overhead) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() add_executable(ginkgo-overhead ginkgo-overhead.cpp) diff --git a/examples/ginkgo-ranges/CMakeLists.txt b/examples/ginkgo-ranges/CMakeLists.txt index e0b3dfcad99..c4f45e63211 100644 --- a/examples/ginkgo-ranges/CMakeLists.txt +++ b/examples/ginkgo-ranges/CMakeLists.txt @@ -3,7 +3,7 @@ project(ginkgo-ranges) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() add_executable(ginkgo-ranges ginkgo-ranges.cpp) target_link_libraries(ginkgo-ranges Ginkgo::ginkgo) diff --git a/examples/heat-equation/CMakeLists.txt b/examples/heat-equation/CMakeLists.txt index 0029b195613..d7d7a994e33 100644 --- a/examples/heat-equation/CMakeLists.txt +++ b/examples/heat-equation/CMakeLists.txt @@ -3,7 +3,7 @@ project(heat-equation) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() find_package(OpenCV REQUIRED) diff --git a/examples/ilu-preconditioned-solver/CMakeLists.txt b/examples/ilu-preconditioned-solver/CMakeLists.txt index 07485b6afd8..fa84e6163a2 100644 --- a/examples/ilu-preconditioned-solver/CMakeLists.txt +++ b/examples/ilu-preconditioned-solver/CMakeLists.txt @@ -3,7 +3,7 @@ project(ilu-preconditioned-solver) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() add_executable(ilu-preconditioned-solver ilu-preconditioned-solver.cpp) diff --git a/examples/inverse-iteration/CMakeLists.txt b/examples/inverse-iteration/CMakeLists.txt index 5b2a1872b72..3f70d329981 100644 --- a/examples/inverse-iteration/CMakeLists.txt +++ b/examples/inverse-iteration/CMakeLists.txt @@ -3,7 +3,7 @@ project(inverse-iteration) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() add_executable(inverse-iteration inverse-iteration.cpp) diff --git a/examples/ir-ilu-preconditioned-solver/CMakeLists.txt b/examples/ir-ilu-preconditioned-solver/CMakeLists.txt index 178a0fa0044..37bcd36e9f6 100644 --- a/examples/ir-ilu-preconditioned-solver/CMakeLists.txt +++ b/examples/ir-ilu-preconditioned-solver/CMakeLists.txt @@ -3,7 +3,7 @@ project(ir-ilu-preconditioned-solver) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() add_executable(ir-ilu-preconditioned-solver ir-ilu-preconditioned-solver.cpp) diff --git a/examples/iterative-refinement/CMakeLists.txt b/examples/iterative-refinement/CMakeLists.txt index ee80ee7d008..2dc7bef6b79 100644 --- a/examples/iterative-refinement/CMakeLists.txt +++ b/examples/iterative-refinement/CMakeLists.txt @@ -3,7 +3,7 @@ project(iterative-refinement) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() add_executable(iterative-refinement iterative-refinement.cpp) diff --git a/examples/kokkos-assembly/CMakeLists.txt b/examples/kokkos-assembly/CMakeLists.txt index 39c4cabd57b..45bf7ffa6f9 100644 --- a/examples/kokkos-assembly/CMakeLists.txt +++ b/examples/kokkos-assembly/CMakeLists.txt @@ -3,7 +3,7 @@ project(kokkos-assembly CXX) # We only need to find Ginkgo if we build this example stand-alone if(NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() find_package(Kokkos 4.1.00 REQUIRED) diff --git a/examples/minimal-cuda-solver/CMakeLists.txt b/examples/minimal-cuda-solver/CMakeLists.txt index 4262f98e719..84088a76e7f 100644 --- a/examples/minimal-cuda-solver/CMakeLists.txt +++ b/examples/minimal-cuda-solver/CMakeLists.txt @@ -3,7 +3,7 @@ project(minimal-cuda-solver) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() add_executable(minimal-cuda-solver minimal-cuda-solver.cpp) diff --git a/examples/mixed-multigrid-preconditioned-solver/CMakeLists.txt b/examples/mixed-multigrid-preconditioned-solver/CMakeLists.txt index 3ca157faeb5..182d4dd155d 100644 --- a/examples/mixed-multigrid-preconditioned-solver/CMakeLists.txt +++ b/examples/mixed-multigrid-preconditioned-solver/CMakeLists.txt @@ -3,7 +3,7 @@ project(mixed-multigrid-preconditioned-solver) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() add_executable(mixed-multigrid-preconditioned-solver mixed-multigrid-preconditioned-solver.cpp) diff --git a/examples/mixed-multigrid-solver/CMakeLists.txt b/examples/mixed-multigrid-solver/CMakeLists.txt index 0e4eda7e5af..b143cec6449 100644 --- a/examples/mixed-multigrid-solver/CMakeLists.txt +++ b/examples/mixed-multigrid-solver/CMakeLists.txt @@ -3,7 +3,7 @@ project(mixed-multigrid-solver) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() add_executable(mixed-multigrid-solver mixed-multigrid-solver.cpp) diff --git a/examples/mixed-precision-ir/CMakeLists.txt b/examples/mixed-precision-ir/CMakeLists.txt index c540a7d00b6..e9cfc26abd7 100644 --- a/examples/mixed-precision-ir/CMakeLists.txt +++ b/examples/mixed-precision-ir/CMakeLists.txt @@ -3,7 +3,7 @@ project(mixed-precision-ir) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() add_executable(mixed-precision-ir mixed-precision-ir.cpp) diff --git a/examples/mixed-spmv/CMakeLists.txt b/examples/mixed-spmv/CMakeLists.txt index e65ab60186b..0feadf1e038 100644 --- a/examples/mixed-spmv/CMakeLists.txt +++ b/examples/mixed-spmv/CMakeLists.txt @@ -3,7 +3,7 @@ project(mixed-spmv) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() add_executable(mixed-spmv mixed-spmv.cpp) diff --git a/examples/multigrid-preconditioned-solver-customized/CMakeLists.txt b/examples/multigrid-preconditioned-solver-customized/CMakeLists.txt index a9c85fdcb21..7c0d93efe42 100644 --- a/examples/multigrid-preconditioned-solver-customized/CMakeLists.txt +++ b/examples/multigrid-preconditioned-solver-customized/CMakeLists.txt @@ -3,7 +3,7 @@ project(multigrid-preconditioned-solver-customized) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() add_executable(multigrid-preconditioned-solver-customized multigrid-preconditioned-solver-customized.cpp) diff --git a/examples/multigrid-preconditioned-solver/CMakeLists.txt b/examples/multigrid-preconditioned-solver/CMakeLists.txt index e5938656169..2c73b3fa037 100644 --- a/examples/multigrid-preconditioned-solver/CMakeLists.txt +++ b/examples/multigrid-preconditioned-solver/CMakeLists.txt @@ -3,7 +3,7 @@ project(multigrid-preconditioned-solver) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() add_executable(multigrid-preconditioned-solver multigrid-preconditioned-solver.cpp) diff --git a/examples/nine-pt-stencil-solver/CMakeLists.txt b/examples/nine-pt-stencil-solver/CMakeLists.txt index a29230fab2d..64743593c70 100644 --- a/examples/nine-pt-stencil-solver/CMakeLists.txt +++ b/examples/nine-pt-stencil-solver/CMakeLists.txt @@ -3,7 +3,7 @@ project(nine-pt-stencil-solver) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() add_executable(nine-pt-stencil-solver nine-pt-stencil-solver.cpp) diff --git a/examples/papi-logging/CMakeLists.txt b/examples/papi-logging/CMakeLists.txt index 2c71316b37b..37b5a1352df 100644 --- a/examples/papi-logging/CMakeLists.txt +++ b/examples/papi-logging/CMakeLists.txt @@ -3,7 +3,7 @@ project(papi-logging) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() if (NOT GINKGO_HAVE_PAPI_SDE) diff --git a/examples/par-ilu-convergence/CMakeLists.txt b/examples/par-ilu-convergence/CMakeLists.txt index f285ccf415e..f8f0f037c16 100644 --- a/examples/par-ilu-convergence/CMakeLists.txt +++ b/examples/par-ilu-convergence/CMakeLists.txt @@ -3,7 +3,7 @@ project(par-ilu-convergence) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() add_executable(par-ilu-convergence par-ilu-convergence.cpp) diff --git a/examples/performance-debugging/CMakeLists.txt b/examples/performance-debugging/CMakeLists.txt index 2f9ea970cbf..36e906553fa 100644 --- a/examples/performance-debugging/CMakeLists.txt +++ b/examples/performance-debugging/CMakeLists.txt @@ -3,7 +3,7 @@ project(performance-debugging) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() add_executable(performance-debugging performance-debugging.cpp) diff --git a/examples/poisson-solver/CMakeLists.txt b/examples/poisson-solver/CMakeLists.txt index f3ae7a3353b..1bc92aa2c9b 100644 --- a/examples/poisson-solver/CMakeLists.txt +++ b/examples/poisson-solver/CMakeLists.txt @@ -3,7 +3,7 @@ project(poisson-solver) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() add_executable(poisson-solver poisson-solver.cpp) diff --git a/examples/preconditioned-solver/CMakeLists.txt b/examples/preconditioned-solver/CMakeLists.txt index 60b2b7a35d5..09f22537619 100644 --- a/examples/preconditioned-solver/CMakeLists.txt +++ b/examples/preconditioned-solver/CMakeLists.txt @@ -3,7 +3,7 @@ project(preconditioned-solver) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() add_executable(preconditioned-solver preconditioned-solver.cpp) target_link_libraries(preconditioned-solver Ginkgo::ginkgo) diff --git a/examples/preconditioner-export/CMakeLists.txt b/examples/preconditioner-export/CMakeLists.txt index e7f07c89608..f928859bd1a 100644 --- a/examples/preconditioner-export/CMakeLists.txt +++ b/examples/preconditioner-export/CMakeLists.txt @@ -3,7 +3,7 @@ project(preconditioner-export) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() add_executable(preconditioner-export preconditioner-export.cpp) diff --git a/examples/reordered-preconditioned-solver/CMakeLists.txt b/examples/reordered-preconditioned-solver/CMakeLists.txt index 17c17f2b71c..bfaceef782a 100644 --- a/examples/reordered-preconditioned-solver/CMakeLists.txt +++ b/examples/reordered-preconditioned-solver/CMakeLists.txt @@ -3,7 +3,7 @@ project(reordered-preconditioned-solver) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() add_executable(reordered-preconditioned-solver reordered-preconditioned-solver.cpp) target_link_libraries(reordered-preconditioned-solver Ginkgo::ginkgo) diff --git a/examples/schroedinger-splitting/CMakeLists.txt b/examples/schroedinger-splitting/CMakeLists.txt index 730f9c415e9..b782095bdbd 100644 --- a/examples/schroedinger-splitting/CMakeLists.txt +++ b/examples/schroedinger-splitting/CMakeLists.txt @@ -3,7 +3,7 @@ project(schroedinger-splitting) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() find_package(OpenCV REQUIRED) diff --git a/examples/simple-solver-logging/CMakeLists.txt b/examples/simple-solver-logging/CMakeLists.txt index 6b54d3af791..ef36b7ab041 100644 --- a/examples/simple-solver-logging/CMakeLists.txt +++ b/examples/simple-solver-logging/CMakeLists.txt @@ -3,7 +3,7 @@ project(simple-solver-logging) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() add_executable(simple-solver-logging simple-solver-logging.cpp) diff --git a/examples/simple-solver/CMakeLists.txt b/examples/simple-solver/CMakeLists.txt index b7d7b15df78..2d274f50f81 100644 --- a/examples/simple-solver/CMakeLists.txt +++ b/examples/simple-solver/CMakeLists.txt @@ -3,7 +3,7 @@ project(simple-solver) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() add_executable(simple-solver simple-solver.cpp) diff --git a/examples/three-pt-stencil-solver/CMakeLists.txt b/examples/three-pt-stencil-solver/CMakeLists.txt index ab456f062ae..bd7ce57a171 100644 --- a/examples/three-pt-stencil-solver/CMakeLists.txt +++ b/examples/three-pt-stencil-solver/CMakeLists.txt @@ -3,7 +3,7 @@ project(three-pt-stencil-solver) # We only need to find Ginkgo if we build this example stand-alone if (NOT GINKGO_BUILD_EXAMPLES) - find_package(Ginkgo 1.8.0 REQUIRED) + find_package(Ginkgo 1.9.0 REQUIRED) endif() add_executable(three-pt-stencil-solver three-pt-stencil-solver.cpp) diff --git a/third_party/gtest/CMakeLists.txt b/third_party/gtest/CMakeLists.txt index 378a7cdc705..fb0407ba215 100644 --- a/third_party/gtest/CMakeLists.txt +++ b/third_party/gtest/CMakeLists.txt @@ -3,7 +3,7 @@ include(FetchContent) FetchContent_Declare( googletest GIT_REPOSITORY https://github.com/google/googletest.git - GIT_TAG release-1.12.1 + GIT_TAG v1.14.0 ) # need to set the variables in CACHE due to CMP0077 set(gtest_disable_pthreads ON CACHE INTERNAL "") diff --git a/third_party/nlohmann_json/CMakeLists.txt b/third_party/nlohmann_json/CMakeLists.txt index 6f413e458b9..dbc43660bbe 100644 --- a/third_party/nlohmann_json/CMakeLists.txt +++ b/third_party/nlohmann_json/CMakeLists.txt @@ -3,7 +3,7 @@ include(FetchContent) FetchContent_Declare( nlohmann_json GIT_REPOSITORY https://github.com/nlohmann/json.git - GIT_TAG v3.9.1 + GIT_TAG v3.11.3 ) set(JSON_BuildTests OFF CACHE INTERNAL "") set(JSON_Install OFF CACHE INTERNAL "")