cuda - 推力:填充编译错误

标签 cuda fill thrust

我需要一些帮助来追踪 thrust::fill 给我的编译错误。

代码没有问题:

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

如果我注释掉“fill”行,它会编译正常。 我使用的任何 (raw_pointer, device_vector,..) thrust::fill 命令都会产生此错误。其他 THRUST cmd 编译正常。 错误有几页那么长。我不确定错误是什么。 'for_each' 被多次提及。最后一个带有“compute_capability”的是没有意义的,因为它不在我的任何代码中。我尝试添加一堆“#include”文件,但没有任何帮助。

如有任何想法,我们将不胜感激。

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

最佳答案

您使用了错误的编译路径,因为您的代码文件扩展名不正确:

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

解决方案是将文件命名为 Map.cu 而不是 Map.ccp。 .cu 扩展名告诉 nvcc 文件中有设备代码,需要设备编译器轨迹。 thrust::fill 调用内核并引入设备代码,而向量声明仅使用主机编译器可以处理的 API 调用。这就是编译仅在 thrust::fill 调用就位时失败的原因。

关于cuda - 推力:填充编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10804040/

相关文章:

cuda - 原子的乘法和除法?

ubuntu - 编译 CUDA 查找错误的 CUDA 版本

ffmpeg - 使用 nvidia/cuda 编译 ffmpeg 加载 nvcuvid 失败

javascript - 使 Canvas 对象的绘制路径透明?

Java用给定字符串字符(?)的N个元素填充数组

c++ - thrust::binary_search 在运行时失败,执行策略指定了用户流

cuda - 无需内存移动即可交换 CUDA 推力设备矢量

谁能解释一下这个 CUDA 内核是如何执行的?

Python pandas fillna 只有一行具有特定值

cuda - uint2 : "has no member x" compiler error? 类型的推力向量