cpu_ops.cpp 4.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #include <kernels/cpu/cpu_kernels.h>
  2. #include <runtime/kernel_registry.h>
  3. #include <targets/cpu/cpu_ops_body.h>
  4. using namespace nncase;
  5. using namespace nncase::runtime;
  6. namespace nncase
  7. {
  8. namespace targets
  9. {
  10. namespace cpu
  11. {
  12. kernel_call_result cpu_conv2d(cpu_conv2d_options &options, interpreter_t &interpreter, interpreter_step_t step)
  13. {
  14. auto input = interpreter.memory_at<float>(options.input);
  15. auto output = interpreter.memory_at<float>(options.output);
  16. kernels::cpu::conv2d(input.data(), output.data(), options.weights.data(), options.bias.data(), options.in_shape, options.out_channels, options.filter_h,
  17. options.filter_w, options.stride_h, options.stride_w, options.dilation_h, options.dilation_w, options.padding_h, options.padding_w, options.fused_activation);
  18. return kcr_done;
  19. }
  20. kernel_call_result cpu_depthwise_conv2d(cpu_depthwise_conv2d_options &options, interpreter_t &interpreter, interpreter_step_t step)
  21. {
  22. auto input = interpreter.memory_at<float>(options.input);
  23. auto output = interpreter.memory_at<float>(options.output);
  24. kernels::cpu::depthwise_conv2d(input.data(), output.data(), options.weights.data(), options.bias.data(), options.in_shape, options.filter_h,
  25. options.filter_w, options.stride_h, options.stride_w, options.dilation_h, options.dilation_w, options.padding_h, options.padding_w, options.fused_activation);
  26. return kcr_done;
  27. }
  28. runtime::kernel_call_result cpu_reduce_window2d(cpu_reduce_window2d_options &options, interpreter_t &interpreter, runtime::interpreter_step_t step)
  29. {
  30. auto input = interpreter.memory_at<float>(options.input);
  31. auto output = interpreter.memory_at<float>(options.output);
  32. auto reduce = [&](auto binary_op, auto window_op) {
  33. kernels::cpu::reduce_window2d(input.data(), output.data(), options.init_value, options.in_shape, options.filter_h, options.filter_w, options.stride_h,
  34. options.stride_w, options.dilation_h, options.dilation_w, options.padding_h, options.padding_w, options.fused_activation, binary_op, window_op);
  35. };
  36. switch (options.reduce_op)
  37. {
  38. case reduce_mean:
  39. reduce([](auto a, auto b) { return a + b; }, [](auto v, auto k) { return v / k; });
  40. return runtime::kcr_done;
  41. case reduce_min:
  42. reduce([](auto a, auto b) { return std::min(a, b); }, [](auto v, auto k) { return v; });
  43. return runtime::kcr_done;
  44. case reduce_max:
  45. reduce([](auto a, auto b) { return std::max(a, b); }, [](auto v, auto k) { return v; });
  46. return kcr_done;
  47. default:
  48. return kcr_error;
  49. }
  50. }
  51. kernel_call_result cpu_quantized_conv2d(cpu_quantized_conv2d_options &options, interpreter_t &interpreter, interpreter_step_t step)
  52. {
  53. auto input = interpreter.memory_at<uint8_t>(options.input);
  54. auto output = interpreter.memory_at<uint8_t>(options.output);
  55. kernels::cpu::quantized_conv2d(input.data(), output.data(), options.weights.data(), options.bias.data(), options.in_shape, options.out_channels, options.filter_h,
  56. options.filter_w, options.stride_h, options.stride_w, options.dilation_h, options.dilation_w, options.padding_h, options.padding_w,
  57. options.input_offset, options.filter_offset, options.output_mul, options.output_shift, options.output_offset);
  58. return kcr_done;
  59. }
  60. kernel_call_result cpu_quantized_depthwise_conv2d(cpu_quantized_depthwise_conv2d_options &options, interpreter_t &interpreter, interpreter_step_t step)
  61. {
  62. auto input = interpreter.memory_at<uint8_t>(options.input);
  63. auto output = interpreter.memory_at<uint8_t>(options.output);
  64. kernels::cpu::quantized_depthwise_conv2d(input.data(), output.data(), options.weights.data(), options.bias.data(), options.in_shape, options.filter_h,
  65. options.filter_w, options.stride_h, options.stride_w, options.dilation_h, options.dilation_w, options.padding_h, options.padding_w,
  66. options.input_offset, options.filter_offset, options.output_mul, options.output_shift, options.output_offset);
  67. return kcr_done;
  68. }
  69. }
  70. }
  71. }