我只是尝试在我的 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);
...
}
如果我删除推力::排序(),它可以编译没有错误
我试过推力::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);
...
}