clstm icon indicating copy to clipboard operation
clstm copied to clipboard

How to use GPU to speed up in clstm?

Open Halfish opened this issue 8 years ago • 19 comments

when I try to use command like this to compile scons -j 4 gpu=1 clstmocrtrain clstmocr but failed to enable GPU, what is the right things to do to use GPU to speed up the training process?

Halfish avatar Feb 18 '16 09:02 Halfish

one thing to note that is not directly mentioned is that the required minimum CUDA compute capability is 3.0

ASDen avatar Feb 18 '16 10:02 ASDen

@ASDen Yes, the GPU in my school lab is powerful enough. But I wonder how to enable the GPU, because I got compile error when I run scons gpu=1 clstmocrtrain. Here is the nvcc.log

In file included from clstm_compute_cuda.cc:9:0:
clstm_compute.cc:49:0: warning: "CLSTM_ALL_TENSOR" redefined [enabled by default]
 #define CLSTM_ALL_TENSOR
 ^
<command-line>:0:0: note: this is the location of the previous definition
utils.h(230): warning: statement is unreachable

utils.h(247): warning: statement is unreachable

/usr/local/include/eigen3/Eigen/src/Core/util/Memory.h(585): warning: calling a __host__ function from a __host__ __device__ function is not allowed
          detected during:
            instantiation of "void Eigen::internal::smart_copy_helper<T, false>::run(const T *, const T *, T *) [with T=ocropus::IndexPair]" 
(575): here
            instantiation of "void Eigen::internal::smart_copy(const T *, const T *, T *) [with T=ocropus::IndexPair]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Core/util/EmulateArray.h(114): here
            instantiation of "Eigen::array<T, n>::array(std::initializer_list<T>) [with T=ocropus::IndexPair, n=1UL]" 
clstm_compute.cc(101): here

