• The client computes the result correctly and returns it.
  • The client computes the result incorrectly and returns it.
  • The client fails to download or upload files.
  • The application crashes on the client.
  • The client never returns anything because it breaks or stops running BOINC.
  • The scheduler isn't able to send the result because it requires more resources than any client has.

    BOINC provides a form of redundant computing in which each computation is performed on multiple clients, the results are compared, and are accepted only when a 'consensus' is reached. In some cases new results must be created and sent.

    BOINC manages most of the details; however, there are two places where the application developer gets involved:


    In the following example, the project creates a workunit with
    min_quorum = 2
    target_nresults = 3
    max_delay = 10

    BOINC automatically creates three results, which are sent at various times. At time 8, two successful results have returned so the validater is invoked. It finds a consensus, so the work unit is assimilated. At time 10 result 3 arrives; validation is performed again, this time to check whether result 3 gets credit.

    time        0   1   2   3   4   5   6   7   8   9   10  11  12  13  14
    
                created                          validate; assimilate
    WU          x                                x  x
                    created sent            success
    result 1        x       x---------------x
                    created sent                success
    result 2        x       x-------------------x
                    created     sent                    success
    result 3        x           x-----------------------x
    

    In the next example, result 2 is lost (i.e., there's no reply to the BOINC scheduler). When result 3 arrives a consensus is found and the work unit is assimilated. At time 13 the scheduler 'gives up' on result 2 (this allows it to delete the canonical result's output files, which are needed to validate late-arriving results).
    time        0   1   2   3   4   5   6   7   8   9   10  11  12  13  14
    
                created                                  validate; assimilate
    WU          x                                        x  x
                    created sent            success
    result 1        x       x---------------x
                    created sent    lost                            giveup
    result 2        x       x--------                               x
                    created     sent                    success
    result 3        x           x-----------------------x
    

    In the next example, results 2 returns an error at time 5. This reduces the number of outstanding results to 2; because target_nresults is 3, BOINC creates another result (result 4). A consensus is reached at time 9, before result 4 is returned.
    time        0   1   2   3   4   5   6   7   8   9   10  11  12  13  14
    
                created                              validate; assimilate
    WU          x                                    x  x
                    created sent            success
    result 1        x       x---------------x
                    created sent    error
    result 2        x       x-------x
                    created     sent                success
    result 3        x           x-------------------x
                                     created     sent           success
    result 4                         x   x----------------------x
    
    "; page_tail(); ?>