blob: 385f5d26a5dbd0687cdc870d4cb9ac96d38af055 [file] [log] [blame] [view] [edit]
# Microkernel enumerators
XNNPACK frequently needs to define code for each microkernel, such as tests,
benchmarks, and declaring functions. To facilitate this, XNNPACK uses a pattern
where a header invokes a macro for each microkernel. To use these headers,
`#define` the appropriate macro, and then `#include` the microkernel enumerator
header.
For example, to print the name of every `f32-vtanh` microkernel and its batch
size:
```
#define XNN_UKERNEL(arch_flags, fn_name, batch_tile, vector_tile, datatype) \
printf("%s %d\n", #fn_name, batch_tile);
#include "src/f32-vtanh/f32-vtanh.inc"
#undef XNN_UKERNEL
```
It's good practice to `#undef` the macro after including the header, to avoid
accidental contamination of other macro enumerator header usages.
## Adding new kernels
The microkernel enumerator header associated with a new microkernel should be
the only place where manual edits are necessary. After manually adding the
microkernel to the enumerator header, tests and benchmarks will be generated
automatically.