Add application-clock NVML-based support for Quadro GPUs
authorMark Abraham <mark.j.abraham@gmail.com>
Fri, 24 Apr 2015 12:50:35 +0000 (14:50 +0200)
committerGerrit Code Review <gerrit@gerrit.gromacs.org>
Tue, 28 Apr 2015 10:02:47 +0000 (12:02 +0200)
Also minor refactoring to eliminate a small amount of duplication that
would have become larger and harder to understand.

Change-Id: I14fe411eff549216e71c684d4743a36ff3bd576a

src/gromacs/gmxlib/gpu_utils/gpu_utils.cu

index 31c7f910cac272734d78304e4f6ef9b40b067914..de1682da1e9bb33d9cbbe75365d54a792ffd41ee 100644 (file)
@@ -284,21 +284,24 @@ static bool addNVMLDeviceId(cuda_dev_info* cuda_dev)
  */
 static gmx_bool init_gpu_application_clocks(FILE gmx_unused *fplog, int gmx_unused gpuid, const gmx_gpu_info_t gmx_unused *gpu_info)
 {
+    const cudaDeviceProp *prop                        = &gpu_info->cuda_dev[gpuid].prop;
+    int                   cuda_version_number         = prop->major * 10 + prop->minor;
+    gmx_bool              bGpuCanUseApplicationClocks =
+        ((0 == gmx_wcmatch("*Tesla*", prop->name) && cuda_version_number >= 35 ) ||
+         (0 == gmx_wcmatch("*Quadro*", prop->name) && cuda_version_number >= 52 ));
 #ifndef HAVE_NVML
-    if ( (gpu_info->cuda_dev[gpuid].prop.major * 10 + gpu_info->cuda_dev[gpuid].prop.minor) >= 35 &&
-         (0 == gmx_wcmatch( "*Tesla*", gpu_info->cuda_dev[gpuid].prop.name )))
+    if (bGpuCanUseApplicationClocks)
     {
         md_print_warn( fplog, "NVML support was not found in CUDA library %d.%d, so your GPU of type %s cannot use application clock support to improve performance.\n",
-                       gpu_info->cuda_dev[gpuid].prop.major,
-                       gpu_info->cuda_dev[gpuid].prop.minor,
-                       gpu_info->cuda_dev[gpuid].prop.name );
+                       prop->major,
+                       prop->minor,
+                       prop->name );
     }
     return true;
 #else /* HAVE_NVML defined */
     nvmlReturn_t nvml_stat = NVML_SUCCESS;
     char        *env;
-    if (!( (gpu_info->cuda_dev[gpuid].prop.major * 10 + gpu_info->cuda_dev[gpuid].prop.minor) >= 35 &&
-           (0 == gmx_wcmatch( "*Tesla*", gpu_info->cuda_dev[gpuid].prop.name ))))
+    if (!bGpuCanUseApplicationClocks)
     {
         return true;
     }