Changes between Version 26 and Version 27 of CreditNew


Ignore:
Timestamp:
Mar 25, 2010, 2:48:20 PM (15 years ago)
Author:
davea
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • CreditNew

    v26 v27  
    11= New credit system design =
    22
    3 == Peak FLOPS and efficiency ==
    4 
    5 BOINC estimates the peak FLOPS of each processor.
     3== Definitions ==
     4
     5BOINC estimates the '''peak FLOPS''' of each processor.
    66For CPUs, this is the Whetstone benchmark score.
    77For GPUs, it's given by a manufacturer-supplied formula.
     
    1212So a given job might take the same amount of CPU time
    1313and a 1 GFLOPS host as on a 10 GFLOPS host.
    14 The "efficiency" of an application running on a given host
     14The '''efficiency''' of an application running on a given host
    1515is the ratio of actual FLOPS to peak FLOPS.
    1616
     
    2222
    2323 * For our purposes, the peak FLOPS of a device
    24    is single or double precision, whichever is higher.
    25    Differentiating between single and double would unnecessarily
    26    complicate things, and the distinction will disappear soon anyway.
     24   uses single or double precision, whichever is higher.
    2725
    2826== Credit system goals ==
     
    3432
    3533 * Project neutrality: different projects should grant
    36    about the same amount of credit per host,
    37    averaged over all hosts.
    38 
    39  * Cheat-proof
    40 
    41 It's easy to show that both goals can't be satisfied simultaneously.
     34   about the same amount of credit per host, averaged over all hosts.
    4235
    4336== The first credit system ==
     
    9386== Goals of the new (third) credit system ==
    9487
    95  * Completely automated - projects don't have to
    96    change code, settings, etc.
     88 * Completely automated - projects don't have to change code, settings, etc.
    9789
    9890 * Device neutrality
     
    126118   (e.g., a CPU job that does lots of disk I/O)
    127119   PFC() won't reflect this.  That's OK.
    128    The key thing is that BOINC reserved the device for the job,
     120   The key thing is that BOINC allocated the device to the job,
    129121   whether or not the job used it efficiently.
    130122 * peak_flops(J) may not be accurate; e.g., a GPU job may take
     
    153145''A posteriori'' estimates of job size may exist also
    154146(e.g., an iteration count reported by the app)
    155 but using this for anything introduces a new cheating risk,
    156 so it's probably better not to.
     147but this introduces a new cheating risk.
    157148
    158149== Cross-version normalization ==
    159150
    160 If a given application has multiple versions (e.g., CPU and GPU versions)
    161 the credit per job is adjusted
     151A given application may have multiple versions (e.g., CPU and GPU versions).
     152If jobs are distributed uniformly to versions,
     153all versions should get the same average credit.
     154We adjust the credit per job
    162155so that the average is the same for each version.
    163156
     
    167160An app version V's jobs are then scaled by the factor
    168161
    169  S(V) = (X/PFC^mean^(V))
    170 
    171 The "Version-Normalized Peak FLOP Count", or VNPFC(J) is
    172 
    173  VNPFC(J) = S(V) * PFC(J)
     162 Scale(V) = (X/PFC^mean^(V))
    174163
    175164Notes:
     
    182171   It's not exactly "Actual FLOPs", since the most efficient
    183172   version may not be 100% efficient.
     173 * If jobs are not distributed uniformly among versions
     174   (e.g. if SETI@home VLAR jobs are done only by the CPU version)
     175   then this mechanism doesn't work as intended.
     176   One solution is to create separate apps for separate types of jobs.
    184177
    185178== Cross-project normalization ==
     
    203196V's jobs are then scaled by S(V) as above.
    204197
     198Projects will export the following data:
     199{{{
     200for each app version
     201   app name
     202   platform name
     203   recent average granted credit
     204   plan class
     205   scale factor
     206}}}
     207
     208The BOINC server will collect these from several projects
     209and will export the following:
     210{{{
     211for each plan class
     212   average scale factor (weighted by RAC)
     213}}}
     214We'll provide a script that identifies app versions
     215for GPUs with no corresponding CPU app version,
     216and sets their scaling factor based on the above.
     217
    205218Notes:
    206219
     
    215228we maintain PFC^mean^(H, A),
    216229the average of PFC(J)/E(J) for jobs completed by H using A.
    217 The '''claimed FLOPS''' for a given job J is then
    218 
    219  F = VNPFC(J) * (PFC^mean^(V)/PFC^mean^(H, A))
    220 
    221 and the claimed credit (in Cobblestones) is
    222 
    223  C = F*100/86400e9
     230
     231This yields the host scaling factor
     232
     233 Scale(H) = (PFC^mean^(V)/PFC^mean^(H, A))
    224234
    225235There are some cases where hosts are not sent jobs uniformly:
     
    238248   than average.
    239249
     250== Claimed credit ==
     251
     252The '''claimed FLOPS''' for a given job J is then
     253
     254 F = PFC(J) * S(V) * S(H)
     255
     256and the claimed credit (in Cobblestones) is
     257
     258 C = F*100/86400e9
     259
    240260== Computing averages ==
    241261
     
    250270The code that does this is
    251271[http://boinc.berkeley.edu/trac/browser/trunk/boinc/lib/average.h here].
    252 
    253 == Cross-project scaling factors ==
    254 
    255 Projects will export the following data:
    256 {{{
    257 for each app version
    258    app name
    259    platform name
    260    recent average granted credit
    261    plan class
    262    scale factor
    263 }}}
    264 
    265 The BOINC server will collect these from several projects
    266 and will export the following:
    267 {{{
    268 for each plan class
    269    average scale factor (weighted by RAC)
    270 }}}
    271 We'll provide a script that identifies app versions
    272 for GPUs with no corresponding CPU app version,
    273 and sets their scaling factor based on the above.
    274272
    275273== Anonymous platform ==