While developing GranSim (and GUM) we have started to collect a set of interesting and non-trivial parallel programs written in parallel Haskell. These programs are used as a test suite for GranSim and part of the NoFib Suite of GHC.
Currently this suite contains the following programs:
sieve
), which creates a
bidirectional pipeline, where each processor filters the multiples of
one prime number out of an input list.
warshall
), which
creates a cyclic pipeline of processors.
matmult
, which performs a parallel matrix
multiplication.
determinant
, which computes for a given square
matrix its determinant.
LinSolv
, which solves a given set of linear
equations over integers by using multiple homomorphic images, computing
the result in each image via Cramer's Rule. The main part of this
algorithm is the parallel determinant computation.
coins
, which computes the number of possibilities
how to pay a given value with a given set of coins.
pperms
).
sort
).
soda7
, which searches a given grid
of letters for a given set of words.
rsa
(taken out of the sequential nofib suite).
queens
.
dcbm
. It performs queries
to a database in parallel.
bom
developed (under GranSim) by
Phil Trinder as part of the Parallel Databases Project.
nray
based on a version taken from Kelly's thesis
and ported to GRIP by Hammond.
cfd
.
minimax
, which computes for a given position in the
game of tic-tac-toe the best next move using an Alpha-Beta pruning
algorithm.
integrate
, a quick hull algorithm qhull
for computing the
convex hull of a set of points in a plane, a matrix inversion based on
gauss-jordan elimination mi
and a fast fourier transformation
fft
. All algorithms are based on the NESL versions published by
Guy Blelloch in CACM 39(3) and translated to Haskell.
Despite its name the parallel nofib suite also contains some fib-ish programs. These programs should be of interest for getting a start with parallel functional programming using GranSim:
parfact
), which computes the
sum of all numbers from 1 up to a given value n by bisecting the
interval and computing results of the intervals in parallel.
parfib
), which performs an
additional gcd computation and 2 additional multiplications in each
recursive call.
Go to the first, previous, next, last section, table of contents.