| 44 | | '''TODO:''' Here we need to document the structure of the current implementation with subpages for the more complicated aspects (e.g., representation types, distributed types, and gangs). |
| | 37 | '''TODO:''' Here we need to document the structure of the current implementation with subpages for the more complicated aspects (e.g., representation types, distributed types, and gangs). Here a dump of an old description of the library structure (which may be somewhat out of date): |
| | 38 | {{{ |
| | 39 | Data.Array.Parallel.Lifted |
| | 40 | ... the final user types ... |
| | 41 | |
| | 42 | Data.Array.Parallel.Unlifted |
| | 43 | Re-exports Data.Array.Parallel.Unlifted.Parallel |
| | 44 | Data.Array.Parallel.Unlifted.Distributed |
| | 45 | Data.Array.Parallel.Unlifted.Segmented |
| | 46 | Data.Array.Parallel.Unlifted.Flat |
| | 47 | |
| | 48 | Data.Array.Parallel.Unlifted.Parallel |
| | 49 | Parallel operations over UArrs. No new data types! |
| | 50 | These operations each |
| | 51 | - convert the incoming (UArr t) to a Dist (UArr t) |
| | 52 | - run the operation in parallel using a gang |
| | 53 | - convert the result back to a (UArr t') |
| | 54 | Plus fusion rules, of course! |
| | 55 | |
| | 56 | Data.Array.Parallel.Unlifted.Distributed |
| | 57 | Logically: type Dist a = Array GangMember a |
| | 58 | That is, one 'a' per gang member |
| | 59 | Mutable version: MDist |
| | 60 | |
| | 61 | Element types: unboxed, and products, (), |
| | 62 | *and* UArr, SUArr, Segd. |
| | 63 | |
| | 64 | Data.Array.Parallel.Unlifted.Segmented |
| | 65 | Provides SUArr, which are segmented UArrs with exactly one nesting level |
| | 66 | Logically: type SUArr a = UArr (UArr a) |
| | 67 | Element types: unboxed, and products and (). |
| | 68 | |
| | 69 | Again, a mutable version MSUArr is defined internally. |
| | 70 | |
| | 71 | Data.Array.Parallel.Unlifted.Flat |
| | 72 | Provides immutable (UArr) arrays of unboxed |
| | 73 | values, and strict products thereof. |
| | 74 | |
| | 75 | Simply lifts BUArr to work over strict products (incl unit). |
| | 76 | Internally to Flat, we also define mutable (MUArr) arrays, |
| | 77 | but they aren't exported. |
| | 78 | |
| | 79 | .UArr: representation |
| | 80 | .Loop: main loop combinator over UArr, loopU |
| | 81 | .Fusion: fusion rules for loopU |
| | 82 | .Combinators: instantiate loopU (to get fold, scan, map etc) |
| | 83 | |
| | 84 | The exported maps and folds over these arrays are |
| | 85 | purely sequential |
| | 86 | |
| | 87 | Data.Array.Parallel.Arr.BUArr |
| | 88 | Arrays of *unboxed* values, immutable (BUArr t) and mutable (MBUArr |
| | 89 | t), indexed by Int. Supports slicing (= sub-segment) operations. |
| | 90 | |
| | 91 | ToDo: combine with UArray and STUArray? (But they are indexed by Ix.) |
| | 92 | |
| | 93 | ToDo: a common pattern (e.g. when filtering) is that we allocate a |
| | 94 | big mutable array, *partially* fill it, and then want to shrink to |
| | 95 | fixed size when freezing it. (This is needed in Don's ByteString |
| | 96 | library too.) |
| | 97 | |
| | 98 | |
| | 99 | Data.Array.Parallel.Base.Fusion |
| | 100 | Specialised combining functions that specialise loopU to be map, fold, etc |
| | 101 | They are also useful for loopBU; hence not in Unlifted.Flat |
| | 102 | |
| | 103 | Data.Array.Parallel.Arr.BBArr |
| | 104 | Similar to BUArr, but for strict, boxed values. |
| | 105 | Representation: Array, STArray. |
| | 106 | Main application: array of UArrs in Distibuted.Types |
| | 107 | }}} |