[m-rev.] For review: Document parallelism related features.

Julien Fischer juliensf at csse.unimelb.edu.au
Mon Mar 22 18:19:47 AEDT 2010


On Mon, 22 Mar 2010, Paul Bone wrote:

> Index: compiler/options.m
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/compiler/options.m,v
> retrieving revision 1.668
> diff -u -p -b -r1.668 options.m
> --- compiler/options.m	11 Feb 2010 04:36:09 -0000	1.668
> +++ compiler/options.m	22 Mar 2010 03:57:09 -0000
> @@ -4172,7 +4172,12 @@ options_help_compilation_model -->
>          "\tEnable experimental complexity analysis for the predicates",
>          "\tlisted in the given file.",
>          "\tThis option is supported for the C back-end, with",
> -        "\t--no-highlevel-code."
> +        "\t--no-highlevel-code.",
> +
> +        "--threadscope\t\t(grade modifier: `.threadscope')",
> +        "\tEnable support for profiling parallel execution.",
> +        "\tThis option is supported in the low-level C back-end parallel",

s/in the/by the/

> +        "\tgrades on some x86 and x86_64 processors."

Perhaps, processors that support the relevant instructions should be
listed in README.threadscope and pointer from here to there added.

>      ]),
>
>      io.write_string("      Miscellaneous optional features\n"),
> @@ -4206,6 +4211,9 @@ options_help_compilation_model -->
>          "\tAs above, but use a dynamically sized trail that is composed",
>          "\tof small segments.  This can help to avoid trail exhaustion",
>          "\tat the cost of increased execution time.",
> +        "--parallel\t\t(grade modifier: `.par')",
> +        "\tEnable parallel execution support for the low-level C grade.",
> +        "\tEnable concurrency (via pthreads) for the high-level C grade.",

s/grade/grades/ in both spots.

