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() にはあとどれくらいのメモリが必要ですか?
- これを修正する方法はありますか? (たとえそれが少し遅くなったとしても)
- 元の配列よりも多くのメモリを必要としない別の並べ替えアルゴリズムはありますか?
ご協力いただきありがとうございます :)