Skip to content

minimal but convincing example?Β #50

@jwaldmann

Description

@jwaldmann

I would very much want that the documentation contains a minimal convincing example
(and that this would also be included in tests, so we can be sure that it works).

"Convincing" in the sense that

  • running with +RTS -N<k> (for small k) visibly, and progressively, reduces execution time
  • code is readable and stand-alone (no fancy extra libraries)

For reference, I am using the following C# example (sum of bitcounts) in teaching
and I like that it has these properties:

  • it's two one-liners (naive bitcount implementation, naive summation)
  • parallelisation is trivial (add .AsParallel())
  • effect is visible (cut execution time nearly in half)
  • works out-of-the-box in csharp REPL
Func<int,int> bc = (int x) => { int c=0; while (x>0) {  c += x%2 ;   x >>= 1 ;  }   return c;   } 

Time(() => Console.WriteLine( Enumerable.Range(0,1<<27).Select(bc).Sum()))                             
       1811939328
       00:00:03.5504990

Time(() => Console.WriteLine( Enumerable.Range(0,1<<27).AsParallel().Select(bc).Sum()))
        1811939328                                                                                                                    
        00:00:02.1616790

If there is such an example (my naive use of parListChunk does not seem to cut it) I'm happy to write it up as haddock and submit a PR.

NB - Sure I know (and discuss with students) that there are better implementations of bc, and that sum-of-bitcounts (up to powers of two) has a closed form, so we don't actually need any of this...

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions