2016-12-20 1 views
0

Je tente de mettre à niveau ce projet (https://github.com/ashwin/gStar4D), qui est écrit en CUDA 4.0 à 8.0. Mais je reçois une tonne d'erreurs de compilation charrié sur des lignes comme ceci:Erreurs de poussée passant de CUDA 4.0 à 8.0

thrust::sort_by_key( orderVec.begin(), orderVec.end(), 
          thrust::make_zip_iterator(make_tuple(_pointVec->begin(), _scaledVec->begin()))); 

Les erreurs sont généralement « erreur: classe « poussée :: tuple_size <> » n'a pas de membre « valeur » », « erreur: type incomplet n'est pas autorisé » ou « erreur: nom suivi de « :: » doit être un nom de classe ou espace de noms »

1>E:\programs\Nvidia GPU Computing Toolkit\CUDA\v8.0\include\thrust/tuple.h(90): error : name followed by "::" must be a class or namespace name 
1>     detected during: 
1>      instantiation of class "thrust::tuple_size<T> [with T=<error-type>]" 
1>   (90): here 
1>      instantiation of class "thrust::tuple_size<T> [with T=std::tuple<thrust::detail::normal_iterator<thrust::device_ptr<Point3>>, thrust::detail::normal_iterator<thrust::device_ptr<Point3>>>]" 
1>   E:\programs\Nvidia GPU Computing Toolkit\CUDA\v8.0\include\thrust/detail/tuple_meta_transform.h(29): here 
1>      processing of template argument list for "thrust::detail::tuple_meta_transform" based on template arguments <std::tuple<thrust::detail::normal_iterator<thrust::device_ptr<Point3>>, thrust::detail::normal_iterator<thrust::device_ptr<Point3>>>, thrust::iterator_reference> 
1>   E:\programs\Nvidia GPU Computing Toolkit\CUDA\v8.0\include\thrust/iterator/detail/zip_iterator_base.h(329): here 
1>      instantiation of class "thrust::detail::zip_iterator_base_ns::tuple_of_iterator_references<IteratorTuple> [with IteratorTuple=std::tuple<thrust::detail::normal_iterator<thrust::device_ptr<Point3>>, thrust::detail::normal_iterator<thrust::device_ptr<Point3>>>]" 
1>   E:\programs\Nvidia GPU Computing Toolkit\CUDA\v8.0\include\thrust/iterator/detail/zip_iterator_base.h(365): here 
1>      instantiation of class "thrust::detail::zip_iterator_base<IteratorTuple> [with IteratorTuple=std::tuple<thrust::detail::normal_iterator<thrust::device_ptr<Point3>>, thrust::detail::normal_iterator<thrust::device_ptr<Point3>>>]" 
1>   E:\programs\Nvidia GPU Computing Toolkit\CUDA\v8.0\include\thrust/iterator/zip_iterator.h(141): here 
1>      instantiation of class "thrust::zip_iterator<IteratorTuple> [with IteratorTuple=std::tuple<thrust::detail::normal_iterator<thrust::device_ptr<Point3>>, thrust::detail::normal_iterator<thrust::device_ptr<Point3>>>]" 
1>   E:/testcode/gStar4D-master/GDelaunay/GDelaunay/GDelData.cu(119): here 
1> 
1>  1> 
1>E:\programs\Nvidia GPU Computing Toolkit\CUDA\v8.0\include\thrust/tuple.h(90): error : class "thrust::tuple_size<<error-type>>" has no member "value" 
1>     detected during: 
1>      instantiation of class "thrust::tuple_size<T> [with T=<error-type>]" 
1>   (90): here 
1>      instantiation of class "thrust::tuple_size<T> [with T=std::tuple<thrust::detail::normal_iterator<thrust::device_ptr<Point3>>, thrust::detail::normal_iterator<thrust::device_ptr<Point3>>>]" 
1>   E:\programs\Nvidia GPU Computing Toolkit\CUDA\v8.0\include\thrust/detail/tuple_meta_transform.h(29): here 
1>      processing of template argument list for "thrust::detail::tuple_meta_transform" based on template arguments <std::tuple<thrust::detail::normal_iterator<thrust::device_ptr<Point3>>, thrust::detail::normal_iterator<thrust::device_ptr<Point3>>>, thrust::iterator_reference> 
1>   E:\programs\Nvidia GPU Computing Toolkit\CUDA\v8.0\include\thrust/iterator/detail/zip_iterator_base.h(329): here 
1>      instantiation of class "thrust::detail::zip_iterator_base_ns::tuple_of_iterator_references<IteratorTuple> [with IteratorTuple=std::tuple<thrust::detail::normal_iterator<thrust::device_ptr<Point3>>, thrust::detail::normal_iterator<thrust::device_ptr<Point3>>>]" 
1>   E:\programs\Nvidia GPU Computing Toolkit\CUDA\v8.0\include\thrust/iterator/detail/zip_iterator_base.h(365): here 
1>      instantiation of class "thrust::detail::zip_iterator_base<IteratorTuple> [with IteratorTuple=std::tuple<thrust::detail::normal_iterator<thrust::device_ptr<Point3>>, thrust::detail::normal_iterator<thrust::device_ptr<Point3>>>]" 
1>   E:\programs\Nvidia GPU Computing Toolkit\CUDA\v8.0\include\thrust/iterator/zip_iterator.h(141): here 
1>      instantiation of class "thrust::zip_iterator<IteratorTuple> [with IteratorTuple=std::tuple<thrust::detail::normal_iterator<thrust::device_ptr<Point3>>, thrust::detail::normal_iterator<thrust::device_ptr<Point3>>>]" 
1>   E:/testcode/gStar4D-master/GDelaunay/GDelaunay/GDelData.cu(119): here 
1> 
1>  1> 
1>E:\programs\Nvidia GPU Computing Toolkit\CUDA\v8.0\include\thrust/iterator/detail/zip_iterator_base.h(326): error : incomplete type is not allowed 
1>     detected during: 
1>      instantiation of class "thrust::detail::zip_iterator_base_ns::tuple_of_iterator_references<IteratorTuple> [with IteratorTuple=std::tuple<thrust::detail::normal_iterator<thrust::device_ptr<Point3>>, thrust::detail::normal_iterator<thrust::device_ptr<Point3>>>]" 
1>   (365): here 
1>      instantiation of class "thrust::detail::zip_iterator_base<IteratorTuple> [with IteratorTuple=std::tuple<thrust::detail::normal_iterator<thrust::device_ptr<Point3>>, thrust::detail::normal_iterator<thrust::device_ptr<Point3>>>]" 
1>   E:\programs\Nvidia GPU Computing Toolkit\CUDA\v8.0\include\thrust/iterator/zip_iterator.h(141): here 
1>      instantiation of class "thrust::zip_iterator<IteratorTuple> [with IteratorTuple=std::tuple<thrust::detail::normal_iterator<thrust::device_ptr<Point3>>, thrust::detail::normal_iterator<thrust::device_ptr<Point3>>>]" 
1>   E:/testcode/gStar4D-master/GDelaunay/GDelaunay/GDelData.cu(119): here 
1> 

Toute réflexion sur ce que la question pourrait être?

+2

Quand je compile 'GDelData.cu' par lui-même sur linux sur CUDA 8, j'obtiens quelques avertissements mais aucune erreur. Que se passe-t-il si vous changez 'make_tuple' sur la ligne 119 en' thrust :: make_tuple'? –

+0

Cela a fait l'affaire. Merci! – griffin2000

+1

@ griffin2000: voulez-vous ajouter une réponse décrivant votre solution? – talonmies

Répondre

2

Comme Robert suggéré ci-dessus, juste besoin d'ajouter à la poussée :: make_tuple:

thrust::sort_by_key( orderVec.begin(), orderVec.end(), 
         thrust::make_zip_iterator(thrust::make_tuple(_pointVec->begin(), _scaledVec->begin()))); 

vient de présenter un PR avec tous les changements nécessaires à l'exécution sur Cuda 8.0 ici: https://github.com/ashwin/gStar4D/pull/1