[MLton-commit] r6431

spoons at mlton.org spoons at mlton.org
Mon Mar 3 06:42:04 PST 2008


Added README

----------------------------------------------------------------------

A   mlton/branches/shared-heap-multicore/README.multimlton

----------------------------------------------------------------------

Added: mlton/branches/shared-heap-multicore/README.multimlton
===================================================================
--- mlton/branches/shared-heap-multicore/README.multimlton	2008-03-03 13:42:05 UTC (rev 6430)
+++ mlton/branches/shared-heap-multicore/README.multimlton	2008-03-03 14:42:04 UTC (rev 6431)
@@ -0,0 +1,110 @@
+multiMLton - a multi-processor version of MLton
+
+multiMLton is an extension of MLton that allows programmers to use multiple
+processors or processor cores to improve the performance of ML programs.  It
+strives to give the same results as Standard ML in cases where parallel tasks
+have no effects (or only benign ones).
+
+multiMLton is still "alpha-level" software and is under active development.
+Please send bugs reports and comments to spoons at cs.cmu.edu.
+
+
+USAGE
+
+New Library Functions
+
+        multiMLton provides several interfaces that allow parallel execution.
+        They are listed here in order of decreasing user-friendliness and
+        decreasing stability.
+
+        MLton.Parallel.ForkJoin and MLton.Parallel.Array allow data structures
+        to be built and processed in a uniform, parallel way.  They support
+        building pairs and arrays in parallel, as well as folding over arrays.
+
+        MLton.Parallel.Future allows speculative tasks to be created.  These
+	tasks may be executed in parallel.  Synchronization allows one task to
+	wait for the completion of another.
+
+        MLton.Parallel.Basic is the lowest level interface and provides no
+	synchronization mechanisms: you can spawn parallel tasks, but there is
+	no mechanism that allows you to wait for their completion.
+
+Additional @MLton Parameters
+
+	number-processors <N>		use N processors/cores (default = 1)
+	affinity-base <N>		set affinity starting with
+					  processsor N (default = 0)
+	affinity-stride <N>		stride N processors between each pair of
+                                          parallel threads when setting affinity
+                                          (default = 1)
+	alloc-chunk <SIZE>		allocate at least SIZE bytes per 
+					  request to runtime (default 4k)
+
+	Without any @MLton parameters, multiMLton will default to
+	using a single processor and should behave as the original
+	MLton except where described below.
+
+
+
+KNOWN INCOMPATIBILITIES / CAVEATS
+
+CPU usage
+
+	multiMLton aggressively uses all processors as determined by the
+	@MLton parameters.  It will not release unused CPU resources in the
+	case that there are fewer parallel tasks than processors.  Thus you
+	should not set number-processors higher than the number of expected
+	parallel tasks (or be willing to forfeit any unused processors).  You
+	should not set number-processors greater than the number of
+	processors/cores on your machine.
+
+Deviations from sequential semantics
+
+        While multiMLton implements the same extensional sematanics as MLton
+        when parallel tasks do not interfere, there are some cases where the
+        performance may differ from an SML programmer's expectation.  For
+        example, while the following code will raise a Match exception as
+        expected, it will also consume one processor for the remainder of the
+        program exection.
+
+          MLton.Parallel.ForkJoin.fork (fn () => raise Match, 
+                                        let fun loop () = loop () 
+					  in loop end)
+
+        Thus programmers should not use exceptions within parallel tasks to
+        guard meaningless cases.
+
+Profiling
+
+	The time profiler randomly samples only from the first processor, so
+	profiling results on a multiprocessor may be less precise than on a
+	uniprocessor.  Allocation profiling on multiple processors is
+	unsupported.
+
+Unimplemented features
+
+        MLton includes several extensions to Standard ML.  Some extensions
+        that are not (yet) supported in multiMLton include:
+
+                Signal handlers
+                Finalizers
+                MLton.Profile
+                Exported FFI functions (of type other than unit -> unit)
+
+        As such, several of the regression tests fail, even when running
+        multiMLton on a single processor.  These include:
+
+        	finalize.2 finalize.3 finalize.4 finalize.5 finalize
+                int-inf.bitops mutex prodcons real-int signals2 signals
+                thread2 timeout world5
+
+TODO
+
+	Generalize support for locking; generalize support for per-processor
+	data-structures (this would ease dependencies on Parallel.Internal)
+	
+
+HISTORY
+
+March, 2008
+	Initial alpha release




More information about the MLton-commit mailing list