7 AppPlan
David Anderson edited this page 2024-01-28 01:45:26 -08:00

Plan classes

Plan classes are policies that allow the BOINC scheduler to decide:

  • whether an application should run on a particular host;
  • what resources it will use (# of CPUs and GPUs, optionally memory usage)
  • how fast it is expected to run.

Each app version has an associated plan class; multiple app versions may have the same plan class. See how to specify an app version's plan class. Each plan class has a textual name. The default plan class (whose name is empty) is for single-threaded CPU applications.

There are a number of predefined plan classes (see below). In addition, you can define your own plan classes in two ways:

Plan class names

Plan class names encode information as follows:

  • The name includes "opencl" if and only if the app requires OpenCL libraries.
  • The name includes "cuda" if and only if the app requires CUDA libraries.
  • The name includes "ati" if and only if the app requires CAL libraries.
  • The name includes "ati" or "amd" if and only if the app uses an ATI/AMD GPU.
  • The name includes "cuda" or "nvidia" if and only if the app uses an NVIDIA GPU
  • The name includes "intel_gpu" if and only if the app uses an Intel GPU.
  • The name includes "apple_gpu" if and only if the app uses an Apple GPU.
  • The name includes "vbox" if and only if the app is a VM app and requires VirtualBox.
  • The name includes "wsl" if and only if the app uses Windows Subsystem for Linux.

This is a bit ugly, but plan class names are interpreted according to these rules in both the client and the PHP code, so we can't change this for now.

Predefined plan classes

The following plan classes are predefined:

mt

An application that can use anywhere from 1 to 64 threads, and whose speedup with N CPUs is .95N. It is passed a command-line argument --nthreads N.

nci

A non-CPU-intensive application that uses 1% of a CPU (this will cause the BOINC client 6.7+ to run it at non-idle priority).

sse3

A CPU app that requires the SSE3 CPU feature.

vbox_32

An app that runs in a 32-bit VirtualBox VM

vbox_64

An app that runs in a 64-bit VirtualBox VM

vbox_32_mt, vbox_64_mt

Multithread versions of the above.

GPU plan classes

The following plan classes for NVIDIA are pre-defined:

cuda

NVIDIA GPU, compute capability 1.0+, driver version 177.00+, 254+ MB RAM.

cuda23

Requires driver version 190.38+, 384+ MB RAM.

cuda_fermi

Requires compute capability 2.0+ and CUDA version 3.0+

opencl_nvidia_101

Requires OpenCL 1.1+ support

For ATI the situation is more complex because AMD changed the DLL names from amd* to ati* midstream; applications are linked against a particular name and will fail if it's not present.

ati

CAL version 1.0.0+, amd* DLLs

ati13amd

CAL version 1.3+, amd* DLLs

ati13ati

CAL version 1.3+, ati* DLLs

ati14

CAL version 1.4+, ati* DLLs

opencl_amd_101

OpenCL 1.1+

You can verify which DLLs your application is linked against by using Dependency Walker against your application. If your executable contains DLL names prefixed with 'amd' then your plan class will be ati or ati13amd depending on which version of the CAL SDK you are using. If the DLL names are prefixed with 'ati' then use the ati13ati or ati14 plan classes.

In all cases (NVIDIA and ATI), the application is assumed to use 1 GPU, and the CPU usage is assumed to be 0.5% the FLOPS of the GPU. If there is a choice, the scheduler will give preference to later classes, i.e. it will pick cuda23 over cuda.