împingere: umpleți erorile de compilare

Am nevoie de ajutor pentru urmărirea erorilor de compilare pe care le dă thrust :: fill .

Nu este nimic în neregulă cu codul:

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 junk(20);          //any ol array
line 390 thrust::fill(junk.begin(), junk.end(), (int)0);//the problem line

Se va compila bine dacă coment "linia de umplere". Orice comandă (raw_pointer, device_vector, ..) thrust :: fill pe care o folosesc va genera această eroare. Alte cmds THRUST compilează bine. Eroarea are câteva pagini lungi. Nu sunt sigur ce este eroarea. "for_each" este menționat foarte mult. Ultimul cu "compute_capability" nu are sens, pentru că nu este în codul meu. Am încercat să adaug o grămadă de fișiere "#include", dar nu a ajutat la nici unul.

Orice idei ar fi apreciate.

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 >, Size = long int, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor >]’:
/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 >, Size = long int, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor >]’
/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 >, Size = long int, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor >]’
/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 >, Size = long int, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor >]’
/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 >, Size = long int, Generator = thrust::detail::fill_functor]’
/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 >, Size = long int, T = int, thrust::detail::false_type = thrust::detail::integral_constant]’
/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 >, 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 >, 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 >, 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 >, 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 >, 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’ 
/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, Size = long int, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor >]’:
/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, Size = long int, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor >]’
/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, Size = long int, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor >]’
/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, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor >]’
/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, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor >, 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, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor >]’
/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 >, 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 >, 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 >, 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 >, 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 >, 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’ 
/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, Size = long int, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor >]’:
/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, Size = long int, UnaryFunction = thrust::detail::device_generate_functor<thrust::detail::fill_functor >]’
/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 = th
0
Fișierul special care conține apelul pentru umplere() este compilat folosind NVCC?
adăugat autor Bart, sursa

1 răspunsuri

Utilizați calea de compilare greșită deoarece extensia de fișier pe care o aveți pentru cod este incorectă:

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

Soluția este să denumiți fișierul Map.cu mai degrabă decât Map.ccp . Extensia .cu indică nvcc că există un cod de dispozitiv în fișier și este necesară traiectoria compilatorului de dispozitiv. thrust :: fill invocă un kernel și aduce codul dispozitivului, în timp ce declarațiile vectoriale utilizează numai apeluri API pe care compilatorul gazdă le poate rezolva. Acesta este motivul pentru care compilația nu reușește decât cu apelul thrust :: fill în loc.

0
adăugat
Da, asta este problema. (Am pierdut ore în această privință). Am fost în curs de dezvoltare cod în fișierul Map.cpp cu intenția de ao muta într-un fișier map.cu. Atât de multe dintre celelalte comenzi ale mele THRUST s-ar compila bine în fișierul cpp, ... n-aș fi prins niciodată. Până acum am crezut că NVCC nu-i pasă de extensia fișierului.
adăugat autor Doug, sursa
@Doug Sunteți sigur că utilizați indicatorii dispozitivului când utilizați alte comenzi de împingere?
adăugat autor Pavan Yalamanchili, sursa