/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionMapper.h(251): warning: dynamic initialization in unreachable code
          detected during:
            instantiation of "Eigen::internal::BaseTensorContractionMapper<Scalar, Index, side, Tensor, nocontract_t, contract_t, packet_size, inner_dim_contiguous, inner_dim_reordered, Alignment>::Packet Eigen::internal::BaseTensorContractionMapper<Scalar, Index, side, Tensor, nocontract_t, contract_t, packet_size, inner_dim_contiguous, inner_dim_reordered, Alignment>::loadPacket(Index, Index) const [with Scalar=ocropus::Float, Index=Eigen::DenseIndex, side=1, Tensor=Eigen::TensorEvaluator<const ocropus::TensorMap2, Eigen::GpuDevice>, nocontract_t=Eigen::array<Eigen::DenseIndex, 1UL>, contract_t=Eigen::array<Eigen::DenseIndex, 1UL>, packet_size=4, inner_dim_contiguous=true, inner_dim_reordered=false, Alignment=0, AlignmentType=0]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h(572): here
            instantiation of "void Eigen::EigenFloatContractionKernelInternal16x16<Index,LhsMapper,RhsMapper,OutputMapper,CHECK_LHS_BOUNDARY,CHECK_RHS_BOUNDARY>(LhsMapper, RhsMapper, OutputMapper, float2 (*)[16], float2 (*)[8], Index, Index, Index, Index, Index) [with Index=Eigen::DenseIndex, LhsMapper=Eigen::internal::TensorContractionInputMapper<ocropus::Float, Eigen::DenseIndex, 1, Eigen::TensorEvaluator<const ocropus::TensorMap2, Eigen::GpuDevice>, Eigen::array<Eigen::DenseIndex, 1UL>, Eigen::array<Eigen::DenseIndex, 1UL>, 4, true, false, 0>, RhsMapper=Eigen::internal::TensorContractionInputMapper<ocropus::Float, Eigen::DenseIndex, 0, Eigen::TensorEvaluator<const ocropus::TensorMap2, Eigen::GpuDevice>, Eigen::array<Eigen::DenseIndex, 1UL>, Eigen::array<Eigen::DenseIndex, 1UL>, 4, true, true, 0>, OutputMapper=Eigen::internal::blas_data_mapper<ocropus::Float, Eigen::DenseIndex, 0, 0>, CHECK_LHS_BOUNDARY=false, CHECK_RHS_BOUNDARY=false]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h(1190): here
            instantiation of "void Eigen::EigenFloatContractionKernel16x16(LhsMapper, RhsMapper, OutputMapper, Index, Index, Index) [with Index=Eigen::DenseIndex, LhsMapper=Eigen::internal::TensorContractionInputMapper<ocropus::Float, Eigen::DenseIndex, 1, Eigen::TensorEvaluator<const ocropus::TensorMap2, Eigen::GpuDevice>, Eigen::array<Eigen::DenseIndex, 1UL>, Eigen::array<Eigen::DenseIndex, 1UL>, 4, true, false, 0>, RhsMapper=Eigen::internal::TensorContractionInputMapper<ocropus::Float, Eigen::DenseIndex, 0, Eigen::TensorEvaluator<const ocropus::TensorMap2, Eigen::GpuDevice>, Eigen::array<Eigen::DenseIndex, 1UL>, Eigen::array<Eigen::DenseIndex, 1UL>, 4, true, true, 0>, OutputMapper=Eigen::internal::blas_data_mapper<ocropus::Float, Eigen::DenseIndex, 0, 0>]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h(1363): here
            instantiation of "void Eigen::TensorEvaluator<const Eigen::TensorContractionOp<Indices, LeftArgType, RightArgType>, Eigen::GpuDevice>::evalTyped<lhs_inner_dim_contiguous,rhs_inner_dim_contiguous,rhs_inner_dim_reordered,Alignment>(Eigen::TensorEvaluator<const Eigen::TensorContractionOp<Indices, LeftArgType, RightArgType>, Eigen::GpuDevice>::Scalar *) const [with Indices=const ocropus::Axes1, LeftArgType=const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, RightArgType=const ocropus::TensorMap2, lhs_inner_dim_contiguous=true, rhs_inner_dim_contiguous=true, rhs_inner_dim_reordered=true, Alignment=0]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h(1281): here
            instantiation of "void Eigen::TensorEvaluator<const Eigen::TensorContractionOp<Indices, LeftArgType, RightArgType>, Eigen::GpuDevice>::evalTo(Eigen::TensorEvaluator<const Eigen::TensorContractionOp<Indices, LeftArgType, RightArgType>, Eigen::GpuDevice>::Scalar *) const [with Indices=const ocropus::Axes1, LeftArgType=const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, RightArgType=const ocropus::TensorMap2]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h(1268): here
            instantiation of "__nv_bool Eigen::TensorEvaluator<const Eigen::TensorContractionOp<Indices, LeftArgType, RightArgType>, Eigen::GpuDevice>::evalSubExprsIfNeeded(Eigen::TensorEvaluator<const Eigen::TensorContractionOp<Indices, LeftArgType, RightArgType>, Eigen::GpuDevice>::Scalar *) [with Indices=const ocropus::Axes1, LeftArgType=const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, RightArgType=const ocropus::TensorMap2]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorAssign.h(131): here
            instantiation of "__nv_bool Eigen::TensorEvaluator<const Eigen::TensorAssignOp<LeftArgType, RightArgType>, Device>::evalSubExprsIfNeeded(Eigen::TensorEvaluator<const Eigen::TensorAssignOp<LeftArgType, RightArgType>, Device>::Scalar *) [with LeftArgType=Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, RightArgType=const Eigen::TensorContractionOp<const ocropus::Axes1, const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, const ocropus::TensorMap2>, Device=Eigen::GpuDevice]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h(219): here
            instantiation of "void Eigen::internal::TensorExecutor<Expression, Eigen::GpuDevice, false>::run(const Expression &, const Eigen::GpuDevice &) [with Expression=const Eigen::TensorAssignOp<Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, const Eigen::TensorContractionOp<const ocropus::Axes1, const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, const ocropus::TensorMap2>>]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDevice.h(35): here
            instantiation of "Eigen::TensorDevice<ExpressionType, DeviceType> &Eigen::TensorDevice<ExpressionType, DeviceType>::operator=(const OtherDerived &) [with ExpressionType=Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, DeviceType=ocropus::Device, OtherDerived=Eigen::TensorContractionOp<const ocropus::Axes1, const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, const ocropus::TensorMap2>]" 
clstm_compute.cc(286): here

