Affiliation:
1. Saarland University, Saarbrücken, Germany
2. Intel Corporation, Saarbrücken, Germany
Abstract
SIMD instructions are common in CPUs for years now. Using these instructions effectively requires not only vectorization of
code
, but also modifications to the
data layout
. However, automatic vectorization techniques are often not powerful enough and suffer from restricted scope of applicability; hence, programmers often vectorize their programs manually by using intrinsics: compiler-known functions that directly expand to machine instructions. They significantly decrease programmer productivity by enforcing a very error-prone and hard-to-read assembly-like programming style. Furthermore, intrinsics are not portable because they are tied to a specific instruction set.
In this paper, we show how a C-like language can be extended to allow for portable and efficient SIMD programming. Our extension puts the programmer in total control over where and how control-flow vectorization is triggered. We present a type system and a formal semantics of our extension and prove the soundness of the type system. Using our prototype implementation IVL that targets Intel's MIC architecture and SSE instruction set, we show that the generated code is roughly on par with handwritten intrinsic code.
Publisher
Association for Computing Machinery (ACM)
Subject
Computer Graphics and Computer-Aided Design,Software
Cited by
15 articles.
订阅此论文施引文献
订阅此论文施引文献,注册后可以免费订阅5篇论文的施引文献,订阅后可以查看论文全部施引文献
1. Flynn’s Reconciliation;ACM Transactions on Architecture and Code Optimization;2021-06
2. C-for-Metal: High Performance Simd Programming on Intel GPUs;2021 IEEE/ACM International Symposium on Code Generation and Optimization (CGO);2021-02-27
3. SLEEF: A Portable Vectorized Library of C Standard Mathematical Functions;IEEE Transactions on Parallel and Distributed Systems;2020-06-01
4. A Portable SIMD Primitive Using Kokkos for Heterogeneous Architectures;Accelerator Programming Using Directives;2020
5. Taichi;ACM Transactions on Graphics;2019-12-31