MULTITHREADING ============== As of version 1.3.0 the switch `-t --threads N' can be used to allow one instance of the program to use N threads for baby-steps giant-steps stage. This feature is experimental, known problems are: 1. Running one multi-threaded instance of the program is LESS productive than running multiple seperate non-threaded instances. 2. The fork() system call is required, but is not supported by the MinGW compiler used to build the Windows executables. 3. CPU-time statistics are no longer supported, all reported times and speeds are based on elapsed time, except the cpu_secs field in the checkpoint file which is in CPU time but will be inaccurate when the -t switch is used. 4. Intermediate progress reports and checkpoints are based on whichever thread has made the least progress, instead of waiting for all threads to synchronise. 5. If one child thread is terminated then the whole program will terminate, instead of redistributing the work over the remaining threads. 6. The exact factors found and the order in which they are reported is no longer determined. This is unavoidable, but means that the factors files produced by two runs of the program might not be identical. To check that two factors files FILE1 and FILE2 have eliminated the same terms, do: cat FILE1 | cut -f3 -d\ | sort | uniq > TMP1 cat FILE2 | cut -f3 -d\ | sort | uniq > TMP2 cmp TMP1 TMP2 THREAD AFFINITY =============== To set the CPU affinity for individual threads, use the `-A --affinity N' switch once for each thread. For example: sr1sieve -t2 -A0 -A2 ... will start two child threads, one with affinity to CPU 0 and the other with affinity to CPU 2.