diff --git a/checkin_notes b/checkin_notes
index 85fca7bbbe..80e2df9085 100644
--- a/checkin_notes
+++ b/checkin_notes
@@ -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
diff --git a/doc/boinc_news.php b/doc/boinc_news.php
index 8da0c01f10..b1a445c751 100644
--- a/doc/boinc_news.php
+++ b/doc/boinc_news.php
@@ -1,6 +1,11 @@
$project_news = array(
+array("August 3, 2009",
+ "Intel (in cooperation with GridRepublic and BOINC) announces
+ Progress Thru Processors,
+ a Facebook application that makes BOINC participation simpler and more sociable."
+),
array("July 30, 2009",
"Videos of the talks at the recent Asia@home workshop in Taiwan are now online."
),
diff --git a/sched/sched_customize.cpp b/sched/sched_customize.cpp
index 3618f6731e..c18b62bbb2 100644
--- a/sched/sched_customize.cpp
+++ b/sched/sched_customize.cpp
@@ -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,24 +107,45 @@ 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;
}
- if (cp->display_driver_version && cp->display_driver_version < PLAN_CUDA_MIN_DRIVER_VERSION) {
- if (config.debug_version_select) {
- log_messages.printf(MSG_NORMAL,
- "[version] NVIDIA driver version %d < PLAN_CUDA_MIN_DRIVER_VERSION\n",
- cp->display_driver_version
- );
+ // 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,
+ "[version] NVIDIA driver version %d < PLAN_CUDA_MIN_DRIVER_VERSION\n",
+ cp->display_driver_version
+ );
+ }
+ return PLAN_REJECT_NVIDIA_DRIVER_VERSION;
}
- return PLAN_REJECT_NVIDIA_DRIVER_VERSION;
}
if (cp->prop.dtotalGlobalMem < PLAN_CUDA_MIN_RAM) {
diff --git a/sched/sched_customize.h b/sched/sched_customize.h
index 9737994d20..0d4d539149 100644
--- a/sched/sched_customize.h
+++ b/sched/sched_customize.h
@@ -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&);
diff --git a/sched/sched_version.cpp b/sched/sched_version.cpp
index 3423dde26e..a6ee7d4646 100644
--- a/sched/sched_version.cpp
+++ b/sched/sched_version.cpp
@@ -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;