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 @@ 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;