Properly detect number of cores on WIN32
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
diff --git a/main.c b/main.c
index e4ee84e..fb072fe 100644
--- a/main.c
+++ b/main.c
@@ -4165,12 +4165,34 @@ int main (int argc, char *argv[])
if (unlikely(!current_hash))
quit (1, "main OOM");
-#ifdef WIN32
- opt_n_threads = num_processors = 1;
-#else
- num_processors = sysconf(_SC_NPROCESSORS_ONLN);
+ // Reckon number of cores in the box
+ #if defined(WIN32)
+
+ DWORD system_am;
+ DWORD process_am;
+ BOOL ok = GetProcessAffinityMask(
+ GetCurrentProcess(),
+ &system_am,
+ &process_am
+ );
+ if (!ok) {
+ applog(LOG_ERR, "couldn't figure out number of processors :(");
+ num_processors = 1;
+ } else {
+ size_t n = 32;
+ num_processors = 0;
+ while (n--)
+ if (process_am & (1<<n))
+ ++num_processors;
+ }
+
+ #else
+
+ num_processors = sysconf(_SC_NPROCESSORS_ONLN);
+
+ #endif /* !WIN32 */
+
opt_n_threads = num_processors;
-#endif /* !WIN32 */
#ifdef HAVE_OPENCL
for (i = 0; i < 16; i++)