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

Function reduceBlocksByKeyDim

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

Source from the content-addressed store, hash-verified

42
43template<typename Ti, typename Tk, typename To, af_op_t op>
44void 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
88template<typename Ti, typename Tk, typename To, af_op_t op>
89void reduceBlocksByKey(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