/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionMapper.h(251): warning: dynamic initialization in unreachable code
          detected during:
            instantiation of "Eigen::internal::BaseTensorContractionMapper<Scalar, Index, side, Tensor, nocontract_t, contract_t, packet_size, inner_dim_contiguous, inner_dim_reordered, Alignment>::Packet Eigen::internal::BaseTensorContractionMapper<Scalar, Index, side, Tensor, nocontract_t, contract_t, packet_size, inner_dim_contiguous, inner_dim_reordered, Alignment>::loadPacket(Index, Index) const [with Scalar=ocropus::Float, Index=Eigen::DenseIndex, side=0, Tensor=Eigen::TensorEvaluator<const ocropus::TensorMap2, Eigen::GpuDevice>, nocontract_t=Eigen::array<Eigen::DenseIndex, 1UL>, contract_t=Eigen::array<Eigen::DenseIndex, 1UL>, packet_size=4, inner_dim_contiguous=true, inner_dim_reordered=false, Alignment=0, AlignmentType=0]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h(580): here
            instantiation of "void Eigen::EigenFloatContractionKernelInternal16x16<Index,LhsMapper,RhsMapper,OutputMapper,CHECK_LHS_BOUNDARY,CHECK_RHS_BOUNDARY>(LhsMapper, RhsMapper, OutputMapper, float2 (*)[16], float2 (*)[8], Index, Index, Index, Index, Index) [with Index=Eigen::DenseIndex, LhsMapper=Eigen::internal::TensorContractionInputMapper<ocropus::Float, Eigen::DenseIndex, 1, Eigen::TensorEvaluator<const ocropus::TensorMap2, Eigen::GpuDevice>, Eigen::array<Eigen::DenseIndex, 1UL>, Eigen::array<Eigen::DenseIndex, 1UL>, 4, true, false, 0>, RhsMapper=Eigen::internal::TensorContractionInputMapper<ocropus::Float, Eigen::DenseIndex, 0, Eigen::TensorEvaluator<const ocropus::TensorMap2, Eigen::GpuDevice>, Eigen::array<Eigen::DenseIndex, 1UL>, Eigen::array<Eigen::DenseIndex, 1UL>, 4, true, false, 0>, OutputMapper=Eigen::internal::blas_data_mapper<ocropus::Float, Eigen::DenseIndex, 0, 0>, CHECK_LHS_BOUNDARY=false, CHECK_RHS_BOUNDARY=false]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h(1190): here
            instantiation of "void Eigen::EigenFloatContractionKernel16x16(LhsMapper, RhsMapper, OutputMapper, Index, Index, Index) [with Index=Eigen::DenseIndex, LhsMapper=Eigen::internal::TensorContractionInputMapper<ocropus::Float, Eigen::DenseIndex, 1, Eigen::TensorEvaluator<const ocropus::TensorMap2, Eigen::GpuDevice>, Eigen::array<Eigen::DenseIndex, 1UL>, Eigen::array<Eigen::DenseIndex, 1UL>, 4, true, false, 0>, RhsMapper=Eigen::internal::TensorContractionInputMapper<ocropus::Float, Eigen::DenseIndex, 0, Eigen::TensorEvaluator<const ocropus::TensorMap2, Eigen::GpuDevice>, Eigen::array<Eigen::DenseIndex, 1UL>, Eigen::array<Eigen::DenseIndex, 1UL>, 4, true, false, 0>, OutputMapper=Eigen::internal::blas_data_mapper<ocropus::Float, Eigen::DenseIndex, 0, 0>]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h(1363): here
            instantiation of "void Eigen::TensorEvaluator<const Eigen::TensorContractionOp<Indices, LeftArgType, RightArgType>, Eigen::GpuDevice>::evalTyped<lhs_inner_dim_contiguous,rhs_inner_dim_contiguous,rhs_inner_dim_reordered,Alignment>(Eigen::TensorEvaluator<const Eigen::TensorContractionOp<Indices, LeftArgType, RightArgType>, Eigen::GpuDevice>::Scalar *) const [with Indices=const ocropus::Axes1, LeftArgType=const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, RightArgType=const ocropus::TensorMap2, lhs_inner_dim_contiguous=true, rhs_inner_dim_contiguous=true, rhs_inner_dim_reordered=false, Alignment=0]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h(1284): here
            instantiation of "void Eigen::TensorEvaluator<const Eigen::TensorContractionOp<Indices, LeftArgType, RightArgType>, Eigen::GpuDevice>::evalTo(Eigen::TensorEvaluator<const Eigen::TensorContractionOp<Indices, LeftArgType, RightArgType>, Eigen::GpuDevice>::Scalar *) const [with Indices=const ocropus::Axes1, LeftArgType=const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, RightArgType=const ocropus::TensorMap2]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h(1268): here
            instantiation of "__nv_bool Eigen::TensorEvaluator<const Eigen::TensorContractionOp<Indices, LeftArgType, RightArgType>, Eigen::GpuDevice>::evalSubExprsIfNeeded(Eigen::TensorEvaluator<const Eigen::TensorContractionOp<Indices, LeftArgType, RightArgType>, Eigen::GpuDevice>::Scalar *) [with Indices=const ocropus::Axes1, LeftArgType=const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, RightArgType=const ocropus::TensorMap2]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorAssign.h(131): here
            instantiation of "__nv_bool Eigen::TensorEvaluator<const Eigen::TensorAssignOp<LeftArgType, RightArgType>, Device>::evalSubExprsIfNeeded(Eigen::TensorEvaluator<const Eigen::TensorAssignOp<LeftArgType, RightArgType>, Device>::Scalar *) [with LeftArgType=Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, RightArgType=const Eigen::TensorContractionOp<const ocropus::Axes1, const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, const ocropus::TensorMap2>, Device=Eigen::GpuDevice]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h(219): here
            instantiation of "void Eigen::internal::TensorExecutor<Expression, Eigen::GpuDevice, false>::run(const Expression &, const Eigen::GpuDevice &) [with Expression=const Eigen::TensorAssignOp<Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, const Eigen::TensorContractionOp<const ocropus::Axes1, const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, const ocropus::TensorMap2>>]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDevice.h(35): here
            instantiation of "Eigen::TensorDevice<ExpressionType, DeviceType> &Eigen::TensorDevice<ExpressionType, DeviceType>::operator=(const OtherDerived &) [with ExpressionType=Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, DeviceType=ocropus::Device, OtherDerived=Eigen::TensorContractionOp<const ocropus::Axes1, const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, const ocropus::TensorMap2>]" 
