It used to be 64 (local size) * 4096 (global multiplier). Miners
reported a lot better results with those old defaults and as such we are
bringing them back.
After reports from many miners the whole auto adjusting idea may or may not
work depending the user's hardware. A much safer default value is 0 (to
disable auto adjustment)
- Now the user can also set the local work size (workgroup size)
- In addition the global work size is specified in the command line only
as a multiplier of the local work size.
- Adding an argument to specify OpenCL global work size.
- Adding an argument to specify milliseconds per global work
size (msPerBatch). If this is 0 then no adjustment of the global work
size happens.
Some EthashAux functions are protected by mutexes. These mutexes are
normal members of the EthashAux class which itself is a singleton. It
can happen that multiple threads will get inside the singleton creation
`get()` functions when requesting a lock, but the lock will not be
acquired due to the singleton not yet existing.
This leads to multiple threads going in the same code and causing double
free corruption.
Making the mutexes static members of the singleton should hopefully
address the issue
Two blocks are mined on the same parent in quick succession. First gets
imported alone, chain changes but there's another "ready" so mining
doesn't get rejigged. When the second gets imported soon after, it
doesn't change the chain and so mining still doesn't restart.
- Removed the `--force-single-chunk` option
- Always attempt to create a single chunk DAG buffer in the GPU. If that
fails then and only then switch to multiple chunks.
This change is motivated by the fact that many GPUs appear to be able to
actually allocate a lot more than what CL_DEVICE_MAX_MEM_ALLOC_SIZE
returns which proves that the results of querying the CL API on this
basically can't be trusted.