But... I'm not entirely sure that I'm comparing apples to apples. We examine 2^32 middle blocks looking at all combinations of unique top and bottom strips. Each unique middle block represents 2^32 total patterns in the 2^64 space, but we can process MANY fewer by looking at only the unique top/bottom combinations (taking advantage of the insights of the algorithm). I am seeing rates as high as ~36billion patterns per second (or about 100 middle blocks every 10-15 seconds)
Here's output showing that:
Code: Select all
aharbick@Conway:~/conway/find-optimal$ ./build/find-optimal -S -r
CUDA devices available: 1
Using 1 GPU with blockSize=1024, threadsPerBlock=1024
Topology: Box/Plane (non-wrapping boundaries)
Not saving results to Google Sheets (--dont-save-results specified)
Strip search mode: blocks 0 to 4294967295
Starting strip search...
Block range: 0 to 4294967295
Total middle blocks to search: 4294967295
timestamp=1765746741, firstBlock=0, lastBlock=99, avgTopStrips=19437, avgBottomStrips=6462, avgCombinations=125578706, bestGenerations=188, bestPattern=7886365897482987432, bestPatternBin=0110110101110010000000000000000000000000001110100110011110101000, patternsPerSec=37274572809
timestamp=1765746755, firstBlock=100, lastBlock=199, avgTopStrips=22297, avgBottomStrips=6471, avgCombinations=144248285, bestGenerations=188, bestPattern=2298806134804251859, bestPatternBin=0001111111100111000000000000000000000000011111110000010011010011, patternsPerSec=36959379097
timestamp=1765746766, firstBlock=200, lastBlock=299, avgTopStrips=19794, avgBottomStrips=6480, avgCombinations=128223794, bestGenerations=188, bestPattern=8711932004188168395, bestPatternBin=0111100011100111000000000000000000000000111111100010000011001011, patternsPerSec=37459220180
timestamp=1765746778, firstBlock=300, lastBlock=399, avgTopStrips=23489, avgBottomStrips=6484, avgCombinations=152250564, bestGenerations=188, bestPattern=7886365897499741905, bestPatternBin=0110110101110010000000000000000000000001001110100000111011010001, patternsPerSec=36888274805
timestamp=1765746792, firstBlock=400, lastBlock=499, avgTopStrips=24833, avgBottomStrips=6481, avgCombinations=160919784, bestGenerations=189, bestPattern=13148540587114890728, bestPatternBin=1011011001111001000000000000000000000001110010100000010111101000, patternsPerSec=36472557334
timestamp=1765746803, firstBlock=500, lastBlock=599, avgTopStrips=20727, avgBottomStrips=6496, avgCombinations=134559967, bestGenerations=188, bestPattern=7886365897516410491, bestPatternBin=0110110101110010000000000000000000000010001110000110011001111011, patternsPerSec=36980986166
Whereas my initial solution works against 2^61 and is seeing about 8+billion patterns/sec (~9years)
Further I observe that some blocks have MANY more unique top and bottom strips. I found the middle block that is part of my current known longest generation (213) and I tested a 500 block range that included that to compare to the initial blocks seen above:
Code: Select all
aharbick@Conway:~/conway/find-optimal$ ./build/find-optimal -Srange:72401849:72402349 -r
CUDA devices available: 1
Using 1 GPU with blockSize=1024, threadsPerBlock=1024
Topology: Box/Plane (non-wrapping boundaries)
Not saving results to Google Sheets (--dont-save-results specified)
Strip search mode: blocks 72401849 to 72402349
Starting strip search...
Block range: 72401849 to 72402349
Total middle blocks to search: 500
timestamp=1765746407, firstBlock=72401849, lastBlock=72401948, avgTopStrips=18052, avgBottomStrips=26600, avgCombinations=475893588, bestGenerations=199, bestPattern=7600955016023463364, bestPatternBin=0110100101111100000001000101000011000011110011010101010111000100, patternsPerSec=9472173625
timestamp=1765746453, firstBlock=72401949, lastBlock=72402048, avgTopStrips=22574, avgBottomStrips=25637, avgCombinations=578134435, bestGenerations=201, bestPattern=1547554166893400372, bestPatternBin=0001010101111010000001000101000011000100010110110101000100110100, patternsPerSec=9809096891
timestamp=1765746501, firstBlock=72402049, lastBlock=72402148, avgTopStrips=21963, avgBottomStrips=25715, avgCombinations=563088457, bestGenerations=213, bestPattern=1439186300866781946, bestPatternBin=0001001111111001000001000101000011000100110001011110001011111010, patternsPerSec=9344664109
timestamp=1765746553, firstBlock=72402149, lastBlock=72402248, avgTopStrips=21753, avgBottomStrips=25837, avgCombinations=561374743, bestGenerations=213, bestPattern=1439186300868846330, bestPatternBin=0001001111111001000001000101000011000100111001010110001011111010, patternsPerSec=9222172641
timestamp=1765746601, firstBlock=72402249, lastBlock=72402348, avgTopStrips=23283, avgBottomStrips=25895, avgCombinations=602453320, bestGenerations=198, bestPattern=13157552531296494602, bestPatternBin=1011011010011001000001000101000011000101011110000010010000001010, patternsPerSec=9367637507
I think it's hard to know what the "typical" number of unique top/bottom strip combinations so it's hard to know what the average would be to predict how long the whole processing will take.
Here's the branch that I used to build the "strip search"... I would love to hear if you think I didn't get it right. https://github.com/aharbick/conway/compare/strip_search