2016-12-20 2 views
0

Ich versuche, dieses Projekt (https://github.com/ashwin/gStar4D), die in CUDA 4.0 bis 8.0 geschrieben ist, zu aktualisieren. Aber ich bin immer eine Tonne Kompilierungsfehler von Thrust auf Zeilen wie diese:Thrust Fehler Upgrade von CUDA 4.0 auf 8.0

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

Die Fehler sind in der Regel ‚Fehler: Klasse‚Schub :: tuple_size <>‘hat kein Mitglied‚Wert‘‘, ‚Fehler: unvollständiger Typ ist nicht erlaubt‘oder‚Fehler: Name, gefolgt von ‚::‘ muss eine Klasse oder Namespace-Name sein‘

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> 

Irgendwelche Gedanken darüber, was das Problem sein könnte?

+2

Wenn ich kompilieren "GDelData.cu" selbst unter Linux auf CUDA 8, bekomme ich einige Warnungen, aber keinen Fehler. Was passiert, wenn Sie 'make_tuple' in Zeile 119 in' thread :: make_tuple' ändern? –

+0

Das hat den Trick gemacht. Vielen Dank! – griffin2000

+1

@ griffin2000: Möchten Sie eine Antwort hinzufügen, die Ihre Lösung beschreibt? – talonmies

Antwort

2

Wie Robert oben vorgeschlagen, nur Schub hinzuzufügen benötigt :: to make_tuple:

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

Nur eine PR mit allen notwendigen Änderungen vorgelegt 8.0 hier auf Cuda auszuführen: https://github.com/ashwin/gStar4D/pull/1

Verwandte Themen