# Integration

## When Targeting a Single Architecture

If you compile your whole project for a single architecture, you can rely on the implicit architecture parameter for `xsimd::batch`. Just add your source using xsimd to your project build system, pass down the appropriate flags and the magic should happen.

It’s very common though to have a base application with minimal architectural constraints, while still wanting to benefit from the acceleration of better instruction sets if those are available.

## When Targeting Multiple Architectures

It’s very common, especially when targeting Intel hardware, to set a minimal baseline, say SSE2, for the base application, while still shipping computation kernels specialized for SSE4.2, AVX2 or AVX512BF.

In that case one can write specific kernels for each targeted instruction set (or a generic one that’s instantiated for each targeted instruction set). Those kernels must then be compiled with the appropriate flags independently, and linked into the application.

xsimd provides a generic dispatch mechanism that can be used from the base application to pick the best kernel at runtime based on runtime detection of the supported architectures, as described more in detailed in Arch Dispatching.