arXiv.itsnick.co

an independent field guide to 23 million papers from arXiv & OpenAlex — not affiliated with arXiv.org

Author

Sebastian Hack

64 papers · 2005–2026

2005: 12006: 02007: 12008: 42009: 12010: 12011: 32012: 22013: 32014: 42015: 82016: 62017: 42018: 62019: 22020: 42021: 32022: 22023: 12024: 22025: 42026: 2
2005peak 8 in 20152026

Frequent co-authors

Papers

showing 1–25 of 64 RSS

Generating test cases for specification mining

Valentin Dallmeier, Nikolai Knopp, Christoph Mallon +2 more

Software · · cited 142× · DOI ↗ · more like this ·

Dynamic specification mining observes program executions to infer models of normal program behavior. What makes us believe that we have seen sufficiently many executions? The TAUTOKO 1 typestate miner generates test cases that cover previously unobserved behavior, systematically extending the execution space and enriching the specification. To our knowledge, this is the first combination of systematic test case generation and specification mining–a combination with clear benefits: On a sample of 800 defects seeded into six Java subjects, a static typestate verifier fed with enriched models would report significantly more true positives, and significantly less false positives than the initial models.

A dynamic program analysis to find floating-point accuracy problems

Florian Benz, Andreas Hildebrandt, Sebastian Hack

Computational Theory and Mathematics · · cited 120× · DOI ↗ · more like this ·

Programs using floating-point arithmetic are prone to accuracy problems caused by rounding and catastrophic cancellation. These phenomena provoke bugs that are notoriously hard to track down: the program does not necessarily crash and the results are not necessarily obviously wrong, but often subtly inaccurate. Further use of these values can lead to catastrophic errors.

Whole-function vectorization

Ralf Karrenberg, Sebastian Hack

Hardware and Architecture · · cited 97× · OpenAlex ↗ · more like this ·

Abstract—Data-parallel programming languages are an impor-tant component in today’s parallel computing landscape. Among those are domain-specific languages like shading languages in graphics (HLSL, GLSL, RenderMan, etc.) and “general-purpose” languages like CUDA or OpenCL. Current implementations of those languages on CPUs solely rely on multi-threading to imple-ment parallelism and ignore the additional intra-core parallelism provided by the SIMD instruction set of those processors (like Intel’s SSE and the upcoming AVX or Larrabee instruction sets). In this paper, we discuss several aspects of implementing data-parallel languages on machines with SIMD instruction sets. Our main contribution is a language- and platform-independent code transformation that performs whole-function vectorization on low-level intermediate code given by a control flow graph in SSA form. We evaluate our…

Automatically Generating Test Cases for Specification Mining

Valentin Dallmeier, Nikolai Knopp, Christoph Mallon +3 more

Software · IEEE Transactions on Software Engineering · · cited 66× · DOI ↗ · more like this ·

Dynamic specification mining observes program executions to infer models of normal program behavior. What makes us believe that we have seen sufficiently many executions? The TAUTOKO (“Tautoko” is the Mãori word for “enhance, enrich.”) typestate miner generates test cases that cover previously unobserved behavior, systematically extending the execution space, and enriching the specification. To our knowledge, this is the first combination of systematic test case generation and typestate mining-a combination with clear benefits: On a sample of 800 defects seeded into six Java subjects, a static typestate verifier fed with enriched models would report significantly more true positives and significantly fewer false positives than the initial models.

Profiling Java programs for parallelism

Clemens Hammacher, Kevin Streit, Sebastian Hack +1 more

Hardware and Architecture · · cited 46× · DOI ↗ · more like this ·

One of the biggest challenges imposed by multi-core architectures is how to exploit their potential for legacy systems not built with multiple cores in mind. By analyzing dynamic data dependences of a program run, one can identify independent computation paths that could have been handled by individual cores. Our prototype computes dynamic dependences for Java programs and recommends locations to the programmer with the highest potential for parallelization. Such measurements can also provide starting points for automatic, speculative parallelization.

AnyDSL: a partial evaluation framework for programming high-performance libraries

Roland Leißa, Klaas Boesche, Sebastian Hack +5 more

Software · Proceedings of the ACM on Programming Languages · · cited 43× · DOI ↗ · more like this ·

This paper advocates programming high-performance code using partial evaluation. We present a clean-slate programming system with a simple, annotation-based, online partial evaluator that operates on a CPS-style intermediate representation. Our system exposes code generation for accelerators (vectorization/parallelization for CPUs and GPUs) via compiler-known higher-order functions that can be subjected to partial evaluation. This way, generic implementations can be instantiated with target-specific code at compile time. In our experimental evaluation we present three extensive case studies from image processing, ray tracing, and genome sequence alignment. We demonstrate that using partial evaluation, we obtain high-performance implementations for CPUs and GPUs from one language and one code base in a generic way. The performance of our codes is mostly within 10%, often closer to the…

