clab / dynet

DyNet: The Dynamic Neural Network Toolkit
Apache License 2.0
3.42k stars 704 forks source link

DyNet may not compile with CUDA 9.0 #988

Closed neubig closed 6 years ago

neubig commented 6 years ago

I have gotten a report that DyNet doesn't compile with CUDA 9.0, but haven't confirmed myself.

stefan-it commented 6 years ago

I can reproduce this error.

Output of cmake:

cmake .. -DEIGEN3_INCLUDE_DIR=../eigen/ -DENABLE_CPP_EXAMPLES=ON -DBACKEND=cuda
-- The C compiler identification is GNU 5.4.0
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- BACKEND: cuda
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - not found
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE  
-- Found CUDA: /usr/local/cuda (found version "9.0") 
CUDA_LIBRARIES: /usr/local/cuda/lib64/libcudart_static.a;-lpthread;dl;/usr/lib/x86_64-linux-gnu/librt.so
-- Found CUDNN (include: /usr/include, library: /usr/lib/x86_64-linux-gnu/libcudnn.so)
-- Successfully include CUDNN flags
-- Eigen dir is /tmp/dynet/eigen
-- Configuring done
-- Generating done
-- Build files have been written to: /tmp/dynet/build

So CUDA 9 and cudnn are found.

Here's the error message running make VERBOSE=1:

di36zem@1b6ed7580408:/tmp/dynet/build$ make VERBOSE=1
/usr/bin/cmake -H/tmp/dynet -B/tmp/dynet/build --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /tmp/dynet/build/CMakeFiles /tmp/dynet/build/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make[1]: Entering directory '/tmp/dynet/build'
make -f dynet/CMakeFiles/dynet.dir/build.make dynet/CMakeFiles/dynet.dir/depend
make[2]: Entering directory '/tmp/dynet/build'
[  1%] Building NVCC (Device) object dynet/CMakeFiles/dynet.dir/dynet_generated_gpu-merge3.cu.o
cd /tmp/dynet/build/dynet/CMakeFiles/dynet.dir && /usr/bin/cmake -E make_directory /tmp/dynet/build/dynet/CMakeFiles/dynet.dir//.
cd /tmp/dynet/build/dynet/CMakeFiles/dynet.dir && /usr/bin/cmake -D verbose:BOOL=1 -D build_configuration:STRING=Release -D generated_file:STRING=/tmp/dynet/build/dynet/CMakeFiles/dynet.dir//./dynet_generated_gpu-merge3.cu.o -D generated_cubin_file:STRING=/tmp/dynet/build/dynet/CMakeFiles/dynet.dir//./dynet_generated_gpu-merge3.cu.o.cubin.txt -P /tmp/dynet/build/dynet/CMakeFiles/dynet.dir//dynet_generated_gpu-merge3.cu.o.cmake
-- Removing /tmp/dynet/build/dynet/CMakeFiles/dynet.dir//./dynet_generated_gpu-merge3.cu.o
/usr/bin/cmake -E remove /tmp/dynet/build/dynet/CMakeFiles/dynet.dir//./dynet_generated_gpu-merge3.cu.o
-- Generating dependency file: /tmp/dynet/build/dynet/CMakeFiles/dynet.dir//dynet_generated_gpu-merge3.cu.o.NVCC-depend
/usr/local/cuda/bin/nvcc -M -D__CUDACC__ /tmp/dynet/build/dynet/gpu-merge3.cu -o /tmp/dynet/build/dynet/CMakeFiles/dynet.dir//dynet_generated_gpu-merge3.cu.o.NVCC-depend -ccbin /usr/bin/cc -m64 -Ddynet_EXPORTS -Xcompiler ,\"-fPIC\" -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_37,code=sm_37 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_52,code=sm_52 -gencode arch=compute_52,code=compute_52 -std=c++11 -DVERBOSE -DEIGEN_USE_GPU -DHAVE_CUDA -DHAVE_CUDNN -O2 --compiler-options -fPIC -DNVCC -I/usr/local/cuda/include -I/tmp/dynet -I/tmp/dynet/external/easyloggingpp/src -I/usr/local/cuda/include -I/usr/include -I/tmp/dynet/eigen -I/tmp/dynet/build
In file included from /usr/local/cuda/include/common_functions.h:50:0,
                 from /usr/local/cuda/include/cuda_runtime.h:115,
                 from <command-line>:0:
