Index

A note on the digital index

A link in an index entry is displayed as the section title in which that entry appears. Because some sections have multiple index markers, it is not unusual for an entry to have several links to the same section. Clicking on any link will take you directly to the place in the text in which the marker appears.

A

Accelerate, GPU Programming with AccelerateZipping Two Arrays, GPU Programming with AccelerateGPU Programming with Accelerate, Arrays and IndicesArrays and Indices, Arrays and IndicesArrays and Indices, Running a Simple Accelerate ComputationRunning a Simple Accelerate Computation, Running a Simple Accelerate Computation, Running a Simple Accelerate Computation, Running a Simple Accelerate Computation, Running a Simple Accelerate Computation, Creating Arrays Inside AccCreating Arrays Inside Acc, Constants, Example: Shortest PathsDebugging the CUDA Backend, Debugging the CUDA Backend, Example: A Mandelbrot Set GeneratorExample: A Mandelbrot Set Generator, Example: A Mandelbrot Set GeneratorExample: A Mandelbrot Set Generator
Arrays class, Running a Simple Accelerate Computation
arrays in, Arrays and IndicesArrays and Indices
conditionals, working with, Example: A Mandelbrot Set GeneratorExample: A Mandelbrot Set Generator
constant function, Constants
creating arrays, Creating Arrays Inside AccCreating Arrays Inside Acc
debugging, Debugging the CUDA Backend
Elt class, Running a Simple Accelerate Computation
GPUs, programming with, GPU Programming with AccelerateGPU Programming with Accelerate
implementing Floyd-Warshall algorithm, Example: Shortest PathsDebugging the CUDA Backend
indices in, Arrays and IndicesArrays and Indices
Mandelbrot set generator in, Example: A Mandelbrot Set GeneratorExample: A Mandelbrot Set Generator
programs, executing, Running a Simple Accelerate ComputationRunning a Simple Accelerate Computation
Shape class, Running a Simple Accelerate Computation
type classes in, Running a Simple Accelerate Computation
accept operation, for multiclient servers, A Trivial Server
addition, in Accelerate, Example: A Mandelbrot Set Generator
addToPointSum function, Example: The K-Means Problem
adjacency matrix, Example: Shortest Paths in a Graph, Example: Computing Shortest Paths, Folding and Shape-Polymorphism
algorithms run over, Example: Shortest Paths in a Graph
defined, Example: Computing Shortest Paths
foldS function with, Folding and Shape-Polymorphism
Amdahls law, Example: Parallelizing a Sudoku Solver
Applicative type class, Example: Shortest Paths in a Graph
arrays, Data Parallel Programming with Repa, Operations on ArraysOperations on Arrays, Operations on Arrays, Operations on Arrays, Arrays and Indices
delayed, Operations on ArraysOperations on Arrays
large-scale, Data Parallel Programming with Repa
manifest, Operations on Arrays
nested, Arrays and Indices
unboxed, Operations on Arrays
Arrays class (Accelerate), Running a Simple Accelerate Computation
arrays in Accelerate, Arrays and IndicesArrays and Indices, Arrays and Indices, Arrays and Indices, Scalar Arrays, Indexing Arrays, Creating Arrays Inside AccCreating Arrays Inside Acc, Zipping Two Arrays, Zipping Two Arrays, Example: Shortest Paths, Example: A Mandelbrot Set GeneratorExample: A Mandelbrot Set Generator
creating, Creating Arrays Inside AccCreating Arrays Inside Acc
indexing, Indexing Arrays
of dimensionality one, Arrays and Indices
of dimensionality zero, Arrays and Indices
of tuples, working with, Example: A Mandelbrot Set GeneratorExample: A Mandelbrot Set Generator
passing inputs as, Example: Shortest Paths
scalar, Scalar Arrays
zipping, Zipping Two Arrays
zipWith function, Zipping Two Arrays
arrays in Repa, Arrays, Shapes, and IndicesOperations on Arrays, Operations on ArraysOperations on Arrays, Folding and Shape-PolymorphismFolding and Shape-Polymorphism, Folding and Shape-PolymorphismFolding and Shape-Polymorphism
folding, Folding and Shape-PolymorphismFolding and Shape-Polymorphism
operations on, Operations on ArraysOperations on Arrays
shape-polymorphism, Folding and Shape-PolymorphismFolding and Shape-Polymorphism
assign function, Example: The K-Means Problem, Parallelizing K-Means
in K-Means problem, Example: The K-Means Problem
parallelizing, Parallelizing K-Means
associativity (foldP), Folding and Shape-Polymorphism
Async API, Overlapping Input/Output, mask and forkIO, Async RevisitedAsync Revisited, Avoiding Thread Leakage, Avoiding Thread Leakage, How to Achieve Parallelism with Concurrency, Parallel Version
automatically canceled with thread death, Avoiding Thread Leakage
avoiding thread leakage with, Avoiding Thread Leakage
cancellation of, mask and forkIO
for asynchronous actions, Overlapping Input/Output
implementing with STM, Async RevisitedAsync Revisited
to implement programs, Parallel Version
Async computations, errors inside, Parallel Version
asynchronous actions, wait function for, Overlapping Input/Output
asynchronous cancellation, Cancellation and Timeouts
asynchronous exceptions, Cancellation and TimeoutsAsynchronous Exceptions: Discussion, Asynchronous ExceptionsAsynchronous Exceptions, Asynchronous Exceptions, Masking Asynchronous ExceptionsMasking Asynchronous Exceptions, The bracket Operation, Asynchronous Exception Safety for ChannelsAsynchronous Exception Safety for Channels, TimeoutsTimeouts, Catching Asynchronous ExceptionsCatching Asynchronous Exceptions, mask and forkIOmask and forkIO, mask and forkIOmask and forkIO, Asynchronous Exceptions: Discussion, Asynchronous Exceptions: Discussion, Asynchronous Exception Safety, Setting Up a New Client, Asynchronous Exceptions and Foreign CallsAsynchronous Exceptions and Foreign Calls
bracket function, The bracket Operation
cancellations, Asynchronous ExceptionsAsynchronous Exceptions
catching, Catching Asynchronous ExceptionsCatching Asynchronous Exceptions
channel safety, Asynchronous Exception Safety for ChannelsAsynchronous Exception Safety for Channels
defined, Asynchronous Exceptions
foreign out-calls and, Asynchronous Exceptions and Foreign CallsAsynchronous Exceptions and Foreign Calls
forkIO function, mask and forkIOmask and forkIO, Asynchronous Exceptions: Discussion
in STM, Asynchronous Exception Safety
mask function, mask and forkIOmask and forkIO, Asynchronous Exceptions: Discussion
masking, Masking Asynchronous ExceptionsMasking Asynchronous Exceptions, Setting Up a New Client
timeouts and, TimeoutsTimeouts
asynchronous I/O, Overlapping Input/OutputMerging, Overlapping Input/OutputOverlapping Input/Output, Exceptions in HaskellExceptions in Haskell, Error Handling with AsyncError Handling with Async, MergingMerging
exceptions, handling, Error Handling with AsyncError Handling with Async
exceptions, throwing, Exceptions in HaskellExceptions in Haskell
merging, MergingMerging
MVar and, Overlapping Input/OutputOverlapping Input/Output
atomic blocks, as language construct, Software Transactional Memory
atomicModifyIORef, Limiting the Number of Threads with a Semaphore, Shared Concurrent Data Structures

B

backtracking, Example: A Conference Timetable
bandwith, saving with distributed servers, A Distributed Chat Server
bang-pattern, Limiting the Number of Threads with a Semaphore
Binary class, Defining a Message TypeDefining a Message Type
binary package, Defining a Message TypeDefining a Message Type
BlockedIndefinitelyOnMVar exception, Communication: MVars, Detecting Deadlock
blocking, Masking Asynchronous Exceptions, The bracket Operation, Timeouts, Blocking, Merging with STM, What Can We Not Do with STM?, Performance, Detecting Deadlock
and interruptible operations, Masking Asynchronous Exceptions
by throwTo, Timeouts
in STM, Blocking, What Can We Not Do with STM?, Performance
in takeMVar operation, Detecting Deadlock
with bracket function, The bracket Operation
with orElse operator, Merging with STM
BlockReason data type, Inspecting the Status of a Thread
bottlenecks, in parallel programs, Limiting the Number of Threads with a Semaphore
bound threads, Threads and Foreign Out-Calls, Threads and Foreign Out-Calls, Threads and Foreign In-Calls
foreign in-calls as, Threads and Foreign In-Calls
main threads as, Threads and Foreign Out-Calls
bounded channels, Bounded ChannelsBounded Channels
bracket function, Exceptions in Haskell, Asynchronous Exceptions, The bracket Operation, The bracket Operation, Asynchronous Exceptions: Discussion, Avoiding Thread Leakage, Setting Up a New Client
and conditional functions, Setting Up a New Client
and exceptions, Asynchronous Exceptions
defined with mask, The bracket Operation
finally function, Exceptions in Haskell
for asynchronous exception safety, Asynchronous Exceptions: Discussion
for canceling an async, Avoiding Thread Leakage
broadcast channels, Design Three: Use a Broadcast Chan, Recap
browsers, interrupting several activiites with, Cancellation and Timeouts
buffer size, with parBuffer, Parallelizing Lazy Streams with parBuffer

C

