.. Copyright (c) 2016, Johan Mabille and Sylvain Corlay Distributed under the terms of the BSD 3-Clause License. The full license is in the file LICENSE, distributed with this software. .. raw:: html From 7.x to 8.x =============== Version 8.x introduces a lot of API difference compared to version 7.x. This section motivates the version bump and details the most notable changes. Why 8.x ------- Version 8.x introduces a new concept in `xsimd`: all batch types are now parametrized by a type, say ``double``, and an optional architecture, say ``avx512``, as in ``batch``. It is still possible to just require a batch of doubles and let the library pick the most appropriate architecture, as in ``batch``. This new design make it possible to target multiple architecture from the same code, as detailed in the :ref:`Arch Dispatching` section. As a side effect of this (almost full) rewrite of the library code, `xsimd` is now twice as fast to compile, and its source code size as been (roughly) divided by two. The `xsimd` developers also took this as an opportnuity to significantly improve test coverage. Most Notable Changes -------------------- Batch Types *********** The second argument of :cpp:class:`xsimd::batch` is now a type that represents an architecture, instead of an integer. The previous behavior can be emulated through the :cpp:class:`xsimd::make_sized_batch` utility. Batch of Complex Types ********************** Loading a batch of complex from an ``xtl::xcomplex`` now yields an ``xsimd::batch>`` instead of an ``xtl::xcomplex``. It is still possible to store an ``xsimd::batch>`` to an ``xtl::xcomplex``. Loading Batches *************** ``xsimd::batch::load*`` are now static functions. It is no longer supported to update an existing batch through its ``load`` method. The regular assign operator can be used instead. Indexing Batches **************** ``xsimd::batch::operator[](size_t)`` has been replaced with ``xsimd::batch::get(size_t)``. Keep in mind that this method implies a register load *for each call*, so it's wise not to use it in performance-critical section. When needed, do an explicit store of the batch into an array and work from there. Architecture Detection ********************** Many macros have been replaced by more elaborated constructs. ``XSIMD_INSTR_SET_AVAILABLE`` has been replaced by the type alias ``xsimd::default_arch``. Likewise architecture-specific macros like ``XSIMD_X86_INSTR_SET_AVAILABLE`` has been replaced by ``xsimd::upported_architectures::contains()``. Macro like ``XSIMD_WITH_SSE3`` are still defined to ``0`` or ``1`` to guard architecture-specific code.