clstm_compute.cc(286): here

/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h(1268): warning: calling a __host__ function from a __host__ __device__ function is not allowed
          detected during:
            instantiation of "__nv_bool Eigen::TensorEvaluator<const Eigen::TensorContractionOp<Indices, LeftArgType, RightArgType>, Eigen::GpuDevice>::evalSubExprsIfNeeded(Eigen::TensorEvaluator<const Eigen::TensorContractionOp<Indices, LeftArgType, RightArgType>, Eigen::GpuDevice>::Scalar *) [with Indices=const ocropus::Axes1, LeftArgType=const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, RightArgType=const ocropus::TensorMap2]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorAssign.h(131): here
            instantiation of "__nv_bool Eigen::TensorEvaluator<const Eigen::TensorAssignOp<LeftArgType, RightArgType>, Device>::evalSubExprsIfNeeded(Eigen::TensorEvaluator<const Eigen::TensorAssignOp<LeftArgType, RightArgType>, Device>::Scalar *) [with LeftArgType=Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, RightArgType=const Eigen::TensorContractionOp<const ocropus::Axes1, const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, const ocropus::TensorMap2>, Device=Eigen::GpuDevice]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h(219): here
            instantiation of "void Eigen::internal::TensorExecutor<Expression, Eigen::GpuDevice, false>::run(const Expression &, const Eigen::GpuDevice &) [with Expression=const Eigen::TensorAssignOp<Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, const Eigen::TensorContractionOp<const ocropus::Axes1, const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, const ocropus::TensorMap2>>]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDevice.h(35): here
            instantiation of "Eigen::TensorDevice<ExpressionType, DeviceType> &Eigen::TensorDevice<ExpressionType, DeviceType>::operator=(const OtherDerived &) [with ExpressionType=Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, DeviceType=ocropus::Device, OtherDerived=Eigen::TensorContractionOp<const ocropus::Axes1, const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, const ocropus::TensorMap2>]" 
clstm_compute.cc(286): here

