69 | | <min_ncpus>N</min_ncpus> :: run only on hosts with at least N usable CPUs. |
70 | | <min_ncpus_phys>N</min_ncpus_phys> :: run only on with at least N usable physical CPUs |
71 | | (older clients don't report physical CPUs, in which case we assume physical = logical/2). |
72 | | <max_threads>N</max_threads>:: If N > 1, this is a multicore app. Use as many CPUs as are available, but no more than N. |
73 | | <nthreads>NCPUS_PHYS-1</nthreads> :: proposed syntax |
74 | | <max_threads_phys>N</max_threads_phys>:: use as many threads as there are physical CPUs, but no more than N. |
| 69 | The following distinguishes between "logical" and "physical" CPUs. |
| 70 | Processors with hyperthreading have two logical CPUs per physical CPUs. |
| 71 | Pre-7.14 versions of the BOINC client measure and report only the number N of logical CPUs. |
| 72 | For these clients, we conservatively assume that the number of physical CPUs is max(1, N/2). |
| 73 | |
| 74 | "Usable" refers to computing preferences, |
| 75 | which allow volunteers to limit the % of CPUs (logical and physical) that can be used. |
| 76 | NUL and NUP denote the number of usable logical and physical CPUs on the host. |
| 77 | |
| 78 | Floating-point intensive apps should express their parallelism in terms of physical CPUs, |
| 79 | since pairs of logical CPUs generally share an FPU. |
| 80 | VM-based apps should do so as well, since VMWare may refuse to create a VM with more than NUP threads. |
| 81 | |
| 82 | <min_ncpus>N</min_ncpus> :: run only on hosts with NUL >= N. |
| 83 | <min_ncpus_phys>N</min_ncpus_phys> :: run only on hosts with NUP >= N. |
| 84 | <max_threads>N [M]</max_threads>:: Use min(N, NUL-M) logical CPUs (if not specified, M is zero). |
| 85 | <max_threads_phys>N [M]</max_threads_phys>:: Use min(N, NUP-M) physical CPUs (if not specified, M is zero). |