【发布时间】:2020-12-29 01:14:16
【问题描述】:
我正在尝试使用 Thrust 对数组进行排序,但如果数组太大,它将不起作用。 (我有一个 GTX460 1GB 内存)
我在 VS2012 上使用带有 c++ 集成的 cuda,这是我的代码:
我的.cpp
extern "C" void thrust_sort(uint32_t *data, int n);
int main(int argc, char **argv){
int n = 2<<26;
uint32_t * v = new uint32_t[n];
srand(time(NULL));
for (int i = 0; i < n; ++i) {
v[i] = rand()%n;
}
thrust_sort(v, n);
delete [] v;
return 0;
}
我的.cu
extern "C"
void thrust_sort(uint32_t *data, int n){
thrust::device_vector<uint32_t> d_data(data, data + n);
thrust::stable_sort(d_data.begin(), d_data.end());
thrust::copy(d_data.begin(), d_data.end(), data);
}
程序在 stable_sort() 开始时停止工作。
- stable_sort() 需要多少内存?
- 有没有办法解决这个问题? (即使它让它变慢了一些)
- 是否有另一种排序算法不需要比原始数组更多的内存?
感谢您的帮助:)
【问题讨论】:
-
推力排序requires O(N) temporary space。因此,当您用完大约一半的 GPU 内存来存储要排序的数组时,您将耗尽空间。我不知道解决这个问题的方法。我玩过back40 sort 和MGPU sort,两者都需要额外的存储空间,虽然我还没有对多少进行基准测试。
标签: c++ arrays cuda gpu thrust