MCPcopy Create free account
hub / github.com/arrayfire/arrayfire / reduceBlocksByKey

Function reduceBlocksByKey

src/backend/opencl/kernel/reduce_by_key.hpp:89–126  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

87
88template<typename Ti, typename Tk, typename To, af_op_t op>
89void 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
128template<typename Tk, typename To, af_op_t op>
129void finalBoundaryReduce(cl::Buffer *reduced_block_sizes, Param keys_out,

Callers

nothing calls this directly

Calls 6

TemplateArgClass · 0.85
getNameFunction · 0.85
EnqueueArgsClass · 0.85
initFunction · 0.50
getKernelFunction · 0.50
getQueueFunction · 0.50

Tested by

no test coverage detected