Re: [eigen] Tensor Execution on GPUs

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]


Hi Benoit,

Thanks a lot! Changing the file name from .cc to .cu (not .cu.cc) fixed the linker errors, and after copying the memory as you indicated the example worked properly.

Graham

On Thu, Apr 28, 2016 at 4:45 AM, Benoit Steiner <benoit.steiner.goog@xxxxxxxxx> wrote:
I'd recommend that you call your source file tanh.cu.cc. If you call it tanh.cc nvcc will most likely assume that it only contains host code, which could explain your linking error.

You also need to modify the input and ouput tensor definition to make sure they reside on GPU (at least until we add support for unified virtual memory, see pull request https://bitbucket.org/eigen/eigen/pull-requests/112/added-support-for-unified-virtual-memory/diff):

float* in_data;
float* out_data;
cudaMalloc((void**)(&in_data), 2*4);
cudaMalloc((void**)(&out_data), 2*4);
Eigen::TensorMap<Eigen::Tensor<float,1> > in(in_data, 2);
Eigen::TensorMap<Eigen::Tensor<float,1> > out(out_data, 2);


On Tue, Apr 26, 2016 at 10:34 PM, Graham Neubig <neubig@xxxxxxxxxxx> wrote:
Hello,

I'm currently trying to use GpuDevice to perform operations on Tensors, but having trouble with compiling the following statements:

Eigen::Tensor<float,1> in(2);
in[0] = 1.f; in[1] = -2.f;
Eigen::Tensor<float,1> out(2);
Eigen::CudaStreamDevice stream;
Eigen::GpuDevice dev(&stream);
out.device(dev) = in.tanh();

I've attached a relatively simple example that I think should be working with nvcc, but for some reason I'm getting the following linking error and I wasn't able to figure out what the problem was. Does anything look out of place here?

Graham

---------------------------------------------------------------

nvcc -o test-tanh tanh.cc -I/home/is/neubig/usr/local/eigen -std=c++11 -DEIGEN_USE_GPU
/tmp/tmpxft_0000699c_00000000-4_tanh.o: In function `Eigen::TensorDevice<Eigen::Tensor<float, 1, 0, long>, Eigen::GpuDevice>& Eigen::TensorDevice<Eigen::Tensor<float, 1, 0, long>, Eigen::GpuDevice>::operator=<Eigen::TensorCwiseUnaryOp<Eigen::internal::scalar_tanh_op<float>, Eigen::Tensor<float, 1, 0, long> const> >(Eigen::TensorCwiseUnaryOp<Eigen::internal::scalar_tanh_op<float>, Eigen::Tensor<float, 1, 0, long> const> const&)':
tanh.cc:(.text._ZN5Eigen12TensorDeviceINS_6TensorIfLi1ELi0ElEENS_9GpuDeviceEEaSINS_18TensorCwiseUnaryOpINS_8internal14scalar_tanh_opIfEEKS2_EEEERS4_RKT_[_ZN5Eigen12TensorDeviceINS_6TensorIfLi1ELi0ElEENS_9GpuDeviceEEaSINS_18TensorCwiseUnaryOpINS_8internal14scalar_tanh_opIfEEKS2_EEEERS4_RKT_]+0x4c): undefined reference to `Eigen::internal::TensorExecutor<Eigen::TensorAssignOp<Eigen::Tensor<float, 1, 0, long>, Eigen::TensorCwiseUnaryOp<Eigen::internal::scalar_tanh_op<float>, Eigen::Tensor<float, 1, 0, long> const> const> const, Eigen::GpuDevice, true>::run(Eigen::TensorAssignOp<Eigen::Tensor<float, 1, 0, long>, Eigen::TensorCwiseUnaryOp<Eigen::internal::scalar_tanh_op<float>, Eigen::Tensor<float, 1, 0, long> const> const> const&, Eigen::GpuDevice const&)'
collect2: error: ld returned 1 exit status
Makefile:11: recipe for target 'test-tanh' failed
make: *** [test-tanh] Error 1



--



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/