C, threading models in, Concurrency and the Foreign Function Interface
callbacks, Terminology: Parallelism and Concurrency, Threads and Foreign In-Calls
concurrency vs., Terminology: Parallelism and Concurrency
GUI, Threads and Foreign In-Calls
calls, Performance and Analysis, Example: Shortest Paths in a Graph, Adding Parallelism, The Par Monad Compared to Strategies, Masking Asynchronous Exceptions, Catching Asynchronous Exceptions, Parallel Version
foreign, Performance and Analysis
nesting, The Par Monad Compared to Strategies, Masking Asynchronous Exceptions, Parallel Version
recursive, Example: Shortest Paths in a Graph, Adding Parallelism, Catching Asynchronous Exceptions
cancel, Asynchronous Exceptions
catch function, Exceptions in Haskell, Exceptions in Haskell, Catching Asynchronous Exceptions
infix use of, Exceptions in Haskell
catchSTM, Asynchronous Exception Safety
centroids, Example: The K-Means Problem, Example: The K-Means Problem
computing, Example: The K-Means Problem
defined, Example: The K-Means Problem
Chan, MVar as a Building Block: Unbounded ChannelsMVar as a Building Block: Unbounded Channels, Merging with STM, Implementing Channels with STM
merging events into single, Merging with STM
TChan vs., Implementing Channels with STM
channel abstraction, An Alternative Channel Implementation
channels, Communication: MVarsCommunication: MVars, MVar as a Simple Channel: A Logging ServiceMVar as a Simple Channel: A Logging Service, MVar as a Building Block: Unbounded ChannelsMVar as a Building Block: Unbounded Channels, MVar as a Building Block: Unbounded Channels, MVar as a Building Block: Unbounded Channels, MVar as a Building Block: Unbounded Channels, MVar as a Building Block: Unbounded Channels, MVar as a Building Block: Unbounded Channels, MVar as a Building Block: Unbounded Channels, MVar as a Building Block: Unbounded Channels, MVar as a Building Block: Unbounded Channels, Asynchronous Exception Safety for ChannelsAsynchronous Exception Safety for Channels, Implementing Channels with STMAsynchronous Exception Safety, Design Two: One Chan Per Server Thread, Design Three: Use a Broadcast Chan, Typed ChannelsMerging Channels, Handling Failure
adding elements to, MVar as a Building Block: Unbounded Channels
asynchronous exceptions and, Asynchronous Exception Safety for ChannelsAsynchronous Exception Safety for Channels
broadcast, Design Three: Use a Broadcast Chan
ClientInput events carried by, Design Two: One Chan Per Server Thread
constructing new, MVar as a Building Block: Unbounded Channels
duplicate, MVar as a Building Block: Unbounded Channels
empty, MVar as a Building Block: Unbounded Channels, MVar as a Building Block: Unbounded Channels
implementing, MVar as a Simple Channel: A Logging ServiceMVar as a Simple Channel: A Logging Service, Implementing Channels with STMAsynchronous Exception Safety
one-place, Communication: MVarsCommunication: MVars
pushing values on end of, MVar as a Building Block: Unbounded Channels
read and write pointers of, MVar as a Building Block: Unbounded Channels
removing values from, MVar as a Building Block: Unbounded Channels
typed channels vs., Handling Failure
typed, in distributed programming, Typed ChannelsMerging Channels
unbounded, MVar as a Building Block: Unbounded ChannelsMVar as a Building Block: Unbounded Channels
chat server, A Chat ServerRecap, Architecture, Client Data, Server Data, Setting Up a New Client, Running the Client
architecture, Architecture
client data in, Client Data
implementing, A Chat ServerRecap
running client threads in, Running the Client
server data, Server Data
setting up new clients in, Setting Up a New Client
checkAddClient function, Setting Up a New Client
checkValue operation, Asynchronous Exception Safety
chunking, Example: Parallelizing a Sudoku Solver, Performance and Analysis, GranularityGranularity, Limiting the Number of Threads with a Semaphore
and parallelizing, Example: Parallelizing a Sudoku Solver
in K-Means problem, Performance and Analysis
number of chunks and runtime, GranularityGranularity
with granularity problems, Limiting the Number of Threads with a Semaphore
client data, in chat server, Client Data
client input events, Design Two: One Chan Per Server Thread, Design Three: Use a Broadcast Chan, Architecture
and server architecture, Architecture
carrying of, by channels, Design Two: One Chan Per Server Thread
on broadcast channels, Design Three: Use a Broadcast Chan
client threads, in chat server, Running the Client
clients, local vs. remote in distributed systems, Data Types
clientSendChan, Client Data
Closure, The Master Process
Cluster (type), Example: The K-Means Problem, Example: The K-Means Problem, Example: The K-Means Problem
from PointSum, Example: The K-Means Problem
in Lloyds algorithm, Example: The K-Means Problem
representation of, Example: The K-Means Problem
clusters, partitioning data points into, Example: The K-Means ProblemPerformance and Analysis
Command constructor, Client Data
command function, The Implementation
command-line parameters, Limiting the Number of Threads with a Semaphore
communication, Communication: MVarsCommunication: MVars, A Trivial Server, Distributed Programming
between distributed processes, Distributed Programming
between server and client, A Trivial Server
of threads, Communication: MVarsCommunication: MVars
compilers, Example: A Parallel Type Inferencer, Detecting Deadlock
deadlock detection by, Detecting Deadlock
for functional language, Example: A Parallel Type Inferencer
complex numbers, Example: A Mandelbrot Set Generator, Example: A Mandelbrot Set Generator
addition of, Example: A Mandelbrot Set Generator
multiplication of, Example: A Mandelbrot Set Generator
composability, of STM operations, Running Example: Managing Windows
composable atomicity, Summary
composable blocking, Summary
composite operations (in STM), Composition of Blocking Operations
compute-bound program, Example: Searching for Files
computeP function, Parallelizing the Program, Parallelizing the ProgramParallelizing the Program
computeS function, Operations on Arrays, Example: Computing Shortest Paths, Parallelizing the ProgramParallelizing the Program, Parallelizing the Program
and building of adjacency matrix, Example: Computing Shortest Paths
and delayed arrays, Operations on Arrays
computeP vs., Parallelizing the ProgramParallelizing the Program, Parallelizing the Program
concurrency, Terminology: Parallelism and ConcurrencyTerminology: Parallelism and Concurrency, Basic Concurrency: Threads and MVarsFairness, Communication: MVarsMVar as a Building Block: Unbounded Channels, MVar as a Simple Channel: A Logging ServiceMVar as a Simple Channel: A Logging Service, MVar as a Container for Shared StateMVar as a Container for Shared State, MVar as a Building Block: Unbounded ChannelsMVar as a Building Block: Unbounded Channels, FairnessFairness, FairnessFairness, Higher-Level Concurrency AbstractionsSummary: The Async API, Avoiding Thread LeakageAvoiding Thread Leakage, Symmetric Concurrency CombinatorsTimeouts Using race, Timeouts Using raceTimeouts Using race, Timeouts Using raceTimeouts Using race, Adding a Functor InstanceAdding a Functor Instance, How to Achieve Parallelism with ConcurrencyHow to Achieve Parallelism with Concurrency, Debugging Concurrent ProgramsEvent Logging and ThreadScope, Detecting DeadlockDetecting Deadlock, Tuning Concurrent (and Parallel) ProgramsRTS Options to Tweak, Shared Concurrent Data StructuresShared Concurrent Data Structures, Concurrency and the Foreign Function Interface
channels, implementing, MVar as a Simple Channel: A Logging ServiceMVar as a Simple Channel: A Logging Service
CPU usage and, FairnessFairness
data structures, shared, Shared Concurrent Data StructuresShared Concurrent Data Structures
deadlock, detecting, Detecting DeadlockDetecting Deadlock
debugging, Debugging Concurrent ProgramsEvent Logging and ThreadScope
fairness of, FairnessFairness
FFI and, Concurrency and the Foreign Function Interface
Functor instances and, Adding a Functor InstanceAdding a Functor Instance
MVars, Communication: MVarsMVar as a Building Block: Unbounded Channels
parallelism, achieving with, How to Achieve Parallelism with ConcurrencyHow to Achieve Parallelism with Concurrency
race operation, Timeouts Using raceTimeouts Using race
shared state, MVar as a Container for Shared StateMVar as a Container for Shared State
symmetric combinators, Symmetric Concurrency CombinatorsTimeouts Using race
thread leakage, Avoiding Thread LeakageAvoiding Thread Leakage
timeouts, Timeouts Using raceTimeouts Using race
tuning, Tuning Concurrent (and Parallel) ProgramsRTS Options to Tweak
unbounded channels, MVar as a Building Block: Unbounded ChannelsMVar as a Building Block: Unbounded Channels
concurrent search, of multiple subdirectories, Parallel Version
concurrent web servers, Introduction
concurrently function, Symmetric Concurrency Combinators
conditional operations, in Accelerate, Example: A Mandelbrot Set Generator
constant function (Accelerate), Constants
constraint satisfaction problems, Example: A Conference TimetableAdding Parallelism, Adding ParallelismAdding Parallelism
parallel skeletons and, Adding ParallelismAdding Parallelism
constructors, Rate-Limiting the Producer, Arrays, Shapes, and Indices, Arrays, Shapes, and Indices, Arrays and Indices, MVar as a Simple Channel: A Logging Service, MVar as a Simple Channel: A Logging Service, Masking Asynchronous Exceptions, Masking Asynchronous Exceptions, Masking Asynchronous Exceptions, Implementing Channels with STM
:., Arrays, Shapes, and Indices, Arrays and Indices
Fork, Rate-Limiting the Producer
MaskedInterruptible, Masking Asynchronous Exceptions
MaskedUninterruptible, Masking Asynchronous Exceptions
Message, MVar as a Simple Channel: A Logging Service
Stop, MVar as a Simple Channel: A Logging Service
TNil, Implementing Channels with STM
Unmasked, Masking Asynchronous Exceptions
Z, Arrays, Shapes, and Indices
contention, MVar and, Limiting the Number of Threads with a Semaphore
context-switch performance, efficiency of, Thread Creation and MVar Operations
Control.Deepseq module, DeepseqDeepseq
converted sparks, Example: Parallelizing a Sudoku Solver
cost model of STM, Performance
CPUs, GPUs vs., GPU Programming with Accelerate
Ctrl+C, A Trivial Server
CUDA language, GPU Programming with Accelerate, Running on the GPU, Debugging the CUDA Backend
debugging, Debugging the CUDA Backend
support in Accelerate for, Running on the GPU

D

