// This file is part of BOINC.
// http://boinc.berkeley.edu
// Copyright (C) 2012 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
// as published by the Free Software Foundation,
// either version 3 of the License, or (at your option) any later version.
//
// BOINC is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see .
// configurable app plan functions.
// see https://boinc.berkeley.edu/trac/wiki/AppPlanConfig
#include
#include
#include
// if you add anything here, initialize if in the constructor
//
struct PLAN_CLASS_SPEC {
char name[256];
char gpu_type[256];
bool cuda;
bool cal;
bool opencl;
bool virtualbox;
bool is64bit;
std::vector cpu_features;
double min_ncpus;
int max_threads;
double mem_usage_base;
double mem_usage_per_cpu;
bool nthreads_cmdline;
double projected_flops_scale;
bool have_os_regex;
regex_t os_regex;
bool have_cpu_vendor_regex;
regex_t cpu_vendor_regex;
bool have_cpu_model_regex;
regex_t cpu_model_regex;
double min_os_version;
// Win versions can be 9 digits; may as well be safe
double max_os_version;
int min_android_version;
int max_android_version;
char project_prefs_tag[256];
bool have_project_prefs_regex;
regex_t project_prefs_regex;
bool project_prefs_default_true;
double avg_ncpus;
int min_core_client_version;
int max_core_client_version;
// for non-compute-intensive, or override for GPU apps
bool have_host_summary_regex;
regex_t host_summary_regex;
int user_id;
double infeasible_random;
int min_wu_id;
int max_wu_id;
int min_batch;
int max_batch;
// GPU apps
//
double cpu_frac;
double min_gpu_ram_mb;
// for older clients that don't report available RAM
double gpu_ram_used_mb;
double gpu_peak_flops_scale;
double ngpus;
int min_driver_version;
int max_driver_version;
char gpu_utilization_tag[256];
// the project prefs tag for user-supplied gpu_utilization factor
double min_gpu_peak_flops;
double max_gpu_peak_flops;
// AMD/ATI apps
//
bool need_ati_libs;
bool need_amd_libs;
// need DLLs w/ ATI or AMD name (default: neither)
int min_cal_target;
int max_cal_target;
bool without_opencl; // restrict to CAL only GPUs
// NVIDIA apps
//
int min_nvidia_compcap;
int max_nvidia_compcap;
// CUDA apps
//
int min_cuda_version;
int max_cuda_version;
// OpenCL apps
//
int min_opencl_version;
int max_opencl_version;
int min_opencl_driver_revision;
int max_opencl_driver_revision;
bool double_precision_fp;
// VirtualBox apps
//
int min_vbox_version;
int max_vbox_version;
vector exclude_vbox_version;
bool vm_accel_required;
int parse(XML_PARSER&);
bool opencl_check(OPENCL_DEVICE_PROP&);
bool check(SCHEDULER_REQUEST& sreq, HOST_USAGE& hu, const WORKUNIT* wu);
PLAN_CLASS_SPEC();
};
struct PLAN_CLASS_SPECS {
std::vector classes;
int parse_file(const char*);
int parse_specs(FILE*);
bool check(SCHEDULER_REQUEST& sreq, char* plan_class, HOST_USAGE& hu, const WORKUNIT* wu);
bool wu_is_infeasible(char* plan_class, const WORKUNIT* wu);
PLAN_CLASS_SPECS(){};
};