Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 推力:由于内存分配,按按键排序速度较慢_Sorting_Slowdown_Thrust - Fatal编程技术网

Sorting 推力:由于内存分配,按按键排序速度较慢

Sorting 推力:由于内存分配,按按键排序速度较慢,sorting,slowdown,thrust,Sorting,Slowdown,Thrust,我正在对大小为8000万的键值int数组进行排序。 该设备为GTX 560 Ti2GBVRAM。可用时(免费) 排序依据键之前的内存为1200MB,它在200ms内完成排序。 但是,当可用内存降至600MB时,将为 相同的键值数组需要1.5-3s 我在Compute Visual Profiler下运行了该程序。我发现GPU 时间戳在sort\u by\u key 以及按_键排序中的第一个内核调用(这是一个 rakingReducement) 我怀疑在按键排序中正在进行内存分配, 在调用其第一个

我正在对大小为8000万的键值int数组进行排序。 该设备为GTX 560 Ti2GBVRAM。可用时(免费) 排序依据键之前的内存为
1200MB
,它在
200ms
内完成排序。 但是,当可用内存降至
600MB
时,将为 相同的键值数组需要
1.5-3s

我在Compute Visual Profiler下运行了该程序。我发现GPU 时间戳在
sort\u by\u key
以及
按_键排序
中的第一个内核调用(这是一个
rakingReducement

我怀疑在
按键排序
中正在进行内存分配, 在调用其第一个内部内核之前。按键排序的内存
sort\u by\u key
可以工作,尽管速度较慢。我看到那台电脑 发生这种情况时会冻结1s。我还看到CPU上有一个凸起 物理内存图形,如果我保持Process Explorer打开

我能做些什么来让这个
按键排序
工作得同样快吗 当可用内存较少时?还有,两个国家之间发生了什么 导致内存中断和临时中断的设备和主机
冻结?

推力::按键排序确实分配了O(N)的临时空间--基数排序大于单个多处理器可以完成的大小时,它不是就地排序。因此,输入数据至少需要80M*2*sizeof(int)=640MB,加上临时空间,对于这种排序,临时空间必须至少为320MB。我不清楚为什么排序不会在内存不足的情况下失败——可能600 MB是一个较低的估计值,或者推力会回到CPU执行(我怀疑它会这样做)

关于性能下降的另一个想法是,当您需要几乎所有的可用内存时,可用内存中可能会有一些碎片,驱动程序/运行时必须处理这些碎片才能分配如此大的阵列,从而导致额外的开销


顺便说一句,你是如何测量可用内存的?

harrism:谢谢!我使用cudaMemGetInfo()测量可用内存。我很确定推力不会落在CPU上。但是,根据Jared Hoberock(NVIDIA)的说法,这可能是因为Windows上的CUDA驱动程序存在问题: