BCC2020 has ended
➞ Set your timezone before doing anything else on this site (home page, on the right)
Limit what is shown by Type, Category, or Hemisphere
Registration closed July 15.

BCC2020 is online, global, and affordable. The meeting and training are now done, and the CoFest is under way.

The 2020 Bioinformatics Community Conference brings together the Bioinformatics Open Source Conference (BOSC) and the Galaxy Community Conference into a single event featuring training, a meeting, and a CollaborationFest. Events run from July 17 through July 25, and is held in both the eastern and western hemispheres.

Back To Schedule
Monday, July 20 • 14:15 - 14:20
SIMD Everywhere: portable implementations of SIMD intrinsics 🍐

Sign up or log in to save this to your schedule, view media, leave feedback and see who's attending!


The 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.com
2 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 License

SIMD 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
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 options
on 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.


Monday July 20, 2020 14:15 - 14:20 EDT