\( \newcommand{\sem}[1]{ [\! [#1] \!] } \newcommand{\semzero}[1]{\sem{#1}_0} \newcommand{\emptymap}{\{\}} \newcommand{\fracc}[2]{\begin{eqnarray} \frac{\begin{array}{c} #1 \end{array}}{\begin{array}{c} #2 \end{array}} \end{eqnarray}} \newcommand{\sembox}[1]{\fbox{\(#1\)}} \newcommand{\fraccc}[2]{\frac{\begin{array}{c} #1 \end{array}}{\begin{array}{c} #2 \end{array}}} \newcommand{\onepart}[1]{#1} \newcommand{\twopart}[2]{#1\quad#2} \newcommand{\threepart}[3]{#1\quad#2\quad#3} \newcommand{\axiomm}[1]{$\begin{array}{c} #1 \end{array}$} \newcommand{\vd}{\vdash} \newcommand{\Ran}{{\rm Ran}} \newcommand{\Dom}{{\rm Dom}} \newcommand{\pp}{+\!\!\!+\,} \newcommand{\kw}[1]{\texttt{#1}} \newcommand{\id}[1]{\textit{#1}} \newcommand{\rarr}{\rightarrow} \newcommand{\larr}{\leftarrow} \newcommand{\fop}[1]{\color{blue}{\texttt{#1}}} \newcommand{\fw}[1]{\color{green}{\texttt{#1}}} \newcommand{\Eval}[1]{\sem{\,#1\,}} \newcommand{\extractF}[1]{\langle\,#1\,\rangle} \newcommand{\Let}{\mathrm{let}} \newcommand{\Where}[1]{\mathrm{where} \begin{array}[t]{l} #1 \end{array}} \newcommand{\In}{\mathrm{in}} \newcommand{\N}{N} \newcommand{\Z}{Z} \newcommand{\R}{R} \newcommand{\size}{\mathrm{size}} \newcommand{\length}{\mathrm{length}} \renewcommand{\log}{\mathrm{log}} \newcommand{\lam}[2]{\backslash #1 \rarr #2} \newcommand{\lamK}[2]{\lam{\kw{#1}}{\kw{#2}}} \)

Navigation

  • index
  • next |
  • Parallel Programming in Futhark »
  • Parallel Programming in Futhark

Parallel Programming in FutharkΒΆ

  • Preface
    • Contributing to the Book
    • Acknowledgments
  • 1. Introduction
    • 1.1. Structure of the Book
  • 2. The Futhark Language
    • 2.1. Basic Language Features
    • 2.2. Array Operations
    • 2.3. Size Types
    • 2.4. Records
    • 2.5. Parametric Polymorphism
    • 2.6. Higher-Order Functions
    • 2.7. Sequential Loops
    • 2.8. In-Place Updates
  • 3. Practical Matters
    • 3.1. Testing and Debugging
    • 3.2. Benchmarking
    • 3.3. Package Management
    • 3.4. When Things Go Wrong
  • 4. Modules
    • 4.1. Simple Modules
    • 4.2. Modules and files
    • 4.3. Module Types
    • 4.4. Parametric Modules
  • 5. Interoperability
    • 5.1. Calling Futhark from Python
    • 5.2. Calling Futhark from C
    • 5.3. Handling Awkward Futhark Types
  • 6. A Parallel Cost Model for Futhark Programs
    • 6.1. Futhark - the Language
    • 6.2. Futhark Type System
    • 6.3. Futhark Evaluation Semantics
    • 6.4. Work and Span
    • 6.5. Reduction by Contraction
    • 6.6. Radix-Sort by Contraction
    • 6.7. Counting Primes
  • 7. Fusion and List Homomorphisms
    • 7.1. Fusion
    • 7.2. Parallel Utility Functions
    • 7.3. Radix Sort Revisited
    • 7.4. Finding the Longest Streak
  • 8. Regular Flattening
    • 8.1. Segmented Scan
    • 8.2. Replicated Iota
    • 8.3. Segmented Replicate
    • 8.4. Segmented Iota
    • 8.5. Indexes to Flags
    • 8.6. Moderate Flattening
  • 9. Pseudo-Random Numbers and Monte Carlo Sampling Methods
    • 9.1. Generating Pseudo-Random Numbers
    • 9.2. Low-Discrepancy Sequences
  • 10. Irregular Flattening
    • 10.1. Flattening by Expansion
    • 10.2. Drawing Lines
    • 10.3. Drawing Triangles
    • 10.4. Primes by Expansion
    • 10.5. Complex Flattening
  • 11. Bibliography
  • 12. Conclusion

Logo

Table of Contents

  • Preface
  • 1. Introduction
  • 2. The Futhark Language
  • 3. Practical Matters
  • 4. Modules
  • 5. Interoperability
  • 6. A Parallel Cost Model for Futhark Programs
  • 7. Fusion and List Homomorphisms
  • 8. Regular Flattening
  • 9. Pseudo-Random Numbers and Monte Carlo Sampling Methods
  • 10. Irregular Flattening
  • 11. Bibliography
  • 12. Conclusion

Next topic

Preface

This Page

  • Show Source

Quick search

Navigation

  • index
  • next |
  • Parallel Programming in Futhark »
  • Parallel Programming in Futhark
© Copyright Martin Elsman, Troels Henriksen, and Cosmin E. Oancea. Created using Sphinx 7.3.7.