2017-03-01 6 views
0

推力リダクションを複数のタイプのバイナリ関数でどのように使用しますか?私の場合、メンバ 'distance'を持つ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; 

} 

答えて

0

:talonmiesノートとして

Thrust reduce not working with non equal input/output types

」、あなたの削減はしていませんthrust :: reduceはバイナリ演算子の引数型が結果の型に一致すると期待しているためコンパイルします "

推力では不可能です:: Reduce。私は今でもやりたいことを達成する方法を見つけ出しません。

edit:代わりにthrust :: transform_reduceを使う必要があるかもしれませんが、どちらを使うかはわかりません。

+0

実際には 'thrust :: reduce'では可能ですが、独自のバイナリ関数ではなく、あなたの型のカスタムイテレータを実装する必要があります – talonmies

関連する問題