Post
Topic
Board Mining (Altcoins)
Re: cpuminer-opt 3.7.6 only using 32 CPUs on a 48 CPU system?
by
joblo
on 16/12/2017, 02:01:13 UTC


Tried 3.7.5 vs 3.7.6 - 3.7.5 runs on all CPUs, 3.7.6 only works on 32 CPUs and gives lower hash rates.

Both versions start in the same way with -D:

Code:
[2017-12-16 01:03:56] Starting Stratum on stratum+tcp://ip:port
[2017-12-16 01:03:56] Binding thread 0 to cpu 0 (mask 1)
[2017-12-16 01:03:56] Binding thread 1 to cpu 1 (mask 2)
[2017-12-16 01:03:56] Binding thread 2 to cpu 2 (mask 4)
[2017-12-16 01:03:56] Binding thread 3 to cpu 3 (mask 8)
[2017-12-16 01:03:56] Binding thread 4 to cpu 4 (mask 10)
[2017-12-16 01:03:56] Binding thread 5 to cpu 5 (mask 20)
[2017-12-16 01:03:56] Binding thread 6 to cpu 6 (mask 40)
[2017-12-16 01:03:56] Binding thread 7 to cpu 7 (mask 80)
[2017-12-16 01:03:56] Binding thread 8 to cpu 8 (mask 100)
[2017-12-16 01:03:56] Binding thread 9 to cpu 9 (mask 200)
[2017-12-16 01:03:56] Binding thread 10 to cpu 10 (mask 400)
[2017-12-16 01:03:56] Binding thread 11 to cpu 11 (mask 800)
[2017-12-16 01:03:56] Binding thread 12 to cpu 12 (mask 1000)
[2017-12-16 01:03:56] Binding thread 13 to cpu 13 (mask 2000)
[2017-12-16 01:03:56] Binding thread 14 to cpu 14 (mask 4000)
[2017-12-16 01:03:56] Binding thread 15 to cpu 15 (mask 8000)
[2017-12-16 01:03:56] Binding thread 16 to cpu 16 (mask 10000)
[2017-12-16 01:03:56] Binding thread 17 to cpu 17 (mask 20000)
[2017-12-16 01:03:56] Binding thread 18 to cpu 18 (mask 40000)
[2017-12-16 01:03:56] Binding thread 19 to cpu 19 (mask 80000)
[2017-12-16 01:03:56] Binding thread 20 to cpu 20 (mask 100000)
[2017-12-16 01:03:56] Binding thread 21 to cpu 21 (mask 200000)
[2017-12-16 01:03:56] Binding thread 22 to cpu 22 (mask 400000)
[2017-12-16 01:03:56] Binding thread 23 to cpu 23 (mask 800000)
[2017-12-16 01:03:56] Binding thread 24 to cpu 24 (mask 1000000)
[2017-12-16 01:03:56] Binding thread 25 to cpu 25 (mask 2000000)
[2017-12-16 01:03:56] Binding thread 26 to cpu 26 (mask 4000000)
[2017-12-16 01:03:56] Binding thread 27 to cpu 27 (mask 8000000)
[2017-12-16 01:03:56] Binding thread 28 to cpu 28 (mask 10000000)
[2017-12-16 01:03:56] Binding thread 29 to cpu 29 (mask 20000000)
[2017-12-16 01:03:56] Binding thread 30 to cpu 30 (mask 40000000)
[2017-12-16 01:03:56] Binding thread 31 to cpu 31 (mask 80000000)
[2017-12-16 01:03:56] Binding thread 32 to cpu 32 (mask 1)
[2017-12-16 01:03:56] Binding thread 33 to cpu 33 (mask 2)
[2017-12-16 01:03:56] Binding thread 34 to cpu 34 (mask 4)
[2017-12-16 01:03:56] Binding thread 35 to cpu 35 (mask 8)
[2017-12-16 01:03:56] Binding thread 36 to cpu 36 (mask 10)
[2017-12-16 01:03:56] Binding thread 37 to cpu 37 (mask 20)
[2017-12-16 01:03:56] Binding thread 38 to cpu 38 (mask 40)
[2017-12-16 01:03:56] Binding thread 39 to cpu 39 (mask 80)
[2017-12-16 01:03:56] Binding thread 40 to cpu 40 (mask 100)
[2017-12-16 01:03:56] Binding thread 41 to cpu 41 (mask 200)
[2017-12-16 01:03:56] Binding thread 42 to cpu 42 (mask 400)
[2017-12-16 01:03:56] Binding thread 43 to cpu 43 (mask 800)
[2017-12-16 01:03:56] Binding thread 44 to cpu 44 (mask 1000)
[2017-12-16 01:03:56] Binding thread 45 to cpu 45 (mask 2000)
[2017-12-16 01:03:56] Binding thread 46 to cpu 46 (mask 4000)
[2017-12-16 01:03:56] 48 miner threads started, using 'lyra2z' algorithm.
[2017-12-16 01:03:56] Binding thread 47 to cpu 47 (mask 8000)
[2017-12-16 01:03:57] Stratum session id: deadbeefcafebabef76c160000000000
[2017-12-16 01:03:57] Stratum difficulty set to 10
[2017-12-16 01:03:58] Stratum difficulty set to 5
[2017-12-16 01:03:58] DEBUG: job_id='1e40' extranonce2=00000000 ntime=5a3470e6
[2017-12-16 01:03:58] Stratum difficulty set to 10 (0.03906)
(...)

Are you sure? Which version is this? The mask changed from thread 32 up, yet the debug output
says it's binding to the correct CPU for threads 32 and up

Quote
Quote
I've reviewed the changes I made for 64 CPU support and they should only have an effect when
there are more than 64 vcores. It's as simple as if num_cpus > 64 do something different else
do as usual.
The issue must be somewhere in cpu-miner.c.

If we copy cpu-miner.c from v3.7.5.tar.gz to 3.7.6 and compile it, all 48 CPUs are used.

If we copy cpu-miner.c from v3.7.6.tar.gz to 3.7.5 and compile it, only 32 CPUs are used.

Are you sure the output is exactly the same? Which version is this? The mask changed from thread 32 up,
yet the debug output says it's binding to the correct CPU.

Since I have no way to test this I'm relying on you. Without some kind of clue my only choice is to backout
the change that added support for more than 64 CPUs.

Code:
        applog( LOG_DEBUG, "Binding thread %d to cpu %d (mask %x)",
                   thr_id, thr_id % num_cpus, ( 1 << (thr_id % num_cpus) ) );
         affine_to_cpu_mask( thr_id, 1 << (thr_id % num_cpus) );

Something isn't making sense. The mask is rolling over at 32. The only way that happens is if num_cpus == 32.

Can you try with a 48 bit affinity mask to see what that does?
Code:
--cpu-affinity 0xffffffffffff