/usr/local/cuda/include/crt/common_functions.h:64:24: error: token ""__CUDACC_VER__ is no longer supported.  Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead."" is not valid in preprocessor expressions
 #define __CUDACC_VER__ "__CUDACC_VER__ is no longer supported.  Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead."
                        ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/util/Macros.h:403:85: note: in expansion of macro ‘__CUDACC_VER__’
   && ( !defined(__NVCC__) || !EIGEN_ARCH_ARM_OR_ARM64 || (defined __CUDACC_VER__ && __CUDACC_VER__ >= 80000) )
                                                                                     ^
/usr/local/cuda/include/crt/common_functions.h:64:24: error: token ""__CUDACC_VER__ is no longer supported.  Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead."" is not valid in preprocessor expressions
 #define __CUDACC_VER__ "__CUDACC_VER__ is no longer supported.  Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead."
                        ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/util/Macros.h:417:104: note: in expansion of macro ‘__CUDACC_VER__’
 #if EIGEN_MAX_CPP_VER>=14 && (__cplusplus > 199711L && defined(__CUDACC_VER__) && (EIGEN_COMP_CLANG || __CUDACC_VER__ >= 70500))
                                                                                                        ^
/usr/local/cuda/include/crt/common_functions.h:64:24: error: token ""__CUDACC_VER__ is no longer supported.  Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead."" is not valid in preprocessor expressions
 #define __CUDACC_VER__ "__CUDACC_VER__ is no longer supported.  Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead."
                        ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/util/Macros.h:816:59: note: in expansion of macro ‘__CUDACC_VER__’
 #if EIGEN_COMP_MSVC_STRICT && (EIGEN_COMP_MSVC < 1900 ||  __CUDACC_VER__) // for older MSVC versions, as well as 1900 && CUDA 8, using the base operator is sufficient (cf Bugs 1000, 1324)
                                                           ^
/usr/local/cuda/include/crt/common_functions.h:64:24: error: token ""__CUDACC_VER__ is no longer supported.  Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead."" is not valid in preprocessor expressions
 #define __CUDACC_VER__ "__CUDACC_VER__ is no longer supported.  Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead."
                        ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/Core:230:33: note: in expansion of macro ‘__CUDACC_VER__’
   #if defined __CUDACC_VER__ && __CUDACC_VER__ >= 70500
                                 ^
/usr/local/cuda/include/crt/common_functions.h:64:24: error: token ""__CUDACC_VER__ is no longer supported.  Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead."" is not valid in preprocessor expressions
 #define __CUDACC_VER__ "__CUDACC_VER__ is no longer supported.  Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead."
                        ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:389:31: note: in expansion of macro ‘__CUDACC_VER__’
 #if defined __CUDACC_VER__ && __CUDACC_VER__ >= 80000 && defined __CUDA_ARCH__ && __CUDA_ARCH__ >= 530
                               ^
/usr/local/cuda/include/crt/common_functions.h:64:24: error: token ""__CUDACC_VER__ is no longer supported.  Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead."" is not valid in preprocessor expressions
 #define __CUDACC_VER__ "__CUDACC_VER__ is no longer supported.  Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead."
                        ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:396:63: note: in expansion of macro ‘__CUDACC_VER__’
 #if defined(EIGEN_HAS_CUDA_FP16) && defined __CUDACC_VER__ && __CUDACC_VER__ >= 80000 && defined(__CUDA_ARCH__) && __CUDA_ARCH__ >= 530
                                                               ^
/usr/local/cuda/include/crt/common_functions.h:64:24: error: token ""__CUDACC_VER__ is no longer supported.  Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead."" is not valid in preprocessor expressions
 #define __CUDACC_VER__ "__CUDACC_VER__ is no longer supported.  Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead."
                        ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:409:31: note: in expansion of macro ‘__CUDACC_VER__’
 #if defined __CUDACC_VER__ && __CUDACC_VER__ >= 80000 && defined __CUDA_ARCH__ && __CUDA_ARCH__ >= 530
                               ^
/usr/local/cuda/include/crt/common_functions.h:64:24: error: token ""__CUDACC_VER__ is no longer supported.  Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead."" is not valid in preprocessor expressions
 #define __CUDACC_VER__ "__CUDACC_VER__ is no longer supported.  Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead."
                        ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:431:31: note: in expansion of macro ‘__CUDACC_VER__’
 #if defined __CUDACC_VER__ && __CUDACC_VER__ >= 80000 && defined __CUDA_ARCH__ && __CUDA_ARCH__ >= 300
                               ^
