Cuda 推力::minmax_元素参数列表不匹配
我有以下一小段代码,它使用推力::minmax_元素来找出由3个浮点数组成的结构的最小值和最大值。但是编译器总是说参数列表不匹配。我正在Mac OS 10.9下使用CUDA 6.5Cuda 推力::minmax_元素参数列表不匹配,cuda,thrust,Cuda,Thrust,我有以下一小段代码,它使用推力::minmax_元素来找出由3个浮点数组成的结构的最小值和最大值。但是编译器总是说参数列表不匹配。我正在Mac OS 10.9下使用CUDA 6.5 struct Float3 {float x, y, z;}; struct Comparator : public binary_function<Float3, Float3, bool> { __host__ __device__ bool operator()(const Floa
struct Float3 {float x, y, z;};
struct Comparator : public binary_function<Float3, Float3, bool> {
__host__ __device__ bool operator()(const Float3& a, const Float3& b) const
{
return a.x > b.x;
}
};
Float3 a[10];
thrust::minmax_element(device_ptr<Float3>(a),
device_ptr<Float3>(a) + 10,
Comparator());
在将来,请提供一个完整的示例,有人可以复制、粘贴和编译以查看问题,而无需添加任何内容或更改任何内容
Float3 a[10];
在主机上创建数据。您不能使用推力::设备ptr包装这样创建的指针。它必须用于引用设备上的数据。设备上不存在。以下代码为我在CUDA 6.5中干净地编译和运行:
#include <thrust/extrema.h>
#include <thrust/device_ptr.h>
struct Float3 {float x, y, z;};
struct Comparator : public thrust::binary_function<Float3, Float3, bool> {
__host__ __device__ bool operator()(const Float3& a, const Float3& b) const
{
return a.x > b.x;
}
};
int main(){
Float3 a[10];
Float3 *d_a;
cudaMalloc(&d_a, 10*sizeof(Float3));
cudaMemcpy(d_a, a, 10*sizeof(Float3), cudaMemcpyHostToDevice);
thrust::minmax_element(thrust::device_ptr<Float3>(d_a),
thrust::device_ptr<Float3>(d_a) + 10,
Comparator());
}
请注意,上面的代码实际上编译时不会出错,即使您使用a而不是d_a,因为它们都是原始指针,但在编译时,推力无法分辨差异。但是使用a是一个错误,如果您尝试运行它,代码将抛出一个错误。谢谢您的回答。我知道问题出在哪里了。我最初在函数中定义了struct Comparator。在我把它移出函数之后,错误被修复了。