>          "--maybe-thread-safe {yes, no}",
>          "\tSpecify how to treat the `maybe_thread_safe' foreign code",
>          "\tattribute.  `yes' means that a foreign procedure with the",
> Index: doc/reference_manual.texi
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/doc/reference_manual.texi,v
> retrieving revision 1.439
> diff -u -p -b -r1.439 reference_manual.texi
> --- doc/reference_manual.texi	15 Mar 2010 17:41:13 -0000	1.439
> +++ doc/reference_manual.texi	22 Mar 2010 03:57:10 -0000
> @@ -672,6 +672,17 @@ This is an abbreviation for @samp{not (s
>  A conjunction.
>  @var{Goal1} and @var{Goal2} must be valid goals.
>
> + at item @code{@var{Goal1} & @var{Goal2}}
> +A parallel conjunction.
> +This has the same declarative semantics as the normal conjunction.
> +Operationally, implementations may execute @var{Goal1} & @var{Goal2}
> +in parallel.
> +Implementations may also start the parallel execution of these goals
> +in any order.

I suggest:

	The order in which parallel conjuncts begin execution is
	not fixed.

> Index: doc/user_guide.texi
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/doc/user_guide.texi,v
> retrieving revision 1.605
> diff -u -p -b -r1.605 user_guide.texi
> --- doc/user_guide.texi	15 Mar 2010 05:12:37 -0000	1.605
> +++ doc/user_guide.texi	22 Mar 2010 06:08:38 -0000
> @@ -5590,6 +5590,8 @@ then a progress message will be displaye
>                                      program with mprof.
>  * Using mdprof::                    How to analyze the time and/or memory
>                                      performance of a program with mdprof.
> +* Using threadscope::               How to analyse the parallel
> +                                    execution of a program with threadscope.
>  * Profiling and shared libraries::  Profiling dynamically linked executables.
>  @end menu
>
> @@ -5599,6 +5601,7 @@ then a progress message will be displaye
>  @cindex Measuring performance
>  @cindex Optimization
>  @cindex Efficiency
> + at cindex Parallel performance
>
>  To obtain the best trade-off between productivity and efficiency,
>  programmers should not spend too much time optimizing their code
> @@ -5618,19 +5621,35 @@ that associates a lot more context with
>  but not both at the same time;
>  @samp{mdprof} can profile both time and space at the same time.
>
> +The parallel execution of Mercury programs can be analyzed with a third
> +profiler called @samp{threadscope}.
> + at samp{threadscope} allows programmers to visualise CPU utilisation for work,
> +garbage collection, and idle time.
> +This enables programmers to see the effect of parallelization decisions such as
> +task granularity.
> +The @samp{threadscope} tool is not included with the Melbourne Mercury
> +Compiler,
> +See @url{http://research.microsoft.com/en-us/projects/threadscope/,
> +Threadscope: Performance Tuning Parallel Haskell Programs}.
> +
>  @node Building profiled applications
>  @section Building profiled applications
>  @cindex Building profiled applications
>  @pindex mprof
>  @pindex mdprof
> + at pindex threadscope
>  @cindex Time profiling
>  @cindex Heap profiling
>  @cindex Memory profiling
>  @cindex Allocation profiling
>  @cindex Deep profiling
> + at cindex Threadscope profiling
> + at cindex Parallel runtime profiling
> + at findex --parallel
> + at findex --threadscope
>
>  To enable profiling, your program must be built with profiling enabled.
> -The two different profilers require different support,
> +The three different profilers require different support,
>  and thus you must choose which one to enable when you build your program.
>
>  @itemize @bullet

...

> @@ -5669,6 +5692,13 @@ Third, if you enable graph profiling,
>  the compiler will generate for each source file
>  the static call graph for that file in @samp{@var{module}.prof}.
>
> +Enabling @samp{threadscope} profiling causes the compiler to build the program
> +against a different runtime system.
> +This runtime system logs events relevant to parallel execution.
> + at samp{threadscope} support uses special x86 and x86_64 instructions to access the
> +processor's time stamp counter,
> +therefore, it is not supported on other architectures.

Or indeed, all x86 and x86_64 processors.  Again, I think a more
specific idea of what processor a user requires should be given in
README.Threadscope and that file pointed to from here.

>  @node Creating profiles
>  @section Creating profiles
>  @cindex Profiling
> @@ -5703,6 +5733,11 @@ will use two of those files (@file{Prof.
>  and a two others: @file{Prof.MemoryWords} and @file{Prof.MemoryCells}.
>  Executables compiled with @samp{--deep-profiling}
>  save profiling data in a single file, @file{Deep.data}.
> +Executables compiled with the @samp{--threadscope} write profiling data to a

Delete "the"  (Or add the word "option" after @samp{--threadscope})

> +file whose name is that of the program being profiled with the extension
> + at samp{.eventlog}.
> +For example, the profile for the program @samp{my_program} would be written to
> +the file @file{my_program.eventlog}.
>
>  It is also possible to combine @samp{mprof} profiling results
>  from multiple runs of your program.

...

> @@ -6094,6 +6129,30 @@ all		map
>  internal	set
>  @end example
>
> + at node Using threadscope
> + at section Using threadscope
> +
> + at pindex threadscope
> + at pindex show-ghc-events
> + at cindex ThreadScope profiling
> + at cindex Parallel execution profiling
> +
> +The ThreadScope tools are not distributed with Mercury.
> +For information about how to install them please see the
> + at file{README.ThreadScope} file included in the Mercury distribution.
> +
> +ThreadScope provides two programs that can be used to view profiles in
> + at file{.eventlog} files.
> +The first, @samp{show-ghc-events}, lists the ThreadScope events sorted from the
> +earliest to the latest,
> +while the second, @samp{threadscope} provides graphical display for browsing

s/provides/provides a/

> +the profile.
> +
> +Both programs accept the name of a @file{.eventlog} file on the command
> +line.
> +The @samp{threadscope} program also provides a menu from which users can choose
> +a file to open.

...

> @@ -7860,6 +7923,35 @@ or for backtrackable destructive update.
>  This option is only supported by the C back-ends.
>
>  @sp 1
> + at item @code{--parallel}
> + at findex --parallel
> + at cindex Parallel execution
> +In low-level C grades this enables support for parallel execution.
> +Parallel execution can be achieved by using either the parallel conjunction
> +operator or the concurrency support in the @samp{thread} module of the
> +standard library.
> + at xref{Goals, parallel conjunction, Goals, mercury_ref, The Mercury
> +Language Reference Manual}, and
> + at xref{thread, the thread module, thread, mercury_library, The Mercury
> +Library Reference Manual}.
> +
> +In high-level C grades this enables support for concurrency, which is
> +accessible via the @samp{thread} module in the standard library.
> +The runtime uses POSIX threads to achieve this, therefore it also supports
> +parallel execution.

It may also support parallel execution of threads -- it wont't if I am
using a single core machine.

Julien.
--------------------------------------------------------------------------
mercury-reviews mailing list
Post messages to:       mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions:          mercury-reviews-request at csse.unimelb.edu.au
--------------------------------------------------------------------------



More information about the reviews mailing list