data dependencies, Dataflow Parallelism: The Par Monad
data parallelism, Pipeline Parallelism, Limitations of Pipeline Parallelism
defined, Pipeline Parallelism
pipeline parallelism vs., Limitations of Pipeline Parallelism
data structure(s), Lazy Evaluation and Weak Head Normal Form, Communication: MVars, MVar as a Container for Shared State, MVar as a Building Block: Unbounded ChannelsMVar as a Building Block: Unbounded Channels, Asynchronous Exception Safety for Channels, An Alternative Channel Implementation, Performance, Shared Concurrent Data StructuresShared Concurrent Data Structures
evaluating compuations with, Lazy Evaluation and Weak Head Normal Form
invariants of, Asynchronous Exception Safety for Channels
MVar as building blocks for, Communication: MVars, MVar as a Building Block: Unbounded ChannelsMVar as a Building Block: Unbounded Channels
MVar wrappers for, MVar as a Container for Shared State
representing channel contents, An Alternative Channel Implementation
shared concurrent, Shared Concurrent Data StructuresShared Concurrent Data Structures
to store logs, Performance
dataflow, Dataflow Parallelism: The Par MonadThe Par Monad Compared to Strategies, Example: Shortest Paths in a GraphExample: Shortest Paths in a Graph, Pipeline ParallelismLimitations of Pipeline Parallelism, Example: A Conference TimetableAdding Parallelism, Example: A Parallel Type InferencerExample: A Parallel Type Inferencer
and constraint satisfaction problems, Example: A Conference TimetableAdding Parallelism
and Floyd-Warshall algorithm, Example: Shortest Paths in a GraphExample: Shortest Paths in a Graph
pipleline paralellism and, Pipeline ParallelismLimitations of Pipeline Parallelism
type inference engines, Example: A Parallel Type InferencerExample: A Parallel Type Inferencer
dataflow graphs, Dataflow Parallelism: The Par Monad
deadlock, MVar as a Building Block: Unbounded Channels, Error Handling with Async, Bounded Channels, Detecting Deadlock
and empty channels, MVar as a Building Block: Unbounded Channels
caused by writeTBQueue, Bounded Channels
error codes vs., Error Handling with Async
mutual, Detecting Deadlock
deadlock detection, Communication: MVars, Detecting DeadlockDetecting Deadlock, Detecting Deadlock
and MVar, Communication: MVars
of mutual deadlock, Detecting Deadlock
death, thread, Higher-Level Concurrency Abstractions, Avoiding Thread Leakage
debugging, Debugging the CUDA Backend, Debugging the CUDA Backend, Masking Asynchronous Exceptions, Handling Failure, Handling Failure, Debugging Concurrent ProgramsEvent Logging and ThreadScope, Inspecting the Status of a ThreadInspecting the Status of a Thread, Event Logging and ThreadScopeEvent Logging and ThreadScope, Event Logging and ThreadScopeEvent Logging and ThreadScope, Detecting DeadlockDetecting Deadlock
Accelerate programs, Debugging the CUDA Backend
concurrent programs, Debugging Concurrent ProgramsEvent Logging and ThreadScope
CUDA, Debugging the CUDA Backend
deadlock, detecting, Detecting DeadlockDetecting Deadlock
event logging, Event Logging and ThreadScopeEvent Logging and ThreadScope
monitor function, Handling Failure
thread status, inspecting, Inspecting the Status of a ThreadInspecting the Status of a Thread
ThreadScope, Event Logging and ThreadScopeEvent Logging and ThreadScope
with getMaskingState function, Masking Asynchronous Exceptions
withMonitor function, Handling Failure
decrypt function, Pipeline Parallelism
deeply-embedded domain-specific languages, Overview
DeepSeq (Control module), DeepseqDeepseq
degrees of evaluation, Deepseq
delayed arrays, Operations on Arrays, Operations on Arrays, Operations on Arrays, Operations on Arrays
computeS function and, Operations on Arrays
defined, Operations on Arrays
from fromFunction operation, Operations on Arrays
indexing, Operations on Arrays
depth threshold, Adding Parallelism, Limiting the Number of Threads with a Semaphore
for divide-and-conquer algorithms, Limiting the Number of Threads with a Semaphore
for tree-shaped parallelism, Adding Parallelism
DeriveGeneric extension (Binary class), Defining a Message Type
Desktops, Running Example: Managing Windows, Running Example: Managing Windows
for displays, Running Example: Managing Windows
MVars for, Running Example: Managing Windows
deterministic parallel programming, Terminology: Parallelism and ConcurrencyTerminology: Parallelism and Concurrency
DevIL library, Example: Image RotationSummary
Dining Philosophers problem, Running Example: Managing Windows, Bounded Channels
Direct scheduler (monad-par library), Using Different Schedulers
distributed fault-tolerant key-value store, Exercise: A Distributed Key-Value Store
distributed programming, Distributed ProgrammingExercise: A Distributed Key-Value Store, A First Example: PingsSumming Up the Ping Example, A First Example: PingsSumming Up the Ping Example, The Ping Server ProcessThe Ping Server Process, The Master ProcessThe Master Process, The main FunctionThe main Function, Multi-Node PingRunning on Multiple Machines, Typed ChannelsMerging Channels, Handling FailureThe Philosophy of Distributed Failure, A Distributed Chat ServerFailure and Adding/Removing Nodes, Data Types
clients, local vs. remote, Data Types
failures, handling, Handling FailureThe Philosophy of Distributed Failure
implementing, A First Example: PingsSumming Up the Ping Example
main function and, The main FunctionThe main Function
master process for, The Master ProcessThe Master Process
multi-node, Multi-Node PingRunning on Multiple Machines
ping example, A First Example: PingsSumming Up the Ping Example
server process for, The Ping Server ProcessThe Ping Server Process
server, implementing, A Distributed Chat ServerFailure and Adding/Removing Nodes
typed channels and, Typed ChannelsMerging Channels
distributed servers, implementing, A Distributed Chat ServerFailure and Adding/Removing Nodes, Data TypesData Types, Sending Messages, BroadcastingBroadcasting, DistributionDistribution, Testing the Server, Failure and Adding/Removing NodesFailure and Adding/Removing Nodes, Failure and Adding/Removing NodesFailure and Adding/Removing Nodes
broadcasting messages, BroadcastingBroadcasting
data types for, Data TypesData Types
failures, handling, Failure and Adding/Removing NodesFailure and Adding/Removing Nodes
handling distribution, DistributionDistribution
messages, sending, Sending Messages
nodes, adding/removing, Failure and Adding/Removing NodesFailure and Adding/Removing Nodes
testing, Testing the Server
distributed-process framework, Distributed ProgrammingExercise: A Distributed Key-Value Store, The Distributed-Process Family of PackagesThe Distributed-Process Family of Packages, Distributed Concurrency or Parallelism?, A First Example: PingsSumming Up the Ping Example, Processes and the Process Monad
packages in, The Distributed-Process Family of PackagesThe Distributed-Process Family of Packages
parallelism vs., Distributed Concurrency or Parallelism?
Process monad, Processes and the Process Monad
usage, A First Example: PingsSumming Up the Ping Example
distributed-process-simplelocalnet package, The main Function
divide-and-conquer algorithms, Example: A Conference Timetable, Limiting the Number of Threads with a Semaphore
defined, Example: A Conference Timetable
depth threshold for, Limiting the Number of Threads with a Semaphore
doesDirectoryExist, How to Achieve Parallelism with ConcurrencyHow to Achieve Parallelism with Concurrency
duds (sparks), Example: Parallelizing a Sudoku Solver
dupChan operation, MVar as a Building Block: Unbounded Channels
duplicate channels, creating, MVar as a Building Block: Unbounded Channels
dynamic partitioning, Example: Parallelizing a Sudoku Solver

E

effectful code, Terminology: Parallelism and Concurrency
effects, interleaving of, Basic Concurrency: Threads and MVars
efficiency, Thread Creation and MVar OperationsThread Creation and MVar Operations, Thread Creation and MVar Operations
of concurrency operations, Thread Creation and MVar OperationsThread Creation and MVar Operations
of context-switch performance, Thread Creation and MVar Operations
elapsed time, Example: Parallelizing a Sudoku Solver
Elt class (Accelerate), Running a Simple Accelerate Computation
empty channels, MVar as a Building Block: Unbounded Channels, MVar as a Building Block: Unbounded Channels
encrypt function, Pipeline Parallelism
enumFromN operation, Creating Arrays Inside Acc
enumFromStepN operation, Creating Arrays Inside Acc
Env data type, Example: A Parallel Type Inferencer
environment, in programming language, Example: A Parallel Type Inferencer
Erlang (programming language), The Philosophy of Distributed Failure
error codes, deadlocking vs., Error Handling with Async
error handling, Overlapping Input/Output, Error Handling with Async, The ParIO monad
and ParIO, The ParIO monad
and propagating exceptions, Error Handling with Async
in concurrent programming, Overlapping Input/Output
ErrorCall, Exceptions in Haskell
Eval computation, Evaluation Strategies
Eval monad, The Eval Monad, rpar, and rseq, The Eval Monad, rpar, and rseq, The Eval Monad, rpar, and rseq, Evaluation Strategies
rpar operation, The Eval Monad, rpar, and rseq
rseq operation, The Eval Monad, rpar, and rseq
Strategy function in, Evaluation Strategies
evalList Strategy, A Strategy for Evaluating a List in ParallelA Strategy for Evaluating a List in Parallel
evalPair Strategy, Parameterized Strategies
evaluation(s), Lazy Evaluation and Weak Head Normal FormLazy Evaluation and Weak Head Normal Form, Lazy Evaluation and Weak Head Normal Form, The Eval Monad, rpar, and rseq, Deepseq, MVar as a Container for Shared State, Shared Concurrent Data Structures
degrees of, Deepseq
in Haskell, Lazy Evaluation and Weak Head Normal Form
lazy, Lazy Evaluation and Weak Head Normal FormLazy Evaluation and Weak Head Normal Form, MVar as a Container for Shared State, Shared Concurrent Data Structures
sequential, The Eval Monad, rpar, and rseq
event loops, Terminology: Parallelism and Concurrency, A Trivial Server
concurrency vs., Terminology: Parallelism and Concurrency
web server implementations with, A Trivial Server
eventlog file, Event Logging and ThreadScopeEvent Logging and ThreadScope
Exception data type, Exceptions in Haskell
exception handlers, Exceptions in Haskell, Catching Asynchronous Exceptions, Catching Asynchronous Exceptions, Catching Asynchronous Exceptions, Avoiding Thread Leakage
and asynchronous exceptions, Catching Asynchronous Exceptions
hidden inside try, Catching Asynchronous Exceptions
higher-level combinators as, Exceptions in Haskell
installing, for Async, Avoiding Thread Leakage
tail-calling of, Catching Asynchronous Exceptions
exception handling, Error Handling with AsyncError Handling with Async, mask and forkIO, Inspecting the Status of a Thread
and forkFinally, mask and forkIO
by forkIO function, Inspecting the Status of a Thread
in asynchronous I/O, Error Handling with AsyncError Handling with Async
Exception type class, Exceptions in Haskell
exceptions, Communication: MVars, Exceptions in HaskellExceptions in Haskell, Exceptions in Haskell, Exceptions in Haskell, Exceptions in Haskell, Exceptions in Haskell, Error Handling with Async, Asynchronous Exceptions, Asynchronous Exception Safety, Timeouts Using race, Inspecting the Status of a Thread, Detecting Deadlock
and thread status, Inspecting the Status of a Thread
BlockedIndefinitelyOnMVar, Communication: MVars, Detecting Deadlock
catch function for, Exceptions in Haskell
catching, Exceptions in Haskell, Exceptions in Haskell
in STM, Asynchronous Exception Safety
propagating, with error-handling code, Error Handling with Async
re-throwing, Exceptions in Haskell
ThreadKilled, Asynchronous Exceptions
throwing, Exceptions in HaskellExceptions in Haskell
with timeouts, Timeouts Using race
expect function, The Ping Server Process, Typed Channels
extent operation for shapes, Arrays, Shapes, and Indices

F

