2017-03-01 4 views
0

Wie verwenden Sie Schub reduzieren mit binary_functions mit mehreren Typen? In meinem Fall habe ich eine Struktur FaceUV, die ein Mitglied 'Abstand' hat. Ich möchte alle FaceUVs mit einer Entfernung zählen! = 0. Wie mache ich das?Thrust Reduce mit binary_function und mehreren Typen

Ich dachte, es war, aber es lässt sich nicht kompilieren:

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; 

} 

Antwort

0

es scheint dies auf diese Frage ähnlich ist:

Thrust reduce not working with non equal input/output types

„Als talonmies Notizen, Ihre Reduktion nicht kompilieren, weil thrush :: reduce erwartet, dass die Argumenttypen des Binäroperators dem Ergebnistyp "

" entsprechen. Dies ist also nicht mit Schub möglich ::Reduzieren. Ich habe immer noch nicht herausgefunden, wie ich erreichen kann, was ich tun möchte.

edit: Ich muss vielleicht stattdessen schub :: transform_reduce verwenden, aber ich kann nicht herausfinden, wie man das entweder verwendet.

+0

wäre es in der Tat möglich mit 'tush :: reduce ', aber Sie müssten einen benutzerdefinierten Iterator für Ihren Typ implementieren, anstatt mit einer benutzerdefinierten Binärfunktion – talonmies