wiki:CompoundApps

Version 6 (modified by davea, 13 years ago) (diff)

--

Compound applications

Compound applications are deprecated. Use the wrapper instead.)

A compound application consists of a main program and one or more worker programs. The main program executes the worker programs in sequence, and maintains a 'main state file' that records which worker programs have completed. The main program assigns to each worker program a subrange of the overall 'fraction done' range of 0..1. For example, if there are two worker programs with equal runtime, the first would have range 0 to 0.5 and the second would have range 0.5 to 1. Typical main program logic is:

BOINC_OPTIONS options;

options.main_program = true;
...
boinc_init_options(&options)
read main state file
for each remaining worker program:
    APP_INIT_DATA aid;
    boinc_get_init_data(aid);
    aid.fraction_done_start = x
    aid.fraction_done_end = y
    boinc_write_init_data_file(aid)
    run the app
    wait for the app to finish
        poll
    write main state file
    if last app:
        break
    boinc_parse_init_data_file()    // reads CPU time from app_init.xml file
boinc_finish()

where x and y are the appropriate fraction done range limits. Typical worker program logic is:

BOINC_OPTIONS options;

options.main_program = false;
options.send_status_msgs = true;
...
boinc_init_options(&options);
...
do work, calling boinc_fraction_done() with values from 0 to 1,
and boinc_time_to_checkpoint(), occasionally
...
boinc_finish();        // this writes final CPU time to app_init.xml file

If the graphics is handled in a program that runs concurrently with the worker programs, it must also call boinc_init_options(), typically with all options false, then boinc_init_graphics(), and eventually boinc_finish().

If the main program is responsible for reporting application status to the core client, it should periodically call

    boinc_report_app_status(
        double cpu_time,                // CPU time since start of WU
        double checkpoint_cpu_time,     // CPU time at last checkpoint
        double fraction_done
    );