+ <varlistentry>
+ <term><option>-feager-blackholing</option></term>
+ <indexterm><primary><option>-feager-blackholing</option></primary></indexterm>
+ <listitem>
+ <para>
+ Blackholing is the act of marking a thunk (lazy
+ computuation) as being under evaluation. It is useful for
+ three reasons: firstly it lets us detect certain kinds of
+ infinite loop (the <literal>NonTermination</literal>
+ exception), secondly it avoids certain kinds of space
+ leak, and thirdly it avoids repeating a computation in a
+ parallel program, because we can tell when a computation
+ is already in progress.</para>
+
+ <para>
+ The option <option>-feager-blackholing</option> causes
+ each thunk to be blackholed as soon as evaluation begins.
+ The default is "lazy blackholing", whereby thunks are only
+ marked as being under evaluation when a thread is paused
+ for some reason. Lazy blackholing is typically more
+ efficient (by 1-2% or so), because most thunks don't
+ need to be blackholed. However, eager blackholing can
+ avoid more repeated computation in a parallel program, and
+ this often turns out to be important for parallelism.
+ </para>
+
+ <para>
+ We recommend compiling any code that is intended to be run
+ in parallel with the <option>-feager-blackholing</option>
+ flag.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect2>
+
+ <sect2 id="parallel-options">
+ <title>RTS options for SMP parallelism</title>
+
+ <para>To run a program on multiple CPUs, use the
+ RTS <option>-N</option> option:</para>
+
+ <variablelist>