/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h(1272): warning: calling a __host__ function from a __host__ __device__ function is not allowed
          detected during:
            instantiation of "__nv_bool Eigen::TensorEvaluator<const Eigen::TensorContractionOp<Indices, LeftArgType, RightArgType>, Eigen::GpuDevice>::evalSubExprsIfNeeded(Eigen::TensorEvaluator<const Eigen::TensorContractionOp<Indices, LeftArgType, RightArgType>, Eigen::GpuDevice>::Scalar *) [with Indices=const ocropus::Axes1, LeftArgType=const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, RightArgType=const ocropus::TensorMap2]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorAssign.h(131): here
            instantiation of "__nv_bool Eigen::TensorEvaluator<const Eigen::TensorAssignOp<LeftArgType, RightArgType>, Device>::evalSubExprsIfNeeded(Eigen::TensorEvaluator<const Eigen::TensorAssignOp<LeftArgType, RightArgType>, Device>::Scalar *) [with LeftArgType=Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, RightArgType=const Eigen::TensorContractionOp<const ocropus::Axes1, const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, const ocropus::TensorMap2>, Device=Eigen::GpuDevice]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h(219): here
            instantiation of "void Eigen::internal::TensorExecutor<Expression, Eigen::GpuDevice, false>::run(const Expression &, const Eigen::GpuDevice &) [with Expression=const Eigen::TensorAssignOp<Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, const Eigen::TensorContractionOp<const ocropus::Axes1, const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, const ocropus::TensorMap2>>]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDevice.h(35): here
            instantiation of "Eigen::TensorDevice<ExpressionType, DeviceType> &Eigen::TensorDevice<ExpressionType, DeviceType>::operator=(const OtherDerived &) [with ExpressionType=Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, DeviceType=ocropus::Device, OtherDerived=Eigen::TensorContractionOp<const ocropus::Axes1, const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, const ocropus::TensorMap2>]" 
clstm_compute.cc(286): here

/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIndexList.h(535): warning: calling a constexpr __host__ function("run") from a __host__ __device__ function("indices_statically_known_to_increase") is not allowed. The experimental flag '--expt-relaxed-constexpr' can be used to allow this.
          detected during:
            instantiation of "__nv_bool Eigen::internal::indices_statically_known_to_increase<T>() [with T=const ocropus::Indexes1]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReduction.h(94): here
            instantiation of class "Eigen::internal::are_inner_most_dims<ReducedDims, NumTensorDims, 0> [with ReducedDims=const ocropus::Indexes1, NumTensorDims=2]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReduction.h(434): here
            instantiation of class "Eigen::TensorEvaluator<const Eigen::TensorReductionOp<Op, Dims, ArgType>, Device> [with Op=Eigen::internal::SumReducer<ocropus::Float>, Dims=const ocropus::Indexes1, ArgType=const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, Device=Eigen::GpuDevice]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorEvaluator.h(314): here
            instantiation of class "Eigen::TensorEvaluator<const Eigen::TensorCwiseBinaryOp<BinaryOp, LeftArgType, RightArgType>, Device> [with BinaryOp=Eigen::internal::scalar_sum_op<ocropus::Float>, LeftArgType=const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 1, 0, Eigen::DenseIndex>, 0>, RightArgType=const Eigen::TensorReductionOp<Eigen::internal::SumReducer<ocropus::Float>, const ocropus::Indexes1, const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>>, Device=Eigen::GpuDevice]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorAssign.h(97): here
            instantiation of class "Eigen::TensorEvaluator<const Eigen::TensorAssignOp<LeftArgType, RightArgType>, Device> [with LeftArgType=Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 1, 0, Eigen::DenseIndex>, 0>, RightArgType=const Eigen::TensorCwiseBinaryOp<Eigen::internal::scalar_sum_op<ocropus::Float>, const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 1, 0, Eigen::DenseIndex>, 0>, const Eigen::TensorReductionOp<Eigen::internal::SumReducer<ocropus::Float>, const ocropus::Indexes1, const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>>>, Device=Eigen::GpuDevice]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorForwardDeclarations.h(83): here
            instantiation of class "Eigen::internal::IsVectorizable<Eigen::GpuDevice, Expression> [with Expression=const Eigen::TensorAssignOp<Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 1, 0, Eigen::DenseIndex>, 0>, const Eigen::TensorCwiseBinaryOp<Eigen::internal::scalar_sum_op<ocropus::Float>, const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 1, 0, Eigen::DenseIndex>, 0>, const Eigen::TensorReductionOp<Eigen::internal::SumReducer<ocropus::Float>, const ocropus::Indexes1, const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>>>>]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorForwardDeclarations.h(88): here
            processing of template argument list for "Eigen::internal::TensorExecutor" based on template arguments <const Assign, ocropus::Device> 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDevice.h(46): here
            instantiation of "Eigen::TensorDevice<ExpressionType, DeviceType> &Eigen::TensorDevice<ExpressionType, DeviceType>::operator+=(const OtherDerived &) [with ExpressionType=Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 1, 0, Eigen::DenseIndex>, 0>, DeviceType=ocropus::Device, OtherDerived=Eigen::TensorReductionOp<Eigen::internal::SumReducer<ocropus::Float>, const ocropus::Indexes1, const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>>]" 
clstm_compute.cc(298): here

