Existing approaches to array fusion can deal with straight-line pro-ducer consumer pipelines, but cannot fuse branching data flows where a generated array is consumed by several different con-sumers. Branching data flows are common and natural to write, but the lack of fusion leads to the creation of an intermediate array at every branch point. We present a new array fusion system that handles branches, based on Waters’s series expression framework, but extended to work in a functional setting. Our system also solves a related problem in stream fusion, namely the introduction of du-plicate loop counters. We demonstrate speedup over existing fusion systems for several key examples. Categories and Subject Descriptors D.3.3 [Programming Lan
In functional languages intermediate data structures are often used as glue to connect separate part...
Fusion is one of the most important code transformations as it has the potential to substantially op...
We introduce a handful of modules for manipulating Template Haskell datastructures, building up to m...
We present an embedded language in Haskell for programming pipelined computations. The language is a...
We present a refined approach to parallel array fusion that uses indexed types to specify the intern...
There are a number of approaches for eliminating intermediate data structures in functional programs...
There are a number of approaches for eliminating intermediate data structures in functional programs...
Stream Fusion is a system for removing intermediate list data structures from functional programs, i...
In functional programming it is common practice to build modular programs by composing functions whe...
In functional programming it is common practice to build modular programs by composing functions whe...
This paper presents a new optimization tech-nique for programming language Clojure based on the stan...
Abstract The Haskell String type is notoriously inefficient. We introduce a new data type, ByteStrin...
Stream Fusion, a popular deforestation technique in the Haskell community, cannot fuse the concatMap...
Programming coarse-grain reconfigurable arrays (CGRAs) is a challenging task. In this work, we explo...
In the streaming domain, applications are often described as dataflow graphs. Each node in the graph...
In functional languages intermediate data structures are often used as glue to connect separate part...
Fusion is one of the most important code transformations as it has the potential to substantially op...
We introduce a handful of modules for manipulating Template Haskell datastructures, building up to m...
We present an embedded language in Haskell for programming pipelined computations. The language is a...
We present a refined approach to parallel array fusion that uses indexed types to specify the intern...
There are a number of approaches for eliminating intermediate data structures in functional programs...
There are a number of approaches for eliminating intermediate data structures in functional programs...
Stream Fusion is a system for removing intermediate list data structures from functional programs, i...
In functional programming it is common practice to build modular programs by composing functions whe...
In functional programming it is common practice to build modular programs by composing functions whe...
This paper presents a new optimization tech-nique for programming language Clojure based on the stan...
Abstract The Haskell String type is notoriously inefficient. We introduce a new data type, ByteStrin...
Stream Fusion, a popular deforestation technique in the Haskell community, cannot fuse the concatMap...
Programming coarse-grain reconfigurable arrays (CGRAs) is a challenging task. In this work, we explo...
In the streaming domain, applications are often described as dataflow graphs. Each node in the graph...
In functional languages intermediate data structures are often used as glue to connect separate part...
Fusion is one of the most important code transformations as it has the potential to substantially op...
We introduce a handful of modules for manipulating Template Haskell datastructures, building up to m...