..

================================================================================
                                SIMD sorting
================================================================================

Overview
--------------------------------------------------

This repository contains SIMD versions of quicksort, using **AVX512F**
and **AVX2** instruction sets. The subdirectory ``results`` contains
performance results.

The code is still unfinished, it may be subject of changes.

Although programs are written in C++, most procedures are nearly
plain C, except use of namespaces and references in place of
pointers.


Building
--------------------------------------------------

At least GCC 5.3.0 is needed.  Type ``make`` to build AVX512F
and AVX2 versions of two programs:

* ``test``/``test_avx2`` --- tests if SIMD-ized sorting procedures
  work correctly for various inputs.

* ``speed``/``speed_avx2`` --- compares speed of different procedures,
  scalar and SIMD for various inputs.

* ``speed_stats``/``speed_avx2_stats`` --- similar to ``speed``, but
  some procedures collect and print runtime statistics. Note that
  this gives overhead, so for real performance tests the basic variant
  of the programs should be used.


AVX512
--------------------------------------------------

`Intel Software Development Emulator`__ can be used to run AVX512 variants.

__ https://software.intel.com/en-us/articles/intel-software-development-emulator


References
--------------------------------------------------

- Fast Sorting Algorithms using AVX-512 on Intel Knights Landing https://arxiv.org/pdf/1704.08579.pdf