@@ -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 ;
0 commit comments