Update Kokkos library in LAMMPS to v3.3.0
This commit is contained in:
@ -1,3 +1,9 @@
|
||||
# No need for policy push/pop. CMake also manages a new entry for scripts
|
||||
# loaded by include() and find_package() commands except when invoked with
|
||||
# the NO_POLICY_SCOPE option
|
||||
# CMP0057 + NEW -> IN_LIST operator in IF(...)
|
||||
CMAKE_POLICY(SET CMP0057 NEW)
|
||||
|
||||
# Compute paths
|
||||
@PACKAGE_INIT@
|
||||
|
||||
@ -12,3 +18,18 @@ GET_FILENAME_COMPONENT(Kokkos_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
|
||||
INCLUDE("${Kokkos_CMAKE_DIR}/KokkosTargets.cmake")
|
||||
INCLUDE("${Kokkos_CMAKE_DIR}/KokkosConfigCommon.cmake")
|
||||
UNSET(Kokkos_CMAKE_DIR)
|
||||
|
||||
# if CUDA was enabled and separable compilation was specified, e.g.
|
||||
# find_package(Kokkos COMPONENTS separable_compilation)
|
||||
# then we set the RULE_LAUNCH_COMPILE and RULE_LAUNCH_LINK
|
||||
IF(@Kokkos_ENABLE_CUDA@ AND NOT "separable_compilation" IN_LIST Kokkos_FIND_COMPONENTS)
|
||||
# run test to see if CMAKE_CXX_COMPILER=nvcc_wrapper
|
||||
kokkos_compiler_is_nvcc(IS_NVCC ${CMAKE_CXX_COMPILER})
|
||||
# if not nvcc_wrapper, use RULE_LAUNCH_COMPILE and RULE_LAUNCH_LINK
|
||||
IF(NOT IS_NVCC AND NOT CMAKE_CXX_COMPILER_ID STREQUAL Clang AND
|
||||
(NOT DEFINED Kokkos_LAUNCH_COMPILER OR Kokkos_LAUNCH_COMPILER))
|
||||
MESSAGE(STATUS "kokkos_launch_compiler is enabled globally. C++ compiler commands with -DKOKKOS_DEPENDENCE will be redirected to nvcc_wrapper")
|
||||
kokkos_compilation(GLOBAL)
|
||||
ENDIF()
|
||||
UNSET(IS_NVCC) # be mindful of the environment, pollution is bad
|
||||
ENDIF()
|
||||
|
||||
@ -89,3 +89,73 @@ function(kokkos_check)
|
||||
set(${KOKKOS_CHECK_RETURN_VALUE} ${KOKKOS_CHECK_SUCCESS} PARENT_SCOPE)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# this function is provided to easily select which files use nvcc_wrapper:
|
||||
#
|
||||
# GLOBAL --> all files
|
||||
# TARGET --> all files in a target
|
||||
# SOURCE --> specific source files
|
||||
# DIRECTORY --> all files in directory
|
||||
# PROJECT --> all files/targets in a project/subproject
|
||||
#
|
||||
FUNCTION(kokkos_compilation)
|
||||
CMAKE_PARSE_ARGUMENTS(COMP "GLOBAL;PROJECT" "" "DIRECTORY;TARGET;SOURCE" ${ARGN})
|
||||
|
||||
# search relative first and then absolute
|
||||
SET(_HINTS "${CMAKE_CURRENT_LIST_DIR}/../.." "@CMAKE_INSTALL_PREFIX@")
|
||||
|
||||
# find kokkos_launch_compiler
|
||||
FIND_PROGRAM(Kokkos_COMPILE_LAUNCHER
|
||||
NAMES kokkos_launch_compiler
|
||||
HINTS ${_HINTS}
|
||||
PATHS ${_HINTS}
|
||||
PATH_SUFFIXES bin)
|
||||
|
||||
IF(NOT Kokkos_COMPILE_LAUNCHER)
|
||||
MESSAGE(FATAL_ERROR "Kokkos could not find 'kokkos_launch_compiler'. Please set '-DKokkos_COMPILE_LAUNCHER=/path/to/launcher'")
|
||||
ENDIF()
|
||||
|
||||
IF(COMP_GLOBAL)
|
||||
# if global, don't bother setting others
|
||||
SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${Kokkos_COMPILE_LAUNCHER} ${CMAKE_CXX_COMPILER}")
|
||||
SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_LINK "${Kokkos_COMPILE_LAUNCHER} ${CMAKE_CXX_COMPILER}")
|
||||
ELSE()
|
||||
FOREACH(_TYPE PROJECT DIRECTORY TARGET SOURCE)
|
||||
# make project/subproject scoping easy, e.g. KokkosCompilation(PROJECT) after project(...)
|
||||
IF("${_TYPE}" STREQUAL "PROJECT" AND COMP_${_TYPE})
|
||||
LIST(APPEND COMP_DIRECTORY ${PROJECT_SOURCE_DIR})
|
||||
UNSET(COMP_${_TYPE})
|
||||
ENDIF()
|
||||
# set the properties if defined
|
||||
IF(COMP_${_TYPE})
|
||||
# MESSAGE(STATUS "Using nvcc_wrapper :: ${_TYPE} :: ${COMP_${_TYPE}}")
|
||||
SET_PROPERTY(${_TYPE} ${COMP_${_TYPE}} PROPERTY RULE_LAUNCH_COMPILE "${Kokkos_COMPILE_LAUNCHER} ${CMAKE_CXX_COMPILER}")
|
||||
SET_PROPERTY(${_TYPE} ${COMP_${_TYPE}} PROPERTY RULE_LAUNCH_LINK "${Kokkos_COMPILE_LAUNCHER} ${CMAKE_CXX_COMPILER}")
|
||||
ENDIF()
|
||||
ENDFOREACH()
|
||||
ENDIF()
|
||||
ENDFUNCTION()
|
||||
|
||||
# A test to check whether a downstream project set the C++ compiler to NVCC or not
|
||||
# this is called only when Kokkos was installed with Kokkos_ENABLE_CUDA=ON
|
||||
FUNCTION(kokkos_compiler_is_nvcc VAR COMPILER)
|
||||
# Check if the compiler is nvcc (which really means nvcc_wrapper).
|
||||
EXECUTE_PROCESS(COMMAND ${COMPILER} ${ARGN} --version
|
||||
OUTPUT_VARIABLE INTERNAL_COMPILER_VERSION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
RESULT_VARIABLE RET)
|
||||
# something went wrong
|
||||
IF(RET GREATER 0)
|
||||
SET(${VAR} false PARENT_SCOPE)
|
||||
ELSE()
|
||||
STRING(REPLACE "\n" " - " INTERNAL_COMPILER_VERSION_ONE_LINE ${INTERNAL_COMPILER_VERSION} )
|
||||
STRING(FIND ${INTERNAL_COMPILER_VERSION_ONE_LINE} "nvcc" INTERNAL_COMPILER_VERSION_CONTAINS_NVCC)
|
||||
STRING(REGEX REPLACE "^ +" "" INTERNAL_HAVE_COMPILER_NVCC "${INTERNAL_HAVE_COMPILER_NVCC}")
|
||||
IF(${INTERNAL_COMPILER_VERSION_CONTAINS_NVCC} GREATER -1)
|
||||
SET(${VAR} true PARENT_SCOPE)
|
||||
ELSE()
|
||||
SET(${VAR} false PARENT_SCOPE)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
ENDFUNCTION()
|
||||
|
||||
|
||||
49
lib/kokkos/cmake/KokkosCore_Config_HeaderSet.in
Normal file
49
lib/kokkos/cmake/KokkosCore_Config_HeaderSet.in
Normal file
@ -0,0 +1,49 @@
|
||||
/*
|
||||
//@HEADER
|
||||
// ************************************************************************
|
||||
//
|
||||
// Kokkos v. 3.0
|
||||
// Copyright (2020) National Technology & Engineering
|
||||
// Solutions of Sandia, LLC (NTESS).
|
||||
//
|
||||
// Under the terms of Contract DE-NA0003525 with NTESS,
|
||||
// the U.S. Government retains certain rights in this software.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// 1. Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
//
|
||||
// 2. Redistributions in binary form must reproduce the above copyright
|
||||
// notice, this list of conditions and the following disclaimer in the
|
||||
// documentation and/or other materials provided with the distribution.
|
||||
//
|
||||
// 3. Neither the name of the Corporation nor the names of the
|
||||
// contributors may be used to endorse or promote products derived from
|
||||
// this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY
|
||||
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE
|
||||
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
// Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
//
|
||||
// ************************************************************************
|
||||
//@HEADER
|
||||
*/
|
||||
#ifndef @HEADER_GUARD_TAG@
|
||||
#define @HEADER_GUARD_TAG@
|
||||
|
||||
@INCLUDE_NEXT_FILE@
|
||||
|
||||
#endif
|
||||
@ -21,6 +21,7 @@
|
||||
#cmakedefine KOKKOS_ENABLE_HPX
|
||||
#cmakedefine KOKKOS_ENABLE_MEMKIND
|
||||
#cmakedefine KOKKOS_ENABLE_LIBRT
|
||||
#cmakedefine KOKKOS_ENABLE_SYCL
|
||||
|
||||
#ifndef __CUDA_ARCH__
|
||||
#cmakedefine KOKKOS_ENABLE_TM
|
||||
@ -31,7 +32,6 @@
|
||||
#endif
|
||||
|
||||
/* General Settings */
|
||||
#cmakedefine KOKKOS_ENABLE_CXX11
|
||||
#cmakedefine KOKKOS_ENABLE_CXX14
|
||||
#cmakedefine KOKKOS_ENABLE_CXX17
|
||||
#cmakedefine KOKKOS_ENABLE_CXX20
|
||||
@ -58,7 +58,7 @@
|
||||
/* TPL Settings */
|
||||
#cmakedefine KOKKOS_ENABLE_HWLOC
|
||||
#cmakedefine KOKKOS_USE_LIBRT
|
||||
#cmakedefine KOKKOS_ENABLE_HWBSPACE
|
||||
#cmakedefine KOKKOS_ENABLE_HBWSPACE
|
||||
#cmakedefine KOKKOS_ENABLE_LIBDL
|
||||
#cmakedefine KOKKOS_IMPL_CUDA_CLANG_WORKAROUND
|
||||
|
||||
|
||||
@ -73,20 +73,20 @@ Compiler features are more fine-grained and require conflicting requests to be r
|
||||
Suppose I have
|
||||
````
|
||||
add_library(A a.cpp)
|
||||
target_compile_features(A PUBLIC cxx_std_11)
|
||||
target_compile_features(A PUBLIC cxx_std_14)
|
||||
````
|
||||
then another target
|
||||
````
|
||||
add_library(B b.cpp)
|
||||
target_compile_features(B PUBLIC cxx_std_14)
|
||||
target_compile_features(B PUBLIC cxx_std_17)
|
||||
target_link_libraries(A B)
|
||||
````
|
||||
I have requested two different features.
|
||||
CMake understands the requests and knows that `cxx_std_11` is a subset of `cxx_std_14`.
|
||||
CMake then picks C++14 for library `B`.
|
||||
CMake understands the requests and knows that `cxx_std_14` is a subset of `cxx_std_17`.
|
||||
CMake then picks C++17 for library `B`.
|
||||
CMake would not have been able to do feature resolution if we had directly done:
|
||||
````
|
||||
target_compile_options(A PUBLIC -std=c++11)
|
||||
target_compile_options(A PUBLIC -std=c++14)
|
||||
````
|
||||
|
||||
### Adding Kokkos Options
|
||||
|
||||
@ -1,14 +1,16 @@
|
||||
# @HEADER
|
||||
# ************************************************************************
|
||||
#
|
||||
# Trilinos: An Object-Oriented Solver Framework
|
||||
# Copyright (2001) Sandia Corporation
|
||||
# Kokkos v. 3.0
|
||||
# Copyright (2020) National Technology & Engineering
|
||||
# Solutions of Sandia, LLC (NTESS).
|
||||
#
|
||||
# Under the terms of Contract DE-NA0003525 with NTESS,
|
||||
# the U.S. Government retains certain rights in this software.
|
||||
#
|
||||
# Copyright (2001) Sandia Corporation. Under the terms of Contract
|
||||
# DE-AC04-94AL85000, there is a non-exclusive license for use of this
|
||||
# work by or on behalf of the U.S. Government. Export of this program
|
||||
# may require a license from the United States Government.
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
@ -21,10 +23,10 @@
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
|
||||
# THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY
|
||||
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE
|
||||
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
@ -33,22 +35,7 @@
|
||||
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
# NOTICE: The United States Government is granted for itself and others
|
||||
# acting on its behalf a paid-up, nonexclusive, irrevocable worldwide
|
||||
# license in this data to reproduce, prepare derivative works, and
|
||||
# perform publicly and display publicly. Beginning five (5) years from
|
||||
# July 25, 2001, the United States Government is granted for itself and
|
||||
# others acting on its behalf a paid-up, nonexclusive, irrevocable
|
||||
# worldwide license in this data to reproduce, prepare derivative works,
|
||||
# distribute copies to the public, perform publicly and display
|
||||
# publicly, and to permit others to do so.
|
||||
#
|
||||
# NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT
|
||||
# OF ENERGY, NOR SANDIA CORPORATION, NOR ANY OF THEIR EMPLOYEES, MAKES
|
||||
# ANY WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY LEGAL LIABILITY OR
|
||||
# RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR USEFULNESS OF ANY
|
||||
# INFORMATION, APPARATUS, PRODUCT, OR PROCESS DISCLOSED, OR REPRESENTS
|
||||
# THAT ITS USE WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS.
|
||||
# Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
#
|
||||
# ************************************************************************
|
||||
# @HEADER
|
||||
|
||||
@ -1,14 +1,16 @@
|
||||
# @HEADER
|
||||
# ************************************************************************
|
||||
#
|
||||
# Trilinos: An Object-Oriented Solver Framework
|
||||
# Copyright (2001) Sandia Corporation
|
||||
# Kokkos v. 3.0
|
||||
# Copyright (2020) National Technology & Engineering
|
||||
# Solutions of Sandia, LLC (NTESS).
|
||||
#
|
||||
# Under the terms of Contract DE-NA0003525 with NTESS,
|
||||
# the U.S. Government retains certain rights in this software.
|
||||
#
|
||||
# Copyright (2001) Sandia Corporation. Under the terms of Contract
|
||||
# DE-AC04-94AL85000, there is a non-exclusive license for use of this
|
||||
# work by or on behalf of the U.S. Government. Export of this program
|
||||
# may require a license from the United States Government.
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
@ -21,10 +23,10 @@
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
|
||||
# THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY
|
||||
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE
|
||||
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
@ -33,22 +35,7 @@
|
||||
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
# NOTICE: The United States Government is granted for itself and others
|
||||
# acting on its behalf a paid-up, nonexclusive, irrevocable worldwide
|
||||
# license in this data to reproduce, prepare derivative works, and
|
||||
# perform publicly and display publicly. Beginning five (5) years from
|
||||
# July 25, 2001, the United States Government is granted for itself and
|
||||
# others acting on its behalf a paid-up, nonexclusive, irrevocable
|
||||
# worldwide license in this data to reproduce, prepare derivative works,
|
||||
# distribute copies to the public, perform publicly and display
|
||||
# publicly, and to permit others to do so.
|
||||
#
|
||||
# NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT
|
||||
# OF ENERGY, NOR SANDIA CORPORATION, NOR ANY OF THEIR EMPLOYEES, MAKES
|
||||
# ANY WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY LEGAL LIABILITY OR
|
||||
# RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR USEFULNESS OF ANY
|
||||
# INFORMATION, APPARATUS, PRODUCT, OR PROCESS DISCLOSED, OR REPRESENTS
|
||||
# THAT ITS USE WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS.
|
||||
# Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
#
|
||||
# ************************************************************************
|
||||
# @HEADER
|
||||
|
||||
@ -1,14 +1,16 @@
|
||||
# @HEADER
|
||||
# ************************************************************************
|
||||
#
|
||||
# Trilinos: An Object-Oriented Solver Framework
|
||||
# Copyright (2001) Sandia Corporation
|
||||
# Kokkos v. 3.0
|
||||
# Copyright (2020) National Technology & Engineering
|
||||
# Solutions of Sandia, LLC (NTESS).
|
||||
#
|
||||
# Under the terms of Contract DE-NA0003525 with NTESS,
|
||||
# the U.S. Government retains certain rights in this software.
|
||||
#
|
||||
# Copyright (2001) Sandia Corporation. Under the terms of Contract
|
||||
# DE-AC04-94AL85000, there is a non-exclusive license for use of this
|
||||
# work by or on behalf of the U.S. Government. Export of this program
|
||||
# may require a license from the United States Government.
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
@ -21,10 +23,10 @@
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
|
||||
# THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY
|
||||
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE
|
||||
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
@ -33,22 +35,7 @@
|
||||
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
# NOTICE: The United States Government is granted for itself and others
|
||||
# acting on its behalf a paid-up, nonexclusive, irrevocable worldwide
|
||||
# license in this data to reproduce, prepare derivative works, and
|
||||
# perform publicly and display publicly. Beginning five (5) years from
|
||||
# July 25, 2001, the United States Government is granted for itself and
|
||||
# others acting on its behalf a paid-up, nonexclusive, irrevocable
|
||||
# worldwide license in this data to reproduce, prepare derivative works,
|
||||
# distribute copies to the public, perform publicly and display
|
||||
# publicly, and to permit others to do so.
|
||||
#
|
||||
# NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT
|
||||
# OF ENERGY, NOR SANDIA CORPORATION, NOR ANY OF THEIR EMPLOYEES, MAKES
|
||||
# ANY WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY LEGAL LIABILITY OR
|
||||
# RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR USEFULNESS OF ANY
|
||||
# INFORMATION, APPARATUS, PRODUCT, OR PROCESS DISCLOSED, OR REPRESENTS
|
||||
# THAT ITS USE WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS.
|
||||
# Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
#
|
||||
# ************************************************************************
|
||||
# @HEADER
|
||||
|
||||
@ -1,14 +1,16 @@
|
||||
# @HEADER
|
||||
# ************************************************************************
|
||||
#
|
||||
# Trilinos: An Object-Oriented Solver Framework
|
||||
# Copyright (2001) Sandia Corporation
|
||||
# Kokkos v. 3.0
|
||||
# Copyright (2020) National Technology & Engineering
|
||||
# Solutions of Sandia, LLC (NTESS).
|
||||
#
|
||||
# Under the terms of Contract DE-NA0003525 with NTESS,
|
||||
# the U.S. Government retains certain rights in this software.
|
||||
#
|
||||
# Copyright (2001) Sandia Corporation. Under the terms of Contract
|
||||
# DE-AC04-94AL85000, there is a non-exclusive license for use of this
|
||||
# work by or on behalf of the U.S. Government. Export of this program
|
||||
# may require a license from the United States Government.
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
@ -21,10 +23,10 @@
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
|
||||
# THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY
|
||||
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE
|
||||
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
@ -33,22 +35,7 @@
|
||||
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
# NOTICE: The United States Government is granted for itself and others
|
||||
# acting on its behalf a paid-up, nonexclusive, irrevocable worldwide
|
||||
# license in this data to reproduce, prepare derivative works, and
|
||||
# perform publicly and display publicly. Beginning five (5) years from
|
||||
# July 25, 2001, the United States Government is granted for itself and
|
||||
# others acting on its behalf a paid-up, nonexclusive, irrevocable
|
||||
# worldwide license in this data to reproduce, prepare derivative works,
|
||||
# distribute copies to the public, perform publicly and display
|
||||
# publicly, and to permit others to do so.
|
||||
#
|
||||
# NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT
|
||||
# OF ENERGY, NOR SANDIA CORPORATION, NOR ANY OF THEIR EMPLOYEES, MAKES
|
||||
# ANY WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY LEGAL LIABILITY OR
|
||||
# RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR USEFULNESS OF ANY
|
||||
# INFORMATION, APPARATUS, PRODUCT, OR PROCESS DISCLOSED, OR REPRESENTS
|
||||
# THAT ITS USE WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS.
|
||||
# Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
#
|
||||
# ************************************************************************
|
||||
# @HEADER
|
||||
|
||||
@ -38,12 +38,6 @@ MACRO(GLOBAL_SET VARNAME)
|
||||
SET(${VARNAME} ${ARGN} CACHE INTERNAL "" FORCE)
|
||||
ENDMACRO()
|
||||
|
||||
FUNCTION(VERIFY_EMPTY CONTEXT)
|
||||
if(${ARGN})
|
||||
MESSAGE(FATAL_ERROR "Kokkos does not support all of Tribits. Unhandled arguments in ${CONTEXT}:\n${ARGN}")
|
||||
endif()
|
||||
ENDFUNCTION()
|
||||
|
||||
MACRO(PREPEND_GLOBAL_SET VARNAME)
|
||||
ASSERT_DEFINED(${VARNAME})
|
||||
GLOBAL_SET(${VARNAME} ${ARGN} ${${VARNAME}})
|
||||
@ -89,7 +83,7 @@ FUNCTION(KOKKOS_ADD_TEST)
|
||||
CMAKE_PARSE_ARGUMENTS(TEST
|
||||
""
|
||||
"EXE;NAME;TOOL"
|
||||
""
|
||||
"ARGS"
|
||||
${ARGN})
|
||||
IF(TEST_EXE)
|
||||
SET(EXE_ROOT ${TEST_EXE})
|
||||
@ -102,6 +96,7 @@ FUNCTION(KOKKOS_ADD_TEST)
|
||||
NAME ${TEST_NAME}
|
||||
COMM serial mpi
|
||||
NUM_MPI_PROCS 1
|
||||
ARGS ${TEST_ARGS}
|
||||
${TEST_UNPARSED_ARGUMENTS}
|
||||
ADDED_TESTS_NAMES_OUT ALL_TESTS_ADDED
|
||||
)
|
||||
@ -110,18 +105,25 @@ FUNCTION(KOKKOS_ADD_TEST)
|
||||
SET(TEST_NAME ${PACKAGE_NAME}_${TEST_NAME})
|
||||
SET(EXE ${PACKAGE_NAME}_${EXE_ROOT})
|
||||
|
||||
if(TEST_TOOL)
|
||||
add_dependencies(${EXE} ${TEST_TOOL}) #make sure the exe has to build the tool
|
||||
foreach(TEST_ADDED ${ALL_TESTS_ADDED})
|
||||
set_property(TEST ${TEST_ADDED} APPEND PROPERTY ENVIRONMENT "KOKKOS_PROFILE_LIBRARY=$<TARGET_FILE:${TEST_TOOL}>")
|
||||
endforeach()
|
||||
# The function TRIBITS_ADD_TEST() has a CATEGORIES argument that defaults
|
||||
# to BASIC. If a project elects to only enable tests marked as PERFORMANCE,
|
||||
# the test won't actually be added and attempting to set a property on it below
|
||||
# will yield an error.
|
||||
if(TARGET ${EXE})
|
||||
if(TEST_TOOL)
|
||||
add_dependencies(${EXE} ${TEST_TOOL}) #make sure the exe has to build the tool
|
||||
foreach(TEST_ADDED ${ALL_TESTS_ADDED})
|
||||
set_property(TEST ${TEST_ADDED} APPEND PROPERTY ENVIRONMENT "KOKKOS_PROFILE_LIBRARY=$<TARGET_FILE:${TEST_TOOL}>")
|
||||
endforeach()
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
CMAKE_PARSE_ARGUMENTS(TEST
|
||||
"WILL_FAIL"
|
||||
"FAIL_REGULAR_EXPRESSION;PASS_REGULAR_EXPRESSION;EXE;NAME;TOOL"
|
||||
"CATEGORIES;CMD_ARGS"
|
||||
"CATEGORIES;ARGS"
|
||||
${ARGN})
|
||||
SET(TESTS_ADDED)
|
||||
# To match Tribits, we should always be receiving
|
||||
# the root names of exes/libs
|
||||
IF(TEST_EXE)
|
||||
@ -133,24 +135,46 @@ FUNCTION(KOKKOS_ADD_TEST)
|
||||
# These should be the full target name
|
||||
SET(TEST_NAME ${PACKAGE_NAME}_${TEST_NAME})
|
||||
SET(EXE ${PACKAGE_NAME}_${EXE_ROOT})
|
||||
IF(WIN32)
|
||||
ADD_TEST(NAME ${TEST_NAME} WORKING_DIRECTORY ${LIBRARY_OUTPUT_PATH} COMMAND ${EXE}${CMAKE_EXECUTABLE_SUFFIX} ${TEST_CMD_ARGS})
|
||||
IF (TEST_ARGS)
|
||||
SET(TEST_NUMBER 0)
|
||||
FOREACH (ARG_STR ${TEST_ARGS})
|
||||
# This is passed as a single string blob to match TriBITS behavior
|
||||
# We need this to be turned into a list
|
||||
STRING(REPLACE " " ";" ARG_STR_LIST ${ARG_STR})
|
||||
IF(WIN32)
|
||||
ADD_TEST(NAME ${TEST_NAME}${TEST_NUMBER} WORKING_DIRECTORY ${LIBRARY_OUTPUT_PATH}
|
||||
COMMAND ${EXE}${CMAKE_EXECUTABLE_SUFFIX} ${ARG_STR_LIST})
|
||||
ELSE()
|
||||
ADD_TEST(NAME ${TEST_NAME}${TEST_NUMBER} COMMAND ${EXE} ${ARG_STR_LIST})
|
||||
ENDIF()
|
||||
LIST(APPEND TESTS_ADDED "${TEST_NAME}${TEST_NUMBER}")
|
||||
MATH(EXPR TEST_NUMBER "${TEST_NUMBER} + 1")
|
||||
ENDFOREACH()
|
||||
ELSE()
|
||||
ADD_TEST(NAME ${TEST_NAME} COMMAND ${EXE} ${TEST_CMD_ARGS})
|
||||
IF(WIN32)
|
||||
ADD_TEST(NAME ${TEST_NAME} WORKING_DIRECTORY ${LIBRARY_OUTPUT_PATH}
|
||||
COMMAND ${EXE}${CMAKE_EXECUTABLE_SUFFIX})
|
||||
ELSE()
|
||||
ADD_TEST(NAME ${TEST_NAME} COMMAND ${EXE})
|
||||
ENDIF()
|
||||
LIST(APPEND TESTS_ADDED "${TEST_NAME}")
|
||||
ENDIF()
|
||||
IF(TEST_WILL_FAIL)
|
||||
SET_TESTS_PROPERTIES(${TEST_NAME} PROPERTIES WILL_FAIL ${TEST_WILL_FAIL})
|
||||
ENDIF()
|
||||
IF(TEST_FAIL_REGULAR_EXPRESSION)
|
||||
SET_TESTS_PROPERTIES(${TEST_NAME} PROPERTIES FAIL_REGULAR_EXPRESSION ${TEST_FAIL_REGULAR_EXPRESSION})
|
||||
ENDIF()
|
||||
IF(TEST_PASS_REGULAR_EXPRESSION)
|
||||
SET_TESTS_PROPERTIES(${TEST_NAME} PROPERTIES PASS_REGULAR_EXPRESSION ${TEST_PASS_REGULAR_EXPRESSION})
|
||||
ENDIF()
|
||||
if(TEST_TOOL)
|
||||
add_dependencies(${EXE} ${TEST_TOOL}) #make sure the exe has to build the tool
|
||||
set_property(TEST ${TEST_NAME} APPEND_STRING PROPERTY ENVIRONMENT "KOKKOS_PROFILE_LIBRARY=$<TARGET_FILE:${TEST_TOOL}>")
|
||||
endif()
|
||||
|
||||
FOREACH(TEST_NAME ${TESTS_ADDED})
|
||||
IF(TEST_WILL_FAIL)
|
||||
SET_TESTS_PROPERTIES(${TEST_NAME} PROPERTIES WILL_FAIL ${TEST_WILL_FAIL})
|
||||
ENDIF()
|
||||
IF(TEST_FAIL_REGULAR_EXPRESSION)
|
||||
SET_TESTS_PROPERTIES(${TEST_NAME} PROPERTIES FAIL_REGULAR_EXPRESSION ${TEST_FAIL_REGULAR_EXPRESSION})
|
||||
ENDIF()
|
||||
IF(TEST_PASS_REGULAR_EXPRESSION)
|
||||
SET_TESTS_PROPERTIES(${TEST_NAME} PROPERTIES PASS_REGULAR_EXPRESSION ${TEST_PASS_REGULAR_EXPRESSION})
|
||||
ENDIF()
|
||||
if(TEST_TOOL)
|
||||
add_dependencies(${EXE} ${TEST_TOOL}) #make sure the exe has to build the tool
|
||||
set_property(TEST ${TEST_NAME} APPEND_STRING PROPERTY ENVIRONMENT "KOKKOS_PROFILE_LIBRARY=$<TARGET_FILE:${TEST_TOOL}>")
|
||||
endif()
|
||||
ENDFOREACH()
|
||||
VERIFY_EMPTY(KOKKOS_ADD_TEST ${TEST_UNPARSED_ARGUMENTS})
|
||||
endif()
|
||||
ENDFUNCTION()
|
||||
|
||||
@ -3,7 +3,7 @@ FUNCTION(kokkos_set_intel_flags full_standard int_standard)
|
||||
STRING(TOLOWER ${full_standard} FULL_LC_STANDARD)
|
||||
STRING(TOLOWER ${int_standard} INT_LC_STANDARD)
|
||||
# The following three blocks of code were copied from
|
||||
# /Modules/Compiler/Intel-CXX.cmake from CMake 3.7.2 and then modified.
|
||||
# /Modules/Compiler/Intel-CXX.cmake from CMake 3.18.1 and then modified.
|
||||
IF(CMAKE_CXX_SIMULATE_ID STREQUAL MSVC)
|
||||
SET(_std -Qstd)
|
||||
SET(_ext c++)
|
||||
@ -11,20 +11,8 @@ FUNCTION(kokkos_set_intel_flags full_standard int_standard)
|
||||
SET(_std -std)
|
||||
SET(_ext gnu++)
|
||||
ENDIF()
|
||||
|
||||
IF(NOT KOKKOS_CXX_STANDARD STREQUAL 11 AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0.2)
|
||||
#There is no gnu++14 value supported; figure out what to do.
|
||||
SET(KOKKOS_CXX_STANDARD_FLAG "${_std}=c++${FULL_LC_STANDARD}" PARENT_SCOPE)
|
||||
SET(KOKKOS_CXX_INTERMEDIATE_STANDARD_FLAG "${_std}=c++${INT_LC_STANDARD}" PARENT_SCOPE)
|
||||
ELSEIF(KOKKOS_CXX_STANDARD STREQUAL 11 AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13.0)
|
||||
IF (CMAKE_CXX_EXTENSIONS)
|
||||
SET(KOKKOS_CXX_STANDARD_FLAG "${_std}=${_ext}c++11" PARENT_SCOPE)
|
||||
ELSE()
|
||||
SET(KOKKOS_CXX_STANDARD_FLAG "${_std}=c++11" PARENT_SCOPE)
|
||||
ENDIF()
|
||||
ELSE()
|
||||
MESSAGE(FATAL_ERROR "Intel compiler version too low - need 13.0 for C++11 and 15.0 for C++14")
|
||||
ENDIF()
|
||||
|
||||
SET(KOKKOS_CXX_STANDARD_FLAG "${_std}=c++${FULL_LC_STANDARD}" PARENT_SCOPE)
|
||||
SET(KOKKOS_CXX_INTERMDIATE_STANDARD_FLAG "${_std}=${_ext}${INT_LC_STANDARD}" PARENT_SCOPE)
|
||||
ENDFUNCTION()
|
||||
|
||||
|
||||
|
||||
@ -35,6 +35,7 @@ KOKKOS_ARCH_OPTION(ARMV80 HOST "ARMv8.0 Compatible CPU")
|
||||
KOKKOS_ARCH_OPTION(ARMV81 HOST "ARMv8.1 Compatible CPU")
|
||||
KOKKOS_ARCH_OPTION(ARMV8_THUNDERX HOST "ARMv8 Cavium ThunderX CPU")
|
||||
KOKKOS_ARCH_OPTION(ARMV8_THUNDERX2 HOST "ARMv8 Cavium ThunderX2 CPU")
|
||||
KOKKOS_ARCH_OPTION(A64FX HOST "ARMv8.2 with SVE Suport")
|
||||
KOKKOS_ARCH_OPTION(WSM HOST "Intel Westmere CPU")
|
||||
KOKKOS_ARCH_OPTION(SNB HOST "Intel Sandy/Ivy Bridge CPUs")
|
||||
KOKKOS_ARCH_OPTION(HSW HOST "Intel Haswell CPUs")
|
||||
@ -63,6 +64,7 @@ KOKKOS_ARCH_OPTION(ZEN HOST "AMD Zen architecture")
|
||||
KOKKOS_ARCH_OPTION(ZEN2 HOST "AMD Zen2 architecture")
|
||||
KOKKOS_ARCH_OPTION(VEGA900 GPU "AMD GPU MI25 GFX900")
|
||||
KOKKOS_ARCH_OPTION(VEGA906 GPU "AMD GPU MI50/MI60 GFX906")
|
||||
KOKKOS_ARCH_OPTION(VEGA908 GPU "AMD GPU")
|
||||
KOKKOS_ARCH_OPTION(INTEL_GEN GPU "Intel GPUs Gen9+")
|
||||
|
||||
|
||||
@ -72,6 +74,11 @@ IF(KOKKOS_ENABLE_COMPILER_WARNINGS)
|
||||
"-Wall" "-Wunused-parameter" "-Wshadow" "-pedantic"
|
||||
"-Wsign-compare" "-Wtype-limits" "-Wuninitialized")
|
||||
|
||||
# OpenMPTarget compilers give erroneous warnings about sign comparison in loops
|
||||
IF(KOKKOS_ENABLE_OPENMPTARGET)
|
||||
LIST(REMOVE_ITEM COMMON_WARNINGS "-Wsign-compare")
|
||||
ENDIF()
|
||||
|
||||
SET(GNU_WARNINGS "-Wempty-body" "-Wclobbered" "-Wignored-qualifiers"
|
||||
${COMMON_WARNINGS})
|
||||
|
||||
@ -106,6 +113,12 @@ ENDIF()
|
||||
IF (KOKKOS_CXX_COMPILER_ID STREQUAL Clang)
|
||||
SET(CUDA_ARCH_FLAG "--cuda-gpu-arch")
|
||||
GLOBAL_APPEND(KOKKOS_CUDA_OPTIONS -x cuda)
|
||||
# Kokkos_CUDA_DIR has priority over CUDAToolkit_BIN_DIR
|
||||
IF (Kokkos_CUDA_DIR)
|
||||
GLOBAL_APPEND(KOKKOS_CUDA_OPTIONS --cuda-path=${Kokkos_CUDA_DIR})
|
||||
ELSEIF(CUDAToolkit_BIN_DIR)
|
||||
GLOBAL_APPEND(KOKKOS_CUDA_OPTIONS --cuda-path=${CUDAToolkit_BIN_DIR}/..)
|
||||
ENDIF()
|
||||
IF (KOKKOS_ENABLE_CUDA)
|
||||
SET(KOKKOS_IMPL_CUDA_CLANG_WORKAROUND ON CACHE BOOL "enable CUDA Clang workarounds" FORCE)
|
||||
ENDIF()
|
||||
@ -167,6 +180,12 @@ IF (KOKKOS_ARCH_ARMV8_THUNDERX2)
|
||||
)
|
||||
ENDIF()
|
||||
|
||||
IF (KOKKOS_ARCH_A64FX)
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
DEFAULT -march=armv8.2-a+sve
|
||||
)
|
||||
ENDIF()
|
||||
|
||||
IF (KOKKOS_ARCH_ZEN)
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
Intel -mavx2
|
||||
@ -327,6 +346,16 @@ IF (Kokkos_ENABLE_HIP)
|
||||
ENDIF()
|
||||
|
||||
|
||||
IF (Kokkos_ENABLE_SYCL)
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
DEFAULT -fsycl
|
||||
)
|
||||
COMPILER_SPECIFIC_OPTIONS(
|
||||
DEFAULT -fsycl-unnamed-lambda
|
||||
)
|
||||
ENDIF()
|
||||
|
||||
|
||||
SET(CUDA_ARCH_ALREADY_SPECIFIED "")
|
||||
FUNCTION(CHECK_CUDA_ARCH ARCH FLAG)
|
||||
IF(KOKKOS_ARCH_${ARCH})
|
||||
@ -392,6 +421,7 @@ ENDFUNCTION()
|
||||
#to the corresponding flag name if ON
|
||||
CHECK_AMDGPU_ARCH(VEGA900 gfx900) # Radeon Instinct MI25
|
||||
CHECK_AMDGPU_ARCH(VEGA906 gfx906) # Radeon Instinct MI50 and MI60
|
||||
CHECK_AMDGPU_ARCH(VEGA908 gfx908)
|
||||
|
||||
IF(KOKKOS_ENABLE_HIP AND NOT AMDGPU_ARCH_ALREADY_SPECIFIED)
|
||||
MESSAGE(SEND_ERROR "HIP enabled but no AMD GPU architecture currently enabled. "
|
||||
@ -477,35 +507,53 @@ ENDIF()
|
||||
|
||||
#CMake verbose is kind of pointless
|
||||
#Let's just always print things
|
||||
MESSAGE(STATUS "Execution Spaces:")
|
||||
MESSAGE(STATUS "Built-in Execution Spaces:")
|
||||
|
||||
FOREACH (_BACKEND CUDA OPENMPTARGET HIP)
|
||||
IF(KOKKOS_ENABLE_${_BACKEND})
|
||||
FOREACH (_BACKEND Cuda OpenMPTarget HIP SYCL)
|
||||
STRING(TOUPPER ${_BACKEND} UC_BACKEND)
|
||||
IF(KOKKOS_ENABLE_${UC_BACKEND})
|
||||
IF(_DEVICE_PARALLEL)
|
||||
MESSAGE(FATAL_ERROR "Multiple device parallel execution spaces are not allowed! "
|
||||
"Trying to enable execution space ${_BACKEND}, "
|
||||
"but execution space ${_DEVICE_PARALLEL} is already enabled. "
|
||||
"Remove the CMakeCache.txt file and re-configure.")
|
||||
ENDIF()
|
||||
SET(_DEVICE_PARALLEL ${_BACKEND})
|
||||
IF (${_BACKEND} STREQUAL "Cuda")
|
||||
IF(KOKKOS_ENABLE_CUDA_UVM)
|
||||
SET(_DEFAULT_DEVICE_MEMSPACE "Kokkos::${_BACKEND}UVMSpace")
|
||||
ELSE()
|
||||
SET(_DEFAULT_DEVICE_MEMSPACE "Kokkos::${_BACKEND}Space")
|
||||
ENDIF()
|
||||
SET(_DEVICE_PARALLEL "Kokkos::${_BACKEND}")
|
||||
ELSE()
|
||||
SET(_DEFAULT_DEVICE_MEMSPACE "Kokkos::Experimental::${_BACKEND}Space")
|
||||
SET(_DEVICE_PARALLEL "Kokkos::Experimental::${_BACKEND}")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
ENDFOREACH()
|
||||
IF(NOT _DEVICE_PARALLEL)
|
||||
SET(_DEVICE_PARALLEL "NONE")
|
||||
SET(_DEVICE_PARALLEL "NoTypeDefined")
|
||||
SET(_DEFAULT_DEVICE_MEMSPACE "NoTypeDefined")
|
||||
ENDIF()
|
||||
MESSAGE(STATUS " Device Parallel: ${_DEVICE_PARALLEL}")
|
||||
UNSET(_DEVICE_PARALLEL)
|
||||
IF(KOKKOS_ENABLE_PTHREAD)
|
||||
SET(KOKKOS_ENABLE_THREADS ON)
|
||||
ENDIF()
|
||||
|
||||
|
||||
FOREACH (_BACKEND OPENMP PTHREAD HPX)
|
||||
IF(KOKKOS_ENABLE_${_BACKEND})
|
||||
FOREACH (_BACKEND OpenMP Threads HPX)
|
||||
STRING(TOUPPER ${_BACKEND} UC_BACKEND)
|
||||
IF(KOKKOS_ENABLE_${UC_BACKEND})
|
||||
IF(_HOST_PARALLEL)
|
||||
MESSAGE(FATAL_ERROR "Multiple host parallel execution spaces are not allowed! "
|
||||
"Trying to enable execution space ${_BACKEND}, "
|
||||
"but execution space ${_HOST_PARALLEL} is already enabled. "
|
||||
"Remove the CMakeCache.txt file and re-configure.")
|
||||
ENDIF()
|
||||
SET(_HOST_PARALLEL ${_BACKEND})
|
||||
IF (${_BACKEND} STREQUAL "HPX")
|
||||
SET(_HOST_PARALLEL "Kokkos::Experimental::${_BACKEND}")
|
||||
ELSE()
|
||||
SET(_HOST_PARALLEL "Kokkos::${_BACKEND}")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
ENDFOREACH()
|
||||
|
||||
@ -515,14 +563,11 @@ IF(NOT _HOST_PARALLEL AND NOT KOKKOS_ENABLE_SERIAL)
|
||||
"and Kokkos_ENABLE_SERIAL=OFF.")
|
||||
ENDIF()
|
||||
|
||||
IF(NOT _HOST_PARALLEL)
|
||||
SET(_HOST_PARALLEL "NONE")
|
||||
ENDIF()
|
||||
IF(_HOST_PARALLEL)
|
||||
MESSAGE(STATUS " Host Parallel: ${_HOST_PARALLEL}")
|
||||
UNSET(_HOST_PARALLEL)
|
||||
|
||||
IF(KOKKOS_ENABLE_PTHREAD)
|
||||
SET(KOKKOS_ENABLE_THREADS ON)
|
||||
ELSE()
|
||||
SET(_HOST_PARALLEL "NoTypeDefined")
|
||||
MESSAGE(STATUS " Host Parallel: NoTypeDefined")
|
||||
ENDIF()
|
||||
|
||||
IF(KOKKOS_ENABLE_SERIAL)
|
||||
|
||||
@ -4,24 +4,42 @@ SET(KOKKOS_CXX_COMPILER ${CMAKE_CXX_COMPILER})
|
||||
SET(KOKKOS_CXX_COMPILER_ID ${CMAKE_CXX_COMPILER_ID})
|
||||
SET(KOKKOS_CXX_COMPILER_VERSION ${CMAKE_CXX_COMPILER_VERSION})
|
||||
|
||||
IF(Kokkos_ENABLE_CUDA)
|
||||
MACRO(kokkos_internal_have_compiler_nvcc)
|
||||
# Check if the compiler is nvcc (which really means nvcc_wrapper).
|
||||
EXECUTE_PROCESS(COMMAND ${CMAKE_CXX_COMPILER} --version
|
||||
EXECUTE_PROCESS(COMMAND ${ARGN} --version
|
||||
OUTPUT_VARIABLE INTERNAL_COMPILER_VERSION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
|
||||
STRING(REPLACE "\n" " - " INTERNAL_COMPILER_VERSION_ONE_LINE ${INTERNAL_COMPILER_VERSION} )
|
||||
|
||||
STRING(FIND ${INTERNAL_COMPILER_VERSION_ONE_LINE} "nvcc" INTERNAL_COMPILER_VERSION_CONTAINS_NVCC)
|
||||
|
||||
|
||||
STRING(REGEX REPLACE "^ +" ""
|
||||
INTERNAL_HAVE_COMPILER_NVCC "${INTERNAL_HAVE_COMPILER_NVCC}")
|
||||
STRING(REGEX REPLACE "^ +" "" INTERNAL_HAVE_COMPILER_NVCC "${INTERNAL_HAVE_COMPILER_NVCC}")
|
||||
IF(${INTERNAL_COMPILER_VERSION_CONTAINS_NVCC} GREATER -1)
|
||||
SET(INTERNAL_HAVE_COMPILER_NVCC true)
|
||||
ELSE()
|
||||
SET(INTERNAL_HAVE_COMPILER_NVCC false)
|
||||
ENDIF()
|
||||
ENDMACRO()
|
||||
|
||||
IF(Kokkos_ENABLE_CUDA)
|
||||
# find kokkos_launch_compiler
|
||||
FIND_PROGRAM(Kokkos_COMPILE_LAUNCHER
|
||||
NAMES kokkos_launch_compiler
|
||||
HINTS ${PROJECT_SOURCE_DIR}
|
||||
PATHS ${PROJECT_SOURCE_DIR}
|
||||
PATH_SUFFIXES bin)
|
||||
|
||||
# check if compiler was set to nvcc_wrapper
|
||||
kokkos_internal_have_compiler_nvcc(${CMAKE_CXX_COMPILER})
|
||||
# if launcher was found and nvcc_wrapper was not specified as
|
||||
# compiler, set to use launcher. Will ensure CMAKE_CXX_COMPILER
|
||||
# is replaced by nvcc_wrapper
|
||||
IF(Kokkos_COMPILE_LAUNCHER AND NOT INTERNAL_HAVE_COMPILER_NVCC AND NOT KOKKOS_CXX_COMPILER_ID STREQUAL Clang)
|
||||
# the first argument to launcher is always the C++ compiler defined by cmake
|
||||
# if the second argument matches the C++ compiler, it forwards the rest of the
|
||||
# args to nvcc_wrapper
|
||||
kokkos_internal_have_compiler_nvcc(
|
||||
${Kokkos_COMPILE_LAUNCHER} ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER} -DKOKKOS_DEPENDENCE)
|
||||
SET(INTERNAL_USE_COMPILER_LAUNCHER true)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
IF(INTERNAL_HAVE_COMPILER_NVCC)
|
||||
@ -36,6 +54,35 @@ IF(INTERNAL_HAVE_COMPILER_NVCC)
|
||||
STRING(SUBSTRING ${TEMP_CXX_COMPILER_VERSION} 1 -1 TEMP_CXX_COMPILER_VERSION)
|
||||
SET(KOKKOS_CXX_COMPILER_VERSION ${TEMP_CXX_COMPILER_VERSION} CACHE STRING INTERNAL FORCE)
|
||||
MESSAGE(STATUS "Compiler Version: ${KOKKOS_CXX_COMPILER_VERSION}")
|
||||
IF(INTERNAL_USE_COMPILER_LAUNCHER)
|
||||
IF(Kokkos_LAUNCH_COMPILER_INFO)
|
||||
GET_FILENAME_COMPONENT(BASE_COMPILER_NAME ${CMAKE_CXX_COMPILER} NAME)
|
||||
# does not have STATUS intentionally
|
||||
MESSAGE("")
|
||||
MESSAGE("Kokkos_LAUNCH_COMPILER_INFO (${Kokkos_COMPILE_LAUNCHER}):")
|
||||
MESSAGE(" - Kokkos + CUDA backend requires the C++ files to be compiled as CUDA code.")
|
||||
MESSAGE(" - kokkos_launch_compiler permits CMAKE_CXX_COMPILER to be set to a traditional C++ compiler when Kokkos_ENABLE_CUDA=ON")
|
||||
MESSAGE(" by prefixing all the compile and link commands with the path to the script + CMAKE_CXX_COMPILER (${CMAKE_CXX_COMPILER}).")
|
||||
MESSAGE(" - If any of the compile or link commands have CMAKE_CXX_COMPILER as the first argument, it replaces CMAKE_CXX_COMPILER with nvcc_wrapper.")
|
||||
MESSAGE(" - If the compile or link command is not CMAKE_CXX_COMPILER, it just executes the command.")
|
||||
MESSAGE(" - If using ccache, set CMAKE_CXX_COMPILER to nvcc_wrapper explicitly.")
|
||||
MESSAGE(" - kokkos_compiler_launcher is available to downstream projects as well.")
|
||||
MESSAGE(" - If CMAKE_CXX_COMPILER=nvcc_wrapper, all legacy behavior will be preserved during 'find_package(Kokkos)'")
|
||||
MESSAGE(" - If CMAKE_CXX_COMPILER is not nvcc_wrapper, 'find_package(Kokkos)' will apply 'kokkos_compilation(GLOBAL)' unless separable compilation is enabled")
|
||||
MESSAGE(" - This can be disabled via '-DKokkos_LAUNCH_COMPILER=OFF'")
|
||||
MESSAGE(" - Use 'find_package(Kokkos COMPONENTS separable_compilation)' to enable separable compilation")
|
||||
MESSAGE(" - Separable compilation allows you to control the scope of where the compiler transformation behavior (${BASE_COMPILER_NAME} -> nvcc_wrapper) is applied")
|
||||
MESSAGE(" - The compiler transformation can be applied on a per-project, per-directory, per-target, and/or per-source-file basis")
|
||||
MESSAGE(" - 'kokkos_compilation(PROJECT)' will apply the compiler transformation to all targets in a project/subproject")
|
||||
MESSAGE(" - 'kokkos_compilation(TARGET <TARGET> [<TARGETS>...])' will apply the compiler transformation to the specified target(s)")
|
||||
MESSAGE(" - 'kokkos_compilation(SOURCE <SOURCE> [<SOURCES>...])' will apply the compiler transformation to the specified source file(s)")
|
||||
MESSAGE(" - 'kokkos_compilation(DIRECTORY <DIR> [<DIRS>...])' will apply the compiler transformation to the specified directories")
|
||||
MESSAGE("")
|
||||
ELSE()
|
||||
MESSAGE(STATUS "kokkos_launch_compiler (${Kokkos_COMPILE_LAUNCHER}) is enabled... Set Kokkos_LAUNCH_COMPILER_INFO=ON for more info.")
|
||||
ENDIF()
|
||||
kokkos_compilation(GLOBAL)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
IF(Kokkos_ENABLE_HIP)
|
||||
@ -90,38 +137,49 @@ IF(KOKKOS_CXX_COMPILER_ID STREQUAL Cray OR KOKKOS_CLANG_IS_CRAY)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
IF(KOKKOS_CXX_COMPILER_ID STREQUAL Fujitsu)
|
||||
# SET Fujitsus compiler version which is not detected by CMake
|
||||
EXECUTE_PROCESS(COMMAND ${CMAKE_CXX_COMPILER} --version
|
||||
OUTPUT_VARIABLE INTERNAL_CXX_COMPILER_VERSION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
|
||||
STRING(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+"
|
||||
TEMP_CXX_COMPILER_VERSION ${INTERNAL_CXX_COMPILER_VERSION})
|
||||
SET(KOKKOS_CXX_COMPILER_VERSION ${TEMP_CXX_COMPILER_VERSION} CACHE STRING INTERNAL FORCE)
|
||||
ENDIF()
|
||||
|
||||
# Enforce the minimum compilers supported by Kokkos.
|
||||
SET(KOKKOS_MESSAGE_TEXT "Compiler not supported by Kokkos. Required compiler versions:")
|
||||
SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n Clang 3.5.2 or higher")
|
||||
SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n GCC 4.8.4 or higher")
|
||||
SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n Intel 15.0.2 or higher")
|
||||
SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n NVCC 9.0.69 or higher")
|
||||
SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n HIPCC 3.5.0 or higher")
|
||||
SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n PGI 17.1 or higher\n")
|
||||
SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n Clang 4.0.0 or higher")
|
||||
SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n GCC 5.3.0 or higher")
|
||||
SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n Intel 17.0.0 or higher")
|
||||
SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n NVCC 9.2.88 or higher")
|
||||
SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n HIPCC 3.8.0 or higher")
|
||||
SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n PGI 17.4 or higher\n")
|
||||
|
||||
IF(KOKKOS_CXX_COMPILER_ID STREQUAL Clang)
|
||||
IF(KOKKOS_CXX_COMPILER_VERSION VERSION_LESS 3.5.2)
|
||||
IF(KOKKOS_CXX_COMPILER_VERSION VERSION_LESS 4.0.0)
|
||||
MESSAGE(FATAL_ERROR "${KOKKOS_MESSAGE_TEXT}")
|
||||
ENDIF()
|
||||
ELSEIF(KOKKOS_CXX_COMPILER_ID STREQUAL GNU)
|
||||
IF(KOKKOS_CXX_COMPILER_VERSION VERSION_LESS 4.8.4)
|
||||
IF(KOKKOS_CXX_COMPILER_VERSION VERSION_LESS 5.3.0)
|
||||
MESSAGE(FATAL_ERROR "${KOKKOS_MESSAGE_TEXT}")
|
||||
ENDIF()
|
||||
ELSEIF(KOKKOS_CXX_COMPILER_ID STREQUAL Intel)
|
||||
IF(KOKKOS_CXX_COMPILER_VERSION VERSION_LESS 15.0.2)
|
||||
IF(KOKKOS_CXX_COMPILER_VERSION VERSION_LESS 17.0.0)
|
||||
MESSAGE(FATAL_ERROR "${KOKKOS_MESSAGE_TEXT}")
|
||||
ENDIF()
|
||||
ELSEIF(KOKKOS_CXX_COMPILER_ID STREQUAL NVIDIA)
|
||||
IF(KOKKOS_CXX_COMPILER_VERSION VERSION_LESS 9.0.69)
|
||||
IF(KOKKOS_CXX_COMPILER_VERSION VERSION_LESS 9.2.88)
|
||||
MESSAGE(FATAL_ERROR "${KOKKOS_MESSAGE_TEXT}")
|
||||
ENDIF()
|
||||
SET(CMAKE_CXX_EXTENSIONS OFF CACHE BOOL "Kokkos turns off CXX extensions" FORCE)
|
||||
ELSEIF(KOKKOS_CXX_COMPILER_ID STREQUAL HIP)
|
||||
IF(KOKKOS_CXX_COMPILER_VERSION VERSION_LESS 3.5.0)
|
||||
IF(KOKKOS_CXX_COMPILER_VERSION VERSION_LESS 3.8.0)
|
||||
MESSAGE(FATAL_ERROR "${KOKKOS_MESSAGE_TEXT}")
|
||||
ENDIF()
|
||||
ELSEIF(KOKKOS_CXX_COMPILER_ID STREQUAL PGI)
|
||||
IF(KOKKOS_CXX_COMPILER_VERSION VERSION_LESS 17.1)
|
||||
IF(KOKKOS_CXX_COMPILER_VERSION VERSION_LESS 17.4)
|
||||
MESSAGE(FATAL_ERROR "${KOKKOS_MESSAGE_TEXT}")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
IF(KOKKOS_CXX_COMPILER_ID STREQUAL Clang AND KOKKOS_ENABLE_OPENMP AND NOT KOKKOS_CLANG_IS_CRAY AND NOT "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
|
||||
IF(KOKKOS_CXX_COMPILER_ID STREQUAL Clang AND KOKKOS_ENABLE_OPENMP AND NOT KOKKOS_CLANG_IS_CRAY AND NOT KOKKOS_COMPILER_CLANG_MSVC)
|
||||
# The clang "version" doesn't actually tell you what runtimes and tools
|
||||
# were built into Clang. We should therefore make sure that libomp
|
||||
# was actually built into Clang. Otherwise the user will get nonsensical
|
||||
|
||||
@ -25,6 +25,18 @@ IF (KOKKOS_ENABLE_PTHREAD)
|
||||
SET(KOKKOS_ENABLE_THREADS ON)
|
||||
ENDIF()
|
||||
|
||||
# detect clang++ / cl / clang-cl clashes
|
||||
IF (CMAKE_CXX_COMPILER_ID STREQUAL Clang AND "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
|
||||
# this specific test requires CMake >= 3.15
|
||||
IF ("x${CMAKE_CXX_COMPILER_FRONTEND_VARIANT}" STREQUAL "xGNU")
|
||||
# use pure clang++ instead of clang-cl
|
||||
SET(KOKKOS_COMPILER_CLANG_MSVC OFF)
|
||||
ELSE()
|
||||
# it defaults to clang-cl
|
||||
SET(KOKKOS_COMPILER_CLANG_MSVC ON)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
IF(Trilinos_ENABLE_Kokkos AND Trilinos_ENABLE_OpenMP)
|
||||
SET(OMP_DEFAULT ON)
|
||||
ELSE()
|
||||
@ -39,13 +51,16 @@ IF(KOKKOS_ENABLE_OPENMP)
|
||||
IF(KOKKOS_CLANG_IS_INTEL)
|
||||
SET(ClangOpenMPFlag -fiopenmp)
|
||||
ENDIF()
|
||||
IF(KOKKOS_CXX_COMPILER_ID STREQUAL Clang AND "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
|
||||
#expression /openmp yields error, so add a specific Clang flag
|
||||
COMPILER_SPECIFIC_OPTIONS(Clang /clang:-fopenmp)
|
||||
#link omp library from LLVM lib dir
|
||||
IF(KOKKOS_COMPILER_CLANG_MSVC)
|
||||
#for clang-cl expression /openmp yields an error, so directly add the specific Clang flag
|
||||
SET(ClangOpenMPFlag /clang:-fopenmp=libomp)
|
||||
ENDIF()
|
||||
IF(WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL Clang)
|
||||
#link omp library from LLVM lib dir, no matter if it is clang-cl or clang++
|
||||
get_filename_component(LLVM_BIN_DIR ${CMAKE_CXX_COMPILER_AR} DIRECTORY)
|
||||
COMPILER_SPECIFIC_LIBS(Clang "${LLVM_BIN_DIR}/../lib/libomp.lib")
|
||||
ELSEIF(KOKKOS_CXX_COMPILER_ID STREQUAL NVIDIA)
|
||||
ENDIF()
|
||||
IF(KOKKOS_CXX_COMPILER_ID STREQUAL NVIDIA)
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
COMPILER_ID KOKKOS_CXX_HOST_COMPILER_ID
|
||||
Clang -Xcompiler ${ClangOpenMPFlag}
|
||||
@ -71,7 +86,7 @@ ENDIF()
|
||||
|
||||
KOKKOS_DEVICE_OPTION(OPENMPTARGET OFF DEVICE "Whether to build the OpenMP target backend")
|
||||
IF (KOKKOS_ENABLE_OPENMPTARGET)
|
||||
SET(ClangOpenMPFlag -fopenmp=libomp)
|
||||
SET(ClangOpenMPFlag -fopenmp=libomp)
|
||||
IF(KOKKOS_CLANG_IS_CRAY)
|
||||
SET(ClangOpenMPFlag -fopenmp)
|
||||
ENDIF()
|
||||
@ -105,9 +120,11 @@ KOKKOS_DEVICE_OPTION(CUDA ${CUDA_DEFAULT} DEVICE "Whether to build CUDA backend"
|
||||
|
||||
IF (KOKKOS_ENABLE_CUDA)
|
||||
GLOBAL_SET(KOKKOS_DONT_ALLOW_EXTENSIONS "CUDA enabled")
|
||||
IF(WIN32)
|
||||
IF(WIN32 AND NOT KOKKOS_CXX_COMPILER_ID STREQUAL Clang)
|
||||
GLOBAL_APPEND(KOKKOS_COMPILE_OPTIONS -x cu)
|
||||
ENDIF()
|
||||
## Cuda has extra setup requirements, turn on Kokkos_Setup_Cuda.hpp in macros
|
||||
LIST(APPEND DEVICE_SETUP_LIST Cuda)
|
||||
ENDIF()
|
||||
|
||||
# We want this to default to OFF for cache reasons, but if no
|
||||
@ -128,3 +145,10 @@ KOKKOS_DEVICE_OPTION(SERIAL ${SERIAL_DEFAULT} HOST "Whether to build serial back
|
||||
KOKKOS_DEVICE_OPTION(HPX OFF HOST "Whether to build HPX backend (experimental)")
|
||||
|
||||
KOKKOS_DEVICE_OPTION(HIP OFF DEVICE "Whether to build HIP backend")
|
||||
|
||||
## HIP has extra setup requirements, turn on Kokkos_Setup_HIP.hpp in macros
|
||||
IF (KOKKOS_ENABLE_HIP)
|
||||
LIST(APPEND DEVICE_SETUP_LIST HIP)
|
||||
ENDIF()
|
||||
|
||||
KOKKOS_DEVICE_OPTION(SYCL OFF DEVICE "Whether to build SYCL backend")
|
||||
|
||||
@ -154,13 +154,13 @@ MACRO(kokkos_export_imported_tpl NAME)
|
||||
KOKKOS_APPEND_CONFIG_LINE("SET_TARGET_PROPERTIES(${NAME} PROPERTIES")
|
||||
GET_TARGET_PROPERTY(TPL_LIBRARY ${NAME} IMPORTED_LOCATION)
|
||||
IF(TPL_LIBRARY)
|
||||
KOKKOS_APPEND_CONFIG_LINE("IMPORTED_LOCATION ${TPL_LIBRARY}")
|
||||
KOKKOS_APPEND_CONFIG_LINE("IMPORTED_LOCATION \"${TPL_LIBRARY}\"")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
GET_TARGET_PROPERTY(TPL_INCLUDES ${NAME} INTERFACE_INCLUDE_DIRECTORIES)
|
||||
IF(TPL_INCLUDES)
|
||||
KOKKOS_APPEND_CONFIG_LINE("INTERFACE_INCLUDE_DIRECTORIES ${TPL_INCLUDES}")
|
||||
KOKKOS_APPEND_CONFIG_LINE("INTERFACE_INCLUDE_DIRECTORIES \"${TPL_INCLUDES}\"")
|
||||
ENDIF()
|
||||
|
||||
GET_TARGET_PROPERTY(TPL_COMPILE_OPTIONS ${NAME} INTERFACE_COMPILE_OPTIONS)
|
||||
@ -178,7 +178,7 @@ MACRO(kokkos_export_imported_tpl NAME)
|
||||
|
||||
GET_TARGET_PROPERTY(TPL_LINK_LIBRARIES ${NAME} INTERFACE_LINK_LIBRARIES)
|
||||
IF(TPL_LINK_LIBRARIES)
|
||||
KOKKOS_APPEND_CONFIG_LINE("INTERFACE_LINK_LIBRARIES ${TPL_LINK_LIBRARIES}")
|
||||
KOKKOS_APPEND_CONFIG_LINE("INTERFACE_LINK_LIBRARIES \"${TPL_LINK_LIBRARIES}\"")
|
||||
ENDIF()
|
||||
KOKKOS_APPEND_CONFIG_LINE(")")
|
||||
KOKKOS_APPEND_CONFIG_LINE("ENDIF()")
|
||||
@ -770,7 +770,7 @@ FUNCTION(kokkos_link_tpl TARGET)
|
||||
ENDFUNCTION()
|
||||
|
||||
FUNCTION(COMPILER_SPECIFIC_OPTIONS_HELPER)
|
||||
SET(COMPILERS NVIDIA PGI XL DEFAULT Cray Intel Clang AppleClang IntelClang GNU HIP)
|
||||
SET(COMPILERS NVIDIA PGI XL DEFAULT Cray Intel Clang AppleClang IntelClang GNU HIP Fujitsu)
|
||||
CMAKE_PARSE_ARGUMENTS(
|
||||
PARSE
|
||||
"LINK_OPTIONS;COMPILE_OPTIONS;COMPILE_DEFINITIONS;LINK_LIBRARIES"
|
||||
@ -844,7 +844,6 @@ ENDFUNCTION(COMPILER_SPECIFIC_DEFS)
|
||||
FUNCTION(COMPILER_SPECIFIC_LIBS)
|
||||
COMPILER_SPECIFIC_OPTIONS_HELPER(${ARGN} LINK_LIBRARIES)
|
||||
ENDFUNCTION(COMPILER_SPECIFIC_LIBS)
|
||||
|
||||
# Given a list of the form
|
||||
# key1;value1;key2;value2,...
|
||||
# Create a list of all keys in a variable named ${KEY_LIST_NAME}
|
||||
@ -877,3 +876,114 @@ FUNCTION(KOKKOS_CHECK_DEPRECATED_OPTIONS)
|
||||
ENDIF()
|
||||
ENDFOREACH()
|
||||
ENDFUNCTION()
|
||||
|
||||
# this function checks whether the current CXX compiler supports building CUDA
|
||||
FUNCTION(kokkos_cxx_compiler_cuda_test _VAR)
|
||||
# don't run this test every time
|
||||
IF(DEFINED ${_VAR})
|
||||
RETURN()
|
||||
ENDIF()
|
||||
|
||||
FILE(WRITE ${PROJECT_BINARY_DIR}/compile_tests/compiles_cuda.cpp
|
||||
"
|
||||
#include <cuda.h>
|
||||
#include <cstdlib>
|
||||
|
||||
__global__
|
||||
void kernel(int sz, double* data)
|
||||
{
|
||||
auto _beg = blockIdx.x * blockDim.x + threadIdx.x;
|
||||
for(int i = _beg; i < sz; ++i)
|
||||
data[i] += static_cast<double>(i);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
double* data = nullptr;
|
||||
int blocks = 64;
|
||||
int grids = 64;
|
||||
auto ret = cudaMalloc(&data, blocks * grids * sizeof(double));
|
||||
if(ret != cudaSuccess)
|
||||
return EXIT_FAILURE;
|
||||
kernel<<<grids, blocks>>>(blocks * grids, data);
|
||||
cudaDeviceSynchronize();
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
")
|
||||
|
||||
TRY_COMPILE(_RET
|
||||
${PROJECT_BINARY_DIR}/compile_tests
|
||||
SOURCES ${PROJECT_BINARY_DIR}/compile_tests/compiles_cuda.cpp)
|
||||
|
||||
SET(${_VAR} ${_RET} CACHE STRING "CXX compiler supports building CUDA")
|
||||
ENDFUNCTION()
|
||||
|
||||
# this function is provided to easily select which files use nvcc_wrapper:
|
||||
#
|
||||
# GLOBAL --> all files
|
||||
# TARGET --> all files in a target
|
||||
# SOURCE --> specific source files
|
||||
# DIRECTORY --> all files in directory
|
||||
# PROJECT --> all files/targets in a project/subproject
|
||||
#
|
||||
FUNCTION(kokkos_compilation)
|
||||
# check whether the compiler already supports building CUDA
|
||||
KOKKOS_CXX_COMPILER_CUDA_TEST(Kokkos_CXX_COMPILER_COMPILES_CUDA)
|
||||
# if CUDA compile test has already been performed, just return
|
||||
IF(Kokkos_CXX_COMPILER_COMPILES_CUDA)
|
||||
RETURN()
|
||||
ENDIF()
|
||||
|
||||
CMAKE_PARSE_ARGUMENTS(COMP "GLOBAL;PROJECT" "" "DIRECTORY;TARGET;SOURCE" ${ARGN})
|
||||
|
||||
# find kokkos_launch_compiler
|
||||
FIND_PROGRAM(Kokkos_COMPILE_LAUNCHER
|
||||
NAMES kokkos_launch_compiler
|
||||
HINTS ${PROJECT_SOURCE_DIR}
|
||||
PATHS ${PROJECT_SOURCE_DIR}
|
||||
PATH_SUFFIXES bin)
|
||||
|
||||
IF(NOT Kokkos_COMPILE_LAUNCHER)
|
||||
MESSAGE(FATAL_ERROR "Kokkos could not find 'kokkos_launch_compiler'. Please set '-DKokkos_COMPILE_LAUNCHER=/path/to/launcher'")
|
||||
ENDIF()
|
||||
|
||||
IF(COMP_GLOBAL)
|
||||
# if global, don't bother setting others
|
||||
SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${Kokkos_COMPILE_LAUNCHER} ${CMAKE_CXX_COMPILER}")
|
||||
SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_LINK "${Kokkos_COMPILE_LAUNCHER} ${CMAKE_CXX_COMPILER}")
|
||||
ELSE()
|
||||
FOREACH(_TYPE PROJECT DIRECTORY TARGET SOURCE)
|
||||
# make project/subproject scoping easy, e.g. KokkosCompilation(PROJECT) after project(...)
|
||||
IF("${_TYPE}" STREQUAL "PROJECT" AND COMP_${_TYPE})
|
||||
LIST(APPEND COMP_DIRECTORY ${PROJECT_SOURCE_DIR})
|
||||
UNSET(COMP_${_TYPE})
|
||||
ENDIF()
|
||||
# set the properties if defined
|
||||
IF(COMP_${_TYPE})
|
||||
# MESSAGE(STATUS "Using nvcc_wrapper :: ${_TYPE} :: ${COMP_${_TYPE}}")
|
||||
SET_PROPERTY(${_TYPE} ${COMP_${_TYPE}} PROPERTY RULE_LAUNCH_COMPILE "${Kokkos_COMPILE_LAUNCHER} ${CMAKE_CXX_COMPILER}")
|
||||
SET_PROPERTY(${_TYPE} ${COMP_${_TYPE}} PROPERTY RULE_LAUNCH_LINK "${Kokkos_COMPILE_LAUNCHER} ${CMAKE_CXX_COMPILER}")
|
||||
ENDIF()
|
||||
ENDFOREACH()
|
||||
ENDIF()
|
||||
ENDFUNCTION()
|
||||
## KOKKOS_CONFIG_HEADER - parse the data list which is a list of backend names
|
||||
## and create output config header file...used for
|
||||
## creating dynamic include files based on enabled backends
|
||||
##
|
||||
## SRC_FILE is input file
|
||||
## TARGET_FILE output file
|
||||
## HEADER_GUARD TEXT used with include header guard
|
||||
## HEADER_PREFIX prefix used with include (i.e. fwd, decl, setup)
|
||||
## DATA_LIST list of backends to include in generated file
|
||||
FUNCTION(KOKKOS_CONFIG_HEADER SRC_FILE TARGET_FILE HEADER_GUARD HEADER_PREFIX DATA_LIST)
|
||||
SET(HEADER_GUARD_TAG "${HEADER_GUARD}_HPP_")
|
||||
CONFIGURE_FILE(cmake/${SRC_FILE} ${PROJECT_BINARY_DIR}/temp/${TARGET_FILE}.work COPYONLY)
|
||||
FOREACH( BACKEND_NAME ${DATA_LIST} )
|
||||
SET(INCLUDE_NEXT_FILE "#include <${HEADER_PREFIX}_${BACKEND_NAME}.hpp>
|
||||
\@INCLUDE_NEXT_FILE\@")
|
||||
CONFIGURE_FILE(${PROJECT_BINARY_DIR}/temp/${TARGET_FILE}.work ${PROJECT_BINARY_DIR}/temp/${TARGET_FILE}.work @ONLY)
|
||||
ENDFOREACH()
|
||||
SET(INCLUDE_NEXT_FILE "" )
|
||||
CONFIGURE_FILE(${PROJECT_BINARY_DIR}/temp/${TARGET_FILE}.work ${TARGET_FILE} @ONLY)
|
||||
ENDFUNCTION()
|
||||
|
||||
@ -1,19 +1,17 @@
|
||||
# From CMake 3.10 documentation
|
||||
|
||||
#This can run at any time
|
||||
KOKKOS_OPTION(CXX_STANDARD "" STRING "The C++ standard for Kokkos to use: 11, 14, 17, or 20. If empty, this will default to CMAKE_CXX_STANDARD. If both CMAKE_CXX_STANDARD and Kokkos_CXX_STANDARD are empty, this will default to 11")
|
||||
KOKKOS_OPTION(CXX_STANDARD "" STRING "The C++ standard for Kokkos to use: 14, 17, or 20. If empty, this will default to CMAKE_CXX_STANDARD. If both CMAKE_CXX_STANDARD and Kokkos_CXX_STANDARD are empty, this will default to 14")
|
||||
|
||||
# Set CXX standard flags
|
||||
SET(KOKKOS_ENABLE_CXX11 OFF)
|
||||
SET(KOKKOS_ENABLE_CXX14 OFF)
|
||||
SET(KOKKOS_ENABLE_CXX17 OFF)
|
||||
SET(KOKKOS_ENABLE_CXX20 OFF)
|
||||
IF (KOKKOS_CXX_STANDARD)
|
||||
IF (${KOKKOS_CXX_STANDARD} STREQUAL "c++98")
|
||||
MESSAGE(FATAL_ERROR "Kokkos no longer supports C++98 - minimum C++11")
|
||||
MESSAGE(FATAL_ERROR "Kokkos no longer supports C++98 - minimum C++14")
|
||||
ELSEIF (${KOKKOS_CXX_STANDARD} STREQUAL "c++11")
|
||||
MESSAGE(WARNING "Deprecated Kokkos C++ standard set as 'c++11'. Use '11' instead.")
|
||||
SET(KOKKOS_CXX_STANDARD "11")
|
||||
MESSAGE(FATAL_ERROR "Kokkos no longer supports C++11 - minimum C++14")
|
||||
ELSEIF(${KOKKOS_CXX_STANDARD} STREQUAL "c++14")
|
||||
MESSAGE(WARNING "Deprecated Kokkos C++ standard set as 'c++14'. Use '14' instead.")
|
||||
SET(KOKKOS_CXX_STANDARD "14")
|
||||
@ -33,8 +31,8 @@ IF (KOKKOS_CXX_STANDARD)
|
||||
ENDIF()
|
||||
|
||||
IF (NOT KOKKOS_CXX_STANDARD AND NOT CMAKE_CXX_STANDARD)
|
||||
MESSAGE(STATUS "Setting default Kokkos CXX standard to 11")
|
||||
SET(KOKKOS_CXX_STANDARD "11")
|
||||
MESSAGE(STATUS "Setting default Kokkos CXX standard to 14")
|
||||
SET(KOKKOS_CXX_STANDARD "14")
|
||||
ELSEIF(NOT KOKKOS_CXX_STANDARD)
|
||||
MESSAGE(STATUS "Setting default Kokkos CXX standard to ${CMAKE_CXX_STANDARD}")
|
||||
SET(KOKKOS_CXX_STANDARD ${CMAKE_CXX_STANDARD})
|
||||
|
||||
@ -29,7 +29,7 @@ FUNCTION(kokkos_set_cxx_standard_feature standard)
|
||||
ELSEIF(NOT KOKKOS_USE_CXX_EXTENSIONS AND ${STANDARD_NAME})
|
||||
MESSAGE(STATUS "Using ${${STANDARD_NAME}} for C++${standard} standard as feature")
|
||||
IF (KOKKOS_CXX_COMPILER_ID STREQUAL NVIDIA AND (KOKKOS_CXX_HOST_COMPILER_ID STREQUAL GNU OR KOKKOS_CXX_HOST_COMPILER_ID STREQUAL Clang))
|
||||
SET(SUPPORTED_NVCC_FLAGS "-std=c++11;-std=c++14;-std=c++17")
|
||||
SET(SUPPORTED_NVCC_FLAGS "-std=c++14;-std=c++17")
|
||||
IF (NOT ${${STANDARD_NAME}} IN_LIST SUPPORTED_NVCC_FLAGS)
|
||||
MESSAGE(FATAL_ERROR "CMake wants to use ${${STANDARD_NAME}} which is not supported by NVCC. Using a more recent host compiler or a more recent CMake version might help.")
|
||||
ENDIF()
|
||||
@ -42,13 +42,16 @@ FUNCTION(kokkos_set_cxx_standard_feature standard)
|
||||
ELSEIF((KOKKOS_CXX_COMPILER_ID STREQUAL "NVIDIA") AND WIN32)
|
||||
MESSAGE(STATUS "Using no flag for C++${standard} standard as feature")
|
||||
GLOBAL_SET(KOKKOS_CXX_STANDARD_FEATURE "")
|
||||
ELSEIF((KOKKOS_CXX_COMPILER_ID STREQUAL "Fujitsu"))
|
||||
MESSAGE(STATUS "Using no flag for C++${standard} standard as feature")
|
||||
GLOBAL_SET(KOKKOS_CXX_STANDARD_FEATURE "")
|
||||
ELSE()
|
||||
#nope, we can't do anything here
|
||||
MESSAGE(WARNING "C++${standard} is not supported as a compiler feature. We will choose custom flags for now, but this behavior has been deprecated. Please open an issue at https://github.com/kokkos/kokkos/issues reporting that ${KOKKOS_CXX_COMPILER_ID} ${KOKKOS_CXX_COMPILER_VERSION} failed for ${KOKKOS_CXX_STANDARD}, preferrably including your CMake command.")
|
||||
MESSAGE(WARNING "C++${standard} is not supported as a compiler feature. We will choose custom flags for now, but this behavior has been deprecated. Please open an issue at https://github.com/kokkos/kokkos/issues reporting that ${KOKKOS_CXX_COMPILER_ID} ${KOKKOS_CXX_COMPILER_VERSION} failed for ${KOKKOS_CXX_STANDARD}, preferably including your CMake command.")
|
||||
GLOBAL_SET(KOKKOS_CXX_STANDARD_FEATURE "")
|
||||
ENDIF()
|
||||
|
||||
IF(NOT WIN32)
|
||||
IF((NOT WIN32) AND (NOT ("${KOKKOS_CXX_COMPILER_ID}" STREQUAL "Fujitsu")))
|
||||
IF(NOT ${FEATURE_NAME} IN_LIST CMAKE_CXX_COMPILE_FEATURES)
|
||||
MESSAGE(FATAL_ERROR "Compiler ${KOKKOS_CXX_COMPILER_ID} should support ${FEATURE_NAME}, but CMake reports feature not supported")
|
||||
ENDIF()
|
||||
@ -65,11 +68,7 @@ IF (KOKKOS_CXX_STANDARD AND CMAKE_CXX_STANDARD)
|
||||
ENDIF()
|
||||
|
||||
|
||||
IF (KOKKOS_CXX_STANDARD STREQUAL "11" )
|
||||
kokkos_set_cxx_standard_feature(11)
|
||||
SET(KOKKOS_ENABLE_CXX11 ON)
|
||||
SET(KOKKOS_CXX_INTERMEDIATE_STANDARD "11")
|
||||
ELSEIF(KOKKOS_CXX_STANDARD STREQUAL "14")
|
||||
IF(KOKKOS_CXX_STANDARD STREQUAL "14")
|
||||
kokkos_set_cxx_standard_feature(14)
|
||||
SET(KOKKOS_CXX_INTERMEDIATE_STANDARD "1Y")
|
||||
SET(KOKKOS_ENABLE_CXX14 ON)
|
||||
@ -81,21 +80,21 @@ ELSEIF(KOKKOS_CXX_STANDARD STREQUAL "20")
|
||||
kokkos_set_cxx_standard_feature(20)
|
||||
SET(KOKKOS_CXX_INTERMEDIATE_STANDARD "2A")
|
||||
SET(KOKKOS_ENABLE_CXX20 ON)
|
||||
ELSEIF(KOKKOS_CXX_STANDARD STREQUAL "98")
|
||||
MESSAGE(FATAL_ERROR "Kokkos requires C++11 or newer!")
|
||||
ELSEIF(KOKKOS_CXX_STANDARD STREQUAL "98" OR KOKKOS_CXX_STANDARD STREQUAL "11")
|
||||
MESSAGE(FATAL_ERROR "Kokkos requires C++14 or newer!")
|
||||
ELSE()
|
||||
MESSAGE(FATAL_ERROR "Unknown C++ standard ${KOKKOS_CXX_STANDARD} - must be 11, 14, 17, or 20")
|
||||
MESSAGE(FATAL_ERROR "Unknown C++ standard ${KOKKOS_CXX_STANDARD} - must be 14, 17, or 20")
|
||||
ENDIF()
|
||||
|
||||
|
||||
|
||||
# Enforce that extensions are turned off for nvcc_wrapper.
|
||||
# For compiling CUDA code using nvcc_wrapper, we will use the host compiler's
|
||||
# flags for turning on C++11. Since for compiler ID and versioning purposes
|
||||
# flags for turning on C++14. Since for compiler ID and versioning purposes
|
||||
# CMake recognizes the host compiler when calling nvcc_wrapper, this just
|
||||
# works. Both NVCC and nvcc_wrapper only recognize '-std=c++11' which means
|
||||
# works. Both NVCC and nvcc_wrapper only recognize '-std=c++14' which means
|
||||
# that we can only use host compilers for CUDA builds that use those flags.
|
||||
# It also means that extensions (gnu++11) can't be turned on for CUDA builds.
|
||||
# It also means that extensions (gnu++14) can't be turned on for CUDA builds.
|
||||
|
||||
IF(KOKKOS_CXX_COMPILER_ID STREQUAL NVIDIA)
|
||||
IF(NOT DEFINED CMAKE_CXX_EXTENSIONS)
|
||||
@ -117,7 +116,7 @@ IF(KOKKOS_ENABLE_CUDA)
|
||||
MESSAGE(FATAL_ERROR "Compiling CUDA code with clang doesn't support C++ extensions. Set -DCMAKE_CXX_EXTENSIONS=OFF")
|
||||
ENDIF()
|
||||
ELSEIF(NOT KOKKOS_CXX_COMPILER_ID STREQUAL NVIDIA)
|
||||
MESSAGE(FATAL_ERROR "Invalid compiler for CUDA. The compiler must be nvcc_wrapper or Clang, but compiler ID was ${KOKKOS_CXX_COMPILER_ID}")
|
||||
MESSAGE(FATAL_ERROR "Invalid compiler for CUDA. The compiler must be nvcc_wrapper or Clang or use kokkos_launch_compiler, but compiler ID was ${KOKKOS_CXX_COMPILER_ID}")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
|
||||
@ -76,3 +76,7 @@ STRING(REPLACE ";" "\n" KOKKOS_TPL_EXPORT_TEMP "${KOKKOS_TPL_EXPORTS}")
|
||||
#Convert to a regular variable
|
||||
UNSET(KOKKOS_TPL_EXPORTS CACHE)
|
||||
SET(KOKKOS_TPL_EXPORTS ${KOKKOS_TPL_EXPORT_TEMP})
|
||||
IF (KOKKOS_ENABLE_MEMKIND)
|
||||
SET(KOKKOS_ENABLE_HBWSPACE)
|
||||
LIST(APPEND KOKKOS_MEMSPACE_LIST HBWSpace)
|
||||
ENDIF()
|
||||
|
||||
@ -6,6 +6,12 @@ INCLUDE(GNUInstallDirs)
|
||||
|
||||
MESSAGE(STATUS "The project name is: ${PROJECT_NAME}")
|
||||
|
||||
FUNCTION(VERIFY_EMPTY CONTEXT)
|
||||
if(${ARGN})
|
||||
MESSAGE(FATAL_ERROR "Kokkos does not support all of Tribits. Unhandled arguments in ${CONTEXT}:\n${ARGN}")
|
||||
endif()
|
||||
ENDFUNCTION()
|
||||
|
||||
#Leave this here for now - but only do for tribits
|
||||
#This breaks the standalone CMake
|
||||
IF (KOKKOS_HAS_TRILINOS)
|
||||
@ -135,28 +141,37 @@ FUNCTION(KOKKOS_ADD_EXECUTABLE ROOT_NAME)
|
||||
ENDFUNCTION()
|
||||
|
||||
FUNCTION(KOKKOS_ADD_EXECUTABLE_AND_TEST ROOT_NAME)
|
||||
CMAKE_PARSE_ARGUMENTS(PARSE
|
||||
""
|
||||
""
|
||||
"SOURCES;CATEGORIES;ARGS"
|
||||
${ARGN})
|
||||
VERIFY_EMPTY(KOKKOS_ADD_EXECUTABLE_AND_TEST ${PARSE_UNPARSED_ARGUMENTS})
|
||||
|
||||
IF (KOKKOS_HAS_TRILINOS)
|
||||
IF(DEFINED PARSE_ARGS)
|
||||
STRING(REPLACE ";" " " PARSE_ARGS "${PARSE_ARGS}")
|
||||
ENDIF()
|
||||
TRIBITS_ADD_EXECUTABLE_AND_TEST(
|
||||
${ROOT_NAME}
|
||||
SOURCES ${PARSE_SOURCES}
|
||||
TESTONLYLIBS kokkos_gtest
|
||||
${ARGN}
|
||||
NUM_MPI_PROCS 1
|
||||
COMM serial mpi
|
||||
ARGS ${PARSE_ARGS}
|
||||
CATEGORIES ${PARSE_CATEGORIES}
|
||||
SOURCES ${PARSE_SOURCES}
|
||||
FAIL_REGULAR_EXPRESSION " FAILED "
|
||||
ARGS ${PARSE_ARGS}
|
||||
)
|
||||
ELSE()
|
||||
CMAKE_PARSE_ARGUMENTS(PARSE
|
||||
""
|
||||
""
|
||||
"SOURCES;CATEGORIES"
|
||||
${ARGN})
|
||||
VERIFY_EMPTY(KOKKOS_ADD_EXECUTABLE_AND_TEST ${PARSE_UNPARSED_ARGUMENTS})
|
||||
KOKKOS_ADD_TEST_EXECUTABLE(${ROOT_NAME}
|
||||
SOURCES ${PARSE_SOURCES}
|
||||
)
|
||||
KOKKOS_ADD_TEST(NAME ${ROOT_NAME}
|
||||
EXE ${ROOT_NAME}
|
||||
FAIL_REGULAR_EXPRESSION " FAILED "
|
||||
ARGS ${PARSE_ARGS}
|
||||
)
|
||||
ENDIF()
|
||||
ENDFUNCTION()
|
||||
@ -219,6 +234,7 @@ MACRO(KOKKOS_ADD_TEST_EXECUTABLE ROOT_NAME)
|
||||
${PARSE_UNPARSED_ARGUMENTS}
|
||||
TESTONLYLIBS kokkos_gtest
|
||||
)
|
||||
SET(EXE_NAME ${PACKAGE_NAME}_${ROOT_NAME})
|
||||
ENDMACRO()
|
||||
|
||||
MACRO(KOKKOS_PACKAGE_POSTPROCESS)
|
||||
@ -227,6 +243,79 @@ MACRO(KOKKOS_PACKAGE_POSTPROCESS)
|
||||
endif()
|
||||
ENDMACRO()
|
||||
|
||||
## KOKKOS_CONFIGURE_CORE Configure/Generate header files for core content based
|
||||
## on enabled backends.
|
||||
## KOKKOS_FWD is the forward declare set
|
||||
## KOKKOS_SETUP is included in Kokkos_Macros.hpp and include prefix includes/defines
|
||||
## KOKKOS_DECLARE is the declaration set
|
||||
## KOKKOS_POST_INCLUDE is included at the end of Kokkos_Core.hpp
|
||||
MACRO(KOKKOS_CONFIGURE_CORE)
|
||||
SET(FWD_BACKEND_LIST)
|
||||
FOREACH(MEMSPACE ${KOKKOS_MEMSPACE_LIST})
|
||||
LIST(APPEND FWD_BACKEND_LIST ${MEMSPACE})
|
||||
ENDFOREACH()
|
||||
FOREACH(BACKEND_ ${KOKKOS_ENABLED_DEVICES})
|
||||
IF( ${BACKEND_} STREQUAL "PTHREAD")
|
||||
LIST(APPEND FWD_BACKEND_LIST THREADS)
|
||||
ELSE()
|
||||
LIST(APPEND FWD_BACKEND_LIST ${BACKEND_})
|
||||
ENDIF()
|
||||
ENDFOREACH()
|
||||
MESSAGE(STATUS "Kokkos Devices: ${KOKKOS_ENABLED_DEVICES}, Kokkos Backends: ${FWD_BACKEND_LIST}")
|
||||
KOKKOS_CONFIG_HEADER( KokkosCore_Config_HeaderSet.in KokkosCore_Config_FwdBackend.hpp "KOKKOS_FWD" "fwd/Kokkos_Fwd" "${FWD_BACKEND_LIST}")
|
||||
KOKKOS_CONFIG_HEADER( KokkosCore_Config_HeaderSet.in KokkosCore_Config_SetupBackend.hpp "KOKKOS_SETUP" "setup/Kokkos_Setup" "${DEVICE_SETUP_LIST}")
|
||||
KOKKOS_CONFIG_HEADER( KokkosCore_Config_HeaderSet.in KokkosCore_Config_DeclareBackend.hpp "KOKKOS_DECLARE" "decl/Kokkos_Declare" "${FWD_BACKEND_LIST}")
|
||||
KOKKOS_CONFIG_HEADER( KokkosCore_Config_HeaderSet.in KokkosCore_Config_PostInclude.hpp "KOKKOS_POST_INCLUDE" "Kokkos_Post_Include" "${KOKKOS_BACKEND_POST_INCLUDE_LIST}")
|
||||
SET(_DEFAULT_HOST_MEMSPACE "::Kokkos::HostSpace")
|
||||
KOKKOS_OPTION(DEFAULT_DEVICE_MEMORY_SPACE "" STRING "Override default device memory space")
|
||||
KOKKOS_OPTION(DEFAULT_HOST_MEMORY_SPACE "" STRING "Override default host memory space")
|
||||
KOKKOS_OPTION(DEFAULT_DEVICE_EXECUTION_SPACE "" STRING "Override default device execution space")
|
||||
KOKKOS_OPTION(DEFAULT_HOST_PARALLEL_EXECUTION_SPACE "" STRING "Override default host parallel execution space")
|
||||
IF (NOT Kokkos_DEFAULT_DEVICE_EXECUTION_SPACE STREQUAL "")
|
||||
SET(_DEVICE_PARALLEL ${Kokkos_DEFAULT_DEVICE_EXECUTION_SPACE})
|
||||
MESSAGE(STATUS "Override default device execution space: ${_DEVICE_PARALLEL}")
|
||||
SET(KOKKOS_DEVICE_SPACE_ACTIVE ON)
|
||||
ELSE()
|
||||
IF (_DEVICE_PARALLEL STREQUAL "NoTypeDefined")
|
||||
SET(KOKKOS_DEVICE_SPACE_ACTIVE OFF)
|
||||
ELSE()
|
||||
SET(KOKKOS_DEVICE_SPACE_ACTIVE ON)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
IF (NOT Kokkos_DEFAULT_HOST_PARALLEL_EXECUTION_SPACE STREQUAL "")
|
||||
SET(_HOST_PARALLEL ${Kokkos_DEFAULT_HOST_PARALLEL_EXECUTION_SPACE})
|
||||
MESSAGE(STATUS "Override default host parallel execution space: ${_HOST_PARALLEL}")
|
||||
SET(KOKKOS_HOSTPARALLEL_SPACE_ACTIVE ON)
|
||||
ELSE()
|
||||
IF (_HOST_PARALLEL STREQUAL "NoTypeDefined")
|
||||
SET(KOKKOS_HOSTPARALLEL_SPACE_ACTIVE OFF)
|
||||
ELSE()
|
||||
SET(KOKKOS_HOSTPARALLEL_SPACE_ACTIVE ON)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
#We are ready to configure the header
|
||||
CONFIGURE_FILE(cmake/KokkosCore_config.h.in KokkosCore_config.h @ONLY)
|
||||
ENDMACRO()
|
||||
|
||||
## KOKKOS_INSTALL_ADDITIONAL_FILES - instruct cmake to install files in target destination.
|
||||
## Includes generated header files, scripts such as nvcc_wrapper and hpcbind,
|
||||
## as well as other files provided through plugins.
|
||||
MACRO(KOKKOS_INSTALL_ADDITIONAL_FILES)
|
||||
# kokkos_launch_compiler is used by Kokkos to prefix compiler commands so that they forward to nvcc_wrapper
|
||||
INSTALL(PROGRAMS
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/bin/nvcc_wrapper"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/bin/hpcbind"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/bin/kokkos_launch_compiler"
|
||||
DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
INSTALL(FILES
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/KokkosCore_config.h"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/KokkosCore_Config_FwdBackend.hpp"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/KokkosCore_Config_SetupBackend.hpp"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/KokkosCore_Config_DeclareBackend.hpp"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/KokkosCore_Config_PostInclude.hpp"
|
||||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
||||
ENDMACRO()
|
||||
|
||||
FUNCTION(KOKKOS_SET_LIBRARY_PROPERTIES LIBRARY_NAME)
|
||||
CMAKE_PARSE_ARGUMENTS(PARSE
|
||||
"PLAIN_STYLE"
|
||||
|
||||
@ -1,14 +1,16 @@
|
||||
# @HEADER
|
||||
# ************************************************************************
|
||||
#
|
||||
# Trilinos: An Object-Oriented Solver Framework
|
||||
# Copyright (2001) Sandia Corporation
|
||||
# Kokkos v. 3.0
|
||||
# Copyright (2020) National Technology & Engineering
|
||||
# Solutions of Sandia, LLC (NTESS).
|
||||
#
|
||||
# Under the terms of Contract DE-NA0003525 with NTESS,
|
||||
# the U.S. Government retains certain rights in this software.
|
||||
#
|
||||
# Copyright (2001) Sandia Corporation. Under the terms of Contract
|
||||
# DE-AC04-94AL85000, there is a non-exclusive license for use of this
|
||||
# work by or on behalf of the U.S. Government. Export of this program
|
||||
# may require a license from the United States Government.
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
@ -21,10 +23,10 @@
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
|
||||
# THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY
|
||||
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE
|
||||
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
@ -33,22 +35,7 @@
|
||||
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
# NOTICE: The United States Government is granted for itself and others
|
||||
# acting on its behalf a paid-up, nonexclusive, irrevocable worldwide
|
||||
# license in this data to reproduce, prepare derivative works, and
|
||||
# perform publicly and display publicly. Beginning five (5) years from
|
||||
# July 25, 2001, the United States Government is granted for itself and
|
||||
# others acting on its behalf a paid-up, nonexclusive, irrevocable
|
||||
# worldwide license in this data to reproduce, prepare derivative works,
|
||||
# distribute copies to the public, perform publicly and display
|
||||
# publicly, and to permit others to do so.
|
||||
#
|
||||
# NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT
|
||||
# OF ENERGY, NOR SANDIA CORPORATION, NOR ANY OF THEIR EMPLOYEES, MAKES
|
||||
# ANY WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY LEGAL LIABILITY OR
|
||||
# RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR USEFULNESS OF ANY
|
||||
# INFORMATION, APPARATUS, PRODUCT, OR PROCESS DISCLOSED, OR REPRESENTS
|
||||
# THAT ITS USE WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS.
|
||||
# Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
#
|
||||
# ************************************************************************
|
||||
# @HEADER
|
||||
|
||||
@ -1,14 +1,16 @@
|
||||
# @HEADER
|
||||
# ************************************************************************
|
||||
#
|
||||
# Trilinos: An Object-Oriented Solver Framework
|
||||
# Copyright (2001) Sandia Corporation
|
||||
# Kokkos v. 3.0
|
||||
# Copyright (2020) National Technology & Engineering
|
||||
# Solutions of Sandia, LLC (NTESS).
|
||||
#
|
||||
# Under the terms of Contract DE-NA0003525 with NTESS,
|
||||
# the U.S. Government retains certain rights in this software.
|
||||
#
|
||||
# Copyright (2001) Sandia Corporation. Under the terms of Contract
|
||||
# DE-AC04-94AL85000, there is a non-exclusive license for use of this
|
||||
# work by or on behalf of the U.S. Government. Export of this program
|
||||
# may require a license from the United States Government.
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
@ -21,10 +23,10 @@
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
|
||||
# THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY
|
||||
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE
|
||||
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
@ -33,22 +35,7 @@
|
||||
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
# NOTICE: The United States Government is granted for itself and others
|
||||
# acting on its behalf a paid-up, nonexclusive, irrevocable worldwide
|
||||
# license in this data to reproduce, prepare derivative works, and
|
||||
# perform publicly and display publicly. Beginning five (5) years from
|
||||
# July 25, 2001, the United States Government is granted for itself and
|
||||
# others acting on its behalf a paid-up, nonexclusive, irrevocable
|
||||
# worldwide license in this data to reproduce, prepare derivative works,
|
||||
# distribute copies to the public, perform publicly and display
|
||||
# publicly, and to permit others to do so.
|
||||
#
|
||||
# NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT
|
||||
# OF ENERGY, NOR SANDIA CORPORATION, NOR ANY OF THEIR EMPLOYEES, MAKES
|
||||
# ANY WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY LEGAL LIABILITY OR
|
||||
# RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR USEFULNESS OF ANY
|
||||
# INFORMATION, APPARATUS, PRODUCT, OR PROCESS DISCLOSED, OR REPRESENTS
|
||||
# THAT ITS USE WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS.
|
||||
# Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
#
|
||||
# ************************************************************************
|
||||
# @HEADER
|
||||
|
||||
@ -1,14 +1,16 @@
|
||||
# @HEADER
|
||||
# ************************************************************************
|
||||
#
|
||||
# Trilinos: An Object-Oriented Solver Framework
|
||||
# Copyright (2001) Sandia Corporation
|
||||
# Kokkos v. 3.0
|
||||
# Copyright (2020) National Technology & Engineering
|
||||
# Solutions of Sandia, LLC (NTESS).
|
||||
#
|
||||
# Under the terms of Contract DE-NA0003525 with NTESS,
|
||||
# the U.S. Government retains certain rights in this software.
|
||||
#
|
||||
# Copyright (2001) Sandia Corporation. Under the terms of Contract
|
||||
# DE-AC04-94AL85000, there is a non-exclusive license for use of this
|
||||
# work by or on behalf of the U.S. Government. Export of this program
|
||||
# may require a license from the United States Government.
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
@ -21,10 +23,10 @@
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
|
||||
# THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY
|
||||
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE
|
||||
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
@ -33,22 +35,7 @@
|
||||
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
# NOTICE: The United States Government is granted for itself and others
|
||||
# acting on its behalf a paid-up, nonexclusive, irrevocable worldwide
|
||||
# license in this data to reproduce, prepare derivative works, and
|
||||
# perform publicly and display publicly. Beginning five (5) years from
|
||||
# July 25, 2001, the United States Government is granted for itself and
|
||||
# others acting on its behalf a paid-up, nonexclusive, irrevocable
|
||||
# worldwide license in this data to reproduce, prepare derivative works,
|
||||
# distribute copies to the public, perform publicly and display
|
||||
# publicly, and to permit others to do so.
|
||||
#
|
||||
# NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT
|
||||
# OF ENERGY, NOR SANDIA CORPORATION, NOR ANY OF THEIR EMPLOYEES, MAKES
|
||||
# ANY WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY LEGAL LIABILITY OR
|
||||
# RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR USEFULNESS OF ANY
|
||||
# INFORMATION, APPARATUS, PRODUCT, OR PROCESS DISCLOSED, OR REPRESENTS
|
||||
# THAT ITS USE WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS.
|
||||
# Questions? Contact Christian R. Trott (crtrott@sandia.gov)
|
||||
#
|
||||
# ************************************************************************
|
||||
# @HEADER
|
||||
|
||||
Reference in New Issue
Block a user