F representation type (Repa), Example: Image Rotation
fairness, Basic Concurrency: Threads and MVars, FairnessFairness, What Can We Not Do with STM?, What Can We Not Do with STM?
in MVar, What Can We Not Do with STM?
in TMVar implementation, What Can We Not Do with STM?
policy, Basic Concurrency: Threads and MVars
FFI (foreign function interface), Concurrency and the Foreign Function Interface, Threads and Foreign Out-CallsThreads and Foreign Out-Calls, Threads and Foreign In-Calls
foreign in-calls, Threads and Foreign In-Calls
threads and, Threads and Foreign Out-CallsThreads and Foreign Out-Calls
fib function, Dataflow Parallelism: The Par Monad
FIFO order, What Can We Not Do with STM?
filesystem-searching program (example), Example: Searching for Files, The ParIO monad
fill operation, Creating Arrays Inside Acc
finally function, Exceptions in Haskell, Asynchronous Exceptions
and exceptions, Asynchronous Exceptions
as bracket function, Exceptions in Haskell
find function, How to Achieve Parallelism with ConcurrencyHow to Achieve Parallelism with Concurrency, Parallel Version, Limiting the Number of Threads with a Semaphore, The ParIO monad
and NBSem, Limiting the Number of Threads with a Semaphore
as recursive, How to Achieve Parallelism with ConcurrencyHow to Achieve Parallelism with Concurrency
in ParIO monad, The ParIO monad
to create new Async, Parallel Version
findpar, Performance and Scaling, Limiting the Number of Threads with a Semaphore
findseq vs., Performance and Scaling
NBSem vs., Limiting the Number of Threads with a Semaphore
findseq, Performance and Scaling
fixed division, of work, Example: Parallelizing a Sudoku Solver
fizzled sparks, Example: Parallelizing a Sudoku Solver
floating-point addition, Folding and Shape-Polymorphism
Floyd-Warshall algorithm, Example: Shortest Paths in a GraphExample: Shortest Paths in a Graph, Example: Computing Shortest PathsParallelizing the Program, Example: Computing Shortest Paths, Example: Computing Shortest Paths, Example: Shortest PathsDebugging the CUDA Backend
Accelerate, implementing in, Example: Shortest PathsDebugging the CUDA Backend
over dense graphs, Example: Computing Shortest Paths
pseudocode definition of, Example: Computing Shortest Paths
Repa, using over dense graphs, Example: Computing Shortest PathsParallelizing the Program
fmap operation, Adding a Functor Instance
folding, of concurrently function over a list, Symmetric Concurrency Combinators
foldl function, Example: Shortest Paths in a Graph
foldP, folding in parallel with, Folding and Shape-Polymorphism
folds, Example: Shortest Paths in a Graph, Folding and Shape-PolymorphismFolding and Shape-Polymorphism
over arrays, Folding and Shape-PolymorphismFolding and Shape-Polymorphism
parallelized, Example: Shortest Paths in a Graph
foldS function, Folding and Shape-Polymorphism
force function, Example: Parallelizing a Sudoku Solver
foreign calls, Performance and Analysis
foreign in-calls, Threads and Foreign In-Calls
foreign out-calls, Threads and Foreign Out-CallsThreads and Foreign Out-Calls, Asynchronous Exceptions and Foreign CallsAsynchronous Exceptions and Foreign Calls
asynchronous exceptions and, Asynchronous Exceptions and Foreign CallsAsynchronous Exceptions and Foreign Calls
threads and, Threads and Foreign Out-CallsThreads and Foreign Out-Calls
fork(s), Dataflow Parallelism: The Par Monad, Pipeline Parallelism, Rate-Limiting the Producer, Rate-Limiting the Producer, How to Achieve Parallelism with Concurrency, How to Achieve Parallelism with Concurrency
achieving parallelism with, How to Achieve Parallelism with Concurrency
defined, Pipeline Parallelism
in Par computations, Dataflow Parallelism: The Par Monad
number of, How to Achieve Parallelism with Concurrency
producing lists with, Rate-Limiting the Producer
forkFinally function, mask and forkIO, A Trivial Server
forkIO function, Basic Concurrency: Threads and MVars, mask and forkIOmask and forkIO, mask and forkIO, Asynchronous Exceptions: Discussion, Data Types, Inspecting the Status of a Thread
defined, Basic Concurrency: Threads and MVars
exception handling by, Inspecting the Status of a Thread
Process monad and, Data Types
variant of, mask and forkIO
forkOS, Threads and Foreign Out-Calls, Threads and Foreign Out-Calls
freeVars function, Example: A Parallel Type Inferencer
fromFunction operation, Operations on Arrays, Example: Computing Shortest Paths
delayed arrays from, Operations on Arrays
fromListUnboxed function, Arrays, Shapes, and Indices, Arrays and Indices
building arrays in Accelerate with, Arrays and Indices
functional language, compiler for, Example: A Parallel Type Inferencer
Functor instances, Adding a Functor InstanceAdding a Functor Instance
fusion (in Repa), Operations on Arrays

G

garbage collector, A Trivial Server, Detecting Deadlock
closing of Handle by, A Trivial Server
heap objects and, Detecting Deadlock
garbage-collected (GCd) sparks, Example: Parallelizing a Sudoku Solver, GC’d Sparks and Speculative Parallelism
generate function, Example: A Conference Timetable, Creating Arrays Inside Acc
in Accelerate, Creating Arrays Inside Acc
in Timetable example, Example: A Conference Timetable
get operation, Dataflow Parallelism: The Par Monad
getDirectoryContents, How to Achieve Parallelism with ConcurrencyHow to Achieve Parallelism with Concurrency
getMaskingState function, Masking Asynchronous Exceptions
getNumCapabilities, Limiting the Number of Threads with a Semaphore
getSelfNode function, The Master Process
getWindows, Blocking Until Something Changes
GHC Users Guide, Tools and Resources
ghc-events program, displaying raw event streams with, Event Logging and ThreadScope
global locks, Performance
GPUs (graphics processing units), GPU Programming with AccelerateGPU Programming with Accelerate, GPU Programming with Accelerate, Overview, Running on the GPURunning on the GPU
Accelerate without, Overview
CPUs vs., GPU Programming with Accelerate
programming with Accelerate, GPU Programming with AccelerateGPU Programming with Accelerate
running programs on, Running on the GPURunning on the GPU
granularity, GranularityGranularity, Example: Shortest Paths in a Graph, Adding Parallelism, Example: A Parallel Type Inferencer, The Par Monad Compared to Strategies, The Par Monad Compared to Strategies, Limiting the Number of Threads with a Semaphore
Eval and finer, The Par Monad Compared to Strategies
in parallelizing maps, Example: Shortest Paths in a Graph
larger, Par and, The Par Monad Compared to Strategies
of K-Means problem, GranularityGranularity
problems from parallelizing, Example: A Parallel Type Inferencer
problems with, Limiting the Number of Threads with a Semaphore
when adding parallelism, Adding Parallelism
GUI callback, Threads and Foreign In-Calls
GUI libraries, calling foreign functions by, Threads and Foreign Out-Calls

H

Hackage, Introduction, Tools and Resources
documentation on, Tools and Resources
libraries on, Introduction
Handle, A Trivial Server, A Trivial Server, Design One: One Giant Lock
closing of, A Trivial Server
for communication of server and client, A Trivial Server
interleaving messages to, Design One: One Giant Lock
handle function, catching exceptions with, Exceptions in Haskell
handleJust, Timeouts
handleMessage function, Running the Client
Haskell, Lazy Evaluation and Weak Head Normal Form, Exceptions in Haskell, Exceptions in Haskell, A Trivial Server
2010 standard, exceptions in, Exceptions in Haskell
98 standard, exceptions in, Exceptions in Haskell
as lazy language, Lazy Evaluation and Weak Head Normal Form
web server implementations in, A Trivial Server
Haskell Platform, Tools and Resources, Tools and Resources
components of, Tools and Resources
library documentation, Tools and Resources
Hoogle, Tools and Resources
HTTP library, Asynchronous Exceptions
hyperthreaded cores, RTS Options to Tweak

I

I/O, Overlapping Input/OutputMerging
I/O manager thread, A Trivial Server
I/O-bound program, Example: Searching for Files
identity property, The Identity PropertyThe Identity Property
IL monad, Example: Image Rotation
IList data type, Pipeline Parallelism, Rate-Limiting the Producer
defined, Pipeline Parallelism
long chain in, Rate-Limiting the Producer
image processing, parallel array operations for, Introduction
image rotation, Example: Image RotationExample: Image Rotation
immutable data structures, MVar wrappers for, MVar as a Container for Shared State
imperative languages, MVar as a Container for Shared State, Cancellation and Timeouts
and code modifying state, Cancellation and Timeouts
locks in, MVar as a Container for Shared State
implicit masks, Catching Asynchronous Exceptions
inconsistent state, Cancellation and Timeouts, Masking Asynchronous Exceptions
data left in, Masking Asynchronous Exceptions
of data, after cancellation, Cancellation and Timeouts
indexArray operation, Arrays and Indices
indexing, Operations on Arrays, Arrays and Indices, Indexing Arrays
arrays, in Accelerate, Arrays and Indices, Indexing Arrays
delayed arrays, Operations on Arrays
inferBind, Example: A Parallel Type Inferencer
inferTop, Example: A Parallel Type Inferencer
infix application ($ operator), MVar as a Container for Shared State
initLogger function, MVar as a Simple Channel: A Logging Service
INLINE pragmas (Repa), Example: Image RotationSummary
insert operation, MVar as a Container for Shared State
interleaving messages, Design One: One Giant Lock
interleaving of effects, Basic Concurrency: Threads and MVars
interpreter (Accelerate), GPU Programming with Accelerate
interruptible operations, Masking Asynchronous ExceptionsMasking Asynchronous Exceptions
interruption, mask and forkIOmask and forkIO, Asynchronous Exceptions: Discussion
IntMap function, Example: Shortest Paths in a Graph
IO action, What Can We Not Do with STM?, The ParIO monad
in ParIO, The ParIO monad
in STM, What Can We Not Do with STM?
IO monad, Exceptions in Haskell, Cancellation and Timeouts, Asynchronous Exceptions: Discussion, Running Example: Managing Windows, Processes and the Process Monad
cancellation in, Cancellation and Timeouts
catching exceptions in, Exceptions in Haskell
Process monad vs., Processes and the Process Monad
safety of code for, Asynchronous Exceptions: Discussion
STM monad performed in, Running Example: Managing Windows
IOException data type, building and inspecting, Exceptions in Haskell
IORef, Limiting the Number of Threads with a Semaphore, Shared Concurrent Data Structures
for concurrent shared data structures, Shared Concurrent Data Structures
to store semaphore values, Limiting the Number of Threads with a Semaphore
isEmptyTChan, More Operations Are Possible
IVar type, Dataflow Parallelism: The Par Monad, Example: Shortest Paths in a Graph, Limitations of Pipeline Parallelism
for Par computations, Dataflow Parallelism: The Par Monad
returned from runPar, Limitations of Pipeline Parallelism
to produce new graph, Example: Shortest Paths in a Graph

J

join function, Running the Client

L

