18 Halide::Var x(
"x"), y(
"y"), c(
"c");
21 Halide::Func chunky_input(
"chunky_input");
22 chunky_input(x, y, c) =
m_input(x, y, c);
27 Halide::Func planar_input(
"planar_input");
28 planar_input(c, y, x) = chunky_input(x, y, c);
30 Halide::Func cpu_ready_input(
"cpu_ready_input");
31 cpu_ready_input(x, y, c) = planar_input(c, y, x);
43 Halide::Func planar_output(
"planar_output");
44 planar_output(c, y, x) = rgb_planar(x, y, c);
46 Halide::Func final_chunky_output(
"final_chunky_output");
47 final_chunky_output(x, y, c) = planar_output(c, y, x);
52 final_chunky_output.output_buffer().dim(0).set_stride(4);
53 final_chunky_output.output_buffer().dim(2).set_stride(1);
56 applyScheduling(final_chunky_output, x, y, c);
59 final_chunky_output.compile_jit(target);
60 m_pipeline = Halide::Pipeline(final_chunky_output);
62 spdlog::info(
"[OperationPipelineExecutorCPU::buildOperationChain]: Pipeline compiled (Chunky->Planar->Oklab->Ops->Planar->Chunky).");
63 }
catch (
const Halide::CompileError& e) {
64 spdlog::critical(
"[OperationPipelineExecutorCPU::buildOperationChain]: {}", e.what());
69void OperationPipelineExecutorCPU::applyScheduling(Halide::Func& pipeline, Halide::Var& x, Halide::Var& y, Halide::Var& c)
const
72 pipeline.bound(c, 0, 4).reorder(c, x, y).split(y, yo, yi, 32).parallel(yo).unroll(c);