Simple and Efficient Construction of Static Single Assignment Form

Matthias Braun, Sebastian Buchwald, Sebastian Hack +3 more

Artificial Intelligence · Lecture notes in computer science · · cited 40× · DOI ↗ · more like this ·

We present a simple SSA construction algorithm, which allows direct translation from an abstract syntax tree or bytecode into an SSA-based intermediate representation. The algorithm requires no prior analysis and ensures that even during construction the intermediate representation is in SSA form. This allows the application of SSA-based optimizations during construction. After completion, the intermediate representation is in minimal and pruned SSA form. In spite of its simplicity, the runtime of our algorithm is on par with Cytron et al.’s algorithm.

Polly's Polyhedral Scheduling in the Presence of Reductions

Johannes Doerfert, Kevin Streit, Sebastian Hack +1 more

cs.PL · · cited 31× · arXiv ↗ · more like this ·

The polyhedral model provides a powerful mathematical abstraction to enable effective optimization of loop nests with respect to a given optimization goal, e.g., exploiting parallelism. Unexploited reduction properties are a frequent reason for polyhedral optimizers to assume parallelism prohibiting dependences. To our knowledge, no polyhedral loop optimizer available in any production compiler provides support for reductions. In this paper, we show that leveraging the parallelism of reductions can lead to a significant performance increase. We give a precise, dependence based, definition of reductions and discuss ways to extend polyhedral optimization to exploit the associativity and commutativity of reduction computations. We have implemented a reduction-enabled scheduling approach in the Polly polyhedral optimizer and evaluate it on the standard Polybench 3.2 benchmark suite. We were…

AnyHLS: High-Level Synthesis with Partial Evaluation

M. Akif Özkan, Arsène Pérard-Gayot, Richard Membarth +5 more

cs.PL · · cited 28× · arXiv ↗ · more like this ·

FPGAs excel in low power and high throughput computations, but they are challenging to program. Traditionally, developers rely on hardware description languages like Verilog or VHDL to specify the hardware behavior at the register-transfer level. High-Level Synthesis (HLS) raises the level of abstraction, but still requires FPGA design knowledge. Programmers usually write pragma-annotated C/C++ programs to define the hardware architecture of an application. However, each hardware vendor extends its own C dialect using its own vendor-specific set of pragmas. This prevents portability across different vendors. Furthermore, pragmas are not first-class citizens in the language. This makes it hard to use them in a modular way or design proper abstractions. In this paper, we present AnyHLS, an approach to synthesize FPGA designs in a modular and abstract way. AnyHLS is able to raise the…

Partial control-flow linearization

Simon Moll, Sebastian Hack

Hardware and Architecture · · cited 27× · DOI ↗ · more like this ·

If-conversion is a fundamental technique for vectorization. It accounts for the fact that in a SIMD program, several targets of a branch might be executed because of divergence. Especially for irregular data-parallel workloads, it is crucial to avoid if-converting non-divergent branches to increase SIMD utilization. In this paper, we present partial linearization, a simple and efficient if-conversion algorithm that overcomes several limitations of existing if-conversion techniques. In contrast to prior work, it has provable guarantees on which non-divergent branches are retained and will never duplicate code or insert additional branches. We show how our algorithm can be used in a classic loop vectorizer as well as to implement data-parallel languages such as ISPC or OpenCL. Furthermore, we implement prior vectorizer optimizations on top of partial linearization in a more general way.…

Shallow embedding of DSLs via online partial evaluation

Roland Leißa, Klaas Boesche, Sebastian Hack +2 more

Artificial Intelligence · · cited 26× · DOI ↗ · more like this ·

This paper investigates shallow embedding of DSLs by means of online partial evaluation. To this end, we present a novel online partial evaluator for continuation-passing style languages. We argue that it has, in contrast to prior work, a predictable termination policy that works well in practice. We present our approach formally using a continuation-passing variant of PCF and prove its termination properties. We evaluate our technique experimentally in the field of visual and high-performance computing and show that our evaluator produces highly specialized and efficient code for CPUs as well as GPUs that matches the performance of hand-tuned expert code.

Copy coalescing by graph recoloring

Sebastian Hack, Gerhard Goos

Hardware and Architecture · · cited 26× · DOI ↗ · more like this ·

Register allocation is always a trade-off between live-range splitting and coalescing. Live-range splitting generally leads to less spilling at the cost of inserting shuffle code. Coalescing removes shuffle code while potentially raising the register demand and causing spilling.

Fast liveness checking for ssa-form programs

Benoît Boissinot, Sebastian Hack, Daniel Grund +2 more

Hardware and Architecture · HAL (Le Centre pour la Communication Scientifique Directe) · · cited 25× · DOI ↗ · more like this ·

Liveness analysis is an important analysis in optimizing compilers. Liveness information is used in several optimizations and is mandatory during the code-generation phase. Two drawbacks of conventional liveness analyses are that their computations are fairly expensive and their results are easily invalidated by program transformations. We present a method to check liveness of variables that overcomes both obstacles. The major advantage of the proposed method is that the analysis result survives all program transformations except for changes in the control-flow graph. For common program sizes our technique is faster and consumes less memory than conventional data-flow approaches. Thereby, we heavily make use of SSA-form properties, which allow us to completely circumvent data-flow equation solving. We evaluate the competitiveness of our approach in an industrial strength compiler. Our…

Extending a C-like language for portable SIMD programming

Roland Leißa, Sebastian Hack, Ingo Wald

Hardware and Architecture · · cited 24× · DOI ↗ · more like this ·

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.

Register allocation for programs in SSA Form

Sebastian Hack

Artificial Intelligence · Repository KITopen (Karlsruhe Institute of Technology) · · cited 24× · DOI ↗ · more like this ·

This book investigates register allocation for programs in static single-assignment form.\n\t\t\t\t\t\tIts main result is that the interference graphs of SSA-form programs are chordal.\n\t\t\t\t\t\tThis gives the compiler precise knowledge over the register demand and allows for separating spilling, assignment and coalescing. \n\t\t\t\t\tFor each of these phases, we present methods specially tailored to the SSA setting and provide a first evaluation.

PACXXv2 + RV

Michael Haidl, Simon Moll, Lars Klein +3 more

Hardware and Architecture · · cited 21× · DOI ↗ · more like this ·

To achieve high performance on today's high-performance computing (HPC) systems multiple programming models have to be used. An example for this burden to the developer is OpenCL: the OpenCL's SPMD programming model must be used together with a host programming model, commonly C or C++. Different programming models require different compilers for code generation, which introduce challenges for the software developer, e. g., different compilers must be convinced to agree on basic properties like type layouts to avoid subtle bugs. Moreover, the resulting performance highly depends on the features of the used compilers and may vary unpredictably.

Sierra

Roland Leißa, Immanuel Haffner, Sebastian Hack

Hardware and Architecture · MADOC (University of Mannheim) · · cited 19× · DOI ↗ · more like this ·

Nowadays, SIMD hardware is omnipresent in computers. Nonetheless, many software projects make hardly use of SIMD instructions: Applications are usually written in general-purpose languages like C++. However, general-purpose languages only provide poor abstractions for SIMD programming enforcing an error-prone, assembly-like programming style. An alternative are data-parallel languages. They indeed offer more convenience to target SIMD architectures but introduce their own set of problems. In particular, programmers are often unwilling to port their working C++ code to a new programming language.

Synthesizing an instruction selection rule library from semantic specifications

Sebastian Buchwald, Andreas Fried, Sebastian Hack

Hardware and Architecture · · cited 17× · DOI ↗ · more like this ·

Instruction selection is the part of a compiler that transforms intermediate representation (IR) code into machine code. Instruction selectors build on a library of hundreds if not thousands of rules. Creating and maintaining these rules is a tedious and error-prone manual process.

Rodent

Arsène Pérard‐Gayot, Richard Membarth, Roland Leißa +2 more

Computer Graphics and Computer-Aided Design · ACM Transactions on Graphics · · cited 15× · DOI ↗ · more like this ·

Monte-Carlo Renderers must generate many color samples to produce a noise-free image, and for each of those, they must evaluate complex mathematical models representing the appearance of the objects in the scene. These models are usually in the form of shaders: Small programs that are executed during rendering in order to compute a value for the current sample. Renderers often compile and optimize shaders just before rendering, taking advantage of the knowledge of the scene. In principle, the entire renderer could benefit from a-priori code generation. For instance, scheduling can take advantage of the knowledge of the scene in order to maximize hardware usage. However, writing such a configurable renderer eventually means writing a compiler that translates a scene description into machine code. In this paper, we present a framework that allows generating entire renderers for CPUs and…

WCET analysis for multi-core processors with shared buses and event-driven bus arbitration

Michael E. Jacobs, Sebastian Hahn, Sebastian Hack

