| 7 |   | 0) app versions now include avg_ncpus, coprocessor usage, and | 
                      
                        | 8 |   | a FLOPS estimate (this defaults to the CPU benchmark, | 
                      
                        | 9 |   | but for GPU and multithread apps it will be different). | 
                      
                        | 10 |   | This info is sent from the server. | 
                      
                        | 11 |   |  | 
                      
                        | 12 |   | 1) Estimating the duration of unstarted jobs: | 
                      
                        | 13 |   | jobs are now associated with specific app versions. | 
                      
                        | 14 |   | The estimated duration of an unstarted job is the WU's | 
                      
                        | 15 |   | FLOP estimate divided by the app version's FLOPS, | 
                      
                        | 16 |   | scaled by the duration correction factor. | 
                      
                        | 17 |   |  | 
                      
                        | 18 |   | 2) Duration correction factor: this is now based on elapsed time | 
                      
                        | 19 |   | (i.e. wall time during which the job has been running) rather than CPU time. | 
                      
                        | 20 |   | Yes, this is affected by non-BOINC CPU load; that's as it should be. | 
                      
                        | 21 |   |  | 
                      
                        | 22 |   | 3) "CPU efficiency" is no longer maintained; it's subsumed in DCF. | 
                      
                        | 23 |   |  | 
                      
                        | 24 |   | 4) Estimating the duration of running jobs: | 
                      
                        | 25 |   | this is a weighted average of static and dynamic estimates. | 
                      
                        | 26 |   | The dynamic estimate is now based on elapsed time rather than CPU time. | 
                      
                        | 27 |   | So if a GPU job has been running for 5 min, is 25% done, | 
                      
                        | 28 |   | and has used 1 min of CPU, its dynamic estimate is 20 min (not 4 min). | 
                      
                        | 29 |   |  | 
                      
                        | 30 |   | 5) round-robin simulation: this was modified to reflect multi-thread | 
                      
                        | 31 |   | and coproc apps (e.g., if the host has 1 GPU, only one coproc app | 
                      
                        | 32 |   | can run at a time). | 
                      
                        | 33 |   | If CPUs are idle because coprocs are in use, | 
                      
                        | 34 |   | don't count it towards CPU shortfall. | 
                      
                        | 35 |   |  | 
                      
                        | 36 |   | 6) scheduler_cpus() and enforce_schedule() take coprocs and | 
                      
                        | 37 |   | avg_ncpus into account.  They try to keep GPUs busy if possible. | 
                      
                      
                        |   | 7 |  1. app versions now include avg_ncpus, coprocessor usage, and | 
                      
                        |   | 8 |  a FLOPS estimate (this defaults to the CPU benchmark, | 
                      
                        |   | 9 |  but for GPU and multithread apps it will be different). | 
                      
                        |   | 10 |  This info is sent from the server. | 
                      
                        |   | 11 |  1. Estimating the duration of unstarted jobs: | 
                      
                        |   | 12 |  jobs are now associated with specific app versions. | 
                      
                        |   | 13 |  The estimated duration of an unstarted job is the WU's | 
                      
                        |   | 14 |  FLOP estimate divided by the app version's FLOPS, | 
                      
                        |   | 15 |  scaled by the duration correction factor. | 
                      
                        |   | 16 |  1. Duration correction factor: this is now based on elapsed time | 
                      
                        |   | 17 |  (i.e. wall time during which the job has been running) rather than CPU time. | 
                      
                        |   | 18 |  Yes, this is affected by non-BOINC CPU load; that's as it should be. | 
                      
                        |   | 19 |  1. "CPU efficiency" is no longer maintained; it's subsumed in DCF. | 
                      
                        |   | 20 |  1. Estimating the duration of running jobs: | 
                      
                        |   | 21 |  this is a weighted average of static and dynamic estimates. | 
                      
                        |   | 22 |  The dynamic estimate is now based on elapsed time rather than CPU time. | 
                      
                        |   | 23 |  So if a GPU job has been running for 5 min, is 25% done, | 
                      
                        |   | 24 |  and has used 1 min of CPU, its dynamic estimate is 20 min (not 4 min). | 
                      
                        |   | 25 |  1. Round-robin simulation: this was modified to reflect multi-thread | 
                      
                        |   | 26 |  and coproc apps (e.g., if the host has 1 GPU, only one coproc app | 
                      
                        |   | 27 |  can run at a time). | 
                      
                        |   | 28 |  If CPUs are idle because coprocs are in use, | 
                      
                        |   | 29 |  don't count it towards CPU shortfall. | 
                      
                        |   | 30 |  1. scheduler_cpus() and enforce_schedule() take coprocs and | 
                      
                        |   | 31 |  avg_ncpus into account.  They try to keep GPUs busy if possible. |