是否可以使用Thrust库对对象进行排序?我有以下结构:
struct OB{
int N;
Cls *C; //CLS is another struct.
}
Run Code Online (Sandbox Code Playgroud)
是否可以使用推力来根据N对OB阵列进行排序?你能提供一个关于使用推力对物体进行分类的简单例子吗?如果推力不能这样做,是否还有其他CUDA库允许我这样做?
我正在为CUDA中的项目寻找高性能多扫描/多前缀和(一个内核执行中的许多行)函数.
我尝试过Thrust库中的那个但是它太慢了.使用nvcc调试标志(-g -G)编译后也会导致崩溃.
在我与Thrust失败之后,我专注于cuDPP库,它曾经是CUDA工具包的一部分.cuDPP性能非常好但是库没有最新的cuda 5.5,并且在使用内存检查器进行调试时,cudppMultiScan()函数中存在一些全局内存冲突问题.(cuda 5.5,nsight 3.1,visual studio 2010,gtx 260 cc 1.3)
有没有人知道使用什么而不是这两个库?
R.
我正在使用CUDA/Thrust/CUDPP.据我所知,在Stream压缩中,数组中的某些项被标记为无效,然后被"删除".
现在"删除"究竟意味着什么?假设原始数组A并且长度为6.如果2个元素无效(根据我们可能提供的任何条件)那么
系统是否在GPU内存中创建一个大小为4 的新数组来存储有效元素以获得最终结果?
或者它是否从内存中物理删除了无效元素,并将原始数组A缩小到4,只保留有效元素?
对于任何一种情况,这是否意味着动态内存分配正在引擎盖下?但我听说在CUDA世界中不可能进行动态内存分配.
对于在GPU上使用CUDA的数据并行算法,有两个标准库,CUDPP和Thrust,它们实现了排序,缩减,前缀和等.
那么在性能和功能方面,库之间的主要区别是什么?
是否可以在CUDA中使用CUDPP进行分段排序?通过分段排序,我的意思是对由下面的标志保护的数组元素进行排序.
A[10,9,8,7,6,5,4,3,2,1]
Flag array[1,0,1,0,0,1,0,0,0,0]
Run Code Online (Sandbox Code Playgroud)
排序A的元素在连续的1.之间.
预期输出
[9,10,6,7,8,1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)