MCPcopy Create free account
hub / github.com/MegEngine/MegCC / GetKernelBody

Method GetKernelBody

compiler/lib/KernelGen/Arm/ArmCommon/Resize.cpp:32–82  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

30}
31
32std::string ResizeKernel::GetKernelBody(TContext* context) const {
33 std::stringstream ss;
34 auto src_dtype = context->getAttrOprand("operand:0").dtype;
35 auto fmt = context->getAttrStr("format");
36 auto specifier = Utils::cvt_dtype_specifier(src_dtype);
37 auto imode = context->getAttrStr("imode");
38 ss << R"(
39 #include <arm_neon.h>
40 #include <math.h>
41 #include <stdalign.h>
42 )";
43 auto coord_str = ResizeHelper::GenCoordHelper(imode, specifier);
44 auto gen_layout_dims = ResizeHelper::GenLayoutDims(fmt);
45 auto get_offset = ResizeHelper::GenGetOffset(fmt);
46 ss << StringTemplate::StringTemplateArgs()
47 .add("coord_helper_str", coord_str)
48 .add("get_offset", get_offset)
49 .render(R"(
50 static inline float output_converter(float x){
51 return x;
52 }
53 ${coord_helper_str}
54 ${get_offset}
55 #define rep(i, n) for (int i = 0; i < (n); ++i)
56 )");
57 ss << GenCommonRet() << " " << GetKernelSignature(context);
58 std::string body_temp = R"({
59 const Tensor* src_tensor = inputs[0];
60 const Tensor* dst_tensor = outputs[0];
61 ${specifier}* sptr = (${specifier}*)(src_tensor->ptr);
62 ${specifier}* dptr = (${specifier}*)(dst_tensor->ptr);
63 TINYNN_ASSERT(sptr);
64 TINYNN_ASSERT(dptr);
65
66 const Layout src_layout = src_tensor->layout;
67 const Layout dst_layout = dst_tensor->layout;
68 ${gen_layout_dims}
69 float scale_h = (float)(OH) / IH;
70 float scale_w = (float)(OW) / IW;
71
72 ${normal_impl}
73 return TinyNN_SUCCESS;
74 })";
75 auto normal_impl = ResizeHelper::GenNormImpl(fmt);
76 ss << StringTemplate::StringTemplateArgs()
77 .add("specifier", specifier)
78 .add("normal_impl", normal_impl)
79 .add("gen_layout_dims", gen_layout_dims)
80 .render(body_temp);
81 return ss.str();
82}
83
84bool ResizeKernel::IsCVAvailable(TContext* context) const {
85 auto src_dtype = context->getAttrOprand("operand:0").dtype;

Callers

nothing calls this directly

Calls 7

cvt_dtype_specifierFunction · 0.85
StringTemplateArgsClass · 0.85
GenCommonRetFunction · 0.85
getAttrOprandMethod · 0.80
getAttrStrMethod · 0.80
renderMethod · 0.45
addMethod · 0.45

Tested by

no test coverage detected