diff --git a/client/gpu_detect.cpp b/client/gpu_detect.cpp index f17380f352..0c200d2fb9 100644 --- a/client/gpu_detect.cpp +++ b/client/gpu_detect.cpp @@ -200,6 +200,14 @@ void COPROCS::correlate_gpus( "CUDA: NVIDIA GPU %d (not used): %s", nvidia_gpus[i].device_num, buf ); + + if ((nvidia_gpus[i].cuda_version >= 6050) && + nvidia_gpus[i].prop.major < 2) { + msg_printf(NULL, MSG_USER_ALERT, "NVIDIA GPU %d: %s %s", + nvidia_gpus[i].device_num, nvidia_gpus[i].prop.name, + _("cannot be used for CUDA or OpenCL computation with CUDA driver 6.5 or later") + ); + } break; } descs.push_back(string(buf2)); diff --git a/client/gpu_nvidia.cpp b/client/gpu_nvidia.cpp index 9f20296a45..5778df84d9 100644 --- a/client/gpu_nvidia.cpp +++ b/client/gpu_nvidia.cpp @@ -441,6 +441,11 @@ void COPROC_NVIDIA::correlate( bool first = true; for (i=0; i= 6050) && nvidia_gpus[i].prop.major < 2) { + // Can't use GPUs with compute capability < 2 with CUDA drivers >= 6.5.x + nvidia_gpus[i].is_used = COPROC_UNUSED; + continue; + } if (first) { *this = nvidia_gpus[i]; first = false; @@ -460,6 +465,9 @@ void COPROC_NVIDIA::correlate( nvidia_gpus[i].is_used = COPROC_UNUSED; } else if (this->have_cuda && !nvidia_gpus[i].have_cuda) { nvidia_gpus[i].is_used = COPROC_UNUSED; + } else if (nvidia_gpus[i].is_used == COPROC_UNUSED) { + // Can't use GPUs with compute capability < 2 with CUDA drivers >= 6.5.x + continue; } else if (use_all || !nvidia_compare(nvidia_gpus[i], *this, true)) { device_nums[count] = nvidia_gpus[i].device_num; pci_infos[count] = nvidia_gpus[i].pci_info;