- scheduler: add plan class for CUDA 2.3

svn path=/trunk/boinc/; revision=18804
This commit is contained in:
David Anderson 2009-08-03 21:30:19 +00:00
parent b932711a80
commit f163897d8a
5 changed files with 53 additions and 12 deletions

View File

@ -6729,3 +6729,10 @@ Rom 2 Aug 2009
main.cpp, .h
net_stats.cpp
sysmon_win.cpp, .h
David 3 Aug 2009
- scheduler: add plan class for CUDA 2.3
sched/
sched_customize.cpp,h
sched_version.cpp

View File

@ -1,6 +1,11 @@
<?
$project_news = array(
array("August 3, 2009",
"Intel (in cooperation with GridRepublic and BOINC) announces
<a href=http://apps.facebook.com/processors/new.php>Progress Thru Processors</a>,
a Facebook application that makes BOINC participation simpler and more sociable."
),
array("July 30, 2009",
"<a href=http://event.twgrid.org/isgc2009/asiaathome/wiki/index.php/Main_Page#Workshop_Schedule_and_Presentations>Videos of the talks at the recent Asia@home workshop in Taiwan</a> are now online."
),

View File

@ -95,7 +95,7 @@ int app_plan(SCHEDULER_REQUEST& sreq, char* plan_class, HOST_USAGE& hu) {
);
}
return 0;
} else if (!strcmp(plan_class, "cuda")) {
} else if (strstr(plan_class, "cuda")) {
// the following is for an app that uses a CUDA GPU
//
COPROC_CUDA* cp = (COPROC_CUDA*)sreq.coprocs.lookup("CUDA");
@ -107,16 +107,36 @@ int app_plan(SCHEDULER_REQUEST& sreq, char* plan_class, HOST_USAGE& hu) {
}
return PLAN_REJECT_CUDA_NO_DEVICE;
}
// check compute capability
//
int v = (cp->prop.major)*100 + cp->prop.minor;
if (v < 100) {
if (config.debug_version_select) {
log_messages.printf(MSG_NORMAL,
"[version] CUDA version %d < 1.0\n", v
"[version] Compute capability %d < 1.0\n", v
);
}
return PLAN_REJECT_CUDA_VERSION;
return PLAN_REJECT_NVIDIA_COMPUTE_CAPABILITY;
}
// for CUDA 2.3, we need to check the CUDA RT version.
// Old BOINC clients report display driver version;
// newer ones report CUDA RT version
//
if (!strcmp(plan_class, "cuda23")) {
if (cp->cuda_version) {
if (cp->cuda_version < 2030) {
return PLAN_REJECT_CUDA_VERSION;
}
} else if (cp->display_driver_version) {
if (cp->display_driver_version < PLAN_CUDA_MIN_DRIVER_VERSION) {
return PLAN_REJECT_CUDA_VERSION;
}
} else {
return PLAN_REJECT_CUDA_VERSION;
}
} else {
if (cp->display_driver_version && cp->display_driver_version < PLAN_CUDA_MIN_DRIVER_VERSION) {
if (config.debug_version_select) {
log_messages.printf(MSG_NORMAL,
@ -126,6 +146,7 @@ int app_plan(SCHEDULER_REQUEST& sreq, char* plan_class, HOST_USAGE& hu) {
}
return PLAN_REJECT_NVIDIA_DRIVER_VERSION;
}
}
if (cp->prop.dtotalGlobalMem < PLAN_CUDA_MIN_RAM) {
if (config.debug_version_select) {

View File

@ -28,8 +28,10 @@
#define PLAN_REJECT_UNKNOWN 7
#define PLAN_REJECT_INSUFFICIENT_CPUS 8
#define PLAN_REJECT_CPU_FEATURE 9
#define PLAN_REJECT_NVIDIA_COMPUTE_CAPABILITY 10
#define PLAN_CUDA_MIN_DRIVER_VERSION 17700
#define PLAN_CUDA23_MIN_DRIVER_VERSION 19038
#define PLAN_CUDA_MIN_RAM (254*1024*1024)
extern bool wu_is_infeasible_custom(WORKUNIT&, APP&, BEST_APP_VERSION&);

View File

@ -322,10 +322,16 @@ BEST_APP_VERSION* get_app_version(WORKUNIT& wu, bool check_req) {
switch (app_plan_reject) {
case PLAN_REJECT_CUDA_NO_DEVICE:
p = "Your computer has no NVIDIA GPU"; break;
case PLAN_REJECT_CUDA_VERSION:
case PLAN_REJECT_NVIDIA_COMPUTE_CAPABILITY:
p = "Your GPU lacks the needed features"; break;
case PLAN_REJECT_CUDA_VERSION:
sprintf(buf, "NVIDIA driver version %d or later needed",
PLAN_CUDA23_MIN_DRIVER_VERSION
);
p = buf;
break;
case PLAN_REJECT_NVIDIA_DRIVER_VERSION:
sprintf(buf, "driver version %d or later needed",
sprintf(buf, "NVIDIA driver version %d or later needed",
PLAN_CUDA_MIN_DRIVER_VERSION
);
p = buf;