[[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/gitweb/?p=boinc-v2.git;a=blob;f=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 :: if plan class is disabled 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. wu_id :: plan class applies only to workunits with id less or equal wu_id. wu_id :: plan class applies only to workunits with id greater or equal wu_id. batch_nr :: plan class applies only to workunits from batch less or equal batch_nr. batch_nr :: plan class applies only to workunits from batch greater or equal batch_nr. 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 === N :: run only on hosts with at least N usable CPUs. N:: If N > 1, this is a multicore app. Use as many CPUs as are available, but no more than N. 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). X:: Y:: 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 === 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 Android apps === MMmmrr>:: minimum Android version (e.g. 4.1.2 = 40102) MMmmrr>:: maximum Android version === Fields for non-compute-intensive apps === x:: average # CPUs used. Use for non-compute-intensive apps; for others it's calculated for you.