我正在尝试使用 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() 需要多少内存?
- 有没有办法解决这个问题 ?(即使它让它变慢了一点或其他)
- 是否有另一种排序算法不需要比原始数组更多的内存?
谢谢你的帮助 :)