TfLiteRegistration

#include <common.h>

TfLiteRegistration defines the implementation of an operation (a built-in op, custom op, or custom delegate kernel).

Summary

It is a struct containing "methods" (C function pointers) that will be invoked by the TF Lite runtime to evaluate instances of the operation.

See also TfLiteRegistrationExternal which is a more ABI-stable equivalent.

Public attributes

async_kernel)(TfLiteContext *context, TfLiteNode *node)
struct TfLiteAsyncKernel *(*
Retrieves asynchronous kernel.
builtin_code
int32_t
Builtin codes.
custom_name
const char *
Custom op name.
free)(TfLiteContext *context, void *buffer)
void(*
The pointer buffer is the data previously returned by an init invocation.
init)(TfLiteContext *context, const char *buffer, size_t length)
void *(*
Initializes the op from serialized data.
inplace_operator
uint64_t
Indicates if an operator's output may safely overwrite its inputs.
invoke)(TfLiteContext *context, TfLiteNode *node)
TfLiteStatus(*
Execute the node (should read node->inputs and output to node->outputs).
prepare)(TfLiteContext *context, TfLiteNode *node)
TfLiteStatus(*
prepare is called when the inputs this node depends on have been resized.
profiling_string)(const TfLiteContext *context, const TfLiteNode *node)
const char *(*
profiling_string is called during summarization of profiling information in order to group executions together.
registration_external
TfLiteRegistrationExternal *
The external version of TfLiteRegistration.
version
int
The version of the op.

Public attributes

async_kernel

struct TfLiteAsyncKernel *(* TfLiteRegistration::async_kernel)(TfLiteContext *context, TfLiteNode *node)

Retrieves asynchronous kernel.

If the async_kernel field is nullptr, it means the operation described by this TfLiteRegistration object does not support asynchronous execution. Otherwise, the function that the field points to should only be called for delegate kernel nodes, i.e. node should be a delegate kernel node created by applying a delegate. If the function returns nullptr, that means that the underlying delegate does not support asynchronous execution for this node.

builtin_code

int32_t TfLiteRegistration::builtin_code

Builtin codes.

If this kernel refers to a builtin this is the code of the builtin. This is so we can do marshaling to other frameworks like NN API.

Note: It is the responsibility of the registration binder to set this properly.

custom_name

const char * TfLiteRegistration::custom_name

Custom op name.

If the op is a builtin, this will be null.

Note: It is the responsibility of the registration binder to set this properly.

WARNING: This is an experimental interface that is subject to change.

free

void(* TfLiteRegistration::free)(TfLiteContext *context, void *buffer)

The pointer buffer is the data previously returned by an init invocation.

init

void *(* TfLiteRegistration::init)(TfLiteContext *context, const char *buffer, size_t length)

Initializes the op from serialized data.

Called only once for the lifetime of the op, so any one-time allocations should be made here (unless they depend on tensor sizes).

  • If a built-in op:
    • buffer is the op's params data (TfLiteLSTMParams*).
    • length is zero.
  • If custom op:
    • buffer is the op's custom_options.
    • length is the size of the buffer.

Returns a type-punned (i.e. void*) opaque data (e.g. a primitive pointer or an instance of a struct).

The returned pointer will be stored with the node in the user_data field, accessible within prepare and invoke functions below.

NOTE: if the data is already in the desired format, simply implement this function to return nullptr and implement the free function to be a no-op.

inplace_operator

uint64_t TfLiteRegistration::inplace_operator

Indicates if an operator's output may safely overwrite its inputs.

See the comments in TfLiteInPlaceOp.

invoke

TfLiteStatus(* TfLiteRegistration::invoke)(TfLiteContext *context, TfLiteNode *node)

Execute the node (should read node->inputs and output to node->outputs).

Returns kTfLiteOk on success.

prepare

TfLiteStatus(* TfLiteRegistration::prepare)(TfLiteContext *context, TfLiteNode *node)

prepare is called when the inputs this node depends on have been resized.

context->ResizeTensor() can be called to request output tensors to be resized. Can be called multiple times for the lifetime of the op.

Returns kTfLiteOk on success.

profiling_string

const char *(* TfLiteRegistration::profiling_string)(const TfLiteContext *context, const TfLiteNode *node)

profiling_string is called during summarization of profiling information in order to group executions together.

Providing a value here will cause a given op to appear multiple times is the profiling report. This is particularly useful for custom ops that can perform significantly different calculations depending on their user-data.

registration_external

TfLiteRegistrationExternal * TfLiteRegistration::registration_external

The external version of TfLiteRegistration.

Since we can't use internal types (such as TfLiteContext) for C API to maintain ABI stability. C API user will provide TfLiteRegistrationExternal to implement custom ops. We keep it inside of TfLiteRegistration and use it to route callbacks properly.

version

int TfLiteRegistration::version

The version of the op.

Note: It is the responsibility of the registration binder to set this properly.