我正在使用Thrust 1.8,当我尝试编译以下代码时出现两个编译器错误:
#include <thrust/device_vector.h>
#include <thrust/functional.h>
int main(int argc, char* argv[])
{
thrust::device_vector<bool> condition(100);
thrust::device_vector<int> input(100);
thrust::device_vector<float> result(100);
float mean = 10.4f;
thrust::transform(condition.begin(),condition.end(),input.begin(),result.begin(), ( (thrust::placeholders::_1 ) ? ( thrust::placeholders::_2) : (mean) ) );
}
当我尝试编译时,我得到以下编译器时间错误:
(对于占位符:: _ 1)
错误:表达式必须是bool类型(或可转换为bool)
(对于占位符:: _ 2)
错误:操作数类型不兼容(&#34; const thrust :: detail :: functional :: actor&lt; thrust :: detail :: functional :: argument&lt; 1U&gt;&gt;&#34;&#34 ;浮动&#34)
如何解决这个问题?
答案 0 :(得分:1)
您不能像您尝试的那样使用占位符,即与三元运算符结合使用。
相反,您可以创建自己的仿函数:
struct my_fun : public thrust::binary_function<bool,float,float>
{
float mean;
my_fun(float mean) : mean(mean) {}
__host__ __device__
float operator()(bool condition, float input) const
{
float result = mean;
if (condition)
{
result = input;
}
return result;
}
};
...
thrust::transform(condition.begin(),
condition.end(),
input.begin(),
result.begin(),
my_fun(mean));