#pragma once #include #include #include #include "Evalue.h" #include "kernel_runtime_context.h" #include namespace torch { namespace executor { using KernelFunction = std::function; template using ArrayRef = at::ArrayRef; #define EXECUTORCH_SCOPE_PROF(x) struct Kernel { const char* name_; KernelFunction kernel_; Kernel() = default; /** * We are doing a copy of the string pointer instead of duplicating the string * itself, we require the lifetime of the kernel name to be at least as long * as the kernel registry. */ explicit Kernel(const char* name, KernelFunction func) : name_(name), kernel_(func) {} }; /** * See KernelRegistry::hasKernelFn() */ bool hasKernelFn(const char* name); /** * See KernelRegistry::getKernelFn() */ KernelFunction& getKernelFn(const char* name); [[nodiscard]] bool register_kernels(const ArrayRef&); struct KernelRegistry { public: KernelRegistry() : kernelRegSize_(0) {} bool register_kernels(const ArrayRef&); /** * Checks whether an kernel with a given name is registered */ bool hasKernelFn(const char* name); /** * Checks whether an kernel with a given name is registered */ KernelFunction& getKernelFn(const char* name); private: std::map kernels_map_; uint32_t kernelRegSize_; }; } // namespace executor } // namespace torch