Firstly, we’ve greatly sped up the process of seed generation. It’s powered by NumPy, and running orders of magnitude faster now. The only problem introduced with this optimization, is that it take 2x more memory during generation process. So, right now, we can only generate fields taking no more than half of your available RAM. In fact, it is much better option than waiting for hours in hope for seed fitting in your whole memory.
Secondly, we’ve fixed several nasty bugs with direct buffers/variables assignments. It is now working as expected, and you can safely assign directly to the buffer/variable, it will produce the correct code without errors.
We’ve also checked the correctness of non-uniform buffers interactions. For that, we wrote a specific model called Shifting Sands. Despite of a loud name, it’s just shifting the whole board in a constant direction via buffers. As a result, we can test if buffers are working correctly in every direction. Surprisingly, they are working as expected, so we’ve just left the new model as another one example. It’s also added to the official benchmark.
In background, we’ve done a good job in refactoring, fixing most of pylint issues and making object model more consistent. Only 2 pylint categories were disabled in the process: 1)
no-member, since it can not detect
CellularAutomaton members generated by the metaclass, 2)
too-few-public-methods, because experiment classes are holding “data” only, which allows them to be easily inherited.
We have enough issues for another optimization/bugfix release, but not decided yet, should we handle them in 0.1.2, or dive right into 0.2 with all new features. It will be announced later after new release planning is done.
Traditionally, there are performance results, in gigacells per second:
|GPU||Conway’s Life||Shifting Sands|
|GTX TITAN||3.31 Gcells/s||3.43 Gcells/s|
|GTX 1050 Ti||1.82 Gcells/s||2.02 Gcells/s|
|GTX 750 Ti||1.19 Gcells/s||1.32 Gcells/s|
|GTX 860M||1.05 Gcells/s||1.13 Gcells/s|