/usr/local/cuda/include/crt/common_functions.h:64:24: error: token ""__CUDACC_VER__ is no longer supported.  Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead."" is not valid in preprocessor expressions
 #define __CUDACC_VER__ "__CUDACC_VER__ is no longer supported.  Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead."
                        ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:438:31: note: in expansion of macro ‘__CUDACC_VER__’
 #if defined __CUDACC_VER__ && __CUDACC_VER__ >= 80000 && defined __CUDA_ARCH__ && __CUDA_ARCH__ >= 300
                               ^
/usr/local/cuda/include/crt/common_functions.h:64:24: error: token ""__CUDACC_VER__ is no longer supported.  Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead."" is not valid in preprocessor expressions
 #define __CUDACC_VER__ "__CUDACC_VER__ is no longer supported.  Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead."
                        ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:526:31: note: in expansion of macro ‘__CUDACC_VER__’
 #if defined __CUDACC_VER__ && __CUDACC_VER__ >= 80000 && defined(__CUDA_ARCH__) && __CUDA_ARCH__ >= 530
                               ^
CMake Error at dynet_generated_gpu-merge3.cu.o.cmake:203 (message):
  Error generating
  /tmp/dynet/build/dynet/CMakeFiles/dynet.dir//./dynet_generated_gpu-merge3.cu.o

dynet/CMakeFiles/dynet.dir/build.make:98: recipe for target 'dynet/CMakeFiles/dynet.dir/dynet_generated_gpu-merge3.cu.o' failed
make[2]: *** [dynet/CMakeFiles/dynet.dir/dynet_generated_gpu-merge3.cu.o] Error 1
make[2]: Leaving directory '/tmp/dynet/build'
CMakeFiles/Makefile2:85: recipe for target 'dynet/CMakeFiles/dynet.dir/all' failed
make[1]: *** [dynet/CMakeFiles/dynet.dir/all] Error 2
make[1]: Leaving directory '/tmp/dynet/build'
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2

I used the following version of eigen as it is described in the current version of dynets README.md:

hg clone https://bitbucket.org/eigen/eigen/ -r 346ecdb

After that I used the latest version of eigen - the compilation also failed. Then I used the revision version where CUDA 9 was first introduced to eigen: here, compilation also failed with:

In file included from /tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/Core:433:0,
                 from /tmp/dynet/eigen/unsupported/Eigen/CXX11/Tensor:14,
                 from /tmp/dynet/dynet/devices.h:10,
                 from /tmp/dynet/dynet/dynet.h:17,
                 from /tmp/dynet/dynet/cfsm-builder.h:15,
                 from /tmp/dynet/dynet/cfsm-builder.cc:1:
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h: In member function ‘Eigen::half::operator bool() const’:
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:103:13: error: ‘x’ was not declared in this scope
     return (x & 0x7fff) != 0;
             ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h: In member function ‘Eigen::half& Eigen::half::operator=(const Eigen::half&)’:
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:143:5: error: ‘x’ was not declared in this scope
     x = other.x;
     ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:143:15: error: ‘const struct Eigen::half’ has no member named ‘x’
     x = other.x;
               ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h: In function ‘Eigen::half Eigen::half_impl::operator-(const Eigen::half&)’:
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:228:10: error: ‘struct Eigen::half’ has no member named ‘x’
   result.x = a.x ^ 0x8000;
          ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:228:16: error: ‘const struct Eigen::half’ has no member named ‘x’
   result.x = a.x ^ 0x8000;
                ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h: In function ‘Eigen::half_impl::__half_raw Eigen::half_impl::raw_uint16_to_half(short unsigned int)’:
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:281:5: error: ‘Eigen::half_impl::__half_raw {aka struct __half}’ has no member named ‘x’
   h.x = x;
     ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h: In function ‘Eigen::half_impl::__half_raw Eigen::half_impl::float_to_half_rtne(float)’:
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:308:5: error: ‘Eigen::half_impl::__half_raw {aka struct __half}’ has no member named ‘x’
   o.x = static_cast<unsigned short>(0x0u);
     ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:319:7: error: ‘Eigen::half_impl::__half_raw {aka struct __half}’ has no member named ‘x’
     o.x = (f.u > f32infty.u) ? 0x7e00 : 0x7c00; // NaN->qNaN and Inf->Inf
neubig commented 6 years ago

Ahh, it looks like the instructions on README.md are a little bit stale. Could you try following the instructions here? http://dynet.readthedocs.io/en/latest/install.html#installing-dynet-for-c

The only difference is the version of Eigen that you install I think.

stefan-it commented 6 years ago

Ok, I used:

