Hi Paddy
I'm an undergraduate working on a research project at the San Diego Super Computing Center. The project's goal is to create engaging and informative projects on educating children about parallel computing, using Raspberry Pis as a teaching tool. My research coordinator and I have been trying figure out ways to parallelize Conway's Game of Life while off-loading vector code onto the Pis' GPU to improve efficiency, when we stumbled across your implementation using pi3d.
I would like to use your implementation, if that is acceptable, but I do not completely understand the code. From what I've reasoned so far, I can see that Conway.py is the staging area where you set up the display, shader, texture, and shape objects/arrays and draw them to the screen. I believe the conway.fs shader is where you perform the calculations on each pixel's evolution, and I am not to sure what the conway.vs shader is doing. Please correct me if I am misguided.
In order to parallelize Conway's, we are letting each Pi have it's own grid, with cells in it, and each Pi would display it's grid on 1 out of a 15 screen display. Each calculation on a single grid would pretty much be local until the edge cells need to be calculated, which requires the state of the corresponding edge cells belonging to the other Pis' grid. In this case we use an MPI request to receive 1d arrays of the edge cells belonging to the other Pis.
In a more vanilla implementation of Conway's, each Pi's grid would be a 2d matrix which I would take chunks of and pass them into the MPI comm channel when needed. But in your implementation, and after reading the documentation, I am assuming the grid would correspond to the sprite's "buffer" (containing the state of the live and dead cells). My main question, upon others, is how is buffer initially populated and how can I directly access/manipulate the buffer, so I can pass it to other Pis? Any help would be greatly appreciated. More info on our project can be found here:
http://sdsc-sandbox.blogspot.com/