Not logged in. Login

SWAR: SIMD Within a Register

SWARization

SWAR stands for SIMD Within A Register. It is often used to refer to the implementation of SIMD style operations without specific hardware support.

For example, <32 x i4> vectors are not typically supported on most CPUs, but the operations on these vectors can usually be simulated using just a few operations on <16 x i8> vectors.

One can also consider the possibility of SWAR support for oddball vectors such as <25 x i5>, as well. However, these operations are both more complex to implement and have fewer applications.

In the Parabix framework, the following SWAR vector types are particularly important.

  • 128-bit SIMD <32 x i4>, <64 x i2>, <128 x i1>
  • 256-bit SIMD <64 x i4>, <128 x i2>, <256 x i1>

Pass Design

Implement support for SWAR operations through the LLVM Pass infrastructure.

  • For each SWAR type supported, such as <32 x i4>, choose an implementation type, such as <16 x i8>. Replace all operations on <32 x i4> operands with equivalent logic expressed using <16 x i8> operations.
Updated Mon Jan. 29 2018, 07:31 by cameron.