Add README
[packages/dph.git] / README
1 NDP library
2 ===========
3
4 See http://haskell.org/haskellwiki/GHC/Data_Parallel_Haskell
5
6 Writing NDP programs
7 --------------------
8
9 Import Data.Array.Parallel.Unlifted (sequential combinators) and/or
10 Data.Array.Parallel.Unlifted.Parallel (parallel combinators). The subdirectory
11 Data/Array/Parallel/test contains several examples.
12
13 Before invoking any parallel combinators you must initialise the gang threads,
14 usually by calling
15
16   Data.Array.Parallel.Unlifted.Distributed.setGang <T>
17
18 where T is the number of threads. Normally, you want to run the program with
19 +RTS -N<T> as well as you won't get any parallelism otherwise. This is a
20 regrettable hack which will go away eventually.
21
22 Compiling NDP programs
23 ----------------------
24
25 The file ndp.mk shows the options you'll usually want for compiling NDP
26 programs. You don't need -fbang-patterns unless you actually use them. You
27 might get away with omitting -fmax-simplifier-iterations6; however, sometimes
28 GHC will really need that many iterations to fully optimise NDP programs.
29
30 NDP on NUMA machines
31 --------------------
32
33 NUMA machines, for instance multiprocessors based on AMD Opterons, might
34 benefit from interleaved memory allocation. Under Linux, this can be achieved
35 by running
36
37   numactl --interleave=all <cmd>
38
39 where cmd is the NDP program you want to run. Also, explicitly setting the
40 processor affinity (taskset in Linux) might be helpful.
41
42 Implemented functionality
43 -------------------------
44
45 At the moment, the library only really supports flat arrays. Segmented arrays
46 are provided but you must really know what you are doing to get efficient
47 code. A lot of combinators (especially for segmented arrays) are still
48 missing.
49