| 42 | |
| 43 | template<typename Ti, typename Tk, typename To, af_op_t op> |
| 44 | void reduceBlocksByKeyDim(cl::Buffer *reduced_block_sizes, Param keys_out, |
| 45 | Param vals_out, const Param keys, const Param vals, |
| 46 | int change_nan, double nanval, const int n, |
| 47 | const uint threads_x, const int dim, |
| 48 | std::vector<int> dim_ordering) { |
| 49 | ToNumStr<To> toNumStr; |
| 50 | std::vector<TemplateArg> tmpltArgs = { |
| 51 | TemplateTypename<Ti>(), TemplateTypename<To>(), TemplateTypename<Tk>(), |
| 52 | TemplateArg(op), TemplateArg(threads_x), |
| 53 | }; |
| 54 | std::vector<std::string> compileOpts = { |
| 55 | DefineKeyValue(Tk, dtype_traits<Tk>::getName()), |
| 56 | DefineKeyValue(Ti, dtype_traits<Ti>::getName()), |
| 57 | DefineKeyValue(To, dtype_traits<To>::getName()), |
| 58 | DefineKeyValue(T, "To"), |
| 59 | DefineKeyValue(DIMX, threads_x), |
| 60 | DefineKeyValue(DIM, dim), |
| 61 | DefineKeyValue(init, toNumStr(common::Binary<To, op>::init())), |
| 62 | DefineKeyFromStr(binOpName<op>()), |
| 63 | DefineKeyValue(CPLX, iscplx<Ti>()), |
| 64 | }; |
| 65 | compileOpts.emplace_back(getTypeBuildDefinition<Ti>()); |
| 66 | |
| 67 | auto reduceBlocksByKeyDim = |
| 68 | common::getKernel("reduce_blocks_by_key_dim", |
| 69 | {{ops_cl_src, reduce_blocks_by_key_dim_cl_src}}, |
| 70 | tmpltArgs, compileOpts); |
| 71 | int numBlocks = divup(n, threads_x); |
| 72 | |
| 73 | cl::NDRange local(threads_x); |
| 74 | cl::NDRange global(threads_x * numBlocks, |
| 75 | vals_out.info.dims[dim_ordering[1]], |
| 76 | vals_out.info.dims[dim_ordering[2]] * |
| 77 | vals_out.info.dims[dim_ordering[3]]); |
| 78 | |
| 79 | reduceBlocksByKeyDim(cl::EnqueueArgs(getQueue(), global, local), |
| 80 | *reduced_block_sizes, *keys_out.data, keys_out.info, |
| 81 | *vals_out.data, vals_out.info, *keys.data, keys.info, |
| 82 | *vals.data, vals.info, change_nan, scalar<To>(nanval), |
| 83 | n, |
| 84 | static_cast<int>(vals_out.info.dims[dim_ordering[2]])); |
| 85 | CL_DEBUG_FINISH(getQueue()); |
| 86 | } |
| 87 | |
| 88 | template<typename Ti, typename Tk, typename To, af_op_t op> |
| 89 | void reduceBlocksByKey(cl::Buffer *reduced_block_sizes, Param keys_out, |
nothing calls this directly
no test coverage detected