kokkos / kokkos-kernels

Kokkos C++ Performance Portability Programming Ecosystem: Math Kernels - Provides BLAS, Sparse BLAS and Graph Kernels
Other
305 stars 96 forks source link

Compilation error: no matching function for call to 'isinf' when building from Trilinos using clang 7 + cuda 9.2 #331

Open Char-Aznable opened 6 years ago

Char-Aznable commented 6 years ago

Here's the error message:

[ 11%] Building CXX object packages/kokkos-kernels/src/CMakeFiles/kokkoskernels.dir/impl/generated_specializations_cpp/abs/KokkosBlas1_abs_eti_spec_inst_double_LayoutLeft_Serial_HostSpace.cpp.o
cd /tmp/56006025.1.long.q/build_trilinos_omp_cuda_clang/packages/kokkos-kernels/src && /home/aznb/.linuxbrew/opt/llvm/bin/clang++   -I/tmp/56006025.1.long.q/build_trilinos_omp_cuda_clang -I/tmp/56006025.1.long.q/build_trilinos_omp_cuda_clang/packages/kokkos-kernels/src -I/home/aznb/mycodes/Trilinos/packages/kokkos-kernels/src -I/home/aznb/mycodes/Trilinos/packages/kokkos-kernels/src/impl -I/home/aznb/mycodes/Trilinos/packages/kokkos-kernels/src/impl/tpls -I/home/aznb/mycodes/Trilinos/packages/kokkos-kernels/src/blas -I/home/aznb/mycodes/Trilinos/packages/kokkos-kernels/src/blas/impl -I/home/aznb/mycodes/Trilinos/packages/kokkos-kernels/src/sparse -I/home/aznb/mycodes/Trilinos/packages/kokkos-kernels/src/sparse/impl -I/home/aznb/mycodes/Trilinos/packages/kokkos-kernels/src/graph -I/home/aznb/mycodes/Trilinos/packages/kokkos-kernels/src/graph/impl -I/home/aznb/mycodes/Trilinos/packages/kokkos-kernels/src/batched -I/home/aznb/mycodes/Trilinos/packages/kokkos-kernels/src/batched/impl -I/home/aznb/mycodes/Trilinos/packages/kokkos-kernels/src/common -I/tmp/56006025.1.long.q/build_trilinos_omp_cuda_clang/packages/kokkos/algorithms/src -I/home/aznb/mycodes/Trilinos/packages/kokkos/algorithms/src -I/tmp/56006025.1.long.q/build_trilinos_omp_cuda_clang/packages/kokkos/containers/src -I/home/aznb/mycodes/Trilinos/packages/kokkos/containers/src -I/tmp/56006025.1.long.q/build_trilinos_omp_cuda_clang/packages/kokkos/core/src -I/home/aznb/mycodes/Trilinos/packages/kokkos/core/src -I/net/gs/vol3/software/modules-sw/cuda/9.2/Linux/RHEL6/x86_64/include -I/home/aznb/mycodes/Trilinos/packages/kokkos-kernels/src/impl/generated_specializations_hpp  --std=c++11 -mavx  --cuda-path=/net/gs/vol3/software/modules-sw/cuda/9.2/Linux/RHEL6/x86_64 -fopenmp=libomp --gcc-toolchain=/home/aznb/.linuxbrew     -O3 -DNDEBUG   --cuda-gpu-arch=sm_61 -x cuda -o CMakeFiles/kokkoskernels.dir/impl/generated_specializations_cpp/abs/KokkosBlas1_abs_eti_spec_inst_double_LayoutLeft_Serial_HostSpace.cpp.o -c /home/aznb/mycodes/Trilinos/packages/kokkos-kernels/src/impl/generated_specializations_cpp/abs/KokkosBlas1_abs_eti_spec_inst_double_LayoutLeft_Serial_HostSpace.cpp
In file included from /home/aznb/mycodes/Trilinos/packages/kokkos-kernels/src/impl/generated_specializations_cpp/abs/KokkosBlas1_abs_eti_spec_inst_double_LayoutLeft_Serial_HostSpace.cpp:51:
In file included from /home/aznb/mycodes/Trilinos/packages/kokkos-kernels/src/blas/impl/KokkosBlas1_abs_spec.hpp:48:
/home/aznb/mycodes/Trilinos/packages/kokkos-kernels/src/Kokkos_ArithTraits.hpp:1192:12: error: no matching function for call to 'isinf'
    return isinf (x);
           ^~~~~