labelThread function, Event Logging and ThreadScope, Event Logging and ThreadScope
large-scale arrays, parallelizing, Data Parallel Programming with Repa
layout of an array, Arrays, Shapes, and Indices
lazy data structures, Dataflow Parallelism: The Par Monad, Adding Parallelism
and Strategies, Dataflow Parallelism: The Par Monad
parallel skeletons vs., Adding Parallelism
lazy evaluation, Lazy Evaluation and Weak Head Normal FormLazy Evaluation and Weak Head Normal Form, Lazy Evaluation and Weak Head Normal Form, MVar as a Container for Shared State, Shared Concurrent Data Structures
and MVar, MVar as a Container for Shared State
defined, Lazy Evaluation and Weak Head Normal Form
with shared data structures, Shared Concurrent Data Structures
lazy streams, parallelizing, Parallelizing Lazy Streams with parBufferParallelizing Lazy Streams with parBuffer
length function, list evaluation with, Lazy Evaluation and Weak Head Normal Form
less defined (term), The Identity Property
let it crash philosophy, The Philosophy of Distributed Failure
libraries, Introduction, Using Different Schedulers, Example: Image RotationSummary, Asynchronous Exceptions, Threads and Foreign Out-Calls
DevIL, Example: Image RotationSummary
GUI, Threads and Foreign Out-Calls
HTTP, Asynchronous Exceptions
monad-par, Using Different Schedulers
on Hackage, Introduction
lift function, Creating Arrays Inside Acc, Example: A Mandelbrot Set Generator
liftIO, The ParIO monad, Processes and the Process Monad
line buffering mode (server), A Trivial Server
lists, Lazy Evaluation and Weak Head Normal Form, A Strategy for Evaluating a List in ParallelA Strategy for Evaluating a List in Parallel
length function for, Lazy Evaluation and Weak Head Normal Form
parallel evaluation of, A Strategy for Evaluating a List in ParallelA Strategy for Evaluating a List in Parallel
Lloyds algorithm, Example: The K-Means Problem, Example: The K-Means Problem
locking, of servers, with MVar, Design One: One Giant Lock
locks, Introduction, MVar as a Container for Shared State
difficulty in programming with, Introduction
in imperative languages, MVar as a Container for Shared State
LogCommand data type, MVar as a Simple Channel: A Logging Service
Logger data type, MVar as a Simple Channel: A Logging Service
logging services, MVar as a Simple Channel: A Logging ServiceMVar as a Simple Channel: A Logging Service
logMessage operation, MVar as a Simple Channel: A Logging Service
logStop operation, MVar as a Simple Channel: A Logging Service
lookup function, MVar as a Container for Shared State
lost wakeups, Blocking Until Something Changes

M

main function and program termination, A Simple Example: Reminders
main threads, Detecting Deadlock, Threads and Foreign Out-Calls
as bound threads, Threads and Foreign Out-Calls
deadlocking of, Detecting Deadlock
makeNewClusters function, Example: The K-Means Problem
Mandelbrot set generator, Example: A Mandelbrot Set Generator
manifest arrays, Operations on Arrays
map function, Lazy Evaluation and Weak Head Normal Form, Operations on ArraysOperations on Arrays, Running a Simple Accelerate Computation
and lazy data structure, Lazy Evaluation and Weak Head Normal Form
in Accelerate, Running a Simple Accelerate Computation
in Repa, Operations on ArraysOperations on Arrays
mapM function, Overlapping Input/Output
mapWithKey function, Example: Shortest Paths in a Graph
mask function, Masking Asynchronous Exceptions, Catching Asynchronous Exceptions, mask and forkIOmask and forkIO, Asynchronous Exceptions: Discussion
MaskedInterruptible constructor, Masking Asynchronous Exceptions
MaskedUninterruptible constructor, Masking Asynchronous Exceptions
masking asynchronous exceptions, Masking Asynchronous ExceptionsMasking Asynchronous Exceptions
masking state, mask and forkIO
mask_, Asynchronous Exception Safety for Channels
master function (distributed servers), Distribution
master nodes in distributed programming, Running with Multiple Nodes on One Machine
memory, Bounded Channels, Performance and Scaling, Thread Creation and MVar Operations
and unbounded channels, Bounded Channels
overhead for threads, Thread Creation and MVar Operations
required by parallelisms, Performance and Scaling
mergePortsBiased function, Merging Channels
mergePortsRR function, Merging Channels
merging, MergingMerging, Merging with STMMerging with STM, Merging ChannelsMerging Channels
typed channels, Merging ChannelsMerging Channels
with MVar, MergingMerging
with STM, Merging with STMMerging with STM
Message constructor, for LogCommand data type, MVar as a Simple Channel: A Logging Service
mkStaticClosure function, The Master ProcessThe Master Process
modifyMVar, Masking Asynchronous Exceptions, Masking Asynchronous Exceptions, Asynchronous Exception Safety for Channels, Asynchronous Exceptions: Discussion
built-in safety of, Asynchronous Exceptions: Discussion
implementing, Masking Asynchronous Exceptions
variant of, Asynchronous Exception Safety for Channels
modular programs, Terminology: Parallelism and Concurrency, Parallel Programming Using Threads
concurrency of, Terminology: Parallelism and Concurrency
creating, Parallel Programming Using Threads
monad-par library, schedules and, Using Different Schedulers
MonadIO monad, Processes and the Process Monad
monads, computeP and, Parallelizing the ProgramParallelizing the Program
monitor function, Handling Failure
moveWindow, Running Example: Managing Windows, Running Example: Managing Windows
concurrent call to, Running Example: Managing Windows
implemented with STM, Running Example: Managing Windows
moveWindowSTM, Running Example: Managing Windows
multi-node programming, Multi-Node PingRunning on Multiple Machines, Running with Multiple Nodes on One MachineRunning with Multiple Nodes on One Machine, Running on Multiple Machines
on multiple machines, Running on Multiple Machines
on one machine, Running with Multiple Nodes on One MachineRunning with Multiple Nodes on One Machine
multicast channels, building, MVar as a Building Block: Unbounded Channels
multiclient servers, main function for, A Trivial Server
multiple cores, How to Achieve Parallelism with Concurrency, Limiting the Number of Threads with a Semaphore
and concurrency, How to Achieve Parallelism with Concurrency
NBSem run on, Limiting the Number of Threads with a Semaphore
multiple writers, for one-place channels, Bounded Channels
multiplication (in Accelerate), Example: A Mandelbrot Set GeneratorExample: A Mandelbrot Set Generator
mutable containers, for shared data structures, Shared Concurrent Data Structures
mutable state, shared, Communication: MVars, MVar as a Container for Shared StateMVar as a Container for Shared State
mutual deadlock, Detecting Deadlock
MVar, Communication: MVarsMVar as a Building Block: Unbounded Channels, MVar as a Simple Channel: A Logging ServiceMVar as a Simple Channel: A Logging Service, MVar as a Container for Shared StateMVar as a Container for Shared State, MVar as a Building Block: Unbounded ChannelsMVar as a Building Block: Unbounded Channels, Overlapping Input/OutputOverlapping Input/Output, MergingMerging, Merging, Masking Asynchronous Exceptions, Blocking, Merging with STM, Implementing Channels with STM, An Alternative Channel ImplementationAn Alternative Channel Implementation, What Can We Not Do with STM?, Limiting the Number of Threads with a Semaphore
and merging, Merging
asynchronous I/O and, Overlapping Input/OutputOverlapping Input/Output
creating unbounded channels with, MVar as a Building Block: Unbounded ChannelsMVar as a Building Block: Unbounded Channels
implemented with STM, Blocking
implementing channels with, MVar as a Simple Channel: A Logging ServiceMVar as a Simple Channel: A Logging Service
implementing NBSem with, Limiting the Number of Threads with a Semaphore
merging asynchronous I/O with, MergingMerging
merging events into single, Merging with STM
performance compared with STM, What Can We Not Do with STM?
protocol for operations with, Masking Asynchronous Exceptions
shared state container, MVar as a Container for Shared StateMVar as a Container for Shared State
STM vs., Implementing Channels with STM, An Alternative Channel ImplementationAn Alternative Channel Implementation

P

