我想使用推力排序數組,但它不工作,如果數組太大。 (我有一個GTX460 1GB內存)cuda排序與推力,沒有足夠的內存
我使用CUDA與C對VS2012 ++集成,這是我的代碼:
我的.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()需要什麼?
- 有沒有辦法解決這個問題? (即使它使它慢一點或其他)
- 是否有另一種排序算法不需要比原始數組更多的內存?
感謝您的幫助:)
而不是三個操作,只能嘗試:'thrust :: stable_sort(data,data + n);' – sgarizvi 2013-02-11 10:27:10
@ sgar91:這將導致在主機CPU上運行排序... – talonmies 2013-02-11 10:37:38
@talonmies。感謝您的澄清。無論如何,我一直以爲推力使用設備。 – sgarizvi 2013-02-11 10:52:10