2017-03-01 78 views
0

如何用多種類型的binary_functions使用推力減小?在我的情況下,我有一個結構FaceUV,它有一個'距離'成員。我想計算所有FaceUV的距離!= 0.我該怎麼做?用binary_function和多種類型推力減少

我認爲這是這一點,但它並不能編譯:

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; 

} 

回答

0

看來這類似於這樣的問題:

Thrust reduce not working with non equal input/output types

「作爲talonmies筆記,你的降低不會因爲thrust :: reduce期望二元運算符的參數類型匹配其結果類型「

因此,推力::減少。我還沒有想出如何完成我想要做的事情。

編輯:我可能需要使用thrust :: transform_reduce來代替,但我無法弄清楚如何使用它。

+0

它實際上可以用'thrust :: reduce',但是您需要爲您的類型實現自定義迭代器,而不是使用自定義二元函數 – talonmies