私は自分の cuda コードに trust::sort を追加しようとしていますが、nvcc は次のように教えてくれます:
type_traits.h(322): error C2660: 'test' : function does not take 1 arguments
type_traits.h(322): error C2866:'thrust::detail::tt_detail::is_convertible_sfinae<From,To>::value' : a const static data member of a managed type must be initialized at the point of declaration
type_traits.h(355): error C2057: expected constant expressiontype_traits.h(363): error C2975: '__v' : invalid template argument for 'thrust::detail::integral_constant', expected compile-time constant expression
type_traits.h(363): error C2975: '__v' : invalid template argument for 'thrust::detail::integral_constant', expected compile-time constant expression
私はそれを検索しましたが、私と同じ問題を抱えている人はいないようです
スラストに関する私のコードの部分:
#include <thrust\sort.h>
struct prepare_struct
{
float xp;
float yp;
float zp;
float xs;
float ys;
float zs;
float sep;
int idSrc_idEve;
};
int compare_sort(prepare_struct &a, prepare_struct &b){ return a.sep > b.sep;}
void func(...){
...
prepare_struct* sPos_d;
checkCudaErrors( cudaMalloc((void**)&sPos_d, n*sizeof(prepare_struct) ) );
//a kernel that will fill sPos_d
thrust::sort(sPos_d, sPos_d + n, compare_sort);
...
}
Thrust::sort() を削除すると、エラーなしでコンパイルできます。
Thrust::device_vector を試してみましたが、同じエラーが発生します
そして raw_pointer_cast() も同じエラーメッセージを受け取ります
これは推力または nvcc 内のバグですか?
または私のコードに何か問題がありますか?
環境:
win7 x64 対 2010 cuda 5.0 sm_20
device_vector バージョン:
#include <thrust/device_vector.h>
void func(...){
...
thrust::device_vector<prepare_struct> sPos_dv(n_src_sta);
prepare_struct* sPos_d = thrust::raw_pointer_cast(sPos_dv.data());
//a kernel that will fill sPos_d
thrust::sort(sPos_dv.begin(),sPos_dv.end(),compare_sort);
...
}