Skip to content
Snippets Groups Projects
Commit d6600250 authored by Abhinav Singh's avatar Abhinav Singh
Browse files

fix: GPU temporal expression performance

parent f31559a7
No related branches found
No related tags found
No related merge requests found
......@@ -835,14 +835,40 @@ struct vector_dist_expression_comp_proxy_sel
{ vector_dist_op_compute_op<0,false,vector_dist_expression_comp_sel<comp_dev,cond_>::type::value>
::compute_expr(v,v_exp);}
};
template<unsigned int prp, typename vector>
class vector_dist_expression;
template<typename v_exp>
struct transform_if_temporal
{
template<typename T>
static auto transform(T & v) -> decltype(v)
{
return v;
}
};
template<typename T>
struct transform_if_temporal<vector_dist_expression<0,openfpm::vector_gpu<aggregate<T>>>>
{
template<typename T_>
static auto transform(T_ & v) -> decltype(v.getVector().toKernel())
{
return v.getVector().toKernel();
}
};
template<>
struct vector_dist_expression_comp_proxy_sel<false>
{
template<bool cond, typename v_type, typename exp_type>
static void compute(v_type &v, exp_type &v_exp)
{ auto v_ker=v.toKernel();
auto v_exp_transformed = transform_if_temporal<typename std::remove_const<exp_type>::type>::transform(v_exp);
vector_dist_op_compute_op<0,false,vector_dist_expression_comp_sel<comp_dev,cond>::type::value>
::compute_expr(v_ker,v_exp);}
::compute_expr(v_ker,v_exp_transformed);}
};
template<typename vector, bool is_ker = has_vector_kernel<vector>::type::value>
......@@ -1512,12 +1538,24 @@ public:
{
return base::operator=(v_exp);
}
vector & operator=(const vector_dist_expression<0,openfpm::vector_gpu<aggregate<T>>> & v_exp)
{
return base::operator=(v_exp);
}
vector & equalGPU(const vector_dist_expression<0,openfpm::vector_gpu<aggregate<T>>> & v_exp)
{
return base::operator=(v_exp);
}
template<typename exp1, typename exp2, unsigned int op>
vector & operator=(const vector_dist_expression_op<exp1,exp2,op> & v_exp)
{
return base::operator=(v_exp);
}
};
template<typename T> using texp_v = vector_dist_expression<0,openfpm::vector<aggregate<T>>>;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment