Demonstration venue · read-only. Every page can be browsed; the buttons that would change it are switched off. Create an account to run TaxoReview on your own data. A simulation from public publication records: the people listed were not invited and did not agree to review.
? Tutorial for this page

Troels Henriksen

dblp:149/9278 · DBLP profile ↗
← Back
12ranked-venue papers
3as first author
6since 2021 · last 2025
0000-0002-1195-9722ORCID · corroborated

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 6 · 1 first-author · 4 since 2021Systems, architecture and hardware · 5 · 2 first-author · 2 since 2021Databases, data management, data science and information retrieval · 1

Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.

Software engineering, system software, and programming languages
8 papers
Programming languages and type systems · 45% Compilers and program optimization · 40% Operating systems · 7%
Computer architecture, parallel and distributed computing, and storage systems
8 papers
Parallel and multicore computing · 75% GPUs and heterogeneous computing · 25%
Interdisciplinary, comprehensive, and emerging computing
2 papers
Environmental and earth informatics · 85% Computational finance and economics · 15%

Topics — the 26 heaviest of 29, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Parallel and multicore computing
parallel programming models
2.052023
Parallelism in a Region Inference Context · Proc. ACM Program. Lang. 2023
AD for an Array Language with Nested Parallelism · SC 2022
Incremental flattening for nested data parallelism · PPoPP 2019
Programming languages and type systems
type inference
1.422024
AUTOMAP: Inferring Rank-Polymorphic Function Applications with Integer Linear Programming · Proc. ACM Program. Lang. 2024
Fast and Efficient Boolean Unification for Hindley-Milner-Style Type and Effect Systems · Proc. ACM Program. Lang. 2023
GPUs and heterogeneous computing
GPU computing
0.932022
Compiling generalized histograms for GPU · SC 2020
FinPar: A Parallel Financial Benchmark · ACM Trans. Archit. Code Optim. 2016
AD for an Array Language with Nested Parallelism · SC 2022
Parallel and multicore computing › parallelization strategies
nested parallelism
0.822022
AD for an Array Language with Nested Parallelism · SC 2022
FinPar: A Parallel Financial Benchmark · ACM Trans. Archit. Code Optim. 2016
Programming languages and type systems › type systems › polymorphism
higher-order polymorphism
0.812024
AUTOMAP: Inferring Rank-Polymorphic Function Applications with Integer Linear Programming · Proc. ACM Program. Lang. 2024
Programming languages and type systems › type systems › polymorphism
parametric polymorphism
0.812024
AUTOMAP: Inferring Rank-Polymorphic Function Applications with Integer Linear Programming · Proc. ACM Program. Lang. 2024
Operating systems › resource management
memory management
0.712023
Parallelism in a Region Inference Context · Proc. ACM Program. Lang. 2023
Runtime systems and virtual machines › runtime memory management
region inference
0.712023
Parallelism in a Region Inference Context · Proc. ACM Program. Lang. 2023
Programming languages and type systems › computational effects
type and effect systems
0.712023
Fast and Efficient Boolean Unification for Hindley-Milner-Style Type and Effect Systems · Proc. ACM Program. Lang. 2023
Parallel and multicore computing › parallel programming models › task parallelism
fork-join parallelism
0.712023
Parallelism in a Region Inference Context · Proc. ACM Program. Lang. 2023
Compilers and program optimization › domain-specific compilation
array language compilation
0.612022
Memory Optimizations in an Array Language · SC 2022
Compilers and program optimization
automatic differentiation
0.612022
AD for an Array Language with Nested Parallelism · SC 2022
Compilers and program optimization
memory optimization
0.612022
Memory Optimizations in an Array Language · SC 2022
Compilers and program optimization › automatic differentiation
reverse-mode automatic differentiation
0.612022
AD for an Array Language with Nested Parallelism · SC 2022
GPUs and heterogeneous computing › GPU programming
GPU code generation
0.612022
Memory Optimizations in an Array Language · SC 2022
Environmental and earth informatics
remote sensing
0.412020
Massively-Parallel Change Detection for Satellite Time Series Data with Missing Values · ICDE 2020
Compilers and program optimization
compiler optimization
0.412020
Compiling generalized histograms for GPU · SC 2020
Parallel and multicore computing
histogram computation
0.412020
Compiling generalized histograms for GPU · SC 2020
Parallel and multicore computing
parallel computing
0.412020
Massively-Parallel Change Detection for Satellite Time Series Data with Missing Values · ICDE 2020
Compilers and program optimization
parallelizing compiler
0.412019
Incremental flattening for nested data parallelism · PPoPP 2019
Parallel and multicore computing › data parallelism
nested data parallelism
0.412019
Incremental flattening for nested data parallelism · PPoPP 2019
Compilers and program optimization › code generation
GPU code generation
0.312017
Futhark: purely functional GPU-programming with nested parallelism and in-place array updates · PLDI 2017
Parallel and multicore computing
data-parallel programming
0.312017
Futhark: purely functional GPU-programming with nested parallelism and in-place array updates · PLDI 2017
GPUs and heterogeneous computing
GPU programming
0.312017
Futhark: purely functional GPU-programming with nested parallelism and in-place array updates · PLDI 2017
Programming languages and type systems › computational effects
effect systems
0.212023
Parallelism in a Region Inference Context · Proc. ACM Program. Lang. 2023
Parallel and multicore computing › parallelizing compiler
parallel code generation
0.112019
Incremental flattening for nested data parallelism · PPoPP 2019

Methods — techniques the papers use, named apart from their topics

type soundness · 1.3effect-based region-protection inference · 1.3rewrite rules · 1.1linear memory access descriptors · 1.1compiler transformation · 1.1change-of-layout transformations · 1.1parallel algorithm · 0.9integer linear programming · 0.8tabling · 0.7successive variable elimination · 0.7binary decision diagrams · 0.7work-efficient algorithm · 0.4performance optimization · 0.4code generation · 0.4atomic operations · 0.4multiversion code generation · 0.2mapreduce · 0.2
YearPublicationVenuePosition
2025 Correctness Meets Performance: From Agda to Futhark
abstract
In this paper we demonstrate a technique for developing high performance applications with strong correctness guarantees. Using a theorem prover, we derive a high-level specification of the application that includes correctness invariants of our choice. After that, within the same theorem prover, we implement an extraction of the specified application into a high-performance language of our choice. Concretely, we are using Agda to specify a framework for automatic differentiation (reverse mode) that is focused on index-safe tensors. This framework comes with an optimiser for tensor expressions and the ability to translate these expressions into Futhark. We specify a canonical convolutional neural network within the proposed framework, compute the derivatives needed for the training phase and then demonstrate that the generated code approaches the performance of TensorFlow code when running on a GPU.
Artjoms Sinkarovs, Troels Henriksen
Proc. ACM Program. Lang.2
2024 AUTOMAP: Inferring Rank-Polymorphic Function Applications with Integer Linear Programming
abstract
Dynamically typed array languages such as Python, APL, and Matlab lift scalar operations to arrays and replicate scalars to fit applications. We present a mechanism for automatically inferring map and replicate operations in a statically-typed language in a way that resembles the programming experience of a dynamically-typed language while preserving the static typing guarantees. Our type system—which supports parametric polymorphism, higher-order functions, and top-level let-generalization—makes use of integer linear programming in order to find the minimum number of operations needed to elaborate to a well-typed program. We argue that the inference system provides useful and unsurprising guarantees to the programmer. We demonstrate important theoretical properties of the mechanism and report on the implementation of the mechanism in the statically-typed array programming language Futhark.
Robert Schenck 0001, Nikolaj Hinnerskov, Troels Henriksen, Magnus Madsen, Martin Elsman
Proc. ACM Program. Lang.3
2023 Parallelism in a Region Inference Context
abstract
Region inference is a type-based program analysis that takes a non-annotated program as input and constructs a program that explicitly manages memory allocation and deallocation by dividing the heap into a stack of regions, each of which can grow and shrink independently from other regions, using constant-time operations. Whereas region-based memory management has shown useful in the contexts of explicit region-based memory management, and in particular, in combination with parallel execution of code, combining region inference with techniques for higher-order parallel programming has not been investigated. In this paper, we present an implementation of a fork-join parallel construct suitable for a compiler based on region inference. We present a minimal higher-order language incorporating the parallel construct, including typing rules and a dynamic semantics for the language, and demonstrate type soundness. We present a novel effect-based region-protection inference algorithm and discuss benefits and shortcomings of the approach. We also describe an efficient implementation embedded in the MLKit Standard ML compiler. Finally, we evaluate the approach and the implementation based on a number of parallel benchmarks, and thereby demonstrate that the technique effectively utilises multi-core architectures in a higher-order functional setting.
Martin Elsman, Troels Henriksen
Proc. ACM Program. Lang.2
2023 Fast and Efficient Boolean Unification for Hindley-Milner-Style Type and Effect Systems
abstract
As type and effect systems become more expressive there is an increasing need for efficient type inference. We consider a polymorphic effect system based on Boolean formulas where inference requires Boolean unification. Since Boolean unification involves semantic equivalence, conventional syntax-driven unification is insufficient. At the same time, existing Boolean unification techniques are ill-suited for type inference. We propose a hybrid algorithm for solving Boolean unification queries based on Boole’s Successive Variable Elimination (SVE) algorithm. The proposed approach builds on several key observations regarding the Boolean unification queries encountered in practice, including: (i) most queries are simple, (ii) most queries involve a few flexible variables, (iii) queries are likely to repeat due similar programming patterns, and (iv) there is a long tail of complex queries. We exploit these observations to implement several strategies for formula minimization, including ones based on tabling and binary decision diagrams. We implement the new hybrid approach in the Flix programming language. Experimental results show that by reducing the overhead of Boolean unification, the compilation throughput increases from 8,580 lines/sec to 15,917 lines/sec corresponding to a 1.8x speed-up. Further, the overhead on type and effect inference time is only 16% which corresponds to an overhead of less than 7% on total compilation time. We study the hybrid approach and demonstrate that each design choice improves performance.
Magnus Madsen, Jaco van de Pol, Troels Henriksen
Proc. ACM Program. Lang.3
2022 Memory Optimizations in an Array Language
abstract
We present a technique for introducing and op-timizing the use of memory in a functional array language, aimed at GPU execution, that supports correct-by-construction parallelism. Using linear memory access descriptors as building blocks, we define a notion of memory in the compiler IR that enables cost-free change-of-layout transformations (e.g., slicing, transposition), whose results can even be carried across control flow such as ifs/loops without manifestation in memory. The memory notion allows a graceful transition to an unsafe IR that is automatically optimized (1) to mix reads and writes to the same array inside a parallel construct, and (2) to map semantically different arrays to the same memory block. The result is code similar to what imperative users would write. Our evaluation shows that our optimizations have significant impact (1.1 x -2 x) and result in performance competitive to hand-written code from challenging benchmarks, such as Rodinia's NW, LUD, Hotspot.
Philip Munksgaard, Troels Henriksen, P. Sadayappan, Cosmin E. Oancea
SC2
2022 AD for an Array Language with Nested Parallelism
abstract
We present a technique for applying reverse mode automatic differentiation (AD) on a non-recursive second-order functional array language that supports nested parallelism and is primarily aimed at efficient GPU execution. The key idea is to eliminate the need for a tape by relying on redundant execution to bring into each new scope all program variables that may be needed by the differentiated code. Efficient execution is enabled by the observation that perfectly nested scopes do not introduce re-execution and that such perfect nests can be readily produced by application of known compiler transformations. Our technique differentiates loops and bulk-parallel operators-e.g., map, reduce(-by-index), scan, and scatter-by specific rewrite rules and aggressively optimizes the resulting nested-parallel code. We report an evaluation that compares with established AD solutions and demonstrates competitive performance on ten common benchmarks from recent applied AD literature.
Robert Schenck 0001, Ola Rønning, Troels Henriksen, Cosmin E. Oancea
SC3
2020 Massively-Parallel Change Detection for Satellite Time Series Data with Missing Values
abstract
Large amounts of satellite data are now becoming available, which, in combination with appropriate change detection methods, offer the opportunity to derive accurate information on timing and location of disturbances such as deforestation events across the earth surface. Typical scenarios require the analysis of billions of image patches/pixels. While various change detection techniques have been proposed in the literature, the associated implementations usually do not scale well, which renders the corresponding analyses computationally very expensive or even impossible. In this work, we propose a novel massively-parallel implementation for a state-of-the-art change detection method and demonstrate its potential in the context of monitoring deforestation. The novel implementation can handle large scenarios in a few hours or days using cheap commodity hardware, compared to weeks or even years using the existing publicly available code, and enables researchers, for the first time, to conduct global-scale analyses covering large parts of our Earth using little computational resources. From a technical perspective, we provide a high-level parallel algorithm specification along with several performance-critical optimizations dedicated to efficiently map the specified parallelism to modern parallel devices. While a particular change detection method is addressed in this work, the algorithmic building blocks provided are also of immediate relevance to a wide variety of related approaches in remote sensing and other fields.
Fabian Gieseke, Sabina Rosca, Troels Henriksen, Jan Verbesselt, Cosmin E. Oancea
ICDE3
2020 Compiling generalized histograms for GPU
abstract
We present and evaluate an implementation technique for histogram-like computations on GPUs that ensures both work-efficient asymptotic cost, support for arbitrary associative and commutative operators, and efficient use of hardware-supported atomic operations when applicable. Based on a systematic empirical examination of the design space, we develop a technique that balances conflict rates and memory footprint. We demonstrate our technique both as a library implementation in CUDA, as well as by extending the parallel array language Futhark with a new construct for expressing generalized histograms, and by supporting this construct with several compiler optimizations. We show that our histogram implementation taken in isolation outperforms similar primitives from CUB, and that it is competitive or outperforms the hand-written code of several application benchmarks, even when the latter is specialized for a class of datasets.
Troels Henriksen, Sune Hellfritzsch, P. Sadayappan, Cosmin E. Oancea
SC1
2019 Incremental flattening for nested data parallelism
abstract
Compilation techniques for nested-parallel applications that can adapt to hardware and dataset characteristics are vital for unlocking the power of modern hardware. This paper proposes such a technique, which builds on flattening and is applied in the context of a functional data-parallel language. Our solution uses the degree of utilized parallelism as the driver for generating a multitude of code versions, which together cover all possible mappings of the application's regular nested parallelism to the levels of parallelism supported by the hardware. These code versions are then combined into one program by guarding them with predicates, whose threshold values are automatically tuned to hardware and dataset characteristics. Our unsupervised method---of statically clustering datasets to code versions---is different from autotuning work that typically searches for the combination of code transformations producing a single version, best suited for a specific dataset or on average for all datasets.
Troels Henriksen, Frederik Thorøe, Martin Elsman, Cosmin E. Oancea
PPoPP1
2018 Static interpretation of higher-order modules in Futhark: functional GPU programming in the large
abstract
We present a higher-order module system for the purely functional data-parallel array language Futhark. The module language has the property that it is completely eliminated at compile time, yet it serves as a powerful tool for organizing libraries and complete programs. The presentation includes a static and a dynamic semantics for the language in terms of, respectively, a static type system and a provably terminating elaboration of terms into terms of an underlying target language. The development is formalised in Coq using a novel encoding of semantic objects based on products, sets, and finite maps. The module language features a unified treatment of module type abstraction and core language polymorphism and is rich enough for expressing practical forms of module composition.
Martin Elsman, Troels Henriksen, Danil Annenkov, Cosmin E. Oancea
Proc. ACM Program. Lang.2
2017 Futhark: purely functional GPU-programming with nested parallelism and in-place array updates
abstract
Futhark is a purely functional data-parallel array language that offers a machine-neutral programming model and an optimising compiler that generates OpenCL code for GPUs.
Troels Henriksen, Niels G. W. Serup, Martin Elsman, Fritz Henglein, Cosmin E. Oancea
PLDI1
2016 FinPar: A Parallel Financial Benchmark
abstract
Commodity many-core hardware is now mainstream, but parallel programming models are still lagging behind in efficiently utilizing the application parallelism. There are (at least) two principal reasons for this. First, real-world programs often take the form of a deeply nested composition of parallel operators, but mapping the available parallelism to the hardware requires a set of transformations that are tedious to do by hand and beyond the capability of the common user. Second, the best optimization strategy, such as what to parallelize and what to efficiently sequentialize, is often sensitive to the input dataset and therefore requires multiple code versions that are optimized differently, which also raises maintainability problems. This article presents three array-based applications from the financial domain that are suitable for gpgpu execution. Common benchmark-design practice has been to provide the same code for the sequential and parallel versions that are optimized for only one class of datasets. In comparison, we document (1) all available parallelism via nested map-reduce functional combinators, in a simple Haskell implementation that closely resembles the original code structure, (2) the invariants and code transformations that govern the main trade-offs of a data-sensitive optimization space, and (3) report target cpu and multiversion gpgpu code together with an evaluation that demonstrates optimization trade-offs and other difficulties. We believe that this work provides useful insight into the language constructs and compiler infrastructure capable of expressing and optimizing such applications, and we report in-progress work in this direction.
Christian Andreetta, Vivien Bégot, Jost Berthold, Martin Elsman, Fritz Henglein, Troels Henriksen, Maj-Britt Nordfang, Cosmin E. Oancea
ACM Trans. Archit. Code Optim.6