→ AbstractThe presenter(s) will be available for live Q&A in this session (BCC West).
Evan Nemerson 1, Hidayat Khan 2, Himanshi Mathur 3, Jun Aruga 4, Michael R. Crusoe 5
1 Unaffiliated; San Diego, CA, USA. Email:
evan@nemerson.com2 IIIT Lucknow; Bhopal, India.
3 IIIT Delhi; Delhi, India.
4 Red Hat; Brno, Czech Republic.
5 VU Amsterdam, DTL Projects, Debian, CWL; Berlin, Germany.
Project Website & Source Code:
https://github.com/nemequ/simde/License:
MIT LicenseSIMD Everywhere (SIMDe) is a header-only C/C++ library which provides fast, portable
implementations of
SIMD intrinsics on platforms which do not natively support them, such
as calling AVX functions on ARM, AltiVec/VMX,POWER, WebAssembly, or less powerful x86
processors.
The use of SIMD intrinsics provides a significant opportunity for optimization, but
the technique has traditionally been an "either/or" situation in bioinformatics: there was
either the highly optimized path plus a completely unoptimized code path, or some CPU
architectures were completely unsupported. The SIMD Everywhere library allows you to
target these advanced extensions while retaining support for machines which don't
support them. If the platform supports the intrinsics natively there is zero performance
penalty. On other platforms the SIMD Everywhere library will attempt to use intrinsics
which are available, such as those from another SIMD instruction set. If that doesn't work,
the SIMD Everywhere library will attempt to use compiler-specific functionality such
as__builtin_shuffle,
__builtin_shufflevector, and __builtin_convertvector or autovectorization
hints such as
OpenMP SIMD, Cilk Plus, GCC's ivdep, or clang's
clang's loop pragma before
falling back on pure, standards-compliant C or C++.
With ARM64 HPC systems
becoming more common,
cost-effective ARM64 optionson AWS, and
persistent rumors of forthcoming ARM laptops from Apple, ARM support is
becoming much more important to bioinformatics. Using the SIMD Everywhere library to
port to ARM, or any other architecture, often requires little more than including the
relevant header and defining a single macro. Furthermore, native calls to SIMD Everywhere
library functions can be mixed with native intrinsics, allowing you to add
manually-optimized implementations for particularly hot and/or poorly performing code
as necessary, without the need to port the entire project all at once.
SIMDe currently contains complete portable implementations for MMX, SSE, SSE2,
SSE3, SSSE3, SSE4.1, AVX, FMA, and the SIMD GFNI functions. Ongoing work includes AVX2,
SSE4.2, various AVX-512 extensions, and SVML. Two OBF sponsored Google Summer of
Code students will be working on the project this summer; Hidayat Khan will be focusing
on AVX2 and SSE2, and Himanshi Mathur will be focusing on
SVML.A number of bioinformatics packages are already using SIMDe, either natively or via
a patch from Debian:
examl,
last-align, python-skbio,
minimap2,
pbcopper,
hisat2, vg,
fermi-lite,
bowtie2,
bwa,
raxml, kalign,
fasta3,
plink2,
mmseqs2.