[[PageOutline]]
= Specifying plan classes in XML =
You can specify plan classes using an XML configuration file with the format
{{{
... specification of a plan class
... more plan class specifications
}}}
Name this file '''plan_class_spec.xml''' and put it in your project directory.
This will '''replace''' the built in plan classes!
== Examples ==
An example configuration file is [http://boinc.berkeley.edu/trac/browser/boinc-v2/sched/plan_class_spec.xml.sample here].
This file specifies the [AppPlan predefined plan classes].
== Specification format ==
The specification of a plan class has the following format.
All elements except '''''' are optional.
In version numbers, M is major, m is minor, R is release.
X :: the name of the plan class
MMmmrr:: send only to BOINC clients of less than or equal version number.
MMmmrr:: send only to BOINC clients of greater than or equal version number.
x:: multiply projected FLOPS by this factor.
Use this to favor one class over another.
For example, if you have both SSE and non-SSE versions, use 1.1 and 1.0 respectively.
regex:: send only to hosts whose operating system version matches the given regular expression
x:: send only to hosts with at least this numerical OS version.
Numerical OS version derived from the host's os_version string as follows:.
* Mac OS X: Version 10.x is reported as (x+4).y.z. For example, 10.7.0 is reported as "11.00.00"; the numerical version is 110000.
* Windows: Windows 7 SP1 is reported as "(Microsoft Windows 7 ..., Service Pack 1, (06.01.7601.00))";
the numerical version is 601760100.
More information is [http://en.wikipedia.org/wiki/Comparison_of_Microsoft_Windows_versions here].
* Linux and Android: the kernel version is reported as "2.6.3"; the numerical version is 20603.
x:: max numerical OS version (see above)
x:: a required CPU feature (such as sse3). You can include more than one.
regex:: send only to hosts with host.serialnum field that matches the given regular expression.
regex:: send only to hosts whose CPU vendor matches the regular expression.
Example CPU vendors are "!GenuineIntel" and "AuthenticAMD",
so to match Intel CPUs you could use
{{{
.*Intel
}}}
The following elements let you use a project preference to decide whether to use the app version:
x:: the name of the tag
x:: the contents must match this regular expression
:: treat the absence of the project_prefs_tag (i.e. the user didn't set it yet) as if the project_prefs_regex matched.
=== Fields for multicore apps ===
x :: run only on hosts with at least X usable CPUs.
x:: use at most this many CPUs
0|1:: if set, pass command-line args '''--nthreads N'''
to the app, where N is the number of CPUs to use
(the lesser of max_threads and the number of CPUs on the host).
=== Fields for GPU apps ===
Required:
X:: the GPU type (generally '''nvidia''', '''amd''', or '''intel''')
Optional:
x:: the fraction of total FLOPs that are done by the CPU.
This is used to calculate CPU usage and estimated FLOPS.
Default 0.1.
x:: The minimum amount of GPU RAM.
This is needed because older clients report total RAM
but not available RAM.
x:: require this much available GPU RAM
x:: scale GPU peak speed by this (default 1).
x:: how many GPUs will be used (possibly fractional); default 1.
x:: minimum display driver version.
AMD driver versions are represented as MMmmRRRR.
NVIDIA driver versions are represented as MMMmm.
x:: maximum display driver version
:: CUDA application (NVIDIA)
:: CAL application (AMD)
x:: you can use a project-specific preferences to let users
scale the # of GPUs used.
This is the tag name.
0|1:: send this version only to hosts without OpenCL capability
=== Fields for AMD/ATI GPU apps ===
:: Require libraries named "ati", not "amd".
:: Require libraries named "amd".
You can verify which DLLs your application is linked against using
[http://www.dependencywalker.com/ Dependency Walker] against your application.
If your executable contains DLL names prefixed with 'ati', use this option.
These flags are usually not needed for OpenCL apps.
N ::
N ::
Min and max CAL targets:
{{{
typedef enum CALtargetEnum {
CAL_TARGET_600, /**< R600 GPU ISA */
CAL_TARGET_610, /**< RV610 GPU ISA */
CAL_TARGET_630, /**< RV630 GPU ISA */
CAL_TARGET_670, /**< RV670 GPU ISA */
CAL_TARGET_7XX, /**< R700 class GPU ISA */
CAL_TARGET_770, /**< RV770 GPU ISA */
CAL_TARGET_710, /**< RV710 GPU ISA */
CAL_TARGET_730, /**< RV730 GPU ISA */
CAL_TARGET_CYPRESS, /**< CYPRESS GPU ISA */
CAL_TARGET_JUNIPER, /**< JUNIPER GPU ISA */
CAL_TARGET_REDWOOD, /**< REDWOOD GPU ISA */
CAL_TARGET_CEDAR, /**< CEDAR GPU ISA */
CAL_TARGET_RESERVED0,
CAL_TARGET_RESERVED1,
CAL_TARGET_WRESTLER, /**< WRESTLER GPU ISA */
CAL_TARGET_CAYMAN, /**< CAYMAN GPU ISA */
CAL_TARGET_KAUAI, /** added by me **/
CAL_TARGET_BARTS, /**< BARTS GPU ISA */
CAL_TARGET_TURKS, /** added by me **/
CAL_TARGET_CAICOS /** added by me **/
} CALtarget;
}}}
=== Fields for NVIDIA GPU apps ===
MMmm:: minimum compute capability
MMmm:: maximum compute capability
=== Fields for CUDA apps ===
MMmmm:: minimum CUDA version
MMmmm:: maximum CUDA version
=== Fields for OpenCL apps (CPU or GPU) ===
:: include this for OpenCL applications
MMmm:: minimum OpenCL version
MMmm:: maximum OpenCL version
:: reject plan class if the device doesn't support double precision floating point math
=== Fields for OpenCL apps for AMD ===
MMmmrr:: minimum OpenCL driver revision
MMmmrr:: maximum OpenCL driver revision
=== Fields for !VirtualBox apps ===
:: !VirtualBox application; send only to hosts with !VirtualBox installed
MMmmrr:: minimum !VirtualBox version
MMmmrr:: maximum !VirtualBox version
MMmmrr:: exclude a particular !VirtualBox version (can have > 1 of these)
:: 64-bit application.
:: send only to hosts with enabled VM hardware acceleration.
Note: !VirtualBox apps can be multicore (set and ).
However, when sent to hosts without enabled VM hardware acceleration,
they'll be run single-core.
=== Fields for non-compute-intensive apps ===
x:: average # CPUs used. Use for non-compute-intensive apps;
for others it's calculated for you.