【发布时间】:2015-02-26 16:53:54
【问题描述】:
我正在尝试通过将比较函数作为参数传递给推力排序来根据其类型对类对象数组进行排序。
类定义:
class TetraCutInfo
{
public:
int tetraid;
unsigned int ncutEdges;
unsigned int ncutNodes;
unsigned int type_cut;
__host__ __device__ TetraCutInfo();
};
排序:
thrust::sort(cutInfoptr,cutInfoptr+n,cmp());
cutInfoptr 是 TetraCutInfo 类型的指针,具有使用 cudaMalloc 分配的设备内存地址。
比较函数
struct cmp
{
__host__ __device__
bool operator()(const TetraCutInfo x, TetraCutInfo y)
{
return (x.type_cut < y.type_cut);
}
};
在运行此程序时,我遇到了分段错误,但是我能够在另一个内核中遍历 cutInfoptr。
PS:我参考了链接https://code.google.com/p/thrust/source/browse/examples/sort.cu中的例子
【问题讨论】:
-
您应该提供完整的代码。您不能将 cudaMalloc 返回的指针直接用于推力函数。首先将它们包裹在推力::device_ptr 中。阅读 github 推力快速入门指南。
标签: cuda parallel-processing thrust