-
Notifications
You must be signed in to change notification settings - Fork 452
JobSubmission
create_work is a command-line tool for submitting jobs. Run it from the project root directory.
create_work [ arguments ] infile_1 ... infile_n
Create a job with the given input files (which must already be staged).
Mandatory arguments:
application name
Optional arguments:
workunit name (default: appname_PID_TIME)
Input template filename relative to project root; usually in templates/. Default: templates/appname_in.
Output template filename, relative to project root; usually in templates/. Default: templates/appname_out.
associate the job with the given batch.
high values are assigned before low values; see --priority_order and --priority_order_create_time options on the feeder
Read stdin, and create one job per line (see below).
keep going if an error occurs (used with --stdin)
Assign or broadcast this job.
list of keyword IDs
process the job with version N app versions.
The following job parameters may be passed in the input template, or as command-line arguments to create_work; the input template has precedence. If not specified, the given defaults will be used.
FLOPs estimate; default 3600e9
FPOPs bound; default 86400e9
default 5e8
default 1e9
0 (no bound)
Set the pre-assigned credit for this job.
default 1 week
homogeneous redundancy class
default 2
default 2
default 3
default 10
default 6
By default, input files are staged locally on the project server, and are identified by their filename.
However, you can also use input files that are remote, i.e. on a web server other than the project server. In that case you must specify them as
--remote_file URL nbytes MD5
where MD5 is the file's MD5 hash. The resulting file will have physical name jf_MD5; i.e. on the client, the project directory will contain the file with the physical name, and the slot directory will contain a link file of the form
<soft_link>../../projects/PROJECT_URL/jf_MD5</soft_link>
The --stdin option lets you create many jobs with a single invocation of create_work, increasing the efficiency of creating large batches of jobs.
Descriptions of the jobs are read from standard input. Each line specifies a job, and may include the following options:
the command line
the job name
assign this job to a host or user.
input template file
output template file
job priority
The remaining items specify input files: either physical filenames, or --remote_file arguments as described above.
For example, suppose you have input files named file1 ... filen (already staged), and you want to submit a job for each file. You could create a file file_list containing
file1
file2
...
filen
and then submit the jobs by typing
bin/create_work --appname name --stdin < file_list
BOINC's library provides a function for submitting jobs:
int create_work(
DB_WORKUNIT& wu,
const char* wu_template, // contents, not path
const char* result_template_filename, // relative to project root
const char* result_template_filepath, // absolute or relative to current dir
const char** infiles, // array of input file names
int ninfiles
SCHED_CONFIG&,
const char* command_line = NULL,
const char* additional_xml = NULL
);
The name and appid fields of the DB_WORKUNIT structure must always be initialized. Other job parameters may be passed either in the DB_WORKUNIT structure or in the input template file (the latter has priority). On a successful return, wu.id contains the database ID of the workunit.
If you want to use remote input files, use the following variant:
int create_work2(
DB_WORKUNIT& wu,
const char* wu_template, // contents, not path
const char* result_template_filename, // relative to project root
const char* result_template_filepath, // absolute or relative to current dir
vector<INFILE_DESC> infiles, // list of input file descriptions; see below
SCHED_CONFIG&,
const char* command_line = NULL,
const char* additional_xml = NULL
);
struct INFILE_DESC {
bool is_remote;
// the following defined if remote (physical name is jf_MD5)
//
double nbytes;
char md5[64];
char url[1024]; // make this a vector to support multiple URLs
// the following defined if not remote
//
char name[1024]; // physical name
};