packages, installing, Sample Code
Par monad, Example: Parallelizing a Sudoku Solver, Dataflow Parallelism: The Par MonadAdding Parallelism, Example: Shortest Paths in a GraphExample: Shortest Paths in a Graph, Pipeline ParallelismLimitations of Pipeline Parallelism, Example: A Conference TimetableAdding Parallelism, Using Different Schedulers, Using Different Schedulers, The Par Monad Compared to StrategiesThe Par Monad Compared to Strategies, Data Parallel Programming with Repa, The ParIO monad
and parallelizing large-scale arrays, Data Parallel Programming with Repa
constraint satisfaction problems, solving with, Example: A Conference TimetableAdding Parallelism
Floyd-Warshall algorithm, parallelizing, Example: Shortest Paths in a GraphExample: Shortest Paths in a Graph
force as default in, Example: Parallelizing a Sudoku Solver
implemented as library, Using Different Schedulers
ParIO vs., The ParIO monad
pipleline paralellism and, Pipeline ParallelismLimitations of Pipeline Parallelism
schedulers available in, Using Different Schedulers
Strategies vs., The Par Monad Compared to StrategiesThe Par Monad Compared to Strategies
parallel programs, Terminology: Parallelism and Concurrency, Tuning Concurrent (and Parallel) ProgramsRTS Options to Tweak
defined, Terminology: Parallelism and Concurrency
tuning, Tuning Concurrent (and Parallel) ProgramsRTS Options to Tweak
parallelism, Terminology: Parallelism and ConcurrencyTerminology: Parallelism and Concurrency, Basic Parallelism: The Eval MonadDeepseq, Lazy Evaluation and Weak Head Normal FormLazy Evaluation and Weak Head Normal Form, Lazy Evaluation and Weak Head Normal FormLazy Evaluation and Weak Head Normal Form, The Eval Monad, rpar, and rseq, The Eval Monad, rpar, and rseq, The Eval Monad, rpar, and rseq, DeepseqDeepseq, Example: The K-Means ProblemGranularity, GC’d Sparks and Speculative ParallelismGC’d Sparks and Speculative Parallelism, GC’d Sparks and Speculative ParallelismGC’d Sparks and Speculative Parallelism, Parallel Programming Using ThreadsThe ParIO monad, How to Achieve Parallelism with ConcurrencyHow to Achieve Parallelism with Concurrency, Sequential VersionSequential Version, Parallel VersionParallel Version, Performance and ScalingPerformance and Scaling, Performance and ScalingPerformance and Scaling, Limiting the Number of Threads with a SemaphoreLimiting the Number of Threads with a Semaphore, The ParIO monadThe ParIO monad, Distributed Concurrency or Parallelism?
achieving with concurrency, How to Achieve Parallelism with ConcurrencyHow to Achieve Parallelism with Concurrency
Deepseq, DeepseqDeepseq
distributed-process framework vs., Distributed Concurrency or Parallelism?
Eval monad, The Eval Monad, rpar, and rseq
garbage collected sparks, GC’d Sparks and Speculative ParallelismGC’d Sparks and Speculative Parallelism
implementing, Parallel VersionParallel Version
K-Means example, Example: The K-Means ProblemGranularity
lazy evaluation, Lazy Evaluation and Weak Head Normal FormLazy Evaluation and Weak Head Normal Form
ParIO monad and, The ParIO monadThe ParIO monad
performance, Performance and ScalingPerformance and Scaling
rpar operation, The Eval Monad, rpar, and rseq
rseq operation, The Eval Monad, rpar, and rseq
scaling, Performance and ScalingPerformance and Scaling
sequential vs., Sequential VersionSequential Version
speculative, GC’d Sparks and Speculative ParallelismGC’d Sparks and Speculative Parallelism
threads, limiting number of, Limiting the Number of Threads with a SemaphoreLimiting the Number of Threads with a Semaphore
weak head normal form, Lazy Evaluation and Weak Head Normal FormLazy Evaluation and Weak Head Normal Form
parameterized strategies, Parameterized StrategiesParameterized Strategies
parBuffer, Parallelizing Lazy Streams with parBufferParallelizing Lazy Streams with parBuffer
parent threads, Symmetric Concurrency Combinators
ParIO monad, Limitations of Pipeline Parallelism, The ParIO monadThe ParIO monad
parList function, A Strategy for Evaluating a List in ParallelA Strategy for Evaluating a List in Parallel, A Strategy for Evaluating a List in Parallel, Chunking StrategiesChunking Strategies
as parameterized Strategy, A Strategy for Evaluating a List in Parallel
defining, A Strategy for Evaluating a List in ParallelA Strategy for Evaluating a List in Parallel
with chunking, Chunking StrategiesChunking Strategies
parList Strategy, A Strategy for Evaluating a List in Parallel, Parallelizing Lazy Streams with parBufferParallelizing Lazy Streams with parBuffer
parallelizing lazy streams with, Parallelizing Lazy Streams with parBufferParallelizing Lazy Streams with parBuffer
parMap function, Example: Parallelizing a Sudoku SolverExample: Parallelizing a Sudoku Solver, A Strategy for Evaluating a List in Parallel, Adding Parallelism
as parallel skeleton, Adding Parallelism
expression of, with Strategies, A Strategy for Evaluating a List in Parallel
parMapM function, Dataflow Parallelism: The Par Monad
parPair Strategy, Parameterized Strategies, Parameterized Strategies, Parameterized Strategies
evalPair Strategy vs., Parameterized Strategies
evaluating components of a pair with, Parameterized Strategies
parameterized Strategy vs., Parameterized Strategies
parsearch function, Adding Parallelism
parSteps_strat function, Parallelizing K-Means
partitioning, Example: Parallelizing a Sudoku Solver, Example: Parallelizing a Sudoku Solver
dynamic, Example: Parallelizing a Sudoku Solver
static, Example: Parallelizing a Sudoku Solver
peer discovery, The Distributed-Process Family of Packages
performance monitoring, program, Thread Creation and MVar OperationsThread Creation and MVar Operations
phone book example, MVar as a Container for Shared StateMVar as a Container for Shared State
ping example, A First Example: PingsSumming Up the Ping Example
pipeline operator, Example: Shortest Paths
pipelining, Terminology: Parallelism and Concurrency
pipleline paralellism, Pipeline ParallelismLimitations of Pipeline Parallelism, Rate-Limiting the ProducerRate-Limiting the Producer, Limitations of Pipeline Parallelism
limitations of, Limitations of Pipeline Parallelism
rate-limiting, Rate-Limiting the ProducerRate-Limiting the Producer
Point (type), Example: The K-Means Problem, Example: The K-Means Problem
PointSum (type), Example: The K-Means Problem, Example: The K-Means Problem, Example: The K-Means Problem
Cluster from, Example: The K-Means Problem
constructing, Example: The K-Means Problem
in Lloyds algorithm, Example: The K-Means Problem
PolyType, Example: A Parallel Type Inferencer
POSIX, Threads and Foreign Out-Calls
Prelude functions (in Repa), Data Parallel Programming with Repa
Process API (Control.Distributed), A First Example: Pings
Process monad, Processes and the Process Monad, Data Types
ProcessID, Processes and the Process Monad
ProcessMonitorNotification message, Handling Failure
program analysis problems, parallelism for, Example: A Parallel Type Inferencer
proxies, for forkIO threads, Data Types
put function, Dataflow Parallelism: The Par Monad, Dataflow Parallelism: The Par Monad
strictness of, Dataflow Parallelism: The Par Monad
putMVar operation, Communication: MVars, Communication: MVars, Asynchronous Exception Safety for Channels, Blocking, What Can We Not Do with STM?
and fairness, What Can We Not Do with STM?
and mutable states, Communication: MVars
implementing, Blocking
interruptibility of, Asynchronous Exception Safety for Channels
putStrLn calls, Event Logging and ThreadScope, Event Logging and ThreadScope
and stdout Handle, Event Logging and ThreadScope
debugging with, Event Logging and ThreadScope
put_ operation, Dataflow Parallelism: The Par Monad

R

r0 Strategy, Parameterized Strategies
race function, Symmetric Concurrency Combinators, Timeouts Using raceTimeouts Using race, Recap
for chat server, Recap
for trees of threads, Symmetric Concurrency Combinators
timeouts with, Timeouts Using raceTimeouts Using race
rank operation, Arrays, Shapes, and Indices
rdeepseq, Parameterized StrategiesParameterized Strategies
read function, The Ping Server Process
read function (POSIX), Threads and Foreign Out-Calls
read pointer (channel), MVar as a Building Block: Unbounded Channels
readChan operations, MVar as a Building Block: Unbounded Channels, Asynchronous Exception Safety for Channels
concurrent, MVar as a Building Block: Unbounded Channels
definition of, Asynchronous Exception Safety for Channels
readEitherTChan, Composition of Blocking Operations
readImage operation, Example: Image Rotation
readMVar, Asynchronous Exception Safety for Channels
readName function, Setting Up a New Client
receive function, The Implementation
receiveChannel (typed channels), Typed Channels
ReceivePort (typed channels), Typed Channels, Typed Channels
record wildcard pattern, Client Data
RecordWildCards extension, Client Data
releaseNBSem, Limiting the Number of Threads with a Semaphore
reminders, timed, A Simple Example: Reminders
remotable, declaring functions as, The Master Process
removeClient function, Setting Up a New Client
render function, Blocking Until Something Changes
rendering thread, Running Example: Managing Windows, Blocking Until Something Changes
blocked by window, Running Example: Managing Windows
implementing, Blocking Until Something Changes
Repa, Data Parallel Programming with RepaSummary, Arrays, Shapes, and IndicesOperations on Arrays, Arrays, Shapes, and IndicesArrays, Shapes, and Indices, Arrays, Shapes, and IndicesArrays, Shapes, and Indices, Example: Computing Shortest PathsParallelizing the Program, Parallelizing the ProgramParallelizing the Program, Folding and Shape-PolymorphismFolding and Shape-Polymorphism, Folding and Shape-PolymorphismFolding and Shape-Polymorphism, Example: Image RotationSummary, Example: Image RotationSummary, Running on the GPU
arrays, Arrays, Shapes, and IndicesOperations on Arrays
DevIL library and, Example: Image RotationSummary
Floyd-Warshall algorithm and, Example: Computing Shortest PathsParallelizing the Program
folding arrays in, Folding and Shape-PolymorphismFolding and Shape-Polymorphism
image manipulation in, Example: Image RotationSummary
indices, Arrays, Shapes, and IndicesArrays, Shapes, and Indices
parallelizing programs with, Parallelizing the ProgramParallelizing the Program
running programs on GPU vs., Running on the GPU
shape-polymorphism of arrays, Folding and Shape-PolymorphismFolding and Shape-Polymorphism
shapes, Arrays, Shapes, and IndicesArrays, Shapes, and Indices
representation type (of Repa arrays), Arrays, Shapes, and Indices, Arrays and Indices
and Accelerate, Arrays and Indices
defined, Arrays, Shapes, and Indices
restore function, Masking Asynchronous Exceptions
retry operation, Blocking, Blocking, Blocking Until Something Changes, Implementing Channels with STM, Performance
defined, Blocking
in readTChan, Implementing Channels with STM
performance of, Performance
to block on arbitrary conditions, Blocking Until Something Changes
rnf (Deepseq), Deepseq
roll back, Running Example: Managing Windows
roots, Detecting Deadlock
rotate function, Example: Image RotationExample: Image Rotation
rotating points, about the origin, Example: Image Rotation
round-robin scheduler, Fairness
rpar operation, The Eval Monad, rpar, and rseq, Evaluation Strategies, Parameterized StrategiesParameterized Strategies, The Par Monad Compared to Strategies
and speculative parallelism, The Par Monad Compared to Strategies
and Strategy, Evaluation Strategies
as a Strategy, Parameterized StrategiesParameterized Strategies
rparWith Strategy, Parameterized Strategies, GC’d Sparks and Speculative Parallelism
rseq operation (Eval monad), The Eval Monad, rpar, and rseq, Evaluation Strategies
and Strategy, Evaluation Strategies
runClient function, Running the Client
runEval operation, The Eval Monad, rpar, and rseq, The Par Monad Compared to Strategies
runIL function, Example: Image Rotation
runPar function, Dataflow Parallelism: The Par Monad, Example: Shortest Paths in a Graph, Limitations of Pipeline Parallelism, The Par Monad Compared to Strategies, The ParIO monad
and lazy streams, Limitations of Pipeline Parallelism
and ParIO, The ParIO monad
avoiding multiple calls of, The Par Monad Compared to Strategies
overhead of, Example: Shortest Paths in a Graph
returning IVar from, Dataflow Parallelism: The Par Monad
runtime system, options for tuning, RTS Options to TweakRTS Options to Tweak

S

