| 349 | | pfc = peak FLOP count(J) |
| 350 | | approx = true; |
| 351 | | if pfc > wu.fpops_bound |
| 352 | | host_app_version.scale_probation = true |
| 353 | | host_app_version.error_rate = initial value // replicate for a while |
| 354 | | if app.min_avg_pfc is defined |
| 355 | | F = app.min_avg_pfc * wu.fpops_est |
| 356 | | else |
| 357 | | F = wu.fpops_est |
| 358 | | else |
| 359 | | if job is anonymous platform |
| 360 | | if app.min_avg_pfc is defined |
| 361 | | if host_app_version.pfc_avg is above sample threshold |
| 362 | | and not host_app_version.scale_probation |
| 363 | | F = app.min_avg_pfc / host_app_version.pfc_avg |
| 364 | | approx = false |
| 365 | | else |
| 366 | | F = app.min_avg_pfc * wu.fpops_est |
| 367 | | else |
| 368 | | F = wu.fpops_est |
| 369 | | else |
| 370 | | F = pfc; |
| 371 | | host_scale = 0 |
| 372 | | if host_app_version.pfc_avg is above sample threshold |
| 373 | | and not host_app_version.scale_probation |
| 374 | | host_scale = min(10, app_version.pfc_avg / host_app_version.pfc_avg) |
| 375 | | if app_version.pfc_scale is defined |
| 376 | | F *= app_version.pfc_scale |
| 377 | | if host_scale |
| 378 | | F *= host_scale |
| 379 | | approx = false |
| 380 | | else |
| 381 | | if host_scale |
| 382 | | F *= host_scale |
| 383 | | app_version.pfc_avg.update(F) |
| 384 | | host_app_version.pfc_avg.update(F) |
| | 349 | double claimed_pfc(J, double& f, bool& approx): |
| | 350 | pfc = peak FLOP count(J) |
| | 351 | approx = true; |
| | 352 | if no app version info (relic of old scheduler) |
| | 353 | F = wu.fpops_est |
| | 354 | return |
| | 355 | if pfc > wu.fpops_bound |
| | 356 | host_app_version.scale_probation = true |
| | 357 | host_app_version.error_rate = initial value // replicate for a while |
| | 358 | if app.min_avg_pfc is defined |
| | 359 | F = app.min_avg_pfc * wu.fpops_est |
| | 360 | else |
| | 361 | F = wu.fpops_est |
| | 362 | else |
| | 363 | if job is anonymous platform |
| | 364 | if app.min_avg_pfc is defined |
| | 365 | if host_app_version.pfc_avg is above sample threshold |
| | 366 | and not host_app_version.scale_probation |
| | 367 | F *= app.min_avg_pfc / host_app_version.pfc_avg |
| | 368 | approx = false |
| | 369 | else |
| | 370 | F = app.min_avg_pfc * wu.fpops_est |
| | 371 | else |
| | 372 | F = wu.fpops_est |
| | 373 | else |
| | 374 | F = pfc; |
| | 375 | host_scale = 0 |
| | 376 | if host_app_version.pfc_avg is above sample threshold |
| | 377 | and app_version.pfc is above sample threshold |
| | 378 | and not host_app_version.scale_probation |
| | 379 | and host_app_version.pfc_avg <> 0 |
| | 380 | host_scale = app_version.pfc_avg / host_app_version.pfc_avg |
| | 381 | if (host_scale) > 10 |
| | 382 | host_scale = 10 |
| | 383 | if app_version.pfc_scale is defined |
| | 384 | F *= app_version.pfc_scale |
| | 385 | if host_scale |
| | 386 | F *= host_scale |
| | 387 | approx = false |
| | 388 | else |
| | 389 | if host_scale |
| | 390 | F *= host_scale |
| | 391 | app_version.pfc_avg.update(pfc) |
| | 392 | host_app_version.pfc_avg.update(pfc) |
| | 393 | (host_app_version.et.update(elapsed time)) |
| | 394 | (host_app_version.turnaround.update(turnaround time)) |