| 87 | |
| 88 | template<typename Ti, typename Tk, typename To, af_op_t op> |
| 89 | void reduceBlocksByKey(cl::Buffer *reduced_block_sizes, Param keys_out, |
| 90 | Param vals_out, const Param keys, const Param vals, |
| 91 | int change_nan, double nanval, const int n, |
| 92 | const uint threads_x) { |
| 93 | ToNumStr<To> toNumStr; |
| 94 | std::vector<TemplateArg> tmpltArgs = { |
| 95 | TemplateTypename<Ti>(), TemplateTypename<To>(), TemplateTypename<Tk>(), |
| 96 | TemplateArg(op), TemplateArg(threads_x), |
| 97 | }; |
| 98 | std::vector<std::string> compileOpts = { |
| 99 | DefineKeyValue(Tk, dtype_traits<Tk>::getName()), |
| 100 | DefineKeyValue(Ti, dtype_traits<Ti>::getName()), |
| 101 | DefineKeyValue(To, dtype_traits<To>::getName()), |
| 102 | DefineKeyValue(T, "To"), |
| 103 | DefineKeyValue(DIMX, threads_x), |
| 104 | DefineKeyValue(init, toNumStr(common::Binary<To, op>::init())), |
| 105 | DefineKeyFromStr(binOpName<op>()), |
| 106 | DefineKeyValue(CPLX, iscplx<Ti>()), |
| 107 | }; |
| 108 | compileOpts.emplace_back(getTypeBuildDefinition<Ti>()); |
| 109 | |
| 110 | auto reduceBlocksByKeyFirst = |
| 111 | common::getKernel("reduce_blocks_by_key_first", |
| 112 | {{ops_cl_src, reduce_blocks_by_key_first_cl_src}}, |
| 113 | tmpltArgs, compileOpts); |
| 114 | int numBlocks = divup(n, threads_x); |
| 115 | |
| 116 | cl::NDRange local(threads_x); |
| 117 | cl::NDRange global(threads_x * numBlocks, vals_out.info.dims[1], |
| 118 | vals_out.info.dims[2] * vals_out.info.dims[3]); |
| 119 | |
| 120 | reduceBlocksByKeyFirst( |
| 121 | cl::EnqueueArgs(getQueue(), global, local), *reduced_block_sizes, |
| 122 | *keys_out.data, keys_out.info, *vals_out.data, vals_out.info, |
| 123 | *keys.data, keys.info, *vals.data, vals.info, change_nan, |
| 124 | scalar<To>(nanval), n, static_cast<int>(vals_out.info.dims[2])); |
| 125 | CL_DEBUG_FINISH(getQueue()); |
| 126 | } |
| 127 | |
| 128 | template<typename Tk, typename To, af_op_t op> |
| 129 | void finalBoundaryReduce(cl::Buffer *reduced_block_sizes, Param keys_out, |
nothing calls this directly
no test coverage detected