src/Doc/IsarImplementation/ML.thy
changeset 52418 f00e4d8dde4c
parent 52417 0590d4a83035
child 52419 24018d1167a3
equal deleted inserted replaced
52417:0590d4a83035 52418:f00e4d8dde4c
  1560 
  1560 
  1561   Isabelle/Isar exploits the inherent structure of theories and proofs
  1561   Isabelle/Isar exploits the inherent structure of theories and proofs
  1562   to support \emph{implicit parallelism} to a large extent.  LCF-style
  1562   to support \emph{implicit parallelism} to a large extent.  LCF-style
  1563   theorem provides almost ideal conditions for that, see also
  1563   theorem provides almost ideal conditions for that, see also
  1564   \cite{Wenzel:2009}.  This means, significant parts of theory and
  1564   \cite{Wenzel:2009}.  This means, significant parts of theory and
  1565   proof checking is parallelized by default.  A maximum speedup-factor
  1565   proof checking is parallelized by default.  In Isabelle2013, a
  1566   of 3.0 on 4 cores and 5.0 on 8 cores can be
  1566   maximum speedup-factor of 3.5 on 4 cores and 6.5 on 8 cores can be
  1567   expected.\footnote{Further scalability is limited due to garbage
  1567   expected.
  1568   collection, which is still sequential in Poly/ML 5.2/5.3/5.4.  It
       
  1569   helps to provide initial heap space generously, using the
       
  1570   \texttt{-H} option.  Initial heap size needs to be scaled-up
       
  1571   together with the number of CPU cores: approximately 1--2\,GB per
       
  1572   core..}
       
  1573 
  1568 
  1574   \medskip ML threads lack the memory protection of separate
  1569   \medskip ML threads lack the memory protection of separate
  1575   processes, and operate concurrently on shared heap memory.  This has
  1570   processes, and operate concurrently on shared heap memory.  This has
  1576   the advantage that results of independent computations are directly
  1571   the advantage that results of independent computations are directly
  1577   available to other threads: abstract values can be passed without
  1572   available to other threads: abstract values can be passed without
  1751   within the central critical section of Isabelle/ML.  No other thread
  1746   within the central critical section of Isabelle/ML.  No other thread
  1752   may do so at the same time, but non-critical parallel execution will
  1747   may do so at the same time, but non-critical parallel execution will
  1753   continue.  The @{text "name"} argument is used for tracing and might
  1748   continue.  The @{text "name"} argument is used for tracing and might
  1754   help to spot sources of congestion.
  1749   help to spot sources of congestion.
  1755 
  1750 
  1756   Entering the critical section without contention is very fast, and
  1751   Entering the critical section without contention is very fast.  Each
  1757   several basic system operations do so frequently.  Each thread
  1752   thread should stay within the critical section only very briefly,
  1758   should stay within the critical section quickly only very briefly,
       
  1759   otherwise parallel performance may degrade.
  1753   otherwise parallel performance may degrade.
  1760 
  1754 
  1761   \item @{ML CRITICAL} is the same as @{ML NAMED_CRITICAL} with empty
  1755   \item @{ML CRITICAL} is the same as @{ML NAMED_CRITICAL} with empty
  1762   name argument.
  1756   name argument.
  1763 
  1757