scalar arrays, Folding and Shape-Polymorphism, Scalar Arrays
schedulers (Par monad), Using Different Schedulers
search functions, Adding Parallelism
search pattern, Example: A Conference Timetable, Adding Parallelism
as higher-order function, Adding Parallelism
tree-shaped, Example: A Conference Timetable
search skeleton, Adding Parallelism
selects function, Example: A Conference Timetable
semaphores, Limiting the Number of Threads with a SemaphoreLimiting the Number of Threads with a Semaphore, Limiting the Number of Threads with a Semaphore, Limiting the Number of Threads with a Semaphore
limiting number of threads with, Limiting the Number of Threads with a SemaphoreLimiting the Number of Threads with a Semaphore
nonblocking, Limiting the Number of Threads with a Semaphore
storing semaphore values, Limiting the Number of Threads with a Semaphore
sendChannel (typed channels), Typed Channels
SendPort (typed channels), Typed Channels
seq function, Lazy Evaluation and Weak Head Normal FormLazy Evaluation and Weak Head Normal Form, Lazy Evaluation and Weak Head Normal Form
forcing evaluation with, Lazy Evaluation and Weak Head Normal FormLazy Evaluation and Weak Head Normal Form
weak head normal form evaluation in, Lazy Evaluation and Weak Head Normal Form
sequential algorithms, Limiting the Number of Threads with a Semaphore
sequential evaluation, The Eval Monad, rpar, and rseq
Serializable, Typed Channels
serializing data, Defining a Message TypeDefining a Message Type
server applications, Cancellation and Timeouts, Concurrent Network ServersRecap, A Trivial ServerA Trivial Server, Extending the Simple Server with StateThe Implementation, A Chat ServerRecap, ArchitectureArchitecture, Client DataRunning the Client
adding state to, Extending the Simple Server with StateThe Implementation
and thread interruption, Cancellation and Timeouts
architecture of, ArchitectureArchitecture
chat server, implementing, A Chat ServerRecap
client side, Client DataRunning the Client
implementing, A Trivial ServerA Trivial Server
server state, implementing, Extending the Simple Server with StateThe Implementation, Design One: One Giant LockDesign One: One Giant Lock, Design Two: One Chan Per Server ThreadDesign Two: One Chan Per Server Thread, Design Three: Use a Broadcast Chan, Design Four: Use STMThe Implementation, The Server
broadcast channels, Design Three: Use a Broadcast Chan
creating new instance, The Server
one chan per thread, Design Two: One Chan Per Server ThreadDesign Two: One Chan Per Server Thread
with MVar, Design One: One Giant LockDesign One: One Giant Lock
with STM, Design Four: Use STMThe Implementation
server thread, Running the Client
setNumCapabilities, Limiting the Number of Threads with a Semaphore
Shape class, Arrays, Shapes, and Indices, Running a Simple Accelerate Computation
shape-polymorphism of arrays, Folding and Shape-PolymorphismFolding and Shape-Polymorphism
shared mutable data structures, Communication: MVars, MVar as a Container for Shared StateMVar as a Container for Shared State, Shared Concurrent Data StructuresShared Concurrent Data Structures
concurrent, Shared Concurrent Data StructuresShared Concurrent Data Structures
containers for, Communication: MVars, MVar as a Container for Shared StateMVar as a Container for Shared State
shared state, MVar as container for, MVar as a Container for Shared StateMVar as a Container for Shared State
Shortest Paths in a Graph (example), Example: Computing Shortest Paths, Example: Computing Shortest Paths, Example: Shortest Paths
in Accelerate, Example: Shortest Paths
in Repa, Example: Computing Shortest Paths
shortestPath, Example: Shortest Paths in a Graph
Show, as exception, Exceptions in Haskell
SIMD divergence, Example: A Mandelbrot Set Generator
simplelocalnet backend, initializing, Failure and Adding/Removing Nodes
single wake up property, Fairness
single wake-up property (threads), Fairness
size operation, for shapes, Arrays, Shapes, and Indices
skeleton, Adding Parallelism, The Par Monad Compared to Strategies
to parallelize code, Adding Parallelism
with strategies and parallelism, The Par Monad Compared to Strategies
slave nodes in distributed programming, Running with Multiple Nodes on One Machine
SomeException data type, catching, Exceptions in Haskell
spark activitiy, visualizing, Visualizing Spark ActivityVisualizing Spark Activity
spark pool, GC’d Sparks and Speculative Parallelism
sparks, Example: Parallelizing a Sudoku Solver, GC’d Sparks and Speculative ParallelismGC’d Sparks and Speculative Parallelism, The Par Monad Compared to Strategies
defined, Example: Parallelizing a Sudoku Solver
garbage-collected, GC’d Sparks and Speculative ParallelismGC’d Sparks and Speculative Parallelism
in ThreadScope, The Par Monad Compared to Strategies
sparse graph, algorithms run over, Example: Shortest Paths in a Graph
spawn function, Dataflow Parallelism: The Par Monad, The Distributed-Process Family of Packages, The Master Process
in distributed programming, The Distributed-Process Family of Packages, The Master Process
in Par monad, Dataflow Parallelism: The Par Monad
speculative parallelism, GC’d Sparks and Speculative Parallelism, The Par Monad Compared to Strategies
speedups, Example: Parallelizing a Sudoku Solver, Performance and AnalysisPerformance and Analysis, GranularityGranularity, Pipeline Parallelism, Example: A Parallel Type Inferencer, Performance and Scaling, Limiting the Number of Threads with a Semaphore
and number of work items, GranularityGranularity
calculating, Example: Parallelizing a Sudoku Solver
for parallel type inferencer, Example: A Parallel Type Inferencer
for parallelization of K-Means, Performance and AnalysisPerformance and Analysis
in NBSem, Limiting the Number of Threads with a Semaphore
in parallel version, Performance and Scaling
in pipeline, Pipeline Parallelism
:sprint command, Lazy Evaluation and Weak Head Normal Form, Lazy Evaluation and Weak Head Normal Form
sqDistance operation, Example: The K-Means Problem
ST monad, Parallel Programming Using Threads
stack overflow, Asynchronous Exceptions: Discussion
stack size, tuning, Thread Creation and MVar Operations
static partitioning, Example: Parallelizing a Sudoku Solver
stdout Handle, Event Logging and ThreadScope
stencil convolutions, Summary
step function, Example: The K-Means Problem, Parallelizing K-Means, Example: Shortest Paths
in Accelerate, Example: Shortest Paths
in K-Means problem, Example: The K-Means Problem
parallelizing, Parallelizing K-Means
STM (Software Transactional Memory), Software Transactional Memory, Software Transactional Memory, Blocking, Blocking, Merging with STMMerging with STM, Implementing Channels with STMAsynchronous Exception Safety, An Alternative Channel ImplementationAn Alternative Channel Implementation, Bounded ChannelsBounded Channels, What Can We Not Do with STM?What Can We Not Do with STM?, PerformancePerformance, Design Four: Use STMThe Implementation, Recap, Limiting the Number of Threads with a Semaphore
and high contention, Limiting the Number of Threads with a Semaphore
blocking, Blocking
bounded channels, Bounded ChannelsBounded Channels
channels, implementing with, Implementing Channels with STMAsynchronous Exception Safety
defined, Software Transactional Memory
for chat server, Recap
limitations of, What Can We Not Do with STM?What Can We Not Do with STM?
merging, handling with, Merging with STMMerging with STM
MVar vs., An Alternative Channel ImplementationAn Alternative Channel Implementation
performance of, PerformancePerformance
retry operation, Blocking
server state, implementing with, Design Four: Use STMThe Implementation
Stop constructor, for LogCommand data type, MVar as a Simple Channel: A Logging Service
Strategy, Evaluation StrategiesThe Identity Property, Parameterized StrategiesParameterized Strategies, A Strategy for Evaluating a List in ParallelA Strategy for Evaluating a List in Parallel, Parallelizing Lazy Streams with parBufferParallelizing Lazy Streams with parBuffer, The Identity PropertyThe Identity Property
evaluating lists in parallel, A Strategy for Evaluating a List in ParallelA Strategy for Evaluating a List in Parallel
identity property, The Identity PropertyThe Identity Property
parameterized, Parameterized StrategiesParameterized Strategies
parBuffer, parallelizing lazy streams with, Parallelizing Lazy Streams with parBufferParallelizing Lazy Streams with parBuffer
Strategy(-ies), Dataflow Parallelism: The Par Monad, The Par Monad Compared to StrategiesThe Par Monad Compared to Strategies, The Par Monad Compared to Strategies, Data Parallel Programming with Repa
and lazy data structures, Dataflow Parallelism: The Par Monad, The Par Monad Compared to Strategies
and parallelizing large-scale arrays, Data Parallel Programming with Repa
Par monad vs., The Par Monad Compared to StrategiesThe Par Monad Compared to Strategies
Stream, Pipeline Parallelism
Stream data type, MVar as a Building Block: Unbounded Channels
stream elements, Pipeline Parallelism
streamFold, Pipeline Parallelism, Pipeline Parallelism
strictness annotations (in Repa), Example: Image RotationSummary
String type, Sequential Version
String, backslash character in, Example: A Parallel Type Inferencer
sum function, Lazy Evaluation and Weak Head Normal FormLazy Evaluation and Weak Head Normal Form
sum, of complex numbers, Example: A Mandelbrot Set Generator
sumAllS function, Folding and Shape-Polymorphism
super-linear performance, Performance and Scaling
swap function, Lazy Evaluation and Weak Head Normal Form
symmetric concurrency combinators, Symmetric Concurrency CombinatorsTimeouts Using race
synchronous channel, What Can We Not Do with STM?
synchronous exceptions, Asynchronous Exceptions

T

