Я просто пытаюсь добавить доверия :: то в моем Cuda коде, но NVCC сказать мне, что:ошибка компиляции произошла в тяге/type_traits.h
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);
...
}
Если я удалю тяги :: 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);
...
}
Может ли вы сделать фактический REPRO код? И почему вы используете 'cudaMalloc' вместо выделения Thrust? (вы получите ту же ошибку, но версия 'device_vector' будет более логичной) – BenC
Если вы хотите знать, что не так с вашим кодом, вам действительно нужно будет показать некоторые. То, что вы разместили, таким образом, совершенно бесполезно. – talonmies
Я добавляю версию device_vector. Код здесь - это ВСЕ мой код, который использует thrust, и я могу запустить целую программу с помощью std :: sort() fine. – user2380547