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 |