Sorting 如何对CUDA向量类型数组进行排序

Sorting 如何对CUDA向量类型数组进行排序,sorting,cuda,thrust,cub,Sorting,Cuda,Thrust,Cub,具体来说,如何对float3数组进行排序?这样,.x组件是主要排序标准,.y组件是次要排序标准,.z组件是第三排序标准 是否有一个简单的解决方案可以对cub::DeviceRadixSort或推力::按键排序 现在我在想,也许我可以创建一个uint32键数组,其中每个元素的前三分之一的数字取自输入数组的.x组件的前三分之一,第二个三分之一的数字取自输入数组的.y组件的前三分之一,最后三分之一的数字取自输入数组的.z组件的前三分之一。还是有更好的解决方案 使用建议我制作以下解决方案的。再次感谢你,

具体来说,如何对
float3
数组进行排序?这样,
.x
组件是主要排序标准,
.y
组件是次要排序标准,
.z
组件是第三排序标准

是否有一个简单的解决方案可以对
cub::DeviceRadixSort
推力::按键排序

现在我在想,也许我可以创建一个
uint32
键数组,其中每个元素的前三分之一的数字取自输入数组的
.x
组件的前三分之一,第二个三分之一的数字取自输入数组的
.y
组件的前三分之一,最后三分之一的数字取自输入数组的
.z
组件的前三分之一。还是有更好的解决方案

使用建议我制作以下解决方案的。再次感谢你,罗布

#include <thrust/sort.h>
#include <thrust/device_ptr.h>

struct sort_float3 {
    __host__ __device__
    bool operator()(const float3 &a, const float3 &b) const {

    if      (a.x <= b.x && a.y <= b.y && a.z < b.z) return true;
    else if (a.x <= b.x && a.y < b.y) return true;
    else if (a.x < b.x) return true;
    else return false;
    }
};

int main(void)
{
    float3 *h_array;
    // Define your host array
    float3 *d_array;
    cudaMallocHost( (void**)&d_array,
                    number_of_elements * sizeof(float3) );      
    cudaMemcpy( d_array,
                h_array, 
                number_of_elements * sizeof(float3),
                cudaMemcpyHostToDevice );

    thrust::device_ptr<float3> th_array( d_array );
    thrust::sort( th_array, 
                  th_array+number_of_elements , 
                  sort_float3() );
    return 0;
}
#包括
#包括
结构排序浮点数3{
__主机设备__
布尔运算符()(常量浮点3&a、常量浮点3&b)常量{

如果(a.x你可以使用这样的方法。你需要一个
按键排序吗?
?从这个问题上我不清楚你需要什么。你只需要构造一个推力函子来建立你想要的排序规则。你的权利。我不需要键,我只是认为它是一个有用的工具,可以避免提取单个元素。解决方案n你指出看起来很有用,虽然我对函子并不特别熟悉。你有很好的参考/例子吗?特别是解释函子的参数的东西。函子是C++函数对象。如果你使用谷歌,你会发现很多参考指南,比如,它不是一个特定于推力的概念。推力是有用的,尽管它并不特别关注于函子。如果你想做推力编程,函子是相当重要的工具。但除此之外,我之前链接的示例的一个小修改可以用来对推力中的
float3
数组进行排序。非常感谢Rob,我想我正在走向一个工作的道路g解决方案。感谢您的帮助。是时候让我成为函子高手了。