/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReduction.h(547): warning: calling a __host__ function from a __host__ __device__ function is not allowed
          detected during:
            instantiation of "__nv_bool Eigen::TensorEvaluator<const Eigen::TensorReductionOp<Op, Dims, ArgType>, Device>::evalSubExprsIfNeeded(Eigen::TensorEvaluator<const Eigen::TensorReductionOp<Op, Dims, ArgType>, Device>::CoeffReturnType *) [with Op=Eigen::internal::SumReducer<ocropus::Float>, Dims=const ocropus::Indexes1, ArgType=const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, Device=Eigen::DefaultDevice]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorAssign.h(131): here
            instantiation of "__nv_bool Eigen::TensorEvaluator<const Eigen::TensorAssignOp<LeftArgType, RightArgType>, Device>::evalSubExprsIfNeeded(Eigen::TensorEvaluator<const Eigen::TensorAssignOp<LeftArgType, RightArgType>, Device>::Scalar *) [with LeftArgType=Eigen::Tensor<ocropus::Float, 1, 0, Eigen::DenseIndex>, RightArgType=const Eigen::TensorReductionOp<Eigen::internal::SumReducer<ocropus::Float>, const ocropus::Indexes1, const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>>, Device=Eigen::DefaultDevice]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h(57): here
            instantiation of "void Eigen::internal::TensorExecutor<Expression, Eigen::DefaultDevice, true>::run(const Expression &, const Eigen::DefaultDevice &) [with Expression=const Eigen::TensorAssignOp<Eigen::Tensor<ocropus::Float, 1, 0, Eigen::DenseIndex>, const Eigen::TensorReductionOp<Eigen::internal::SumReducer<ocropus::Float>, const ocropus::Indexes1, const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>>>]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/Tensor.h(392): here
            instantiation of "Eigen::Tensor<Scalar_, NumIndices_, Options_, IndexType_>::Tensor(const Eigen::TensorBase<OtherDerived, 0> &) [with Scalar_=ocropus::Float, NumIndices_=1, Options_=0, IndexType_=Eigen::DenseIndex, OtherDerived=Eigen::TensorReductionOp<Eigen::internal::SumReducer<ocropus::Float>, const ocropus::Indexes1, const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>>]" 
clstm_compute.cc(335): here

/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReduction.h(564): warning: calling a __host__ function from a __host__ __device__ function is not allowed
          detected during:
            instantiation of "__nv_bool Eigen::TensorEvaluator<const Eigen::TensorReductionOp<Op, Dims, ArgType>, Device>::evalSubExprsIfNeeded(Eigen::TensorEvaluator<const Eigen::TensorReductionOp<Op, Dims, ArgType>, Device>::CoeffReturnType *) [with Op=Eigen::internal::SumReducer<ocropus::Float>, Dims=const ocropus::Indexes1, ArgType=const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>, Device=Eigen::DefaultDevice]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorAssign.h(131): here
            instantiation of "__nv_bool Eigen::TensorEvaluator<const Eigen::TensorAssignOp<LeftArgType, RightArgType>, Device>::evalSubExprsIfNeeded(Eigen::TensorEvaluator<const Eigen::TensorAssignOp<LeftArgType, RightArgType>, Device>::Scalar *) [with LeftArgType=Eigen::Tensor<ocropus::Float, 1, 0, Eigen::DenseIndex>, RightArgType=const Eigen::TensorReductionOp<Eigen::internal::SumReducer<ocropus::Float>, const ocropus::Indexes1, const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>>, Device=Eigen::DefaultDevice]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h(57): here
            instantiation of "void Eigen::internal::TensorExecutor<Expression, Eigen::DefaultDevice, true>::run(const Expression &, const Eigen::DefaultDevice &) [with Expression=const Eigen::TensorAssignOp<Eigen::Tensor<ocropus::Float, 1, 0, Eigen::DenseIndex>, const Eigen::TensorReductionOp<Eigen::internal::SumReducer<ocropus::Float>, const ocropus::Indexes1, const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>>>]" 
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/Tensor.h(392): here
            instantiation of "Eigen::Tensor<Scalar_, NumIndices_, Options_, IndexType_>::Tensor(const Eigen::TensorBase<OtherDerived, 0> &) [with Scalar_=ocropus::Float, NumIndices_=1, Options_=0, IndexType_=Eigen::DenseIndex, OtherDerived=Eigen::TensorReductionOp<Eigen::internal::SumReducer<ocropus::Float>, const ocropus::Indexes1, const Eigen::TensorMap<Eigen::Tensor<ocropus::Float, 2, 0, Eigen::DenseIndex>, 0>>]" 