tail-calling of exception handlers, Catching Asynchronous Exceptions
tail-recursive strategies, GC’d Sparks and Speculative ParallelismGC’d Sparks and Speculative Parallelism
takeEitherTMVar, Composition of Blocking Operations
takeMVar operation, Communication: MVars, Communication: MVars, Masking Asynchronous Exceptions, Detecting Deadlock
and mutable states, Communication: MVars
deadlock with, Detecting Deadlock
masking exceptions during, Masking Asynchronous Exceptions
takeTMVar operation, Blocking
TChan, Implementing Channels with STM, Asynchronous Exception Safety, Architecture
and asynchronous exceptions, Asynchronous Exception Safety
for chat server, Architecture
implementing, Implementing Channels with STM
Tell constructor, Client Data
terminate function, The Master Process
termination of programs, A Simple Example: Reminders
the operation, in Accelerate, Scalar Arrays
thread death, Higher-Level Concurrency Abstractions, Avoiding Thread Leakage
automatic cancelling of Async with, Avoiding Thread Leakage
trees of threads and, Higher-Level Concurrency Abstractions
thread number, Event Logging and ThreadScope
thread-local state, APIs with, Threads and Foreign Out-Calls
threadDelay function, A Simple Example: Reminders
ThreadId, Asynchronous Exceptions
threading, A Simple Example: RemindersA Simple Example: Reminders, Communication: MVarsMVar as a Building Block: Unbounded Channels, MVar as a Container for Shared StateMVar as a Container for Shared State, FairnessFairness, FairnessFairness, MergingMerging, Cancellation and TimeoutsAsynchronous Exceptions: Discussion, Merging with STMMerging with STM, Avoiding Thread LeakageAvoiding Thread Leakage, Inspecting the Status of a ThreadInspecting the Status of a Thread, Detecting DeadlockDetecting Deadlock, Concurrency and the Foreign Function Interface
asynchronous exceptions and, Cancellation and TimeoutsAsynchronous Exceptions: Discussion
avoiding leakage, Avoiding Thread LeakageAvoiding Thread Leakage
CPU usage and, FairnessFairness
detecting deadlock, Detecting DeadlockDetecting Deadlock
fairness of, FairnessFairness
inspecting thread status, Inspecting the Status of a ThreadInspecting the Status of a Thread
merging, MergingMerging, Merging with STMMerging with STM
models for, in C, Concurrency and the Foreign Function Interface
MVars and, Communication: MVarsMVar as a Building Block: Unbounded Channels
shared state, MVar as a Container for Shared StateMVar as a Container for Shared State
ThreadKilled exception, Asynchronous Exceptions
threads, Introduction, Introduction, A Simple Example: Reminders, Communication: MVarsCommunication: MVars, MVar as a Container for Shared State, Fairness, Cancellation and TimeoutsAsynchronous Exceptions: Discussion, Cancellation and Timeouts, Asynchronous Exceptions, Timeouts, Running Example: Managing Windows, Blocking Until Something Changes, What Can We Not Do with STM?, What Can We Not Do with STM?, Higher-Level Concurrency Abstractions, Symmetric Concurrency Combinators, Symmetric Concurrency Combinators, A Trivial Server, Limiting the Number of Threads with a SemaphoreLimiting the Number of Threads with a Semaphore, Limiting the Number of Threads with a Semaphore, Event Logging and ThreadScope, Detecting Deadlock, Detecting Deadlock, Thread Creation and MVar OperationsThread Creation and MVar Operations, Thread Creation and MVar Operations, Threads and Foreign Out-CallsThreads and Foreign Out-Calls, Threads and Foreign Out-CallsThreads and Foreign Out-Calls, Threads and Foreign Out-Calls, Threads and Foreign In-Calls
additional, used by program, Limiting the Number of Threads with a Semaphore
and timeout exceptions, Timeouts
blocked on each other, Running Example: Managing Windows
blocked, in STM, What Can We Not Do with STM?
bound, Threads and Foreign Out-Calls
cancelling, Asynchronous Exceptions
child, Symmetric Concurrency Combinators, Detecting Deadlock
communication of, Communication: MVarsCommunication: MVars
creating, A Simple Example: Reminders, Thread Creation and MVar OperationsThread Creation and MVar Operations
deadlocking of, Detecting Deadlock
difficulty programming with, Introduction
FFI and, Threads and Foreign Out-CallsThreads and Foreign Out-Calls
for concurrent web servers, Introduction
foreign in-calls and, Threads and Foreign In-Calls
foreign out-calls and, Threads and Foreign Out-CallsThreads and Foreign Out-Calls
identifying, Event Logging and ThreadScope
implementing signals between, Blocking Until Something Changes
interrupting, Cancellation and TimeoutsAsynchronous Exceptions: Discussion
lightweight, A Trivial Server
limiting number of, Limiting the Number of Threads with a SemaphoreLimiting the Number of Threads with a Semaphore
locks for, MVar as a Container for Shared State
memory overhead for, Thread Creation and MVar Operations
multi-way communciation between, What Can We Not Do with STM?
trees of, Higher-Level Concurrency Abstractions, Symmetric Concurrency Combinators
unresponsive, Cancellation and Timeouts
wake up property of, Fairness
threads of control, Terminology: Parallelism and Concurrency
ThreadScope (tool), Tools and Resources, Example: Parallelizing a Sudoku SolverExample: Parallelizing a Sudoku Solver, Performance and Analysis, Visualizing Spark ActivityVisualizing Spark Activity, The Par Monad Compared to Strategies, Event Logging and ThreadScopeEvent Logging and ThreadScope, Event Logging and ThreadScope
and Eval vs. Par monads, The Par Monad Compared to Strategies
installing, Tools and Resources
profiling programs with, Example: Parallelizing a Sudoku SolverExample: Parallelizing a Sudoku Solver
showing detailed events in, Performance and Analysis
thread number in, Event Logging and ThreadScope
visualizing sparks with, Visualizing Spark ActivityVisualizing Spark Activity
threadStatus function, Inspecting the Status of a ThreadInspecting the Status of a Thread
throw function, Exceptions in Haskell
throwIO function, Exceptions in Haskell
throwSTM operation, Asynchronous Exception Safety
throwTo, Asynchronous Exceptions, Timeouts
and asynchronous exceptions, Timeouts
and synchronous exceptions, Asynchronous Exceptions
thunk(s), Lazy Evaluation and Weak Head Normal Form, Lazy Evaluation and Weak Head Normal Form, Lazy Evaluation and Weak Head Normal Form, Lazy Evaluation and Weak Head Normal Form, Lazy Evaluation and Weak Head Normal Form
and defined expressions, Lazy Evaluation and Weak Head Normal Form
creation of, by map function, Lazy Evaluation and Weak Head Normal Form
defined, Lazy Evaluation and Weak Head Normal Form
evaluating thunks that refer to other thunks, Lazy Evaluation and Weak Head Normal Form
unevaluated, Lazy Evaluation and Weak Head Normal Form
time, wall-clock and elapsed, Example: Parallelizing a Sudoku Solver
timed reminders, creation of threads in a program with, A Simple Example: Reminders
timeDownload function, Overlapping Input/Output
timeit function, Overlapping Input/Output
timeouts, TimeoutsTimeouts, Timeouts, Timeouts, Timeouts, Timeouts Using raceTimeouts Using race
behavior of, Timeouts
implementation of, Timeouts
nesting, Timeouts
with race operation, Timeouts Using raceTimeouts Using race
TimeTable, Example: A Conference Timetable
TList type, Implementing Channels with STM
TMVar data type, BlockingBlocking, What Can We Not Do with STM?, Adding a Functor Instance
fairness of, What Can We Not Do with STM?
STM computation vs., Adding a Functor Instance
toIndex function, Arrays, Shapes, and Indices
TopEnv, Example: A Parallel Type Inferencer
TQueue, An Alternative Channel Implementation, Bounded Channels
Chan vs., An Alternative Channel Implementation
to build bounded channels, Bounded Channels
Trace scheduler (monad-par library), Using Different Schedulers
traceEventIO function, Event Logging and ThreadScope
transaction, rolled back, Running Example: Managing Windows
transactional variable, Running Example: Managing Windows
transport layer packages, The Distributed-Process Family of Packages
Traversable class, Example: Shortest Paths in a Graph
traverseWithKey function, Example: Shortest Paths in a Graph
tree-shaped computations, Limiting the Number of Threads with a Semaphore
trees of threads, Higher-Level Concurrency Abstractions, Symmetric Concurrency Combinators
try function, Exceptions in Haskell, Error Handling with Async
catching exceptions with, Exceptions in Haskell
error handling with, Error Handling with Async
tryAquireNBSem, Limiting the Number of Threads with a Semaphore
tuning, Tuning Concurrent (and Parallel) ProgramsRTS Options to Tweak, Thread Creation and MVar OperationsThread Creation and MVar Operations, Thread Creation and MVar OperationsThread Creation and MVar Operations, Shared Concurrent Data StructuresShared Concurrent Data Structures, RTS Options to TweakRTS Options to Tweak
data structures, shared, Shared Concurrent Data StructuresShared Concurrent Data Structures
MVar operations, Thread Creation and MVar OperationsThread Creation and MVar Operations
RTS options for, RTS Options to TweakRTS Options to Tweak
thread creation, Thread Creation and MVar OperationsThread Creation and MVar Operations
tuples, arrays of, Arrays and Indices
TVar, Running Example: Managing Windows, Performance, Performance, Shared Concurrent Data Structures
defined, Running Example: Managing Windows
for concurrent shared data structures, Shared Concurrent Data Structures
locked during commit, Performance
unbounded number of, Performance
type inference engines, parallelizing, Example: A Parallel Type InferencerExample: A Parallel Type Inferencer
Typeable, Exceptions in Haskell, Exceptions in Haskell, Defining a Message Type
as exception, Exceptions in Haskell
enabling automatic derivation for, Exceptions in Haskell
message types as, Defining a Message Type
typed channels, Typed ChannelsMerging Channels, Merging ChannelsMerging Channels, Handling Failure
merging, Merging ChannelsMerging Channels
untyped channels vs., Handling Failure

W

wait function, Overlapping Input/Output, Error Handling with AsyncError Handling with Async
error handling with, Error Handling with AsyncError Handling with Async
for asynchronous actions, Overlapping Input/Output
waitAny function, Merging, Async Revisited, Adding a Functor Instance
waitBoth operation, Symmetric Concurrency Combinators, Symmetric Concurrency Combinators
and orElse combinator, Symmetric Concurrency Combinators
and withAsync function, Symmetric Concurrency Combinators
waitCatch function, Error Handling with Async, Asynchronous Exceptions
error handling with, Error Handling with Async
implementing, Asynchronous Exceptions
waitCatchSTM function, Async Revisited
waitEither function, Merging, Async Revisited, Async Revisited, Symmetric Concurrency Combinators, Symmetric Concurrency Combinators
and symmetric concurrency combinators, Symmetric Concurrency Combinators
in STM, Async Revisited, Async Revisited
waitSTM function, Async Revisited
wall-clock time, elapsed and, Example: Parallelizing a Sudoku Solver
watch list, in TVars, Performance
weak head normal form (WHNF), Lazy Evaluation and Weak Head Normal FormLazy Evaluation and Weak Head Normal Form
web browsers, interrupting several activiites with, Cancellation and Timeouts
web pages, concurrent downloading of, Overlapping Input/Output
weight function, Floyd-Warshall algorithm and, Example: Shortest Paths in a Graph
WHNF (weak head normal form), Lazy Evaluation and Weak Head Normal FormLazy Evaluation and Weak Head Normal Form
window manager example, Running Example: Managing WindowsRunning Example: Managing Windows
withAsync function, Avoiding Thread Leakage, Symmetric Concurrency Combinators, Parallel Version, Asynchronous Exceptions and Foreign CallsAsynchronous Exceptions and Foreign Calls
and waitBoth operation, Symmetric Concurrency Combinators
foreign calls with, Asynchronous Exceptions and Foreign CallsAsynchronous Exceptions and Foreign Calls
installing exception handlers with, Avoiding Thread Leakage
nesting calls of, Parallel Version
withMonitor function, Handling Failure
withStrategy, parallelizing lazy streams with, Parallelizing Lazy Streams with parBuffer
work items, number of, GranularityGranularity
work pools, Dataflow Parallelism: The Par Monad
work stealing, Example: Parallelizing a Sudoku Solver, The ParIO monad
write pointer (channel), MVar as a Building Block: Unbounded Channels
writeChan operations, MVar as a Building Block: Unbounded Channels, Asynchronous Exception Safety for Channels
concurrent, MVar as a Building Block: Unbounded Channels
definition of, Asynchronous Exception Safety for Channels
writeImage operation, Example: Image Rotation
writeTBQueue, deadlock caused by, Bounded Channels

Z

Z constructor, Arrays, Shapes, and Indices
zeroPoint operation, Example: The K-Means Problem
zipWith function (Accelerate), Zipping Two Arrays

Get Parallel and Concurrent Programming in Haskell now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.