Thrust Reduce with binary_function和多种类型

时间:2017-03-01 03:10:44

标签: cuda thrust

如何使用具有多种类型的binary_functions的推力减少?在我的情况下,我有一个结构FaceUV,其成员'距离'。我想用距离计算所有FaceUV!= 0.我该怎么做?

我以为是这个,但它没有编译:

struct FaceHasUVCmp : public thrust::binary_function<FaceUV, uint32_t, uint32_t> {
    __device__
        uint32_t operator()(const FaceUV& o1, const uint32_t& count) const {
        return count + (o1.distance != 0);
    }
};

float get_percent_of_FACES_with_UVs(thrust::device_ptr<FaceUV> face_uvs, unsigned int size){


    uint32_t num_with_UVs = thrust::reduce(thrust::cuda::par, face_uvs, face_uvs + size, 0, FaceHasUVCmp());

    return num_with_UVs / (float)size;

}

1 个答案:

答案 0 :(得分:0)

它似乎与这个问题类似:

Thrust reduce not working with non equal input/output types

&#34;正如talonmies所指出的那样,你的缩减不会编译,因为thrust :: reduce要求二元运算符的参数类型与其结果类型匹配&#34;

因此推力::减少是不可能的。我还没有弄清楚如何完成我想做的事。

编辑:我可能需要使用thrust :: transform_reduce,但我无法弄清楚如何使用它。