value Class — pytorch Architecture
Architecture documentation for the value class in op_registration.h from the pytorch codebase.
Entity Profile
Source Code
aten/src/ATen/core/op_registration/op_registration.h lines 329–352
template<class Lambda>
// enable_if: only enable it if Lambda is a functor (note: lambdas are functors)
std::enable_if_t<
guts::is_functor<std::decay_t<Lambda>>::value
&& !std::is_same_v<typename guts::infer_function_traits_t<std::decay_t<Lambda>>::func_type, KernelFunction::BoxedKernelFunction>,
Options&&> kernel(DispatchKey dispatch_key, Lambda&& functor) && {
static_assert(!std::is_base_of_v<OperatorKernel, std::decay_t<Lambda>>, "The kernel(x) API for registering a kernel is only meant to be used with lambdas. Your kernel is a functor. Please use the kernel<Functor>() API instead.");
// We don't support stateful lambdas (i.e. lambdas with a capture), because their
// behavior would be nonobvious. A functor kernel with cache gets a new instance of
// its cache each time the kernel is looked up from the dispatch table.
// A lambda with a capture would be global and share its capture between all kernel lookups.
// So, instead of making users having to think about it (including the thread-safety
// issues this causes), let's just forbid stateful lambdas altogether.
static_assert(guts::is_stateless_lambda<std::decay_t<Lambda>>::value, "The kernel(x) API for registering a kernel only works for stateless lambdas (i.e. lambdas without captures). If you need a cache, please use the functor based API kernel<Functor>() instead.");
return std::move(*this).kernel(
dispatch_key,
KernelFunction::makeFromUnboxedLambda(std::forward<Lambda>(functor)),
impl::CppSignature::make<Lambda>(),
// TODO Do schema inference without relying on WrapFunctionIntoRuntimeFunctor
detail::inferFunctionSchemaFromFunctor<impl::WrapFunctionIntoRuntimeFunctor<std::decay_t<Lambda>>>()
);
}
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free