Use CL_DEVICE_PROFILING_TIMER_RESOLUTION per-device value in total_time calculations
authorGabriele 'matrix' Gristina <gm4tr1x@users.noreply.github.com>
Tue, 9 Feb 2016 20:48:18 +0000 (21:48 +0100)
committerGabriele 'matrix' Gristina <gm4tr1x@users.noreply.github.com>
Tue, 9 Feb 2016 20:48:18 +0000 (21:48 +0100)
include/types.h
src/oclHashcat.c

index 34451da..00ead97 100644 (file)
@@ -847,6 +847,7 @@ struct __hc_device_param
   u64     device_maxmem_alloc;
   u64     device_global_mem;
   u32     device_maxclock_frequency;
+  u64     device_timer_resolution;
 
   uint    vector_width;
 
index 15c2b12..7b39449 100644 (file)
@@ -797,7 +797,7 @@ void status_display_automat ()
     hc_clGetEventProfilingInfo (data.ocl, device_param->event, CL_PROFILING_COMMAND_START, sizeof (time_start), &time_start, NULL);
     hc_clGetEventProfilingInfo (data.ocl, device_param->event, CL_PROFILING_COMMAND_END,   sizeof (time_end),   &time_end,   NULL);
 
-    const double total_time = (time_end - time_start) / 1000000.0;
+    const double total_time = ((double)(time_end - time_start) * (double)(device_param->device_timer_resolution)) / 1000000.0;
 
     fprintf (out, "%f\t", total_time);
   }
@@ -12579,6 +12579,14 @@ int main (int argc, char **argv)
 
         device_param->device_maxclock_frequency = device_maxclock_frequency;
 
+        // device_timer_resolution
+
+        cl_ulong device_timer_resolution;
+
+        hc_clGetDeviceInfo (data.ocl, device_param->device, CL_DEVICE_PROFILING_TIMER_RESOLUTION, sizeof (device_timer_resolution), &device_timer_resolution, NULL);
+
+        device_param->device_timer_resolution = device_timer_resolution;
+
         // skipped
 
         const u32 skipped1 = ((devices_filter      & (1 << device_id)) == 0);