我正在尝试使用 Thrust 减少一组值的最小值和最大值,但我似乎被卡住了。给定一组浮点数,我想要一次减少它们的最小值和最大值,但是使用推力的 reduce 方法,我得到了所有模板编译错误的母亲(或至少是阿姨)。
我的原始代码包含 5 个值列表,分布在 2 个我想要减少的 float4 数组中,但我已将其归结为这个简短的示例。
struct ReduceMinMax {
__host__ __device__
float2 operator()(float lhs, float rhs) {
return make_float2(Min(lhs, rhs), Max(lhs, rhs));
}
};
int main(int argc, char *argv[]){
thrust::device_vector<float> hat(4);
hat[0] = 3;
hat[1] = 5;
hat[2] = 6;
hat[3] = 1;
ReduceMinMax binary_op_of_dooooom;
thrust::reduce(hat.begin(), hat.end(), 4.0f, binary_op_of_dooooom);
}
如果我将它分成 2 个缩减而不是它当然有效。那么我的问题是:是否有可能通过推力同时减少最小值和最大值,以及如何减少?如果不是,那么实现上述减少的最有效方法是什么?转换迭代器会帮助我吗(如果是这样,那么减少会是一次减少吗?)
一些附加信息:我正在使用 Thrust 1.5(由 CUDA 4.2.7 提供) 我的实际代码使用的是 reduce_by_key,而不仅仅是 reduce。我在写这个问题时发现了 transform_reduce ,但是这个问题没有考虑到密钥。