我有char array
10 个字符,我想将其作为参数传递给比较器,Thrust 的排序函数将使用该比较器。
为了给这个数组分配内存,我使用cudaMalloc
. 但是cudaMalloc
在全局内存中分配内存,所以每当一个线程想要从这个数组中读取数据时,它都必须访问全局内存。
但是这个数组很小,我相信如果将它存储到某个共享内存甚至每个线程的寄存器中会更有效率。但是,是否有可能通过 Thrust 实现这一目标?如果可以,如何实现?
这是比较器:
struct comp{
int *data_to_sort;
char *helpingArray;
comp(int *data_ptr) this->data_to_sort = data_ptr;
__host__ __device__
bool operator()(const int&a, const int&b){
//use helpingArray to do some comparisons and
// return true/false accordingly
}
}
然后我为helpingArray
全局内存中的 分配内存,并将其作为Comparator
结构的参数传递给排序函数。
请注意,data_to_sort
数组存储在全局内存中,因为它包含需要排序的数据,我们无法避免这种情况发生。
这很好用,排序方法比 cpu 排序方法快,但是我相信如果我避免将 存储helpingArray
在全局内存中,排序方法会变得更快。