Search code examples
cudafillthrust

thrust:fill compile errors


I'm need some help tracking down the compile errors that thrust::fill is giving me.

There is nothing wrong with the code:

line 9   #include <thrust/device_vector.h>                // needed for other thrust stuff
line 10  #include <thrust/fill.h>                        // not needed (same err w/ or w/o)
.
.
line 389 thrust::device_vector<int> junk(20);           // any ol array
line 390 thrust::fill(junk.begin(), junk.end(), (int)0); // the problem line

It will compile fine if I comment out the 'fill' line. Any (raw_pointer, device_vector,..) thrust::fill command that I use will generate this error. Other THRUST cmds compile fine. The error is a few pages long. I am not sure what the error is. 'for_each' is mentioned a lot. The last one with 'compute_capability' makes no sense, as it is not in any of my code. I tried adding a bunch of '#include ' files, but it didn't help any.

Any ideas would be appreciated.

In file included from /usr/local/cuda/include/thrust/detail/backend/cuda/for_each.h:54:0,
                 from /usr/local/cuda/include/thrust/detail/backend/for_each.inl:23,
                 from /usr/local/cuda/include/thrust/detail/backend/for_each.h:55,
                 from /usr/local/cuda/include/thrust/detail/for_each.inl:22,
                 from /usr/local/cuda/include/thrust/for_each.h:91,
                 from /usr/local/cuda/include/thrust/detail/swap_ranges.inl:25,
                 from /usr/local/cuda/include/thrust/detail/swap.inl:33,
                 from /usr/local/cuda/include/thrust/swap.h:127,
                 from /usr/local/cuda/include/thrust/detail/contiguous_storage.inl:20,
                 from /usr/local/cuda/include/thrust/detail/contiguous_storage.h:92,
                 from /usr/local/cuda/include/thrust/detail/uninitialized_array.h:26,
                 from /usr/local/cuda/include/thrust/detail/backend/cuda/copy_cross_space.inl:20,
                 from /usr/local/cuda/include/thrust/detail/backend/cuda/copy_cross_space.h:57,
                 from /usr/local/cuda/include/thrust/detail/backend/cuda/dispatch/copy.h:23,
                 from /usr/local/cuda/include/thrust/detail/backend/cuda/copy.h:21,
                 from /usr/local/cuda/include/thrust/detail/backend/dispatch/copy.h:24,
                 from /usr/local/cuda/include/thrust/detail/backend/copy.inl:20,
                 from /usr/local/cuda/include/thrust/detail/backend/copy.h:44,
                 from /usr/local/cuda/include/thrust/detail/copy.inl:20,
                 from /usr/local/cuda/include/thrust/detail/copy.h:39,
                 from /usr/local/cuda/include/thrust/detail/reference_base.inl:18,
                 from /usr/local/cuda/include/thrust/detail/reference_base.h:138,
                 from /usr/local/cuda/include/thrust/device_reference.h:27,
                 from /usr/local/cuda/include/thrust/detail/device_ptr.inl:23,
                 from /usr/local/cuda/include/thrust/device_ptr.h:181,
                 from /usr/local/cuda/include/thrust/device_malloc_allocator.h:25,
                 from /usr/local/cuda/include/thrust/device_vector.h:25,
                 from /home/rrob/workspace/dicol/klm/src/Map.cpp:9:
