Skip to content

Commit e4ffdcc

Browse files
committed
Better support precomp limit, tweak mod jobs in non-busy case
1 parent 1db019d commit e4ffdcc

File tree

2 files changed

+6
-5
lines changed

2 files changed

+6
-5
lines changed

miner.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ void Miner::_putOffsetsInSegments(uint64_t *offsets, int n_offsets) {
150150
_bucketLock.unlock();
151151
}
152152

153-
void Miner::_updateRemainders(uint32_t workDataIndex, uint64_t start_i, uint64_t end_i, bool usePrecomp) {
153+
void Miner::_updateRemainders(uint32_t workDataIndex, uint64_t start_i, uint64_t end_i) {
154154
mpz_t tar;
155155
mpz_init(tar);
156156
mpz_set(tar, _workData[workDataIndex].z_verifyTarget);
@@ -160,6 +160,7 @@ void Miner::_updateRemainders(uint32_t workDataIndex, uint64_t start_i, uint64_t
160160
const uint64_t tupleSize(_parameters.primeTupleOffset.size());
161161
if (offset_stack == NULL)
162162
offset_stack = new uint64_t[OFFSET_STACK_SIZE];
163+
uint64_t precompLimit = _parameters.modPrecompute.size() / 4;
163164

164165
for (uint64_t i(start_i) ; i < end_i ; i++) {
165166
uint64_t p(_parameters.primes[i]);
@@ -172,7 +173,7 @@ void Miner::_updateRemainders(uint32_t workDataIndex, uint64_t start_i, uint64_t
172173

173174
/* Compute the index, using precomputation speed up if available. */
174175
uint64_t index;
175-
if (usePrecomp) {
176+
if (i < precompLimit) {
176177
uint64_t cnt(_parameters.modPrecompute[i*4 + 3] >> 57),
177178
ps(p << cnt),
178179
remainder(rie_mod_1s_4p(tar->_mp_d, tar->_mp_size, ps, &_parameters.modPrecompute[i*4]));
@@ -322,7 +323,7 @@ void Miner::_verifyThread() {
322323
auto startTime(std::chrono::high_resolution_clock::now());
323324

324325
if (job.type == TYPE_MOD) {
325-
_updateRemainders(job.workDataIndex, job.modWork.start, job.modWork.end, _parameters.modPrecompute.size() >= job.modWork.end * 4);
326+
_updateRemainders(job.workDataIndex, job.modWork.start, job.modWork.end);
326327
_modDoneQueue.push_back(job.modWork.start);
327328
_modTime += std::chrono::duration_cast<decltype(_modTime)>(std::chrono::high_resolution_clock::now() - startTime);
328329
continue;
@@ -552,7 +553,7 @@ void Miner::_processOneBlock(uint32_t workDataIndex, uint8_t* sieve)
552553
int n_lowModWorkers(0);
553554

554555
bool busy(false);
555-
uint64_t incr(_nPrimes/(_parameters.threads*2));
556+
uint64_t incr(_nPrimes/(_parameters.threads*4));
556557
if (_verifyWorkQueue.size() != 0) {
557558
// Just use half the threads to reduce lock contention and allow other threads to keep processing verify tests.
558559
busy = true;

miner.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ class Miner {
138138
}
139139

140140
void _putOffsetsInSegments(uint64_t *offsets, int n_offsets);
141-
void _updateRemainders(uint32_t workDataIndex, uint64_t start_i, uint64_t end_i, bool usePrecomp);
141+
void _updateRemainders(uint32_t workDataIndex, uint64_t start_i, uint64_t end_i);
142142
void _processSieve(uint8_t *sieve, uint64_t start_i, uint64_t end_i);
143143
void _processSieve6(uint8_t *sieve, uint64_t start_i, uint64_t end_i);
144144
void _verifyThread();

0 commit comments

Comments
 (0)