clstm_compute.cc(335): here

/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h(1281): warning: calling a __host__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalTyped<(bool)1, (bool)1, (bool)1, (int)0> ") from a __host__ __device__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalSubExprsIfNeeded") is not allowed

/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h(1284): warning: calling a __host__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalTyped<(bool)1, (bool)1, (bool)0, (int)0> ") from a __host__ __device__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalSubExprsIfNeeded") is not allowed

/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h(1289): warning: calling a __host__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalTyped<(bool)1, (bool)0, (bool)1, (int)0> ") from a __host__ __device__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalSubExprsIfNeeded") is not allowed

/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h(1292): warning: calling a __host__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalTyped<(bool)1, (bool)0, (bool)0, (int)0> ") from a __host__ __device__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalSubExprsIfNeeded") is not allowed

/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h(1299): warning: calling a __host__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalTyped<(bool)0, (bool)1, (bool)1, (int)0> ") from a __host__ __device__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalSubExprsIfNeeded") is not allowed

/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h(1302): warning: calling a __host__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalTyped<(bool)0, (bool)1, (bool)0, (int)0> ") from a __host__ __device__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalSubExprsIfNeeded") is not allowed

/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h(1307): warning: calling a __host__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalTyped<(bool)0, (bool)0, (bool)1, (int)0> ") from a __host__ __device__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalSubExprsIfNeeded") is not allowed

/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h(1310): warning: calling a __host__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalTyped<(bool)0, (bool)0, (bool)0, (int)0> ") from a __host__ __device__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalSubExprsIfNeeded") is not allowed

/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h(1281): warning: calling a __host__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalTyped<(bool)1, (bool)1, (bool)1, (int)0> ") from a __host__ __device__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalSubExprsIfNeeded") is not allowed

/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h(1284): warning: calling a __host__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalTyped<(bool)1, (bool)1, (bool)0, (int)0> ") from a __host__ __device__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalSubExprsIfNeeded") is not allowed

/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h(1289): warning: calling a __host__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalTyped<(bool)1, (bool)0, (bool)1, (int)0> ") from a __host__ __device__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalSubExprsIfNeeded") is not allowed

/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h(1292): warning: calling a __host__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalTyped<(bool)1, (bool)0, (bool)0, (int)0> ") from a __host__ __device__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalSubExprsIfNeeded") is not allowed

/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h(1299): warning: calling a __host__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalTyped<(bool)0, (bool)1, (bool)1, (int)0> ") from a __host__ __device__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalSubExprsIfNeeded") is not allowed

/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h(1302): warning: calling a __host__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalTyped<(bool)0, (bool)1, (bool)0, (int)0> ") from a __host__ __device__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalSubExprsIfNeeded") is not allowed

/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h(1307): warning: calling a __host__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalTyped<(bool)0, (bool)0, (bool)1, (int)0> ") from a __host__ __device__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalSubExprsIfNeeded") is not allowed

/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h(1310): warning: calling a __host__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalTyped<(bool)0, (bool)0, (bool)0, (int)0> ") from a __host__ __device__ function("Eigen::TensorEvaluator<const Eigen::TensorContractionOp<const Eigen::array<Eigen::IndexPair<int> , (unsigned long)1ul> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> , const Eigen::TensorMap<Eigen::Tensor<float, (int)2, (int)0, long> , (int)0> > , Eigen::GpuDevice> ::evalSubExprsIfNeeded") is not allowed

/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReduction.h(349): error: identifier "__T216" is undefined in device code

/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReduction.h(359): error: identifier "__T217" is undefined in device code

2 errors detected in the compilation of "/tmp/tmpxft_00003910_00000000-8_clstm_compute_cuda.cpp2.i".

Halfish avatar Feb 19 '16 07:02 Halfish

Any idea to enable GPU to build clstm?

haihaoshen avatar Apr 26 '16 06:04 haihaoshen

No idea.

Halfish avatar Apr 26 '16 10:04 Halfish

got the same error. cannot find __T216 in TensorReduction.h...

melody-rain avatar Apr 27 '16 03:04 melody-rain

check assert(false && "Not implemented"); in TensorReduction.h.

what is false && "Not implemented"? I just comment the line of code and it compiles successfully.

melody-rain avatar Apr 27 '16 05:04 melody-rain

updating eigen seems to fix the problem...

melody-rain avatar Apr 27 '16 07:04 melody-rain

it could really have not been implemented as the assertion

