thrust :: min_element不适用于float4 device_vector,而它适用于host_vector

时间:2012-02-12 19:35:54

标签: cuda thrust

我正在尝试使用Thrust和CUDA找到数组中的最小数字 以下设备示例返回0:

thrust::device_vector<float4>::iterator it =  thrust::min_element(IntsOnDev.begin(),IntsOnDev.end(),equalOperator());       
int pos = it - IntsOnDev.begin();

但是,这个主机版本运行良好:

thrust::host_vector<float4>arr = IntsOnDev;
thrust::host_vector<float4>::iterator it2 =  thrust::min_element(arr.begin(),arr.end(),equalOperator());
int pos2 = it2 - arr.begin();

comperator类型:

struct equalOperator
{
  __host__ __device__
    bool operator()(const float4 x,const float4 y) const
    {
        return ( x.w < y.w );
    }
};

我只想补充一下,push :: sort与同一个谓词一起使用。

1 个答案:

答案 0 :(得分:5)

不幸的是,nvcc不同意某些主机编译器(某些64位版本的MSVC,如果我没记错的话)关于某些对齐类型的大小。 float4就是其中之一。这通常会导致不确定的行为。

解决方法是使用没有对齐的类型,例如my_float4

struct my_float4
{
  float x, y, z, w;
};