/home/aznb/.linuxbrew/Cellar/llvm/7.0.0_2/lib/clang/7.0.0/include/__clang_cuda_cmath.h:232:42: note: candidate template ignored: substitution failure [with __T = long double]: no type named 'type' in '__clang_cuda_enable_if<false, bool>'
__CUDA_CLANG_FN_INTEGER_OVERLOAD_1(bool, isinf);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~
/home/aznb/.linuxbrew/Cellar/llvm/7.0.0_2/lib/clang/7.0.0/include/__clang_cuda_cmath.h:184:7: note: expanded from macro '__CUDA_CLANG_FN_INTEGER_OVERLOAD_1'
      __fn(__T __x) {                                                          \
      ^
/home/aznb/.linuxbrew/Cellar/llvm/7.0.0_2/lib/clang/7.0.0/include/__clang_cuda_cmath.h:79:17: note: candidate function not viable: call to __device__ function from __host__ function
__DEVICE__ bool isinf(float __x) { return ::__isinff(__x); }
                ^
/home/aznb/.linuxbrew/Cellar/llvm/7.0.0_2/lib/clang/7.0.0/include/__clang_cuda_cmath.h:80:17: note: candidate function not viable: call to __device__ function from __host__ function
__DEVICE__ bool isinf(double __x) { return ::__isinf(__x); }
                ^
In file included from /home/aznb/mycodes/Trilinos/packages/kokkos-kernels/src/impl/generated_specializations_cpp/abs/KokkosBlas1_abs_eti_spec_inst_double_LayoutLeft_Serial_HostSpace.cpp:51:
In file included from /home/aznb/mycodes/Trilinos/packages/kokkos-kernels/src/blas/impl/KokkosBlas1_abs_spec.hpp:48:
/home/aznb/mycodes/Trilinos/packages/kokkos-kernels/src/Kokkos_ArithTraits.hpp:1198:12: error: no matching function for call to 'isnan'
    return isnan (x);
           ^~~~~
/home/aznb/.linuxbrew/Cellar/llvm/7.0.0_2/lib/clang/7.0.0/include/__clang_cuda_cmath.h:236:42: note: candidate template ignored: substitution failure [with __T = long double]: no type named 'type' in '__clang_cuda_enable_if<false, bool>'
__CUDA_CLANG_FN_INTEGER_OVERLOAD_1(bool, isnan);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~
/home/aznb/.linuxbrew/Cellar/llvm/7.0.0_2/lib/clang/7.0.0/include/__clang_cuda_cmath.h:184:7: note: expanded from macro '__CUDA_CLANG_FN_INTEGER_OVERLOAD_1'
      __fn(__T __x) {                                                          \
      ^
/home/aznb/.linuxbrew/Cellar/llvm/7.0.0_2/lib/clang/7.0.0/include/__clang_cuda_cmath.h:86:17: note: candidate function not viable: call to __device__ function from __host__ function
__DEVICE__ bool isnan(float __x) { return ::__isnanf(__x); }
                ^
/home/aznb/.linuxbrew/Cellar/llvm/7.0.0_2/lib/clang/7.0.0/include/__clang_cuda_cmath.h:87:17: note: candidate function not viable: call to __device__ function from __host__ function
__DEVICE__ bool isnan(double __x) { return ::__isnan(__x); }
                ^
2 errors generated when compiling for sm_61.

The cmake options are:

BREW=$(brew --prefix)
INC=$BREW/include
LIB=$BREW/lib
BIN=$BREW/bin
CLANG=$BREW/opt/llvm
CLANGBIN=$CLANG/bin
TrilinosDir="$BREW/../mycodes/Trilinos"
VERSION=`git --git-dir=${TrilinosDir}/.git rev-parse --short HEAD`"-clang-omp-cuda"

cmake ${TrilinosDir} \
-DCMAKE_PREFIX_PATH=$BREW \
-DCMAKE_CXX_COMPILER=$CLANGBIN/clang++ \
-DCMAKE_C_COMPILER=$CLANGBIN/clang \
-DCMAKE_BUILD_TYPE=Release \
-DTrilinos_ENABLE_Fortran=OFF \
-DTrilinos_ENABLE_ALL_PACKAGES=OFF \
-DTrilinos_ENABLE_ALL_OPTIONAL_PACKAGES=OFF \
-DTrilinos_ASSERT_MISSING_PACKAGES=OFF \
-DTrilinos_ENABLE_TESTS=OFF \
-DTrilinos_ENABLE_EXAMPLES=OFF \
-DTrilinos_ENABLE_Kokkos=ON \
-DTrilinos_ENABLE_ROL=ON \
-DTrilinos_ENABLE_Tpetra=ON \
-DTrilinos_CXX_FLAGS="--expt-extended-lambda" \
-DKOKKOS_ENABLE_CUDA=ON \
-DKOKKOS_ENABLE_CUDA_UVM=ON \
-DKOKKOS_ARCH="SNB;Pascal61" \
-DKOKKOS_ENABLE_CUDA_LAMBDA=ON \
-DTpetra_ENABLE_EXPLICIT_INSTANTIATION=ON \
-DTpetra_INST_SERIAL=ON \
-DTpetra_INST_OPENMP=ON \
-DTrilinos_ENABLE_OpenMP=ON \
-DTPL_ENABLE_Pthread=OFF \
-DTPL_ENABLE_CUDA=ON \
-DTrilinos_ENABLE_EXPLICIT_INSTANTIATION=ON \
-DCMAKE_INSTALL_PREFIX=${BREW}/Cellar/Trilinos/${VERSION}

No such error if built using clang 6 + cuda 9.0 with same set of cmake options

mhoemmen commented 6 years ago

@kyungjoo-kim Hm, it looks like something got promoted to long double that wasn't getting promoted before.