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!


An example configuration file is here. This file specifies the predefined plan classes.

Specification format

The specification of a plan class has the following format. All elements except <name> are optional. In version numbers, M is major, m is minor, R is release.

the name of the plan class
send only to BOINC clients of less than or equal version number.
send only to BOINC clients of greater than or equal version number.
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.
send only to hosts whose operating system version matches the given regular expression
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 here.
  • Linux and Android: the kernel version is reported as "2.6.3"; the numerical version is 20603.
max numerical OS version (see above)
a required CPU feature (such as sse3). You can include more than one.
send only to hosts with host.serialnum field that matches the given regular expression.
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

The following elements let you use a project preference to decide whether to use the app version:

the name of the tag
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

run only on hosts with at least N usable CPUs.
If N > 1, this is a multicore app. Use as many CPUs as are available, but no more than N.
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).
if specified, estimated memory usage (in Megabytes) is X + NY, where N is the number of CPUs used. Pass this to the app with a --memory_size_mb X command-line arg.

Fields for GPU apps


the GPU type (generally nvidia, amd, or intel)


the fraction of total FLOPs that are done by the CPU. This is used to calculate CPU usage and estimated FLOPS. Default 0.1.
The minimum amount of GPU RAM. This is needed because older clients report total RAM but not available RAM.
require this much available GPU RAM
scale GPU peak speed by this (default 1).
how many GPUs will be used (possibly fractional); default 1.
minimum display driver version. AMD driver versions are represented as MMmmRRRR. NVIDIA driver versions are represented as MMMmm.
maximum display driver version
CUDA application (NVIDIA)
CAL application (AMD)
you can use a project-specific preferences to let users scale the # of GPUs used. This is the tag name.
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 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.
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_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

minimum compute capability
maximum compute capability

Fields for CUDA apps

minimum CUDA version
maximum CUDA version

Fields for OpenCL apps (CPU or GPU)

include this for OpenCL applications
minimum OpenCL version
maximum OpenCL version
reject plan class if the device doesn't support double precision floating point math

Fields for OpenCL apps for AMD

minimum OpenCL driver revision
maximum OpenCL driver revision

Fields for VirtualBox apps

VirtualBox application; send only to hosts with VirtualBox installed
minimum VirtualBox version
maximum VirtualBox version
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 <min_ncpus> and <max_threads>). However, when sent to hosts without enabled VM hardware acceleration, they'll be run single-core.

Fields for Android apps

minimum Android version (e.g. 4.1.2 = 40102)
maximum Android version

Fields for non-compute-intensive apps

average # CPUs used. Use for non-compute-intensive apps; for others it's calculated for you.
Last modified 7 months ago Last modified on 07/01/16 11:48:13