Automatic SIMD Code Generation
Institut fur Informatik, Westfalische Wilhelms-Universitat Munster
Westfalische Wilhelms-Universitat Munster, 2010
@thesis{leissa2010automatic,
title={Automatic SIMD Code Generation},
author={Leissa, Roland},
year={2010}
}
SIMD instructions are common in microprocessors for roughly one and a half decade now. These instructions enable the programmer to simultaneously perform an operation on several values with a single instruction-hence the name: Single Instruction, Multiple Data. The more values can be computed simultaneously the better the speedup. However, SIMD programming is still commonly considered as difficult. A typical programming approach which is still used today is presented by Chung [2009]: The programmer must usually deal with low-level details of the target machine which makes programming tedious and difficult. If such optimizations are used the resulting code is often not portable across other machines. This usually has the effect that two versions of an operation are implemented: One "normal" version used as fall-back which is programmed traditionally without the use of SIMD techniques and an optimized version which is used for a target machine of the programmer’s choice. If other SIMD architectures should be supported more versions must be implemented. It is obvious that this makes testing and maintaining the source code complex. More advanced SIMD programming approaches use uncommon data layouts. Thus it is difficult to put such an optimization in a late phase of a project which is nevertheless recommended as known from software engineering. Compiler researchers try to make automatic use of SIMD instructions. This is called auto-vectorization and is still an active research topic. Currently, it only works for relatively simple code pieces and even a perfect auto-vectorizer cannot change the data layout given by the programmer. All this causes most programmers-even those working on multimedia projects which are prime examples for SIMD algorithms-to not bother with SIMD programming and the potential lies idle in many programs.
January 4, 2012 by hgpu