Updated algorithm used to automatically select an ideal --scrypt-tmto value for NV
authorjsteube <jens.steube@gmail.com>
Wed, 23 Dec 2015 10:24:41 +0000 (11:24 +0100)
committerjsteube <jens.steube@gmail.com>
Wed, 23 Dec 2015 10:24:41 +0000 (11:24 +0100)
src/oclHashcat.c

index c29aa4e..cb02675 100644 (file)
@@ -12960,8 +12960,23 @@ int main (int argc, char **argv)
 
       if ((hash_mode == 8900) || (hash_mode == 9300))
       {
-        #define SHADER_PER_MP 8
-        #define WAVEFRONTS    64
+        uint m = 0;
+
+        if (vendor_id == VENDOR_ID_NV)
+        {
+          #define NV_SHADER_PER_MP 32
+          #define NV_WARPS         32
+
+          m = NV_SHADER_PER_MP * NV_WARPS;
+        }
+
+        else if (vendor_id == VENDOR_ID_AMD)
+        {
+          #define AMD_SHADER_PER_MP 8
+          #define AMD_WAVEFRONTS    64
+
+          m = AMD_SHADER_PER_MP * AMD_WAVEFRONTS;
+        }
 
         uint tmto_start = 2;
         uint tmto_stop  = 1024;
@@ -12980,14 +12995,15 @@ int main (int argc, char **argv)
 
           size_scryptV /= tmto;
 
-          size_scryptV *= gpu_processors * WAVEFRONTS * SHADER_PER_MP;
+          size_scryptV *= gpu_processors * m;
 
-          if (size_scryptV > (device_param->gpu_maxmem_alloc / 2)) continue;
+//          if (size_scryptV > (device_param->gpu_maxmem_alloc / 2)) continue;
+          if (size_scryptV > device_param->gpu_maxmem_alloc) continue;
 
           for (uint salts_pos = 0; salts_pos < data.salts_cnt; salts_pos++)
           {
             data.salts_buf[salts_pos].scrypt_tmto = tmto;
-            data.salts_buf[salts_pos].scrypt_phy  = gpu_processors * WAVEFRONTS * SHADER_PER_MP;
+            data.salts_buf[salts_pos].scrypt_phy  = gpu_processors * m;
           }
 
           break;