Sorting 推力:由于内存分配,按按键排序速度较慢
我正在对大小为8000万的键值int数组进行排序。 该设备为GTX 560 Ti2GBVRAM。可用时(免费) 排序依据键之前的内存为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) 我怀疑在按键排序中正在进行内存分配, 在调用其第一个
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驱动程序存在问题: