Merge branch 'develop' into develop
This commit is contained in:
@ -1078,12 +1078,15 @@ if(BUILD_TOOLS)
|
||||
message(STATUS "<<< Building Tools >>>")
|
||||
endif()
|
||||
if(BUILD_LAMMPS_GUI)
|
||||
message(STATUS "<<< Building LAMMPS GUI >>>")
|
||||
message(STATUS "<<< Building LAMMPS-GUI >>>")
|
||||
if(LAMMPS_GUI_USE_PLUGIN)
|
||||
message(STATUS "Loading LAMMPS library as plugin at run time")
|
||||
else()
|
||||
message(STATUS "Linking LAMMPS library at compile time")
|
||||
endif()
|
||||
if(BUILD_WHAM)
|
||||
message(STATUS "<<< Building WHAM >>>")
|
||||
endif()
|
||||
endif()
|
||||
if(ENABLE_TESTING)
|
||||
message(STATUS "<<< Building Unit Tests >>>")
|
||||
|
||||
@ -7,26 +7,13 @@ endif()
|
||||
|
||||
########################################################################
|
||||
# consistency checks and Kokkos options/settings required by LAMMPS
|
||||
if(Kokkos_ENABLE_CUDA)
|
||||
option(Kokkos_ENABLE_IMPL_CUDA_MALLOC_ASYNC "CUDA asynchronous malloc support" OFF)
|
||||
mark_as_advanced(Kokkos_ENABLE_IMPL_CUDA_MALLOC_ASYNC)
|
||||
if(Kokkos_ENABLE_IMPL_CUDA_MALLOC_ASYNC)
|
||||
message(STATUS "KOKKOS: CUDA malloc async support enabled")
|
||||
else()
|
||||
message(STATUS "KOKKOS: CUDA malloc async support disabled")
|
||||
endif()
|
||||
endif()
|
||||
if(Kokkos_ENABLE_HIP)
|
||||
option(Kokkos_ENABLE_HIP_MULTIPLE_KERNEL_INSTANTIATIONS "Enable multiple kernel instantiations with HIP" ON)
|
||||
mark_as_advanced(Kokkos_ENABLE_HIP_MULTIPLE_KERNEL_INSTANTIATIONS)
|
||||
option(Kokkos_ENABLE_ROCTHRUST "Use RoCThrust library" ON)
|
||||
mark_as_advanced(Kokkos_ENABLE_ROCTHRUST)
|
||||
|
||||
if(Kokkos_ARCH_AMD_GFX942 OR Kokkos_ARCH_AMD_GFX940)
|
||||
option(Kokkos_ENABLE_IMPL_HIP_UNIFIED_MEMORY "Enable unified memory with HIP" ON)
|
||||
mark_as_advanced(Kokkos_ENABLE_IMPL_HIP_UNIFIED_MEMORY)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Adding OpenMP compiler flags without the checks done for
|
||||
# BUILD_OMP can result in compile failures. Enforce consistency.
|
||||
if(Kokkos_ENABLE_OPENMP)
|
||||
@ -70,8 +57,8 @@ if(DOWNLOAD_KOKKOS)
|
||||
list(APPEND KOKKOS_LIB_BUILD_ARGS "-DCMAKE_CXX_EXTENSIONS=${CMAKE_CXX_EXTENSIONS}")
|
||||
list(APPEND KOKKOS_LIB_BUILD_ARGS "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}")
|
||||
include(ExternalProject)
|
||||
set(KOKKOS_URL "https://github.com/kokkos/kokkos/archive/4.4.01.tar.gz" CACHE STRING "URL for KOKKOS tarball")
|
||||
set(KOKKOS_MD5 "de6ee80d00b6212b02bfb7f1e71a8392" CACHE STRING "MD5 checksum of KOKKOS tarball")
|
||||
set(KOKKOS_URL "https://github.com/kokkos/kokkos/archive/4.5.01.tar.gz" CACHE STRING "URL for KOKKOS tarball")
|
||||
set(KOKKOS_MD5 "4d832aa0284169d9e3fbae3165286bc6" CACHE STRING "MD5 checksum of KOKKOS tarball")
|
||||
mark_as_advanced(KOKKOS_URL)
|
||||
mark_as_advanced(KOKKOS_MD5)
|
||||
GetFallbackURL(KOKKOS_URL KOKKOS_FALLBACK)
|
||||
@ -96,7 +83,7 @@ if(DOWNLOAD_KOKKOS)
|
||||
add_dependencies(LAMMPS::KOKKOSCORE kokkos_build)
|
||||
add_dependencies(LAMMPS::KOKKOSCONTAINERS kokkos_build)
|
||||
elseif(EXTERNAL_KOKKOS)
|
||||
find_package(Kokkos 4.4.01 REQUIRED CONFIG)
|
||||
find_package(Kokkos 4.5.01 REQUIRED CONFIG)
|
||||
target_link_libraries(lammps PRIVATE Kokkos::kokkos)
|
||||
else()
|
||||
set(LAMMPS_LIB_KOKKOS_SRC_DIR ${LAMMPS_LIB_SOURCE_DIR}/kokkos)
|
||||
|
||||
@ -160,7 +160,7 @@ with the OpenMP 3.1 semantics used in LAMMPS for maximal compatibility
|
||||
with compiler versions in use. If compilation with OpenMP enabled fails
|
||||
because of your compiler requiring strict OpenMP 4.0 semantics, you can
|
||||
change the behavior by adding ``-D LAMMPS_OMP_COMPAT=4`` to the
|
||||
``LMP_INC`` variable in your makefile, or add it to the command line
|
||||
``LMP_INC`` variable in your makefile, or add it to the command-line flags
|
||||
while configuring with CMake. LAMMPS will auto-detect a suitable setting
|
||||
for most GNU, Clang, and Intel compilers.
|
||||
|
||||
@ -502,6 +502,8 @@ using CMake or Make.
|
||||
# chain.x, micelle2d.x, msi2lmp, phana,
|
||||
# stl_bin2txt
|
||||
-D BUILD_LAMMPS_GUI=value # yes or no (default). Build LAMMPS-GUI
|
||||
-D BUILD_WHAM=value # yes (default). Download and build WHAM;
|
||||
# only available for BUILD_LAMMPS_GUI=yes
|
||||
|
||||
The generated binaries will also become part of the LAMMPS installation
|
||||
(see below).
|
||||
|
||||
@ -8,7 +8,7 @@ packages. Links to those pages on the :doc:`Build overview <Build>`
|
||||
page.
|
||||
|
||||
The following text assumes some familiarity with CMake and focuses on
|
||||
using the command line tool ``cmake`` and what settings are supported
|
||||
using the command-line tool ``cmake`` and what settings are supported
|
||||
for building LAMMPS. A more detailed tutorial on how to use CMake
|
||||
itself, the text mode or graphical user interface, to change the
|
||||
generated output files for different build tools and development
|
||||
@ -42,9 +42,9 @@ that want to modify or extend LAMMPS.
|
||||
and adapt the LAMMPS default build configuration accordingly.
|
||||
- CMake can generate files for different build tools and integrated
|
||||
development environments (IDE).
|
||||
- CMake supports customization of settings with a command line, text
|
||||
- CMake supports customization of settings with a command-line, text
|
||||
mode, or graphical user interface. No manual editing of files,
|
||||
knowledge of file formats or complex command line syntax is required.
|
||||
knowledge of file formats or complex command-line syntax is required.
|
||||
- All enabled components are compiled in a single build operation.
|
||||
- Automated dependency tracking for all files and configuration options.
|
||||
- Support for true out-of-source compilation. Multiple configurations
|
||||
@ -68,7 +68,7 @@ that purpose you can use either the command-line utility ``cmake`` (or
|
||||
graphical utility ``cmake-gui``, or use them interchangeably. The
|
||||
second step is then the compilation and linking of all objects,
|
||||
libraries, and executables using the selected build tool. Here is a
|
||||
minimal example using the command line version of CMake to build LAMMPS
|
||||
minimal example using the command-line version of CMake to build LAMMPS
|
||||
with no add-on packages enabled and no customization:
|
||||
|
||||
.. code-block:: bash
|
||||
@ -131,7 +131,7 @@ file called ``CMakeLists.txt`` (for LAMMPS it is located in the
|
||||
configuration step. The cache file contains all current CMake settings.
|
||||
|
||||
To modify settings, enable or disable features, you need to set
|
||||
*variables* with either the ``-D`` command line flag (``-D
|
||||
*variables* with either the ``-D`` command-line flag (``-D
|
||||
VARIABLE1_NAME=value``) or change them in the text mode of the graphical
|
||||
user interface. The ``-D`` flag can be used several times in one command.
|
||||
|
||||
@ -141,11 +141,11 @@ a different compiler tool chain. Those are loaded with the ``-C`` flag
|
||||
(``-C ../cmake/presets/basic.cmake``). This step would only be needed
|
||||
once, as the settings from the preset files are stored in the
|
||||
``CMakeCache.txt`` file. It is also possible to customize the build
|
||||
by adding one or more ``-D`` flags to the CMake command line.
|
||||
by adding one or more ``-D`` flags to the CMake command.
|
||||
|
||||
Generating files for alternate build tools (e.g. Ninja) and project files
|
||||
for IDEs like Eclipse, CodeBlocks, or Kate can be selected using the ``-G``
|
||||
command line flag. A list of available generator settings for your
|
||||
command-line flag. A list of available generator settings for your
|
||||
specific CMake version is given when running ``cmake --help``.
|
||||
|
||||
.. _cmake_multiconfig:
|
||||
|
||||
@ -263,9 +263,9 @@ will be skipped if prerequisite features are not available in LAMMPS.
|
||||
time. Preference is given to parts of the code base that are easy to
|
||||
test or commonly used.
|
||||
|
||||
Tests as shown by the ``ctest`` program are command lines defined in the
|
||||
Tests as shown by the ``ctest`` program are commands defined in the
|
||||
``CMakeLists.txt`` files in the ``unittest`` directory tree. A few
|
||||
tests simply execute LAMMPS with specific command line flags and check
|
||||
tests simply execute LAMMPS with specific command-line flags and check
|
||||
the output to the screen for expected content. A large number of unit
|
||||
tests are special tests programs using the `GoogleTest framework
|
||||
<https://github.com/google/googletest/>`_ and linked to the LAMMPS
|
||||
@ -420,7 +420,7 @@ during MD timestepping and manipulate per-atom properties like
|
||||
positions, velocities, and forces. For those fix styles, testing can be
|
||||
done in a very similar fashion as for force fields and thus there is a
|
||||
test program `test_fix_timestep` that shares a lot of code, properties,
|
||||
and command line flags with the force field style testers described in
|
||||
and command-line flags with the force field style testers described in
|
||||
the previous section.
|
||||
|
||||
This tester will set up a small molecular system run with verlet run
|
||||
@ -642,10 +642,10 @@ The following target are available for both, GNU make and CMake:
|
||||
|
||||
.. _gh-cli:
|
||||
|
||||
GitHub command line interface
|
||||
GitHub command-line interface
|
||||
-----------------------------
|
||||
|
||||
GitHub has developed a `command line tool <https://cli.github.com>`_
|
||||
GitHub has developed a `command-line tool <https://cli.github.com>`_
|
||||
to interact with the GitHub website via a command called ``gh``.
|
||||
This is extremely convenient when working with a Git repository hosted
|
||||
on GitHub (like LAMMPS). It is thus highly recommended to install it
|
||||
|
||||
@ -209,7 +209,7 @@ necessary for ``hipcc`` and the linker to work correctly.
|
||||
Using the CHIP-SPV implementation of HIP is supported. It allows one to
|
||||
run HIP code on Intel GPUs via the OpenCL or Level Zero back ends. To use
|
||||
CHIP-SPV, you must set ``-DHIP_USE_DEVICE_SORT=OFF`` in your CMake
|
||||
command line as CHIP-SPV does not yet support hipCUB. As of Summer 2022,
|
||||
command-line as CHIP-SPV does not yet support hipCUB. As of Summer 2022,
|
||||
the use of HIP for Intel GPUs is experimental. You should only use this
|
||||
option in preparations to run on Aurora system at Argonne.
|
||||
|
||||
@ -421,9 +421,10 @@ minutes to hours) to build. Of course you only need to do that once.)
|
||||
cmake build system. The ``lib/kim/Install.py`` script supports a
|
||||
``CMAKE`` environment variable if the cmake executable is named other
|
||||
than ``cmake`` on your system. Additional environment variables may be
|
||||
provided on the command line for use by cmake. For example, to use the
|
||||
``cmake3`` executable and tell it to use the gnu version 11 compilers
|
||||
to build KIM, one could use the following command line.
|
||||
set with the ``make`` command for use by cmake. For example, to use the
|
||||
``cmake3`` executable and tell it to use the GNU version 11 compilers
|
||||
called ``g++-11``, ``gcc-11`` and ``gfortran-11`` to build KIM, one
|
||||
could use the following command.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
@ -546,16 +547,7 @@ They must be specified in uppercase.
|
||||
- Local machine
|
||||
* - AMDAVX
|
||||
- HOST
|
||||
- AMD 64-bit x86 CPU (AVX 1)
|
||||
* - ZEN
|
||||
- HOST
|
||||
- AMD Zen class CPU (AVX 2)
|
||||
* - ZEN2
|
||||
- HOST
|
||||
- AMD Zen2 class CPU (AVX 2)
|
||||
* - ZEN3
|
||||
- HOST
|
||||
- AMD Zen3 class CPU (AVX 2)
|
||||
- AMD chip
|
||||
* - ARMV80
|
||||
- HOST
|
||||
- ARMv8.0 Compatible CPU
|
||||
@ -571,105 +563,126 @@ They must be specified in uppercase.
|
||||
* - A64FX
|
||||
- HOST
|
||||
- ARMv8.2 with SVE Support
|
||||
* - ARMV9_GRACE
|
||||
- HOST
|
||||
- ARMv9 NVIDIA Grace CPU
|
||||
* - SNB
|
||||
- HOST
|
||||
- Intel Sandy/Ivy Bridge CPU (AVX 1)
|
||||
- Intel Sandy/Ivy Bridge CPUs
|
||||
* - HSW
|
||||
- HOST
|
||||
- Intel Haswell CPU (AVX 2)
|
||||
- Intel Haswell CPUs
|
||||
* - BDW
|
||||
- HOST
|
||||
- Intel Broadwell Xeon E-class CPU (AVX 2 + transactional mem)
|
||||
* - SKL
|
||||
- HOST
|
||||
- Intel Skylake Client CPU
|
||||
* - SKX
|
||||
- HOST
|
||||
- Intel Skylake Xeon Server CPU (AVX512)
|
||||
- Intel Broadwell Xeon E-class CPUs
|
||||
* - ICL
|
||||
- HOST
|
||||
- Intel Ice Lake Client CPU (AVX512)
|
||||
- Intel Ice Lake Client CPUs (AVX512)
|
||||
* - ICX
|
||||
- HOST
|
||||
- Intel Ice Lake Xeon Server CPU (AVX512)
|
||||
* - SPR
|
||||
- Intel Ice Lake Xeon Server CPUs (AVX512)
|
||||
* - SKL
|
||||
- HOST
|
||||
- Intel Sapphire Rapids Xeon Server CPU (AVX512)
|
||||
- Intel Skylake Client CPUs
|
||||
* - SKX
|
||||
- HOST
|
||||
- Intel Skylake Xeon Server CPUs (AVX512)
|
||||
* - KNC
|
||||
- HOST
|
||||
- Intel Knights Corner Xeon Phi
|
||||
* - KNL
|
||||
- HOST
|
||||
- Intel Knights Landing Xeon Phi
|
||||
* - SPR
|
||||
- HOST
|
||||
- Intel Sapphire Rapids Xeon Server CPUs (AVX512)
|
||||
* - POWER8
|
||||
- HOST
|
||||
- IBM POWER8 CPU
|
||||
- IBM POWER8 CPUs
|
||||
* - POWER9
|
||||
- HOST
|
||||
- IBM POWER9 CPU
|
||||
- IBM POWER9 CPUs
|
||||
* - ZEN
|
||||
- HOST
|
||||
- AMD Zen architecture
|
||||
* - ZEN2
|
||||
- HOST
|
||||
- AMD Zen2 architecture
|
||||
* - ZEN3
|
||||
- HOST
|
||||
- AMD Zen3 architecture
|
||||
* - RISCV_SG2042
|
||||
- HOST
|
||||
- SG2042 (RISC-V) CPU
|
||||
- SG2042 (RISC-V) CPUs
|
||||
* - RISCV_RVA22V
|
||||
- HOST
|
||||
- RVA22V (RISC-V) CPUs
|
||||
* - KEPLER30
|
||||
- GPU
|
||||
- NVIDIA Kepler generation CC 3.0 GPU
|
||||
- NVIDIA Kepler generation CC 3.0
|
||||
* - KEPLER32
|
||||
- GPU
|
||||
- NVIDIA Kepler generation CC 3.2 GPU
|
||||
- NVIDIA Kepler generation CC 3.2
|
||||
* - KEPLER35
|
||||
- GPU
|
||||
- NVIDIA Kepler generation CC 3.5 GPU
|
||||
- NVIDIA Kepler generation CC 3.5
|
||||
* - KEPLER37
|
||||
- GPU
|
||||
- NVIDIA Kepler generation CC 3.7 GPU
|
||||
- NVIDIA Kepler generation CC 3.7
|
||||
* - MAXWELL50
|
||||
- GPU
|
||||
- NVIDIA Maxwell generation CC 5.0 GPU
|
||||
- NVIDIA Maxwell generation CC 5.0
|
||||
* - MAXWELL52
|
||||
- GPU
|
||||
- NVIDIA Maxwell generation CC 5.2 GPU
|
||||
- NVIDIA Maxwell generation CC 5.2
|
||||
* - MAXWELL53
|
||||
- GPU
|
||||
- NVIDIA Maxwell generation CC 5.3 GPU
|
||||
- NVIDIA Maxwell generation CC 5.3
|
||||
* - PASCAL60
|
||||
- GPU
|
||||
- NVIDIA Pascal generation CC 6.0 GPU
|
||||
- NVIDIA Pascal generation CC 6.0
|
||||
* - PASCAL61
|
||||
- GPU
|
||||
- NVIDIA Pascal generation CC 6.1 GPU
|
||||
- NVIDIA Pascal generation CC 6.1
|
||||
* - VOLTA70
|
||||
- GPU
|
||||
- NVIDIA Volta generation CC 7.0 GPU
|
||||
- NVIDIA Volta generation CC 7.0
|
||||
* - VOLTA72
|
||||
- GPU
|
||||
- NVIDIA Volta generation CC 7.2 GPU
|
||||
- NVIDIA Volta generation CC 7.2
|
||||
* - TURING75
|
||||
- GPU
|
||||
- NVIDIA Turing generation CC 7.5 GPU
|
||||
- NVIDIA Turing generation CC 7.5
|
||||
* - AMPERE80
|
||||
- GPU
|
||||
- NVIDIA Ampere generation CC 8.0 GPU
|
||||
- NVIDIA Ampere generation CC 8.0
|
||||
* - AMPERE86
|
||||
- GPU
|
||||
- NVIDIA Ampere generation CC 8.6 GPU
|
||||
- NVIDIA Ampere generation CC 8.6
|
||||
* - ADA89
|
||||
- GPU
|
||||
- NVIDIA Ada Lovelace generation CC 8.9 GPU
|
||||
- NVIDIA Ada generation CC 8.9
|
||||
* - HOPPER90
|
||||
- GPU
|
||||
- NVIDIA Hopper generation CC 9.0 GPU
|
||||
- NVIDIA Hopper generation CC 9.0
|
||||
* - AMD_GFX906
|
||||
- GPU
|
||||
- AMD GPU MI50/MI60
|
||||
- AMD GPU MI50/60
|
||||
* - AMD_GFX908
|
||||
- GPU
|
||||
- AMD GPU MI100
|
||||
* - AMD_GFX90A
|
||||
- GPU
|
||||
- AMD GPU MI200
|
||||
* - AMD_GFX940
|
||||
- GPU
|
||||
- AMD GPU MI300
|
||||
* - AMD_GFX942
|
||||
- GPU
|
||||
- AMD GPU MI300
|
||||
* - AMD_GFX942_APU
|
||||
- GPU
|
||||
- AMD APU MI300A
|
||||
* - AMD_GFX1030
|
||||
- GPU
|
||||
- AMD GPU V620/W6800
|
||||
@ -678,7 +691,7 @@ They must be specified in uppercase.
|
||||
- AMD GPU RX7900XTX
|
||||
* - AMD_GFX1103
|
||||
- GPU
|
||||
- AMD Phoenix APU with Radeon 740M/760M/780M/880M/890M
|
||||
- AMD APU Phoenix
|
||||
* - INTEL_GEN
|
||||
- GPU
|
||||
- SPIR64-based devices, e.g. Intel GPUs, using JIT
|
||||
@ -701,7 +714,7 @@ They must be specified in uppercase.
|
||||
- GPU
|
||||
- Intel GPU Ponte Vecchio
|
||||
|
||||
This list was last updated for version 4.3.0 of the Kokkos library.
|
||||
This list was last updated for version 4.5.1 of the Kokkos library.
|
||||
|
||||
.. tabs::
|
||||
|
||||
@ -2191,7 +2204,7 @@ verified to work in February 2020 with Quantum Espresso versions 6.3 to
|
||||
from the sources in the *lib* folder (including the essential
|
||||
libqmmm.a) are not included in the static LAMMPS library and
|
||||
(currently) not installed, while their code is included in the
|
||||
shared LAMMPS library. Thus a typical command line to configure
|
||||
shared LAMMPS library. Thus a typical command to configure
|
||||
building LAMMPS for QMMM would be:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
@ -100,9 +100,9 @@ procedure.
|
||||
|
||||
It is possible to use both the integrated CMake support of the Visual
|
||||
Studio IDE or use an external CMake installation (e.g. downloaded from
|
||||
cmake.org) to create build files and compile LAMMPS from the command line.
|
||||
cmake.org) to create build files and compile LAMMPS from the command-line.
|
||||
|
||||
Compilation via command line and unit tests are checked automatically
|
||||
Compilation via command-line and unit tests are checked automatically
|
||||
for the LAMMPS development branch through
|
||||
`GitHub Actions <https://github.com/lammps/lammps/actions/workflows/compile-msvc.yml>`_.
|
||||
|
||||
@ -115,7 +115,7 @@ for the LAMMPS development branch through
|
||||
|
||||
Please note, that for either approach CMake will create a so-called
|
||||
:ref:`"multi-configuration" build environment <cmake_multiconfig>`, and
|
||||
the command lines for building and testing LAMMPS must be adjusted
|
||||
the commands for building and testing LAMMPS must be adjusted
|
||||
accordingly.
|
||||
|
||||
The LAMMPS cmake folder contains a ``CMakeSettings.json`` file with
|
||||
|
||||
@ -4,7 +4,7 @@ LAMMPS Class
|
||||
The LAMMPS class is encapsulating an MD simulation state and thus it is
|
||||
the class that needs to be created when starting a new simulation system
|
||||
state. The LAMMPS executable essentially creates one instance of this
|
||||
class and passes the command line flags and tells it to process the
|
||||
class and passes the command-line flags and tells it to process the
|
||||
provided input (a file or ``stdin``). It shuts the class down when
|
||||
control is returned to it and then exits. When using LAMMPS as a
|
||||
library from another code it is required to create an instance of this
|
||||
|
||||
@ -69,7 +69,7 @@ WARNING message is printed. The :doc:`Errors <Errors>` page gives
|
||||
more information on what errors mean. The documentation for each
|
||||
command lists restrictions on how the command can be used.
|
||||
|
||||
You can use the :ref:`-skiprun <skiprun>` command line flag
|
||||
You can use the :ref:`-skiprun <skiprun>` command-line flag
|
||||
to have LAMMPS skip the execution of any ``run``, ``minimize``, or similar
|
||||
commands to check the entire input for correct syntax to avoid crashes
|
||||
on typos or syntax errors in long runs.
|
||||
|
||||
@ -18,7 +18,7 @@ LAMMPS executable directly instead of having a separate tool. A
|
||||
combination of the commands :doc:`read_restart <read_restart>` and
|
||||
:doc:`write_data <write_data>` can be used to the same effect. For
|
||||
added convenience this conversion can also be triggered by
|
||||
:doc:`command line flags <Run_options>`
|
||||
:doc:`command-line flags <Run_options>`
|
||||
|
||||
Fix ave/spatial and fix ave/spatial/sphere
|
||||
------------------------------------------
|
||||
|
||||
@ -94,12 +94,12 @@ represents what is generally referred to as an "instance of LAMMPS". It
|
||||
is a composite holding pointers to instances of other core classes
|
||||
providing the core functionality of the MD engine in LAMMPS and through
|
||||
them abstractions of the required operations. The constructor of the
|
||||
LAMMPS class will instantiate those instances, process the command line
|
||||
LAMMPS class will instantiate those instances, process the command-line
|
||||
flags, initialize MPI (if not already done) and set up file pointers for
|
||||
input and output. The destructor will shut everything down and free all
|
||||
associated memory. Thus code for the standalone LAMMPS executable in
|
||||
``main.cpp`` simply initializes MPI, instantiates a single instance of
|
||||
LAMMPS while passing it the command line flags and input script. It
|
||||
LAMMPS while passing it the command-line flags and input script. It
|
||||
deletes the LAMMPS instance after the method reading the input returns
|
||||
and shuts down the MPI environment before it exits the executable.
|
||||
|
||||
|
||||
@ -476,7 +476,7 @@ the tabulated coulomb, to test both code paths. The reference results in the YA
|
||||
files then should be compared manually, if they agree well enough within the limits
|
||||
of those two approximations.
|
||||
|
||||
The ``test_pair_style`` and equivalent programs have special command line options
|
||||
The ``test_pair_style`` and equivalent programs have special command-line options
|
||||
to update the YAML files. Running a command like
|
||||
|
||||
.. code-block:: bash
|
||||
@ -609,7 +609,7 @@ and run the test with verbose output. For example,
|
||||
|
||||
env TEST_ARGS=-v ctest -R ^MolPairStyle:lj_cut_coul_long -V
|
||||
|
||||
``ctest`` with the ``-V`` flag also shows the exact command line
|
||||
``ctest`` with the ``-V`` flag also shows the exact command
|
||||
of the test. One can then use ``gdb --args`` to further debug and
|
||||
catch exceptions with the test command, for example,
|
||||
|
||||
|
||||
@ -310,7 +310,7 @@ the constructor and the destructor.
|
||||
|
||||
Pair styles are different from most classes in LAMMPS that define a
|
||||
"style", as their constructor only uses the LAMMPS class instance
|
||||
pointer as an argument, but **not** the command line arguments of the
|
||||
pointer as an argument, but **not** the arguments of the
|
||||
:doc:`pair_style command <pair_style>`. Instead, those arguments are
|
||||
processed in the ``Pair::settings()`` function (or rather the version in
|
||||
the derived class). The constructor is the place where global defaults
|
||||
@ -891,7 +891,7 @@ originally created from mixing or not).
|
||||
These data file output functions are only useful for true pair-wise
|
||||
additive potentials, where the potential parameters can be entered
|
||||
through *multiple* :doc:`pair_coeff commands <pair_coeff>`. Pair styles
|
||||
that require a single "pair_coeff \* \*" command line are not compatible
|
||||
that require a single "pair_coeff \* \*" command are not compatible
|
||||
with reading their parameters from data files. For pair styles like
|
||||
*born/gauss* that do support writing to data files, the potential
|
||||
parameters will be read from the data file, if present, and
|
||||
@ -1122,7 +1122,7 @@ once. Thus, the ``coeff()`` function has to do three tasks, each of
|
||||
which is delegated to a function in the ``PairTersoff`` class:
|
||||
|
||||
#. map elements to atom types. Those follow the potential file name in the
|
||||
command line arguments and are processed by the ``map_element2type()`` function.
|
||||
command arguments and are processed by the ``map_element2type()`` function.
|
||||
#. read and parse the potential parameter file in the ``read_file()`` function.
|
||||
#. Build data structures where the original and derived parameters are
|
||||
indexed by all possible triples of atom types and thus can be looked
|
||||
@ -1356,8 +1356,8 @@ either 0 or 1.
|
||||
|
||||
The ``morseflag`` variable defaults to 0 and is set to 1 in the
|
||||
``PairAIREBOMorse::settings()`` function which is called by the
|
||||
:doc:`pair_style <pair_style>` command. This function delegates
|
||||
all command line processing and setting of other parameters to the
|
||||
:doc:`pair_style <pair_style>` command. This function delegates all
|
||||
command argument processing and setting of other parameters to the
|
||||
``PairAIREBO::settings()`` function of the base class.
|
||||
|
||||
.. code-block:: c++
|
||||
|
||||
@ -83,7 +83,7 @@ Run LAMMPS from within the debugger
|
||||
Running LAMMPS under the control of the debugger as shown below only
|
||||
works for a single MPI rank (for debugging a program running in parallel
|
||||
you usually need a parallel debugger program). A simple way to launch
|
||||
GDB is to prefix the LAMMPS command line with ``gdb --args`` and then
|
||||
GDB is to prefix the LAMMPS command-line with ``gdb --args`` and then
|
||||
type the command "run" at the GDB prompt. This will launch the
|
||||
debugger, load the LAMMPS executable and its debug info, and then run
|
||||
it. When it reaches the code causing the segmentation fault, it will
|
||||
@ -180,7 +180,7 @@ inspect the behavior of a compiled program by essentially emulating a
|
||||
CPU and instrumenting the program while running. This slows down
|
||||
execution quite significantly, but can also report issues that are not
|
||||
resulting in a crash. The default valgrind tool is a memory checker and
|
||||
you can use it by prefixing the normal command line with ``valgrind``.
|
||||
you can use it by prefixing the normal command-line with ``valgrind``.
|
||||
Unlike GDB, this will also work for parallel execution, but it is
|
||||
recommended to redirect the valgrind output to a file (e.g. with
|
||||
``--log-file=crash-%p.txt``, the %p will be substituted with the
|
||||
|
||||
@ -7774,7 +7774,7 @@ Doc page with :doc:`WARNING messages <Errors_warnings>`
|
||||
*Too few values in body section of molecule file*
|
||||
Self-explanatory.
|
||||
|
||||
*Too many -pk arguments in command line*
|
||||
*Too many -pk arguments in command-line*
|
||||
The string formed by concatenating the arguments is too long. Use a
|
||||
package command in the input script instead.
|
||||
|
||||
|
||||
@ -16,7 +16,7 @@ compiled alongside the code using it from the source code in
|
||||
``fortran/lammps.f90`` *and* with the same compiler used to build the
|
||||
rest of the Fortran code that interfaces to LAMMPS. When linking, you
|
||||
also need to :doc:`link to the LAMMPS library <Build_link>`. A typical
|
||||
command line for a simple program using the Fortran interface would be:
|
||||
command for a simple program using the Fortran interface would be:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
@ -91,12 +91,12 @@ function and triggered with the optional logical argument set to
|
||||
CALL lmp%close(.TRUE.)
|
||||
END PROGRAM testlib
|
||||
|
||||
It is also possible to pass command line flags from Fortran to C/C++ and
|
||||
It is also possible to pass command-line flags from Fortran to C/C++ and
|
||||
thus make the resulting executable behave similarly to the standalone
|
||||
executable (it will ignore the `-in/-i` flag, though). This allows
|
||||
using the command line to configure accelerator and suffix settings,
|
||||
using the command-line to configure accelerator and suffix settings,
|
||||
configure screen and logfile output, or to set index style variables
|
||||
from the command line and more. Here is a correspondingly adapted
|
||||
from the command-line and more. Here is a correspondingly adapted
|
||||
version of the previous example:
|
||||
|
||||
.. code-block:: fortran
|
||||
@ -108,7 +108,7 @@ version of the previous example:
|
||||
CHARACTER(LEN=128), ALLOCATABLE :: command_args(:)
|
||||
INTEGER :: i, argc
|
||||
|
||||
! copy command line flags to `command_args()`
|
||||
! copy command-line flags to `command_args()`
|
||||
argc = COMMAND_ARGUMENT_COUNT()
|
||||
ALLOCATE(command_args(0:argc))
|
||||
DO i=0, argc
|
||||
@ -448,7 +448,7 @@ of the contents of the :f:mod:`LIBLAMMPS` Fortran interface to LAMMPS.
|
||||
compiled with MPI support, it will also initialize MPI, if it has
|
||||
not already been initialized before.
|
||||
|
||||
The *args* argument with the list of command line parameters is
|
||||
The *args* argument with the list of command-line parameters is
|
||||
optional and so it the *comm* argument with the MPI communicator.
|
||||
If *comm* is not provided, ``MPI_COMM_WORLD`` is assumed. For
|
||||
more details please see the documentation of :cpp:func:`lammps_open`.
|
||||
|
||||
@ -56,7 +56,7 @@ using a shell like Bash or Zsh.
|
||||
Visual Studio IDE with the bundled CMake or from the Windows command prompt using
|
||||
a separately installed CMake package, both using the native Microsoft Visual C++
|
||||
compilers and (optionally) the Microsoft MPI SDK. This tutorial, however, only
|
||||
covers unix-like command line interfaces.
|
||||
covers unix-like command-line interfaces.
|
||||
|
||||
We also assume that you have downloaded and unpacked a recent LAMMPS source code package
|
||||
or used Git to create a clone of the LAMMPS sources on your compilation machine.
|
||||
@ -277,7 +277,7 @@ Setting options
|
||||
---------------
|
||||
|
||||
Options that enable, disable or modify settings are modified by setting
|
||||
the value of CMake variables. This is done on the command line with the
|
||||
the value of CMake variables. This is done on the command-line with the
|
||||
*-D* flag in the format ``-D VARIABLE=value``, e.g. ``-D
|
||||
CMAKE_BUILD_TYPE=Release`` or ``-D BUILD_MPI=on``. There is one quirk:
|
||||
when used before the CMake directory, there may be a space between the
|
||||
@ -376,7 +376,7 @@ Using presets
|
||||
-------------
|
||||
|
||||
Since LAMMPS has a lot of optional features and packages, specifying
|
||||
them all on the command line can be tedious. Or when selecting a
|
||||
them all on the command-line can be tedious. Or when selecting a
|
||||
different compiler toolchain, multiple options have to be changed
|
||||
consistently and that is rather error prone. Or when enabling certain
|
||||
packages, they require consistent settings to be operated in a
|
||||
@ -384,7 +384,7 @@ particular mode. For this purpose, we are providing a selection of
|
||||
"preset files" for CMake in the folder ``cmake/presets``. They
|
||||
represent a way to pre-load or override the CMake configuration cache by
|
||||
setting or changing CMake variables. Preset files are loaded using the
|
||||
*-C* command line flag. You can combine loading multiple preset files or
|
||||
*-C* command-line flag. You can combine loading multiple preset files or
|
||||
change some variables later with additional *-D* flags. A few examples:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
@ -163,7 +163,7 @@ After everything is done, add the files to the branch and commit them:
|
||||
*git rm*, *git mv* for adding, removing, renaming individual files,
|
||||
respectively, and then *git commit* to finalize the commit.
|
||||
Carefully check all pending changes with *git status* before
|
||||
committing them. If you find doing this on the command line too
|
||||
committing them. If you find doing this on the command-line too
|
||||
tedious, consider using a GUI, for example the one included in git
|
||||
distributions written in Tk, i.e. use *git gui* (on some Linux
|
||||
distributions it may be required to install an additional package to
|
||||
|
||||
@ -20,8 +20,11 @@ to the online LAMMPS documentation for known LAMMPS commands and styles.
|
||||
(Ubuntu 20.04LTS or later and compatible), macOS (version 11 aka Big
|
||||
Sur or later), and Windows (version 10 or later) :ref:`are available
|
||||
<lammps_gui_install>` for download. Non-MPI LAMMPS executables (as
|
||||
``lmp``) for running LAMMPS from the command line and :doc:`some
|
||||
``lmp``) for running LAMMPS from the command-line and :doc:`some
|
||||
LAMMPS tools <Tools>` compiled executables are also included.
|
||||
Also, the pre-compiled LAMMPS-GUI packages include the WHAM executables
|
||||
from http://membrane.urmc.rochester.edu/content/wham/ for use with
|
||||
LAMMPS tutorials.
|
||||
|
||||
The source code for LAMMPS-GUI is included in the LAMMPS source code
|
||||
distribution and can be found in the ``tools/lammps-gui`` folder. It
|
||||
@ -29,16 +32,16 @@ to the online LAMMPS documentation for known LAMMPS commands and styles.
|
||||
<Build_cmake>`.
|
||||
|
||||
LAMMPS-GUI tries to provide an experience similar to what people
|
||||
traditionally would have running LAMMPS using a command line window and
|
||||
traditionally would have running LAMMPS using a command-line window and
|
||||
the console LAMMPS executable but just rolled into a single executable:
|
||||
|
||||
- writing & editing LAMMPS input files with a text editor
|
||||
- run LAMMPS on those input file with selected command line flags
|
||||
- run LAMMPS on those input file with selected command-line flags
|
||||
- extract data from the created files and visualize it with and
|
||||
external software
|
||||
|
||||
That procedure is quite effective for people proficient in using the
|
||||
command line, as that allows them to use tools for the individual steps
|
||||
command-line, as that allows them to use tools for the individual steps
|
||||
that they are most comfortable with. In fact, it is often *required* to
|
||||
adopt this workflow when running LAMMPS simulations on high-performance
|
||||
computing facilities.
|
||||
@ -100,10 +103,11 @@ MacOS 11 and later
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
|
||||
After downloading the ``LAMMPS-macOS-multiarch-GUI-<version>.dmg``
|
||||
installer package, you need to double-click it and then, in the window
|
||||
that opens, drag the app bundle as indicated into the "Applications"
|
||||
folder. The follow the instructions in the "README.txt" file to
|
||||
get access to the other included executables.
|
||||
application bundle disk image, you need to double-click it and then, in
|
||||
the window that opens, drag the app bundle as indicated into the
|
||||
"Applications" folder. Afterwards, the disk image can be unmounted.
|
||||
Then follow the instructions in the "README.txt" file to get access to
|
||||
the other included command-line executables.
|
||||
|
||||
Linux on x86\_64
|
||||
^^^^^^^^^^^^^^^^
|
||||
@ -117,15 +121,25 @@ into the "LAMMPS_GUI" folder and execute "./lammps-gui" directly.
|
||||
|
||||
The second variant uses `flatpak <https://www.flatpak.org>`_ and
|
||||
requires the flatpak management and runtime software to be installed.
|
||||
After downloading the ``LAMMPS-GUI-Linux-x86_64-GUI-<version>.tar.gz``
|
||||
After downloading the ``LAMMPS-GUI-Linux-x86_64-GUI-<version>.flatpak``
|
||||
flatpak bundle, you can install it with ``flatpak install --user
|
||||
LAMMPS-GUI-Linux-x86_64-GUI-<version>.tar.gz``. After installation,
|
||||
LAMMPS-GUI-Linux-x86_64-GUI-<version>.flatpak``. After installation,
|
||||
LAMMPS-GUI should be integrated into your desktop environment under
|
||||
"Applications > Science" but also can be launched from the console with
|
||||
``flatpak run org.lammps.lammps-gui``. The flatpak bundle also includes
|
||||
the console LAMMPS executable ``lmp`` which can be launched to run
|
||||
simulations with, for example: ``flatpak run --command=lmp
|
||||
org.lammps.lammps-gui -in in.melt``.
|
||||
simulations with, for example with:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
flatpak run --command=lmp org.lammps.lammps-gui -in in.melt
|
||||
|
||||
Other bundled command-line executables are run the same way and can be
|
||||
listed with:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
ls $(flatpak info --show-location org.lammps.lammps-gui )/files/bin
|
||||
|
||||
|
||||
Compiling from Source
|
||||
@ -165,9 +179,9 @@ window is stored when exiting and restored when starting again.
|
||||
Opening Files
|
||||
^^^^^^^^^^^^^
|
||||
|
||||
The LAMMPS-GUI application can be launched without command line arguments
|
||||
The LAMMPS-GUI application can be launched without command-line arguments
|
||||
and then starts with an empty buffer in the *Editor* window. If arguments
|
||||
are given LAMMPS will use first command line argument as the file name for
|
||||
are given LAMMPS will use first command-line argument as the file name for
|
||||
the *Editor* buffer and reads its contents into the buffer, if the file
|
||||
exists. All further arguments are ignored. Files can also be opened via
|
||||
the *File* menu, the `Ctrl-O` (`Command-O` on macOS) keyboard shortcut
|
||||
@ -261,14 +275,21 @@ Output Window
|
||||
|
||||
By default, when starting a run, an *Output* window opens that displays
|
||||
the screen output of the running LAMMPS calculation, as shown below.
|
||||
This text would normally be seen in the command line window.
|
||||
This text would normally be seen in the command-line window.
|
||||
|
||||
.. image:: JPG/lammps-gui-log.png
|
||||
:align: center
|
||||
:scale: 50%
|
||||
|
||||
LAMMPS-GUI captures the screen output from LAMMPS as it is generated and
|
||||
updates the *Output* window regularly during a run.
|
||||
updates the *Output* window regularly during a run. If there are any
|
||||
warnings or errors in the LAMMPS output, they are highlighted by using
|
||||
bold text colored in red. There is a small panel at the bottom center
|
||||
of the *Output* window showing how many warnings and errors were
|
||||
detected and how many lines the entire output has. By clicking on the
|
||||
button on the right with the warning symbol or by using the keyboard
|
||||
shortcut `Ctrl-N` (`Command-N` on macOS), you can jump to the next
|
||||
line with a warning or error.
|
||||
|
||||
By default, the *Output* window is replaced each time a run is started.
|
||||
The runs are counted and the run number for the current run is displayed
|
||||
@ -398,7 +419,7 @@ below.
|
||||
Like for the *Output* and *Charts* windows, its content is continuously
|
||||
updated during a run. It will show "(none)" if there are no variables
|
||||
defined. Note that it is also possible to *set* :doc:`index style
|
||||
variables <variable>`, that would normally be set via command line
|
||||
variables <variable>`, that would normally be set via command-line
|
||||
flags, via the "Set Variables..." dialog from the *Run* menu.
|
||||
LAMMPS-GUI automatically defines the variable "gui_run" to the current
|
||||
value of the run counter. That way it is possible to automatically
|
||||
@ -775,11 +796,11 @@ General Settings:
|
||||
|
||||
- *Echo input to log:* when checked, all input commands, including
|
||||
variable expansions, are echoed to the *Output* window. This is
|
||||
equivalent to using `-echo screen` at the command line. There is no
|
||||
equivalent to using `-echo screen` at the command-line. There is no
|
||||
log *file* produced by default, since LAMMPS-GUI uses `-log none`.
|
||||
- *Include citation details:* when checked full citation info will be
|
||||
included to the log window. This is equivalent to using `-cite
|
||||
screen` on the command line.
|
||||
screen` on the command-line.
|
||||
- *Show log window by default:* when checked, the screen output of a
|
||||
LAMMPS run will be collected in a log window during the run
|
||||
- *Show chart window by default:* when checked, the thermodynamic
|
||||
@ -828,7 +849,7 @@ Accelerators:
|
||||
|
||||
This tab enables selection of an accelerator package for LAMMPS to use
|
||||
and is equivalent to using the `-suffix` and `-package` flags on the
|
||||
command line. Only settings supported by the LAMMPS library and local
|
||||
command-line. Only settings supported by the LAMMPS library and local
|
||||
hardware are available. The `Number of threads` field allows setting
|
||||
the maximum number of threads for the accelerator packages that use
|
||||
threads.
|
||||
|
||||
@ -738,8 +738,8 @@ command.
|
||||
|
||||
This can be done, for example, by using the built-in visualizer of the
|
||||
:doc:`dump image or dump movie <dump_image>` command to create snapshot
|
||||
images or a movie. Below are example command lines for using dump image
|
||||
with the :ref:`example listed below <periexample>` and a set of images
|
||||
images or a movie. Below are example command for using dump image with
|
||||
the :ref:`example listed below <periexample>` and a set of images
|
||||
created for steps 300, 600, and 2000 this way.
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
@ -260,7 +260,7 @@ Switch into the :code:`examples/melt` folder:
|
||||
|
||||
cd ../examples/melt
|
||||
|
||||
To run this example in serial, use the following command line:
|
||||
To run this example in serial, use the following command:
|
||||
|
||||
.. code-block::
|
||||
|
||||
|
||||
@ -60,7 +60,7 @@ between them at any time using "git checkout <branch name>".)
|
||||
files (mostly by accident). If you do not need access to the entire
|
||||
commit history (most people don't), you can speed up the "cloning"
|
||||
process and reduce local disk space requirements by using the
|
||||
``--depth`` git command line flag. That will create a "shallow clone"
|
||||
``--depth`` git command-line flag. That will create a "shallow clone"
|
||||
of the repository, which contains only a subset of the git history.
|
||||
Using a depth of 1000 is usually sufficient to include the head
|
||||
commits of the *develop*, the *release*, and the *maintenance*
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 78 KiB |
@ -46,7 +46,7 @@ Include files (varied)
|
||||
but instead should be initialized either in the initializer list of
|
||||
the constructor or explicitly assigned in the body of the constructor.
|
||||
If the member variable is relevant to the functionality of a class
|
||||
(for example when it stores a value from a command line argument), the
|
||||
(for example when it stores a value from a command-line argument), the
|
||||
member variable declaration is followed by a brief comment explaining
|
||||
its purpose and what its values can be. Class members that are
|
||||
pointers should always be initialized to ``nullptr`` in the
|
||||
|
||||
@ -2171,8 +2171,8 @@ the :doc:`Build extras <Build_extras>` page.
|
||||
* ``src/OPENMP/README``
|
||||
* :doc:`Accelerator packages <Speed_packages>`
|
||||
* :doc:`OPENMP package <Speed_omp>`
|
||||
* :doc:`Command line option -suffix/-sf omp <Run_options>`
|
||||
* :doc:`Command line option -package/-pk omp <Run_options>`
|
||||
* :doc:`Command-line option -suffix/-sf omp <Run_options>`
|
||||
* :doc:`Command-line option -package/-pk omp <Run_options>`
|
||||
* :doc:`package omp <package>`
|
||||
* Search the :doc:`commands <Commands_all>` pages (:doc:`fix <Commands_fix>`, :doc:`compute <Commands_compute>`,
|
||||
:doc:`pair <Commands_pair>`, :doc:`bond, angle, dihedral, improper <Commands_bond>`,
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
Basics of running LAMMPS
|
||||
========================
|
||||
|
||||
LAMMPS is run from the command line, reading commands from a file via
|
||||
the ``-in`` command line flag, or from standard input. Using the ``-in
|
||||
LAMMPS is run from the command-line, reading commands from a file via
|
||||
the ``-in`` command-line flag, or from standard input. Using the ``-in
|
||||
in.file`` variant is recommended (see note below). The name of the
|
||||
LAMMPS executable is either ``lmp`` or ``lmp_<machine>`` with
|
||||
`<machine>` being the machine string used when compiling LAMMPS. This
|
||||
@ -25,7 +25,7 @@ build LAMMPS:
|
||||
You normally run the LAMMPS command in the directory where your input
|
||||
script is located. That is also where output files are produced by
|
||||
default, unless you provide specific other paths in your input script or
|
||||
on the command line. As in some of the examples above, the LAMMPS
|
||||
on the command-line. As in some of the examples above, the LAMMPS
|
||||
executable itself can be placed elsewhere.
|
||||
|
||||
.. note::
|
||||
|
||||
@ -632,7 +632,7 @@ the ``-package omp`` command-line switch or the :doc:`package omp <package>` com
|
||||
|
||||
The :doc:`suffix <suffix>` command can also be used within an input
|
||||
script to set a suffix, or to turn off or back on any suffix setting
|
||||
made via the command line.
|
||||
made via the command-line.
|
||||
|
||||
----------
|
||||
|
||||
|
||||
@ -20,7 +20,7 @@ To run with 4 threads, you can type this:
|
||||
lmp -in in.lj.lmp -k on t 4 -sf kk
|
||||
|
||||
Alternately, you can also install a package with LAMMPS-GUI included and
|
||||
open the LAMMPS-GUI app (the package includes the command line version
|
||||
open the LAMMPS-GUI app (the package includes the command-line version
|
||||
of LAMMPS as well) and open the input file in the GUI and run it from
|
||||
there. For details on LAMMPS-GUI, see :doc:`Howto_lammps_gui`.
|
||||
|
||||
|
||||
@ -31,7 +31,8 @@ Coulombics. It has the following general features:
|
||||
(for Nvidia GPUs, AMD GPUs, Intel GPUs, and multicore CPUs).
|
||||
so that the same functionality is supported on a variety of hardware.
|
||||
|
||||
**Required hardware/software:**
|
||||
Required hardware/software
|
||||
""""""""""""""""""""""""""
|
||||
|
||||
To compile and use this package in CUDA mode, you currently need
|
||||
to have an NVIDIA GPU and install the corresponding NVIDIA CUDA
|
||||
@ -69,12 +70,14 @@ To compile and use this package in HIP mode, you have to have the AMD ROCm
|
||||
software installed. Versions of ROCm older than 3.5 are currently deprecated
|
||||
by AMD.
|
||||
|
||||
**Building LAMMPS with the GPU package:**
|
||||
Building LAMMPS with the GPU package
|
||||
""""""""""""""""""""""""""""""""""""
|
||||
|
||||
See the :ref:`Build extras <gpu>` page for
|
||||
instructions.
|
||||
|
||||
**Run with the GPU package from the command line:**
|
||||
Run with the GPU package from the command-line
|
||||
""""""""""""""""""""""""""""""""""""""""""""""
|
||||
|
||||
The ``mpirun`` or ``mpiexec`` command sets the total number of MPI tasks
|
||||
used by LAMMPS (one or multiple per compute node) and the number of MPI
|
||||
@ -133,7 +136,8 @@ affect the setting for bonded interactions (LAMMPS default is "on").
|
||||
The "off" setting for pairwise interaction is currently required for
|
||||
GPU package pair styles.
|
||||
|
||||
**Or run with the GPU package by editing an input script:**
|
||||
Run with the GPU package by editing an input script
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
|
||||
The discussion above for the ``mpirun`` or ``mpiexec`` command, MPI
|
||||
tasks/node, and use of multiple MPI tasks/GPU is the same.
|
||||
@ -149,7 +153,8 @@ You must also use the :doc:`package gpu <package>` command to enable the
|
||||
GPU package, unless the ``-sf gpu`` or ``-pk gpu`` :doc:`command-line switches <Run_options>` were used. It specifies the number of
|
||||
GPUs/node to use, as well as other options.
|
||||
|
||||
**Speed-ups to expect:**
|
||||
Speed-up to expect
|
||||
""""""""""""""""""
|
||||
|
||||
The performance of a GPU versus a multicore CPU is a function of your
|
||||
hardware, which pair style is used, the number of atoms/GPU, and the
|
||||
@ -176,10 +181,13 @@ better with multiple OMP threads because the inter-process communication
|
||||
is higher for these styles with the GPU package in order to allow
|
||||
deterministic results.
|
||||
|
||||
**Guidelines for best performance:**
|
||||
Guidelines for best performance
|
||||
"""""""""""""""""""""""""""""""
|
||||
|
||||
* Using multiple MPI tasks per GPU will often give the best performance,
|
||||
as allowed my most multicore CPU/GPU configurations.
|
||||
* Using multiple MPI tasks (2-10) per GPU will often give the best
|
||||
performance, as allowed my most multicore CPU/GPU configurations.
|
||||
Using too many MPI tasks will result in worse performance due to
|
||||
growing overhead with the growing number of MPI tasks.
|
||||
* If the number of particles per MPI task is small (e.g. 100s of
|
||||
particles), it can be more efficient to run with fewer MPI tasks per
|
||||
GPU, even if you do not use all the cores on the compute node.
|
||||
@ -199,12 +207,13 @@ deterministic results.
|
||||
:doc:`angle <angle_style>`, :doc:`dihedral <dihedral_style>`,
|
||||
:doc:`improper <improper_style>`, and :doc:`long-range <kspace_style>`
|
||||
calculations will not be included in the "Pair" time.
|
||||
* Since only part of the pppm kspace style is GPU accelerated, it
|
||||
may be faster to only use GPU acceleration for Pair styles with
|
||||
long-range electrostatics. See the "pair/only" keyword of the
|
||||
package command for a shortcut to do that. The work between kspace
|
||||
on the CPU and non-bonded interactions on the GPU can be balanced
|
||||
through adjusting the coulomb cutoff without loss of accuracy.
|
||||
* Since only part of the pppm kspace style is GPU accelerated, it may be
|
||||
faster to only use GPU acceleration for Pair styles with long-range
|
||||
electrostatics. See the "pair/only" keyword of the :doc:`package
|
||||
command <package>` for a shortcut to do that. The distribution of
|
||||
work between kspace on the CPU and non-bonded interactions on the GPU
|
||||
can be balanced through adjusting the coulomb cutoff without loss of
|
||||
accuracy.
|
||||
* When the *mode* setting for the package gpu command is force/neigh,
|
||||
the time for neighbor list calculations on the GPU will be added into
|
||||
the "Pair" time, not the "Neigh" time. An additional breakdown of the
|
||||
@ -220,4 +229,6 @@ deterministic results.
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
None.
|
||||
When using :doc:`hybrid pair styles <pair_hybrid>`, the neighbor list
|
||||
must be generated on the host instead of the GPU and thus the potential
|
||||
GPU acceleration is reduced.
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
INTEL package
|
||||
==================
|
||||
=============
|
||||
|
||||
The INTEL package is maintained by Mike Brown at Intel
|
||||
Corporation. It provides two methods for accelerating simulations,
|
||||
@ -13,18 +13,18 @@ twice, once on the CPU and once with an offload flag. This allows
|
||||
LAMMPS to run on the CPU cores and co-processor cores simultaneously.
|
||||
|
||||
Currently Available INTEL Styles
|
||||
"""""""""""""""""""""""""""""""""""""
|
||||
""""""""""""""""""""""""""""""""
|
||||
|
||||
* Angle Styles: charmm, harmonic
|
||||
* Bond Styles: fene, fourier, harmonic
|
||||
* Bond Styles: fene, harmonic
|
||||
* Dihedral Styles: charmm, fourier, harmonic, opls
|
||||
* Fixes: nve, npt, nvt, nvt/sllod, nve/asphere
|
||||
* Fixes: nve, npt, nvt, nvt/sllod, nve/asphere, electrode/conp, electrode/conq, electrode/thermo
|
||||
* Improper Styles: cvff, harmonic
|
||||
* Pair Styles: airebo, airebo/morse, buck/coul/cut, buck/coul/long,
|
||||
buck, dpd, eam, eam/alloy, eam/fs, gayberne, lj/charmm/coul/charmm,
|
||||
lj/charmm/coul/long, lj/cut, lj/cut/coul/long, lj/long/coul/long,
|
||||
rebo, sw, tersoff
|
||||
* K-Space Styles: pppm, pppm/disp
|
||||
rebo, snap, sw, tersoff
|
||||
* K-Space Styles: pppm, pppm/disp, pppm/electrode
|
||||
|
||||
.. warning::
|
||||
|
||||
@ -33,7 +33,7 @@ Currently Available INTEL Styles
|
||||
input requires it, LAMMPS will abort with an error message.
|
||||
|
||||
Speed-up to expect
|
||||
"""""""""""""""""""
|
||||
""""""""""""""""""
|
||||
|
||||
The speedup will depend on your simulation, the hardware, which
|
||||
styles are used, the number of atoms, and the floating-point
|
||||
@ -312,21 +312,21 @@ almost all cases.
|
||||
recommended, especially when running on a machine with Intel
|
||||
Hyper-Threading technology disabled.
|
||||
|
||||
Run with the INTEL package from the command line
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
Run with the INTEL package from the command-line
|
||||
""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
|
||||
To enable INTEL optimizations for all available styles used in
|
||||
the input script, the ``-sf intel`` :doc:`command-line switch <Run_options>` can be used without any requirement for
|
||||
editing the input script. This switch will automatically append
|
||||
"intel" to styles that support it. It also invokes a default command:
|
||||
:doc:`package intel 1 <package>`. This package command is used to set
|
||||
options for the INTEL package. The default package command will
|
||||
specify that INTEL calculations are performed in mixed precision,
|
||||
that the number of OpenMP threads is specified by the OMP_NUM_THREADS
|
||||
environment variable, and that if co-processors are present and the
|
||||
binary was built with offload support, that 1 co-processor per node
|
||||
will be used with automatic balancing of work between the CPU and the
|
||||
co-processor.
|
||||
To enable INTEL optimizations for all available styles used in the input
|
||||
script, the ``-sf intel`` :doc:`command-line switch <Run_options>` can
|
||||
be used without any requirement for editing the input script. This
|
||||
switch will automatically append "intel" to styles that support it. It
|
||||
also invokes a default command: :doc:`package intel 1 <package>`. This
|
||||
package command is used to set options for the INTEL package. The
|
||||
default package command will specify that INTEL calculations are
|
||||
performed in mixed precision, that the number of OpenMP threads is
|
||||
specified by the OMP_NUM_THREADS environment variable, and that if
|
||||
co-processors are present and the binary was built with offload support,
|
||||
that 1 co-processor per node will be used with automatic balancing of
|
||||
work between the CPU and the co-processor.
|
||||
|
||||
You can specify different options for the INTEL package by using
|
||||
the ``-pk intel Nphi`` :doc:`command-line switch <Run_options>` with
|
||||
|
||||
@ -77,7 +77,7 @@ version 23 November 2023 and Kokkos version 4.2.
|
||||
rank. When running with multiple MPI ranks, you may see segmentation
|
||||
faults without GPU-aware MPI support. These can be avoided by adding
|
||||
the flags :doc:`-pk kokkos gpu/aware off <Run_options>` to the
|
||||
LAMMPS command line or by using the command :doc:`package kokkos
|
||||
LAMMPS command-line or by using the command :doc:`package kokkos
|
||||
gpu/aware off <package>` in the input file.
|
||||
|
||||
.. admonition:: Intel Data Center GPU support
|
||||
@ -423,7 +423,7 @@ in the ``kokkos-cuda.cmake`` CMake preset file.
|
||||
cmake -DKokkos_ENABLE_CUDA=yes -DKokkos_ENABLE_OPENMP=yes ../cmake
|
||||
|
||||
The suffix "/kk" is equivalent to "/kk/device", and for Kokkos CUDA,
|
||||
using the ``-sf kk`` in the command line gives the default CUDA version
|
||||
using the ``-sf kk`` in the command-line gives the default CUDA version
|
||||
everywhere. However, if the "/kk/host" suffix is added to a specific
|
||||
style in the input script, the Kokkos OpenMP (CPU) version of that
|
||||
specific style will be used instead. Set the number of OpenMP threads
|
||||
@ -439,7 +439,7 @@ For example, the command to run with 1 GPU and 8 OpenMP threads is then:
|
||||
|
||||
mpiexec -np 1 lmp_kokkos_cuda_openmpi -in in.lj -k on g 1 t 8 -sf kk
|
||||
|
||||
Conversely, if the ``-sf kk/host`` is used in the command line and then
|
||||
Conversely, if the ``-sf kk/host`` is used in the command-line and then
|
||||
the "/kk" or "/kk/device" suffix is added to a specific style in your
|
||||
input script, then only that specific style will run on the GPU while
|
||||
everything else will run on the CPU in OpenMP mode. Note that the
|
||||
@ -451,7 +451,7 @@ on the host CPU can overlap with a pair style running on the
|
||||
GPU. First compile with ``--default-stream per-thread`` added to ``CCFLAGS``
|
||||
in the Kokkos CUDA Makefile. Then explicitly use the "/kk/host"
|
||||
suffix for kspace and bonds, angles, etc. in the input file and the
|
||||
"kk" suffix (equal to "kk/device") on the command line. Also make
|
||||
"kk" suffix (equal to "kk/device") on the command-line. Also make
|
||||
sure the environment variable ``CUDA_LAUNCH_BLOCKING`` is not set to "1"
|
||||
so CPU/GPU overlap can occur.
|
||||
|
||||
|
||||
@ -21,7 +21,7 @@ Building LAMMPS with the OPENMP package
|
||||
See the :ref:`Build extras <openmp>` page for
|
||||
instructions.
|
||||
|
||||
Run with the OPENMP package from the command line
|
||||
Run with the OPENMP package from the command-line
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
|
||||
These examples assume one or more 16-core nodes.
|
||||
|
||||
@ -17,7 +17,7 @@ Building LAMMPS with the OPT package
|
||||
|
||||
See the :ref:`Build extras <opt>` page for instructions.
|
||||
|
||||
Run with the OPT package from the command line
|
||||
Run with the OPT package from the command-line
|
||||
""""""""""""""""""""""""""""""""""""""""""""""
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
@ -501,7 +501,7 @@ Here are a few highlights of LAMMPS-GUI
|
||||
- Indicator for line that caused an error
|
||||
- Visualization of current state in Image Viewer (via calling :doc:`write_dump image <dump_image>`)
|
||||
- Capture of images created via :doc:`dump image <dump_image>` in Slide show window
|
||||
- Dialog to set variables, similar to the LAMMPS command line flag '-v' / '-var'
|
||||
- Dialog to set variables, similar to the LAMMPS command-line flag '-v' / '-var'
|
||||
- Support for GPU, INTEL, KOKKOS/OpenMP, OPENMAP, and OPT and accelerator packages
|
||||
|
||||
Parallelization
|
||||
@ -550,7 +550,7 @@ will be found automatically. 2) you can download the `Flatpak file
|
||||
*flatpak* command: ``flatpak install --user
|
||||
LAMMPS-Linux-x86_64-GUI-<version>.flatpak`` and run it with ``flatpak
|
||||
run org.lammps.lammps-gui``. The flatpak bundle also includes the
|
||||
command line version of LAMMPS and some LAMMPS tools like msi2lmp. The
|
||||
command-line version of LAMMPS and some LAMMPS tools like msi2lmp. The
|
||||
can be launched by using the ``--command`` flag. For example to run
|
||||
LAMMPS directly on the ``in.lj`` benchmark input you would type in the
|
||||
``bench`` folder: ``flatpak run --command=lmp -in in.lj`` The flatpak
|
||||
@ -608,10 +608,10 @@ would be the ``examples/COUPLE/plugin`` folder of the LAMMPS
|
||||
distribution.
|
||||
|
||||
When compiling LAMMPS-GUI with plugin support, there is an additional
|
||||
command line flag (``-p <path>`` or ``--pluginpath <path>``) which
|
||||
command-line flag (``-p <path>`` or ``--pluginpath <path>``) which
|
||||
allows to override the path to LAMMPS shared library used by the GUI.
|
||||
This is usually auto-detected on the first run and can be changed in the
|
||||
LAMMPS-GUI *Preferences* dialog. The command line flag allows to reset
|
||||
LAMMPS-GUI *Preferences* dialog. The command-line flag allows to reset
|
||||
this path to a valid value in case the original setting has become
|
||||
invalid. An empty path ("") as argument restores the default setting.
|
||||
|
||||
@ -656,7 +656,7 @@ it will create a compressed ``LAMMPS-Win10-amd64.zip`` zip file with the
|
||||
executables and required dependent .dll files. This zip file can be
|
||||
uncompressed and ``lammps-gui.exe`` run directly from there. The
|
||||
uncompressed folder can be added to the ``PATH`` environment and LAMMPS
|
||||
and LAMMPS-GUI can be launched from anywhere from the command line.
|
||||
and LAMMPS-GUI can be launched from anywhere from the command-line.
|
||||
|
||||
**MinGW64 Cross-compiler**
|
||||
|
||||
@ -876,7 +876,7 @@ the same ``LAMMPS_CACHING_DIR``. This script does the following:
|
||||
#. Start a simple local HTTP server using Python to host files for CMake
|
||||
|
||||
Afterwards, it will print out instruction on how to modify the CMake
|
||||
command line to make sure it uses the local HTTP server.
|
||||
commands to make sure it uses the local HTTP server.
|
||||
|
||||
To undo the environment changes and shutdown the local HTTP server,
|
||||
run the ``deactivate_caches`` command.
|
||||
@ -1025,7 +1025,7 @@ with those in the provided log file with the same number of processors
|
||||
in the same subdirectory. If the differences between the actual and
|
||||
reference values are within specified tolerances, the test is considered
|
||||
passed. For each test batch, that is, a set of example input scripts,
|
||||
the mpirun command, the LAMMPS command line arguments, and the
|
||||
the mpirun command, the LAMMPS command-line arguments, and the
|
||||
tolerances for individual thermo quantities can be specified in a
|
||||
configuration file in YAML format.
|
||||
|
||||
|
||||
@ -681,7 +681,7 @@ MPEG or other movie file you can use:
|
||||
|
||||
* c) Use FFmpeg
|
||||
|
||||
FFmpeg is a command line tool that is available on many platforms and
|
||||
FFmpeg is a command-line tool that is available on many platforms and
|
||||
allows extremely flexible encoding and decoding of movies.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
@ -97,7 +97,7 @@ adjustments.
|
||||
To connect VMD to a listening LAMMPS simulation on the same machine
|
||||
with fix imd enabled, one needs to start VMD and load a coordinate or
|
||||
topology file that matches the fix group. When the VMD command
|
||||
prompts appears, one types the command line:
|
||||
prompts appears, one types the command:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
|
||||
@ -135,7 +135,7 @@ directions for the forces. Only the direction of the vector is
|
||||
important; its length is ignored (the entered vectors are
|
||||
normalized).
|
||||
|
||||
Those styles can be combined within one single command line.
|
||||
Those styles can be combined within one single command.
|
||||
|
||||
.. note::
|
||||
|
||||
|
||||
@ -1084,10 +1084,11 @@ the form of *key_name_key*-*key_name_value* pairs). For example,
|
||||
kim property modify 1 key mass source-value 26.98154
|
||||
kim property modify 1 key mass source-unit amu
|
||||
|
||||
where the special keyword "key" is followed by a *key_name* ("species" or
|
||||
"mass" in the above) and one or more key-value pairs. These key-value pairs
|
||||
may continue until either another "key" keyword is given or the end of the
|
||||
command line is reached. Thus, the above could equivalently be written as
|
||||
where the special keyword "key" is followed by a *key_name* ("species"
|
||||
or "mass" in the above) and one or more key-value pairs. These
|
||||
key-value pairs may continue until either another "key" keyword is given
|
||||
or the end of the line is reached. Thus, the above could equivalently
|
||||
be written as
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
|
||||
@ -24,12 +24,12 @@ Description
|
||||
"""""""""""
|
||||
|
||||
Label this line of the input script with the chosen ID. Unless a jump
|
||||
command was used previously, this does nothing. But if a
|
||||
:doc:`jump <jump>` command was used with a label argument to begin
|
||||
invoking this script file, then all command lines in the script prior
|
||||
to this line will be ignored. I.e. execution of the script will begin
|
||||
at this line. This is useful for looping over a section of the input
|
||||
script as discussed in the :doc:`jump <jump>` command.
|
||||
command was used previously, this does nothing. But if a :doc:`jump
|
||||
<jump>` command was used with a label argument to begin invoking this
|
||||
script file, then all commands in the script prior to this line will be
|
||||
ignored. I.e. execution of the script will begin at this line. This is
|
||||
useful for looping over a section of the input script as discussed in
|
||||
the :doc:`jump <jump>` command.
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
@ -504,7 +504,7 @@ as it is for non-accelerated pair styles
|
||||
The *binsize* keyword sets the size of bins used to bin atoms during
|
||||
neighbor list builds. The same value can be set by the
|
||||
:doc:`neigh_modify binsize <neigh_modify>` command. Making it an option
|
||||
in the package kokkos command allows it to be set from the command line.
|
||||
in the package kokkos command allows it to be set from the command-line.
|
||||
The default value for CPUs is 0.0, which means the LAMMPS default will be
|
||||
used, which is bins = 1/2 the size of the pairwise cutoff + neighbor skin
|
||||
distance. This is fine when neighbor lists are built on the CPU. For GPU
|
||||
@ -664,7 +664,7 @@ too.
|
||||
Also note that if the :doc:`-sf hybrid intel omp command-line switch <Run_options>` is used, it invokes a "package intel" command, followed by a
|
||||
"package omp" command, both with a setting of *Nthreads* = 0. Likewise
|
||||
for a hybrid suffix for gpu and omp. Note that KOKKOS also supports
|
||||
setting the number of OpenMP threads from the command line using the
|
||||
setting the number of OpenMP threads from the command-line using the
|
||||
"-k on" :doc:`command-line switch <Run_options>`. The default for
|
||||
KOKKOS is 1 thread per MPI task, so any other number of threads should
|
||||
be explicitly set using the "-k on" command-line switch (and this
|
||||
|
||||
@ -111,8 +111,8 @@ routines. For x-86 machines, there is a provided Makefile.mgptfast
|
||||
which enables the fast algebra routines, i.e. build LAMMPS with "make
|
||||
mgptfast". The user will be informed in the output files of the
|
||||
matrix kernels in use. To further improve speed, on x86 the option
|
||||
precision single can be added to the :doc:`pair_coeff <pair_coeff>`
|
||||
command line, which improves speed (up to a factor of two) at the cost
|
||||
*precision single* can be added to the :doc:`pair_coeff <pair_coeff>`
|
||||
command, which improves speed (up to a factor of two) at the cost
|
||||
of doing matrix calculations with 7 digit precision instead of the
|
||||
default 16. For consistency the default option can be specified
|
||||
explicitly by the option precision double.
|
||||
|
||||
@ -131,7 +131,7 @@ command.
|
||||
* LJ cutoff (distance units)
|
||||
|
||||
The last two coefficients are optional and default to the global values from
|
||||
the *pair_style* command line.
|
||||
the *pair_style* command.
|
||||
|
||||
----------
|
||||
|
||||
|
||||
@ -48,9 +48,9 @@ meaning that the trajectories of a restarted run will precisely match
|
||||
those produced by the original run had it continued on.
|
||||
|
||||
Some information about a restart file can be gathered directly from the
|
||||
command line when using LAMMPS with the :ref:`-restart2info
|
||||
<restart2info>` command line flag. On Unix-like operating systems (like
|
||||
Linux or macOS), one can also :ref:`configure the "file" command line
|
||||
command-line when using LAMMPS with the :ref:`-restart2info
|
||||
<restart2info>` command-line flag. On Unix-like operating systems (like
|
||||
Linux or macOS), one can also :ref:`configure the "file" command-line
|
||||
program <magic>` to display basic information about a restart file
|
||||
|
||||
The binary restart file format was not designed with backward, forward,
|
||||
@ -60,9 +60,9 @@ Changes to the architecture, compilation settings, or LAMMPS version can
|
||||
render a restart file unreadable or it may read the data incorrectly.
|
||||
If you want a more portable format, you can use the data file format as
|
||||
created by the :doc:`write_data <write_data>` command. Binary restart
|
||||
files can also be converted into a data file from the command line by
|
||||
files can also be converted into a data file from the command-line by
|
||||
the LAMMPS executable that wrote them using the :ref:`-restart2data
|
||||
<restart2data>` command line flag.
|
||||
<restart2data>` command-line flag.
|
||||
|
||||
Several things can prevent exact restarts due to round-off effects, in
|
||||
which case the trajectories in the 2 runs will slowly diverge. These
|
||||
|
||||
@ -30,7 +30,7 @@ Description
|
||||
|
||||
This command allows you to use variants of various styles if they
|
||||
exist. In that respect it operates the same as the :doc:`-suffix command-line switch <Run_options>`. It also has options to turn
|
||||
off or back on any suffix setting made via the command line.
|
||||
off or back on any suffix setting made via the command-line.
|
||||
|
||||
The specified style can be *gpu*, *intel*, *kk*, *omp*, *opt* or
|
||||
*hybrid*\ . These refer to optional packages that LAMMPS can be built
|
||||
|
||||
@ -1,7 +1,112 @@
|
||||
# CHANGELOG
|
||||
|
||||
## 4.5.01
|
||||
|
||||
[Full Changelog](https://github.com/kokkos/kokkos/compare/4.5.00...4.5.01)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fix re-builds after cleaning the binary tree when doing `add_subdirectory` on the Kokkos source [\#7557](https://github.com/kokkos/kokkos/pull/7557)
|
||||
* Update mdspan to include fix for submdspan and bracket operator with clang 15&16 [\#7559](https://github.com/kokkos/kokkos/pull/7559)
|
||||
* Fix DynRankView performance regression by re-introducing shortcut operator() impls [\#7606](https://github.com/kokkos/kokkos/pull/7606)
|
||||
* Add missing MI300A (`GFX942_APU`) option to Makefile build-system
|
||||
|
||||
## 4.5.00
|
||||
|
||||
[Full Changelog](https://github.com/kokkos/kokkos/compare/4.4.01...4.5.00)
|
||||
|
||||
### Features
|
||||
|
||||
* SYCL backend graduated to production ready
|
||||
* Introduce new `SequentialHostInit` view allocation property [\#7229](https://github.com/kokkos/kokkos/pull/7229) (backported in 4.4.01)
|
||||
* Support building with Run-Time Type Information (RTTI) disabled
|
||||
* Add new `KOKKOS_RELOCATABLE_FUNCTION` function annotation macro [\#5993](https://github.com/kokkos/kokkos/pull/5993)
|
||||
|
||||
### Backend and Architecture Enhancements
|
||||
|
||||
#### CUDA
|
||||
|
||||
* Adding occupancy tuning for CUDA architectures [\#6788](https://github.com/kokkos/kokkos/pull/6788)
|
||||
* By default disable `cudaMallocAsync` (i.e., revert the change made in version 4.2) [\#7353](https://github.com/kokkos/kokkos/pull/7353)
|
||||
|
||||
#### HIP
|
||||
|
||||
* Add support for AMD Phoenix APUs with Radeon 740M/760M/780M/880M/890M [\#7162](https://github.com/kokkos/kokkos/pull/7162)
|
||||
* Update maximum waves per CU values for consumer card [\#7347](https://github.com/kokkos/kokkos/pull/7347)
|
||||
* Check that Kokkos is running on the architecture it was compiled for [\#7379](https://github.com/kokkos/kokkos/pull/7379)
|
||||
* Add opt-in option to use `hipMallocAsync` instead of `hipMalloc` [\#7324](https://github.com/kokkos/kokkos/pull/7324)
|
||||
* Introduce new architecture option `AMD_GFX942_APU` for MI300A [\#7462](https://github.com/kokkos/kokkos/pull/7462)
|
||||
|
||||
#### SYCL
|
||||
|
||||
* Move the `SYCL` backend out of the `Experimental` namespace [\#7171](https://github.com/kokkos/kokkos/pull/7171)
|
||||
* Introduce `KOKKOS_ENABLE_SYCL_RELOCATABLE_DEVICE_CODE` as CMake option [\#5993](https://github.com/kokkos/kokkos/pull/5993)
|
||||
|
||||
#### OpenACC
|
||||
|
||||
* Add support for building with the Clacc compiler [\#7198](https://github.com/kokkos/kokkos/pull/7198)
|
||||
* Workaround NVHPC collapse clause bug for `MDRangePolicy` [\#7425](https://github.com/kokkos/kokkos/pull/7425)
|
||||
|
||||
#### HPX
|
||||
|
||||
* Implement `Experimental::partition_space` to produce truly independent execution spaces [\#7287](https://github.com/kokkos/kokkos/pull/7287)
|
||||
|
||||
#### Threads
|
||||
|
||||
* Fix compilation for `parallel_reduce` `MDRange` with `Dynamic` scheduling [\#7478](https://github.com/kokkos/kokkos/pull/7478)
|
||||
* Fix race conditions on ARM architectures [\#7498](https://github.com/kokkos/kokkos/pull/7498)
|
||||
|
||||
#### OpenMP
|
||||
|
||||
* Fix run time behavior when compiling with `-fvisibility-hidden` [\#7284](https://github.com/kokkos/kokkos/pull/7284) (backported in 4.4.01)
|
||||
* Fix linking with Cray Clang compiler [\#7341](https://github.com/kokkos/kokkos/pull/7341)
|
||||
|
||||
#### Serial
|
||||
|
||||
* Allow `Kokkos_ENABLE_ATOMICS_BYPASS` to skip mutexes to remediate performance regression in 4.4 [\#7369](https://github.com/kokkos/kokkos/pull/7369)
|
||||
|
||||
### General Enhancements
|
||||
|
||||
* Improve `View` initialization/destruction for non-scalar trivial and trivially-destructible types [\#7219](https://github.com/kokkos/kokkos/pull/7219) [\#7225](https://github.com/kokkos/kokkos/pull/7225)
|
||||
* Add getters for default tile sizes used in `MDRangePolicy` [\#6839](https://github.com/kokkos/kokkos/pull/6839)
|
||||
* Improve performance of `Kokkos::sort` when `std::sort` is used [\#7264](https://github.com/kokkos/kokkos/pull/7264)
|
||||
* Add range-based for loop support for `Array<T, N>` [\#7293](https://github.com/kokkos/kokkos/pull/7293)
|
||||
* Allow functors as reducers for nested team parallel reduce [\#6921](https://github.com/kokkos/kokkos/pull/6921)
|
||||
* Avoid making copies of string rvalue reference arguments to `view_alloc()` [\#7364](https://github.com/kokkos/kokkos/pull/7364)
|
||||
* Add `atomic_{mod,xor,nand,lshift,rshift}` [\#7458](https://github.com/kokkos/kokkos/pull/7458)
|
||||
* Allow using `SequentialHostInit` with `Kokkos::DualView` [\#7456](https://github.com/kokkos/kokkos/pull/7456)
|
||||
* Add `Graph::instantiate()` [\#7240](https://github.com/kokkos/kokkos/pull/7240)
|
||||
* Allow an arbitrary execution space instance to be used in `Kokkos::Graph::submit()` [\#7249](https://github.com/kokkos/kokkos/pull/7249)
|
||||
* Enable compile-time diagnostic of illegal reduction target for graphs [\#7460](https://github.com/kokkos/kokkos/pull/7460)
|
||||
|
||||
### Build System Changes
|
||||
|
||||
* Make sure backend-specific options such as `IMPL_CUDA_MALLOC_ASYNC` only show when that backend is actually enabled [\#7228](https://github.com/kokkos/kokkos/pull/7228)
|
||||
* Major refactoring removing `TriBITS` paths [\#6164](https://github.com/kokkos/kokkos/pull/6164)
|
||||
* Add support for SpacemiT K60 (RISC-V) [\#7160](https://github.com/kokkos/kokkos/pull/7160)
|
||||
|
||||
### Deprecations
|
||||
|
||||
* Deprecate Tasking interface [\#7393](https://github.com/kokkos/kokkos/pull/7393)
|
||||
* Deprecate `atomic_query_version`, `atomic_assign`, `atomic_compare_exchange_strong`, `atomic_{inc, dec}rement` [\#7458](https://github.com/kokkos/kokkos/pull/7458)
|
||||
* Deprecate `{OpenMP,HPX}::is_asynchronous()` [\#7322](https://github.com/kokkos/kokkos/pull/7322)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fix undefined behavior in `BinSort` when sorting within bins on host [\#7223](https://github.com/kokkos/kokkos/pull/7223)
|
||||
* Using CUDA limits to set extents for blocks, grids [\#7235](https://github.com/kokkos/kokkos/pull/7235)
|
||||
* Fix `deep_copy (serial_exec, dst, src)` with multiple host backends [\#7245](https://github.com/kokkos/kokkos/pull/7245)
|
||||
* Skip `RangePolicy` bounds conversion checks if roundtrip convertibility is not provided [\#7172](https://github.com/kokkos/kokkos/pull/7172)
|
||||
* Allow extracting host and device views from `DualView` with `const` value type [\#7242](https://github.com/kokkos/kokkos/pull/7242)
|
||||
* Fix `TeamPolicy` array reduction for CUDA and HIP [\#6296](https://github.com/kokkos/kokkos/pull/6296)
|
||||
* Fix implicit copy assignment operators in few AVX2 masks being deleted [\#7296](https://github.com/kokkos/kokkos/pull/7296)
|
||||
* Fix configuring without architecture flags for SYCL [\#7303](https://github.com/kokkos/kokkos/pull/7303)
|
||||
* Set an initial value index during join of `MinLoc`, `MaxLoc` or `MinMaxLoc` [\#7330](https://github.com/kokkos/kokkos/pull/7330)
|
||||
* Fix storage lifetime of driver for global launch of graph nodes for CUDA and HIP [\#7365](https://github.com/kokkos/kokkos/pull/7365)
|
||||
* Make `value_type` for `RandomAccessIterator` non-`const` [\#7485](https://github.com/kokkos/kokkos/pull/7485)
|
||||
|
||||
## [4.4.01](https://github.com/kokkos/kokkos/tree/4.4.01)
|
||||
[Full Changelog](https://github.com/kokkos/kokkos/compare/4.0.00...4.4.01)
|
||||
[Full Changelog](https://github.com/kokkos/kokkos/compare/4.4.00...4.4.01)
|
||||
|
||||
### Features:
|
||||
* Introduce new SequentialHostInit view allocation property [\#7229](https://github.com/kokkos/kokkos/pull/7229)
|
||||
@ -13,7 +118,7 @@
|
||||
|
||||
### Bug Fixes
|
||||
* OpenMP: Fix issue related to the visibility of an internal symbol with shared libraries that affected `ScatterView` in particular [\#7284](https://github.com/kokkos/kokkos/pull/7284)
|
||||
* Fix implicit copy assignment operators in few AVX2 masks being deleted [#7296](https://github.com/kokkos/kokkos/pull/7296)
|
||||
* Fix implicit copy assignment operators in few AVX2 masks being deleted [\#7296](https://github.com/kokkos/kokkos/pull/7296)
|
||||
|
||||
## [4.4.00](https://github.com/kokkos/kokkos/tree/4.4.00)
|
||||
[Full Changelog](https://github.com/kokkos/kokkos/compare/4.3.01...4.4.00)
|
||||
@ -57,6 +162,7 @@
|
||||
* SIMD: Allow flexible vector width for 32 bit types [\#6802](https://github.com/kokkos/kokkos/pull/6802)
|
||||
* Updates for `Kokkos::Array`: add `kokkos_swap(Array<T, N>)` specialization [\#6943](https://github.com/kokkos/kokkos/pull/6943), add `Kokkos::to_array` [\#6375](https://github.com/kokkos/kokkos/pull/6375), make `Kokkos::Array` equality-comparable [\#7148](https://github.com/kokkos/kokkos/pull/7148)
|
||||
* Structured binding support for `Kokkos::complex` [\#7040](https://github.com/kokkos/kokkos/pull/7040)
|
||||
* Introduce `KOKKOS_DEDUCTION_GUIDE` macro to allow for portable user-defined deduction guides [\#6954](https://github.com/kokkos/kokkos/pull/6954)
|
||||
|
||||
### Build System Changes
|
||||
* Do not require OpenMP support for languages other than CXX [\#6965](https://github.com/kokkos/kokkos/pull/6965)
|
||||
@ -1388,7 +1494,7 @@
|
||||
**Closed issues:**
|
||||
|
||||
- Silent error (Validate storage level arg to set_scratch_size) [\#3097](https://github.com/kokkos/kokkos/issues/3097)
|
||||
- Remove KOKKKOS\_ENABLE\_PROFILING Option [\#3095](https://github.com/kokkos/kokkos/issues/3095)
|
||||
- Remove KOKKOS\_ENABLE\_PROFILING Option [\#3095](https://github.com/kokkos/kokkos/issues/3095)
|
||||
- Cuda 11 -\> allow C++17 [\#3083](https://github.com/kokkos/kokkos/issues/3083)
|
||||
- In source build failure not explained [\#3081](https://github.com/kokkos/kokkos/issues/3081)
|
||||
- Allow naming of Views for initialization kernel [\#3070](https://github.com/kokkos/kokkos/issues/3070)
|
||||
|
||||
@ -1,12 +1,11 @@
|
||||
cmake_minimum_required(VERSION 3.16 FATAL_ERROR)
|
||||
|
||||
# Disable in-source builds to prevent source tree corruption.
|
||||
if( "${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}" )
|
||||
message( FATAL_ERROR "FATAL: In-source builds are not allowed. You should create a separate directory for build files and delete CMakeCache.txt." )
|
||||
endif()
|
||||
|
||||
if (COMMAND TRIBITS_PACKAGE)
|
||||
TRIBITS_PACKAGE(Kokkos)
|
||||
if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
|
||||
message(
|
||||
FATAL_ERROR
|
||||
"FATAL: In-source builds are not allowed. You should create a separate directory for build files and delete CMakeCache.txt."
|
||||
)
|
||||
endif()
|
||||
|
||||
# We want to determine if options are given with the wrong case
|
||||
@ -15,142 +14,141 @@ endif()
|
||||
# form a list of all the given variables. If it begins with any
|
||||
# case of KoKkOS, we add it to the list.
|
||||
|
||||
GET_CMAKE_PROPERTY(_variableNames VARIABLES)
|
||||
SET(KOKKOS_GIVEN_VARIABLES)
|
||||
FOREACH (var ${_variableNames})
|
||||
STRING(TOUPPER ${var} UC_VAR)
|
||||
STRING(FIND ${UC_VAR} KOKKOS IDX)
|
||||
IF (${IDX} EQUAL 0)
|
||||
LIST(APPEND KOKKOS_GIVEN_VARIABLES ${var})
|
||||
ENDIF()
|
||||
ENDFOREACH()
|
||||
get_cmake_property(_variableNames VARIABLES)
|
||||
set(KOKKOS_GIVEN_VARIABLES)
|
||||
foreach(var ${_variableNames})
|
||||
string(TOUPPER ${var} UC_VAR)
|
||||
string(FIND ${UC_VAR} KOKKOS IDX)
|
||||
if(${IDX} EQUAL 0)
|
||||
list(APPEND KOKKOS_GIVEN_VARIABLES ${var})
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
# Basic initialization (Used in KOKKOS_SETTINGS)
|
||||
SET(Kokkos_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
SET(KOKKOS_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
SET(KOKKOS_SRC_PATH ${Kokkos_SOURCE_DIR})
|
||||
SET(KOKKOS_PATH ${Kokkos_SOURCE_DIR})
|
||||
SET(KOKKOS_TOP_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR})
|
||||
set(Kokkos_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
set(KOKKOS_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
set(KOKKOS_SRC_PATH ${Kokkos_SOURCE_DIR})
|
||||
set(KOKKOS_PATH ${Kokkos_SOURCE_DIR})
|
||||
set(KOKKOS_TOP_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR})
|
||||
|
||||
set(PACKAGE_NAME Kokkos)
|
||||
set(PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
|
||||
# Is this a build as part of Trilinos?
|
||||
IF(COMMAND TRIBITS_PACKAGE_DECL)
|
||||
SET(KOKKOS_HAS_TRILINOS ON)
|
||||
ELSE()
|
||||
SET(KOKKOS_HAS_TRILINOS OFF)
|
||||
SET(PACKAGE_NAME Kokkos)
|
||||
SET(PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
ENDIF()
|
||||
# Is this build a subdirectory of another project
|
||||
GET_DIRECTORY_PROPERTY(HAS_PARENT PARENT_DIRECTORY)
|
||||
get_directory_property(HAS_PARENT PARENT_DIRECTORY)
|
||||
|
||||
include(${KOKKOS_SRC_PATH}/cmake/kokkos_functions.cmake)
|
||||
include(${KOKKOS_SRC_PATH}/cmake/kokkos_pick_cxx_std.cmake)
|
||||
|
||||
INCLUDE(${KOKKOS_SRC_PATH}/cmake/kokkos_functions.cmake)
|
||||
INCLUDE(${KOKKOS_SRC_PATH}/cmake/kokkos_pick_cxx_std.cmake)
|
||||
|
||||
SET(KOKKOS_ENABLED_OPTIONS) #exported in config file
|
||||
SET(KOKKOS_ENABLED_DEVICES) #exported in config file
|
||||
SET(KOKKOS_ENABLED_TPLS) #exported in config file
|
||||
SET(KOKKOS_ENABLED_ARCH_LIST) #exported in config file
|
||||
set(KOKKOS_ENABLED_OPTIONS) #exported in config file
|
||||
set(KOKKOS_ENABLED_DEVICES) #exported in config file
|
||||
set(KOKKOS_ENABLED_TPLS) #exported in config file
|
||||
set(KOKKOS_ENABLED_ARCH_LIST) #exported in config file
|
||||
|
||||
#These are helper flags used for sanity checks during config
|
||||
#Certain features should depend on other features being configured first
|
||||
SET(KOKKOS_CFG_DAG_NONE On) #sentinel to indicate no dependencies
|
||||
SET(KOKKOS_CFG_DAG_DEVICES_DONE Off)
|
||||
SET(KOKKOS_CFG_DAG_OPTIONS_DONE Off)
|
||||
SET(KOKKOS_CFG_DAG_ARCH_DONE Off)
|
||||
SET(KOKKOS_CFG_DAG_CXX_STD_DONE Off)
|
||||
SET(KOKKOS_CFG_DAG_COMPILER_ID_DONE Off)
|
||||
FUNCTION(KOKKOS_CFG_DEPENDS SUCCESSOR PRECURSOR)
|
||||
SET(PRE_FLAG KOKKOS_CFG_DAG_${PRECURSOR})
|
||||
SET(POST_FLAG KOKKOS_CFG_DAG_${SUCCESSOR})
|
||||
IF (NOT ${PRE_FLAG})
|
||||
MESSAGE(FATAL_ERROR "Bad CMake refactor: feature ${SUCCESSOR} cannot be configured until ${PRECURSOR} is configured")
|
||||
ENDIF()
|
||||
GLOBAL_SET(${POST_FLAG} On)
|
||||
ENDFUNCTION()
|
||||
set(KOKKOS_CFG_DAG_NONE On) #sentinel to indicate no dependencies
|
||||
set(KOKKOS_CFG_DAG_DEVICES_DONE Off)
|
||||
set(KOKKOS_CFG_DAG_OPTIONS_DONE Off)
|
||||
set(KOKKOS_CFG_DAG_ARCH_DONE Off)
|
||||
set(KOKKOS_CFG_DAG_CXX_STD_DONE Off)
|
||||
set(KOKKOS_CFG_DAG_COMPILER_ID_DONE Off)
|
||||
function(KOKKOS_CFG_DEPENDS SUCCESSOR PRECURSOR)
|
||||
set(PRE_FLAG KOKKOS_CFG_DAG_${PRECURSOR})
|
||||
set(POST_FLAG KOKKOS_CFG_DAG_${SUCCESSOR})
|
||||
if(NOT ${PRE_FLAG})
|
||||
message(
|
||||
FATAL_ERROR "Bad CMake refactor: feature ${SUCCESSOR} cannot be configured until ${PRECURSOR} is configured"
|
||||
)
|
||||
endif()
|
||||
global_set(${POST_FLAG} On)
|
||||
endfunction()
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH cmake/Modules)
|
||||
|
||||
LIST(APPEND CMAKE_MODULE_PATH cmake/Modules)
|
||||
set(CMAKE_DISABLE_SOURCE_CHANGES ON)
|
||||
set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)
|
||||
|
||||
IF(NOT KOKKOS_HAS_TRILINOS)
|
||||
set(CMAKE_DISABLE_SOURCE_CHANGES ON)
|
||||
set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)
|
||||
# What language are we compiling Kokkos as
|
||||
# downstream dependencies need to match this!
|
||||
set(KOKKOS_COMPILE_LANGUAGE CXX)
|
||||
# use lower case here since we didn't parse options yet
|
||||
if(Kokkos_ENABLE_COMPILE_AS_CMAKE_LANGUAGE AND Kokkos_ENABLE_CUDA)
|
||||
|
||||
# What language are we compiling Kokkos as
|
||||
# downstream dependencies need to match this!
|
||||
SET(KOKKOS_COMPILE_LANGUAGE CXX)
|
||||
# use lower case here since we didn't parse options yet
|
||||
IF (Kokkos_ENABLE_COMPILE_AS_CMAKE_LANGUAGE AND Kokkos_ENABLE_CUDA)
|
||||
# Without this as a language for the package we would get a C++ compiler enabled.
|
||||
# but we still need a C++ compiler even if we build all our cpp files as CUDA only
|
||||
# because otherwise the C++ features don't work etc.
|
||||
# This is just the rather odd way CMake does this, since CUDA doesn't imply C++ even
|
||||
# though it is a C++ extension ... (but I guess it didn't use to be back in CUDA 4 or 5
|
||||
# days.
|
||||
set(KOKKOS_INTERNAL_EXTRA_COMPILE_LANGUAGE CXX)
|
||||
|
||||
# Without this as a language for the package we would get a C++ compiler enabled.
|
||||
# but we still need a C++ compiler even if we build all our cpp files as CUDA only
|
||||
# because otherwise the C++ features don't work etc.
|
||||
# This is just the rather odd way CMake does this, since CUDA doesn't imply C++ even
|
||||
# though it is a C++ extension ... (but I guess it didn't use to be back in CUDA 4 or 5
|
||||
# days.
|
||||
SET(KOKKOS_INTERNAL_EXTRA_COMPILE_LANGUAGE CXX)
|
||||
set(KOKKOS_COMPILE_LANGUAGE CUDA)
|
||||
endif()
|
||||
# use lower case here since we haven't parsed options yet
|
||||
if(Kokkos_ENABLE_COMPILE_AS_CMAKE_LANGUAGE AND Kokkos_ENABLE_HIP)
|
||||
|
||||
SET(KOKKOS_COMPILE_LANGUAGE CUDA)
|
||||
ENDIF()
|
||||
# use lower case here since we haven't parsed options yet
|
||||
IF (Kokkos_ENABLE_COMPILE_AS_CMAKE_LANGUAGE AND Kokkos_ENABLE_HIP)
|
||||
# Without this as a language for the package we would get a C++ compiler enabled.
|
||||
# but we still need a C++ compiler even if we build all our cpp files as HIP only
|
||||
# because otherwise the C++ features don't work etc.
|
||||
set(KOKKOS_INTERNAL_EXTRA_COMPILE_LANGUAGE CXX)
|
||||
|
||||
# Without this as a language for the package we would get a C++ compiler enabled.
|
||||
# but we still need a C++ compiler even if we build all our cpp files as HIP only
|
||||
# because otherwise the C++ features don't work etc.
|
||||
SET(KOKKOS_INTERNAL_EXTRA_COMPILE_LANGUAGE CXX)
|
||||
set(KOKKOS_COMPILE_LANGUAGE HIP)
|
||||
endif()
|
||||
|
||||
SET(KOKKOS_COMPILE_LANGUAGE HIP)
|
||||
ENDIF()
|
||||
if(Spack_WORKAROUND)
|
||||
if(Kokkos_ENABLE_COMPILE_AS_CMAKE_LANGUAGE)
|
||||
message(FATAL_ERROR "Can't currently use Kokkos_ENABLE_COMPILER_AS_CMAKE_LANGUAGE in a spack installation!")
|
||||
endif()
|
||||
|
||||
IF (Spack_WORKAROUND)
|
||||
IF (Kokkos_ENABLE_COMPILE_AS_CMAKE_LANGUAGE)
|
||||
MESSAGE(FATAL_ERROR "Can't currently use Kokkos_ENABLE_COMPILER_AS_CMAKE_LANGUAGE in a spack installation!")
|
||||
ENDIF()
|
||||
|
||||
#if we are explicitly using Spack for development,
|
||||
#nuke the Spack compiler
|
||||
SET(SPACK_CXX $ENV{SPACK_CXX})
|
||||
IF(SPACK_CXX)
|
||||
SET(CMAKE_CXX_COMPILER ${SPACK_CXX} CACHE STRING "the C++ compiler" FORCE)
|
||||
SET(ENV{CXX} ${SPACK_CXX})
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
# Always call the project command to define Kokkos_ variables
|
||||
# and to make sure that C++ is an enabled language
|
||||
PROJECT(Kokkos ${KOKKOS_COMPILE_LANGUAGE} ${KOKKOS_INTERNAL_EXTRA_COMPILE_LANGUAGE})
|
||||
IF(NOT HAS_PARENT)
|
||||
IF (NOT CMAKE_BUILD_TYPE)
|
||||
SET(DEFAULT_BUILD_TYPE "RelWithDebInfo")
|
||||
MESSAGE(STATUS "Setting build type to '${DEFAULT_BUILD_TYPE}' as none was specified.")
|
||||
SET(CMAKE_BUILD_TYPE "${DEFAULT_BUILD_TYPE}" CACHE STRING
|
||||
"Choose the type of build, options are: Debug, Release, RelWithDebInfo and MinSizeRel."
|
||||
FORCE)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
ELSE()
|
||||
SET(KOKKOS_COMPILE_LANGUAGE CXX)
|
||||
ENDIF()
|
||||
|
||||
IF (NOT CMAKE_SIZEOF_VOID_P)
|
||||
STRING(FIND ${CMAKE_CXX_COMPILER} nvcc_wrapper FIND_IDX)
|
||||
IF (NOT FIND_IDX STREQUAL -1)
|
||||
MESSAGE(FATAL_ERROR "Kokkos did not configure correctly and failed to validate compiler. The most likely cause is CUDA linkage using nvcc_wrapper. Please ensure your CUDA environment is correctly configured.")
|
||||
ELSE()
|
||||
MESSAGE(FATAL_ERROR "Kokkos did not configure correctly and failed to validate compiler. The most likely cause is linkage errors during CMake compiler validation. Please consult the CMake error log shown below for the exact error during compiler validation")
|
||||
ENDIF()
|
||||
ELSEIF (NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
IF(CMAKE_SIZEOF_VOID_P EQUAL 4)
|
||||
MESSAGE(WARNING "32-bit builds are experimental and not officially supported.")
|
||||
SET(KOKKOS_IMPL_32BIT ON)
|
||||
ELSE()
|
||||
MESSAGE(FATAL_ERROR "Kokkos assumes a 64-bit build, i.e., 8-byte pointers, but found ${CMAKE_SIZEOF_VOID_P}-byte pointers instead;")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
#if we are explicitly using Spack for development,
|
||||
#nuke the Spack compiler
|
||||
set(SPACK_CXX $ENV{SPACK_CXX})
|
||||
if(SPACK_CXX)
|
||||
set(CMAKE_CXX_COMPILER ${SPACK_CXX} CACHE STRING "the C++ compiler" FORCE)
|
||||
set(ENV{CXX} ${SPACK_CXX})
|
||||
endif()
|
||||
endif()
|
||||
# Always call the project command to define Kokkos_ variables
|
||||
# and to make sure that C++ is an enabled language
|
||||
project(Kokkos ${KOKKOS_COMPILE_LANGUAGE} ${KOKKOS_INTERNAL_EXTRA_COMPILE_LANGUAGE})
|
||||
if(NOT HAS_PARENT)
|
||||
if(NOT CMAKE_BUILD_TYPE)
|
||||
set(DEFAULT_BUILD_TYPE "RelWithDebInfo")
|
||||
message(STATUS "Setting build type to '${DEFAULT_BUILD_TYPE}' as none was specified.")
|
||||
set(CMAKE_BUILD_TYPE "${DEFAULT_BUILD_TYPE}"
|
||||
CACHE STRING "Choose the type of build, options are: Debug, Release, RelWithDebInfo and MinSizeRel." FORCE
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_SIZEOF_VOID_P)
|
||||
string(FIND ${CMAKE_CXX_COMPILER} nvcc_wrapper FIND_IDX)
|
||||
if(NOT FIND_IDX STREQUAL -1)
|
||||
message(
|
||||
FATAL_ERROR
|
||||
"Kokkos did not configure correctly and failed to validate compiler. The most likely cause is CUDA linkage using nvcc_wrapper. Please ensure your CUDA environment is correctly configured."
|
||||
)
|
||||
else()
|
||||
message(
|
||||
FATAL_ERROR
|
||||
"Kokkos did not configure correctly and failed to validate compiler. The most likely cause is linkage errors during CMake compiler validation. Please consult the CMake error log shown below for the exact error during compiler validation"
|
||||
)
|
||||
endif()
|
||||
elseif(NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 4)
|
||||
message(WARNING "32-bit builds are experimental and not officially supported.")
|
||||
set(KOKKOS_IMPL_32BIT ON)
|
||||
else()
|
||||
message(
|
||||
FATAL_ERROR
|
||||
"Kokkos assumes a 64-bit build, i.e., 8-byte pointers, but found ${CMAKE_SIZEOF_VOID_P}-byte pointers instead;"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(Kokkos_VERSION_MAJOR 4)
|
||||
set(Kokkos_VERSION_MINOR 4)
|
||||
set(Kokkos_VERSION_MINOR 5)
|
||||
set(Kokkos_VERSION_PATCH 1)
|
||||
set(Kokkos_VERSION "${Kokkos_VERSION_MAJOR}.${Kokkos_VERSION_MINOR}.${Kokkos_VERSION_PATCH}")
|
||||
message(STATUS "Kokkos version: ${Kokkos_VERSION}")
|
||||
@ -164,58 +162,54 @@ math(EXPR KOKKOS_VERSION_PATCH "${KOKKOS_VERSION} % 100")
|
||||
|
||||
# Load either the real TriBITS or a TriBITS wrapper
|
||||
# for certain utility functions that are universal (like GLOBAL_SET)
|
||||
INCLUDE(${KOKKOS_SRC_PATH}/cmake/fake_tribits.cmake)
|
||||
include(${KOKKOS_SRC_PATH}/cmake/fake_tribits.cmake)
|
||||
|
||||
IF (Kokkos_ENABLE_CUDA)
|
||||
if(Kokkos_ENABLE_CUDA)
|
||||
# If we are building CUDA, we have tricked CMake because we declare a CXX project
|
||||
# If the default C++ standard for a given compiler matches the requested
|
||||
# standard, then CMake just omits the -std flag in later versions of CMake
|
||||
# This breaks CUDA compilation (CUDA compiler can have a different default
|
||||
# -std then the underlying host compiler by itself). Setting this variable
|
||||
# forces CMake to always add the -std flag even if it thinks it doesn't need it
|
||||
GLOBAL_SET(CMAKE_CXX_STANDARD_DEFAULT 98)
|
||||
ENDIF()
|
||||
global_set(CMAKE_CXX_STANDARD_DEFAULT 98)
|
||||
endif()
|
||||
|
||||
# These are the variables we will append to as we go
|
||||
# I really wish these were regular variables
|
||||
# but scoping issues can make it difficult
|
||||
GLOBAL_SET(KOKKOS_COMPILE_OPTIONS)
|
||||
GLOBAL_SET(KOKKOS_LINK_OPTIONS)
|
||||
GLOBAL_SET(KOKKOS_AMDGPU_OPTIONS)
|
||||
GLOBAL_SET(KOKKOS_CUDA_OPTIONS)
|
||||
GLOBAL_SET(KOKKOS_CUDAFE_OPTIONS)
|
||||
GLOBAL_SET(KOKKOS_XCOMPILER_OPTIONS)
|
||||
global_set(KOKKOS_COMPILE_OPTIONS)
|
||||
global_set(KOKKOS_LINK_OPTIONS)
|
||||
global_set(KOKKOS_AMDGPU_OPTIONS)
|
||||
global_set(KOKKOS_CUDA_OPTIONS)
|
||||
global_set(KOKKOS_CUDAFE_OPTIONS)
|
||||
global_set(KOKKOS_XCOMPILER_OPTIONS)
|
||||
# We need to append text here for making sure TPLs
|
||||
# we import are available for an installed Kokkos
|
||||
GLOBAL_SET(KOKKOS_TPL_EXPORTS)
|
||||
global_set(KOKKOS_TPL_EXPORTS)
|
||||
# KOKKOS_DEPENDENCE is used by kokkos_launch_compiler
|
||||
GLOBAL_SET(KOKKOS_COMPILE_DEFINITIONS KOKKOS_DEPENDENCE)
|
||||
global_set(KOKKOS_COMPILE_DEFINITIONS KOKKOS_DEPENDENCE)
|
||||
# MSVC never goes through kokkos_launch_compiler
|
||||
IF(NOT MSVC)
|
||||
GLOBAL_APPEND(KOKKOS_LINK_OPTIONS -DKOKKOS_DEPENDENCE)
|
||||
ENDIF()
|
||||
if(NOT MSVC)
|
||||
global_append(KOKKOS_LINK_OPTIONS -DKOKKOS_DEPENDENCE)
|
||||
endif()
|
||||
|
||||
IF(Kokkos_ENABLE_TESTS AND NOT KOKKOS_HAS_TRILINOS)
|
||||
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/kokkos_configure_trilinos.cmake)
|
||||
|
||||
if(Kokkos_ENABLE_TESTS)
|
||||
find_package(GTest QUIET)
|
||||
ENDIF()
|
||||
endif()
|
||||
|
||||
# Include a set of Kokkos-specific wrapper functions that
|
||||
# will either call raw CMake or TriBITS
|
||||
# These are functions like KOKKOS_INCLUDE_DIRECTORIES
|
||||
INCLUDE(${KOKKOS_SRC_PATH}/cmake/kokkos_tribits.cmake)
|
||||
|
||||
include(${KOKKOS_SRC_PATH}/cmake/kokkos_tribits.cmake)
|
||||
|
||||
# Check the environment and set certain variables
|
||||
# to allow platform-specific checks
|
||||
INCLUDE(${KOKKOS_SRC_PATH}/cmake/kokkos_check_env.cmake)
|
||||
include(${KOKKOS_SRC_PATH}/cmake/kokkos_check_env.cmake)
|
||||
|
||||
IF(NOT KOKKOS_HAS_TRILINOS)
|
||||
# This does not work in Trilinos and we simply don't care
|
||||
# to fix it for Trilinos
|
||||
# Gather information about the runtime environment
|
||||
INCLUDE(${KOKKOS_SRC_PATH}/cmake/build_env_info.cmake)
|
||||
check_git_setup()
|
||||
ENDIF()
|
||||
include(${KOKKOS_SRC_PATH}/cmake/build_env_info.cmake)
|
||||
check_git_setup()
|
||||
|
||||
# The build environment setup goes in the following steps
|
||||
# 1) Check all the enable options. This includes checking Kokkos_DEVICES
|
||||
@ -223,102 +217,54 @@ ENDIF()
|
||||
# 3) Check the CXX standard and select important CXX flags
|
||||
# 4) Check for any third-party libraries (TPLs) like hwloc
|
||||
# 5) Check if optimizing for a particular architecture and add arch-specific flags
|
||||
KOKKOS_SETUP_BUILD_ENVIRONMENT()
|
||||
kokkos_setup_build_environment()
|
||||
|
||||
# Finish off the build
|
||||
# 6) Recurse into subdirectories and configure individual libraries
|
||||
# 7) Export and install targets
|
||||
|
||||
OPTION(BUILD_SHARED_LIBS "Build shared libraries" OFF)
|
||||
option(BUILD_SHARED_LIBS "Build shared libraries" OFF)
|
||||
|
||||
SET(KOKKOS_COMPONENT_LIBRARIES kokkoscore kokkoscontainers kokkosalgorithms kokkossimd)
|
||||
SET_PROPERTY(GLOBAL PROPERTY KOKKOS_INT_LIBRARIES kokkos ${KOKKOS_COMPONENT_LIBRARIES})
|
||||
set(KOKKOS_COMPONENT_LIBRARIES kokkoscore kokkoscontainers kokkosalgorithms kokkossimd)
|
||||
set_property(GLOBAL PROPERTY KOKKOS_INT_LIBRARIES kokkos ${KOKKOS_COMPONENT_LIBRARIES})
|
||||
|
||||
IF (KOKKOS_HAS_TRILINOS)
|
||||
SET(TRILINOS_INCDIR ${${PROJECT_NAME}_INSTALL_INCLUDE_DIR})
|
||||
SET(KOKKOS_HEADER_DIR ${TRILINOS_INCDIR})
|
||||
SET(KOKKOS_IS_SUBDIRECTORY TRUE)
|
||||
ELSEIF(HAS_PARENT)
|
||||
SET(KOKKOS_HEADER_DIR "include/kokkos")
|
||||
SET(KOKKOS_IS_SUBDIRECTORY TRUE)
|
||||
ELSE()
|
||||
SET(KOKKOS_HEADER_DIR "${CMAKE_INSTALL_INCLUDEDIR}")
|
||||
SET(KOKKOS_IS_SUBDIRECTORY FALSE)
|
||||
ENDIF()
|
||||
if(HAS_PARENT)
|
||||
set(KOKKOS_HEADER_DIR "include/kokkos")
|
||||
set(KOKKOS_IS_SUBDIRECTORY TRUE)
|
||||
else()
|
||||
set(KOKKOS_HEADER_DIR "${CMAKE_INSTALL_INCLUDEDIR}")
|
||||
set(KOKKOS_IS_SUBDIRECTORY FALSE)
|
||||
endif()
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
#
|
||||
# A) Forward declare the package so that certain options are also defined for
|
||||
# subpackages
|
||||
|
||||
## This restores the old behavior of ProjectCompilerPostConfig.cmake
|
||||
# We must do this before KOKKOS_PACKAGE_DECL
|
||||
IF (KOKKOS_HAS_TRILINOS)
|
||||
# Overwrite the old flags at the top-level
|
||||
# Because Tribits doesn't use lists, it uses spaces for the list of CXX flags
|
||||
# we have to match the annoying behavior, also we have to preserve quotes
|
||||
# which needs another workaround.
|
||||
SET(KOKKOS_COMPILE_OPTIONS_TMP)
|
||||
IF (KOKKOS_ENABLE_HIP)
|
||||
LIST(APPEND KOKKOS_COMPILE_OPTIONS ${KOKKOS_AMDGPU_OPTIONS})
|
||||
ENDIF()
|
||||
FOREACH(OPTION ${KOKKOS_COMPILE_OPTIONS})
|
||||
STRING(FIND "${OPTION}" " " OPTION_HAS_WHITESPACE)
|
||||
IF(OPTION_HAS_WHITESPACE EQUAL -1)
|
||||
LIST(APPEND KOKKOS_COMPILE_OPTIONS_TMP "${OPTION}")
|
||||
ELSE()
|
||||
LIST(APPEND KOKKOS_COMPILE_OPTIONS_TMP "\"${OPTION}\"")
|
||||
ENDIF()
|
||||
ENDFOREACH()
|
||||
STRING(REPLACE ";" " " KOKKOSCORE_COMPILE_OPTIONS "${KOKKOS_COMPILE_OPTIONS_TMP}")
|
||||
LIST(APPEND KOKKOS_ALL_COMPILE_OPTIONS ${KOKKOS_COMPILE_OPTIONS})
|
||||
IF (KOKKOS_ENABLE_CUDA)
|
||||
LIST(APPEND KOKKOS_ALL_COMPILE_OPTIONS ${KOKKOS_CUDA_OPTIONS})
|
||||
ENDIF()
|
||||
FOREACH(XCOMP_FLAG ${KOKKOS_XCOMPILER_OPTIONS})
|
||||
SET(KOKKOSCORE_XCOMPILER_OPTIONS "${KOKKOSCORE_XCOMPILER_OPTIONS} -Xcompiler ${XCOMP_FLAG}")
|
||||
LIST(APPEND KOKKOS_ALL_COMPILE_OPTIONS -Xcompiler ${XCOMP_FLAG})
|
||||
ENDFOREACH()
|
||||
IF (KOKKOS_ENABLE_CUDA)
|
||||
STRING(REPLACE ";" " " KOKKOSCORE_CUDA_OPTIONS "${KOKKOS_CUDA_OPTIONS}")
|
||||
FOREACH(CUDAFE_FLAG ${KOKKOS_CUDAFE_OPTIONS})
|
||||
SET(KOKKOSCORE_CUDAFE_OPTIONS "${KOKKOSCORE_CUDAFE_OPTIONS} -Xcudafe ${CUDAFE_FLAG}")
|
||||
LIST(APPEND KOKKOS_ALL_COMPILE_OPTIONS -Xcudafe ${CUDAFE_FLAG})
|
||||
ENDFOREACH()
|
||||
ENDIF()
|
||||
#These flags get set up in KOKKOS_PACKAGE_DECL, which means they
|
||||
#must be configured before KOKKOS_PACKAGE_DECL
|
||||
SET(KOKKOS_ALL_COMPILE_OPTIONS
|
||||
$<$<COMPILE_LANGUAGE:CXX>:${KOKKOS_ALL_COMPILE_OPTIONS}>)
|
||||
ENDIF()
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
#
|
||||
# D) Process the subpackages (subdirectories) for Kokkos
|
||||
#
|
||||
KOKKOS_PROCESS_SUBPACKAGES()
|
||||
|
||||
kokkos_process_subpackages()
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
#
|
||||
# E) If Kokkos itself is enabled, process the Kokkos package
|
||||
#
|
||||
|
||||
KOKKOS_PACKAGE_POSTPROCESS()
|
||||
KOKKOS_CONFIGURE_CORE()
|
||||
kokkos_configure_core()
|
||||
|
||||
IF (NOT KOKKOS_HAS_TRILINOS AND NOT Kokkos_INSTALL_TESTING)
|
||||
ADD_LIBRARY(kokkos INTERFACE)
|
||||
if(NOT Kokkos_INSTALL_TESTING)
|
||||
add_library(kokkos INTERFACE)
|
||||
#Make sure in-tree projects can reference this as Kokkos::
|
||||
#to match the installed target names
|
||||
ADD_LIBRARY(Kokkos::kokkos ALIAS kokkos)
|
||||
add_library(Kokkos::kokkos ALIAS kokkos)
|
||||
# all_libs target is required for TriBITS-compliance
|
||||
ADD_LIBRARY(Kokkos::all_libs ALIAS kokkos)
|
||||
TARGET_LINK_LIBRARIES(kokkos INTERFACE ${KOKKOS_COMPONENT_LIBRARIES})
|
||||
KOKKOS_INTERNAL_ADD_LIBRARY_INSTALL(kokkos)
|
||||
ENDIF()
|
||||
INCLUDE(${KOKKOS_SRC_PATH}/cmake/kokkos_install.cmake)
|
||||
add_library(Kokkos::all_libs ALIAS kokkos)
|
||||
target_link_libraries(kokkos INTERFACE ${KOKKOS_COMPONENT_LIBRARIES})
|
||||
kokkos_internal_add_library_install(kokkos)
|
||||
endif()
|
||||
include(${KOKKOS_SRC_PATH}/cmake/kokkos_install.cmake)
|
||||
|
||||
# nvcc_wrapper is Kokkos' wrapper for NVIDIA's NVCC CUDA compiler.
|
||||
# Kokkos needs nvcc_wrapper in order to build. Other libraries and
|
||||
@ -327,16 +273,15 @@ INCLUDE(${KOKKOS_SRC_PATH}/cmake/kokkos_install.cmake)
|
||||
# as relative to ${CMAKE_INSTALL_PATH}.
|
||||
# KOKKOS_INSTALL_ADDITIONAL_FILES will install nvcc wrapper and other generated
|
||||
# files
|
||||
KOKKOS_INSTALL_ADDITIONAL_FILES()
|
||||
|
||||
kokkos_install_additional_files()
|
||||
|
||||
# Finally - if we are a subproject - make sure the enabled devices are visible
|
||||
IF (HAS_PARENT)
|
||||
FOREACH(DEV Kokkos_ENABLED_DEVICES)
|
||||
if(HAS_PARENT)
|
||||
foreach(DEV Kokkos_ENABLED_DEVICES)
|
||||
#I would much rather not make these cache variables or global properties, but I can't
|
||||
#make any guarantees on whether PARENT_SCOPE is good enough to make
|
||||
#these variables visible where I need them
|
||||
SET(Kokkos_ENABLE_${DEV} ON PARENT_SCOPE)
|
||||
SET_PROPERTY(GLOBAL PROPERTY Kokkos_ENABLE_${DEV} ON)
|
||||
ENDFOREACH()
|
||||
ENDIF()
|
||||
set(Kokkos_ENABLE_${DEV} ON PARENT_SCOPE)
|
||||
set_property(GLOBAL PROPERTY Kokkos_ENABLE_${DEV} ON)
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
@ -7,6 +7,8 @@ We actively welcome pull requests.
|
||||
3. If you've changed APIs, update the documentation.
|
||||
4. Ensure the test suite passes.
|
||||
|
||||
Before sending your patch for review, please try to ensure that it is formatted properly. We use clang-format version 16 for this.
|
||||
|
||||
## Issues
|
||||
We use GitHub issues to track public bugs. Please ensure your description is clear and has sufficient instructions to be able to reproduce the issue.
|
||||
|
||||
|
||||
@ -1,73 +0,0 @@
|
||||
|
||||
Developers of Kokkos (those who commit modifications to Kokkos)
|
||||
must maintain the snapshot of Kokkos in the Trilinos repository.
|
||||
|
||||
This file contains instructions for how to
|
||||
snapshot Kokkos from github.com/kokkos to Trilinos.
|
||||
|
||||
------------------------------------------------------------------------
|
||||
*** EVERYTHING GOES RIGHT WORKFLOW ***
|
||||
|
||||
1) Given a 'git clone' of Kokkos and of Trilinos repositories.
|
||||
1.1) Let ${KOKKOS} be the absolute path to the Kokkos clone.
|
||||
This path *must* terminate with the directory name 'kokkos';
|
||||
e.g., ${HOME}/kokkos .
|
||||
1.2) Let ${TRILINOS} be the absolute path to the Trilinos directory.
|
||||
|
||||
2) Given that the Kokkos build & test is clean and
|
||||
changes are committed to the Kokkos clone.
|
||||
|
||||
3) Snapshot the current commit in the Kokkos clone into the Trilinos clone.
|
||||
This overwrites ${TRILINOS}/packages/kokkos with the content of ${KOKKOS}:
|
||||
${KOKKOS}/scripts/snapshot.py --verbose ${KOKKOS} ${TRILINOS}/packages
|
||||
|
||||
4) Verify the snapshot commit happened as expected
|
||||
cd ${TRILINOS}/packages/kokkos
|
||||
git log -1 --name-only
|
||||
|
||||
5) Modify, build, and test Trilinos with the Kokkos snapshot.
|
||||
|
||||
6) Given that that the Trilinos build & test is clean and
|
||||
changes are committed to the Trilinos clone.
|
||||
|
||||
7) Attempt push to the Kokkos repository.
|
||||
If push fails then you must 'remove the Kokkos snapshot'
|
||||
from your Trilinos clone.
|
||||
See below.
|
||||
|
||||
8) Attempt to push to the Trilinos repository.
|
||||
If updating for a failed push requires you to change Kokkos you must
|
||||
'remove the Kokkos snapshot' from your Trilinos clone.
|
||||
See below.
|
||||
|
||||
------------------------------------------------------------------------
|
||||
*** WHEN SOMETHING GOES WRONG AND YOU MUST ***
|
||||
*** REMOVE THE KOKKOS SNAPSHOT FROM YOUR TRILINOS CLONE ***
|
||||
|
||||
1) Query the Trilinos clone commit log.
|
||||
git log --oneline
|
||||
|
||||
2) Note the <SHA1> of the commit to the Trillinos clone
|
||||
immediately BEFORE the Kokkos snapshot commit.
|
||||
Copy this <SHA1> for use in the next command.
|
||||
|
||||
3) IF more than one outstanding commit then you can remove just the
|
||||
Kokkos snapshot commit with 'git rebase -i'. Edit the rebase file.
|
||||
Remove or comment out the Kokkos snapshot commit entry.
|
||||
git rebase -i <SHA1>
|
||||
|
||||
4) IF the Kokkos snapshot commit is the one and only
|
||||
outstanding commit then remove just than commit.
|
||||
git reset --hard HEAD~1
|
||||
|
||||
------------------------------------------------------------------------
|
||||
*** REGARDING 'snapshot.py' TOOL ***
|
||||
|
||||
The 'snapshot.py' tool is developed and maintained by the
|
||||
Center for Computing Research (CCR)
|
||||
Software Engineering, Maintenance, and Support (SEMS) team.
|
||||
|
||||
Contact Brent Perschbacher <bmpersc@sandia.gov> for questions>
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
# Default settings common options.
|
||||
|
||||
#LAMMPS specific settings:
|
||||
#SPARTA specific settings:
|
||||
ifndef KOKKOS_PATH
|
||||
KOKKOS_PATH=../../lib/kokkos
|
||||
endif
|
||||
@ -11,7 +11,7 @@ CXXFLAGS += $(SHFLAGS)
|
||||
endif
|
||||
|
||||
KOKKOS_VERSION_MAJOR = 4
|
||||
KOKKOS_VERSION_MINOR = 4
|
||||
KOKKOS_VERSION_MINOR = 5
|
||||
KOKKOS_VERSION_PATCH = 1
|
||||
KOKKOS_VERSION = $(shell echo $(KOKKOS_VERSION_MAJOR)*10000+$(KOKKOS_VERSION_MINOR)*100+$(KOKKOS_VERSION_PATCH) | bc)
|
||||
|
||||
@ -23,7 +23,7 @@ KOKKOS_DEVICES ?= "OpenMP"
|
||||
# NVIDIA: Kepler,Kepler30,Kepler32,Kepler35,Kepler37,Maxwell,Maxwell50,Maxwell52,Maxwell53,Pascal60,Pascal61,Volta70,Volta72,Turing75,Ampere80,Ampere86,Ada89,Hopper90
|
||||
# ARM: ARMv80,ARMv81,ARMv8-ThunderX,ARMv8-TX2,A64FX,ARMv9-Grace
|
||||
# IBM: Power8,Power9
|
||||
# AMD-GPUS: AMD_GFX906,AMD_GFX908,AMD_GFX90A,AMD_GFX940,AMD_GFX942,AMD_GFX1030,AMD_GFX1100,AMD_GFX1103
|
||||
# AMD-GPUS: AMD_GFX906,AMD_GFX908,AMD_GFX90A,AMD_GFX940,AMD_GFX942,AMD_GFX942_APU,AMD_GFX1030,AMD_GFX1100,AMD_GFX1103
|
||||
# AMD-CPUS: AMDAVX,Zen,Zen2,Zen3
|
||||
# Intel-GPUs: Intel_Gen,Intel_Gen9,Intel_Gen11,Intel_Gen12LP,Intel_DG1,Intel_XeHP,Intel_PVC
|
||||
KOKKOS_ARCH ?= ""
|
||||
@ -40,16 +40,19 @@ KOKKOS_TRIBITS ?= "no"
|
||||
KOKKOS_STANDALONE_CMAKE ?= "no"
|
||||
|
||||
# Default settings specific options.
|
||||
# Options: force_uvm,use_ldg,rdc,enable_lambda,enable_constexpr,disable_malloc_async
|
||||
KOKKOS_CUDA_OPTIONS ?= "disable_malloc_async"
|
||||
# Options: force_uvm,use_ldg,rdc,enable_lambda,enable_constexpr,enable_malloc_async
|
||||
KOKKOS_CUDA_OPTIONS ?= ""
|
||||
|
||||
# Options: rdc
|
||||
# Options: rdc,enable_malloc_async
|
||||
KOKKOS_HIP_OPTIONS ?= ""
|
||||
|
||||
# Default settings specific options.
|
||||
# Options: enable_async_dispatch
|
||||
KOKKOS_HPX_OPTIONS ?= ""
|
||||
|
||||
#Options : force_host_as_device
|
||||
KOKKOS_OPENACC_OPTIONS ?= ""
|
||||
|
||||
# Helper functions for conversion to upper case
|
||||
uppercase_TABLE:=a,A b,B c,C d,D e,E f,F g,G h,H i,I j,J k,K l,L m,M n,N o,O p,P q,Q r,R s,S t,T u,U v,V w,W x,X y,Y z,Z
|
||||
uppercase_internal=$(if $1,$$(subst $(firstword $1),$(call uppercase_internal,$(wordlist 2,$(words $1),$1),$2)),$2)
|
||||
@ -92,7 +95,7 @@ KOKKOS_INTERNAL_CUDA_USE_UVM := $(call kokkos_has_string,$(KOKKOS_CUDA_OPTIONS),
|
||||
KOKKOS_INTERNAL_CUDA_USE_RELOC := $(call kokkos_has_string,$(KOKKOS_CUDA_OPTIONS),rdc)
|
||||
KOKKOS_INTERNAL_CUDA_USE_LAMBDA := $(call kokkos_has_string,$(KOKKOS_CUDA_OPTIONS),enable_lambda)
|
||||
KOKKOS_INTERNAL_CUDA_USE_CONSTEXPR := $(call kokkos_has_string,$(KOKKOS_CUDA_OPTIONS),enable_constexpr)
|
||||
KOKKOS_INTERNAL_CUDA_DISABLE_MALLOC_ASYNC := $(call kokkos_has_string,$(KOKKOS_CUDA_OPTIONS),disable_malloc_async)
|
||||
KOKKOS_INTERNAL_CUDA_ENABLE_MALLOC_ASYNC := $(call kokkos_has_string,$(KOKKOS_CUDA_OPTIONS),enable_malloc_async)
|
||||
KOKKOS_INTERNAL_HPX_ENABLE_ASYNC_DISPATCH := $(call kokkos_has_string,$(KOKKOS_HPX_OPTIONS),enable_async_dispatch)
|
||||
# deprecated
|
||||
KOKKOS_INTERNAL_ENABLE_DESUL_ATOMICS := $(call kokkos_has_string,$(KOKKOS_OPTIONS),enable_desul_atomics)
|
||||
@ -103,6 +106,8 @@ KOKKOS_INTERNAL_DISABLE_DEPRECATED_CODE := $(call kokkos_has_string,$(KOKKOS_OPT
|
||||
KOKKOS_INTERNAL_ENABLE_DEPRECATION_WARNINGS := $(call kokkos_has_string,$(KOKKOS_OPTIONS),enable_deprecation_warnings)
|
||||
|
||||
KOKKOS_INTERNAL_HIP_USE_RELOC := $(call kokkos_has_string,$(KOKKOS_HIP_OPTIONS),rdc)
|
||||
KOKKOS_INTERNAL_HIP_ENABLE_MALLOC_ASYNC := $(call kokkos_has_string,$(KOKKOS_HIP_OPTIONS),enable_malloc_async)
|
||||
KOKKOS_INTERNAL_OPENACC_FORCE_HOST_AS_DEVICE := $(call kokkos_has_string,$(KOKKOS_OPENACC_OPTIONS),force_host_as_device)
|
||||
|
||||
# Check for Kokkos Host Execution Spaces one of which must be on.
|
||||
KOKKOS_INTERNAL_USE_OPENMP := $(call kokkos_has_string,$(subst OpenMPTarget,,$(KOKKOS_DEVICES)),OpenMP)
|
||||
@ -178,7 +183,7 @@ KOKKOS_INTERNAL_COMPILER_CRAY := $(strip $(shell $(CXX) -craype-verbose 2
|
||||
KOKKOS_INTERNAL_COMPILER_NVCC := $(strip $(shell echo "$(shell export OMPI_CXX=$(OMPI_CXX); export MPICH_CXX=$(MPICH_CXX); $(CXX) --version 2>&1 | grep -c nvcc)>0" | bc))
|
||||
KOKKOS_INTERNAL_COMPILER_NVHPC := $(strip $(shell $(CXX) --version 2>&1 | grep -c "nvc++"))
|
||||
KOKKOS_INTERNAL_COMPILER_CLANG := $(call kokkos_has_string,$(KOKKOS_CXX_VERSION),clang)
|
||||
KOKKOS_INTERNAL_COMPILER_CRAY_CLANG := $(strip $(shell $(CXX) -craype-verbose 2>&1 | grep -c "clang++"))
|
||||
KOKKOS_INTERNAL_COMPILER_CRAY_CLANG := $(strip $(shell $(CXX) -craype-verbose 2>&1 | grep -v "error:" | grep -c "clang++"))
|
||||
KOKKOS_INTERNAL_COMPILER_INTEL_CLANG := $(call kokkos_has_string,$(KOKKOS_CXX_VERSION),oneAPI)
|
||||
KOKKOS_INTERNAL_COMPILER_APPLE_CLANG := $(call kokkos_has_string,$(KOKKOS_CXX_VERSION),Apple clang)
|
||||
KOKKOS_INTERNAL_COMPILER_HCC := $(call kokkos_has_string,$(KOKKOS_CXX_VERSION),HCC)
|
||||
@ -292,6 +297,8 @@ ifeq ($(KOKKOS_INTERNAL_USE_OPENACC), 1)
|
||||
# Set OpenACC flags.
|
||||
ifeq ($(KOKKOS_INTERNAL_COMPILER_NVHPC), 1)
|
||||
KOKKOS_INTERNAL_OPENACC_FLAG := -acc
|
||||
else ifeq ($(KOKKOS_INTERNAL_COMPILER_CLANG), 1)
|
||||
KOKKOS_INTERNAL_OPENACC_FLAG := -fopenacc -fopenacc-fake-async-wait -fopenacc-implicit-worker=vector -Wno-openacc-and-cxx -Wno-openmp-mapping -Wno-unknown-cuda-version -Wno-pass-failed
|
||||
else
|
||||
$(error Makefile.kokkos: OpenACC is enabled but the compiler must be NVHPC (got version string $(KOKKOS_CXX_VERSION)))
|
||||
endif
|
||||
@ -411,8 +418,8 @@ ifeq ($(KOKKOS_INTERNAL_USE_ARCH_NVIDIA), 0)
|
||||
endif
|
||||
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_NVIDIA), 1)
|
||||
KOKKOS_INTERNAL_NVCC_PATH := $(shell which nvcc)
|
||||
ifeq ($(KOKKOS_INTERNAL_COMPILER_CLANG), 1)
|
||||
KOKKOS_INTERNAL_NVCC_PATH := $(shell which nvcc)
|
||||
CUDA_PATH ?= $(KOKKOS_INTERNAL_NVCC_PATH:/bin/nvcc=)
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1)
|
||||
KOKKOS_INTERNAL_OPENMPTARGET_FLAG := $(KOKKOS_INTERNAL_OPENMPTARGET_FLAG) --cuda-path=$(CUDA_PATH)
|
||||
@ -457,6 +464,7 @@ ifeq ($(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX90A), 0)
|
||||
endif
|
||||
KOKKOS_INTERNAL_USE_ARCH_AMD_GFX940 := $(call kokkos_has_string,$(KOKKOS_ARCH),AMD_GFX940)
|
||||
KOKKOS_INTERNAL_USE_ARCH_AMD_GFX942 := $(call kokkos_has_string,$(KOKKOS_ARCH),AMD_GFX942)
|
||||
KOKKOS_INTERNAL_USE_ARCH_AMD_GFX942_APU := $(call kokkos_has_string,$(KOKKOS_ARCH),AMD_GFX942_APU)
|
||||
KOKKOS_INTERNAL_USE_ARCH_AMD_GFX1030 := $(call kokkos_has_string,$(KOKKOS_ARCH),AMD_GFX1030)
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX1030), 0)
|
||||
KOKKOS_INTERNAL_USE_ARCH_AMD_GFX1030 := $(call kokkos_has_string,$(KOKKOS_ARCH),NAVI1030)
|
||||
@ -466,6 +474,15 @@ ifeq ($(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX1100), 0)
|
||||
KOKKOS_INTERNAL_USE_ARCH_AMD_GFX1100 := $(call kokkos_has_string,$(KOKKOS_ARCH),NAVI1100)
|
||||
endif
|
||||
KOKKOS_INTERNAL_USE_ARCH_AMD_GFX1103 := $(call kokkos_has_string,$(KOKKOS_ARCH),AMD_GFX1103)
|
||||
KOKKOS_INTERNAL_USE_ARCH_AMD := $(shell expr $(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX906) \
|
||||
+ $(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX908) \
|
||||
+ $(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX90A) \
|
||||
+ $(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX940) \
|
||||
+ $(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX942) \
|
||||
+ $(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX942_APU) \
|
||||
+ $(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX1030) \
|
||||
+ $(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX1100) \
|
||||
+ $(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX1103))
|
||||
|
||||
# Any AVX?
|
||||
KOKKOS_INTERNAL_USE_ARCH_AVX := $(shell expr $(KOKKOS_INTERNAL_USE_ARCH_SNB) + $(KOKKOS_INTERNAL_USE_ARCH_AMDAVX))
|
||||
@ -561,6 +578,9 @@ endif
|
||||
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_OPENACC), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ENABLE_OPENACC")
|
||||
ifeq ($(KOKKOS_INTERNAL_OPENACC_FORCE_HOST_AS_DEVICE), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ENABLE_OPENACC_FORCE_HOST_AS_DEVICE")
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 1)
|
||||
@ -733,7 +753,7 @@ ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(KOKKOS_INTERNAL_CUDA_DISABLE_MALLOC_ASYNC), 0)
|
||||
ifeq ($(KOKKOS_INTERNAL_CUDA_ENABLE_MALLOC_ASYNC), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ENABLE_IMPL_CUDA_MALLOC_ASYNC")
|
||||
else
|
||||
tmp := $(call kokkos_append_header,"/* $H""undef KOKKOS_ENABLE_IMPL_CUDA_MALLOC_ASYNC */")
|
||||
@ -1024,86 +1044,122 @@ ifeq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_OPENACC), 1)
|
||||
ifeq ($(KOKKOS_INTERNAL_COMPILER_CLANG), 1)
|
||||
KOKKOS_INTERNAL_CUDA_ARCH_FLAG=--offload-arch
|
||||
endif
|
||||
endif
|
||||
|
||||
# Do not add this flag if its the cray compiler or the nvhpc compiler.
|
||||
ifeq ($(KOKKOS_INTERNAL_COMPILER_CRAY_CLANG), 0)
|
||||
ifeq ($(KOKKOS_INTERNAL_COMPILER_NVHPC), 0)
|
||||
# Lets start with adding architecture defines
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_KEPLER30), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_KEPLER")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_KEPLER30")
|
||||
# Lets start with adding architecture defines
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_KEPLER30), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_KEPLER")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_KEPLER30")
|
||||
ifeq ($(KOKKOS_INTERNAL_COMPILER_NVHPC), 0)
|
||||
KOKKOS_INTERNAL_CUDA_ARCH_FLAG := $(KOKKOS_INTERNAL_CUDA_ARCH_FLAG)=sm_30
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_KEPLER32), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_KEPLER")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_KEPLER32")
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_KEPLER32), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_KEPLER")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_KEPLER32")
|
||||
ifeq ($(KOKKOS_INTERNAL_COMPILER_NVHPC), 0)
|
||||
KOKKOS_INTERNAL_CUDA_ARCH_FLAG := $(KOKKOS_INTERNAL_CUDA_ARCH_FLAG)=sm_32
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_KEPLER35), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_KEPLER")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_KEPLER35")
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_KEPLER35), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_KEPLER")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_KEPLER35")
|
||||
ifeq ($(KOKKOS_INTERNAL_COMPILER_NVHPC), 0)
|
||||
KOKKOS_INTERNAL_CUDA_ARCH_FLAG := $(KOKKOS_INTERNAL_CUDA_ARCH_FLAG)=sm_35
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_KEPLER37), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_KEPLER")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_KEPLER37")
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_KEPLER37), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_KEPLER")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_KEPLER37")
|
||||
ifeq ($(KOKKOS_INTERNAL_COMPILER_NVHPC), 0)
|
||||
KOKKOS_INTERNAL_CUDA_ARCH_FLAG := $(KOKKOS_INTERNAL_CUDA_ARCH_FLAG)=sm_37
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_MAXWELL50), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_MAXWELL")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_MAXWELL50")
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_MAXWELL50), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_MAXWELL")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_MAXWELL50")
|
||||
ifeq ($(KOKKOS_INTERNAL_COMPILER_NVHPC), 0)
|
||||
KOKKOS_INTERNAL_CUDA_ARCH_FLAG := $(KOKKOS_INTERNAL_CUDA_ARCH_FLAG)=sm_50
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_MAXWELL52), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_MAXWELL")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_MAXWELL52")
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_MAXWELL52), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_MAXWELL")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_MAXWELL52")
|
||||
ifeq ($(KOKKOS_INTERNAL_COMPILER_NVHPC), 0)
|
||||
KOKKOS_INTERNAL_CUDA_ARCH_FLAG := $(KOKKOS_INTERNAL_CUDA_ARCH_FLAG)=sm_52
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_MAXWELL53), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_MAXWELL")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_MAXWELL53")
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_MAXWELL53), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_MAXWELL")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_MAXWELL53")
|
||||
ifeq ($(KOKKOS_INTERNAL_COMPILER_NVHPC), 0)
|
||||
KOKKOS_INTERNAL_CUDA_ARCH_FLAG := $(KOKKOS_INTERNAL_CUDA_ARCH_FLAG)=sm_53
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_PASCAL60), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_PASCAL")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_PASCAL60")
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_PASCAL60), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_PASCAL")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_PASCAL60")
|
||||
ifeq ($(KOKKOS_INTERNAL_COMPILER_NVHPC), 0)
|
||||
KOKKOS_INTERNAL_CUDA_ARCH_FLAG := $(KOKKOS_INTERNAL_CUDA_ARCH_FLAG)=sm_60
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_PASCAL61), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_PASCAL")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_PASCAL61")
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_PASCAL61), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_PASCAL")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_PASCAL61")
|
||||
ifeq ($(KOKKOS_INTERNAL_COMPILER_NVHPC), 0)
|
||||
KOKKOS_INTERNAL_CUDA_ARCH_FLAG := $(KOKKOS_INTERNAL_CUDA_ARCH_FLAG)=sm_61
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_VOLTA70), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_VOLTA")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_VOLTA70")
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_VOLTA70), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_VOLTA")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_VOLTA70")
|
||||
ifeq ($(KOKKOS_INTERNAL_COMPILER_NVHPC), 0)
|
||||
KOKKOS_INTERNAL_CUDA_ARCH_FLAG := $(KOKKOS_INTERNAL_CUDA_ARCH_FLAG)=sm_70
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_VOLTA72), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_VOLTA")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_VOLTA72")
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_VOLTA72), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_VOLTA")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_VOLTA72")
|
||||
ifeq ($(KOKKOS_INTERNAL_COMPILER_NVHPC), 0)
|
||||
KOKKOS_INTERNAL_CUDA_ARCH_FLAG := $(KOKKOS_INTERNAL_CUDA_ARCH_FLAG)=sm_72
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_TURING75), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_TURING75")
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_TURING75), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_TURING75")
|
||||
ifeq ($(KOKKOS_INTERNAL_COMPILER_NVHPC), 0)
|
||||
KOKKOS_INTERNAL_CUDA_ARCH_FLAG := $(KOKKOS_INTERNAL_CUDA_ARCH_FLAG)=sm_75
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_AMPERE80), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMPERE")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMPERE80")
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_AMPERE80), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMPERE")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMPERE80")
|
||||
ifeq ($(KOKKOS_INTERNAL_COMPILER_NVHPC), 0)
|
||||
KOKKOS_INTERNAL_CUDA_ARCH_FLAG := $(KOKKOS_INTERNAL_CUDA_ARCH_FLAG)=sm_80
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_AMPERE86), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMPERE")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMPERE86")
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_AMPERE86), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMPERE")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMPERE86")
|
||||
ifeq ($(KOKKOS_INTERNAL_COMPILER_NVHPC), 0)
|
||||
KOKKOS_INTERNAL_CUDA_ARCH_FLAG := $(KOKKOS_INTERNAL_CUDA_ARCH_FLAG)=sm_86
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_ADA89), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_ADA89")
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_ADA89), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_ADA89")
|
||||
ifeq ($(KOKKOS_INTERNAL_COMPILER_NVHPC), 0)
|
||||
KOKKOS_INTERNAL_CUDA_ARCH_FLAG := $(KOKKOS_INTERNAL_CUDA_ARCH_FLAG)=sm_89
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_HOPPER90), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_HOPPER")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_HOPPER90")
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_HOPPER90), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_HOPPER")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_HOPPER90")
|
||||
ifeq ($(KOKKOS_INTERNAL_COMPILER_NVHPC), 0)
|
||||
KOKKOS_INTERNAL_CUDA_ARCH_FLAG := $(KOKKOS_INTERNAL_CUDA_ARCH_FLAG)=sm_90
|
||||
endif
|
||||
endif
|
||||
@ -1119,6 +1175,9 @@ ifneq ($(KOKKOS_INTERNAL_USE_ARCH_NVIDIA), 0)
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1)
|
||||
KOKKOS_LDFLAGS += $(KOKKOS_INTERNAL_CUDA_ARCH_FLAG)
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_OPENACC), 1)
|
||||
KOKKOS_LDFLAGS += $(KOKKOS_INTERNAL_CUDA_ARCH_FLAG)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
@ -1126,43 +1185,48 @@ endif
|
||||
# Figure out the architecture flag for ROCm.
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX906), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GFX906")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GPU")
|
||||
KOKKOS_INTERNAL_HIP_ARCH_FLAG := --offload-arch=gfx906
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GPU \"gfx906\"")
|
||||
KOKKOS_INTERNAL_AMD_ARCH_FLAG := --offload-arch=gfx906
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX908), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GFX908")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GPU")
|
||||
KOKKOS_INTERNAL_HIP_ARCH_FLAG := --offload-arch=gfx908
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GPU \"gfx908\"")
|
||||
KOKKOS_INTERNAL_AMD_ARCH_FLAG := --offload-arch=gfx908
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX90A), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GFX90A")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GPU")
|
||||
KOKKOS_INTERNAL_HIP_ARCH_FLAG := --offload-arch=gfx90a
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GPU \"gfx90A\"")
|
||||
KOKKOS_INTERNAL_AMD_ARCH_FLAG := --offload-arch=gfx90a
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX940), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GFX940")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GPU")
|
||||
KOKKOS_INTERNAL_HIP_ARCH_FLAG := --offload-arch=gfx940
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GPU \"gfx940\"")
|
||||
KOKKOS_INTERNAL_AMD_ARCH_FLAG := --offload-arch=gfx940
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX942), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GFX942")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GPU")
|
||||
KOKKOS_INTERNAL_HIP_ARCH_FLAG := --offload-arch=gfx942
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GPU \"gfx942\"")
|
||||
KOKKOS_INTERNAL_AMD_ARCH_FLAG := --offload-arch=gfx942
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX942_APU), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GFX942_APU")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GPU \"gfx942\"")
|
||||
KOKKOS_INTERNAL_AMD_ARCH_FLAG := --offload-arch=gfx942
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX1030), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GFX1030")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GPU")
|
||||
KOKKOS_INTERNAL_HIP_ARCH_FLAG := --offload-arch=gfx1030
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GPU \"gfx1030\"")
|
||||
KOKKOS_INTERNAL_AMD_ARCH_FLAG := --offload-arch=gfx1030
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX1100), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GFX1100")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GPU")
|
||||
KOKKOS_INTERNAL_HIP_ARCH_FLAG := --offload-arch=gfx1100
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GPU \"gfx1100\"")
|
||||
KOKKOS_INTERNAL_AMD_ARCH_FLAG := --offload-arch=gfx1100
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX1103), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GFX1103")
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GPU")
|
||||
KOKKOS_INTERNAL_HIP_ARCH_FLAG := --offload-arch=gfx1103
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GPU \"gfx1103\"")
|
||||
KOKKOS_INTERNAL_AMD_ARCH_FLAG := --offload-arch=gfx1103
|
||||
endif
|
||||
|
||||
|
||||
@ -1171,8 +1235,8 @@ ifeq ($(KOKKOS_INTERNAL_USE_HIP), 1)
|
||||
KOKKOS_SRC += $(KOKKOS_PATH)/tpls/desul/src/Lock_Array_HIP.cpp
|
||||
KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/core/src/HIP/*.hpp)
|
||||
|
||||
KOKKOS_CXXFLAGS+=$(KOKKOS_INTERNAL_HIP_ARCH_FLAG)
|
||||
KOKKOS_LDFLAGS+=$(KOKKOS_INTERNAL_HIP_ARCH_FLAG)
|
||||
KOKKOS_CXXFLAGS+=$(KOKKOS_INTERNAL_AMD_ARCH_FLAG)
|
||||
KOKKOS_LDFLAGS+=$(KOKKOS_INTERNAL_AMD_ARCH_FLAG)
|
||||
|
||||
ifeq ($(KOKKOS_INTERNAL_HIP_USE_RELOC), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ENABLE_HIP_RELOCATABLE_DEVICE_CODE")
|
||||
@ -1182,6 +1246,21 @@ ifeq ($(KOKKOS_INTERNAL_USE_HIP), 1)
|
||||
KOKKOS_CXXFLAGS+=-fno-gpu-rdc
|
||||
KOKKOS_LDFLAGS+=-fno-gpu-rdc
|
||||
endif
|
||||
|
||||
ifeq ($(KOKKOS_INTERNAL_HIP_ENABLE_MALLOC_ASYNC), 1)
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ENABLE_IMPL_HIP_MALLOC_ASYNC")
|
||||
else
|
||||
tmp := $(call kokkos_append_header,"/* $H""undef KOKKOS_ENABLE_IMPL_HIP_MALLOC_ASYNC */")
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(KOKKOS_INTERNAL_USE_ARCH_AMD), 0)
|
||||
ifeq ($(KOKKOS_INTERNAL_COMPILER_CLANG), 1)
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_OPENACC), 1)
|
||||
KOKKOS_CXXFLAGS += $(KOKKOS_INTERNAL_AMD_ARCH_FLAG)
|
||||
KOKKOS_LDFLAGS += $(KOKKOS_INTERNAL_AMD_ARCH_FLAG)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
# Figure out Intel architecture flags.
|
||||
@ -1235,6 +1314,8 @@ ifeq ($(KOKKOS_INTERNAL_USE_SYCL), 1)
|
||||
KOKKOS_CXXFLAGS+=$(KOKKOS_INTERNAL_INTEL_ARCH_FLAG)
|
||||
KOKKOS_LDFLAGS+=-fsycl
|
||||
KOKKOS_LDFLAGS+=$(KOKKOS_INTERNAL_INTEL_ARCH_FLAG)
|
||||
|
||||
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ENABLE_SYCL_RELOCATABLE_DEVICE_CODE")
|
||||
endif
|
||||
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1)
|
||||
@ -1322,6 +1403,8 @@ ifneq ($(KOKKOS_INTERNAL_NEW_CONFIG), 0)
|
||||
endif
|
||||
|
||||
KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/core/src/*.hpp)
|
||||
KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/core/src/View/*.hpp)
|
||||
KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/core/src/View/MDSpan/*.hpp)
|
||||
KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/core/src/impl/*.hpp)
|
||||
KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/containers/src/*.hpp)
|
||||
KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/containers/src/impl/*.hpp)
|
||||
@ -1374,6 +1457,48 @@ ifeq ($(KOKKOS_INTERNAL_USE_OPENACC), 1)
|
||||
KOKKOS_CXXFLAGS += $(KOKKOS_INTERNAL_OPENACC_FLAG)
|
||||
KOKKOS_LDFLAGS += $(KOKKOS_INTERNAL_OPENACC_FLAG)
|
||||
KOKKOS_LIBS += $(KOKKOS_INTERNAL_OPENACC_LIB)
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_NVIDIA), 1)
|
||||
ifneq ($(CUDA_PATH),)
|
||||
ifeq ($(call kokkos_path_exists,$(CUDA_PATH)/lib), 1)
|
||||
CUDA_PATH := $(CUDA_PATH:/compilers=/cuda)
|
||||
endif
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_COMPILER_CLANG), 1)
|
||||
ifneq ($(CUDA_PATH),)
|
||||
KOKKOS_LDFLAGS += -L$(CUDA_PATH)/lib64
|
||||
endif
|
||||
KOKKOS_LIBS += -lcudart
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_COMPILER_NVHPC), 1)
|
||||
KOKKOS_LIBS += -cuda
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_OPENACC_FORCE_HOST_AS_DEVICE), 1)
|
||||
$(error If a GPU architecture is specified, KOKKOS_OPENACC_OPTIONS = force_host_as_device cannot be used. Disable the force_host_as_device option)
|
||||
endif
|
||||
else ifeq ($(KOKKOS_INTERNAL_USE_ARCH_AMD), 1)
|
||||
ifeq ($(KOKKOS_INTERNAL_COMPILER_CLANG), 1)
|
||||
ifneq ($(ROCM_PATH),)
|
||||
KOKKOS_CPPFLAGS += -I$(ROCM_PATH)/include
|
||||
KOKKOS_LDFLAGS += -L$(ROCM_PATH)/lib
|
||||
endif
|
||||
KOKKOS_LIBS += -lamdhip64
|
||||
endif
|
||||
ifeq ($(KOKKOS_INTERNAL_OPENACC_FORCE_HOST_AS_DEVICE), 1)
|
||||
$(error If a GPU architecture is specified, KOKKOS_OPENACC_OPTIONS = force_host_as_device cannot be used. Disable the force_host_as_device option)
|
||||
endif
|
||||
else ifeq ($(KOKKOS_INTERNAL_OPENACC_FORCE_HOST_AS_DEVICE), 1)
|
||||
# Compile for kernel execution on the host. In that case,
|
||||
# memory is shared between the OpenACC space and the host space.
|
||||
ifeq ($(KOKKOS_INTERNAL_COMPILER_NVHPC), 1)
|
||||
KOKKOS_CXXFLAGS += -acc=multicore
|
||||
endif
|
||||
else
|
||||
# Automatic fallback mode; try to offload any available GPU, and fall back
|
||||
# to the host CPU if no available GPU is found.
|
||||
ifeq ($(KOKKOS_INTERNAL_COMPILER_NVHPC), 1)
|
||||
KOKKOS_CXXFLAGS += -acc=gpu,multicore
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 1)
|
||||
@ -1484,7 +1609,11 @@ else
|
||||
endif
|
||||
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_OPENACC), 1)
|
||||
tmp := $(call desul_append_header,"$H""define DESUL_ATOMICS_ENABLE_OPENACC")
|
||||
ifeq ($(KOKKOS_INTERNAL_COMPILER_NVHPC), 1)
|
||||
tmp := $(call desul_append_header,"$H""define DESUL_ATOMICS_ENABLE_OPENACC")
|
||||
else
|
||||
tmp := $(call desul_append_header,"/* $H""undef DESUL_ATOMICS_ENABLE_OPENACC */")
|
||||
endif
|
||||
else
|
||||
tmp := $(call desul_append_header,"/* $H""undef DESUL_ATOMICS_ENABLE_OPENACC */")
|
||||
endif
|
||||
@ -1512,6 +1641,12 @@ $(DESUL_CONFIG_HEADER):
|
||||
|
||||
KOKKOS_CPP_DEPENDS := $(DESUL_CONFIG_HEADER) KokkosCore_config.h $(KOKKOS_HEADERS)
|
||||
|
||||
# Tasking is deprecated
|
||||
ifeq ($(KOKKOS_INTERNAL_DISABLE_DEPRECATED_CODE), 1)
|
||||
TMP_KOKKOS_SRC := $(KOKKOS_SRC)
|
||||
KOKKOS_SRC = $(patsubst %Task.cpp,, $(TMP_KOKKOS_SRC))
|
||||
endif
|
||||
|
||||
KOKKOS_OBJ = $(KOKKOS_SRC:.cpp=.o)
|
||||
KOKKOS_OBJ_LINK = $(notdir $(KOKKOS_OBJ))
|
||||
|
||||
|
||||
@ -16,8 +16,6 @@ Kokkos_HostSpace.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/impl/Kokkos_Ho
|
||||
$(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/impl/Kokkos_HostSpace.cpp
|
||||
Kokkos_hwloc.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/impl/Kokkos_hwloc.cpp
|
||||
$(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/impl/Kokkos_hwloc.cpp
|
||||
Kokkos_TaskQueue.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/impl/Kokkos_TaskQueue.cpp
|
||||
$(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/impl/Kokkos_TaskQueue.cpp
|
||||
Kokkos_HostThreadTeam.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/impl/Kokkos_HostThreadTeam.cpp
|
||||
$(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/impl/Kokkos_HostThreadTeam.cpp
|
||||
Kokkos_HostBarrier.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/impl/Kokkos_HostBarrier.cpp
|
||||
@ -38,17 +36,21 @@ Kokkos_Abort.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/impl/Kokkos_Abort.
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_SERIAL), 1)
|
||||
Kokkos_Serial.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/Serial/Kokkos_Serial.cpp
|
||||
$(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/Serial/Kokkos_Serial.cpp
|
||||
ifneq ($(KOKKOS_INTERNAL_DISABLE_DEPRECATED_CODE), 1)
|
||||
Kokkos_Serial_Task.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/Serial/Kokkos_Serial_Task.cpp
|
||||
$(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/Serial/Kokkos_Serial_Task.cpp
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1)
|
||||
Kokkos_Cuda_Instance.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/Cuda/Kokkos_Cuda_Instance.cpp
|
||||
$(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/Cuda/Kokkos_Cuda_Instance.cpp
|
||||
Kokkos_CudaSpace.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/Cuda/Kokkos_CudaSpace.cpp
|
||||
$(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/Cuda/Kokkos_CudaSpace.cpp
|
||||
ifneq ($(KOKKOS_INTERNAL_DISABLE_DEPRECATED_CODE), 1)
|
||||
Kokkos_Cuda_Task.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/Cuda/Kokkos_Cuda_Task.cpp
|
||||
$(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/Cuda/Kokkos_Cuda_Task.cpp
|
||||
endif
|
||||
Lock_Array_CUDA.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/tpls/desul/src/Lock_Array_CUDA.cpp
|
||||
$(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/tpls/desul/src/Lock_Array_CUDA.cpp
|
||||
endif
|
||||
@ -73,6 +75,8 @@ Kokkos_HIP_Space.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/HIP/Kokkos_HIP
|
||||
$(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/HIP/Kokkos_HIP_Space.cpp
|
||||
Kokkos_HIP_Instance.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/HIP/Kokkos_HIP_Instance.cpp
|
||||
$(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/HIP/Kokkos_HIP_Instance.cpp
|
||||
Kokkos_HIP_ZeroMemset.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/HIP/Kokkos_HIP_ZeroMemset.cpp
|
||||
$(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/HIP/Kokkos_HIP_ZeroMemset.cpp
|
||||
Lock_Array_HIP.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/tpls/desul/src/Lock_Array_HIP.cpp
|
||||
$(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/tpls/desul/src/Lock_Array_HIP.cpp
|
||||
endif
|
||||
@ -89,26 +93,26 @@ Kokkos_OpenMP.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/OpenMP/Kokkos_Ope
|
||||
$(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/OpenMP/Kokkos_OpenMP.cpp
|
||||
Kokkos_OpenMP_Instance.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/OpenMP/Kokkos_OpenMP_Instance.cpp
|
||||
$(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/OpenMP/Kokkos_OpenMP_Instance.cpp
|
||||
ifneq ($(KOKKOS_INTERNAL_DISABLE_DEPRECATED_CODE), 1)
|
||||
Kokkos_OpenMP_Task.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/OpenMP/Kokkos_OpenMP_Task.cpp
|
||||
$(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/OpenMP/Kokkos_OpenMP_Task.cpp
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_HPX), 1)
|
||||
Kokkos_HPX.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/HPX/Kokkos_HPX.cpp
|
||||
$(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/HPX/Kokkos_HPX.cpp
|
||||
ifneq ($(KOKKOS_INTERNAL_DISABLE_DEPRECATED_CODE), 1)
|
||||
Kokkos_HPX_Task.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/HPX/Kokkos_HPX_Task.cpp
|
||||
$(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/HPX/Kokkos_HPX_Task.cpp
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1)
|
||||
Kokkos_OpenMPTarget_Exec.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Exec.cpp
|
||||
$(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Exec.cpp
|
||||
Kokkos_OpenMPTarget_Instance.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Instance.cpp
|
||||
$(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Instance.cpp
|
||||
Kokkos_OpenMPTargetSpace.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/OpenMPTarget/Kokkos_OpenMPTargetSpace.cpp
|
||||
$(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/OpenMPTarget/Kokkos_OpenMPTargetSpace.cpp
|
||||
Kokkos_OpenMPTarget_Task.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Task.cpp
|
||||
$(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Task.cpp
|
||||
endif
|
||||
|
||||
ifeq ($(KOKKOS_INTERNAL_USE_OPENACC), 1)
|
||||
|
||||
@ -30,12 +30,12 @@ To start learning about Kokkos:
|
||||
|
||||
The latest release of Kokkos can be obtained from the [GitHub releases page](https://github.com/kokkos/kokkos/releases/latest).
|
||||
|
||||
The current release is [4.3.01](https://github.com/kokkos/kokkos/releases/tag/4.3.01).
|
||||
The current release is [4.5.01](https://github.com/kokkos/kokkos/releases/tag/4.5.01).
|
||||
|
||||
```bash
|
||||
curl -OJ -L https://github.com/kokkos/kokkos/archive/refs/tags/4.3.01.tar.gz
|
||||
curl -OJ -L https://github.com/kokkos/kokkos/releases/download/4.5.01/kokkos-4.5.01.tar.gz
|
||||
# Or with wget
|
||||
wget https://github.com/kokkos/kokkos/archive/refs/tags/4.3.01.tar.gz
|
||||
wget https://github.com/kokkos/kokkos/releases/download/4.5.01/kokkos-4.5.01.tar.gz
|
||||
```
|
||||
|
||||
To clone the latest development version of Kokkos from GitHub:
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
IF (NOT Kokkos_INSTALL_TESTING)
|
||||
ADD_SUBDIRECTORY(src)
|
||||
ENDIF()
|
||||
if(NOT Kokkos_INSTALL_TESTING)
|
||||
add_subdirectory(src)
|
||||
endif()
|
||||
# FIXME_OPENACC: temporarily disabled due to unimplemented features
|
||||
IF(NOT ((KOKKOS_ENABLE_OPENMPTARGET AND KOKKOS_CXX_COMPILER_ID STREQUAL NVHPC) OR KOKKOS_ENABLE_OPENACC))
|
||||
KOKKOS_ADD_TEST_DIRECTORIES(unit_tests)
|
||||
ENDIF()
|
||||
if(NOT ((KOKKOS_ENABLE_OPENMPTARGET AND KOKKOS_CXX_COMPILER_ID STREQUAL NVHPC) OR KOKKOS_ENABLE_OPENACC))
|
||||
kokkos_add_test_directories(unit_tests)
|
||||
endif()
|
||||
|
||||
@ -1,34 +1,29 @@
|
||||
#I have to leave these here for tribits
|
||||
KOKKOS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
|
||||
KOKKOS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
|
||||
kokkos_include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
||||
kokkos_include_directories(${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
|
||||
FILE(GLOB ALGO_HEADERS *.hpp)
|
||||
FILE(GLOB ALGO_SOURCES *.cpp)
|
||||
APPEND_GLOB(ALGO_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/std_algorithms/*.hpp)
|
||||
APPEND_GLOB(ALGO_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/std_algorithms/impl/*.hpp)
|
||||
file(GLOB ALGO_HEADERS *.hpp)
|
||||
file(GLOB ALGO_SOURCES *.cpp)
|
||||
append_glob(ALGO_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/std_algorithms/*.hpp)
|
||||
append_glob(ALGO_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/std_algorithms/impl/*.hpp)
|
||||
|
||||
INSTALL (
|
||||
install(
|
||||
DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/"
|
||||
DESTINATION ${KOKKOS_HEADER_DIR}
|
||||
FILES_MATCHING PATTERN "*.hpp"
|
||||
FILES_MATCHING
|
||||
PATTERN "*.hpp"
|
||||
)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
|
||||
# We have to pass the sources in here for Tribits
|
||||
# These will get ignored for standalone CMake and a true interface library made
|
||||
KOKKOS_ADD_INTERFACE_LIBRARY(
|
||||
kokkosalgorithms
|
||||
NOINSTALLHEADERS ${ALGO_HEADERS}
|
||||
SOURCES ${ALGO_SOURCES}
|
||||
)
|
||||
KOKKOS_LIB_INCLUDE_DIRECTORIES(kokkosalgorithms
|
||||
${KOKKOS_TOP_BUILD_DIR}
|
||||
${CMAKE_CURRENT_BINARY_DIR}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
kokkos_add_interface_library(kokkosalgorithms NOINSTALLHEADERS ${ALGO_HEADERS} SOURCES ${ALGO_SOURCES})
|
||||
kokkos_lib_include_directories(
|
||||
kokkosalgorithms ${KOKKOS_TOP_BUILD_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
)
|
||||
|
||||
KOKKOS_LINK_TPL(kokkoscontainers PUBLIC ROCTHRUST)
|
||||
KOKKOS_LINK_TPL(kokkoscore PUBLIC ONEDPL)
|
||||
kokkos_link_tpl(kokkoscontainers PUBLIC ROCTHRUST)
|
||||
kokkos_link_tpl(kokkoscore PUBLIC ONEDPL)
|
||||
|
||||
@ -615,7 +615,7 @@ template <class DeviceType>
|
||||
struct Random_UniqueIndex {
|
||||
using locks_view_type = View<int**, DeviceType>;
|
||||
KOKKOS_FUNCTION
|
||||
static int get_state_idx(const locks_view_type) {
|
||||
static int get_state_idx(const locks_view_type&) {
|
||||
KOKKOS_IF_ON_HOST(
|
||||
(return DeviceType::execution_space::impl_hardware_thread_id();))
|
||||
|
||||
@ -665,17 +665,16 @@ struct Random_UniqueIndex<
|
||||
|
||||
#ifdef KOKKOS_ENABLE_SYCL
|
||||
template <class MemorySpace>
|
||||
struct Random_UniqueIndex<
|
||||
Kokkos::Device<Kokkos::Experimental::SYCL, MemorySpace>> {
|
||||
struct Random_UniqueIndex<Kokkos::Device<Kokkos::SYCL, MemorySpace>> {
|
||||
using locks_view_type =
|
||||
View<int**, Kokkos::Device<Kokkos::Experimental::SYCL, MemorySpace>>;
|
||||
View<int**, Kokkos::Device<Kokkos::SYCL, MemorySpace>>;
|
||||
KOKKOS_FUNCTION
|
||||
static int get_state_idx(const locks_view_type& locks_) {
|
||||
auto item = sycl::ext::oneapi::experimental::this_nd_item<3>();
|
||||
std::size_t threadIdx[3] = {item.get_local_id(2), item.get_local_id(1),
|
||||
item.get_local_id(0)};
|
||||
std::size_t blockIdx[3] = {item.get_group(2), item.get_group(1),
|
||||
item.get_group(0)};
|
||||
item.get_group(0)};
|
||||
std::size_t blockDim[3] = {item.get_local_range(2), item.get_local_range(1),
|
||||
item.get_local_range(0)};
|
||||
std::size_t gridDim[3] = {
|
||||
@ -1121,7 +1120,7 @@ class Random_XorShift1024_Pool {
|
||||
using execution_space = typename device_type::execution_space;
|
||||
using locks_type = View<int**, device_type>;
|
||||
using int_view_type = View<int**, device_type>;
|
||||
using state_data_type = View<uint64_t * [16], device_type>;
|
||||
using state_data_type = View<uint64_t* [16], device_type>;
|
||||
|
||||
locks_type locks_ = {};
|
||||
state_data_type state_ = {};
|
||||
|
||||
@ -35,11 +35,11 @@ struct BinOp1D {
|
||||
#endif
|
||||
|
||||
// Construct BinOp with number of bins, minimum value and maximum value
|
||||
BinOp1D(int max_bins__, typename KeyViewType::const_value_type min,
|
||||
BinOp1D(int max_bins, typename KeyViewType::const_value_type min,
|
||||
typename KeyViewType::const_value_type max)
|
||||
: max_bins_(max_bins__ + 1),
|
||||
: max_bins_(max_bins + 1),
|
||||
// Cast to double to avoid possible overflow when using integer
|
||||
mul_(static_cast<double>(max_bins__) /
|
||||
mul_(static_cast<double>(max_bins) /
|
||||
(static_cast<double>(max) - static_cast<double>(min))),
|
||||
min_(static_cast<double>(min)) {
|
||||
// For integral types the number of bins may be larger than the range
|
||||
@ -47,7 +47,7 @@ struct BinOp1D {
|
||||
// and then don't need to sort bins.
|
||||
if (std::is_integral<typename KeyViewType::const_value_type>::value &&
|
||||
(static_cast<double>(max) - static_cast<double>(min)) <=
|
||||
static_cast<double>(max_bins__)) {
|
||||
static_cast<double>(max_bins)) {
|
||||
mul_ = 1.;
|
||||
}
|
||||
}
|
||||
@ -82,16 +82,16 @@ struct BinOp3D {
|
||||
BinOp3D() = delete;
|
||||
#endif
|
||||
|
||||
BinOp3D(int max_bins__[], typename KeyViewType::const_value_type min[],
|
||||
BinOp3D(int max_bins[], typename KeyViewType::const_value_type min[],
|
||||
typename KeyViewType::const_value_type max[]) {
|
||||
max_bins_[0] = max_bins__[0];
|
||||
max_bins_[1] = max_bins__[1];
|
||||
max_bins_[2] = max_bins__[2];
|
||||
mul_[0] = static_cast<double>(max_bins__[0]) /
|
||||
max_bins_[0] = max_bins[0];
|
||||
max_bins_[1] = max_bins[1];
|
||||
max_bins_[2] = max_bins[2];
|
||||
mul_[0] = static_cast<double>(max_bins[0]) /
|
||||
(static_cast<double>(max[0]) - static_cast<double>(min[0]));
|
||||
mul_[1] = static_cast<double>(max_bins__[1]) /
|
||||
mul_[1] = static_cast<double>(max_bins[1]) /
|
||||
(static_cast<double>(max[1]) - static_cast<double>(min[1]));
|
||||
mul_[2] = static_cast<double>(max_bins__[2]) /
|
||||
mul_[2] = static_cast<double>(max_bins[2]) /
|
||||
(static_cast<double>(max[2]) - static_cast<double>(min[2]));
|
||||
min_[0] = static_cast<double>(min[0]);
|
||||
min_[1] = static_cast<double>(min[1]);
|
||||
|
||||
@ -388,7 +388,8 @@ class BinSort {
|
||||
// reasonable experimentally.
|
||||
if (use_std_sort && bin_size > 10) {
|
||||
KOKKOS_IF_ON_HOST(
|
||||
(std::sort(&sort_order(lower_bound), &sort_order(upper_bound),
|
||||
(std::sort(sort_order.data() + lower_bound,
|
||||
sort_order.data() + upper_bound,
|
||||
[this](int p, int q) { return bin_op(keys_rnd, p, q); });))
|
||||
} else {
|
||||
for (int k = lower_bound + 1; k < upper_bound; ++k) {
|
||||
|
||||
@ -53,9 +53,13 @@ void sort(const ExecutionSpace& exec,
|
||||
|
||||
if constexpr (Impl::better_off_calling_std_sort_v<ExecutionSpace>) {
|
||||
exec.fence("Kokkos::sort without comparator use std::sort");
|
||||
auto first = ::Kokkos::Experimental::begin(view);
|
||||
auto last = ::Kokkos::Experimental::end(view);
|
||||
std::sort(first, last);
|
||||
if (view.span_is_contiguous()) {
|
||||
std::sort(view.data(), view.data() + view.size());
|
||||
} else {
|
||||
auto first = ::Kokkos::Experimental::begin(view);
|
||||
auto last = ::Kokkos::Experimental::end(view);
|
||||
std::sort(first, last);
|
||||
}
|
||||
} else {
|
||||
Impl::sort_device_view_without_comparator(exec, view);
|
||||
}
|
||||
@ -107,9 +111,13 @@ void sort(const ExecutionSpace& exec,
|
||||
|
||||
if constexpr (Impl::better_off_calling_std_sort_v<ExecutionSpace>) {
|
||||
exec.fence("Kokkos::sort with comparator use std::sort");
|
||||
auto first = ::Kokkos::Experimental::begin(view);
|
||||
auto last = ::Kokkos::Experimental::end(view);
|
||||
std::sort(first, last, comparator);
|
||||
if (view.span_is_contiguous()) {
|
||||
std::sort(view.data(), view.data() + view.size(), comparator);
|
||||
} else {
|
||||
auto first = ::Kokkos::Experimental::begin(view);
|
||||
auto last = ::Kokkos::Experimental::end(view);
|
||||
std::sort(first, last, comparator);
|
||||
}
|
||||
} else {
|
||||
Impl::sort_device_view_with_comparator(exec, view, comparator);
|
||||
}
|
||||
|
||||
@ -30,6 +30,7 @@
|
||||
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wshadow"
|
||||
#pragma GCC diagnostic ignored "-Wsuggest-override"
|
||||
|
||||
#if defined(KOKKOS_COMPILER_CLANG)
|
||||
// Some versions of Clang fail to compile Thrust, failing with errors like
|
||||
@ -76,13 +77,10 @@ namespace Kokkos::Impl {
|
||||
|
||||
template <typename T>
|
||||
constexpr inline bool is_admissible_to_kokkos_sort_by_key =
|
||||
::Kokkos::is_view<T>::value&& T::rank() == 1 &&
|
||||
(std::is_same<typename T::traits::array_layout,
|
||||
Kokkos::LayoutLeft>::value ||
|
||||
std::is_same<typename T::traits::array_layout,
|
||||
Kokkos::LayoutRight>::value ||
|
||||
std::is_same<typename T::traits::array_layout,
|
||||
Kokkos::LayoutStride>::value);
|
||||
::Kokkos::is_view<T>::value && T::rank() == 1 &&
|
||||
(std::is_same_v<typename T::traits::array_layout, Kokkos::LayoutLeft> ||
|
||||
std::is_same_v<typename T::traits::array_layout, Kokkos::LayoutRight> ||
|
||||
std::is_same_v<typename T::traits::array_layout, Kokkos::LayoutStride>);
|
||||
|
||||
template <class ViewType>
|
||||
KOKKOS_INLINE_FUNCTION constexpr void
|
||||
@ -144,7 +142,7 @@ void sort_by_key_rocthrust(
|
||||
|
||||
#if defined(KOKKOS_ENABLE_ONEDPL)
|
||||
template <class Layout>
|
||||
inline constexpr bool sort_on_device_v<Kokkos::Experimental::SYCL, Layout> =
|
||||
inline constexpr bool sort_on_device_v<Kokkos::SYCL, Layout> =
|
||||
std::is_same_v<Layout, Kokkos::LayoutLeft> ||
|
||||
std::is_same_v<Layout, Kokkos::LayoutRight>;
|
||||
|
||||
@ -152,7 +150,7 @@ inline constexpr bool sort_on_device_v<Kokkos::Experimental::SYCL, Layout> =
|
||||
template <class KeysDataType, class... KeysProperties, class ValuesDataType,
|
||||
class... ValuesProperties, class... MaybeComparator>
|
||||
void sort_by_key_onedpl(
|
||||
const Kokkos::Experimental::SYCL& exec,
|
||||
const Kokkos::SYCL& exec,
|
||||
const Kokkos::View<KeysDataType, KeysProperties...>& keys,
|
||||
const Kokkos::View<ValuesDataType, ValuesProperties...>& values,
|
||||
MaybeComparator&&... maybeComparator) {
|
||||
@ -176,7 +174,7 @@ template <typename ExecutionSpace, typename PermutationView, typename ViewType>
|
||||
void applyPermutation(const ExecutionSpace& space,
|
||||
const PermutationView& permutation,
|
||||
const ViewType& view) {
|
||||
static_assert(std::is_integral<typename PermutationView::value_type>::value);
|
||||
static_assert(std::is_integral_v<typename PermutationView::value_type>);
|
||||
|
||||
auto view_copy = Kokkos::create_mirror(
|
||||
Kokkos::view_alloc(space, typename ExecutionSpace::memory_space{},
|
||||
@ -335,7 +333,7 @@ void sort_by_key_device_view_without_comparator(
|
||||
template <class KeysDataType, class... KeysProperties, class ValuesDataType,
|
||||
class... ValuesProperties>
|
||||
void sort_by_key_device_view_without_comparator(
|
||||
const Kokkos::Experimental::SYCL& exec,
|
||||
const Kokkos::SYCL& exec,
|
||||
const Kokkos::View<KeysDataType, KeysProperties...>& keys,
|
||||
const Kokkos::View<ValuesDataType, ValuesProperties...>& values) {
|
||||
#ifdef KOKKOS_ONEDPL_HAS_SORT_BY_KEY
|
||||
@ -392,7 +390,7 @@ void sort_by_key_device_view_with_comparator(
|
||||
template <class ComparatorType, class KeysDataType, class... KeysProperties,
|
||||
class ValuesDataType, class... ValuesProperties>
|
||||
void sort_by_key_device_view_with_comparator(
|
||||
const Kokkos::Experimental::SYCL& exec,
|
||||
const Kokkos::SYCL& exec,
|
||||
const Kokkos::View<KeysDataType, KeysProperties...>& keys,
|
||||
const Kokkos::View<ValuesDataType, ValuesProperties...>& values,
|
||||
const ComparatorType& comparator) {
|
||||
|
||||
@ -34,6 +34,7 @@
|
||||
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wshadow"
|
||||
#pragma GCC diagnostic ignored "-Wsuggest-override"
|
||||
|
||||
#if defined(KOKKOS_COMPILER_CLANG)
|
||||
// Some versions of Clang fail to compile Thrust, failing with errors like
|
||||
@ -146,7 +147,7 @@ void sort_via_binsort(const ExecutionSpace& exec,
|
||||
bool sort_in_bins = true;
|
||||
// TODO: figure out better max_bins then this ...
|
||||
int64_t max_bins = view.extent(0) / 2;
|
||||
if (std::is_integral<typename ViewType::non_const_value_type>::value) {
|
||||
if (std::is_integral_v<typename ViewType::non_const_value_type>) {
|
||||
// Cast to double to avoid possible overflow when using integer
|
||||
auto const max_val = static_cast<double>(result.max_val);
|
||||
auto const min_val = static_cast<double>(result.min_val);
|
||||
@ -157,7 +158,7 @@ void sort_via_binsort(const ExecutionSpace& exec,
|
||||
sort_in_bins = false;
|
||||
}
|
||||
}
|
||||
if (std::is_floating_point<typename ViewType::non_const_value_type>::value) {
|
||||
if (std::is_floating_point_v<typename ViewType::non_const_value_type>) {
|
||||
KOKKOS_ASSERT(std::isfinite(static_cast<double>(result.max_val) -
|
||||
static_cast<double>(result.min_val)));
|
||||
}
|
||||
@ -211,11 +212,11 @@ void sort_rocthrust(const HIP& space,
|
||||
|
||||
#if defined(KOKKOS_ENABLE_ONEDPL)
|
||||
template <class DataType, class... Properties, class... MaybeComparator>
|
||||
void sort_onedpl(const Kokkos::Experimental::SYCL& space,
|
||||
void sort_onedpl(const Kokkos::SYCL& space,
|
||||
const Kokkos::View<DataType, Properties...>& view,
|
||||
MaybeComparator&&... maybeComparator) {
|
||||
using ViewType = Kokkos::View<DataType, Properties...>;
|
||||
static_assert(SpaceAccessibility<Kokkos::Experimental::SYCL,
|
||||
static_assert(SpaceAccessibility<Kokkos::SYCL,
|
||||
typename ViewType::memory_space>::accessible,
|
||||
"SYCL execution space is not able to access the memory space "
|
||||
"of the View argument!");
|
||||
@ -268,19 +269,29 @@ void copy_to_host_run_stdsort_copy_back(
|
||||
KE::copy(exec, view, view_dc);
|
||||
|
||||
// run sort on the mirror of view_dc
|
||||
auto mv_h = create_mirror_view_and_copy(Kokkos::HostSpace(), view_dc);
|
||||
auto first = KE::begin(mv_h);
|
||||
auto last = KE::end(mv_h);
|
||||
std::sort(first, last, std::forward<MaybeComparator>(maybeComparator)...);
|
||||
auto mv_h = create_mirror_view_and_copy(Kokkos::HostSpace(), view_dc);
|
||||
if (view.span_is_contiguous()) {
|
||||
std::sort(mv_h.data(), mv_h.data() + mv_h.size(),
|
||||
std::forward<MaybeComparator>(maybeComparator)...);
|
||||
} else {
|
||||
auto first = KE::begin(mv_h);
|
||||
auto last = KE::end(mv_h);
|
||||
std::sort(first, last, std::forward<MaybeComparator>(maybeComparator)...);
|
||||
}
|
||||
Kokkos::deep_copy(exec, view_dc, mv_h);
|
||||
|
||||
// copy back to argument view
|
||||
KE::copy(exec, KE::cbegin(view_dc), KE::cend(view_dc), KE::begin(view));
|
||||
} else {
|
||||
auto view_h = create_mirror_view_and_copy(Kokkos::HostSpace(), view);
|
||||
auto first = KE::begin(view_h);
|
||||
auto last = KE::end(view_h);
|
||||
std::sort(first, last, std::forward<MaybeComparator>(maybeComparator)...);
|
||||
if (view.span_is_contiguous()) {
|
||||
std::sort(view_h.data(), view_h.data() + view_h.size(),
|
||||
std::forward<MaybeComparator>(maybeComparator)...);
|
||||
} else {
|
||||
auto first = KE::begin(view_h);
|
||||
auto last = KE::end(view_h);
|
||||
std::sort(first, last, std::forward<MaybeComparator>(maybeComparator)...);
|
||||
}
|
||||
Kokkos::deep_copy(exec, view, view_h);
|
||||
}
|
||||
}
|
||||
@ -310,7 +321,7 @@ void sort_device_view_without_comparator(
|
||||
#if defined(KOKKOS_ENABLE_ONEDPL)
|
||||
template <class DataType, class... Properties>
|
||||
void sort_device_view_without_comparator(
|
||||
const Kokkos::Experimental::SYCL& exec,
|
||||
const Kokkos::SYCL& exec,
|
||||
const Kokkos::View<DataType, Properties...>& view) {
|
||||
using ViewType = Kokkos::View<DataType, Properties...>;
|
||||
static_assert(
|
||||
@ -365,8 +376,7 @@ void sort_device_view_with_comparator(
|
||||
#if defined(KOKKOS_ENABLE_ONEDPL)
|
||||
template <class ComparatorType, class DataType, class... Properties>
|
||||
void sort_device_view_with_comparator(
|
||||
const Kokkos::Experimental::SYCL& exec,
|
||||
const Kokkos::View<DataType, Properties...>& view,
|
||||
const Kokkos::SYCL& exec, const Kokkos::View<DataType, Properties...>& view,
|
||||
const ComparatorType& comparator) {
|
||||
using ViewType = Kokkos::View<DataType, Properties...>;
|
||||
static_assert(
|
||||
@ -397,12 +407,12 @@ sort_device_view_with_comparator(
|
||||
// and then copies data back. Potentially, this can later be changed
|
||||
// with a better solution like our own quicksort on device or similar.
|
||||
|
||||
using ViewType = Kokkos::View<DataType, Properties...>;
|
||||
using MemSpace = typename ViewType::memory_space;
|
||||
// Note with HIP unified memory this code path is still the right thing to do
|
||||
// if we end up here when RocThrust is not enabled.
|
||||
// The create_mirror_view_and_copy will do the right thing (no copy).
|
||||
#ifndef KOKKOS_ENABLE_IMPL_HIP_UNIFIED_MEMORY
|
||||
#ifndef KOKKOS_IMPL_HIP_UNIFIED_MEMORY
|
||||
using ViewType = Kokkos::View<DataType, Properties...>;
|
||||
using MemSpace = typename ViewType::memory_space;
|
||||
static_assert(!SpaceAccessibility<HostSpace, MemSpace>::accessible,
|
||||
"Impl::sort_device_view_with_comparator: should not be called "
|
||||
"on a view that is already accessible on the host");
|
||||
|
||||
@ -91,7 +91,7 @@ template <typename ExecutionSpace, typename IteratorType, typename ValueType,
|
||||
int> = 0>
|
||||
ValueType reduce(const ExecutionSpace& ex, IteratorType first,
|
||||
IteratorType last, ValueType init_reduction_value) {
|
||||
static_assert(std::is_move_constructible<ValueType>::value,
|
||||
static_assert(std::is_move_constructible_v<ValueType>,
|
||||
"ValueType must be move constructible.");
|
||||
|
||||
return Impl::reduce_default_functors_exespace_impl(
|
||||
@ -105,7 +105,7 @@ template <typename ExecutionSpace, typename IteratorType, typename ValueType,
|
||||
ValueType reduce(const std::string& label, const ExecutionSpace& ex,
|
||||
IteratorType first, IteratorType last,
|
||||
ValueType init_reduction_value) {
|
||||
static_assert(std::is_move_constructible<ValueType>::value,
|
||||
static_assert(std::is_move_constructible_v<ValueType>,
|
||||
"ValueType must be move constructible.");
|
||||
|
||||
return Impl::reduce_default_functors_exespace_impl(label, ex, first, last,
|
||||
@ -119,7 +119,7 @@ template <typename ExecutionSpace, typename DataType, typename... Properties,
|
||||
ValueType reduce(const ExecutionSpace& ex,
|
||||
const ::Kokkos::View<DataType, Properties...>& view,
|
||||
ValueType init_reduction_value) {
|
||||
static_assert(std::is_move_constructible<ValueType>::value,
|
||||
static_assert(std::is_move_constructible_v<ValueType>,
|
||||
"ValueType must be move constructible.");
|
||||
|
||||
namespace KE = ::Kokkos::Experimental;
|
||||
@ -137,7 +137,7 @@ template <typename ExecutionSpace, typename DataType, typename... Properties,
|
||||
ValueType reduce(const std::string& label, const ExecutionSpace& ex,
|
||||
const ::Kokkos::View<DataType, Properties...>& view,
|
||||
ValueType init_reduction_value) {
|
||||
static_assert(std::is_move_constructible<ValueType>::value,
|
||||
static_assert(std::is_move_constructible_v<ValueType>,
|
||||
"ValueType must be move constructible.");
|
||||
|
||||
namespace KE = ::Kokkos::Experimental;
|
||||
@ -157,7 +157,7 @@ template <typename ExecutionSpace, typename IteratorType, typename ValueType,
|
||||
ValueType reduce(const ExecutionSpace& ex, IteratorType first,
|
||||
IteratorType last, ValueType init_reduction_value,
|
||||
BinaryOp joiner) {
|
||||
static_assert(std::is_move_constructible<ValueType>::value,
|
||||
static_assert(std::is_move_constructible_v<ValueType>,
|
||||
"ValueType must be move constructible.");
|
||||
|
||||
return Impl::reduce_custom_functors_exespace_impl(
|
||||
@ -172,7 +172,7 @@ template <typename ExecutionSpace, typename IteratorType, typename ValueType,
|
||||
ValueType reduce(const std::string& label, const ExecutionSpace& ex,
|
||||
IteratorType first, IteratorType last,
|
||||
ValueType init_reduction_value, BinaryOp joiner) {
|
||||
static_assert(std::is_move_constructible<ValueType>::value,
|
||||
static_assert(std::is_move_constructible_v<ValueType>,
|
||||
"ValueType must be move constructible.");
|
||||
|
||||
return Impl::reduce_custom_functors_exespace_impl(
|
||||
@ -186,7 +186,7 @@ template <typename ExecutionSpace, typename DataType, typename... Properties,
|
||||
ValueType reduce(const ExecutionSpace& ex,
|
||||
const ::Kokkos::View<DataType, Properties...>& view,
|
||||
ValueType init_reduction_value, BinaryOp joiner) {
|
||||
static_assert(std::is_move_constructible<ValueType>::value,
|
||||
static_assert(std::is_move_constructible_v<ValueType>,
|
||||
"ValueType must be move constructible.");
|
||||
|
||||
namespace KE = ::Kokkos::Experimental;
|
||||
@ -204,7 +204,7 @@ template <typename ExecutionSpace, typename DataType, typename... Properties,
|
||||
ValueType reduce(const std::string& label, const ExecutionSpace& ex,
|
||||
const ::Kokkos::View<DataType, Properties...>& view,
|
||||
ValueType init_reduction_value, BinaryOp joiner) {
|
||||
static_assert(std::is_move_constructible<ValueType>::value,
|
||||
static_assert(std::is_move_constructible_v<ValueType>,
|
||||
"ValueType must be move constructible.");
|
||||
|
||||
namespace KE = ::Kokkos::Experimental;
|
||||
@ -258,7 +258,7 @@ template <
|
||||
KOKKOS_FUNCTION ValueType reduce(const TeamHandleType& teamHandle,
|
||||
IteratorType first, IteratorType last,
|
||||
ValueType init_reduction_value) {
|
||||
static_assert(std::is_move_constructible<ValueType>::value,
|
||||
static_assert(std::is_move_constructible_v<ValueType>,
|
||||
"ValueType must be move constructible.");
|
||||
|
||||
return Impl::reduce_default_functors_team_impl(teamHandle, first, last,
|
||||
@ -273,7 +273,7 @@ KOKKOS_FUNCTION ValueType
|
||||
reduce(const TeamHandleType& teamHandle,
|
||||
const ::Kokkos::View<DataType, Properties...>& view,
|
||||
ValueType init_reduction_value) {
|
||||
static_assert(std::is_move_constructible<ValueType>::value,
|
||||
static_assert(std::is_move_constructible_v<ValueType>,
|
||||
"ValueType must be move constructible.");
|
||||
|
||||
namespace KE = ::Kokkos::Experimental;
|
||||
@ -294,7 +294,7 @@ KOKKOS_FUNCTION ValueType reduce(const TeamHandleType& teamHandle,
|
||||
IteratorType first, IteratorType last,
|
||||
ValueType init_reduction_value,
|
||||
BinaryOp joiner) {
|
||||
static_assert(std::is_move_constructible<ValueType>::value,
|
||||
static_assert(std::is_move_constructible_v<ValueType>,
|
||||
"ValueType must be move constructible.");
|
||||
|
||||
return Impl::reduce_custom_functors_team_impl(teamHandle, first, last,
|
||||
@ -309,7 +309,7 @@ KOKKOS_FUNCTION ValueType
|
||||
reduce(const TeamHandleType& teamHandle,
|
||||
const ::Kokkos::View<DataType, Properties...>& view,
|
||||
ValueType init_reduction_value, BinaryOp joiner) {
|
||||
static_assert(std::is_move_constructible<ValueType>::value,
|
||||
static_assert(std::is_move_constructible_v<ValueType>,
|
||||
"ValueType must be move constructible.");
|
||||
|
||||
namespace KE = ::Kokkos::Experimental;
|
||||
|
||||
@ -117,7 +117,7 @@ ValueType transform_reduce(const ExecutionSpace& ex, IteratorType1 first1,
|
||||
ValueType init_reduction_value,
|
||||
BinaryJoinerType joiner,
|
||||
BinaryTransform transformer) {
|
||||
static_assert(std::is_move_constructible<ValueType>::value,
|
||||
static_assert(std::is_move_constructible_v<ValueType>,
|
||||
"ValueType must be move constructible.");
|
||||
|
||||
return Impl::transform_reduce_custom_functors_exespace_impl(
|
||||
@ -136,7 +136,7 @@ ValueType transform_reduce(const std::string& label, const ExecutionSpace& ex,
|
||||
IteratorType2 first2, ValueType init_reduction_value,
|
||||
BinaryJoinerType joiner,
|
||||
BinaryTransform transformer) {
|
||||
static_assert(std::is_move_constructible<ValueType>::value,
|
||||
static_assert(std::is_move_constructible_v<ValueType>,
|
||||
"ValueType must be move constructible.");
|
||||
|
||||
return Impl::transform_reduce_custom_functors_exespace_impl(
|
||||
@ -157,7 +157,7 @@ ValueType transform_reduce(
|
||||
ValueType init_reduction_value, BinaryJoinerType joiner,
|
||||
BinaryTransform transformer) {
|
||||
namespace KE = ::Kokkos::Experimental;
|
||||
static_assert(std::is_move_constructible<ValueType>::value,
|
||||
static_assert(std::is_move_constructible_v<ValueType>,
|
||||
"ValueType must be move constructible.");
|
||||
|
||||
Impl::static_assert_is_admissible_to_kokkos_std_algorithms(first_view);
|
||||
@ -182,7 +182,7 @@ ValueType transform_reduce(
|
||||
ValueType init_reduction_value, BinaryJoinerType joiner,
|
||||
BinaryTransform transformer) {
|
||||
namespace KE = ::Kokkos::Experimental;
|
||||
static_assert(std::is_move_constructible<ValueType>::value,
|
||||
static_assert(std::is_move_constructible_v<ValueType>,
|
||||
"ValueType must be move constructible.");
|
||||
|
||||
Impl::static_assert_is_admissible_to_kokkos_std_algorithms(first_view);
|
||||
@ -208,7 +208,7 @@ ValueType transform_reduce(const ExecutionSpace& ex, IteratorType first1,
|
||||
IteratorType last1, ValueType init_reduction_value,
|
||||
BinaryJoinerType joiner,
|
||||
UnaryTransform transformer) {
|
||||
static_assert(std::is_move_constructible<ValueType>::value,
|
||||
static_assert(std::is_move_constructible_v<ValueType>,
|
||||
"ValueType must be move constructible.");
|
||||
|
||||
return Impl::transform_reduce_custom_functors_exespace_impl(
|
||||
@ -228,7 +228,7 @@ ValueType transform_reduce(const std::string& label, const ExecutionSpace& ex,
|
||||
ValueType init_reduction_value,
|
||||
BinaryJoinerType joiner,
|
||||
UnaryTransform transformer) {
|
||||
static_assert(std::is_move_constructible<ValueType>::value,
|
||||
static_assert(std::is_move_constructible_v<ValueType>,
|
||||
"ValueType must be move constructible.");
|
||||
|
||||
return Impl::transform_reduce_custom_functors_exespace_impl(
|
||||
@ -248,7 +248,7 @@ ValueType transform_reduce(const ExecutionSpace& ex,
|
||||
BinaryJoinerType joiner,
|
||||
UnaryTransform transformer) {
|
||||
namespace KE = ::Kokkos::Experimental;
|
||||
static_assert(std::is_move_constructible<ValueType>::value,
|
||||
static_assert(std::is_move_constructible_v<ValueType>,
|
||||
"ValueType must be move constructible.");
|
||||
|
||||
Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view);
|
||||
@ -270,7 +270,7 @@ ValueType transform_reduce(const std::string& label, const ExecutionSpace& ex,
|
||||
BinaryJoinerType joiner,
|
||||
UnaryTransform transformer) {
|
||||
namespace KE = ::Kokkos::Experimental;
|
||||
static_assert(std::is_move_constructible<ValueType>::value,
|
||||
static_assert(std::is_move_constructible_v<ValueType>,
|
||||
"ValueType must be move constructible.");
|
||||
|
||||
Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view);
|
||||
@ -345,7 +345,7 @@ KOKKOS_FUNCTION ValueType transform_reduce(
|
||||
const TeamHandleType& teamHandle, IteratorType1 first1, IteratorType1 last1,
|
||||
IteratorType2 first2, ValueType init_reduction_value,
|
||||
BinaryJoinerType joiner, BinaryTransform transformer) {
|
||||
static_assert(std::is_move_constructible<ValueType>::value,
|
||||
static_assert(std::is_move_constructible_v<ValueType>,
|
||||
"ValueType must be move constructible.");
|
||||
|
||||
return Impl::transform_reduce_custom_functors_team_impl(
|
||||
@ -366,7 +366,7 @@ transform_reduce(const TeamHandleType& teamHandle,
|
||||
ValueType init_reduction_value, BinaryJoinerType joiner,
|
||||
BinaryTransform transformer) {
|
||||
namespace KE = ::Kokkos::Experimental;
|
||||
static_assert(std::is_move_constructible<ValueType>::value,
|
||||
static_assert(std::is_move_constructible_v<ValueType>,
|
||||
"ValueType must be move constructible.");
|
||||
|
||||
Impl::static_assert_is_admissible_to_kokkos_std_algorithms(first_view);
|
||||
@ -393,7 +393,7 @@ KOKKOS_FUNCTION ValueType transform_reduce(const TeamHandleType& teamHandle,
|
||||
ValueType init_reduction_value,
|
||||
BinaryJoinerType joiner,
|
||||
UnaryTransform transformer) {
|
||||
static_assert(std::is_move_constructible<ValueType>::value,
|
||||
static_assert(std::is_move_constructible_v<ValueType>,
|
||||
"ValueType must be move constructible.");
|
||||
|
||||
return Impl::transform_reduce_custom_functors_team_impl(
|
||||
@ -412,7 +412,7 @@ transform_reduce(const TeamHandleType& teamHandle,
|
||||
ValueType init_reduction_value, BinaryJoinerType joiner,
|
||||
UnaryTransform transformer) {
|
||||
namespace KE = ::Kokkos::Experimental;
|
||||
static_assert(std::is_move_constructible<ValueType>::value,
|
||||
static_assert(std::is_move_constructible_v<ValueType>,
|
||||
"ValueType must be move constructible.");
|
||||
|
||||
Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view);
|
||||
|
||||
@ -33,12 +33,12 @@ struct is_admissible_to_kokkos_std_algorithms : std::false_type {};
|
||||
template <typename T>
|
||||
struct is_admissible_to_kokkos_std_algorithms<
|
||||
T, std::enable_if_t<::Kokkos::is_view<T>::value && T::rank() == 1 &&
|
||||
(std::is_same<typename T::traits::array_layout,
|
||||
Kokkos::LayoutLeft>::value ||
|
||||
std::is_same<typename T::traits::array_layout,
|
||||
Kokkos::LayoutRight>::value ||
|
||||
std::is_same<typename T::traits::array_layout,
|
||||
Kokkos::LayoutStride>::value)>>
|
||||
(std::is_same_v<typename T::traits::array_layout,
|
||||
Kokkos::LayoutLeft> ||
|
||||
std::is_same_v<typename T::traits::array_layout,
|
||||
Kokkos::LayoutRight> ||
|
||||
std::is_same_v<typename T::traits::array_layout,
|
||||
Kokkos::LayoutStride>)>>
|
||||
: std::true_type {};
|
||||
|
||||
template <class ViewType>
|
||||
@ -102,8 +102,8 @@ struct are_random_access_iterators;
|
||||
template <class T>
|
||||
struct are_random_access_iterators<T> {
|
||||
static constexpr bool value =
|
||||
is_iterator_v<T> && std::is_base_of<std::random_access_iterator_tag,
|
||||
typename T::iterator_category>::value;
|
||||
is_iterator_v<T> && std::is_base_of_v<std::random_access_iterator_tag,
|
||||
typename T::iterator_category>;
|
||||
};
|
||||
|
||||
template <class Head, class... Tail>
|
||||
@ -165,9 +165,8 @@ struct iterators_have_matching_difference_type<T> {
|
||||
|
||||
template <class T1, class T2>
|
||||
struct iterators_have_matching_difference_type<T1, T2> {
|
||||
static constexpr bool value =
|
||||
std::is_same<typename T1::difference_type,
|
||||
typename T2::difference_type>::value;
|
||||
static constexpr bool value = std::is_same_v<typename T1::difference_type,
|
||||
typename T2::difference_type>;
|
||||
};
|
||||
|
||||
template <class T1, class T2, class... Tail>
|
||||
|
||||
@ -30,7 +30,7 @@ namespace Impl {
|
||||
template <class IteratorType1, class IteratorType2>
|
||||
struct StdMoveBackwardFunctor {
|
||||
using index_type = typename IteratorType1::difference_type;
|
||||
static_assert(std::is_signed<index_type>::value,
|
||||
static_assert(std::is_signed_v<index_type>,
|
||||
"Kokkos: StdMoveBackwardFunctor requires signed index type");
|
||||
|
||||
IteratorType1 m_last;
|
||||
|
||||
@ -36,18 +36,18 @@ class RandomAccessIterator< ::Kokkos::View<DataType, Args...> > {
|
||||
using iterator_type = RandomAccessIterator<view_type>;
|
||||
|
||||
using iterator_category = std::random_access_iterator_tag;
|
||||
using value_type = typename view_type::value_type;
|
||||
using value_type = typename view_type::non_const_value_type;
|
||||
using difference_type = ptrdiff_t;
|
||||
using pointer = typename view_type::pointer_type;
|
||||
using reference = typename view_type::reference_type;
|
||||
|
||||
static_assert(view_type::rank == 1 &&
|
||||
(std::is_same<typename view_type::traits::array_layout,
|
||||
Kokkos::LayoutLeft>::value ||
|
||||
std::is_same<typename view_type::traits::array_layout,
|
||||
Kokkos::LayoutRight>::value ||
|
||||
std::is_same<typename view_type::traits::array_layout,
|
||||
Kokkos::LayoutStride>::value),
|
||||
(std::is_same_v<typename view_type::traits::array_layout,
|
||||
Kokkos::LayoutLeft> ||
|
||||
std::is_same_v<typename view_type::traits::array_layout,
|
||||
Kokkos::LayoutRight> ||
|
||||
std::is_same_v<typename view_type::traits::array_layout,
|
||||
Kokkos::LayoutStride>),
|
||||
"RandomAccessIterator only supports 1D Views with LayoutLeft, "
|
||||
"LayoutRight, LayoutStride.");
|
||||
|
||||
@ -61,9 +61,9 @@ class RandomAccessIterator< ::Kokkos::View<DataType, Args...> > {
|
||||
|
||||
#ifndef KOKKOS_ENABLE_CXX17 // C++20 and beyond
|
||||
template <class OtherViewType>
|
||||
requires(std::is_constructible_v<view_type, OtherViewType>) KOKKOS_FUNCTION
|
||||
explicit(!std::is_convertible_v<OtherViewType, view_type>)
|
||||
RandomAccessIterator(const RandomAccessIterator<OtherViewType>& other)
|
||||
requires(std::is_constructible_v<view_type, OtherViewType>)
|
||||
KOKKOS_FUNCTION explicit(!std::is_convertible_v<OtherViewType, view_type>)
|
||||
RandomAccessIterator(const RandomAccessIterator<OtherViewType>& other)
|
||||
: m_view(other.m_view), m_current_index(other.m_current_index) {}
|
||||
#else
|
||||
template <
|
||||
|
||||
@ -30,7 +30,7 @@ namespace Impl {
|
||||
template <class InputIterator>
|
||||
struct StdReverseFunctor {
|
||||
using index_type = typename InputIterator::difference_type;
|
||||
static_assert(std::is_signed<index_type>::value,
|
||||
static_assert(std::is_signed_v<index_type>,
|
||||
"Kokkos: StdReverseFunctor requires signed index type");
|
||||
|
||||
InputIterator m_first;
|
||||
|
||||
@ -30,7 +30,7 @@ namespace Impl {
|
||||
template <class InputIterator, class OutputIterator>
|
||||
struct StdReverseCopyFunctor {
|
||||
using index_type = typename InputIterator::difference_type;
|
||||
static_assert(std::is_signed<index_type>::value,
|
||||
static_assert(std::is_signed_v<index_type>,
|
||||
"Kokkos: StdReverseCopyFunctor requires signed index type");
|
||||
|
||||
InputIterator m_last;
|
||||
|
||||
@ -1,12 +1,10 @@
|
||||
|
||||
#Leave these here for now - I don't need transitive deps anyway
|
||||
KOKKOS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
|
||||
KOKKOS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
KOKKOS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../src )
|
||||
KOKKOS_INCLUDE_DIRECTORIES(${KOKKOS_SOURCE_DIR}/core/unit_test/category_files)
|
||||
kokkos_include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
||||
kokkos_include_directories(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
kokkos_include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../src)
|
||||
kokkos_include_directories(${KOKKOS_SOURCE_DIR}/core/unit_test/category_files)
|
||||
|
||||
|
||||
SET(ALGORITHM UnitTestMain.cpp)
|
||||
set(ALGORITHM UnitTestMain.cpp)
|
||||
|
||||
foreach(Tag Threads;Serial;OpenMP;Cuda;HPX;HIP;SYCL;OpenMPTarget)
|
||||
string(TOUPPER ${Tag} DEVICE)
|
||||
@ -23,21 +21,11 @@ foreach(Tag Threads;Serial;OpenMP;Cuda;HPX;HIP;SYCL;OpenMPTarget)
|
||||
# Generate a .cpp file for each one that runs it on the current backend (Tag),
|
||||
# and add this .cpp file to the sources for UnitTest_RandomAndSort.
|
||||
set(ALGO_SORT_SOURCES)
|
||||
foreach(SOURCE_Input
|
||||
TestSort
|
||||
TestSortByKey
|
||||
TestSortCustomComp
|
||||
TestBinSortA
|
||||
TestBinSortB
|
||||
TestNestedSort
|
||||
)
|
||||
foreach(SOURCE_Input TestSort TestSortByKey TestSortCustomComp TestBinSortA TestBinSortB TestNestedSort)
|
||||
set(file ${dir}/${SOURCE_Input}.cpp)
|
||||
# Write to a temporary intermediate file and call configure_file to avoid
|
||||
# updating timestamps triggering unnecessary rebuilds on subsequent cmake runs.
|
||||
file(WRITE ${dir}/dummy.cpp
|
||||
"#include <Test${Tag}_Category.hpp>\n"
|
||||
"#include <${SOURCE_Input}.hpp>\n"
|
||||
)
|
||||
file(WRITE ${dir}/dummy.cpp "#include <Test${Tag}_Category.hpp>\n" "#include <${SOURCE_Input}.hpp>\n")
|
||||
configure_file(${dir}/dummy.cpp ${file})
|
||||
list(APPEND ALGO_SORT_SOURCES ${file})
|
||||
endforeach()
|
||||
@ -47,14 +35,9 @@ foreach(Tag Threads;Serial;OpenMP;Cuda;HPX;HIP;SYCL;OpenMPTarget)
|
||||
# ------------------------------------------
|
||||
# do as above
|
||||
set(ALGO_RANDOM_SOURCES)
|
||||
foreach(SOURCE_Input
|
||||
TestRandom
|
||||
)
|
||||
foreach(SOURCE_Input TestRandom)
|
||||
set(file ${dir}/${SOURCE_Input}.cpp)
|
||||
file(WRITE ${dir}/dummy.cpp
|
||||
"#include <Test${Tag}_Category.hpp>\n"
|
||||
"#include <${SOURCE_Input}.hpp>\n"
|
||||
)
|
||||
file(WRITE ${dir}/dummy.cpp "#include <Test${Tag}_Category.hpp>\n" "#include <${SOURCE_Input}.hpp>\n")
|
||||
configure_file(${dir}/dummy.cpp ${file})
|
||||
list(APPEND ALGO_RANDOM_SOURCES ${file})
|
||||
endforeach()
|
||||
@ -65,11 +48,7 @@ endforeach()
|
||||
# std set A
|
||||
# ------------------------------------------
|
||||
set(STDALGO_SOURCES_A)
|
||||
foreach(Name
|
||||
StdReducers
|
||||
StdAlgorithmsConstraints
|
||||
RandomAccessIterator
|
||||
)
|
||||
foreach(Name StdReducers StdAlgorithmsConstraints RandomAccessIterator)
|
||||
list(APPEND STDALGO_SOURCES_A Test${Name}.cpp)
|
||||
endforeach()
|
||||
|
||||
@ -77,10 +56,7 @@ endforeach()
|
||||
# std set B
|
||||
# ------------------------------------------
|
||||
set(STDALGO_SOURCES_B)
|
||||
foreach(Name
|
||||
StdAlgorithmsCommon
|
||||
StdAlgorithmsMinMaxElementOps
|
||||
)
|
||||
foreach(Name StdAlgorithmsCommon StdAlgorithmsMinMaxElementOps)
|
||||
list(APPEND STDALGO_SOURCES_B Test${Name}.cpp)
|
||||
endforeach()
|
||||
|
||||
@ -88,22 +64,23 @@ endforeach()
|
||||
# std set C
|
||||
# ------------------------------------------
|
||||
set(STDALGO_SOURCES_C)
|
||||
foreach(Name
|
||||
StdAlgorithmsCommon
|
||||
StdAlgorithmsLexicographicalCompare
|
||||
StdAlgorithmsForEach
|
||||
StdAlgorithmsFind
|
||||
StdAlgorithmsFindFirstOf
|
||||
StdAlgorithmsFindEnd
|
||||
StdAlgorithmsCount
|
||||
StdAlgorithmsEqual
|
||||
StdAlgorithmsAllAnyNoneOf
|
||||
StdAlgorithmsAdjacentFind
|
||||
StdAlgorithmsSearch
|
||||
StdAlgorithmsSearch_n
|
||||
StdAlgorithmsMismatch
|
||||
StdAlgorithmsMoveBackward
|
||||
)
|
||||
foreach(
|
||||
Name
|
||||
StdAlgorithmsCommon
|
||||
StdAlgorithmsLexicographicalCompare
|
||||
StdAlgorithmsForEach
|
||||
StdAlgorithmsFind
|
||||
StdAlgorithmsFindFirstOf
|
||||
StdAlgorithmsFindEnd
|
||||
StdAlgorithmsCount
|
||||
StdAlgorithmsEqual
|
||||
StdAlgorithmsAllAnyNoneOf
|
||||
StdAlgorithmsAdjacentFind
|
||||
StdAlgorithmsSearch
|
||||
StdAlgorithmsSearch_n
|
||||
StdAlgorithmsMismatch
|
||||
StdAlgorithmsMoveBackward
|
||||
)
|
||||
list(APPEND STDALGO_SOURCES_C Test${Name}.cpp)
|
||||
endforeach()
|
||||
|
||||
@ -111,27 +88,28 @@ endforeach()
|
||||
# std set D
|
||||
# ------------------------------------------
|
||||
set(STDALGO_SOURCES_D)
|
||||
foreach(Name
|
||||
StdAlgorithmsCommon
|
||||
StdAlgorithmsModOps
|
||||
StdAlgorithmsModSeqOps
|
||||
StdAlgorithmsReplace
|
||||
StdAlgorithmsReplaceIf
|
||||
StdAlgorithmsReplaceCopy
|
||||
StdAlgorithmsReplaceCopyIf
|
||||
StdAlgorithmsCopyIf
|
||||
StdAlgorithmsUnique
|
||||
StdAlgorithmsUniqueCopy
|
||||
StdAlgorithmsRemove
|
||||
StdAlgorithmsRemoveIf
|
||||
StdAlgorithmsRemoveCopy
|
||||
StdAlgorithmsRemoveCopyIf
|
||||
StdAlgorithmsRotate
|
||||
StdAlgorithmsRotateCopy
|
||||
StdAlgorithmsReverse
|
||||
StdAlgorithmsShiftLeft
|
||||
StdAlgorithmsShiftRight
|
||||
)
|
||||
foreach(
|
||||
Name
|
||||
StdAlgorithmsCommon
|
||||
StdAlgorithmsModOps
|
||||
StdAlgorithmsModSeqOps
|
||||
StdAlgorithmsReplace
|
||||
StdAlgorithmsReplaceIf
|
||||
StdAlgorithmsReplaceCopy
|
||||
StdAlgorithmsReplaceCopyIf
|
||||
StdAlgorithmsCopyIf
|
||||
StdAlgorithmsUnique
|
||||
StdAlgorithmsUniqueCopy
|
||||
StdAlgorithmsRemove
|
||||
StdAlgorithmsRemoveIf
|
||||
StdAlgorithmsRemoveCopy
|
||||
StdAlgorithmsRemoveCopyIf
|
||||
StdAlgorithmsRotate
|
||||
StdAlgorithmsRotateCopy
|
||||
StdAlgorithmsReverse
|
||||
StdAlgorithmsShiftLeft
|
||||
StdAlgorithmsShiftRight
|
||||
)
|
||||
list(APPEND STDALGO_SOURCES_D Test${Name}.cpp)
|
||||
endforeach()
|
||||
|
||||
@ -139,20 +117,21 @@ endforeach()
|
||||
# std set E
|
||||
# ------------------------------------------
|
||||
set(STDALGO_SOURCES_E)
|
||||
foreach(Name
|
||||
StdAlgorithmsCommon
|
||||
StdAlgorithmsIsSorted
|
||||
StdAlgorithmsIsSortedUntil
|
||||
StdAlgorithmsPartitioningOps
|
||||
StdAlgorithmsPartitionCopy
|
||||
StdAlgorithmsNumerics
|
||||
StdAlgorithmsAdjacentDifference
|
||||
StdAlgorithmsExclusiveScan
|
||||
StdAlgorithmsInclusiveScan
|
||||
StdAlgorithmsTransformUnaryOp
|
||||
StdAlgorithmsTransformExclusiveScan
|
||||
StdAlgorithmsTransformInclusiveScan
|
||||
)
|
||||
foreach(
|
||||
Name
|
||||
StdAlgorithmsCommon
|
||||
StdAlgorithmsIsSorted
|
||||
StdAlgorithmsIsSortedUntil
|
||||
StdAlgorithmsPartitioningOps
|
||||
StdAlgorithmsPartitionCopy
|
||||
StdAlgorithmsNumerics
|
||||
StdAlgorithmsAdjacentDifference
|
||||
StdAlgorithmsExclusiveScan
|
||||
StdAlgorithmsInclusiveScan
|
||||
StdAlgorithmsTransformUnaryOp
|
||||
StdAlgorithmsTransformExclusiveScan
|
||||
StdAlgorithmsTransformInclusiveScan
|
||||
)
|
||||
list(APPEND STDALGO_SOURCES_E Test${Name}.cpp)
|
||||
endforeach()
|
||||
|
||||
@ -160,11 +139,7 @@ endforeach()
|
||||
# std team Q
|
||||
# ------------------------------------------
|
||||
set(STDALGO_TEAM_SOURCES_Q)
|
||||
foreach(Name
|
||||
StdAlgorithmsCommon
|
||||
StdAlgorithmsTeamInclusiveScan
|
||||
StdAlgorithmsTeamTransformInclusiveScan
|
||||
)
|
||||
foreach(Name StdAlgorithmsCommon StdAlgorithmsTeamInclusiveScan StdAlgorithmsTeamTransformInclusiveScan)
|
||||
list(APPEND STDALGO_TEAM_SOURCES_Q Test${Name}.cpp)
|
||||
endforeach()
|
||||
|
||||
@ -172,11 +147,7 @@ endforeach()
|
||||
# std team P
|
||||
# ------------------------------------------
|
||||
set(STDALGO_TEAM_SOURCES_P)
|
||||
foreach(Name
|
||||
StdAlgorithmsCommon
|
||||
StdAlgorithmsTeamExclusiveScan
|
||||
StdAlgorithmsTeamTransformExclusiveScan
|
||||
)
|
||||
foreach(Name StdAlgorithmsCommon StdAlgorithmsTeamExclusiveScan StdAlgorithmsTeamTransformExclusiveScan)
|
||||
list(APPEND STDALGO_TEAM_SOURCES_P Test${Name}.cpp)
|
||||
endforeach()
|
||||
|
||||
@ -184,14 +155,9 @@ endforeach()
|
||||
# std team M
|
||||
# ------------------------------------------
|
||||
set(STDALGO_TEAM_SOURCES_M)
|
||||
foreach(Name
|
||||
StdAlgorithmsCommon
|
||||
StdAlgorithmsTeamTransformUnaryOp
|
||||
StdAlgorithmsTeamTransformBinaryOp
|
||||
StdAlgorithmsTeamGenerate
|
||||
StdAlgorithmsTeamGenerate_n
|
||||
StdAlgorithmsTeamSwapRanges
|
||||
)
|
||||
foreach(Name StdAlgorithmsCommon StdAlgorithmsTeamTransformUnaryOp StdAlgorithmsTeamTransformBinaryOp
|
||||
StdAlgorithmsTeamGenerate StdAlgorithmsTeamGenerate_n StdAlgorithmsTeamSwapRanges
|
||||
)
|
||||
list(APPEND STDALGO_TEAM_SOURCES_M Test${Name}.cpp)
|
||||
endforeach()
|
||||
|
||||
@ -199,14 +165,9 @@ endforeach()
|
||||
# std team L
|
||||
# ------------------------------------------
|
||||
set(STDALGO_TEAM_SOURCES_L)
|
||||
foreach(Name
|
||||
StdAlgorithmsCommon
|
||||
StdAlgorithmsTeamIsSorted
|
||||
StdAlgorithmsTeamIsSortedUntil
|
||||
StdAlgorithmsTeamIsPartitioned
|
||||
StdAlgorithmsTeamPartitionCopy
|
||||
StdAlgorithmsTeamPartitionPoint
|
||||
)
|
||||
foreach(Name StdAlgorithmsCommon StdAlgorithmsTeamIsSorted StdAlgorithmsTeamIsSortedUntil
|
||||
StdAlgorithmsTeamIsPartitioned StdAlgorithmsTeamPartitionCopy StdAlgorithmsTeamPartitionPoint
|
||||
)
|
||||
list(APPEND STDALGO_TEAM_SOURCES_L Test${Name}.cpp)
|
||||
endforeach()
|
||||
|
||||
@ -214,13 +175,9 @@ endforeach()
|
||||
# std team I
|
||||
# ------------------------------------------
|
||||
set(STDALGO_TEAM_SOURCES_I)
|
||||
foreach(Name
|
||||
StdAlgorithmsCommon
|
||||
StdAlgorithmsTeamUnique
|
||||
StdAlgorithmsTeamAdjacentDifference
|
||||
StdAlgorithmsTeamReduce
|
||||
StdAlgorithmsTeamTransformReduce
|
||||
)
|
||||
foreach(Name StdAlgorithmsCommon StdAlgorithmsTeamUnique StdAlgorithmsTeamAdjacentDifference StdAlgorithmsTeamReduce
|
||||
StdAlgorithmsTeamTransformReduce
|
||||
)
|
||||
list(APPEND STDALGO_TEAM_SOURCES_I Test${Name}.cpp)
|
||||
endforeach()
|
||||
|
||||
@ -228,18 +185,19 @@ endforeach()
|
||||
# std team H
|
||||
# ------------------------------------------
|
||||
set(STDALGO_TEAM_SOURCES_H)
|
||||
foreach(Name
|
||||
StdAlgorithmsCommon
|
||||
StdAlgorithmsTeamCopy
|
||||
StdAlgorithmsTeamCopy_n
|
||||
StdAlgorithmsTeamCopyBackward
|
||||
StdAlgorithmsTeamCopyIf
|
||||
StdAlgorithmsTeamUniqueCopy
|
||||
StdAlgorithmsTeamRemove
|
||||
StdAlgorithmsTeamRemoveIf
|
||||
StdAlgorithmsTeamRemoveCopy
|
||||
StdAlgorithmsTeamRemoveCopyIf
|
||||
)
|
||||
foreach(
|
||||
Name
|
||||
StdAlgorithmsCommon
|
||||
StdAlgorithmsTeamCopy
|
||||
StdAlgorithmsTeamCopy_n
|
||||
StdAlgorithmsTeamCopyBackward
|
||||
StdAlgorithmsTeamCopyIf
|
||||
StdAlgorithmsTeamUniqueCopy
|
||||
StdAlgorithmsTeamRemove
|
||||
StdAlgorithmsTeamRemoveIf
|
||||
StdAlgorithmsTeamRemoveCopy
|
||||
StdAlgorithmsTeamRemoveCopyIf
|
||||
)
|
||||
list(APPEND STDALGO_TEAM_SOURCES_H Test${Name}.cpp)
|
||||
endforeach()
|
||||
|
||||
@ -247,13 +205,9 @@ endforeach()
|
||||
# std team G
|
||||
# ------------------------------------------
|
||||
set(STDALGO_TEAM_SOURCES_G)
|
||||
foreach(Name
|
||||
StdAlgorithmsCommon
|
||||
StdAlgorithmsTeamMove
|
||||
StdAlgorithmsTeamMoveBackward
|
||||
StdAlgorithmsTeamShiftLeft
|
||||
StdAlgorithmsTeamShiftRight
|
||||
)
|
||||
foreach(Name StdAlgorithmsCommon StdAlgorithmsTeamMove StdAlgorithmsTeamMoveBackward StdAlgorithmsTeamShiftLeft
|
||||
StdAlgorithmsTeamShiftRight
|
||||
)
|
||||
list(APPEND STDALGO_TEAM_SOURCES_G Test${Name}.cpp)
|
||||
endforeach()
|
||||
|
||||
@ -261,13 +215,9 @@ endforeach()
|
||||
# std team F
|
||||
# ------------------------------------------
|
||||
set(STDALGO_TEAM_SOURCES_F)
|
||||
foreach(Name
|
||||
StdAlgorithmsCommon
|
||||
StdAlgorithmsTeamReverse
|
||||
StdAlgorithmsTeamReverseCopy
|
||||
StdAlgorithmsTeamRotate
|
||||
StdAlgorithmsTeamRotateCopy
|
||||
)
|
||||
foreach(Name StdAlgorithmsCommon StdAlgorithmsTeamReverse StdAlgorithmsTeamReverseCopy StdAlgorithmsTeamRotate
|
||||
StdAlgorithmsTeamRotateCopy
|
||||
)
|
||||
list(APPEND STDALGO_TEAM_SOURCES_F Test${Name}.cpp)
|
||||
endforeach()
|
||||
|
||||
@ -275,15 +225,16 @@ endforeach()
|
||||
# std team E
|
||||
# ------------------------------------------
|
||||
set(STDALGO_TEAM_SOURCES_E)
|
||||
foreach(Name
|
||||
StdAlgorithmsCommon
|
||||
StdAlgorithmsTeamFill
|
||||
StdAlgorithmsTeamFill_n
|
||||
StdAlgorithmsTeamReplace
|
||||
StdAlgorithmsTeamReplaceIf
|
||||
StdAlgorithmsTeamReplaceCopy
|
||||
StdAlgorithmsTeamReplaceCopyIf
|
||||
)
|
||||
foreach(
|
||||
Name
|
||||
StdAlgorithmsCommon
|
||||
StdAlgorithmsTeamFill
|
||||
StdAlgorithmsTeamFill_n
|
||||
StdAlgorithmsTeamReplace
|
||||
StdAlgorithmsTeamReplaceIf
|
||||
StdAlgorithmsTeamReplaceCopy
|
||||
StdAlgorithmsTeamReplaceCopyIf
|
||||
)
|
||||
list(APPEND STDALGO_TEAM_SOURCES_E Test${Name}.cpp)
|
||||
endforeach()
|
||||
|
||||
@ -291,12 +242,7 @@ endforeach()
|
||||
# std team D
|
||||
# ------------------------------------------
|
||||
set(STDALGO_TEAM_SOURCES_D)
|
||||
foreach(Name
|
||||
StdAlgorithmsCommon
|
||||
StdAlgorithmsTeamMinElement
|
||||
StdAlgorithmsTeamMaxElement
|
||||
StdAlgorithmsTeamMinMaxElement
|
||||
)
|
||||
foreach(Name StdAlgorithmsCommon StdAlgorithmsTeamMinElement StdAlgorithmsTeamMaxElement StdAlgorithmsTeamMinMaxElement)
|
||||
list(APPEND STDALGO_TEAM_SOURCES_D Test${Name}.cpp)
|
||||
endforeach()
|
||||
|
||||
@ -304,16 +250,17 @@ endforeach()
|
||||
# std team C
|
||||
# ------------------------------------------
|
||||
set(STDALGO_TEAM_SOURCES_C)
|
||||
foreach(Name
|
||||
StdAlgorithmsCommon
|
||||
StdAlgorithmsTeamFind
|
||||
StdAlgorithmsTeamFindIf
|
||||
StdAlgorithmsTeamFindIfNot
|
||||
StdAlgorithmsTeamAllOf
|
||||
StdAlgorithmsTeamAnyOf
|
||||
StdAlgorithmsTeamNoneOf
|
||||
StdAlgorithmsTeamSearchN
|
||||
)
|
||||
foreach(
|
||||
Name
|
||||
StdAlgorithmsCommon
|
||||
StdAlgorithmsTeamFind
|
||||
StdAlgorithmsTeamFindIf
|
||||
StdAlgorithmsTeamFindIfNot
|
||||
StdAlgorithmsTeamAllOf
|
||||
StdAlgorithmsTeamAnyOf
|
||||
StdAlgorithmsTeamNoneOf
|
||||
StdAlgorithmsTeamSearchN
|
||||
)
|
||||
list(APPEND STDALGO_TEAM_SOURCES_C Test${Name}.cpp)
|
||||
endforeach()
|
||||
|
||||
@ -321,13 +268,9 @@ endforeach()
|
||||
# std team B
|
||||
# ------------------------------------------
|
||||
set(STDALGO_TEAM_SOURCES_B)
|
||||
foreach(Name
|
||||
StdAlgorithmsCommon
|
||||
StdAlgorithmsTeamEqual
|
||||
StdAlgorithmsTeamSearch
|
||||
StdAlgorithmsTeamFindEnd
|
||||
StdAlgorithmsTeamFindFirstOf
|
||||
)
|
||||
foreach(Name StdAlgorithmsCommon StdAlgorithmsTeamEqual StdAlgorithmsTeamSearch StdAlgorithmsTeamFindEnd
|
||||
StdAlgorithmsTeamFindFirstOf
|
||||
)
|
||||
list(APPEND STDALGO_TEAM_SOURCES_B Test${Name}.cpp)
|
||||
endforeach()
|
||||
|
||||
@ -335,34 +278,33 @@ endforeach()
|
||||
# std team A
|
||||
# ------------------------------------------
|
||||
set(STDALGO_TEAM_SOURCES_A)
|
||||
foreach(Name
|
||||
StdAlgorithmsCommon
|
||||
StdAlgorithmsTeamAdjacentFind
|
||||
StdAlgorithmsTeamCount
|
||||
StdAlgorithmsTeamCountIf
|
||||
StdAlgorithmsTeamForEach
|
||||
StdAlgorithmsTeamForEachN
|
||||
StdAlgorithmsTeamLexicographicalCompare
|
||||
StdAlgorithmsTeamMismatch
|
||||
)
|
||||
foreach(
|
||||
Name
|
||||
StdAlgorithmsCommon
|
||||
StdAlgorithmsTeamAdjacentFind
|
||||
StdAlgorithmsTeamCount
|
||||
StdAlgorithmsTeamCountIf
|
||||
StdAlgorithmsTeamForEach
|
||||
StdAlgorithmsTeamForEachN
|
||||
StdAlgorithmsTeamLexicographicalCompare
|
||||
StdAlgorithmsTeamMismatch
|
||||
)
|
||||
list(APPEND STDALGO_TEAM_SOURCES_A Test${Name}.cpp)
|
||||
endforeach()
|
||||
|
||||
# FIXME_OPENMPTARGET - remove sort test as it leads to ICE with clang/16 and above at compile time.
|
||||
if(KOKKOS_ENABLE_OPENMPTARGET AND KOKKOS_CXX_COMPILER_ID STREQUAL "Clang" AND KOKKOS_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 16.0.0)
|
||||
list(REMOVE_ITEM ALGO_SORT_SOURCES
|
||||
TestSort.cpp
|
||||
)
|
||||
if(KOKKOS_ENABLE_OPENMPTARGET AND KOKKOS_CXX_COMPILER_ID STREQUAL "Clang" AND KOKKOS_CXX_COMPILER_VERSION
|
||||
VERSION_GREATER_EQUAL 16.0.0
|
||||
)
|
||||
list(REMOVE_ITEM ALGO_SORT_SOURCES TestSort.cpp)
|
||||
endif()
|
||||
|
||||
# FIXME_OPENMPTARGET remove tests for OpenMPTarget because in these cases
|
||||
# the impl needs to use either Kokkos or tailored reducers
|
||||
# which results in runtime memory errors.
|
||||
if(KOKKOS_ENABLE_OPENMPTARGET)
|
||||
list(REMOVE_ITEM STDALGO_TEAM_SOURCES_L
|
||||
TestStdAlgorithmsTeamIsPartitioned.cpp
|
||||
TestStdAlgorithmsTeamPartitionPoint.cpp
|
||||
TestStdAlgorithmsTeamPartitionCopy.cpp
|
||||
list(REMOVE_ITEM STDALGO_TEAM_SOURCES_L TestStdAlgorithmsTeamIsPartitioned.cpp
|
||||
TestStdAlgorithmsTeamPartitionPoint.cpp TestStdAlgorithmsTeamPartitionCopy.cpp
|
||||
)
|
||||
endif()
|
||||
|
||||
@ -370,7 +312,9 @@ endif()
|
||||
# in these cases the impl needs to use either Kokkos or
|
||||
# tailored reducers which results in runtime memory errors.
|
||||
if(KOKKOS_ENABLE_OPENMPTARGET)
|
||||
list(REMOVE_ITEM STDALGO_TEAM_SOURCES_C
|
||||
list(
|
||||
REMOVE_ITEM
|
||||
STDALGO_TEAM_SOURCES_C
|
||||
TestStdAlgorithmsTeamFind.cpp
|
||||
TestStdAlgorithmsTeamFindIf.cpp
|
||||
TestStdAlgorithmsTeamFindIfNot.cpp
|
||||
@ -386,35 +330,20 @@ endif()
|
||||
# FRIZZI: 04/26/2023: not sure if the compilation error is still applicable
|
||||
# but we conservatively leave this guard on
|
||||
if(NOT (KOKKOS_ENABLE_OPENMPTARGET AND KOKKOS_CXX_COMPILER_ID STREQUAL IntelLLVM))
|
||||
KOKKOS_ADD_EXECUTABLE_AND_TEST(
|
||||
UnitTest_Sort
|
||||
SOURCES
|
||||
UnitTestMain.cpp
|
||||
TestStdAlgorithmsCommon.cpp
|
||||
${ALGO_SORT_SOURCES}
|
||||
kokkos_add_executable_and_test(
|
||||
UnitTest_Sort SOURCES UnitTestMain.cpp TestStdAlgorithmsCommon.cpp ${ALGO_SORT_SOURCES}
|
||||
)
|
||||
|
||||
KOKKOS_ADD_EXECUTABLE_AND_TEST(
|
||||
UnitTest_Random
|
||||
SOURCES
|
||||
UnitTestMain.cpp
|
||||
${ALGO_RANDOM_SOURCES}
|
||||
)
|
||||
kokkos_add_executable_and_test(UnitTest_Random SOURCES UnitTestMain.cpp ${ALGO_RANDOM_SOURCES})
|
||||
endif()
|
||||
|
||||
# FIXME_OPENMPTARGET: These tests cause internal compiler errors as of 09/01/22
|
||||
# when compiling for Intel's Xe-HP GPUs.
|
||||
if(KOKKOS_ENABLE_OPENMPTARGET AND KOKKOS_CXX_COMPILER_ID STREQUAL IntelLLVM)
|
||||
list(REMOVE_ITEM STDALGO_SOURCES_D
|
||||
TestStdAlgorithmsCopyIf.cpp
|
||||
TestStdAlgorithmsRemoveCopy.cpp
|
||||
TestStdAlgorithmsUnique.cpp
|
||||
TestStdAlgorithmsUniqueCopy.cpp
|
||||
)
|
||||
list(REMOVE_ITEM STDALGO_SOURCES_E
|
||||
TestStdAlgorithmsExclusiveScan.cpp
|
||||
TestStdAlgorithmsInclusiveScan.cpp
|
||||
list(REMOVE_ITEM STDALGO_SOURCES_D TestStdAlgorithmsCopyIf.cpp TestStdAlgorithmsRemoveCopy.cpp
|
||||
TestStdAlgorithmsUnique.cpp TestStdAlgorithmsUniqueCopy.cpp
|
||||
)
|
||||
list(REMOVE_ITEM STDALGO_SOURCES_E TestStdAlgorithmsExclusiveScan.cpp TestStdAlgorithmsInclusiveScan.cpp)
|
||||
endif()
|
||||
|
||||
# FIXME_OPENMPTARGET remove tests for OpenMPTarget
|
||||
@ -422,48 +351,31 @@ endif()
|
||||
if(KOKKOS_ENABLE_OPENMPTARGET)
|
||||
# the following use either Kokkos or tailored reducers
|
||||
# which results in runtime memory errors.
|
||||
list(REMOVE_ITEM STDALGO_TEAM_SOURCES_B
|
||||
TestStdAlgorithmsTeamFindEnd.cpp
|
||||
TestStdAlgorithmsTeamFindFirstOf.cpp
|
||||
TestStdAlgorithmsTeamSearch.cpp
|
||||
list(REMOVE_ITEM STDALGO_TEAM_SOURCES_B TestStdAlgorithmsTeamFindEnd.cpp TestStdAlgorithmsTeamFindFirstOf.cpp
|
||||
TestStdAlgorithmsTeamSearch.cpp
|
||||
)
|
||||
|
||||
list(REMOVE_ITEM STDALGO_TEAM_SOURCES_A
|
||||
TestStdAlgorithmsTeamAdjacentFind.cpp
|
||||
TestStdAlgorithmsTeamLexicographicalCompare.cpp
|
||||
TestStdAlgorithmsTeamMismatch.cpp
|
||||
list(REMOVE_ITEM STDALGO_TEAM_SOURCES_A TestStdAlgorithmsTeamAdjacentFind.cpp
|
||||
TestStdAlgorithmsTeamLexicographicalCompare.cpp TestStdAlgorithmsTeamMismatch.cpp
|
||||
)
|
||||
|
||||
# this causes an illegal memory access if team_members_have_matching_result
|
||||
# is called
|
||||
list(REMOVE_ITEM STDALGO_TEAM_SOURCES_M
|
||||
TestStdAlgorithmsTeamTransformBinaryOp.cpp
|
||||
)
|
||||
list(REMOVE_ITEM STDALGO_TEAM_SOURCES_M TestStdAlgorithmsTeamTransformBinaryOp.cpp)
|
||||
endif()
|
||||
|
||||
foreach(ID A;B;C;D;E)
|
||||
KOKKOS_ADD_EXECUTABLE_AND_TEST(
|
||||
AlgorithmsUnitTest_StdSet_${ID}
|
||||
SOURCES
|
||||
UnitTestMain.cpp
|
||||
${STDALGO_SOURCES_${ID}}
|
||||
)
|
||||
kokkos_add_executable_and_test(AlgorithmsUnitTest_StdSet_${ID} SOURCES UnitTestMain.cpp ${STDALGO_SOURCES_${ID}})
|
||||
endforeach()
|
||||
|
||||
foreach(ID A;B;C;D;E;F;G;H;I;L;M;P;Q)
|
||||
KOKKOS_ADD_EXECUTABLE_AND_TEST(
|
||||
AlgorithmsUnitTest_StdSet_Team_${ID}
|
||||
SOURCES
|
||||
UnitTestMain.cpp
|
||||
${STDALGO_TEAM_SOURCES_${ID}}
|
||||
)
|
||||
kokkos_add_executable_and_test(
|
||||
AlgorithmsUnitTest_StdSet_Team_${ID} SOURCES UnitTestMain.cpp ${STDALGO_TEAM_SOURCES_${ID}}
|
||||
)
|
||||
endforeach()
|
||||
|
||||
# FIXME_OPENMPTARGET This test causes internal compiler errors as of 09/01/22
|
||||
# when compiling for Intel's Xe-HP GPUs.
|
||||
if(NOT (KOKKOS_ENABLE_OPENMPTARGET AND KOKKOS_CXX_COMPILER_ID STREQUAL IntelLLVM))
|
||||
KOKKOS_ADD_EXECUTABLE(
|
||||
AlgorithmsUnitTest_StdAlgoCompileOnly
|
||||
SOURCES TestStdAlgorithmsCompileOnly.cpp
|
||||
)
|
||||
kokkos_add_executable(AlgorithmsUnitTest_StdAlgoCompileOnly SOURCES TestStdAlgorithmsCompileOnly.cpp)
|
||||
endif()
|
||||
|
||||
@ -31,13 +31,13 @@ struct bin3d_is_sorted_struct {
|
||||
using value_type = unsigned int;
|
||||
using execution_space = ExecutionSpace;
|
||||
|
||||
Kokkos::View<Scalar * [3], ExecutionSpace> keys;
|
||||
Kokkos::View<Scalar* [3], ExecutionSpace> keys;
|
||||
|
||||
int max_bins;
|
||||
Scalar min;
|
||||
Scalar max;
|
||||
|
||||
bin3d_is_sorted_struct(Kokkos::View<Scalar * [3], ExecutionSpace> keys_,
|
||||
bin3d_is_sorted_struct(Kokkos::View<Scalar* [3], ExecutionSpace> keys_,
|
||||
int max_bins_, Scalar min_, Scalar max_)
|
||||
: keys(keys_), max_bins(max_bins_), min(min_), max(max_) {}
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
@ -65,9 +65,9 @@ struct sum3D {
|
||||
using value_type = double;
|
||||
using execution_space = ExecutionSpace;
|
||||
|
||||
Kokkos::View<Scalar * [3], ExecutionSpace> keys;
|
||||
Kokkos::View<Scalar* [3], ExecutionSpace> keys;
|
||||
|
||||
sum3D(Kokkos::View<Scalar * [3], ExecutionSpace> keys_) : keys(keys_) {}
|
||||
sum3D(Kokkos::View<Scalar* [3], ExecutionSpace> keys_) : keys(keys_) {}
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
void operator()(int i, double& count) const {
|
||||
count += keys(i, 0);
|
||||
@ -77,8 +77,8 @@ struct sum3D {
|
||||
};
|
||||
|
||||
template <class ExecutionSpace, typename KeyType>
|
||||
void test_3D_sort_impl(unsigned int n) {
|
||||
using KeyViewType = Kokkos::View<KeyType * [3], ExecutionSpace>;
|
||||
void test_3D_sort_impl(size_t n) {
|
||||
using KeyViewType = Kokkos::View<KeyType* [3], ExecutionSpace>;
|
||||
|
||||
KeyViewType keys("Keys", n * n * n);
|
||||
|
||||
@ -207,7 +207,7 @@ void test_sort_integer_overflow() {
|
||||
// array with two extrema in reverse order to expose integer overflow bug in
|
||||
// bin calculation
|
||||
T a[2] = {Kokkos::Experimental::finite_max<T>::value,
|
||||
Kokkos::Experimental::finite_min<T>::value};
|
||||
Kokkos::Experimental::finite_min<T>::value};
|
||||
auto vd = Kokkos::create_mirror_view_and_copy(
|
||||
ExecutionSpace(), Kokkos::View<T[2], Kokkos::HostSpace>(a));
|
||||
Kokkos::sort(vd);
|
||||
@ -219,6 +219,10 @@ void test_sort_integer_overflow() {
|
||||
} // namespace BinSortSetA
|
||||
|
||||
TEST(TEST_CATEGORY, BinSortGenericTests) {
|
||||
// FIXME_OPENMPTARGET - causes runtime failure with CrayClang compiler
|
||||
#if defined(KOKKOS_COMPILER_CRAY_LLVM) && defined(KOKKOS_ENABLE_OPENMPTARGET)
|
||||
GTEST_SKIP() << "known to fail with OpenMPTarget+Cray LLVM";
|
||||
#endif
|
||||
using ExecutionSpace = TEST_EXECSPACE;
|
||||
using key_type = unsigned;
|
||||
constexpr int N = 171;
|
||||
@ -246,11 +250,11 @@ TEST(TEST_CATEGORY, BinSortEmptyView) {
|
||||
// does not matter if we use int or something else
|
||||
Kokkos::View<int*, ExecutionSpace> v("v", 0);
|
||||
|
||||
// test all exposed public sort methods
|
||||
ASSERT_NO_THROW(Sorter.sort(ExecutionSpace(), v, 0, 0));
|
||||
ASSERT_NO_THROW(Sorter.sort(v, 0, 0));
|
||||
ASSERT_NO_THROW(Sorter.sort(ExecutionSpace(), v));
|
||||
ASSERT_NO_THROW(Sorter.sort(v));
|
||||
// test all exposed public sort methods are callable and do not throw
|
||||
Sorter.sort(ExecutionSpace(), v, 0, 0);
|
||||
Sorter.sort(v, 0, 0);
|
||||
Sorter.sort(ExecutionSpace(), v);
|
||||
Sorter.sort(v);
|
||||
}
|
||||
|
||||
TEST(TEST_CATEGORY, BinSortEmptyKeysView) {
|
||||
@ -263,7 +267,26 @@ TEST(TEST_CATEGORY, BinSortEmptyKeysView) {
|
||||
BinOp_t binOp(5, 0, 10);
|
||||
Kokkos::BinSort<KeyViewType, BinOp_t> Sorter(ExecutionSpace{}, kv, binOp);
|
||||
|
||||
ASSERT_NO_THROW(Sorter.create_permute_vector(ExecutionSpace{}));
|
||||
Sorter.create_permute_vector(ExecutionSpace{}); // does not throw
|
||||
}
|
||||
|
||||
// BinSort may delegate sorting within bins to std::sort when running on host
|
||||
// and having a sufficiently large number of items within a single bin (10 by
|
||||
// default). Test that this is done without undefined behavior when accessing
|
||||
// the boundaries of the bin. Should be used in conjunction with a memory
|
||||
// sanitizer or bounds check.
|
||||
TEST(TEST_CATEGORY, BinSort_issue_7221) {
|
||||
using ExecutionSpace = TEST_EXECSPACE;
|
||||
|
||||
using KeyViewType = Kokkos::View<int*, ExecutionSpace>;
|
||||
KeyViewType kv("kv", 11);
|
||||
|
||||
using BinOp_t = Kokkos::BinOp1D<KeyViewType>;
|
||||
BinOp_t binOp(1, -10, 10);
|
||||
Kokkos::BinSort<KeyViewType, BinOp_t> Sorter(ExecutionSpace{}, kv, binOp,
|
||||
/*sort_within_bins*/ true);
|
||||
|
||||
Sorter.create_permute_vector(ExecutionSpace{}); // does not throw
|
||||
}
|
||||
|
||||
} // namespace Test
|
||||
|
||||
@ -185,6 +185,10 @@ void run_for_rank2() {
|
||||
} // namespace BinSortSetB
|
||||
|
||||
TEST(TEST_CATEGORY, BinSortUnsignedKeyLayoutStrideValues) {
|
||||
// FIXME_OPENMPTARGET - causes runtime failure with CrayClang compiler
|
||||
#if defined(KOKKOS_COMPILER_CRAY_LLVM) && defined(KOKKOS_ENABLE_OPENMPTARGET)
|
||||
GTEST_SKIP() << "known to fail with OpenMPTarget+Cray LLVM";
|
||||
#endif
|
||||
using ExeSpace = TEST_EXECSPACE;
|
||||
using key_type = unsigned;
|
||||
BinSortSetB::run_for_rank1<ExeSpace, key_type, int>();
|
||||
|
||||
@ -386,6 +386,11 @@ void test_nested_sort_by_key(unsigned int N, KeyType minKey, KeyType maxKey,
|
||||
} // namespace NestedSortImpl
|
||||
|
||||
TEST(TEST_CATEGORY, NestedSort) {
|
||||
// FIXME_OPENMPTARGET - causes runtime failure with CrayClang compiler
|
||||
#if defined(KOKKOS_COMPILER_CRAY_LLVM) && defined(KOKKOS_ENABLE_OPENMPTARGET)
|
||||
GTEST_SKIP() << "known to fail with OpenMPTarget+Cray LLVM";
|
||||
#endif
|
||||
|
||||
using ExecutionSpace = TEST_EXECSPACE;
|
||||
NestedSortImpl::test_nested_sort<ExecutionSpace, unsigned>(171, 0U, UINT_MAX);
|
||||
NestedSortImpl::test_nested_sort<ExecutionSpace, float>(42, -1e6f, 1e6f);
|
||||
@ -394,6 +399,11 @@ TEST(TEST_CATEGORY, NestedSort) {
|
||||
}
|
||||
|
||||
TEST(TEST_CATEGORY, NestedSortByKey) {
|
||||
// FIXME_OPENMPTARGET - causes runtime failure with CrayClang compiler
|
||||
#if defined(KOKKOS_COMPILER_CRAY_LLVM) && defined(KOKKOS_ENABLE_OPENMPTARGET)
|
||||
GTEST_SKIP() << "known to fail with OpenMPTarget+Cray LLVM";
|
||||
#endif
|
||||
|
||||
using ExecutionSpace = TEST_EXECSPACE;
|
||||
|
||||
// Second/third template arguments are key and value respectively.
|
||||
|
||||
@ -542,6 +542,11 @@ void test_duplicate_stream() {
|
||||
} // namespace AlgoRandomImpl
|
||||
|
||||
TEST(TEST_CATEGORY, Random_XorShift64) {
|
||||
// FIXME_OPENMPTARGET - causes runtime failure with CrayClang compiler
|
||||
#if defined(KOKKOS_COMPILER_CRAY_LLVM) && defined(KOKKOS_ENABLE_OPENMPTARGET)
|
||||
GTEST_SKIP() << "known to fail with OpenMPTarget+Cray LLVM";
|
||||
#endif
|
||||
|
||||
using ExecutionSpace = TEST_EXECSPACE;
|
||||
|
||||
#if defined(KOKKOS_ENABLE_SYCL) || defined(KOKKOS_ENABLE_CUDA) || \
|
||||
@ -562,6 +567,10 @@ TEST(TEST_CATEGORY, Random_XorShift64) {
|
||||
|
||||
TEST(TEST_CATEGORY, Random_XorShift1024_0) {
|
||||
using ExecutionSpace = TEST_EXECSPACE;
|
||||
// FIXME_OPENMPTARGET - causes runtime failure with CrayClang compiler
|
||||
#if defined(KOKKOS_COMPILER_CRAY_LLVM) && defined(KOKKOS_ENABLE_OPENMPTARGET)
|
||||
GTEST_SKIP() << "known to fail with OpenMPTarget+Cray LLVM";
|
||||
#endif
|
||||
|
||||
#if defined(KOKKOS_ENABLE_SYCL) || defined(KOKKOS_ENABLE_CUDA) || \
|
||||
defined(KOKKOS_ENABLE_HIP)
|
||||
@ -589,7 +598,7 @@ TEST(TEST_CATEGORY, Multi_streams) {
|
||||
#endif
|
||||
|
||||
#if defined(KOKKOS_ENABLE_SYCL) && defined(KOKKOS_IMPL_ARCH_NVIDIA_GPU)
|
||||
if constexpr (std::is_same_v<ExecutionSpace, Kokkos::Experimental::SYCL>) {
|
||||
if constexpr (std::is_same_v<ExecutionSpace, Kokkos::SYCL>) {
|
||||
GTEST_SKIP() << "Failing on NVIDIA GPUs"; // FIXME_SYCL
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -23,7 +23,7 @@ namespace stdalgos {
|
||||
|
||||
struct random_access_iterator_test : std_algorithms_test {
|
||||
public:
|
||||
virtual void SetUp() {
|
||||
void SetUp() override {
|
||||
Kokkos::parallel_for(m_static_view.extent(0),
|
||||
AssignIndexFunctor<static_view_t>(m_static_view));
|
||||
|
||||
@ -264,6 +264,37 @@ TEST_F(random_access_iterator_test, traits_helpers) {
|
||||
static_assert(KE::Impl::are_iterators_v<T1_t, T2_t, T3_t>);
|
||||
static_assert(KE::Impl::are_random_access_iterators_v<T1_t, T2_t, T3_t>);
|
||||
static_assert(!KE::Impl::are_iterators_v<int, T2_t, T3_t>);
|
||||
|
||||
static_assert(std::is_same_v<decltype(KE::begin(m_static_view))::value_type,
|
||||
value_type>);
|
||||
static_assert(std::is_same_v<decltype(KE::begin(m_dynamic_view))::value_type,
|
||||
value_type>);
|
||||
static_assert(std::is_same_v<decltype(KE::begin(m_strided_view))::value_type,
|
||||
value_type>);
|
||||
|
||||
static_assert(
|
||||
std::is_same_v<decltype(KE::end(m_static_view))::value_type, value_type>);
|
||||
static_assert(std::is_same_v<decltype(KE::end(m_dynamic_view))::value_type,
|
||||
value_type>);
|
||||
static_assert(std::is_same_v<decltype(KE::end(m_strided_view))::value_type,
|
||||
value_type>);
|
||||
|
||||
static_assert(
|
||||
std::is_same_v<decltype(KE::begin(m_static_view))::value_type,
|
||||
decltype(KE::cbegin(m_static_view))::value_type>);
|
||||
static_assert(
|
||||
std::is_same_v<decltype(KE::begin(m_dynamic_view))::value_type,
|
||||
decltype(KE::cbegin(m_dynamic_view))::value_type>);
|
||||
static_assert(
|
||||
std::is_same_v<decltype(KE::begin(m_strided_view))::value_type,
|
||||
decltype(KE::cbegin(m_strided_view))::value_type>);
|
||||
|
||||
static_assert(std::is_same_v<decltype(KE::end(m_static_view))::value_type,
|
||||
decltype(KE::cend(m_static_view))::value_type>);
|
||||
static_assert(std::is_same_v<decltype(KE::end(m_dynamic_view))::value_type,
|
||||
decltype(KE::cend(m_dynamic_view))::value_type>);
|
||||
static_assert(std::is_same_v<decltype(KE::end(m_strided_view))::value_type,
|
||||
decltype(KE::cend(m_strided_view))::value_type>);
|
||||
}
|
||||
|
||||
} // namespace stdalgos
|
||||
|
||||
@ -197,7 +197,7 @@ void test_sort_integer_overflow() {
|
||||
// array with two extrema in reverse order to expose integer overflow bug in
|
||||
// bin calculation
|
||||
T a[2] = {Kokkos::Experimental::finite_max<T>::value,
|
||||
Kokkos::Experimental::finite_min<T>::value};
|
||||
Kokkos::Experimental::finite_min<T>::value};
|
||||
auto vd = Kokkos::create_mirror_view_and_copy(
|
||||
ExecutionSpace(), Kokkos::View<T[2], Kokkos::HostSpace>(a));
|
||||
Kokkos::sort(vd);
|
||||
@ -209,6 +209,10 @@ void test_sort_integer_overflow() {
|
||||
} // namespace SortImpl
|
||||
|
||||
TEST(TEST_CATEGORY, SortUnsignedValueType) {
|
||||
// FIXME_OPENMPTARGET - causes runtime failure with CrayClang compiler
|
||||
#if defined(KOKKOS_COMPILER_CRAY_LLVM) && defined(KOKKOS_ENABLE_OPENMPTARGET)
|
||||
GTEST_SKIP() << "known to fail with OpenMPTarget+Cray LLVM";
|
||||
#endif
|
||||
using ExecutionSpace = TEST_EXECSPACE;
|
||||
using key_type = unsigned;
|
||||
constexpr int N = 171;
|
||||
@ -224,14 +228,19 @@ TEST(TEST_CATEGORY, SortUnsignedValueType) {
|
||||
}
|
||||
|
||||
TEST(TEST_CATEGORY, SortEmptyView) {
|
||||
// FIXME_OPENMPTARGET - causes runtime failure with CrayClang compiler
|
||||
#if defined(KOKKOS_COMPILER_CRAY_LLVM) && defined(KOKKOS_ENABLE_OPENMPTARGET)
|
||||
GTEST_SKIP() << "known to fail with OpenMPTarget+Cray LLVM";
|
||||
#endif
|
||||
using ExecutionSpace = TEST_EXECSPACE;
|
||||
|
||||
// does not matter if we use int or something else
|
||||
Kokkos::View<int*, ExecutionSpace> v("v", 0);
|
||||
|
||||
// checking that it does not throw
|
||||
// TODO check the synchronous behavior of the calls below
|
||||
ASSERT_NO_THROW(Kokkos::sort(ExecutionSpace(), v));
|
||||
ASSERT_NO_THROW(Kokkos::sort(v));
|
||||
Kokkos::sort(ExecutionSpace(), v);
|
||||
Kokkos::sort(v);
|
||||
}
|
||||
|
||||
} // namespace Test
|
||||
|
||||
@ -83,8 +83,8 @@ TEST(TEST_CATEGORY, SortByKeyEmptyView) {
|
||||
Kokkos::View<int *, ExecutionSpace> keys("keys", 0);
|
||||
Kokkos::View<float *, ExecutionSpace> values("values", 0);
|
||||
|
||||
ASSERT_NO_THROW(
|
||||
Kokkos::Experimental::sort_by_key(ExecutionSpace(), keys, values));
|
||||
// checking that it does not throw
|
||||
Kokkos::Experimental::sort_by_key(ExecutionSpace(), keys, values);
|
||||
}
|
||||
|
||||
// Test #7036
|
||||
@ -95,8 +95,8 @@ TEST(TEST_CATEGORY, SortByKeyEmptyViewHost) {
|
||||
Kokkos::View<int *, ExecutionSpace> keys("keys", 0);
|
||||
Kokkos::View<float *, ExecutionSpace> values("values", 0);
|
||||
|
||||
ASSERT_NO_THROW(
|
||||
Kokkos::Experimental::sort_by_key(ExecutionSpace(), keys, values));
|
||||
// checking that it does not throw
|
||||
Kokkos::Experimental::sort_by_key(ExecutionSpace(), keys, values);
|
||||
}
|
||||
|
||||
TEST(TEST_CATEGORY, SortByKey) {
|
||||
@ -183,12 +183,12 @@ TEST(TEST_CATEGORY, SortByKeyStaticExtents) {
|
||||
Kokkos::View<int[10], ExecutionSpace> keys("keys");
|
||||
|
||||
Kokkos::View<int[10], ExecutionSpace> values_static("values_static");
|
||||
ASSERT_NO_THROW(
|
||||
Kokkos::Experimental::sort_by_key(space, keys, values_static));
|
||||
// checking that it does not throw
|
||||
Kokkos::Experimental::sort_by_key(space, keys, values_static);
|
||||
|
||||
Kokkos::View<int *, ExecutionSpace> values_dynamic("values_dynamic", 10);
|
||||
ASSERT_NO_THROW(
|
||||
Kokkos::Experimental::sort_by_key(space, keys, values_dynamic));
|
||||
// checking that it does not throw
|
||||
Kokkos::Experimental::sort_by_key(space, keys, values_dynamic);
|
||||
}
|
||||
|
||||
template <typename ExecutionSpace, typename Keys, typename Values>
|
||||
@ -234,7 +234,9 @@ TEST(TEST_CATEGORY, SortByKeyWithStrides) {
|
||||
ASSERT_EQ(sort_fails, 0u);
|
||||
}
|
||||
|
||||
TEST(TEST_CATEGORY, SortByKeyKeysLargerThanValues) {
|
||||
TEST(TEST_CATEGORY_DEATH, SortByKeyKeysLargerThanValues) {
|
||||
::testing::FLAGS_gtest_death_test_style = "threadsafe";
|
||||
|
||||
using ExecutionSpace = TEST_EXECSPACE;
|
||||
|
||||
// does not matter if we use int or something else
|
||||
|
||||
@ -96,7 +96,7 @@ void fill_view(DestViewType dest_view, const std::string& name) {
|
||||
}
|
||||
|
||||
else {
|
||||
throw std::runtime_error("invalid choice");
|
||||
FAIL() << "invalid choice";
|
||||
}
|
||||
|
||||
Kokkos::deep_copy(aux_view, aux_v_h);
|
||||
|
||||
@ -173,7 +173,7 @@ void fill_view(ViewType dest_view, const std::string& name) {
|
||||
}
|
||||
|
||||
else {
|
||||
throw std::runtime_error("invalid choice");
|
||||
FAIL() << "invalid choice";
|
||||
}
|
||||
|
||||
Kokkos::deep_copy(aux_view, v_h);
|
||||
@ -243,7 +243,7 @@ void run_single_scenario(const InfoType& scenario_info, Args... args) {
|
||||
|
||||
{
|
||||
auto res_it = KE::adjacent_find(exespace(), KE::cbegin(view),
|
||||
KE::cend(view), args...);
|
||||
KE::cend(view), args...);
|
||||
const auto my_diff = res_it - KE::cbegin(view);
|
||||
verify(my_diff, view, args...);
|
||||
}
|
||||
|
||||
@ -534,10 +534,10 @@ void fill_views_inc(ViewType view, ViewHostType host_view) {
|
||||
}
|
||||
|
||||
template <class ValueType, class ViewType>
|
||||
std::enable_if_t<!std::is_same<typename ViewType::traits::array_layout,
|
||||
Kokkos::LayoutStride>::value>
|
||||
std::enable_if_t<!std::is_same_v<typename ViewType::traits::array_layout,
|
||||
Kokkos::LayoutStride>>
|
||||
verify_values(ValueType expected, const ViewType view) {
|
||||
static_assert(std::is_same<ValueType, typename ViewType::value_type>::value,
|
||||
static_assert(std::is_same_v<ValueType, typename ViewType::value_type>,
|
||||
"Non-matching value types of view and reference value");
|
||||
auto view_h = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), view);
|
||||
for (std::size_t i = 0; i < view_h.extent(0); i++) {
|
||||
@ -546,10 +546,10 @@ verify_values(ValueType expected, const ViewType view) {
|
||||
}
|
||||
|
||||
template <class ValueType, class ViewType>
|
||||
std::enable_if_t<std::is_same<typename ViewType::traits::array_layout,
|
||||
Kokkos::LayoutStride>::value>
|
||||
std::enable_if_t<std::is_same_v<typename ViewType::traits::array_layout,
|
||||
Kokkos::LayoutStride>>
|
||||
verify_values(ValueType expected, const ViewType view) {
|
||||
static_assert(std::is_same<ValueType, typename ViewType::value_type>::value,
|
||||
static_assert(std::is_same_v<ValueType, typename ViewType::value_type>,
|
||||
"Non-matching value types of view and reference value");
|
||||
|
||||
using non_strided_view_t = Kokkos::View<typename ViewType::value_type*>;
|
||||
@ -566,11 +566,11 @@ verify_values(ValueType expected, const ViewType view) {
|
||||
}
|
||||
|
||||
template <class ViewType1, class ViewType2>
|
||||
std::enable_if_t<!std::is_same<typename ViewType2::traits::array_layout,
|
||||
Kokkos::LayoutStride>::value>
|
||||
std::enable_if_t<!std::is_same_v<typename ViewType2::traits::array_layout,
|
||||
Kokkos::LayoutStride>>
|
||||
compare_views(ViewType1 expected, const ViewType2 actual) {
|
||||
static_assert(std::is_same<typename ViewType1::value_type,
|
||||
typename ViewType2::value_type>::value,
|
||||
static_assert(std::is_same_v<typename ViewType1::value_type,
|
||||
typename ViewType2::value_type>,
|
||||
"Non-matching value types of expected and actual view");
|
||||
auto expected_h =
|
||||
Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), expected);
|
||||
@ -583,11 +583,11 @@ compare_views(ViewType1 expected, const ViewType2 actual) {
|
||||
}
|
||||
|
||||
template <class ViewType1, class ViewType2>
|
||||
std::enable_if_t<std::is_same<typename ViewType2::traits::array_layout,
|
||||
Kokkos::LayoutStride>::value>
|
||||
std::enable_if_t<std::is_same_v<typename ViewType2::traits::array_layout,
|
||||
Kokkos::LayoutStride>>
|
||||
compare_views(ViewType1 expected, const ViewType2 actual) {
|
||||
static_assert(std::is_same<typename ViewType1::value_type,
|
||||
typename ViewType2::value_type>::value,
|
||||
static_assert(std::is_same_v<typename ViewType1::value_type,
|
||||
typename ViewType2::value_type>,
|
||||
"Non-matching value types of expected and actual view");
|
||||
|
||||
using non_strided_view_t = Kokkos::View<typename ViewType2::value_type*>;
|
||||
|
||||
@ -81,7 +81,7 @@ TEST(std_algorithms, is_admissible_to_std_algorithms) {
|
||||
strided_view_3d_t>::value);
|
||||
}
|
||||
|
||||
TEST(std_algorithms, expect_no_overlap) {
|
||||
TEST(std_algorithms_DeathTest, expect_no_overlap) {
|
||||
namespace KE = Kokkos::Experimental;
|
||||
using value_type = double;
|
||||
|
||||
@ -104,6 +104,8 @@ TEST(std_algorithms, expect_no_overlap) {
|
||||
|
||||
// Overlapping because iterators are identical
|
||||
#if defined(KOKKOS_ENABLE_DEBUG)
|
||||
::testing::FLAGS_gtest_death_test_style = "threadsafe";
|
||||
|
||||
auto first_s = KE::begin(static_view_1d);
|
||||
auto last_s = first_s + extent0;
|
||||
EXPECT_DEATH({ KE::Impl::expect_no_overlap(first_s, last_s, first_s); },
|
||||
@ -148,8 +150,7 @@ TEST(std_algorithms, expect_no_overlap) {
|
||||
auto last_st0 = first_st0 + strided_view_1d_0.extent(0);
|
||||
auto first_st1 = KE::begin(strided_view_1d_1); // [3, 15)
|
||||
// Does not overlap since offset (=3) is not divisible by stride (=2)
|
||||
EXPECT_NO_THROW(
|
||||
{ KE::Impl::expect_no_overlap(first_st0, last_st0, first_st1); });
|
||||
KE::Impl::expect_no_overlap(first_st0, last_st0, first_st1);
|
||||
|
||||
// Iterating over the same range without overlapping
|
||||
Kokkos::View<value_type[2][extent0], Kokkos::LayoutLeft> static_view_2d{
|
||||
@ -160,9 +161,7 @@ TEST(std_algorithms, expect_no_overlap) {
|
||||
auto sub_last_s0 = sub_first_s0 + sub_static_view_1d_0.extent(0);
|
||||
auto sub_first_s1 = KE::begin(sub_static_view_1d_1); // 1, 3, 5, ...
|
||||
|
||||
EXPECT_NO_THROW({
|
||||
KE::Impl::expect_no_overlap(sub_first_s0, sub_last_s0, sub_first_s1);
|
||||
});
|
||||
KE::Impl::expect_no_overlap(sub_first_s0, sub_last_s0, sub_first_s1);
|
||||
|
||||
Kokkos::View<value_type**, Kokkos::LayoutLeft> dynamic_view_2d{
|
||||
"std-algo-test-2d-contiguous-view-dynamic", 2, extent0};
|
||||
@ -172,9 +171,7 @@ TEST(std_algorithms, expect_no_overlap) {
|
||||
auto sub_last_d0 = sub_first_d0 + sub_dynamic_view_1d_0.extent(0);
|
||||
auto sub_first_d1 = KE::begin(sub_dynamic_view_1d_1); // 1, 3, 5, ...
|
||||
|
||||
EXPECT_NO_THROW({
|
||||
KE::Impl::expect_no_overlap(sub_first_d0, sub_last_d0, sub_first_d1);
|
||||
});
|
||||
KE::Impl::expect_no_overlap(sub_first_d0, sub_last_d0, sub_first_d1);
|
||||
|
||||
Kokkos::LayoutStride layout2d{2, 3, extent0, 2 * 3};
|
||||
Kokkos::View<value_type**, Kokkos::LayoutStride> strided_view_2d{
|
||||
@ -185,9 +182,7 @@ TEST(std_algorithms, expect_no_overlap) {
|
||||
auto sub_last_st0 = sub_first_st0 + sub_strided_view_1d_0.extent(0);
|
||||
auto sub_first_st1 = KE::begin(sub_strided_view_1d_1); // 1, 7, 13, ...
|
||||
|
||||
EXPECT_NO_THROW({
|
||||
KE::Impl::expect_no_overlap(sub_first_st0, sub_last_st0, sub_first_st1);
|
||||
});
|
||||
KE::Impl::expect_no_overlap(sub_first_st0, sub_last_st0, sub_first_st1);
|
||||
}
|
||||
|
||||
} // namespace stdalgos
|
||||
|
||||
@ -107,7 +107,7 @@ std::size_t fill_view(ViewType dest_view, const std::string& name,
|
||||
}
|
||||
|
||||
else {
|
||||
throw std::runtime_error("invalid choice");
|
||||
Kokkos::abort("invalid choice");
|
||||
}
|
||||
|
||||
Kokkos::deep_copy(aux_view, v_h);
|
||||
@ -202,7 +202,7 @@ void verify_data(const std::string& name, ViewTypeFrom view_from,
|
||||
}
|
||||
|
||||
else {
|
||||
throw std::runtime_error("invalid choice");
|
||||
FAIL() << "invalid choice";
|
||||
}
|
||||
}
|
||||
|
||||
@ -224,7 +224,7 @@ void run_single_scenario(const InfoType& scenario_info) {
|
||||
auto n = fill_view(view_from, name, pred);
|
||||
auto view_dest = create_view<ValueType>(Tag{}, view_ext, "copy_if_dest");
|
||||
auto rit = KE::copy_if(exespace(), KE::cbegin(view_from),
|
||||
KE::cend(view_from), KE::begin(view_dest), pred);
|
||||
KE::cend(view_from), KE::begin(view_dest), pred);
|
||||
verify_data(name, view_from, view_dest, pred);
|
||||
ASSERT_EQ(rit, (KE::begin(view_dest) + n));
|
||||
}
|
||||
@ -233,7 +233,7 @@ void run_single_scenario(const InfoType& scenario_info) {
|
||||
auto n = fill_view(view_from, name, pred);
|
||||
auto view_dest = create_view<ValueType>(Tag{}, view_ext, "copy_if_dest");
|
||||
auto rit = KE::copy_if("label", exespace(), KE::cbegin(view_from),
|
||||
KE::cend(view_from), KE::begin(view_dest), pred);
|
||||
KE::cend(view_from), KE::begin(view_dest), pred);
|
||||
verify_data(name, view_from, view_dest, pred);
|
||||
ASSERT_EQ(rit, (KE::begin(view_dest) + n));
|
||||
}
|
||||
|
||||
@ -110,7 +110,7 @@ void fill_view(ViewType dest_view, const std::string& name) {
|
||||
}
|
||||
|
||||
else {
|
||||
throw std::runtime_error("invalid choice");
|
||||
FAIL() << "invalid choice";
|
||||
}
|
||||
|
||||
Kokkos::deep_copy(aux_view, v_h);
|
||||
|
||||
@ -55,7 +55,6 @@ void test_for_each(const ViewType view) {
|
||||
std::for_each(KE::begin(expected), KE::end(expected), non_mod_functor);
|
||||
compare_views(expected, view);
|
||||
|
||||
#if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA)
|
||||
const auto mod_lambda = KOKKOS_LAMBDA(value_t & i) { ++i; };
|
||||
|
||||
// pass view, lambda takes non-const ref
|
||||
@ -79,7 +78,6 @@ void test_for_each(const ViewType view) {
|
||||
KE::for_each(exespace(), KE::cbegin(view), KE::cend(view), non_mod_lambda);
|
||||
std::for_each(KE::cbegin(expected), KE::cend(expected), non_mod_lambda);
|
||||
compare_views(expected, view);
|
||||
#endif
|
||||
}
|
||||
|
||||
// std::for_each_n is C++17, so we cannot compare results directly
|
||||
|
||||
@ -104,7 +104,7 @@ struct AssignIndexFunctor {
|
||||
|
||||
template <class ValueType>
|
||||
struct IsEvenFunctor {
|
||||
static_assert(std::is_integral<ValueType>::value,
|
||||
static_assert(std::is_integral_v<ValueType>,
|
||||
"IsEvenFunctor uses operator%, so ValueType must be int");
|
||||
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
|
||||
@ -110,7 +110,7 @@ void fill_view(ViewType dest_view, const std::string& name) {
|
||||
}
|
||||
|
||||
else {
|
||||
throw std::runtime_error("invalid choice");
|
||||
FAIL() << "invalid choice";
|
||||
}
|
||||
|
||||
Kokkos::deep_copy(aux_view, v_h);
|
||||
|
||||
@ -92,7 +92,7 @@ void fill_view(ViewType dest_view, const std::string& name) {
|
||||
}
|
||||
|
||||
else {
|
||||
throw std::runtime_error("invalid choice");
|
||||
FAIL() << "invalid choice";
|
||||
}
|
||||
|
||||
Kokkos::deep_copy(aux_view, v_h);
|
||||
@ -122,7 +122,8 @@ bool compute_gold(const std::string& name) {
|
||||
} else if (name == "large-b") {
|
||||
return false;
|
||||
} else {
|
||||
throw std::runtime_error("invalid choice");
|
||||
Kokkos::abort("invalid choice");
|
||||
return false; // unreachable
|
||||
}
|
||||
}
|
||||
|
||||
@ -154,7 +155,7 @@ void run_single_scenario(const InfoType& scenario_info) {
|
||||
resultsB[0] =
|
||||
KE::is_sorted(exespace(), KE::cbegin(view), KE::cend(view), comp);
|
||||
resultsB[1] = KE::is_sorted("label", exespace(), KE::cbegin(view),
|
||||
KE::cend(view), comp);
|
||||
KE::cend(view), comp);
|
||||
resultsB[2] = KE::is_sorted(exespace(), view, comp);
|
||||
resultsB[3] = KE::is_sorted("label", exespace(), view, comp);
|
||||
const auto allB = std::all_of(resultsB.cbegin(), resultsB.cend(),
|
||||
|
||||
@ -92,7 +92,7 @@ void fill_view(ViewType dest_view, const std::string& name) {
|
||||
}
|
||||
|
||||
else {
|
||||
throw std::runtime_error("invalid choice");
|
||||
FAIL() << "invalid choice";
|
||||
}
|
||||
|
||||
Kokkos::deep_copy(aux_view, v_h);
|
||||
@ -123,7 +123,8 @@ auto compute_gold(ViewType view, const std::string& name) {
|
||||
} else if (name == "large-b") {
|
||||
return KE::begin(view) + 156;
|
||||
} else {
|
||||
throw std::runtime_error("invalid choice");
|
||||
Kokkos::abort("invalid choice");
|
||||
return KE::end(view); // unreachable
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -86,7 +86,7 @@ void run_single_scenario(ViewType view1, ViewType view2,
|
||||
v2_h(ext2 / 2) = -5;
|
||||
}
|
||||
} else {
|
||||
throw std::runtime_error("Kokkos: stdalgo: test: mismatch: Invalid string");
|
||||
FAIL() << "Kokkos: stdalgo: test: mismatch: Invalid string";
|
||||
}
|
||||
|
||||
Kokkos::deep_copy(aux_view1, v1_h);
|
||||
|
||||
@ -48,7 +48,7 @@ struct MyMovableType {
|
||||
TEST(std_algorithms_mod_ops_test, move) {
|
||||
MyMovableType a;
|
||||
using move_t = decltype(std::move(a));
|
||||
static_assert(std::is_rvalue_reference<move_t>::value);
|
||||
static_assert(std::is_rvalue_reference_v<move_t>);
|
||||
|
||||
// move constr
|
||||
MyMovableType b(std::move(a));
|
||||
|
||||
@ -23,7 +23,7 @@ namespace stdalgos {
|
||||
|
||||
struct std_algorithms_mod_seq_ops_test : std_algorithms_test {
|
||||
public:
|
||||
virtual void SetUp() {
|
||||
void SetUp() override {
|
||||
Kokkos::parallel_for(m_static_view.extent(0),
|
||||
AssignIndexFunctor<static_view_t>(m_static_view));
|
||||
}
|
||||
|
||||
@ -56,7 +56,7 @@ void run_single_scenario(const InfoType& scenario_info, int apiId) {
|
||||
ASSERT_EQ(dist, 5);
|
||||
} else if (apiId == 1) {
|
||||
auto rit = KE::move_backward("mylabel", exespace(), KE::begin(v),
|
||||
KE::end(v), KE::end(v2));
|
||||
KE::end(v), KE::end(v2));
|
||||
const int dist = KE::distance(KE::begin(v2), rit);
|
||||
ASSERT_EQ(dist, 5);
|
||||
} else if (apiId == 2) {
|
||||
|
||||
@ -95,7 +95,7 @@ void fill_view(ViewType dest_view, const std::string& name) {
|
||||
}
|
||||
|
||||
else {
|
||||
throw std::runtime_error("invalid choice");
|
||||
FAIL() << "invalid choice";
|
||||
}
|
||||
|
||||
Kokkos::deep_copy(aux_view, v_h);
|
||||
@ -110,9 +110,9 @@ void verify_data(const std::string& name, ResultType my_result,
|
||||
ViewTypeDestFalse view_dest_false, PredType pred) {
|
||||
using value_type = typename ViewTypeFrom::value_type;
|
||||
static_assert(
|
||||
std::is_same<value_type, typename ViewTypeDestTrue::value_type>::value);
|
||||
std::is_same_v<value_type, typename ViewTypeDestTrue::value_type>);
|
||||
static_assert(
|
||||
std::is_same<value_type, typename ViewTypeDestFalse::value_type>::value);
|
||||
std::is_same_v<value_type, typename ViewTypeDestFalse::value_type>);
|
||||
|
||||
const std::size_t ext = view_from.extent(0);
|
||||
|
||||
|
||||
@ -99,7 +99,7 @@ void fill_view(ViewType dest_view, const std::string& name) {
|
||||
}
|
||||
|
||||
else {
|
||||
throw std::runtime_error("invalid choice");
|
||||
FAIL() << "invalid choice";
|
||||
}
|
||||
|
||||
Kokkos::deep_copy(aux_view, v_h);
|
||||
@ -147,7 +147,7 @@ void run_single_scenario(const InfoType& scenario_info) {
|
||||
// make host copy BEFORE running algo
|
||||
auto data_h = create_host_space_copy(view);
|
||||
auto rit = KE::remove(exespace(), KE::begin(view), KE::end(view),
|
||||
(ValueType)match_value);
|
||||
(ValueType)match_value);
|
||||
verify_data(data_h, view, rit);
|
||||
}
|
||||
|
||||
|
||||
@ -110,7 +110,7 @@ void fill_view(ViewType dest_view, const std::string& name) {
|
||||
}
|
||||
|
||||
else {
|
||||
throw std::runtime_error("invalid choice");
|
||||
FAIL() << "invalid choice";
|
||||
}
|
||||
|
||||
Kokkos::deep_copy(aux_view, v_h);
|
||||
|
||||
@ -93,7 +93,7 @@ void fill_view(ViewType dest_view, const std::string& name) {
|
||||
}
|
||||
|
||||
else {
|
||||
throw std::runtime_error("invalid choice");
|
||||
FAIL() << "invalid choice";
|
||||
}
|
||||
|
||||
Kokkos::deep_copy(aux_view, v_h);
|
||||
|
||||
@ -93,7 +93,7 @@ void fill_view(ViewType dest_view, const std::string& name) {
|
||||
}
|
||||
|
||||
else {
|
||||
throw std::runtime_error("invalid choice");
|
||||
FAIL() << "invalid choice";
|
||||
}
|
||||
|
||||
Kokkos::deep_copy(aux_view, v_h);
|
||||
@ -144,7 +144,7 @@ void run_single_scenario(const InfoType& scenario_info) {
|
||||
// make host copy BEFORE running algo
|
||||
auto data_h = create_host_space_copy(view);
|
||||
auto rit = KE::remove_if(exespace(), KE::begin(view), KE::end(view),
|
||||
remove_if_even);
|
||||
remove_if_even);
|
||||
verify_data(data_h, view, rit, remove_if_even);
|
||||
}
|
||||
|
||||
@ -154,7 +154,7 @@ void run_single_scenario(const InfoType& scenario_info) {
|
||||
// make host copy BEFORE running algo
|
||||
auto data_h = create_host_space_copy(view);
|
||||
auto rit = KE::remove_if("label", exespace(), KE::begin(view),
|
||||
KE::end(view), remove_if_even);
|
||||
KE::end(view), remove_if_even);
|
||||
verify_data(data_h, view, rit, remove_if_even);
|
||||
}
|
||||
|
||||
|
||||
@ -84,7 +84,7 @@ void fill_view(ViewType dest_view, const std::string& name) {
|
||||
}
|
||||
|
||||
else {
|
||||
throw std::runtime_error("invalid choice");
|
||||
FAIL() << "invalid choice";
|
||||
}
|
||||
|
||||
Kokkos::deep_copy(aux_view, v_h);
|
||||
@ -153,7 +153,7 @@ void verify_data(const std::string& name, ViewType1 test_view,
|
||||
}
|
||||
|
||||
else {
|
||||
throw std::runtime_error("invalid choice");
|
||||
FAIL() << "invalid choice";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -84,7 +84,7 @@ void fill_view(ViewType dest_view, const std::string& name) {
|
||||
}
|
||||
|
||||
else {
|
||||
throw std::runtime_error("invalid choice");
|
||||
FAIL() << "invalid choice";
|
||||
}
|
||||
|
||||
Kokkos::deep_copy(aux_view, v_h);
|
||||
@ -175,7 +175,7 @@ void verify_data(const std::string& name, ViewTypeFrom view_from,
|
||||
}
|
||||
|
||||
else {
|
||||
throw std::runtime_error("invalid choice");
|
||||
FAIL() << "invalid choice";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -84,7 +84,7 @@ void fill_view(ViewType dest_view, const std::string& name) {
|
||||
}
|
||||
|
||||
else {
|
||||
throw std::runtime_error("invalid choice");
|
||||
FAIL() << "invalid choice";
|
||||
}
|
||||
|
||||
Kokkos::deep_copy(aux_view, v_h);
|
||||
@ -175,7 +175,7 @@ void verify_data(const std::string& name, ViewTypeFrom view_from,
|
||||
}
|
||||
|
||||
else {
|
||||
throw std::runtime_error("invalid choice");
|
||||
FAIL() << "invalid choice";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -96,7 +96,7 @@ void fill_view(ViewType dest_view, const std::string& name) {
|
||||
}
|
||||
|
||||
else {
|
||||
throw std::runtime_error("invalid choice");
|
||||
FAIL() << "invalid choice";
|
||||
}
|
||||
|
||||
Kokkos::deep_copy(aux_view, v_h);
|
||||
|
||||
@ -62,7 +62,7 @@ void fill_view(ViewType dest_view, const std::string& name) {
|
||||
}
|
||||
|
||||
else {
|
||||
throw std::runtime_error("invalid choice");
|
||||
FAIL() << "invalid choice";
|
||||
}
|
||||
|
||||
Kokkos::deep_copy(aux_view, v_h);
|
||||
|
||||
@ -117,7 +117,7 @@ void fill_view(ViewType dest_view, const std::string& name) {
|
||||
}
|
||||
|
||||
else {
|
||||
throw std::runtime_error("invalid choice");
|
||||
FAIL() << "invalid choice";
|
||||
}
|
||||
|
||||
Kokkos::deep_copy(aux_view, v_h);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user