chinakook avatar Apr 27 '16 13:04 chinakook

Has anyone had success getting this to work? I successfully compiled it for GPU, but it doesn't train -- I get segmentation fault.

If anyone has made this work, what kind of training times are you seeing?

This library looks really cool, unfortunately seeing reports of 50+ days of training time (for the Japanese data), makes me think it might be practically unusable.

mattndu avatar Jun 10 '16 01:06 mattndu

I think the mini-batch size cannot be set in clstm until now, so the GPU version may not be faster than the CPU one. If you want to accelerate the training, please try torch with cudnn V5, in which library the training speed up 5x when using batch-size 64.

chinakook avatar Jun 14 '16 15:06 chinakook

I've got the same issue. Have you found out any solution? Halfish , @mattndu

PedroBarcha avatar Aug 31 '16 20:08 PedroBarcha

I switched over to this. It's a bitch to setup, but It works great. It drives my GPU at 70% or so, but it's still a little slow. Probably 3-4x faster than clstmocr though. I think it's just inherently slow due to the serial nature of the training:

https://github.com/dmlc/mxnet/tree/master/example/warpctc

mattndu avatar Aug 31 '16 20:08 mattndu

@mattndu hey mind giving a heads up on setting it up? The input format and requirements I got this error compiling it, clstm is painfully slow for me so want something that uses GPU

/usr/lib/gcc/x86_64-linux-gnu/5/include/mwaitxintrin.h(36): error: identifier "__builtin_ia32_monitorx" is undefined

/usr/lib/gcc/x86_64-linux-gnu/5/include/mwaitxintrin.h(42): error: identifier "__builtin_ia32_mwaitx" is undefined

2 errors detected in the compilation of "/tmp/tmpxft_000035a0_00000000-16_reduce.compute_52.cpp1.ii". CMake Error at warpctc_generated_reduce.cu.o.cmake:266 (message): Error generating file /home/user/Workspace/warpctc/warp-ctc/build/CMakeFiles/warpctc.dir/src/./warpctc_generated_reduce.cu.o

CMakeFiles/warpctc.dir/build.make:70: recipe for target 'CMakeFiles/warpctc.dir/src/warpctc_generated_reduce.cu.o' failed make[2]: *** [CMakeFiles/warpctc.dir/src/warpctc_generated_reduce.cu.o] Error 1 CMakeFiles/Makefile2:141: recipe for target 'CMakeFiles/warpctc.dir/all' failed make[1]: *** [CMakeFiles/warpctc.dir/all] Error 2 Makefile:127: recipe for target 'all' failed make: *** [all] Error 2

UPDATE: Use these flags in CMAKECACHE.txt "-D_MWAITXINTRIN_H_INCLUDED -D_FORCE_INLINES -D__STRICT_ANSI__"

bluefa1con avatar Aug 31 '16 22:08 bluefa1con

@mattndu hey man not to bother you about this but I ran into a few errors while getting it compiling its mostly related to gcc, how did you fix them? /usr/include/c++/5/bits/stl_iterator_base_types.h(156): error: name followed by "::" must be a class or namespace name detected during: instantiation of class "std::__iterator_traits<_Iterator, void> [with _Iterator=int]" (163): here

bluefa1con avatar Sep 01 '16 09:09 bluefa1con

How did you succeed later? I also tried using gpu to speed up training,I also failed!! wrong my gpu driver driver and my cuda nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2017 NVIDIA Corporation Built on Fri_Sep__1_21:08:03_CDT_2017 Cuda compilation tools, release 9.0, V9.0.176

Can anyone help me? Sincere thanks !!

moucmou avatar Jan 07 '18 03:01 moucmou

@moucmou there is no need to use this library any longer. A lot of deep learning frameworks support lstm, which can be used.

melody-rain avatar Jan 07 '18 05:01 melody-rain

@melody-rain, You have a typo in your profile page. It should be 'Computer vision and deep learning'.

amitdo avatar Jan 07 '18 07:01 amitdo

@amitdo Thanks : )

melody-rain avatar Jan 07 '18 07:01 melody-rain

@moucmou if you want a mostly out of the box OCR with gpu acceleration you could use @andbue's kraken branch that uses pytorch instead of clstm. IIRC it's performance isn't as it still trains using SGD but to be frank when you do OCR with some hacked-together tensorflow-scripts it probably won't be significantly faster, especially when figuring in compile/model loading times.

mittagessen avatar Jan 07 '18 09:01 mittagessen