1
ThrustとCUDAを使用して配列内の最小値を探しようとしています。
次のデバイスの例は、0で返します。thrust :: min_elementはfloat4のdevice_vectorでは機能しませんが、host_vectorでは機能しません
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);
}
};
を私はちょうどその推力を追加したいです:: sortは同じ述語で動作します。
あなたが '' 'my_float4'''、すなわち' ''構造体my_float4 {float型のXでこれを試すとどうなりますか、 y、z、w; }; '' '? –
そのトリックをした!私は、元の投稿を書いた後、その解決策がほんの少し分かった...私は実際に自分自身の新しいfloat4構造体を定義しました。新しい構造体は基本的にfloat4(バイト単位)に等しいので、ほとんど何も変更しなくてはなりませんでした –