hg clone https://bitbucket.org/eigen/eigen/ -r 699b659

Here's the error log:

[  6%] Building CXX object dynet/CMakeFiles/dynet.dir/cfsm-builder.cc.o
In file included from /tmp/dynet/dynet/cfsm-builder.cc:1:
In file included from /tmp/dynet/dynet/cfsm-builder.h:15:
In file included from /tmp/dynet/dynet/dynet.h:17:
In file included from /tmp/dynet/dynet/devices.h:10:
In file included from /tmp/dynet/eigen/unsupported/Eigen/CXX11/Tensor:14:
In file included from /tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/Core:433:
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:103:13: error: 
      use of undeclared identifier 'x'
    return (x & 0x7fff) != 0;
            ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:143:5: error: 
      use of undeclared identifier 'x'
    x = other.x;
    ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:143:15: error: 
      no member named 'x' in 'Eigen::half'
    x = other.x;
        ~~~~~ ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:228:10: error: 
      no member named 'x' in 'Eigen::half'
  result.x = a.x ^ 0x8000;
  ~~~~~~ ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:228:16: error: 
      no member named 'x' in 'Eigen::half'
  result.x = a.x ^ 0x8000;
             ~ ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:281:5: error: 
      no member named 'x' in '__half'
  h.x = x;
  ~ ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:308:5: error: 
      no member named 'x' in '__half'
  o.x = static_cast<unsigned short>(0x0u);
  ~ ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:319:7: error: 
      no member named 'x' in '__half'
    o.x = (f.u > f32infty.u) ? 0x7e00 : 0x7c00; // NaN->qNaN and Inf->Inf
    ~ ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:328:9: error: 
      no member named 'x' in '__half'
      o.x = static_cast<unsigned short>(f.u - denorm_magic.u);
      ~ ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:337:9: error: 
      no member named 'x' in '__half'
      o.x = static_cast<unsigned short>(f.u >> 13);
      ~ ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:341:5: error: 
      no member named 'x' in '__half'
  o.x |= static_cast<unsigned short>(sign >> 16);
  ~ ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:358:12: error: 
      no member named 'x' in '__half'
  o.u = (h.x & 0x7fff) << 13;             // exponent/mantissa bits
         ~ ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:370:13: error: 
      no member named 'x' in '__half'
  o.u |= (h.x & 0x8000) << 16;    // sign bit
          ~ ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:378:13: error: 
      no member named 'x' in 'Eigen::half'
  return (a.x & 0x7fff) == 0x7c00;
          ~ ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:384:13: error: 
      no member named 'x' in 'Eigen::half'
  return (a.x & 0x7fff) > 0x7c00;
          ~ ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:393:10: error: 
      no member named 'x' in 'Eigen::half'
  result.x = a.x & 0x7FFF;
  ~~~~~~ ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:393:16: error: 
      no member named 'x' in 'Eigen::half'
  result.x = a.x & 0x7FFF;
             ~ ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:580:10: error: 
      no member named 'x' in 'Eigen::half'
  result.x = a.x & 0x7FFF;
  ~~~~~~ ^
/tmp/dynet/eigen/unsupported/Eigen/CXX11/../../../Eigen/src/Core/arch/CUDA/Half.h:580:16: error: 
      no member named 'x' in 'Eigen::half'
  result.x = a.x & 0x7FFF;
             ~ ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
dynet/CMakeFiles/dynet.dir/build.make:137: recipe for target 'dynet/CMakeFiles/dynet.dir/cfsm-builder.cc.o' failed
make[2]: *** [dynet/CMakeFiles/dynet.dir/cfsm-builder.cc.o] Error 1
CMakeFiles/Makefile2:85: recipe for target 'dynet/CMakeFiles/dynet.dir/all' failed
make[1]: *** [dynet/CMakeFiles/dynet.dir/all] Error 2
Makefile:138: recipe for target 'all' failed
make: *** [all] Error 2
neubig commented 6 years ago

OK, thanks. It looks like Eigen is indeed not playing well with CUDA 9.0. We'll have to investigate further.

mrwangzk commented 6 years ago

Hi,I met exactly the same problem when trying to compile DyNet with cuda9.0. The error log is similar with that "struct Eigen::half has no member named 'X' "or "undeclared 'X'". Do you know how to figure out this problem? Thanks!

pmichel31415 commented 6 years ago

Which versions of Eigen and Dynet are you using?

mrwangzk commented 6 years ago

The version of eigen is 3.3.90, a git mirror on github. The version of DyNet is 2.0.