Hardware and Architecture · · cited 14× · DOI ↗ · more like this ·

Multi-core processors share common hardware resources between several processor cores. As a consequence, a program executed on one processor core may influence the execution time of the programs executed on the concurrent cores. This effect is commonly referred to as shared-resource interference. Worst-case execution time (WCET) analysis for multi-core processors has to take into account the shared-resource interference.

The Impact of the SIMD Width on Control-Flow and Memory Divergence

Thomas Schaub, Simon Moll, Ralf Karrenberg +1 more

Hardware and Architecture · ACM Transactions on Architecture and Code Optimization · · cited 13× · DOI ↗ · more like this ·

Power consumption is a prevalent issue in current and future computing systems. SIMD processors amortize the power consumption of managing the instruction stream by executing the same instruction in parallel on multiple data. Therefore, in the past years, the SIMD width has steadily increased, and it is not unlikely that it will continue to do so. In this article, we experimentally study the influence of the SIMD width to the execution of data-parallel programs. We investigate how an increasing SIMD width (up to 1024) influences control-flow divergence and memory-access divergence, and how well techniques to mitigate them will work on larger SIMD widths. We perform our study on 76 OpenCL applications and show that a group of programs scales well up to SIMD width 1024, whereas another group of programs increasingly suffers from control-flow divergence. For those programs, thread…

Optimistic loop optimization

Johannes Doerfert, Tobias Grosser, Sebastian Hack

Hardware and Architecture · Symposium on Code Generation and Optimization · · cited 12× · DOI ↗ · more like this ·

Compilers use static analyses to justify program optimizations. As every optimization must preserve the semantics of the original program, static analysis typically fall-back to conservative approximations. Consequently, the set of states for which the optimization is invalid is overapproximated and potential optimization opportunities are missed. Instead of justifying the optimization statically, a compiler can also synthesize preconditions that imply the correctness of the optimizations and are checked at the runtime of the program. In this paper, we present a framework to collect, generalize, and simplify assumptions based on Presburger arithmetic. We introduce different assumptions necessary to enable a variety of complex loop transformations and derive a (close to) minimal set of preconditions to validate them at runtime. Our evaluation shows that the runtime verification…

Input space splitting for OpenCL

Simon Moll, Johannes Doerfert, Sebastian Hack

Hardware and Architecture · · cited 12× · DOI ↗ · more like this ·

The performance of OpenCL programs suffers from memory and control flow divergence. Therefore, OpenCL compilers employ static analyses to identify non-divergent control flow and memory accesses in order to produce faster code. However, divergence is often input-dependent, hence can be observed for some, but not all inputs. In these cases, vectorizing compilers have to generate slow code because divergence can occur at run time. In this paper, we use a polyhedral abstraction to partition the input space of an OpenCL kernel. For each partition, divergence analysis produces more precise results i.e., it can classify more code parts as non-divergent. Consequently, specializing the kernel for the input space partitions allows for generating better SIMD code because of less divergence. We implemented our technique in an OpenCL driver for the AVX instruction set and evaluate it on a range of…

A graph-based higher-order intermediate representation

Roland Leisa, Marcel Köster, Sebastian Hack

Artificial Intelligence · MADOC (University of Mannheim) · · cited 12× · DOI ↗ · more like this ·

Many modern programming languages support both imperative and functional idioms. However, state-of-the-art imperative intermediate representations (IRs) cannot natively represent crucial functional concepts (like higher-order functions). On the other hand, functional IRs employ an explicit scope nesting, which is cumbersome to maintain across certain transformations. In this paper we present Thorin: a higher-order, functional IR based on continuation-passing style that abandons explicit scope nesting in favor of a dependency graph. This makes Thorin an attractive IR for both imperative as well as functional languages. Furthermore, we present a novel program transformation to eliminate the overhead caused by higher-order functions. The main component of this transformation is lambda mangling: an important transformation primitive in Thorin. We demonstrate that lambda mangling subsumes…

Sambamba

Kevin Streit, Clemens Hammacher, Andreas Zeller +1 more

Hardware and Architecture · · cited 12× · DOI ↗ · more like this ·

How can we exploit a microprocessor as efficiently as possible? The "classic" approach is static optimization at compile-time, conservatively optimizing a program while keeping all possible uses in mind. Further optimization can only be achieved by anticipating the actual usage profile: If we know, for instance, that two computations will be independent, we can run them in parallel. However, brute force parallelization may slow down execution due to its large overhead. But as this depends on runtime features, such as structure and size of input data, parallel execution needs to dynamically adapt to the runtime situation at hand.