Since I use the negation map then one might end up in fruitless cycles.
My solver will try to detect them if they are small (max 256 points) and restart the current worm. But if they are more that 256 points the solver wont detect them.
These fruitless cycles will not give us anything and will only use cpu and reduce speed.
On my solver I print out some info in the status bar. You will see something like this:
LowDCnt: 146 (1/2048) W:123 T:5000
The LowDCnt is the lowest distinguished point count from any worm.
The (1/2048) is how many worms that have this count and the W:123 is which worm that have this count. T:5000 is the time used on the worm with the lowest count but will be restarted if the solver is stoped etc.
Now say that W:123 will go into a fruitless cycle then the LowDCnt will stay at 146 for all time and this is bad.
What I do from time to time is take a screen shot of the solver and after some days I compare the screen shot with the solver. If W:123 is the same and LowDCnt is unchanged I restart the worm. I have not encounter this yet but perhaps all of you running can do the same check.
Now if you see this then I would really like to get a copy of your save state file and you should also now stop the solver and delete the savestate and restart. That is the easy way to get out of a fruitless cycle.
If you wonder what a worm is then because of the cost of a field inversion I used the Montgomery trick to reduce them. To do so I have to split the work so that I can update many points at the same time. This is where name name worm comes from.
On a dual core HT cpu you will see 1024 worms and on a quad core HT you will see 2048 and so on. So on a quad core 2048 points (worms) are updated simultaneously to get the max speed. When a point is updated (a new point is found) then you can look at it as if it's crawling around if the group and when two of these worms collide we have a solution. Of course they need to crawl to the nearest distinguished point but they will both follow the same path when they collide coz of the random walk function f().
