| 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). |