Version 26 (modified by 12 years ago) (diff) | ,
---|
Plan classes
Plan classes is a mechanism that lets the scheduler decide, using project-supplied logic:
- whether an application should run on a particular host;
- what resources it will use;
- how fast it is expected to run.
It works as follows.
An app version has an associated plan_class: a character string, possibly empty. See how to specify an app version's plan class.
When deciding whether to send a job to a host, the scheduler examines all latest-version app_versions for the platform, calls app_plan() for each, and selects the one for which projected_flops is greatest.
If gpu_ram is nonzero, the BOINC client (6.10.25+) won't start the app unless that much RAM is available on the allocated GPU.
This defines the following plan classes:
- 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.
- vbox32
- An app that runs in a 32-bit VirtualBox VM
- vbox64
- An app that runs in a 64-bit VirtualBox VM
Each coprocessor application has an associated plan class which determines the hardware and software resources that are needed to run the application.
NOTE: plan classes for AMD GPUs must contain the substring 'ati'; plan classes for NVIDIA GPUs much contain either 'nvidia' or 'cuda' as a substring.
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_ati_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.
Once you have chosen a plan class for your executable, create an app version, specifying its plan class.
Note: plan classes containing the substrings 'nvidia', 'cuda', and 'ati' are reserved for GPU applications.