我在这里查看了很多类似的问题,并且有很多问题,尽管有一个微小的变化。我正在尝试使用 zip_iterator 作为复合键对值进行排序。
具体来说,我有以下功能:
无效推力排序( 无符号整数 * 主键, 浮动 * 次要键, 无符号整数 * 值, unsigned int numberOfPoints) { 推力::device_ptr dev_ptr_pkey = 推力::device_pointer_cast(primaryKey); 推力::device_ptr dev_ptr_skey = 推力::device_pointer_cast(secondaryKey); 推力::device_ptr dev_ptr_values = 推力::device_pointer_cast(values); 推力::元组,推力::device_ptr> keytup_begin = 推力::make_tuple,推力::device_ptr>(dev_ptr_pkey, dev_ptr_skey); 推力::zip_iterator, 推力::device_ptr > > first = 推力::make_zip_iterator, 推力::device_ptr > >(keytup_begin); 推力::sort_by_key(first, first + numberOfPoints, dev_ptr_values, ZipComparator()); }
和这个自定义谓词:
typedef thrust::device_ptr<unsigned int> tdp_uint ;
typedef thrust::device_ptr<float> tdp_float ;
typedef thrust::tuple<tdp_uint, tdp_float> tdp_uif_tuple ;
struct ZipComparator
{
__host__ __device__
inline bool operator() (const tdp_uif_tuple &a, const tdp_uif_tuple &b)
{
if(a.head < b.head) return true;
if(a.head == b.head) return a.tail < b.tail;
return false;
}
};
我得到的错误是:
错误 1 错误:没有构造函数实例“thrust::device_ptr::device_ptr [with T=unsigned int]”匹配参数列表 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\include\thrust\detail \元组.inl 309 1 --- 错误 2 错误:没有构造函数实例“thrust::device_ptr::device_ptr [with T=float]”匹配参数列表 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\include\thrust\detail\元组.inl 401 1 ---
有什么想法可能导致这种情况/我如何编写一个确实有效的谓词?
提前致谢, 内森