MCPcopy Create free account
hub / github.com/MegEngine/MegEngine / execute

Method execute

src/jit/impl/mlir/executable_cpu.cpp:76–119  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

74}
75
76void MLIRCPUExecutable::execute(JITExecutor* fusion_opr) {
77 auto&& args = fusion_opr->args();
78 std::vector<void*> args_array(args.inputs.size() + args.outputs.size());
79 std::vector<void*> args_array_pointer(args.inputs.size() + args.outputs.size());
80 size_t idx = 0;
81 for (size_t i = 0; i < args.inputs.size(); i++) {
82 args_array[idx] = tensor2memref(
83 {args.inputs[i].from->dev_tensor().raw_ptr(), args.inputs[i].layout});
84 args_array_pointer[idx] = &args_array[idx];
85 idx++;
86 }
87 int64_t nr_elements = 0;
88 for (size_t i = 0; i < args.outputs.size(); i++) {
89 if (nr_elements == 0) {
90 nr_elements = args.outputs[i].layout.total_nr_elems();
91 } else {
92 mgb_assert(
93 static_cast<size_t>(nr_elements) ==
94 args.outputs[i].layout.total_nr_elems(),
95 "The number of elements of outputs mismatch, expected: "
96 "%zu got: %zu(%s)",
97 static_cast<size_t>(nr_elements),
98 args.outputs[i].layout.total_nr_elems(),
99 args.outputs[i].layout.to_string().c_str());
100 }
101 args_array[idx] = tensor2memref(
102 {args.outputs[i].from->dev_tensor().raw_ptr(), args.outputs[i].layout});
103 args_array_pointer[idx] = &args_array[idx];
104 idx++;
105 }
106
107 args_array_pointer.push_back(&nr_elements);
108 std::string adapter_name = std::string("_mlir_ciface_") + m_kernel_name;
109 auto err = m_engine->invoke(
110 adapter_name, llvm::MutableArrayRef<void*>(args_array_pointer));
111 if (err) {
112 mgb_throw(
113 InternalError, "failed to run MLIR kernel %s\n", m_kernel_name.c_str());
114 }
115
116 for (size_t i = 0; i < args_array.size(); i++) {
117 free(args_array[i]);
118 }
119}
120
121MLIRCPUExecutable::~MLIRCPUExecutable() {}
122

Callers 15

run<basic>Function · 0.45
run<shape_change>Function · 0.45
run<large_num_inps>Function · 0.45
run<cache>Function · 0.45
run<multi_device>Function · 0.45
run<multi_shape>Function · 0.45
run<non_contig>Function · 0.45
run<visit_complexity>Function · 0.45
run<imm_scalar>Function · 0.45
run<special_graph_input>Function · 0.45
TESTFunction · 0.45
run_mlirFunction · 0.45

Calls 10

tensor2memrefFunction · 0.85
freeFunction · 0.85
argsMethod · 0.80
sizeMethod · 0.45
raw_ptrMethod · 0.45
dev_tensorMethod · 0.45
total_nr_elemsMethod · 0.45
to_stringMethod · 0.45
push_backMethod · 0.45
invokeMethod · 0.45

Tested by 15

run<basic>Function · 0.36
run<shape_change>Function · 0.36
run<large_num_inps>Function · 0.36
run<cache>Function · 0.36
run<multi_device>Function · 0.36
run<multi_shape>Function · 0.36
run<non_contig>Function · 0.36
run<visit_complexity>Function · 0.36
run<imm_scalar>Function · 0.36
run<special_graph_input>Function · 0.36
TESTFunction · 0.36
run_mlirFunction · 0.36