/usr/local/cuda/include/thrust/detail/backend/cuda/for_each.inl: In function ‘RandomAccessIterator thrust::detail::backend::cuda::for_each_n(RandomAccessIterator, Size, UnaryFunction) [with RandomAccessIterator = thrust::detail::normal_iterator<thrust::device_ptr<int> >, Size = long int, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor<int> >]’:
/usr/local/cuda/include/thrust/detail/backend/for_each.inl:56:63:   instantiated from ‘OutputIterator thrust::detail::backend::dispatch::for_each_n(OutputIterator, Size, UnaryFunction, thrust::detail::cuda_device_space_tag) [with OutputIterator = thrust::detail::normal_iterator<thrust::device_ptr<int> >, Size = long int, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor<int> >]’
/usr/local/cuda/include/thrust/detail/backend/for_each.inl:126:62:   instantiated from ‘OutputIterator thrust::detail::backend::for_each_n(OutputIterator, Size, UnaryFunction) [with OutputIterator = thrust::detail::normal_iterator<thrust::device_ptr<int> >, Size = long int, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor<int> >]’
/usr/local/cuda/include/thrust/detail/for_each.inl:39:57:   instantiated from ‘OutputIterator thrust::detail::for_each_n(OutputIterator, Size, UnaryFunction) [with OutputIterator = thrust::detail::normal_iterator<thrust::device_ptr<int> >, Size = long int, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor<int> >]’
/usr/local/cuda/include/thrust/detail/generate.inl:51:100:   instantiated from ‘OutputIterator thrust::generate_n(OutputIterator, Size, Generator) [with OutputIterator = thrust::detail::normal_iterator<thrust::device_ptr<int> >, Size = long int, Generator = thrust::detail::fill_functor<int>]’
/usr/local/cuda/include/thrust/detail/backend/cuda/fill.inl:93:43:   instantiated from ‘OutputIterator thrust::detail::backend::cuda::detail::fill_n(OutputIterator, Size, const T&, thrust::detail::false_type) [with OutputIterator = thrust::detail::normal_iterator<thrust::device_ptr<int> >, Size = long int, T = int, thrust::detail::false_type = thrust::detail::integral_constant<bool, false>]’
/usr/local/cuda/include/thrust/detail/backend/cuda/fill.inl:123:64:   [ skipping 3 instantiation contexts ]
/usr/local/cuda/include/thrust/detail/backend/fill.inl:93:60:   instantiated from ‘OutputIterator thrust::detail::backend::fill_n(OutputIterator, Size, const T&) [with OutputIterator = thrust::detail::normal_iterator<thrust::device_ptr<int> >, Size = long int, T = int]’
/usr/local/cuda/include/thrust/detail/backend/generic/fill.h:51:3:   instantiated from ‘void thrust::detail::backend::generic::fill(ForwardIterator, ForwardIterator, const T&) [with ForwardIterator = thrust::detail::normal_iterator<thrust::device_ptr<int> >, T = int]’
/usr/local/cuda/include/thrust/detail/backend/fill.inl:51:3:   instantiated from ‘void thrust::detail::backend::dispatch::fill(ForwardIterator, ForwardIterator, const T&, Backend) [with ForwardIterator = thrust::detail::normal_iterator<thrust::device_ptr<int> >, T = int, Backend = thrust::detail::cuda_device_space_tag]’
/usr/local/cuda/include/thrust/detail/backend/fill.inl:83:3:   instantiated from ‘void thrust::detail::backend::fill(ForwardIterator, ForwardIterator, const T&) [with ForwardIterator = thrust::detail::normal_iterator<thrust::device_ptr<int> >, T = int]’
/usr/local/cuda/include/thrust/detail/fill.inl:34:3:   instantiated from ‘void thrust::fill(ForwardIterator, ForwardIterator, const T&) [with ForwardIterator = thrust::detail::normal_iterator<thrust::device_ptr<int> >, T = int]’
/home/rrob/workspace/dicol/klm/src/Map.cpp:390:49:   instantiated from here
/usr/local/cuda/include/thrust/detail/backend/cuda/for_each.inl:96:1: error: invalid application of ‘sizeof’ to incomplete type ‘thrust::detail::STATIC_ASSERTION_FAILURE<false>’ 
/usr/local/cuda/include/thrust/detail/backend/cuda/for_each.inl: In function ‘RandomAccessIterator thrust::detail::backend::cuda::for_each_n(RandomAccessIterator, Size, UnaryFunction) [with RandomAccessIterator = thrust::device_ptr<int>, Size = long int, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor<int> >]’:
/usr/local/cuda/include/thrust/detail/backend/for_each.inl:56:63:   instantiated from ‘OutputIterator thrust::detail::backend::dispatch::for_each_n(OutputIterator, Size, UnaryFunction, thrust::detail::cuda_device_space_tag) [with OutputIterator = thrust::device_ptr<int>, Size = long int, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor<int> >]’
/usr/local/cuda/include/thrust/detail/backend/for_each.inl:126:62:   instantiated from ‘OutputIterator thrust::detail::backend::for_each_n(OutputIterator, Size, UnaryFunction) [with OutputIterator = thrust::device_ptr<int>, Size = long int, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor<int> >]’
/usr/local/cuda/include/thrust/detail/backend/generic/for_each.inl:36:84:   instantiated from ‘InputIterator thrust::detail::backend::generic::for_each(InputIterator, InputIterator, UnaryFunction) [with InputIterator = thrust::device_ptr<int>, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor<int> >]’
/usr/local/cuda/include/thrust/detail/backend/for_each.inl:91:67:   instantiated from ‘InputIterator thrust::detail::backend::dispatch::for_each(InputIterator, InputIterator, UnaryFunction, Space) [with InputIterator = thrust::device_ptr<int>, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor<int> >, Space = thrust::detail::cuda_device_space_tag]’
/usr/local/cuda/include/thrust/detail/backend/for_each.inl:136:61:   instantiated from ‘InputIterator thrust::detail::backend::for_each(InputIterator, InputIterator, UnaryFunction) [with InputIterator = thrust::device_ptr<int>, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor<int> >]’
/usr/local/cuda/include/thrust/detail/for_each.inl:48:58:   [ skipping 7 instantiation contexts ]
/usr/local/cuda/include/thrust/detail/backend/fill.inl:93:60:   instantiated from ‘OutputIterator thrust::detail::backend::fill_n(OutputIterator, Size, const T&) [with OutputIterator = thrust::detail::normal_iterator<thrust::device_ptr<int> >, Size = long int, T = int]’
/usr/local/cuda/include/thrust/detail/backend/generic/fill.h:51:3:   instantiated from ‘void thrust::detail::backend::generic::fill(ForwardIterator, ForwardIterator, const T&) [with ForwardIterator = thrust::detail::normal_iterator<thrust::device_ptr<int> >, T = int]’
/usr/local/cuda/include/thrust/detail/backend/fill.inl:51:3:   instantiated from ‘void thrust::detail::backend::dispatch::fill(ForwardIterator, ForwardIterator, const T&, Backend) [with ForwardIterator = thrust::detail::normal_iterator<thrust::device_ptr<int> >, T = int, Backend = thrust::detail::cuda_device_space_tag]’
/usr/local/cuda/include/thrust/detail/backend/fill.inl:83:3:   instantiated from ‘void thrust::detail::backend::fill(ForwardIterator, ForwardIterator, const T&) [with ForwardIterator = thrust::detail::normal_iterator<thrust::device_ptr<int> >, T = int]’
/usr/local/cuda/include/thrust/detail/fill.inl:34:3:   instantiated from ‘void thrust::fill(ForwardIterator, ForwardIterator, const T&) [with ForwardIterator = thrust::detail::normal_iterator<thrust::device_ptr<int> >, T = int]’
/home/rrob/workspace/dicol/klm/src/Map.cpp:390:49:   instantiated from here
/usr/local/cuda/include/thrust/detail/backend/cuda/for_each.inl:96:1: error: invalid application of ‘sizeof’ to incomplete type ‘thrust::detail::STATIC_ASSERTION_FAILURE<false>’ 
/usr/local/cuda/include/thrust/detail/backend/cuda/for_each.inl: In function ‘RandomAccessIterator thrust::detail::backend::cuda::for_each_n(RandomAccessIterator, Size, UnaryFunction) [with RandomAccessIterator = thrust::device_ptr<unsigned int>, Size = long int, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor<unsigned int> >]’:
/usr/local/cuda/include/thrust/detail/backend/for_each.inl:56:63:   instantiated from ‘OutputIterator thrust::detail::backend::dispatch::for_each_n(OutputIterator, Size, UnaryFunction, thrust::detail::cuda_device_space_tag) [with OutputIterator = thrust::device_ptr<unsigned int>, Size = long int, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor<unsigned int> >]’
/usr/local/cuda/include/thrust/detail/backend/for_each.inl:126:62:   instantiated from ‘OutputIterator thrust::detail::backend::for_each_n(OutputIterator, Size, UnaryFunction) [with OutputIterator = thrust::device_ptr<unsigned int>, Size = long int, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor<unsigned int> >]’
/usr/local/cuda/include/thrust/detail/backend/generic/for_each.inl:36:84:   instantiated from ‘InputIterator thrust::detail::backend::generic::for_each(InputIterator, InputIterator, UnaryFunction) [with InputIterator = thrust::device_ptr<unsigned int>, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor<unsigned int> >]’
/usr/local/cuda/include/thrust/detail/backend/for_each.inl:91:67:   instantiated from ‘InputIterator thrust::detail::backend::dispatch::for_each(InputIterator, InputIterator, UnaryFunction, Space) [with InputIterator = thrust::device_ptr<unsigned int>, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor<unsigned int> >, Space = thrust::detail::cuda_device_space_tag]’
/usr/local/cuda/include/thrust/detail/backend/for_each.inl:136:61:   instantiated from ‘InputIterator thrust::detail::backend::for_each(InputIterator, InputIterator, UnaryFunction) [with InputIterator = thrust::device_ptr<unsigned int>, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor<unsigned int> >]’
/usr/local/cuda/include/thrust/detail/for_each.inl:48:58:   [ skipping 7 instantiation contexts ]
/usr/local/cuda/include/thrust/detail/backend/fill.inl:93:60:   instantiated from ‘OutputIterator thrust::detail::backend::fill_n(OutputIterator, Size, const T&) [with OutputIterator = thrust::detail::normal_iterator<thrust::device_ptr<int> >, Size = long int, T = int]’
/usr/local/cuda/include/thrust/detail/backend/generic/fill.h:51:3:   instantiated from ‘void thrust::detail::backend::generic::fill(ForwardIterator, ForwardIterator, const T&) [with ForwardIterator = thrust::detail::normal_iterator<thrust::device_ptr<int> >, T = int]’
/usr/local/cuda/include/thrust/detail/backend/fill.inl:51:3:   instantiated from ‘void thrust::detail::backend::dispatch::fill(ForwardIterator, ForwardIterator, const T&, Backend) [with ForwardIterator = thrust::detail::normal_iterator<thrust::device_ptr<int> >, T = int, Backend = thrust::detail::cuda_device_space_tag]’
/usr/local/cuda/include/thrust/detail/backend/fill.inl:83:3:   instantiated from ‘void thrust::detail::backend::fill(ForwardIterator, ForwardIterator, const T&) [with ForwardIterator = thrust::detail::normal_iterator<thrust::device_ptr<int> >, T = int]’
/usr/local/cuda/include/thrust/detail/fill.inl:34:3:   instantiated from ‘void thrust::fill(ForwardIterator, ForwardIterator, const T&) [with ForwardIterator = thrust::detail::normal_iterator<thrust::device_ptr<int> >, T = int]’
/home/rrob/workspace/dicol/klm/src/Map.cpp:390:49:   instantiated from here
/usr/local/cuda/include/thrust/detail/backend/cuda/for_each.inl:96:1: error: invalid application of ‘sizeof’ to incomplete type ‘thrust::detail::STATIC_ASSERTION_FAILURE<false>’ 
/usr/local/cuda/include/thrust/detail/backend/cuda/for_each.inl: In function ‘RandomAccessIterator thrust::detail::backend::cuda::for_each_n(RandomAccessIterator, Size, UnaryFunction) [with RandomAccessIterator = thrust::device_ptr<long long unsigned int>, Size = long int, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor<long long unsigned int> >]’:
/usr/local/cuda/include/thrust/detail/backend/for_each.inl:56:63:   instantiated from ‘OutputIterator thrust::detail::backend::dispatch::for_each_n(OutputIterator, Size, UnaryFunction, thrust::detail::cuda_device_space_tag) [with OutputIterator = thrust::device_ptr<long long unsigned int>, Size = long int, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor<long long unsigned int> >]’
/usr/local/cuda/include/thrust/detail/backend/for_each.inl:126:62:   instantiated from ‘OutputIterator thrust::detail::backend::for_each_n(OutputIterator, Size, UnaryFunction) [with OutputIterator = thrust::device_ptr<long long unsigned int>, Size = long int, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor<long long unsigned int> >]’
/usr/local/cuda/include/thrust/detail/backend/generic/for_each.inl:36:84:   instantiated from ‘InputIterator thrust::detail::backend::generic::for_each(InputIterator, InputIterator, UnaryFunction) [with InputIterator = thrust::device_ptr<long long unsigned int>, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor<long long unsigned int> >]’
/usr/local/cuda/include/thrust/detail/backend/for_each.inl:91:67:   instantiated from ‘InputIterator thrust::detail::backend::dispatch::for_each(InputIterator, InputIterator, UnaryFunction, Space) [with InputIterator = thrust::device_ptr<long long unsigned int>, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor<long long unsigned int> >, Space = thrust::detail::cuda_device_space_tag]’
/usr/local/cuda/include/thrust/detail/backend/for_each.inl:136:61:   instantiated from ‘InputIterator thrust::detail::backend::for_each(InputIterator, InputIterator, UnaryFunction) [with InputIterator = thrust::device_ptr<long long unsigned int>, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor<long long unsigned int> >]’
/usr/local/cuda/include/thrust/detail/for_each.inl:48:58:   [ skipping 7 instantiation contexts ]
/usr/local/cuda/include/thrust/detail/backend/fill.inl:93:60:   instantiated from ‘OutputIterator thrust::detail::backend::fill_n(OutputIterator, Size, const T&) [with OutputIterator = thrust::detail::normal_iterator<thrust::device_ptr<int> >, Size = long int, T = int]’
/usr/local/cuda/include/thrust/detail/backend/generic/fill.h:51:3:   instantiated from ‘void thrust::detail::backend::generic::fill(ForwardIterator, ForwardIterator, const T&) [with ForwardIterator = thrust::detail::normal_iterator<thrust::device_ptr<int> >, T = int]’
/usr/local/cuda/include/thrust/detail/backend/fill.inl:51:3:   instantiated from ‘void thrust::detail::backend::dispatch::fill(ForwardIterator, ForwardIterator, const T&, Backend) [with ForwardIterator = thrust::detail::normal_iterator<thrust::device_ptr<int> >, T = int, Backend = thrust::detail::cuda_device_space_tag]’
/usr/local/cuda/include/thrust/detail/backend/fill.inl:83:3:   instantiated from ‘void thrust::detail::backend::fill(ForwardIterator, ForwardIterator, const T&) [with ForwardIterator = thrust::detail::normal_iterator<thrust::device_ptr<int> >, T = int]’
/usr/local/cuda/include/thrust/detail/fill.inl:34:3:   instantiated from ‘void thrust::fill(ForwardIterator, ForwardIterator, const T&) [with ForwardIterator = thrust::detail::normal_iterator<thrust::device_ptr<int> >, T = int]’
/home/rrob/workspace/dicol/klm/src/Map.cpp:390:49:   instantiated from here
/usr/local/cuda/include/thrust/detail/backend/cuda/for_each.inl:96:1: error: invalid application of ‘sizeof’ to incomplete type ‘thrust::detail::STATIC_ASSERTION_FAILURE<false>’ 
/usr/local/cuda/include/thrust/detail/backend/cuda/arch.h: At global scope:
/usr/local/cuda/include/thrust/detail/backend/cuda/arch.h:90:15: warning: inline function ‘size_t thrust::detail::backend::cuda::arch::compute_capability()’ used but never defined
make[2]: *** [CMakeFiles/Map.dir/Map.cpp.o] Error 1
make[1]: *** [CMakeFiles/Map.dir/all] Error 2
make: *** [all] Error 2

Solution

  • You are using the wrong compilation path because the file extension you have for the code is incorrect:

    make[2]: *** [CMakeFiles/Map.dir/Map.cpp.o] Error 1
    

    The solution is to name the file to Map.cu rather than Map.ccp. The .cu extension tells nvcc that there is device code in the file and the device compiler trajectory is required. thrust::fill invokes a kernel and brings in device code, whereas vector declarations only use API calls which the host compiler can deal with. This is why the compilation only fails with the thrust::fill call in place.