├── .gitignore ├── ConwayCL-Final ├── KernelUtils.cl ├── Last_Config ├── RuleKernels │ ├── BiSum │ │ ├── Blinkers.cl │ │ ├── Churning.cl │ │ ├── Curious-2.cl │ │ ├── Curious.cl │ │ ├── Flutter.cl │ │ ├── Ink.cl │ │ ├── InkSwirl.cl │ │ ├── Searchlight.cl │ │ └── Spiral.cl │ ├── Count │ │ ├── AsymPuffers.cl │ │ ├── Atoms │ │ │ ├── A2R3 │ │ │ │ ├── A2R3-1.cl │ │ │ │ ├── A2R3-2.cl │ │ │ │ └── A2R3-3.cl │ │ │ ├── Atom-Medium.cl │ │ │ ├── Atom-Original.cl │ │ │ ├── Atom-ThreeRings-1.cl │ │ │ ├── Atom-ThreeRings-2.cl │ │ │ ├── Atom-ThreeRings-3.cl │ │ │ ├── Atom-TwoRings-1.cl │ │ │ ├── Atom-TwoRings-2.cl │ │ │ ├── Atom-TwoRings-3.cl │ │ │ └── SmallAtom │ │ │ │ ├── AtomSmall-1.cl │ │ │ │ └── AtomSmall-2.cl │ │ ├── Brane-1.cl │ │ ├── Brane-2.cl │ │ ├── Brane-3.cl │ │ ├── Bugs.cl │ │ ├── BurstingBubbles.cl │ │ ├── BurstingOrbs.cl │ │ ├── Conway.cl │ │ ├── Crawlers-2.cl │ │ ├── Crawlers.cl │ │ ├── Crystal.cl │ │ ├── EWFMA74-NoMod.cl │ │ ├── EpicWaves.cl │ │ ├── Evolver.cl │ │ ├── Feeders │ │ │ ├── Feeders-1.cl │ │ │ ├── Feeders-10.cl │ │ │ ├── Feeders-11.cl │ │ │ ├── Feeders-12.cl │ │ │ ├── Feeders-2.cl │ │ │ ├── Feeders-3.cl │ │ │ ├── Feeders-4.cl │ │ │ ├── Feeders-5.cl │ │ │ ├── Feeders-6.cl │ │ │ ├── Feeders-7.cl │ │ │ ├── Feeders-8.cl │ │ │ └── Feeders-9.cl │ │ ├── Honeycomb │ │ │ ├── Honeycomb-1.cl │ │ │ ├── Honeycomb-2.cl │ │ │ ├── Honeycomb-3.cl │ │ │ ├── Honeycomb-4.cl │ │ │ └── Honeycomb-5.cl │ │ ├── IgniteTubes.cl │ │ ├── Infection-1.cl │ │ ├── Infection-2.cl │ │ ├── LargeN.cl │ │ ├── Long Load Times │ │ │ ├── Atom-ManyRings-1.cl │ │ │ ├── Atom-ManyRings-2.cl │ │ │ ├── EW-FMA7-2.cl │ │ │ ├── Ripple-1.cl │ │ │ └── Ripple-2.cl │ │ ├── Maze-1.cl │ │ ├── Maze-2.cl │ │ ├── Maze-3.cl │ │ ├── MeltingHills.cl │ │ ├── MooreWire-1.cl │ │ ├── MooreWire-2.cl │ │ ├── Multiple Attractors │ │ │ ├── AtomConway-Small.cl │ │ │ ├── AtomConway.cl │ │ │ ├── AtomEvo │ │ │ │ ├── Atom-Evo-2.cl │ │ │ │ ├── Atom-Evo-3.cl │ │ │ │ ├── Atom-Evo-4.cl │ │ │ │ ├── Atom-Evo-5.cl │ │ │ │ ├── Atom-Evo-6.cl │ │ │ │ ├── Atom-Evo-7.cl │ │ │ │ ├── Atom-Evo-8.cl │ │ │ │ ├── Atom-Evo-9.cl │ │ │ │ └── Atom-Evo.cl │ │ │ ├── AtomSmall-Wave-1.cl │ │ │ ├── AtomSmall-Wave-2.cl │ │ │ ├── AtomWave.cl │ │ │ ├── EF722-1.cl │ │ │ ├── EFW-1.cl │ │ │ ├── EFW-2.cl │ │ │ ├── EFW-3.cl │ │ │ ├── EFW-4.cl │ │ │ ├── EW-FMA7-4 │ │ │ │ ├── EF74-1.cl │ │ │ │ ├── EF74-2.cl │ │ │ │ ├── EF74-3.cl │ │ │ │ ├── EF74-4.cl │ │ │ │ ├── EF74-5.cl │ │ │ │ ├── EF74-6.cl │ │ │ │ └── EF74-7.cl │ │ │ ├── EW-FMA7 │ │ │ │ ├── EW-FMA7-1.cl │ │ │ │ ├── EW-FMA7-10.cl │ │ │ │ ├── EW-FMA7-11.cl │ │ │ │ ├── EW-FMA7-12.cl │ │ │ │ ├── EW-FMA7-13.cl │ │ │ │ ├── EW-FMA7-14.cl │ │ │ │ ├── EW-FMA7-15.cl │ │ │ │ ├── EW-FMA7-16.cl │ │ │ │ ├── EW-FMA7-17.cl │ │ │ │ ├── EW-FMA7-18.cl │ │ │ │ ├── EW-FMA7-19.cl │ │ │ │ ├── EW-FMA7-2.cl │ │ │ │ ├── EW-FMA7-20.cl │ │ │ │ ├── EW-FMA7-21.cl │ │ │ │ ├── EW-FMA7-22.cl │ │ │ │ ├── EW-FMA7-3.cl │ │ │ │ ├── EW-FMA7-4.cl │ │ │ │ ├── EW-FMA7-5.cl │ │ │ │ ├── EW-FMA7-6.cl │ │ │ │ ├── EW-FMA7-7.cl │ │ │ │ ├── EW-FMA7-8.cl │ │ │ │ └── EW-FMA7-9.cl │ │ │ ├── Feeders │ │ │ │ ├── Feeders-12.cl │ │ │ │ ├── Feeders-13.cl │ │ │ │ ├── Feeders-14.cl │ │ │ │ ├── Feeders-15.cl │ │ │ │ ├── Feeders-16.cl │ │ │ │ ├── Feeders-17.cl │ │ │ │ ├── Feeders-18.cl │ │ │ │ ├── Feeders-19.cl │ │ │ │ ├── Feeders-20.cl │ │ │ │ └── Feeders-21.cl │ │ │ ├── FeedersMicroAtom │ │ │ │ ├── FeedersMicroAtom-10.cl │ │ │ │ ├── FeedersMicroAtom-11.cl │ │ │ │ ├── FeedersMicroAtom-12.cl │ │ │ │ ├── FeedersMicroAtom-13.cl │ │ │ │ ├── FeedersMicroAtom-14.cl │ │ │ │ ├── FeedersMicroAtom-15.cl │ │ │ │ ├── FeedersMicroAtom-16.cl │ │ │ │ ├── FeedersMicroAtom-17.cl │ │ │ │ ├── FeedersMicroAtom-2.cl │ │ │ │ ├── FeedersMicroAtom-3.cl │ │ │ │ ├── FeedersMicroAtom-4.cl │ │ │ │ ├── FeedersMicroAtom-5.cl │ │ │ │ ├── FeedersMicroAtom-6.cl │ │ │ │ ├── FeedersMicroAtom-7.cl │ │ │ │ ├── FeedersMicroAtom-8.cl │ │ │ │ ├── FeedersMicroAtom-9.cl │ │ │ │ └── FeedersMicroAtom.cl │ │ │ ├── GetTether │ │ │ │ ├── EF7TCWave-1.cl │ │ │ │ ├── EF7TCWave-10.cl │ │ │ │ ├── EF7TCWave-11.cl │ │ │ │ ├── EF7TCWave-12.cl │ │ │ │ ├── EF7TCWave-13.cl │ │ │ │ ├── EF7TCWave-14.cl │ │ │ │ ├── EF7TCWave-15.cl │ │ │ │ ├── EF7TCWave-2.cl │ │ │ │ ├── EF7TCWave-3.cl │ │ │ │ ├── EF7TCWave-4.cl │ │ │ │ ├── EF7TCWave-5.cl │ │ │ │ ├── EF7TCWave-6.cl │ │ │ │ ├── EF7TCWave-7.cl │ │ │ │ ├── EF7TCWave-8.cl │ │ │ │ ├── EF7TCWave-9.cl │ │ │ │ ├── EF7Tether-1.cl │ │ │ │ ├── EF7Tether-2.cl │ │ │ │ ├── EF7Tether-3.cl │ │ │ │ ├── EF7Tether-4.cl │ │ │ │ ├── EF7Tether-5.cl │ │ │ │ ├── EF7Tether-6.cl │ │ │ │ ├── EF7TetherConw-1.cl │ │ │ │ ├── EF7TetherConw-2.cl │ │ │ │ ├── EF7TetherConw-3.cl │ │ │ │ └── EW-FMA7-4.cl │ │ │ ├── MiniAtom │ │ │ │ ├── MiniAtom-1.cl │ │ │ │ ├── MiniAtom-10.cl │ │ │ │ ├── MiniAtom-11.cl │ │ │ │ ├── MiniAtom-12.cl │ │ │ │ ├── MiniAtom-13.cl │ │ │ │ ├── MiniAtom-14.cl │ │ │ │ ├── MiniAtom-15.cl │ │ │ │ ├── MiniAtom-16.cl │ │ │ │ ├── MiniAtom-17.cl │ │ │ │ ├── MiniAtom-18.cl │ │ │ │ ├── MiniAtom-19.cl │ │ │ │ ├── MiniAtom-2.cl │ │ │ │ ├── MiniAtom-20.cl │ │ │ │ ├── MiniAtom-3.cl │ │ │ │ ├── MiniAtom-4.cl │ │ │ │ ├── MiniAtom-5.cl │ │ │ │ ├── MiniAtom-6.cl │ │ │ │ ├── MiniAtom-7.cl │ │ │ │ ├── MiniAtom-8.cl │ │ │ │ └── MiniAtom-9.cl │ │ │ ├── NewMerger │ │ │ │ ├── SmallAtom-2.cl │ │ │ │ ├── SmallAtom-3.cl │ │ │ │ └── SmallAtom.cl │ │ │ └── OptimFeedMAtom-1.cl │ │ ├── OrbRepeater.cl │ │ ├── OrbReplicator.cl │ │ ├── OrbWave │ │ │ ├── OrbWave-1.cl │ │ │ ├── OrbWave-2.cl │ │ │ ├── OrbWave-3.cl │ │ │ ├── OrbWave-4.cl │ │ │ ├── OrbWave-5.cl │ │ │ ├── OrbWave-6.cl │ │ │ ├── OrbWave-7.cl │ │ │ ├── OrbWave-8.cl │ │ │ └── OrbWave-9.cl │ │ ├── PullApart │ │ │ ├── PullApart-1.cl │ │ │ ├── PullApart-2.cl │ │ │ ├── PullApart-3.cl │ │ │ ├── PullApart-4.cl │ │ │ └── PullApart-5.cl │ │ ├── ReWire.cl │ │ ├── ShiftingSands.cl │ │ ├── SierBox │ │ │ ├── SierBox-1.cl │ │ │ ├── SierBox-2.cl │ │ │ ├── SierBox-3.cl │ │ │ ├── SierBox-4.cl │ │ │ ├── SierBox2-1.cl │ │ │ ├── SierBox2-10.cl │ │ │ ├── SierBox2-11.cl │ │ │ ├── SierBox2-12.cl │ │ │ ├── SierBox2-2.cl │ │ │ ├── SierBox2-3.cl │ │ │ ├── SierBox2-4.cl │ │ │ ├── SierBox2-5.cl │ │ │ ├── SierBox2-6.cl │ │ │ ├── SierBox2-7.cl │ │ │ ├── SierBox2-8.cl │ │ │ └── SierBox2-9.cl │ │ ├── Snake.cl │ │ ├── SpinningTops-1.cl │ │ ├── SpinningTops-2.cl │ │ ├── Strands.cl │ │ ├── Tunnels.cl │ │ ├── Unfold.cl │ │ ├── VirtualParticles.cl │ │ ├── WG-NoMod.cl │ │ ├── Wave-Gradient.cl │ │ ├── Wave.cl │ │ └── WaveShield.cl │ └── ParameterMaps │ │ ├── Asym.cl │ │ ├── Atom-Original_Explore.cl │ │ ├── Atom-Small.cl │ │ ├── Feeders.cl │ │ ├── M1-R2_Explore.cl │ │ ├── M1-R3_Explore.cl │ │ ├── M2-Glider.cl │ │ ├── M2-R2_Explore.cl │ │ ├── M2-R3_Explore.cl │ │ ├── M2-R4_Explore.cl │ │ ├── MeltingHills.cl │ │ ├── Moore2_Explore.cl │ │ ├── Moore_Explore.cl │ │ ├── OrbReplicator_Explore.cl │ │ ├── OrbWave.cl │ │ ├── Prime.cl │ │ ├── Ring-1.cl │ │ ├── RingWave.cl │ │ ├── SierBox-3.cl │ │ └── copy of Feeders.cl ├── RulePlaylist ├── SeedImages │ ├── HorizLines-1-128.bmp │ ├── HorizLines-1-512.bmp │ ├── NonUniform-1024.bmp │ ├── NonUniform-2048.bmp │ ├── NonUniform-512.bmp │ ├── Rule Specific │ │ ├── Atom-Many-512.bmp │ │ ├── Atom-Original-1024.bmp │ │ ├── Atom-TwoRing-1024.bmp │ │ ├── Atom-TwoRing-3-1024.bmp │ │ ├── Atom-TwoRing-3-512.bmp │ │ ├── Atom-TwoRing-512.bmp │ │ ├── AtomThreeRing2-1024.bmp │ │ ├── EpicWaves-1024.bmp │ │ ├── EpicWaves.bmp │ │ ├── MooreWire-1024.bmp │ │ ├── MooreWire2-512.bmp │ │ └── Tubes-1024.bmp │ ├── SquareTest-2048.bmp │ ├── Squaretest-1024.bmp │ └── TestImage-1024.bmp └── main.py ├── Early Tests ├── ConwayCL │ ├── 001a │ │ ├── Basic Checks │ │ │ ├── BasicDraw.py │ │ │ ├── BasicGUI.py │ │ │ ├── Hello.py │ │ │ └── ImportCheck.py │ │ └── ConwayCPU │ │ │ ├── BasicDraw.py │ │ │ └── Conway.py │ ├── 001b │ │ ├── BasicDraw.py │ │ ├── Conway.py │ │ ├── main.py │ │ └── part1.cl │ ├── 002 │ │ ├── BasicDraw.py │ │ ├── Conway.py │ │ ├── main.py │ │ └── part1.cl │ ├── 003 │ │ ├── main.py │ │ └── part1.cl │ ├── 004 - First 2D kernal │ │ ├── main.py │ │ └── part1.cl │ ├── 005 - 14200x14200 resolution │ │ ├── kTest.cl │ │ └── main.py │ ├── 006 - Toggling the value of all cells │ │ ├── kTest.cl │ │ └── main.py │ ├── 007 - First CGoL │ │ ├── kTest.cl │ │ └── main.py │ ├── 008 - CGoL │ │ ├── kTest.cl │ │ └── main.py │ ├── 009 - CGoL improvments │ │ ├── kTest.cl │ │ └── main.py │ ├── 010 - Still Slow │ │ ├── kTest.cl │ │ └── main.py │ ├── 011 Fast, first wrap-around │ │ ├── ModularTorus workings │ │ ├── kTest.cl │ │ └── main.py │ └── 012 Pre-GL │ │ ├── KernelUtils.cl │ │ ├── Last_Config │ │ ├── RuleKernels │ │ ├── BiSum │ │ │ ├── Blinkers.cl │ │ │ ├── Churning.cl │ │ │ ├── Curious-2.cl │ │ │ ├── Curious.cl │ │ │ ├── Ink.cl │ │ │ ├── InkSwirl.cl │ │ │ ├── Searchlight.cl │ │ │ └── Spiral.cl │ │ ├── Count │ │ │ ├── AsymPuffers.cl │ │ │ ├── AtomsFamily │ │ │ │ ├── Atom-Large.cl │ │ │ │ ├── Atom-ManyRings-2.cl │ │ │ │ ├── Atom-ManyRings.cl │ │ │ │ ├── Atom-Medium-1.cl │ │ │ │ ├── Atom-Medium-2.cl │ │ │ │ ├── Atom-ThreeRings-2.cl │ │ │ │ ├── Atom-ThreeRings-3.cl │ │ │ │ ├── Atom-ThreeRings.cl │ │ │ │ ├── Atom-TwoRings-2.cl │ │ │ │ ├── Atom-TwoRings-3.cl │ │ │ │ └── Atom-TwoRings.cl │ │ │ ├── Conway-NoEdge.cl │ │ │ ├── Conway.cl │ │ │ ├── Crystal.cl │ │ │ ├── Evolver-NoEdge.cl │ │ │ ├── Evolver.cl │ │ │ ├── Honeycomb-2.cl │ │ │ ├── Honeycomb-3.cl │ │ │ ├── Honeycomb-4.cl │ │ │ ├── Honeycomb-5.cl │ │ │ ├── Honeycomb.cl │ │ │ ├── MeltingHills.cl │ │ │ ├── Ripple-2.cl │ │ │ ├── Ripple.cl │ │ │ ├── Snake.cl │ │ │ ├── Strands.cl │ │ │ ├── Tunnels.cl │ │ │ ├── Wave-Gradient.cl │ │ │ ├── Wave.cl │ │ │ └── WaveShield.cl │ │ └── test.cl │ │ └── main.py └── Notes │ ├── OldNbr-to-NewNbr.gnumeric │ └── host prints ├── LICENSE └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | 5 | # C extensions 6 | *.so 7 | 8 | # Distribution / packaging 9 | .Python 10 | env/ 11 | bin/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | eggs/ 16 | lib/ 17 | lib64/ 18 | parts/ 19 | sdist/ 20 | var/ 21 | *.egg-info/ 22 | .installed.cfg 23 | *.egg 24 | 25 | # Installer logs 26 | pip-log.txt 27 | pip-delete-this-directory.txt 28 | 29 | # Unit test / coverage reports 30 | htmlcov/ 31 | .tox/ 32 | .coverage 33 | .cache 34 | nosetests.xml 35 | coverage.xml 36 | 37 | # Translations 38 | *.mo 39 | 40 | # Mr Developer 41 | .mr.developer.cfg 42 | .project 43 | .pydevproject 44 | 45 | # Rope 46 | .ropeproject 47 | 48 | # Django stuff: 49 | *.log 50 | *.pot 51 | 52 | # Sphinx documentation 53 | docs/_build/ 54 | 55 | -------------------------------------------------------------------------------- /ConwayCL-Final/KernelUtils.cl: -------------------------------------------------------------------------------- 1 | __kernel void GetWorld(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | 7 | c[my_id] = a[my_id]; 8 | 9 | } 10 | 11 | __kernel void PlaceBlock(const int ySize, int mx, int my, int bs, __global int* a) 12 | { 13 | unsigned int i = get_global_id(0); 14 | unsigned int j = get_global_id(1); 15 | unsigned int my_id = i + ySize*j; 16 | unsigned int mouse_id = mx + ySize*my; 17 | 18 | int a_out = a[my_id]; 19 | 20 | if((i >= mx && i <= mx+bs) && (j >= my && j <= my+bs)) {a_out = 1;} 21 | 22 | a[my_id] = a_out; 23 | 24 | } 25 | 26 | 27 | __kernel void AddToBuffer(const int ySize, __global int* a, __global int* dest) 28 | { 29 | unsigned int i = get_global_id(0); 30 | unsigned int j = get_global_id(1); 31 | unsigned int my_id = i + ySize*j; 32 | 33 | //if(a[my_id] != 0) {dest[my_id] = a[my_id];} 34 | 35 | //if(dest[my_id] > 0) {dest[my_id] -= 1;} 36 | //if(a[my_id] != 0) {dest[my_id] = a[my_id]*8;} 37 | 38 | //if(dest[my_id] > 767) {dest[my_id] = 0;} 39 | if(dest[my_id] > 0) {dest[my_id] += 5;} 40 | if(dest[my_id] > 1278) {dest[my_id] = 0;} 41 | if(a[my_id] != 0) {dest[my_id] = a[my_id];} 42 | 43 | 44 | } 45 | 46 | __kernel void ReplaceBuffer(const int ySize, __global int* a, __global int* dest) 47 | { 48 | unsigned int i = get_global_id(0); 49 | unsigned int j = get_global_id(1); 50 | unsigned int my_id = i + ySize*j; 51 | 52 | if(dest[my_id] > 23) {dest[my_id] = 0;} 53 | if(dest[my_id] > 0) {dest[my_id] += 1;} 54 | if(a[my_id] != 0) {dest[my_id] = a[my_id];} 55 | 56 | } 57 | 58 | __kernel void BuildFrame(const int ySize, __global int* a, __global int* b, __global int* dest) 59 | { 60 | unsigned int i = get_global_id(0); 61 | unsigned int j = get_global_id(1); 62 | unsigned int my_id = i + ySize*j; 63 | 64 | int out = a[my_id]; 65 | 66 | if(b[my_id] != 0) { 67 | out = b[my_id]; 68 | } 69 | 70 | dest[my_id] = out; 71 | 72 | } 73 | 74 | __kernel void BuildOnlyBoth(const int ySize, __global int* a, __global int* b, __global int* dest) 75 | { 76 | unsigned int i = get_global_id(0); 77 | unsigned int j = get_global_id(1); 78 | unsigned int my_id = i + ySize*j; 79 | 80 | int out = a[my_id]; 81 | 82 | if(b[my_id] != 0 && a[my_id] != 0) { 83 | out = 1; 84 | } 85 | 86 | dest[my_id] = out; 87 | 88 | } 89 | -------------------------------------------------------------------------------- /ConwayCL-Final/Last_Config: -------------------------------------------------------------------------------- 1 | 9,/media/pseudo/Media and Storage/PyCl-Convergence/ConwayCL-Final/RuleKernels/Count/Multiple Attractors/MiniAtom/MiniAtom-19.cl,null,2,1,2,0 -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/BiSum/Churning.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | int sum = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = 0; 15 | yoff = -1; 16 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 17 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 18 | 19 | xoff = 1; 20 | yoff = -1; 21 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 22 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 23 | 24 | xoff = 1; 25 | yoff = 0; 26 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 27 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 28 | 29 | xoff = 1; 30 | yoff = 1; 31 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 32 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 33 | 34 | xoff = 0; 35 | yoff = 1; 36 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 37 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 38 | 39 | xoff = -1; 40 | yoff = 1; 41 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 42 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 43 | 44 | xoff = -1; 45 | yoff = 0; 46 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 47 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 48 | 49 | xoff = -1; 50 | yoff = -1; 51 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 52 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 53 | 54 | xoff = 0; 55 | yoff = -2; 56 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 57 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 58 | 59 | xoff = 1; 60 | yoff = -2; 61 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 62 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 63 | 64 | xoff = 2; 65 | yoff = -2; 66 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 67 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 68 | 69 | xoff = 2; 70 | yoff = -1; 71 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 72 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 73 | 74 | xoff = 2; 75 | yoff = 0; 76 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 77 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 78 | 79 | xoff = 2; 80 | yoff = 1; 81 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 82 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 83 | 84 | xoff = 2; 85 | yoff = 2; 86 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 87 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 88 | 89 | xoff = 1; 90 | yoff = 2; 91 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 92 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 93 | 94 | xoff = 0; 95 | yoff = 2; 96 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 97 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 98 | 99 | xoff = -1; 100 | yoff = 2; 101 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 102 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 103 | 104 | xoff = -2; 105 | yoff = 2; 106 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 107 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 108 | 109 | xoff = -2; 110 | yoff = 1; 111 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 112 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 113 | 114 | xoff = -2; 115 | yoff = 0; 116 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 117 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 118 | 119 | xoff = -2; 120 | yoff = -1; 121 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 122 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 123 | 124 | xoff = -2; 125 | yoff = -2; 126 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 127 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 128 | 129 | xoff = -1; 130 | yoff = -2; 131 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 132 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 133 | 134 | int finalSum = a[my_id]; 135 | if(sum >= 6 || sum <= -6) { 136 | if(a[my_id] == -1 && ((sum >= -7 && sum <= -6) || (sum >= -28 && sum <= -24)) ){finalSum = a[my_id]*-1;} 137 | if(a[my_id] == 1 && ((sum >= 6 && sum <= 7) || (sum >= 24 && sum <= 28)) ){finalSum = a[my_id]*-1;} 138 | if(a[my_id] == 0 && sum < 0){finalSum = -1;} 139 | if(a[my_id] == 0 && sum > 0){finalSum = 1;} 140 | } else {finalSum = 0;} 141 | c[my_id] = finalSum; 142 | } 143 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/BiSum/Curious-2.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | int sum = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = 0; 15 | yoff = -1; 16 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 17 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 18 | 19 | xoff = 1; 20 | yoff = -1; 21 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 22 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 23 | 24 | xoff = 1; 25 | yoff = 0; 26 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 27 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 28 | 29 | xoff = 1; 30 | yoff = 1; 31 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 32 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 33 | 34 | xoff = 0; 35 | yoff = 1; 36 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 37 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 38 | 39 | xoff = -1; 40 | yoff = 1; 41 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 42 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 43 | 44 | xoff = -1; 45 | yoff = 0; 46 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 47 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 48 | 49 | xoff = -1; 50 | yoff = -1; 51 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 52 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 53 | 54 | 55 | 56 | // (-8,-7, ..., 7, 8) : 17 57 | // For Negative (-1), become: 000+-+--0-++00000 58 | 59 | // For Zero/Dead (0), become: 00000-00000+00000 60 | 61 | // For Positive (1), become: 00000--+0++-+-000 62 | 63 | 64 | 65 | 66 | 67 | 68 | //To get a value of cell in next generation, 69 | //character with index of cell's neighbors count + 8 is looked up in line corresponding to this cell. 70 | //Zero means cell dies, plus means it turns positive and minus means negative. 71 | 72 | 73 | int finalSum = a[my_id]; 74 | if(sum != 0 && (sum >= -5 && sum <= 5)) { 75 | if(a[my_id] == -1 && (sum == -5 || sum == -3 || sum == 2 || sum == 3) ){finalSum = a[my_id]*-1;} 76 | if(a[my_id] == 1 && (sum == 5 || sum == 3 || sum == -2 || sum == -3) ){finalSum = a[my_id]*-1;} 77 | if(a[my_id] == 0){ 78 | finalSum = 0; 79 | if(sum == -3){finalSum = -1;} 80 | if(sum == 3){finalSum = 1;} 81 | } 82 | } else {finalSum = 0;} 83 | 84 | c[my_id] = finalSum; 85 | } 86 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/BiSum/Ink.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | int sum = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = 0; 15 | yoff = -1; 16 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 17 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 18 | 19 | xoff = 1; 20 | yoff = -1; 21 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 22 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 23 | 24 | xoff = 1; 25 | yoff = 0; 26 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 27 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 28 | 29 | xoff = 1; 30 | yoff = 1; 31 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 32 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 33 | 34 | xoff = 0; 35 | yoff = 1; 36 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 37 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 38 | 39 | xoff = -1; 40 | yoff = 1; 41 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 42 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 43 | 44 | xoff = -1; 45 | yoff = 0; 46 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 47 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 48 | 49 | xoff = -1; 50 | yoff = -1; 51 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 52 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 53 | 54 | xoff = 0; 55 | yoff = -2; 56 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 57 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 58 | 59 | xoff = 1; 60 | yoff = -2; 61 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 62 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 63 | 64 | xoff = 2; 65 | yoff = -2; 66 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 67 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 68 | 69 | xoff = 2; 70 | yoff = -1; 71 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 72 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 73 | 74 | xoff = 2; 75 | yoff = 0; 76 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 77 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 78 | 79 | xoff = 2; 80 | yoff = 1; 81 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 82 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 83 | 84 | xoff = 2; 85 | yoff = 2; 86 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 87 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 88 | 89 | xoff = 1; 90 | yoff = 2; 91 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 92 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 93 | 94 | xoff = 0; 95 | yoff = 2; 96 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 97 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 98 | 99 | xoff = -1; 100 | yoff = 2; 101 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 102 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 103 | 104 | xoff = -2; 105 | yoff = 2; 106 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 107 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 108 | 109 | xoff = -2; 110 | yoff = 1; 111 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 112 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 113 | 114 | xoff = -2; 115 | yoff = 0; 116 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 117 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 118 | 119 | xoff = -2; 120 | yoff = -1; 121 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 122 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 123 | 124 | xoff = -2; 125 | yoff = -2; 126 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 127 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 128 | 129 | xoff = -1; 130 | yoff = -2; 131 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 132 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 133 | 134 | 135 | int finalSum = a[my_id]; 136 | if(sum >= 5 || sum <= -5) { 137 | if(a[my_id] == -1 && ((sum >= -8 && sum <= -6)) ){finalSum = a[my_id]*-1;} 138 | if(a[my_id] == 1 && ((sum >= 6 && sum <= 8)) ){finalSum = a[my_id]*-1;} 139 | if(a[my_id] == 0 && sum < 0){finalSum = -1;} 140 | if(a[my_id] == 0 && sum > 0){finalSum = 1;} 141 | } else {finalSum = 0;} 142 | c[my_id] = finalSum; 143 | 144 | } 145 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/BiSum/InkSwirl.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | int sum = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = 0; 15 | yoff = -1; 16 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 17 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 18 | 19 | xoff = 1; 20 | yoff = -1; 21 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 22 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 23 | 24 | xoff = 1; 25 | yoff = 0; 26 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 27 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 28 | 29 | xoff = 1; 30 | yoff = 1; 31 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 32 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 33 | 34 | xoff = 0; 35 | yoff = 1; 36 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 37 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 38 | 39 | xoff = -1; 40 | yoff = 1; 41 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 42 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 43 | 44 | xoff = -1; 45 | yoff = 0; 46 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 47 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 48 | 49 | xoff = -1; 50 | yoff = -1; 51 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 52 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 53 | 54 | xoff = 0; 55 | yoff = -2; 56 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 57 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 58 | 59 | xoff = 1; 60 | yoff = -2; 61 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 62 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 63 | 64 | xoff = 2; 65 | yoff = -2; 66 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 67 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 68 | 69 | xoff = 2; 70 | yoff = -1; 71 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 72 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 73 | 74 | xoff = 2; 75 | yoff = 0; 76 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 77 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 78 | 79 | xoff = 2; 80 | yoff = 1; 81 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 82 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 83 | 84 | xoff = 2; 85 | yoff = 2; 86 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 87 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 88 | 89 | xoff = 1; 90 | yoff = 2; 91 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 92 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 93 | 94 | xoff = 0; 95 | yoff = 2; 96 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 97 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 98 | 99 | xoff = -1; 100 | yoff = 2; 101 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 102 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 103 | 104 | xoff = -2; 105 | yoff = 2; 106 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 107 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 108 | 109 | xoff = -2; 110 | yoff = 1; 111 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 112 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 113 | 114 | xoff = -2; 115 | yoff = 0; 116 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 117 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 118 | 119 | xoff = -2; 120 | yoff = -1; 121 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 122 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 123 | 124 | xoff = -2; 125 | yoff = -2; 126 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 127 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 128 | 129 | xoff = -1; 130 | yoff = -2; 131 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 132 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 133 | 134 | 135 | int finalSum = a[my_id]; 136 | if(sum >= 5 || sum <= -5) { 137 | if(a[my_id] == -1 && ((sum >= -10 && sum <= -8)) ){finalSum = a[my_id]*-1;} 138 | if(a[my_id] == 1 && ((sum >= 8 && sum <= 10)) ){finalSum = a[my_id]*-1;} 139 | if(a[my_id] == 0 && sum < 0){finalSum = -1;} 140 | if(a[my_id] == 0 && sum > 0){finalSum = 1;} 141 | } else {finalSum = 0;} 142 | c[my_id] = finalSum; 143 | 144 | } 145 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/BiSum/Searchlight.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | int sum = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = 0; 15 | yoff = -1; 16 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 17 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 18 | 19 | xoff = 1; 20 | yoff = -1; 21 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 22 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 23 | 24 | xoff = 1; 25 | yoff = 0; 26 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 27 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 28 | 29 | xoff = 1; 30 | yoff = 1; 31 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 32 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 33 | 34 | xoff = 0; 35 | yoff = 1; 36 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 37 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 38 | 39 | xoff = -1; 40 | yoff = 1; 41 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 42 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 43 | 44 | xoff = -1; 45 | yoff = 0; 46 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 47 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 48 | 49 | xoff = -1; 50 | yoff = -1; 51 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 52 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 53 | 54 | xoff = 0; 55 | yoff = -2; 56 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 57 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 58 | 59 | xoff = 1; 60 | yoff = -2; 61 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 62 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 63 | 64 | xoff = 2; 65 | yoff = -2; 66 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 67 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 68 | 69 | xoff = 2; 70 | yoff = -1; 71 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 72 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 73 | 74 | xoff = 2; 75 | yoff = 0; 76 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 77 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 78 | 79 | xoff = 2; 80 | yoff = 1; 81 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 82 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 83 | 84 | xoff = 2; 85 | yoff = 2; 86 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 87 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 88 | 89 | xoff = 1; 90 | yoff = 2; 91 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 92 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 93 | 94 | xoff = 0; 95 | yoff = 2; 96 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 97 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 98 | 99 | xoff = -1; 100 | yoff = 2; 101 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 102 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 103 | 104 | xoff = -2; 105 | yoff = 2; 106 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 107 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 108 | 109 | xoff = -2; 110 | yoff = 1; 111 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 112 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 113 | 114 | xoff = -2; 115 | yoff = 0; 116 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 117 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 118 | 119 | xoff = -2; 120 | yoff = -1; 121 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 122 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 123 | 124 | xoff = -2; 125 | yoff = -2; 126 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 127 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 128 | 129 | xoff = -1; 130 | yoff = -2; 131 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 132 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 133 | 134 | int finalSum = a[my_id]; 135 | if(sum >= 6 || sum <= -6) { 136 | if(a[my_id] == -1 && ((sum >= -8 && sum <= -6)) ){finalSum = a[my_id]*-1;} 137 | if(a[my_id] == 1 && ((sum >= 6 && sum <= 8)) ){finalSum = a[my_id]*-1;} 138 | if(a[my_id] == 0 && sum < 0){finalSum = -1;} 139 | if(a[my_id] == 0 && sum > 0){finalSum = 1;} 140 | } else {finalSum = 0;} 141 | c[my_id] = finalSum; 142 | } 143 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/Count/AsymPuffers.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = 0; 15 | yoff = -1; 16 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 17 | if(a[my_offset_id] != 0) {count += 1;} 18 | 19 | xoff = 1; 20 | yoff = -1; 21 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 22 | if(a[my_offset_id] != 0) {count += 1;} 23 | 24 | xoff = 1; 25 | yoff = 0; 26 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 27 | if(a[my_offset_id] != 0) {count += 1;} 28 | 29 | xoff = -1; 30 | yoff = 0; 31 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 32 | if(a[my_offset_id] != 0) {count += 1;} 33 | 34 | xoff = -1; 35 | yoff = -1; 36 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 37 | if(a[my_offset_id] != 0) {count += 1;} 38 | 39 | int c_out = a[my_id]; 40 | if(count >= 3) {c_out = 0;} 41 | if(count == 2) {c_out = a[my_id]+1;} 42 | if(count <= 1) {c_out = 0;} 43 | c[my_id] = c_out; 44 | 45 | 46 | } 47 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/Count/Conway.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = 0; 15 | yoff = -1; 16 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 17 | if(a[my_offset_id] != 0) {count += 1;} 18 | 19 | xoff = 1; 20 | yoff = -1; 21 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 22 | if(a[my_offset_id] != 0) {count += 1;} 23 | 24 | xoff = 1; 25 | yoff = 0; 26 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 27 | if(a[my_offset_id] != 0) {count += 1;} 28 | 29 | xoff = 1; 30 | yoff = 1; 31 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 32 | if(a[my_offset_id] != 0) {count += 1;} 33 | 34 | xoff = 0; 35 | yoff = 1; 36 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 37 | if(a[my_offset_id] != 0) {count += 1;} 38 | 39 | xoff = -1; 40 | yoff = 1; 41 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 42 | if(a[my_offset_id] != 0) {count += 1;} 43 | 44 | xoff = -1; 45 | yoff = 0; 46 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 47 | if(a[my_offset_id] != 0) {count += 1;} 48 | 49 | xoff = -1; 50 | yoff = -1; 51 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 52 | if(a[my_offset_id] != 0) {count += 1;} 53 | 54 | int c_out = a[my_id]; 55 | if(count >= 4) {c_out = 0;} 56 | if(count == 3) {c_out = a[my_id] + 1;} 57 | if(count <= 1) {c_out = 0;} 58 | c[my_id] = c_out; 59 | 60 | 61 | } 62 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/Count/Evolver.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = 0; 15 | yoff = -1; 16 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 17 | if(a[my_offset_id] == 1) {count += 1;} 18 | 19 | xoff = 1; 20 | yoff = -1; 21 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 22 | if(a[my_offset_id] == 1) {count += 1;} 23 | 24 | xoff = 1; 25 | yoff = 0; 26 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 27 | if(a[my_offset_id] == 1) {count += 1;} 28 | 29 | xoff = 1; 30 | yoff = 1; 31 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 32 | if(a[my_offset_id] == 1) {count += 1;} 33 | 34 | xoff = 0; 35 | yoff = 1; 36 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 37 | if(a[my_offset_id] == 1) {count += 1;} 38 | 39 | xoff = -1; 40 | yoff = 1; 41 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 42 | if(a[my_offset_id] == 1) {count += 1;} 43 | 44 | xoff = -1; 45 | yoff = 0; 46 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 47 | if(a[my_offset_id] == 1) {count += 1;} 48 | 49 | xoff = -1; 50 | yoff = -1; 51 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 52 | if(a[my_offset_id] == 1) {count += 1;} 53 | 54 | 55 | 56 | 57 | xoff = 0; 58 | yoff = -2; 59 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 60 | if(a[my_offset_id] == 1) {count += 1;} 61 | 62 | xoff = 1; 63 | yoff = -2; 64 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 65 | if(a[my_offset_id] == 1) {count += 1;} 66 | 67 | xoff = 2; 68 | yoff = -2; 69 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 70 | if(a[my_offset_id] == 1) {count += 1;} 71 | 72 | xoff = 2; 73 | yoff = -1; 74 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 75 | if(a[my_offset_id] == 1) {count += 1;} 76 | 77 | xoff = 2; 78 | yoff = 0; 79 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 80 | if(a[my_offset_id] == 1) {count += 1;} 81 | 82 | xoff = 2; 83 | yoff = 1; 84 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 85 | if(a[my_offset_id] == 1) {count += 1;} 86 | 87 | xoff = 2; 88 | yoff = 2; 89 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 90 | if(a[my_offset_id] == 1) {count += 1;} 91 | 92 | xoff = 1; 93 | yoff = 2; 94 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 95 | if(a[my_offset_id] == 1) {count += 1;} 96 | 97 | xoff = 0; 98 | yoff = 2; 99 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 100 | if(a[my_offset_id] == 1) {count += 1;} 101 | 102 | xoff = -1; 103 | yoff = 2; 104 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 105 | if(a[my_offset_id] == 1) {count += 1;} 106 | 107 | xoff = -2; 108 | yoff = 2; 109 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 110 | if(a[my_offset_id] == 1) {count += 1;} 111 | 112 | xoff = -2; 113 | yoff = 1; 114 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 115 | if(a[my_offset_id] == 1) {count += 1;} 116 | 117 | xoff = -2; 118 | yoff = 0; 119 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 120 | if(a[my_offset_id] == 1) {count += 1;} 121 | 122 | xoff = -2; 123 | yoff = -1; 124 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 125 | if(a[my_offset_id] == 1) {count += 1;} 126 | 127 | xoff = -2; 128 | yoff = -2; 129 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 130 | if(a[my_offset_id] == 1) {count += 1;} 131 | 132 | xoff = -1; 133 | yoff = -2; 134 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 135 | if(a[my_offset_id] == 1) {count += 1;} 136 | 137 | c[my_id] = (count == 4); 138 | } 139 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/Count/Maze-1.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | int upper = 1; 15 | int birth = 1; 16 | 17 | xoff = -3; 18 | yoff = 0; 19 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 20 | if(a[my_offset_id] != 0) {count += 1;} 21 | 22 | xoff = -2; 23 | yoff = -1; 24 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 25 | if(a[my_offset_id] != 0) {count += 1;} 26 | 27 | xoff = -2; 28 | yoff = 1; 29 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 30 | if(a[my_offset_id] != 0) {count += 1;} 31 | 32 | xoff = -1; 33 | yoff = -2; 34 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 35 | if(a[my_offset_id] != 0) {count += 1;} 36 | 37 | xoff = -1; 38 | yoff = 2; 39 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 40 | if(a[my_offset_id] != 0) {count += 1;} 41 | 42 | xoff = 0; 43 | yoff = -3; 44 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 45 | if(a[my_offset_id] != 0) {count += 1;} 46 | 47 | xoff = 0; 48 | yoff = 3; 49 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 50 | if(a[my_offset_id] != 0) {count += 1;} 51 | 52 | xoff = 1; 53 | yoff = -2; 54 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 55 | if(a[my_offset_id] != 0) {count += 1;} 56 | 57 | xoff = 1; 58 | yoff = 2; 59 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 60 | if(a[my_offset_id] != 0) {count += 1;} 61 | 62 | xoff = 2; 63 | yoff = -1; 64 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 65 | if(a[my_offset_id] != 0) {count += 1;} 66 | 67 | xoff = 2; 68 | yoff = 1; 69 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 70 | if(a[my_offset_id] != 0) {count += 1;} 71 | 72 | xoff = 3; 73 | yoff = 0; 74 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 75 | if(a[my_offset_id] != 0) {count += 1;} 76 | 77 | 78 | int c_out = a[my_id]; 79 | 80 | if(count >= upper) {c_out = 0;}; 81 | if(count == birth) {c_out = a[my_id] + 1;} 82 | 83 | c[my_id] = c_out; 84 | 85 | 86 | } 87 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/Count/MooreWire-1.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | int upper = 5; 15 | int birth = 2; 16 | int lower = 1; 17 | 18 | //6 19 | 20 | xoff = 0; 21 | yoff = -1; 22 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 23 | if(a[my_offset_id] != 0) {count += 1;} 24 | 25 | xoff = 1; 26 | yoff = -1; 27 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 28 | if(a[my_offset_id] != 0) {count += 1;} 29 | 30 | xoff = 1; 31 | yoff = 0; 32 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 33 | if(a[my_offset_id] != 0) {count += 1;} 34 | 35 | xoff = 1; 36 | yoff = 1; 37 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 38 | if(a[my_offset_id] != 0) {count += 1;} 39 | 40 | xoff = 0; 41 | yoff = 1; 42 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 43 | if(a[my_offset_id] != 0) {count += 1;} 44 | 45 | xoff = -1; 46 | yoff = 1; 47 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 48 | if(a[my_offset_id] != 0) {count += 1;} 49 | 50 | xoff = -1; 51 | yoff = 0; 52 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 53 | if(a[my_offset_id] != 0) {count += 1;} 54 | 55 | xoff = -1; 56 | yoff = -1; 57 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 58 | if(a[my_offset_id] != 0) {count += 1;} 59 | 60 | int c_out = a[my_id]; 61 | 62 | /*if(count >= upper) {c_out = 0;} 63 | if(count <= lower) {c_out = 0;} 64 | if(count == birth) {c_out = a[my_id] + 1;}*/ //Most, but 2 CGoL 65 | 66 | /*if(count == birth) {c_out = a[my_id] + 1;} 67 | if(count <= lower) {c_out = 0;} 68 | if(count >= upper) {c_out = 0;}*/ //least, but only one CGoL 69 | 70 | /*if(count >= upper) {c_out = 0;} 71 | if(count == birth) {c_out = a[my_id] + 1;} 72 | if(count <= lower) {c_out = 0;}*/ //mid, 2 CGoL, does full screen clear each round 73 | 74 | if(count <= lower) {c_out = 0;} 75 | if(count >= birth && count <= birth+1) {c_out = a[my_id] + 1;} 76 | if(count >= upper) {c_out = 0;} //best so far 77 | 78 | 79 | 80 | 81 | 82 | c[my_id] = c_out; 83 | 84 | 85 | } 86 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/Count/MooreWire-2.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | 15 | int upper = 6; 16 | int birth = 2; 17 | int lower = 1; 18 | 19 | //2 y, 5&6 x 20 | 21 | xoff = 0; 22 | yoff = -1; 23 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 24 | if(a[my_offset_id] != 0) {count += 1;} 25 | 26 | xoff = 1; 27 | yoff = -1; 28 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 29 | if(a[my_offset_id] != 0) {count += 1;} 30 | 31 | xoff = 1; 32 | yoff = 0; 33 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 34 | if(a[my_offset_id] != 0) {count += 1;} 35 | 36 | xoff = 1; 37 | yoff = 1; 38 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 39 | if(a[my_offset_id] != 0) {count += 1;} 40 | 41 | xoff = 0; 42 | yoff = 1; 43 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 44 | if(a[my_offset_id] != 0) {count += 1;} 45 | 46 | xoff = -1; 47 | yoff = 1; 48 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 49 | if(a[my_offset_id] != 0) {count += 1;} 50 | 51 | xoff = -1; 52 | yoff = 0; 53 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 54 | if(a[my_offset_id] != 0) {count += 1;} 55 | 56 | xoff = -1; 57 | yoff = -1; 58 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 59 | if(a[my_offset_id] != 0) {count += 1;} 60 | 61 | int c_out = a[my_id]; 62 | 63 | /*if(count >= upper) {c_out = 0;} 64 | if(count <= lower) {c_out = 0;} 65 | if(count == birth) {c_out = a[my_id] + 1;}*/ //Most, but 2 CGoL 66 | 67 | /*if(count == birth) {c_out = a[my_id] + 1;} 68 | if(count <= lower) {c_out = 0;} 69 | if(count >= upper) {c_out = 0;}*/ //least, but only one CGoL 70 | 71 | /*if(count >= upper) {c_out = 0;} 72 | if(count == birth) {c_out = a[my_id] + 1;} 73 | if(count <= lower) {c_out = 0;}*/ //mid, 2 CGoL, does full screen clear each round 74 | 75 | if(count <= lower) {c_out = 0;} 76 | if(count >= birth && count <= birth+1) {c_out = a[my_id] + 1;} 77 | if(count >= upper) {c_out = 0;} //best so far 78 | 79 | 80 | 81 | 82 | 83 | c[my_id] = c_out; 84 | 85 | 86 | } 87 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/Count/SierBox/SierBox-1.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = -1; 15 | yoff = -1; 16 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 17 | if(a[my_offset_id] != 0) {count += 1;} 18 | 19 | xoff = 1; 20 | yoff = -1; 21 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 22 | if(a[my_offset_id] != 0) {count += 1;} 23 | 24 | xoff = -1; 25 | yoff = 0; 26 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 27 | if(a[my_offset_id] != 0) {count += 1;} 28 | 29 | xoff = 1; 30 | yoff = 0; 31 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 32 | if(a[my_offset_id] != 0) {count += 1;} 33 | 34 | int c_out = a[my_id]; 35 | if(count >= 2 && count <= 4){c_out = a[my_id] + 1;} 36 | if(count == 2) {c_out = 0;} 37 | c[my_id] = c_out; 38 | 39 | 40 | } 41 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/Count/SierBox/SierBox-2.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = -1; 15 | yoff = -1; 16 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 17 | if(a[my_offset_id] != 0) {count += 1;} 18 | 19 | xoff = 1; 20 | yoff = -1; 21 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 22 | if(a[my_offset_id] != 0) {count += 1;} 23 | 24 | xoff = -1; 25 | yoff = 0; 26 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 27 | if(a[my_offset_id] != 0) {count += 1;} 28 | 29 | xoff = 1; 30 | yoff = 0; 31 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 32 | if(a[my_offset_id] != 0) {count += 1;} 33 | 34 | int c_out = a[my_id]; 35 | if(count >= 1 && count <= 2){c_out = a[my_id] + 1;} 36 | if(count == 3) {c_out = 0;} 37 | c[my_id] = c_out; 38 | 39 | 40 | } 41 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/Count/SierBox/SierBox-3.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = -1; 15 | yoff = -1; 16 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 17 | if(a[my_offset_id] != 0) {count += 1;} 18 | 19 | xoff = 1; 20 | yoff = -1; 21 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 22 | if(a[my_offset_id] != 0) {count += 1;} 23 | 24 | xoff = -1; 25 | yoff = 0; 26 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 27 | if(a[my_offset_id] != 0) {count += 1;} 28 | 29 | xoff = 1; 30 | yoff = 0; 31 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 32 | if(a[my_offset_id] != 0) {count += 1;} 33 | 34 | int c_out = a[my_id]; 35 | if(count >= 3 && count <= 4){c_out = a[my_id] + 1;} 36 | if(count == 2) {c_out = 0;} 37 | 38 | if(c_out >= 1278) {c_out = 1278;} 39 | 40 | c[my_id] = c_out; 41 | 42 | 43 | } 44 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/Count/SierBox/SierBox-4.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = -2; 15 | yoff = -1; 16 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 17 | if(a[my_offset_id] != 0) {count += 1;} 18 | 19 | xoff = 2; 20 | yoff = -1; 21 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 22 | if(a[my_offset_id] != 0) {count += 1;} 23 | 24 | xoff = -1; 25 | yoff = 0; 26 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 27 | if(a[my_offset_id] != 0) {count += 1;} 28 | 29 | xoff = 1; 30 | yoff = 0; 31 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 32 | if(a[my_offset_id] != 0) {count += 1;} 33 | 34 | int c_out = a[my_id]; 35 | if(count >= 3 && count <= 4){c_out = a[my_id] + 1;} 36 | if(count == 2) {c_out = 0;} 37 | 38 | if(c_out >= 1278) {c_out = 1278;} 39 | 40 | c[my_id] = c_out; 41 | 42 | 43 | } 44 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/Count/SierBox/SierBox2-1.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = -2; 15 | yoff = 0; 16 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 17 | if(a[my_offset_id] != 0) {count += 1;} 18 | 19 | xoff = -1; 20 | yoff = 0; 21 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 22 | if(a[my_offset_id] != 0) {count += 1;} 23 | 24 | xoff = -1; 25 | yoff = -1; 26 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 27 | if(a[my_offset_id] != 0) {count += 1;} 28 | 29 | xoff = 0; 30 | yoff = -2; 31 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 32 | if(a[my_offset_id] != 0) {count += 1;} 33 | 34 | xoff = 1; 35 | yoff = 0; 36 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 37 | if(a[my_offset_id] != 0) {count += 1;} 38 | 39 | xoff = 2; 40 | yoff = 0; 41 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 42 | if(a[my_offset_id] != 0) {count += 1;} 43 | 44 | xoff = 1; 45 | yoff = -1; 46 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 47 | if(a[my_offset_id] != 0) {count += 1;} 48 | 49 | 50 | int c_out = a[my_id]; 51 | if(count >= 3 && count <= 4){c_out = a[my_id] + 1;} 52 | if(count == 2) {c_out = 0;} 53 | 54 | if(c_out >= 1278) {c_out = 1278;} 55 | 56 | c[my_id] = c_out; 57 | 58 | 59 | } 60 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/Count/SierBox/SierBox2-10.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = -2; 15 | yoff = -1; 16 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 17 | if(a[my_offset_id] != 0) {count += 1;} 18 | 19 | xoff = -1; 20 | yoff = 0; 21 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 22 | if(a[my_offset_id] != 0) {count += 1;} 23 | 24 | xoff = -1; 25 | yoff = -1; 26 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 27 | if(a[my_offset_id] != 0) {count += 1;} 28 | 29 | xoff = 0; 30 | yoff = 0; 31 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 32 | if(a[my_offset_id] != 0) {count += 1;} 33 | 34 | xoff = 1; 35 | yoff = 0; 36 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 37 | if(a[my_offset_id] != 0) {count += 1;} 38 | 39 | xoff = 2; 40 | yoff = -1; 41 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 42 | if(a[my_offset_id] != 0) {count += 1;} 43 | 44 | xoff = 1; 45 | yoff = -1; 46 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 47 | if(a[my_offset_id] != 0) {count += 1;} 48 | 49 | 50 | int c_out = a[my_id]; 51 | if(count >= 2 && count <= 6){c_out = a[my_id] + 1;} 52 | if((count >= 2 && count <= 2) || count == 4) {c_out = 0;} 53 | 54 | if(c_out >= 1278) {c_out = 1278;} 55 | 56 | c[my_id] = c_out; 57 | 58 | 59 | } 60 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/Count/SierBox/SierBox2-11.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = -2; 15 | yoff = -1; 16 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 17 | if(a[my_offset_id] != 0) {count += 1;} 18 | 19 | xoff = -1; 20 | yoff = 0; 21 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 22 | if(a[my_offset_id] != 0) {count += 1;} 23 | 24 | xoff = -1; 25 | yoff = -1; 26 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 27 | if(a[my_offset_id] != 0) {count += 1;} 28 | 29 | xoff = 0; 30 | yoff = -1; 31 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 32 | if(a[my_offset_id] != 0) {count += 1;} 33 | 34 | xoff = 1; 35 | yoff = 0; 36 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 37 | if(a[my_offset_id] != 0) {count += 1;} 38 | 39 | xoff = 2; 40 | yoff = -1; 41 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 42 | if(a[my_offset_id] != 0) {count += 1;} 43 | 44 | xoff = 1; 45 | yoff = -1; 46 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 47 | if(a[my_offset_id] != 0) {count += 1;} 48 | 49 | 50 | int c_out = a[my_id]; 51 | if(count >= 2 && count <= 6){c_out = a[my_id] + 1;} 52 | if((count >= 2 && count <= 2) || count == 4) {c_out = 0;} 53 | 54 | if(c_out >= 1278) {c_out = 1278;} 55 | 56 | c[my_id] = c_out; 57 | 58 | 59 | } 60 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/Count/SierBox/SierBox2-12.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = 0; 15 | yoff = 0; 16 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 17 | if(a[my_offset_id] != 0) {count += 1;} 18 | 19 | xoff = -1; 20 | yoff = 0; 21 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 22 | if(a[my_offset_id] != 0) {count += 1;} 23 | 24 | xoff = 1; 25 | yoff = 0; 26 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 27 | if(a[my_offset_id] != 0) {count += 1;} 28 | 29 | xoff = 2; 30 | yoff = 0; 31 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 32 | if(a[my_offset_id] != 0) {count += 1;} 33 | 34 | xoff = -2; 35 | yoff = 0; 36 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 37 | if(a[my_offset_id] != 0) {count += 1;} 38 | 39 | xoff = -1; 40 | yoff = -1; 41 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 42 | if(a[my_offset_id] != 0) {count += 1;} 43 | 44 | xoff = 1; 45 | yoff = -1; 46 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 47 | if(a[my_offset_id] != 0) {count += 1;} 48 | 49 | 50 | int c_out = a[my_id]; 51 | if(count >= 2 && count <= 7){c_out = a[my_id] + 1;} 52 | if((count >= 2 && count <= 3) || count == 6) {c_out = 0;} 53 | 54 | if(c_out >= 1278) {c_out = 1278;} 55 | 56 | c[my_id] = c_out; 57 | 58 | 59 | } 60 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/Count/SierBox/SierBox2-2.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = -2; 15 | yoff = 0; 16 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 17 | if(a[my_offset_id] != 0) {count += 1;} 18 | 19 | xoff = -1; 20 | yoff = 0; 21 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 22 | if(a[my_offset_id] != 0) {count += 1;} 23 | 24 | xoff = -1; 25 | yoff = -1; 26 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 27 | if(a[my_offset_id] != 0) {count += 1;} 28 | 29 | xoff = 0; 30 | yoff = -2; 31 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 32 | if(a[my_offset_id] != 0) {count += 1;} 33 | 34 | xoff = 1; 35 | yoff = 0; 36 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 37 | if(a[my_offset_id] != 0) {count += 1;} 38 | 39 | xoff = 2; 40 | yoff = 0; 41 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 42 | if(a[my_offset_id] != 0) {count += 1;} 43 | 44 | xoff = 1; 45 | yoff = -1; 46 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 47 | if(a[my_offset_id] != 0) {count += 1;} 48 | 49 | 50 | int c_out = a[my_id]; 51 | if(count >= 5 && count <= 6){c_out = a[my_id] + 1;} 52 | if(count == 2) {c_out = 0;} 53 | 54 | if(c_out >= 1278) {c_out = 1278;} 55 | 56 | c[my_id] = c_out; 57 | 58 | 59 | } 60 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/Count/SierBox/SierBox2-3.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = -2; 15 | yoff = 0; 16 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 17 | if(a[my_offset_id] != 0) {count += 1;} 18 | 19 | xoff = -1; 20 | yoff = 0; 21 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 22 | if(a[my_offset_id] != 0) {count += 1;} 23 | 24 | xoff = -1; 25 | yoff = -1; 26 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 27 | if(a[my_offset_id] != 0) {count += 1;} 28 | 29 | xoff = 0; 30 | yoff = -2; 31 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 32 | if(a[my_offset_id] != 0) {count += 1;} 33 | 34 | xoff = 1; 35 | yoff = 0; 36 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 37 | if(a[my_offset_id] != 0) {count += 1;} 38 | 39 | xoff = 2; 40 | yoff = 0; 41 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 42 | if(a[my_offset_id] != 0) {count += 1;} 43 | 44 | xoff = 1; 45 | yoff = -1; 46 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 47 | if(a[my_offset_id] != 0) {count += 1;} 48 | 49 | 50 | int c_out = a[my_id]; 51 | if(count >= 4 && count <= 6){c_out = a[my_id] + 1;} 52 | if(count == 2 || count == 3) {c_out = 0;} 53 | 54 | if(c_out >= 1278) {c_out = 1278;} 55 | 56 | c[my_id] = c_out; 57 | 58 | 59 | } 60 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/Count/SierBox/SierBox2-4.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = -2; 15 | yoff = 0; 16 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 17 | if(a[my_offset_id] != 0) {count += 1;} 18 | 19 | xoff = -1; 20 | yoff = 0; 21 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 22 | if(a[my_offset_id] != 0) {count += 1;} 23 | 24 | xoff = -1; 25 | yoff = -1; 26 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 27 | if(a[my_offset_id] != 0) {count += 1;} 28 | 29 | xoff = 0; 30 | yoff = -2; 31 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 32 | if(a[my_offset_id] != 0) {count += 1;} 33 | 34 | xoff = 1; 35 | yoff = 0; 36 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 37 | if(a[my_offset_id] != 0) {count += 1;} 38 | 39 | xoff = 2; 40 | yoff = 0; 41 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 42 | if(a[my_offset_id] != 0) {count += 1;} 43 | 44 | xoff = 1; 45 | yoff = -1; 46 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 47 | if(a[my_offset_id] != 0) {count += 1;} 48 | 49 | 50 | int c_out = a[my_id]; 51 | if(count >= 4 && count <= 6){c_out = a[my_id] + 1;} 52 | if(count >= 1 && count <= 3) {c_out = 0;} 53 | 54 | if(c_out >= 1278) {c_out = 1278;} 55 | 56 | c[my_id] = c_out; 57 | 58 | 59 | } 60 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/Count/SierBox/SierBox2-5.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = -2; 15 | yoff = 0; 16 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 17 | if(a[my_offset_id] != 0) {count += 1;} 18 | 19 | xoff = -1; 20 | yoff = 0; 21 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 22 | if(a[my_offset_id] != 0) {count += 1;} 23 | 24 | xoff = -1; 25 | yoff = -1; 26 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 27 | if(a[my_offset_id] != 0) {count += 1;} 28 | 29 | xoff = 0; 30 | yoff = 0; 31 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 32 | if(a[my_offset_id] != 0) {count += 1;} 33 | 34 | xoff = 1; 35 | yoff = 0; 36 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 37 | if(a[my_offset_id] != 0) {count += 1;} 38 | 39 | xoff = 2; 40 | yoff = 0; 41 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 42 | if(a[my_offset_id] != 0) {count += 1;} 43 | 44 | xoff = 1; 45 | yoff = -1; 46 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 47 | if(a[my_offset_id] != 0) {count += 1;} 48 | 49 | 50 | int c_out = a[my_id]; 51 | if(count >= 3 && count <= 5){c_out = a[my_id] + 1;} 52 | if((count >= 1 && count <= 2) || count == 7) {c_out = 0;} 53 | 54 | if(c_out >= 1278) {c_out = 1278;} 55 | 56 | c[my_id] = c_out; 57 | 58 | 59 | } 60 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/Count/SierBox/SierBox2-6.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = -2; 15 | yoff = 0; 16 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 17 | if(a[my_offset_id] != 0) {count += 1;} 18 | 19 | xoff = -1; 20 | yoff = 0; 21 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 22 | if(a[my_offset_id] != 0) {count += 1;} 23 | 24 | xoff = -1; 25 | yoff = -1; 26 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 27 | if(a[my_offset_id] != 0) {count += 1;} 28 | 29 | xoff = 0; 30 | yoff = 0; 31 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 32 | if(a[my_offset_id] != 0) {count += 1;} 33 | 34 | xoff = 1; 35 | yoff = 0; 36 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 37 | if(a[my_offset_id] != 0) {count += 1;} 38 | 39 | xoff = 2; 40 | yoff = 0; 41 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 42 | if(a[my_offset_id] != 0) {count += 1;} 43 | 44 | xoff = 1; 45 | yoff = -1; 46 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 47 | if(a[my_offset_id] != 0) {count += 1;} 48 | 49 | 50 | int c_out = a[my_id]; 51 | if(count >= 4 && count <= 5){c_out = a[my_id] + 1;} 52 | if((count >= 2 && count <= 2) || count == 7) {c_out = 0;} 53 | 54 | if(c_out >= 1278) {c_out = 1278;} 55 | 56 | c[my_id] = c_out; 57 | 58 | 59 | } 60 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/Count/SierBox/SierBox2-7.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = -1; 15 | yoff = 1; 16 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 17 | if(a[my_offset_id] != 0) {count += 1;} 18 | 19 | xoff = -1; 20 | yoff = 0; 21 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 22 | if(a[my_offset_id] != 0) {count += 1;} 23 | 24 | xoff = -1; 25 | yoff = -1; 26 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 27 | if(a[my_offset_id] != 0) {count += 1;} 28 | 29 | xoff = 0; 30 | yoff = 0; 31 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 32 | if(a[my_offset_id] != 0) {count += 1;} 33 | 34 | xoff = 1; 35 | yoff = 0; 36 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 37 | if(a[my_offset_id] != 0) {count += 1;} 38 | 39 | xoff = 1; 40 | yoff = 1; 41 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 42 | if(a[my_offset_id] != 0) {count += 1;} 43 | 44 | xoff = 1; 45 | yoff = -1; 46 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 47 | if(a[my_offset_id] != 0) {count += 1;} 48 | 49 | 50 | int c_out = a[my_id]; 51 | if(count >= 4 && count <= 7){c_out = a[my_id] + 1;} 52 | if((count >= 2 && count <= 2) || count == 3) {c_out = 0;} 53 | 54 | if(c_out >= 1278) {c_out = 1278;} 55 | 56 | c[my_id] = c_out; 57 | 58 | 59 | } 60 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/Count/SierBox/SierBox2-8.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = -1; 15 | yoff = 1; 16 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 17 | if(a[my_offset_id] != 0) {count += 1;} 18 | 19 | xoff = -1; 20 | yoff = 0; 21 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 22 | if(a[my_offset_id] != 0) {count += 1;} 23 | 24 | xoff = -1; 25 | yoff = -1; 26 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 27 | if(a[my_offset_id] != 0) {count += 1;} 28 | 29 | xoff = 0; 30 | yoff = 0; 31 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 32 | if(a[my_offset_id] != 0) {count += 1;} 33 | 34 | xoff = 1; 35 | yoff = 0; 36 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 37 | if(a[my_offset_id] != 0) {count += 1;} 38 | 39 | xoff = 1; 40 | yoff = 1; 41 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 42 | if(a[my_offset_id] != 0) {count += 1;} 43 | 44 | xoff = 1; 45 | yoff = -1; 46 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 47 | if(a[my_offset_id] != 0) {count += 1;} 48 | 49 | 50 | int c_out = a[my_id]; 51 | if(count >= 3 && count <= 6){c_out = a[my_id] + 1;} 52 | if((count >= 2 && count <= 2) || count == 4) {c_out = 0;} 53 | 54 | if(c_out >= 1278) {c_out = 1278;} 55 | 56 | c[my_id] = c_out; 57 | 58 | 59 | } 60 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/Count/SierBox/SierBox2-9.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = -2; 15 | yoff = -1; 16 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 17 | if(a[my_offset_id] != 0) {count += 1;} 18 | 19 | xoff = -1; 20 | yoff = 0; 21 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 22 | if(a[my_offset_id] != 0) {count += 1;} 23 | 24 | xoff = -1; 25 | yoff = -1; 26 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 27 | if(a[my_offset_id] != 0) {count += 1;} 28 | 29 | xoff = 0; 30 | yoff = 0; 31 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 32 | if(a[my_offset_id] != 0) {count += 1;} 33 | 34 | xoff = 1; 35 | yoff = 0; 36 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 37 | if(a[my_offset_id] != 0) {count += 1;} 38 | 39 | xoff = 2; 40 | yoff = -1; 41 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 42 | if(a[my_offset_id] != 0) {count += 1;} 43 | 44 | xoff = 1; 45 | yoff = -1; 46 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 47 | if(a[my_offset_id] != 0) {count += 1;} 48 | 49 | 50 | int c_out = a[my_id]; 51 | if(count >= 1 && count <= 6){c_out = a[my_id] + 1;} 52 | if((count >= 2 && count <= 2) || count == 4) {c_out = 0;} 53 | 54 | if(c_out >= 1278) {c_out = 1278;} 55 | 56 | c[my_id] = c_out; 57 | 58 | 59 | } 60 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/Count/Snake.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = -3; 15 | yoff = 0; 16 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 17 | if(a[my_offset_id] == 1) {count += 1;} 18 | 19 | xoff = -2; 20 | yoff = -2; 21 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 22 | if(a[my_offset_id] == 1) {count += 1;} 23 | 24 | xoff = -2; 25 | yoff = -1; 26 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 27 | if(a[my_offset_id] == 1) {count += 1;} 28 | 29 | xoff = -2; 30 | yoff = 1; 31 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 32 | if(a[my_offset_id] == 1) {count += 1;} 33 | 34 | xoff = -2; 35 | yoff = 2; 36 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 37 | if(a[my_offset_id] == 1) {count += 1;} 38 | 39 | xoff = -1; 40 | yoff = -2; 41 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 42 | if(a[my_offset_id] == 1) {count += 1;} 43 | 44 | xoff = -1; 45 | yoff = 2; 46 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 47 | if(a[my_offset_id] == 1) {count += 1;} 48 | 49 | xoff = 0; 50 | yoff = -3; 51 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 52 | if(a[my_offset_id] == 1) {count += 1;} 53 | 54 | xoff = 0; 55 | yoff = 3; 56 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 57 | if(a[my_offset_id] == 1) {count += 1;} 58 | 59 | xoff = 1; 60 | yoff = -2; 61 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 62 | if(a[my_offset_id] == 1) {count += 1;} 63 | 64 | xoff = 1; 65 | yoff = 2; 66 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 67 | if(a[my_offset_id] == 1) {count += 1;} 68 | 69 | xoff = 2; 70 | yoff = -2; 71 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 72 | if(a[my_offset_id] == 1) {count += 1;} 73 | 74 | xoff = 2; 75 | yoff = -1; 76 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 77 | if(a[my_offset_id] == 1) {count += 1;} 78 | 79 | xoff = 2; 80 | yoff = 1; 81 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 82 | if(a[my_offset_id] == 1) {count += 1;} 83 | 84 | xoff = 2; 85 | yoff = 2; 86 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 87 | if(a[my_offset_id] == 1) {count += 1;} 88 | 89 | xoff = 3; 90 | yoff = 0; 91 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 92 | if(a[my_offset_id] == 1) {count += 1;} 93 | 94 | //:7,17,0, 95 | //:3,5,1, 96 | //:0,2,0, 97 | 98 | int c_out = a[my_id]; 99 | if(count >= 7) {c_out = 0;} 100 | if(count >= 3 && count <= 5) {c_out = 1;} 101 | if(count <= 2) {c_out = 0;} 102 | c[my_id] = c_out; 103 | 104 | 105 | } -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/Count/Strands.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = 0; 15 | yoff = -1; 16 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 17 | if(a[my_offset_id] == 1) {count += 1;} 18 | 19 | xoff = 1; 20 | yoff = -1; 21 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 22 | if(a[my_offset_id] == 1) {count += 1;} 23 | 24 | xoff = 0; 25 | yoff = -2; 26 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 27 | if(a[my_offset_id] == 1) {count += 1;} 28 | 29 | xoff = -1; 30 | yoff = -1; 31 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 32 | if(a[my_offset_id] == 1) {count += 1;} 33 | 34 | int c_out = a[my_id]; 35 | if(count >= 3) {c_out = 0;} 36 | if(count == 2) {c_out = 1;} 37 | if(count == 1) {c_out = 0;} 38 | c[my_id] = c_out; 39 | 40 | 41 | } 42 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/ParameterMaps/Asym.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | int NMax = 8; 15 | int modSize = ySize/NMax; 16 | 17 | int modx = i/modSize; 18 | int mody = j/modSize; 19 | 20 | int upper = modx%NMax; 21 | int birth = mody%NMax; 22 | int lower = 2; 23 | 24 | int BRange = 1; 25 | int BOffset = 0; 26 | 27 | 28 | xoff = 0; 29 | yoff = -1; 30 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 31 | if(a[my_offset_id] != 0) {count += 1;} 32 | 33 | xoff = 1; 34 | yoff = -1; 35 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 36 | if(a[my_offset_id] != 0) {count += 1;} 37 | 38 | xoff = 1; 39 | yoff = 0; 40 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 41 | if(a[my_offset_id] != 0) {count += 1;} 42 | 43 | xoff = -1; 44 | yoff = 0; 45 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 46 | if(a[my_offset_id] != 0) {count += 1;} 47 | 48 | xoff = -1; 49 | yoff = -1; 50 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 51 | if(a[my_offset_id] != 0) {count += 1;} 52 | 53 | 54 | 55 | 56 | 57 | int c_out = a[my_id]; 58 | 59 | if(count <= lower) {c_out = 0;} 60 | if(count >= birth+BOffset && count <= birth+BRange) {c_out = a[my_id] + 1;} 61 | if(count >= upper) {c_out = 0;} 62 | 63 | c[my_id] = c_out; 64 | 65 | } 66 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/ParameterMaps/M1-R2_Explore.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | 15 | int NMax = 8; 16 | int modSize = ySize/NMax; 17 | 18 | int modx = i/modSize; 19 | int mody = j/modSize; 20 | 21 | int upper = modx%NMax; 22 | int birth = mody%NMax; 23 | int lower = 1; 24 | 25 | xoff = 0; 26 | yoff = -1; 27 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 28 | if(a[my_offset_id] != 0) {count += 1;} 29 | 30 | xoff = 1; 31 | yoff = -1; 32 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 33 | if(a[my_offset_id] != 0) {count += 1;} 34 | 35 | xoff = 1; 36 | yoff = 0; 37 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 38 | if(a[my_offset_id] != 0) {count += 1;} 39 | 40 | xoff = 1; 41 | yoff = 1; 42 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 43 | if(a[my_offset_id] != 0) {count += 1;} 44 | 45 | xoff = 0; 46 | yoff = 1; 47 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 48 | if(a[my_offset_id] != 0) {count += 1;} 49 | 50 | xoff = -1; 51 | yoff = 1; 52 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 53 | if(a[my_offset_id] != 0) {count += 1;} 54 | 55 | xoff = -1; 56 | yoff = 0; 57 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 58 | if(a[my_offset_id] != 0) {count += 1;} 59 | 60 | xoff = -1; 61 | yoff = -1; 62 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 63 | if(a[my_offset_id] != 0) {count += 1;} 64 | 65 | int c_out = a[my_id]; 66 | 67 | /*if(count >= upper) {c_out = 0;} 68 | if(count <= lower) {c_out = 0;} 69 | if(count == birth) {c_out = a[my_id] + 1;}*/ //Most, but 2 CGoL 70 | 71 | /*if(count == birth) {c_out = a[my_id] + 1;} 72 | if(count <= lower) {c_out = 0;} 73 | if(count >= upper) {c_out = 0;}*/ //least, but only one CGoL 74 | 75 | /*if(count >= upper) {c_out = 0;} 76 | if(count == birth) {c_out = a[my_id] + 1;} 77 | if(count <= lower) {c_out = 0;}*/ //mid, 2 CGoL, does full screen clear each round 78 | 79 | if(count <= lower) {c_out = 0;} 80 | if(count >= birth && count <= birth+1) {c_out = a[my_id] + 1;} 81 | if(count >= upper) {c_out = 0;} //best so far 82 | 83 | 84 | //2 y, 5&6 x 85 | 86 | 87 | c[my_id] = c_out; 88 | 89 | 90 | } 91 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/ParameterMaps/M1-R3_Explore.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | 15 | int NMax = 8; 16 | int modSize = ySize/NMax; 17 | 18 | int modx = i/modSize; 19 | int mody = j/modSize; 20 | 21 | int upper = modx%NMax; 22 | int birth = mody%NMax; 23 | int lower = 1; 24 | 25 | int BRange = 3; 26 | 27 | xoff = 0; 28 | yoff = -1; 29 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 30 | if(a[my_offset_id] != 0) {count += 1;} 31 | 32 | xoff = 1; 33 | yoff = -1; 34 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 35 | if(a[my_offset_id] != 0) {count += 1;} 36 | 37 | xoff = 1; 38 | yoff = 0; 39 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 40 | if(a[my_offset_id] != 0) {count += 1;} 41 | 42 | xoff = 1; 43 | yoff = 1; 44 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 45 | if(a[my_offset_id] != 0) {count += 1;} 46 | 47 | xoff = 0; 48 | yoff = 1; 49 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 50 | if(a[my_offset_id] != 0) {count += 1;} 51 | 52 | xoff = -1; 53 | yoff = 1; 54 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 55 | if(a[my_offset_id] != 0) {count += 1;} 56 | 57 | xoff = -1; 58 | yoff = 0; 59 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 60 | if(a[my_offset_id] != 0) {count += 1;} 61 | 62 | xoff = -1; 63 | yoff = -1; 64 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 65 | if(a[my_offset_id] != 0) {count += 1;} 66 | 67 | int c_out = a[my_id]; 68 | 69 | /*if(count >= upper) {c_out = 0;} 70 | if(count <= lower) {c_out = 0;} 71 | if(count == birth) {c_out = a[my_id] + 1;}*/ //Most, but 2 CGoL 72 | 73 | /*if(count == birth) {c_out = a[my_id] + 1;} 74 | if(count <= lower) {c_out = 0;} 75 | if(count >= upper) {c_out = 0;}*/ //least, but only one CGoL 76 | 77 | /*if(count >= upper) {c_out = 0;} 78 | if(count == birth) {c_out = a[my_id] + 1;} 79 | if(count <= lower) {c_out = 0;}*/ //mid, 2 CGoL, does full screen clear each round 80 | 81 | if(count <= lower) {c_out = 0;} 82 | if(count >= birth && count <= birth+BRange) {c_out = a[my_id] + 1;} 83 | if(count >= upper) {c_out = 0;} //best so far 84 | 85 | 86 | //2 y, 5&6 x 87 | 88 | 89 | c[my_id] = c_out; 90 | 91 | 92 | } 93 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/ParameterMaps/M2-Glider.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | int NMax = 16; 15 | int modSize = ySize/NMax; 16 | 17 | int modx = i/modSize; 18 | int mody = j/modSize; 19 | 20 | int upper = modx%NMax; 21 | int birth = 7; 22 | int lower = mody%NMax; 23 | 24 | int BRange = 2; 25 | int BOffset = 0; 26 | 27 | 28 | xoff = 0; 29 | yoff = -1; 30 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 31 | if(a[my_offset_id] != 0) {count += 1;} 32 | 33 | xoff = 1; 34 | yoff = -1; 35 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 36 | if(a[my_offset_id] != 0) {count += 1;} 37 | 38 | xoff = 1; 39 | yoff = 0; 40 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 41 | if(a[my_offset_id] != 0) {count += 1;} 42 | 43 | xoff = 1; 44 | yoff = 1; 45 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 46 | if(a[my_offset_id] != 0) {count += 1;} 47 | 48 | xoff = 0; 49 | yoff = 1; 50 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 51 | if(a[my_offset_id] != 0) {count += 1;} 52 | 53 | xoff = -1; 54 | yoff = 1; 55 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 56 | if(a[my_offset_id] != 0) {count += 1;} 57 | 58 | xoff = -1; 59 | yoff = 0; 60 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 61 | if(a[my_offset_id] != 0) {count += 1;} 62 | 63 | xoff = -1; 64 | yoff = -1; 65 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 66 | if(a[my_offset_id] != 0) {count += 1;} 67 | 68 | 69 | 70 | 71 | xoff = 0; 72 | yoff = -2; 73 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 74 | if(a[my_offset_id] != 0) {count += 1;} 75 | 76 | xoff = 1; 77 | yoff = -2; 78 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 79 | if(a[my_offset_id] != 0) {count += 1;} 80 | 81 | xoff = 2; 82 | yoff = -2; 83 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 84 | if(a[my_offset_id] != 0) {count += 1;} 85 | 86 | xoff = 2; 87 | yoff = -1; 88 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 89 | if(a[my_offset_id] != 0) {count += 1;} 90 | 91 | xoff = 2; 92 | yoff = 0; 93 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 94 | if(a[my_offset_id] != 0) {count += 1;} 95 | 96 | xoff = 2; 97 | yoff = 1; 98 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 99 | if(a[my_offset_id] != 0) {count += 1;} 100 | 101 | xoff = 2; 102 | yoff = 2; 103 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 104 | if(a[my_offset_id] != 0) {count += 1;} 105 | 106 | xoff = 1; 107 | yoff = 2; 108 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 109 | if(a[my_offset_id] != 0) {count += 1;} 110 | 111 | xoff = 0; 112 | yoff = 2; 113 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 114 | if(a[my_offset_id] != 0) {count += 1;} 115 | 116 | xoff = -1; 117 | yoff = 2; 118 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 119 | if(a[my_offset_id] != 0) {count += 1;} 120 | 121 | xoff = -2; 122 | yoff = 2; 123 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 124 | if(a[my_offset_id] != 0) {count += 1;} 125 | 126 | xoff = -2; 127 | yoff = 1; 128 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 129 | if(a[my_offset_id] != 0) {count += 1;} 130 | 131 | xoff = -2; 132 | yoff = 0; 133 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 134 | if(a[my_offset_id] != 0) {count += 1;} 135 | 136 | xoff = -2; 137 | yoff = -1; 138 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 139 | if(a[my_offset_id] != 0) {count += 1;} 140 | 141 | xoff = -2; 142 | yoff = -2; 143 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 144 | if(a[my_offset_id] != 0) {count += 1;} 145 | 146 | xoff = -1; 147 | yoff = -2; 148 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 149 | if(a[my_offset_id] != 0) {count += 1;} 150 | 151 | 152 | 153 | 154 | 155 | 156 | int c_out = a[my_id]; 157 | 158 | if(count <= lower) {c_out = 0;} 159 | if(count >= birth+BOffset && count <= birth+BRange) {c_out = a[my_id] + 1;} 160 | if(count >= upper) {c_out = 0;} 161 | 162 | c[my_id] = c_out; 163 | 164 | } 165 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/ParameterMaps/M2-R2_Explore.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | int NMax = 16; 15 | int modSize = ySize/NMax; 16 | 17 | int modx = i/modSize; 18 | int mody = j/modSize; 19 | 20 | int upper = modx%NMax; 21 | int birth = mody%NMax; 22 | int lower = 4; 23 | 24 | 25 | xoff = 0; 26 | yoff = -1; 27 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 28 | if(a[my_offset_id] != 0) {count += 1;} 29 | 30 | xoff = 1; 31 | yoff = -1; 32 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 33 | if(a[my_offset_id] != 0) {count += 1;} 34 | 35 | xoff = 1; 36 | yoff = 0; 37 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 38 | if(a[my_offset_id] != 0) {count += 1;} 39 | 40 | xoff = 1; 41 | yoff = 1; 42 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 43 | if(a[my_offset_id] != 0) {count += 1;} 44 | 45 | xoff = 0; 46 | yoff = 1; 47 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 48 | if(a[my_offset_id] != 0) {count += 1;} 49 | 50 | xoff = -1; 51 | yoff = 1; 52 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 53 | if(a[my_offset_id] != 0) {count += 1;} 54 | 55 | xoff = -1; 56 | yoff = 0; 57 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 58 | if(a[my_offset_id] != 0) {count += 1;} 59 | 60 | xoff = -1; 61 | yoff = -1; 62 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 63 | if(a[my_offset_id] != 0) {count += 1;} 64 | 65 | 66 | 67 | 68 | xoff = 0; 69 | yoff = -2; 70 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 71 | if(a[my_offset_id] != 0) {count += 1;} 72 | 73 | xoff = 1; 74 | yoff = -2; 75 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 76 | if(a[my_offset_id] != 0) {count += 1;} 77 | 78 | xoff = 2; 79 | yoff = -2; 80 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 81 | if(a[my_offset_id] != 0) {count += 1;} 82 | 83 | xoff = 2; 84 | yoff = -1; 85 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 86 | if(a[my_offset_id] != 0) {count += 1;} 87 | 88 | xoff = 2; 89 | yoff = 0; 90 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 91 | if(a[my_offset_id] != 0) {count += 1;} 92 | 93 | xoff = 2; 94 | yoff = 1; 95 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 96 | if(a[my_offset_id] != 0) {count += 1;} 97 | 98 | xoff = 2; 99 | yoff = 2; 100 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 101 | if(a[my_offset_id] != 0) {count += 1;} 102 | 103 | xoff = 1; 104 | yoff = 2; 105 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 106 | if(a[my_offset_id] != 0) {count += 1;} 107 | 108 | xoff = 0; 109 | yoff = 2; 110 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 111 | if(a[my_offset_id] != 0) {count += 1;} 112 | 113 | xoff = -1; 114 | yoff = 2; 115 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 116 | if(a[my_offset_id] != 0) {count += 1;} 117 | 118 | xoff = -2; 119 | yoff = 2; 120 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 121 | if(a[my_offset_id] != 0) {count += 1;} 122 | 123 | xoff = -2; 124 | yoff = 1; 125 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 126 | if(a[my_offset_id] != 0) {count += 1;} 127 | 128 | xoff = -2; 129 | yoff = 0; 130 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 131 | if(a[my_offset_id] != 0) {count += 1;} 132 | 133 | xoff = -2; 134 | yoff = -1; 135 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 136 | if(a[my_offset_id] != 0) {count += 1;} 137 | 138 | xoff = -2; 139 | yoff = -2; 140 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 141 | if(a[my_offset_id] != 0) {count += 1;} 142 | 143 | xoff = -1; 144 | yoff = -2; 145 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 146 | if(a[my_offset_id] != 0) {count += 1;} 147 | 148 | int c_out = a[my_id]; 149 | 150 | if(count <= lower) {c_out = 0;} 151 | if(count >= birth && count <= birth+1) {c_out = a[my_id] + 1;} 152 | if(count >= upper) {c_out = 0;} 153 | 154 | c[my_id] = c_out; 155 | 156 | } 157 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/ParameterMaps/M2-R3_Explore.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | int NMax = 32; 15 | int modSize = ySize/NMax; 16 | 17 | int modx = i/modSize; 18 | int mody = j/modSize; 19 | 20 | int upper = modx%NMax; 21 | int birth = mody%NMax; 22 | int lower = 4; 23 | 24 | 25 | xoff = 0; 26 | yoff = -1; 27 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 28 | if(a[my_offset_id] != 0) {count += 1;} 29 | 30 | xoff = 1; 31 | yoff = -1; 32 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 33 | if(a[my_offset_id] != 0) {count += 1;} 34 | 35 | xoff = 1; 36 | yoff = 0; 37 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 38 | if(a[my_offset_id] != 0) {count += 1;} 39 | 40 | xoff = 1; 41 | yoff = 1; 42 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 43 | if(a[my_offset_id] != 0) {count += 1;} 44 | 45 | xoff = 0; 46 | yoff = 1; 47 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 48 | if(a[my_offset_id] != 0) {count += 1;} 49 | 50 | xoff = -1; 51 | yoff = 1; 52 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 53 | if(a[my_offset_id] != 0) {count += 1;} 54 | 55 | xoff = -1; 56 | yoff = 0; 57 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 58 | if(a[my_offset_id] != 0) {count += 1;} 59 | 60 | xoff = -1; 61 | yoff = -1; 62 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 63 | if(a[my_offset_id] != 0) {count += 1;} 64 | 65 | 66 | 67 | 68 | xoff = 0; 69 | yoff = -2; 70 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 71 | if(a[my_offset_id] != 0) {count += 1;} 72 | 73 | xoff = 1; 74 | yoff = -2; 75 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 76 | if(a[my_offset_id] != 0) {count += 1;} 77 | 78 | xoff = 2; 79 | yoff = -2; 80 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 81 | if(a[my_offset_id] != 0) {count += 1;} 82 | 83 | xoff = 2; 84 | yoff = -1; 85 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 86 | if(a[my_offset_id] != 0) {count += 1;} 87 | 88 | xoff = 2; 89 | yoff = 0; 90 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 91 | if(a[my_offset_id] != 0) {count += 1;} 92 | 93 | xoff = 2; 94 | yoff = 1; 95 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 96 | if(a[my_offset_id] != 0) {count += 1;} 97 | 98 | xoff = 2; 99 | yoff = 2; 100 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 101 | if(a[my_offset_id] != 0) {count += 1;} 102 | 103 | xoff = 1; 104 | yoff = 2; 105 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 106 | if(a[my_offset_id] != 0) {count += 1;} 107 | 108 | xoff = 0; 109 | yoff = 2; 110 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 111 | if(a[my_offset_id] != 0) {count += 1;} 112 | 113 | xoff = -1; 114 | yoff = 2; 115 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 116 | if(a[my_offset_id] != 0) {count += 1;} 117 | 118 | xoff = -2; 119 | yoff = 2; 120 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 121 | if(a[my_offset_id] != 0) {count += 1;} 122 | 123 | xoff = -2; 124 | yoff = 1; 125 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 126 | if(a[my_offset_id] != 0) {count += 1;} 127 | 128 | xoff = -2; 129 | yoff = 0; 130 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 131 | if(a[my_offset_id] != 0) {count += 1;} 132 | 133 | xoff = -2; 134 | yoff = -1; 135 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 136 | if(a[my_offset_id] != 0) {count += 1;} 137 | 138 | xoff = -2; 139 | yoff = -2; 140 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 141 | if(a[my_offset_id] != 0) {count += 1;} 142 | 143 | xoff = -1; 144 | yoff = -2; 145 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 146 | if(a[my_offset_id] != 0) {count += 1;} 147 | 148 | int c_out = a[my_id]; 149 | 150 | if(count <= lower) {c_out = 0;} 151 | if(count >= birth && count <= birth+3) {c_out = a[my_id] + 1;} 152 | if(count >= upper) {c_out = 0;} 153 | 154 | c[my_id] = c_out; 155 | 156 | } 157 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/ParameterMaps/M2-R4_Explore.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | int NMax = 32; 15 | int modSize = ySize/NMax; 16 | 17 | int modx = i/modSize; 18 | int mody = j/modSize; 19 | 20 | int upper = modx%NMax; 21 | int birth = mody%NMax; 22 | int lower = 3; 23 | 24 | int BRange = 4; 25 | 26 | xoff = 0; 27 | yoff = -1; 28 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 29 | if(a[my_offset_id] != 0) {count += 1;} 30 | 31 | xoff = 1; 32 | yoff = -1; 33 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 34 | if(a[my_offset_id] != 0) {count += 1;} 35 | 36 | xoff = 1; 37 | yoff = 0; 38 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 39 | if(a[my_offset_id] != 0) {count += 1;} 40 | 41 | xoff = 1; 42 | yoff = 1; 43 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 44 | if(a[my_offset_id] != 0) {count += 1;} 45 | 46 | xoff = 0; 47 | yoff = 1; 48 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 49 | if(a[my_offset_id] != 0) {count += 1;} 50 | 51 | xoff = -1; 52 | yoff = 1; 53 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 54 | if(a[my_offset_id] != 0) {count += 1;} 55 | 56 | xoff = -1; 57 | yoff = 0; 58 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 59 | if(a[my_offset_id] != 0) {count += 1;} 60 | 61 | xoff = -1; 62 | yoff = -1; 63 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 64 | if(a[my_offset_id] != 0) {count += 1;} 65 | 66 | 67 | 68 | 69 | xoff = 0; 70 | yoff = -2; 71 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 72 | if(a[my_offset_id] != 0) {count += 1;} 73 | 74 | xoff = 1; 75 | yoff = -2; 76 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 77 | if(a[my_offset_id] != 0) {count += 1;} 78 | 79 | xoff = 2; 80 | yoff = -2; 81 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 82 | if(a[my_offset_id] != 0) {count += 1;} 83 | 84 | xoff = 2; 85 | yoff = -1; 86 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 87 | if(a[my_offset_id] != 0) {count += 1;} 88 | 89 | xoff = 2; 90 | yoff = 0; 91 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 92 | if(a[my_offset_id] != 0) {count += 1;} 93 | 94 | xoff = 2; 95 | yoff = 1; 96 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 97 | if(a[my_offset_id] != 0) {count += 1;} 98 | 99 | xoff = 2; 100 | yoff = 2; 101 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 102 | if(a[my_offset_id] != 0) {count += 1;} 103 | 104 | xoff = 1; 105 | yoff = 2; 106 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 107 | if(a[my_offset_id] != 0) {count += 1;} 108 | 109 | xoff = 0; 110 | yoff = 2; 111 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 112 | if(a[my_offset_id] != 0) {count += 1;} 113 | 114 | xoff = -1; 115 | yoff = 2; 116 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 117 | if(a[my_offset_id] != 0) {count += 1;} 118 | 119 | xoff = -2; 120 | yoff = 2; 121 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 122 | if(a[my_offset_id] != 0) {count += 1;} 123 | 124 | xoff = -2; 125 | yoff = 1; 126 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 127 | if(a[my_offset_id] != 0) {count += 1;} 128 | 129 | xoff = -2; 130 | yoff = 0; 131 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 132 | if(a[my_offset_id] != 0) {count += 1;} 133 | 134 | xoff = -2; 135 | yoff = -1; 136 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 137 | if(a[my_offset_id] != 0) {count += 1;} 138 | 139 | xoff = -2; 140 | yoff = -2; 141 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 142 | if(a[my_offset_id] != 0) {count += 1;} 143 | 144 | xoff = -1; 145 | yoff = -2; 146 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 147 | if(a[my_offset_id] != 0) {count += 1;} 148 | 149 | int c_out = a[my_id]; 150 | 151 | if(count <= lower) {c_out = 0;} 152 | if(count >= birth && count <= birth+BRange) {c_out = a[my_id] + 1;} 153 | if(count >= upper) {c_out = 0;} 154 | 155 | c[my_id] = c_out; 156 | 157 | } 158 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/ParameterMaps/Moore2_Explore.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | int NMax = 16; 15 | int modSize = ySize/NMax; 16 | 17 | int modx = i/modSize; 18 | int mody = j/modSize; 19 | 20 | int upper = modx%NMax; 21 | int birth = mody%NMax; 22 | int lower = 3; 23 | 24 | 25 | xoff = 0; 26 | yoff = -1; 27 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 28 | if(a[my_offset_id] != 0) {count += 1;} 29 | 30 | xoff = 1; 31 | yoff = -1; 32 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 33 | if(a[my_offset_id] != 0) {count += 1;} 34 | 35 | xoff = 1; 36 | yoff = 0; 37 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 38 | if(a[my_offset_id] != 0) {count += 1;} 39 | 40 | xoff = 1; 41 | yoff = 1; 42 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 43 | if(a[my_offset_id] != 0) {count += 1;} 44 | 45 | xoff = 0; 46 | yoff = 1; 47 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 48 | if(a[my_offset_id] != 0) {count += 1;} 49 | 50 | xoff = -1; 51 | yoff = 1; 52 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 53 | if(a[my_offset_id] != 0) {count += 1;} 54 | 55 | xoff = -1; 56 | yoff = 0; 57 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 58 | if(a[my_offset_id] != 0) {count += 1;} 59 | 60 | xoff = -1; 61 | yoff = -1; 62 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 63 | if(a[my_offset_id] != 0) {count += 1;} 64 | 65 | 66 | 67 | 68 | xoff = 0; 69 | yoff = -2; 70 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 71 | if(a[my_offset_id] != 0) {count += 1;} 72 | 73 | xoff = 1; 74 | yoff = -2; 75 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 76 | if(a[my_offset_id] != 0) {count += 1;} 77 | 78 | xoff = 2; 79 | yoff = -2; 80 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 81 | if(a[my_offset_id] != 0) {count += 1;} 82 | 83 | xoff = 2; 84 | yoff = -1; 85 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 86 | if(a[my_offset_id] != 0) {count += 1;} 87 | 88 | xoff = 2; 89 | yoff = 0; 90 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 91 | if(a[my_offset_id] != 0) {count += 1;} 92 | 93 | xoff = 2; 94 | yoff = 1; 95 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 96 | if(a[my_offset_id] != 0) {count += 1;} 97 | 98 | xoff = 2; 99 | yoff = 2; 100 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 101 | if(a[my_offset_id] != 0) {count += 1;} 102 | 103 | xoff = 1; 104 | yoff = 2; 105 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 106 | if(a[my_offset_id] != 0) {count += 1;} 107 | 108 | xoff = 0; 109 | yoff = 2; 110 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 111 | if(a[my_offset_id] != 0) {count += 1;} 112 | 113 | xoff = -1; 114 | yoff = 2; 115 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 116 | if(a[my_offset_id] != 0) {count += 1;} 117 | 118 | xoff = -2; 119 | yoff = 2; 120 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 121 | if(a[my_offset_id] != 0) {count += 1;} 122 | 123 | xoff = -2; 124 | yoff = 1; 125 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 126 | if(a[my_offset_id] != 0) {count += 1;} 127 | 128 | xoff = -2; 129 | yoff = 0; 130 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 131 | if(a[my_offset_id] != 0) {count += 1;} 132 | 133 | xoff = -2; 134 | yoff = -1; 135 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 136 | if(a[my_offset_id] != 0) {count += 1;} 137 | 138 | xoff = -2; 139 | yoff = -2; 140 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 141 | if(a[my_offset_id] != 0) {count += 1;} 142 | 143 | xoff = -1; 144 | yoff = -2; 145 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 146 | if(a[my_offset_id] != 0) {count += 1;} 147 | 148 | int c_out = a[my_id]; 149 | 150 | if(count <= lower) {c_out = 0;} 151 | if(count == birth) {c_out = a[my_id] + 1;} 152 | if(count >= upper) {c_out = 0;} 153 | 154 | c[my_id] = c_out; 155 | 156 | } 157 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/ParameterMaps/Moore_Explore.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | 15 | int NMax = 8; 16 | int modSize = ySize/NMax; 17 | 18 | int modx = i/modSize; 19 | int mody = j/modSize; 20 | 21 | int upper = modx%NMax; 22 | int birth = mody%NMax; 23 | int lower = 1; 24 | 25 | xoff = 0; 26 | yoff = -1; 27 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 28 | if(a[my_offset_id] != 0) {count += 1;} 29 | 30 | xoff = 1; 31 | yoff = -1; 32 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 33 | if(a[my_offset_id] != 0) {count += 1;} 34 | 35 | xoff = 1; 36 | yoff = 0; 37 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 38 | if(a[my_offset_id] != 0) {count += 1;} 39 | 40 | xoff = 1; 41 | yoff = 1; 42 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 43 | if(a[my_offset_id] != 0) {count += 1;} 44 | 45 | xoff = 0; 46 | yoff = 1; 47 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 48 | if(a[my_offset_id] != 0) {count += 1;} 49 | 50 | xoff = -1; 51 | yoff = 1; 52 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 53 | if(a[my_offset_id] != 0) {count += 1;} 54 | 55 | xoff = -1; 56 | yoff = 0; 57 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 58 | if(a[my_offset_id] != 0) {count += 1;} 59 | 60 | xoff = -1; 61 | yoff = -1; 62 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 63 | if(a[my_offset_id] != 0) {count += 1;} 64 | 65 | int c_out = a[my_id]; 66 | 67 | /*if(count >= upper) {c_out = 0;} 68 | if(count <= lower) {c_out = 0;} 69 | if(count == birth) {c_out = a[my_id] + 1;}*/ //Most, but 2 CGoL 70 | 71 | /*if(count == birth) {c_out = a[my_id] + 1;} 72 | if(count <= lower) {c_out = 0;} 73 | if(count >= upper) {c_out = 0;}*/ //least, but only one CGoL 74 | 75 | /*if(count >= upper) {c_out = 0;} 76 | if(count == birth) {c_out = a[my_id] + 1;} 77 | if(count <= lower) {c_out = 0;}*/ //mid, 2 CGoL, does full screen clear each round 78 | 79 | if(count <= lower) {c_out = 0;} 80 | if(count == birth) {c_out = a[my_id] + 1;} 81 | if(count >= upper) {c_out = 0;} //best so far 82 | 83 | 84 | 85 | 86 | 87 | c[my_id] = c_out; 88 | 89 | 90 | } 91 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/ParameterMaps/Prime.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, const int offset, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | if((i+(offset)) % (j) == 0) {c[my_id] = a[my_id]+1;} else {c[my_id] = 0;} 12 | 13 | 14 | } 15 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/ParameterMaps/SierBox-3.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | int NMax = 8; 15 | int modSize = ySize/NMax; 16 | 17 | int modx = i/modSize; 18 | int mody = j/modSize; 19 | 20 | int upper = modx%NMax; 21 | int birth = mody%NMax; 22 | int lower = 0; 23 | 24 | int BRange = 2; 25 | 26 | int c_out = a[my_id]; 27 | 28 | xoff = -1; 29 | yoff = -1; 30 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 31 | if(a[my_offset_id] != 0) {count += 1;} 32 | 33 | xoff = 1; 34 | yoff = -1; 35 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 36 | if(a[my_offset_id] != 0) {count += 1;} 37 | 38 | xoff = -1; 39 | yoff = 0; 40 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 41 | if(a[my_offset_id] != 0) {count += 1;} 42 | 43 | xoff = 1; 44 | yoff = 0; 45 | my_offset_id = ((my_id + xoff)&(ySize-1) ) + ((j*ySize + ySize*yoff)&(tSize-1)); 46 | if(a[my_offset_id] != 0) {count += 1;} 47 | 48 | //if(count <= lower) {c_out = 0;} 49 | if(count >= birth && count <= birth+BRange) {c_out = a[my_id] + 1;} 50 | if(count >= upper) {c_out = 0;} 51 | 52 | 53 | //if(count >= 2 && count <= 4){c_out = a[my_id] + 1;} 54 | if(count == 2) {c_out = 0;} 55 | 56 | if(c_out >= 1278) {c_out = 1278;} 57 | c[my_id] = c_out; 58 | 59 | } 60 | -------------------------------------------------------------------------------- /ConwayCL-Final/RuleKernels/ParameterMaps/copy of Feeders.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | if((i+4096) % (j+4096) == 2) {c[my_id] = a[my_id]+1;} else {c[my_id] = 0;} 12 | 13 | 14 | } 15 | -------------------------------------------------------------------------------- /ConwayCL-Final/RulePlaylist: -------------------------------------------------------------------------------- 1 | ./RuleKernels/Count/MooreWire-2.cl,./RuleKernels/Count/Multiple Attractors/EW-FMA7-16.cl,./RuleKernels/Count/Multiple Attractors/EW-FMA7-2.cl,./RuleKernels/Count/MeltingHills.cl,./RuleKernels/Count/Multiple Attractors/MiniAtom-2.cl,./RuleKernels/Count/Multiple Attractors/Feeders-14.cl,./RuleKernels/Count/Atoms/SmallAtom/AtomSmall-2.cl,./RuleKernels/Count/Atoms/Atom-ThreeRings-1.cl,./RuleKernels/Count/Honeycomb/Honeycomb-4.cl,./RuleKernels/Count/WG-NoMod.cl, -------------------------------------------------------------------------------- /ConwayCL-Final/SeedImages/HorizLines-1-128.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfiniteSearchSpace/PyCl-Convergence/d29f3fd08e872be2949d9a6743ffef6e88c38d92/ConwayCL-Final/SeedImages/HorizLines-1-128.bmp -------------------------------------------------------------------------------- /ConwayCL-Final/SeedImages/HorizLines-1-512.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfiniteSearchSpace/PyCl-Convergence/d29f3fd08e872be2949d9a6743ffef6e88c38d92/ConwayCL-Final/SeedImages/HorizLines-1-512.bmp -------------------------------------------------------------------------------- /ConwayCL-Final/SeedImages/NonUniform-1024.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfiniteSearchSpace/PyCl-Convergence/d29f3fd08e872be2949d9a6743ffef6e88c38d92/ConwayCL-Final/SeedImages/NonUniform-1024.bmp -------------------------------------------------------------------------------- /ConwayCL-Final/SeedImages/NonUniform-2048.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfiniteSearchSpace/PyCl-Convergence/d29f3fd08e872be2949d9a6743ffef6e88c38d92/ConwayCL-Final/SeedImages/NonUniform-2048.bmp -------------------------------------------------------------------------------- /ConwayCL-Final/SeedImages/NonUniform-512.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfiniteSearchSpace/PyCl-Convergence/d29f3fd08e872be2949d9a6743ffef6e88c38d92/ConwayCL-Final/SeedImages/NonUniform-512.bmp -------------------------------------------------------------------------------- /ConwayCL-Final/SeedImages/Rule Specific/Atom-Many-512.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfiniteSearchSpace/PyCl-Convergence/d29f3fd08e872be2949d9a6743ffef6e88c38d92/ConwayCL-Final/SeedImages/Rule Specific/Atom-Many-512.bmp -------------------------------------------------------------------------------- /ConwayCL-Final/SeedImages/Rule Specific/Atom-Original-1024.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfiniteSearchSpace/PyCl-Convergence/d29f3fd08e872be2949d9a6743ffef6e88c38d92/ConwayCL-Final/SeedImages/Rule Specific/Atom-Original-1024.bmp -------------------------------------------------------------------------------- /ConwayCL-Final/SeedImages/Rule Specific/Atom-TwoRing-1024.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfiniteSearchSpace/PyCl-Convergence/d29f3fd08e872be2949d9a6743ffef6e88c38d92/ConwayCL-Final/SeedImages/Rule Specific/Atom-TwoRing-1024.bmp -------------------------------------------------------------------------------- /ConwayCL-Final/SeedImages/Rule Specific/Atom-TwoRing-3-1024.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfiniteSearchSpace/PyCl-Convergence/d29f3fd08e872be2949d9a6743ffef6e88c38d92/ConwayCL-Final/SeedImages/Rule Specific/Atom-TwoRing-3-1024.bmp -------------------------------------------------------------------------------- /ConwayCL-Final/SeedImages/Rule Specific/Atom-TwoRing-3-512.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfiniteSearchSpace/PyCl-Convergence/d29f3fd08e872be2949d9a6743ffef6e88c38d92/ConwayCL-Final/SeedImages/Rule Specific/Atom-TwoRing-3-512.bmp -------------------------------------------------------------------------------- /ConwayCL-Final/SeedImages/Rule Specific/Atom-TwoRing-512.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfiniteSearchSpace/PyCl-Convergence/d29f3fd08e872be2949d9a6743ffef6e88c38d92/ConwayCL-Final/SeedImages/Rule Specific/Atom-TwoRing-512.bmp -------------------------------------------------------------------------------- /ConwayCL-Final/SeedImages/Rule Specific/AtomThreeRing2-1024.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfiniteSearchSpace/PyCl-Convergence/d29f3fd08e872be2949d9a6743ffef6e88c38d92/ConwayCL-Final/SeedImages/Rule Specific/AtomThreeRing2-1024.bmp -------------------------------------------------------------------------------- /ConwayCL-Final/SeedImages/Rule Specific/EpicWaves-1024.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfiniteSearchSpace/PyCl-Convergence/d29f3fd08e872be2949d9a6743ffef6e88c38d92/ConwayCL-Final/SeedImages/Rule Specific/EpicWaves-1024.bmp -------------------------------------------------------------------------------- /ConwayCL-Final/SeedImages/Rule Specific/EpicWaves.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfiniteSearchSpace/PyCl-Convergence/d29f3fd08e872be2949d9a6743ffef6e88c38d92/ConwayCL-Final/SeedImages/Rule Specific/EpicWaves.bmp -------------------------------------------------------------------------------- /ConwayCL-Final/SeedImages/Rule Specific/MooreWire-1024.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfiniteSearchSpace/PyCl-Convergence/d29f3fd08e872be2949d9a6743ffef6e88c38d92/ConwayCL-Final/SeedImages/Rule Specific/MooreWire-1024.bmp -------------------------------------------------------------------------------- /ConwayCL-Final/SeedImages/Rule Specific/MooreWire2-512.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfiniteSearchSpace/PyCl-Convergence/d29f3fd08e872be2949d9a6743ffef6e88c38d92/ConwayCL-Final/SeedImages/Rule Specific/MooreWire2-512.bmp -------------------------------------------------------------------------------- /ConwayCL-Final/SeedImages/Rule Specific/Tubes-1024.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfiniteSearchSpace/PyCl-Convergence/d29f3fd08e872be2949d9a6743ffef6e88c38d92/ConwayCL-Final/SeedImages/Rule Specific/Tubes-1024.bmp -------------------------------------------------------------------------------- /ConwayCL-Final/SeedImages/SquareTest-2048.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfiniteSearchSpace/PyCl-Convergence/d29f3fd08e872be2949d9a6743ffef6e88c38d92/ConwayCL-Final/SeedImages/SquareTest-2048.bmp -------------------------------------------------------------------------------- /ConwayCL-Final/SeedImages/Squaretest-1024.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfiniteSearchSpace/PyCl-Convergence/d29f3fd08e872be2949d9a6743ffef6e88c38d92/ConwayCL-Final/SeedImages/Squaretest-1024.bmp -------------------------------------------------------------------------------- /ConwayCL-Final/SeedImages/TestImage-1024.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfiniteSearchSpace/PyCl-Convergence/d29f3fd08e872be2949d9a6743ffef6e88c38d92/ConwayCL-Final/SeedImages/TestImage-1024.bmp -------------------------------------------------------------------------------- /Early Tests/ConwayCL/001a/Basic Checks/BasicDraw.py: -------------------------------------------------------------------------------- 1 | import pygame 2 | import math 3 | 4 | pygame.init() 5 | 6 | win = pygame.display.set_mode((480,320)) 7 | 8 | runNow=True 9 | i=0 10 | while runNow: 11 | #Draw 12 | win.set_at((62,63),(255,255,255)) 13 | win.set_at((63,63),(255,255,255)) 14 | win.set_at((64,64),(255,255,255)) 15 | 16 | i+=19 17 | if i%17 == (i**2)%41: 18 | win.set_at((i%480,i%320),(0,255,0)) 19 | 20 | 21 | 22 | #Render 23 | pygame.display.update() 24 | 25 | #On Closing 26 | for event in pygame.event.get(): 27 | if (event.type == pygame.QUIT): 28 | runNow = False 29 | 30 | pygame.quit() 31 | 32 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/001a/Basic Checks/BasicGUI.py: -------------------------------------------------------------------------------- 1 | import sys 2 | from Tkinter import * 3 | 4 | mainGui = Tk() 5 | 6 | mainGui.geometry('480x320') 7 | 8 | drawSurf = Canvas(mainGui,width=400,height=300) 9 | 10 | print dir(drawSurf) 11 | drawSurf.create_rectangle(10, 10, 100, 100, fill="black") 12 | 13 | drawSurf.pack() 14 | 15 | mainGui.mainloop() 16 | 17 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/001a/Basic Checks/Hello.py: -------------------------------------------------------------------------------- 1 | print 'hello world' -------------------------------------------------------------------------------- /Early Tests/ConwayCL/001a/Basic Checks/ImportCheck.py: -------------------------------------------------------------------------------- 1 | import pyopencl as cl 2 | print "- BEGIN -\n" 3 | 4 | platforms = cl.get_platforms() 5 | 6 | print platforms 7 | print "\n" 8 | 9 | print platforms[0].extensions 10 | print "\n" 11 | 12 | devices = platforms[0].get_devices() 13 | 14 | print devices 15 | print "\n" 16 | 17 | gpu_devices = platforms[0].get_devices(cl.device_type.GPU) 18 | 19 | print gpu_devices 20 | print "\n" 21 | 22 | print dir(gpu_devices[0]) -------------------------------------------------------------------------------- /Early Tests/ConwayCL/001a/ConwayCPU/BasicDraw.py: -------------------------------------------------------------------------------- 1 | import pygame 2 | import Conway 3 | 4 | pygame.init() 5 | 6 | win = pygame.display.set_mode((480,320)) 7 | 8 | #CGoL controller 9 | c = Conway 10 | 11 | #gameloop 12 | runNow=True 13 | while runNow: 14 | 15 | #Prepare to draw 16 | c.conway_tick(c.con.worldspace) 17 | 18 | #Draw 19 | for i in range(0, len(c.con.worldspace)): 20 | for j in range(0, len(c.con.worldspace[i])): 21 | win.set_at((i, j), (0,c.con.worldspace[i][j]*255,0)) 22 | 23 | #Render 24 | pygame.display.update() 25 | 26 | #On Closing 27 | for event in pygame.event.get(): 28 | if (event.type == pygame.QUIT): 29 | runNow = False 30 | 31 | pygame.quit() 32 | 33 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/001a/ConwayCPU/Conway.py: -------------------------------------------------------------------------------- 1 | import random 2 | from copy import deepcopy 3 | 4 | #Transition function for CGoL 5 | def conway_tick(worldspace): 6 | #set up neighbourhood to assess 7 | nhood = ((-1,0),(-1,-1),(-1,1),(0,-1),(0,1),(1,-1),(1,0),(1,1)) 8 | #make a buffer to hold the previous state 9 | world_buffer = deepcopy(worldspace) 10 | 11 | for i in range(0, len(world_buffer)): 12 | for j in range(0, len(worldspace[i])): 13 | 14 | #assess neighbourhood 15 | ncount = 0 16 | for n in nhood: 17 | if world_buffer[(i+n[0])%len(worldspace)][(j+n[1])%len(worldspace[i])] != 0: 18 | ncount+=1 19 | 20 | #Do the evolution 21 | if ncount >= 4: 22 | worldspace[i][j] = 0 23 | elif ncount <= 1: 24 | worldspace[i][j] = 0 25 | elif ncount == 3: 26 | worldspace[i][j] = 1 27 | 28 | 29 | 30 | #Populate world with random 31 | def seed_world(worldspace): 32 | for i in range(0, len(worldspace)): 33 | for j in range(0, len(worldspace[i])): 34 | worldspace[i][j] = random.SystemRandom().randint(0, 1) 35 | 36 | #Basic testing, CGoL manager 37 | class Conway: 38 | cw=480 39 | ch=320 40 | worldspace=[[0 for i in range(ch)] for j in range(cw)] 41 | seed_world(worldspace) 42 | 43 | #Break static 44 | con = Conway() 45 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/001b/BasicDraw.py: -------------------------------------------------------------------------------- 1 | import pygame 2 | import Conway 3 | 4 | pygame.init() 5 | 6 | win = pygame.display.set_mode((480,320)) 7 | 8 | #CGoL controller 9 | c = Conway 10 | 11 | #gameloop 12 | runNow=True 13 | while runNow: 14 | 15 | #Prepare to draw 16 | c.conway_tick(c.con.worldspace) 17 | 18 | #Draw 19 | for i in range(0, len(c.con.worldspace)): 20 | for j in range(0, len(c.con.worldspace[i])): 21 | win.set_at((i, j), (0,c.con.worldspace[i][j]*255,0)) 22 | 23 | #Render 24 | pygame.display.update() 25 | 26 | #On Closing 27 | for event in pygame.event.get(): 28 | if (event.type == pygame.QUIT): 29 | runNow = False 30 | 31 | pygame.quit() 32 | 33 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/001b/Conway.py: -------------------------------------------------------------------------------- 1 | import random 2 | from copy import deepcopy 3 | 4 | #Transition function for CGoL 5 | def conway_tick(worldspace): 6 | #set up neighbourhood to assess 7 | nhood = ((-1,0),(-1,-1),(-1,1),(0,-1),(0,1),(1,-1),(1,0),(1,1)) 8 | #make a buffer to hold the previous state 9 | world_buffer = deepcopy(worldspace) 10 | 11 | for i in range(0, len(world_buffer)): 12 | for j in range(0, len(worldspace[i])): 13 | 14 | #assess neighbourhood 15 | ncount = 0 16 | for n in nhood: 17 | if world_buffer[(i+n[0])%len(worldspace)][(j+n[1])%len(worldspace[i])] != 0: 18 | ncount+=1 19 | 20 | #Do the evolution 21 | if ncount >= 4: 22 | worldspace[i][j] = 0 23 | elif ncount <= 1: 24 | worldspace[i][j] = 0 25 | elif ncount == 3: 26 | worldspace[i][j] = 1 27 | 28 | 29 | 30 | #Populate world with random 31 | def seed_world(worldspace): 32 | for i in range(0, len(worldspace)): 33 | for j in range(0, len(worldspace[i])): 34 | worldspace[i][j] = random.SystemRandom().randint(0, 1) 35 | 36 | #Basic testing, CGoL manager 37 | class Conway: 38 | cw=480 39 | ch=320 40 | worldspace=[[0 for i in range(ch)] for j in range(cw)] 41 | seed_world(worldspace) 42 | 43 | #Break static 44 | con = Conway() 45 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/001b/main.py: -------------------------------------------------------------------------------- 1 | #Port from Adventures in OpenCL Part1 to PyOpenCL 2 | # http://enja.org/2010/07/13/adventures-in-opencl-part-1-getting-started/ 3 | # http://documen.tician.de/pyopencl/ 4 | 5 | import pyopencl as cl 6 | import numpy 7 | import pygame 8 | import Conway 9 | 10 | class CL: 11 | def __init__(self): 12 | self.ctx = cl.create_some_context() 13 | self.queue = cl.CommandQueue(self.ctx) 14 | 15 | def loadProgram(self, filename): 16 | #read in the OpenCL source file as a string 17 | f = open(filename, 'r') 18 | fstr = "".join(f.readlines()) 19 | print fstr 20 | #create the program 21 | self.program = cl.Program(self.ctx, fstr).build() 22 | 23 | def popCorn(self): 24 | mf = cl.mem_flags 25 | 26 | #initialize client side (CPU) arrays 27 | self.a = numpy.array(range(10), dtype=numpy.float32) 28 | self.b = numpy.array(range(10), dtype=numpy.float32) 29 | 30 | #create OpenCL buffers 31 | self.a_buf = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=self.a) 32 | self.b_buf = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=self.b) 33 | self.dest_buf = cl.Buffer(self.ctx, mf.WRITE_ONLY, self.b.nbytes) 34 | 35 | def rePopCorn(self): 36 | mf = cl.mem_flags 37 | 38 | #create OpenCL buffers 39 | self.a_buf = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=self.a) 40 | self.b_buf = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=self.b) 41 | self.dest_buf = cl.Buffer(self.ctx, mf.WRITE_ONLY, self.b.nbytes) 42 | 43 | def execute(self): 44 | self.program.part1(self.queue, self.a.shape, None, self.a_buf, self.b_buf, self.dest_buf) 45 | c = numpy.empty_like(self.a) 46 | cl.enqueue_read_buffer(self.queue, self.dest_buf, c).wait() 47 | self.a = c 48 | print "a", self.a 49 | print "b", self.b 50 | print "c", c 51 | print 'works' 52 | 53 | def conway(self): 54 | pygame.init() 55 | win = pygame.display.set_mode((480,320)) 56 | #CGoL controller 57 | c = Conway 58 | #gameloop 59 | runNow=True 60 | while runNow: 61 | #Prepare to draw 62 | c.conway_tick(c.con.worldspace) 63 | #Draw 64 | for i in range(0, len(c.con.worldspace)): 65 | for j in range(0, len(c.con.worldspace[i])): 66 | win.set_at((i, j), (0,c.con.worldspace[i][j]*255,0)) 67 | #Render 68 | pygame.display.update() 69 | example.rePopCorn() 70 | example.execute() 71 | #On Closing 72 | for event in pygame.event.get(): 73 | if (event.type == pygame.QUIT): 74 | runNow = False 75 | pygame.quit() 76 | 77 | if __name__ == "__main__": 78 | example = CL() 79 | example.loadProgram("part1.cl") 80 | example.popCorn() 81 | example.execute() 82 | example.conway() 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/001b/part1.cl: -------------------------------------------------------------------------------- 1 | __kernel void part1(__global float* a, __global float* b, __global float* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | 5 | c[i] = a[i] + b[i]; 6 | } 7 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/002/BasicDraw.py: -------------------------------------------------------------------------------- 1 | import pygame 2 | import Conway 3 | 4 | pygame.init() 5 | 6 | win = pygame.display.set_mode((480,320)) 7 | 8 | #CGoL controller 9 | c = Conway 10 | 11 | #gameloop 12 | runNow=True 13 | while runNow: 14 | 15 | #Prepare to draw 16 | c.conway_tick(c.con.worldspace) 17 | 18 | #Draw 19 | for i in range(0, len(c.con.worldspace)): 20 | for j in range(0, len(c.con.worldspace[i])): 21 | win.set_at((i, j), (0,c.con.worldspace[i][j]*255,0)) 22 | 23 | #Render 24 | pygame.display.update() 25 | 26 | #On Closing 27 | for event in pygame.event.get(): 28 | if (event.type == pygame.QUIT): 29 | runNow = False 30 | 31 | pygame.quit() 32 | 33 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/002/Conway.py: -------------------------------------------------------------------------------- 1 | import random 2 | from copy import deepcopy 3 | 4 | #Transition function for CGoL 5 | def conway_tick(worldspace): 6 | #set up neighbourhood to assess 7 | nhood = ((-1,0),(-1,-1),(-1,1),(0,-1),(0,1),(1,-1),(1,0),(1,1)) 8 | #make a buffer to hold the previous state 9 | world_buffer = deepcopy(worldspace) 10 | 11 | for i in range(0, len(world_buffer)): 12 | for j in range(0, len(worldspace[i])): 13 | 14 | #assess neighbourhood 15 | ncount = 0 16 | for n in nhood: 17 | if world_buffer[(i+n[0])%len(worldspace)][(j+n[1])%len(worldspace[i])] != 0: 18 | ncount+=1 19 | 20 | #Do the evolution 21 | if ncount >= 4: 22 | worldspace[i][j] = 0 23 | elif ncount <= 1: 24 | worldspace[i][j] = 0 25 | elif ncount == 3: 26 | worldspace[i][j] = 1 27 | 28 | 29 | 30 | #Populate world with random 31 | def seed_world(worldspace): 32 | for i in range(0, len(worldspace)): 33 | for j in range(0, len(worldspace[i])): 34 | worldspace[i][j] = random.SystemRandom().randint(0, 1) 35 | 36 | #Basic testing, CGoL manager 37 | class Conway: 38 | cw=480 39 | ch=320 40 | worldspace=[[0 for i in range(ch)] for j in range(cw)] 41 | seed_world(worldspace) 42 | 43 | #Break static 44 | con = Conway() 45 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/002/main.py: -------------------------------------------------------------------------------- 1 | #Port from Adventures in OpenCL Part1 to PyOpenCL 2 | # http://enja.org/2010/07/13/adventures-in-opencl-part-1-getting-started/ 3 | # http://documen.tician.de/pyopencl/ 4 | 5 | import pyopencl as cl 6 | import numpy 7 | import pygame 8 | import Conway 9 | import random 10 | 11 | class CL: 12 | def __init__(self): 13 | self.ctx = cl.create_some_context() 14 | self.queue = cl.CommandQueue(self.ctx) 15 | 16 | def loadProgram(self, filename): 17 | #read in the OpenCL source file as a string 18 | f = open(filename, 'r') 19 | fstr = "".join(f.readlines()) 20 | print fstr 21 | #create the program 22 | self.program = cl.Program(self.ctx, fstr).build() 23 | 24 | def popCorn(self): 25 | mf = cl.mem_flags 26 | 27 | #initialize client side (CPU) arrays 28 | self.a = numpy.array([[8 for i in range(320)] for j in range(480)], dtype=numpy.int32) 29 | 30 | #create OpenCL buffers 31 | self.a_buf = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=self.a) 32 | self.dest_buf = cl.Buffer(self.ctx, mf.WRITE_ONLY, self.a.nbytes) 33 | 34 | def execute(self): 35 | self.program.part1(self.queue, self.a.shape, None, self.a_buf, self.dest_buf) 36 | c = numpy.empty_like(self.a) 37 | cl.enqueue_read_buffer(self.queue, self.dest_buf, c).wait() 38 | print c 39 | #return c 40 | 41 | def conway(self): 42 | pygame.init() 43 | win = pygame.display.set_mode((480,320)) 44 | #CGoL controller 45 | c = Conway 46 | #gameloop 47 | runNow=True 48 | while runNow: 49 | #Prepare to draw 50 | #example.popCorn() 51 | conworld = example.execute() 52 | #print conworld 53 | #Draw 54 | for i in range(0, len(conworld)): 55 | for j in range(0, len(conworld[i])): 56 | print '' + str(i) + ' ' + str(j) + ' ' + str(conworld[i][j]) 57 | if conworld[i][j] == 0 or conworld[i][j] == 1: 58 | win.set_at((i, j), (0,conworld[i][j]*255,0)) 59 | #Render 60 | pygame.display.update() 61 | 62 | #On Closing 63 | for event in pygame.event.get(): 64 | if (event.type == pygame.QUIT): 65 | runNow = False 66 | pygame.quit() 67 | 68 | if __name__ == "__main__": 69 | example = CL() 70 | example.loadProgram("part1.cl") 71 | example.popCorn() 72 | #conworld = example.execute() 73 | example.execute() 74 | #print conworld 75 | #example.conway() 76 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/002/part1.cl: -------------------------------------------------------------------------------- 1 | __kernel void part1(__global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | c[i] = a[i]; 5 | } 6 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/003/main.py: -------------------------------------------------------------------------------- 1 | #Port from Adventures in OpenCL Part1 to PyOpenCL 2 | # http://enja.org/2010/07/13/adventures-in-opencl-part-1-getting-started/ 3 | # http://documen.tician.de/pyopencl/ 4 | 5 | import pyopencl as cl 6 | import numpy 7 | numpy.set_printoptions(threshold=numpy.nan) 8 | 9 | class CL: 10 | def __init__(self): 11 | self.ctx = cl.create_some_context() 12 | self.queue = cl.CommandQueue(self.ctx) 13 | 14 | def loadProgram(self, filename): 15 | #read in the OpenCL source file as a string 16 | f = open(filename, 'r') 17 | fstr = "".join(f.readlines()) 18 | print fstr 19 | #create the program 20 | self.program = cl.Program(self.ctx, fstr).build() 21 | 22 | def popCorn(self): 23 | mf = cl.mem_flags 24 | 25 | #initialize client side (CPU) arrays 26 | self.a = numpy.array([[1 for i in range(20)] for j in range(20)], dtype=numpy.int32) 27 | 28 | #create OpenCL buffers 29 | self.a_buf = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=self.a) 30 | self.dest_buf = cl.Buffer(self.ctx, mf.WRITE_ONLY, self.a.nbytes) 31 | 32 | def execute(self): 33 | self.program.part1(self.queue, self.a.shape, None, self.a_buf, self.dest_buf) 34 | c = numpy.empty_like(self.a) 35 | cl.enqueue_read_buffer(self.queue, self.dest_buf, c).wait() 36 | #print "a", self.a 37 | print "c", c 38 | 39 | 40 | 41 | if __name__ == "__main__": 42 | example = CL() 43 | example.loadProgram("part1.cl") 44 | example.popCorn() 45 | example.execute() 46 | 47 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/003/part1.cl: -------------------------------------------------------------------------------- 1 | __kernel void part1(__global float* a, __global float* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | 5 | c[i] = a[i] + a[i]; 6 | } 7 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/004 - First 2D kernal/main.py: -------------------------------------------------------------------------------- 1 | import pyopencl as cl 2 | import numpy 3 | numpy.set_printoptions(threshold=numpy.nan) 4 | 5 | class CL: 6 | def __init__(self): 7 | self.ctx = cl.create_some_context() 8 | self.queue = cl.CommandQueue(self.ctx) 9 | 10 | def loadProgram(self, filename): 11 | #read in the OpenCL source file as a string 12 | f = open(filename, 'r') 13 | fstr = "".join(f.readlines()) 14 | print fstr 15 | #create the program 16 | self.program = cl.Program(self.ctx, fstr).build() 17 | 18 | def popCorn(self): 19 | mf = cl.mem_flags 20 | 21 | #initialize client side (CPU) arrays 22 | self.a = numpy.ones((5,5), dtype=numpy.int32) 23 | 24 | #create OpenCL buffers 25 | self.a_buf = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=self.a) 26 | self.dest_buf = cl.Buffer(self.ctx, mf.WRITE_ONLY, self.a.nbytes) 27 | 28 | def execute(self): 29 | self.program.part1(self.queue, self.a.shape, None, self.a_buf, self.dest_buf) 30 | print "a", self.a 31 | c = numpy.zeros_like(self.a) 32 | print "PRE-c", c 33 | cl.enqueue_read_buffer(self.queue, self.dest_buf, c).wait() 34 | print "c", c 35 | 36 | 37 | 38 | if __name__ == "__main__": 39 | example = CL() 40 | example.loadProgram("part1.cl") 41 | example.popCorn() 42 | example.execute() 43 | 44 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/004 - First 2D kernal/part1.cl: -------------------------------------------------------------------------------- 1 | __kernel void part1(__global int* a, __global int* c) 2 | { 3 | 4 | unsigned int i = get_global_id(0); 5 | unsigned int j = get_global_id(1); 6 | 7 | unsigned int id = i+5*j; 8 | 9 | c[id] = a[id] + id; 10 | } 11 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/005 - 14200x14200 resolution/kTest.cl: -------------------------------------------------------------------------------- 1 | __kernel void Sum_A_ID(const int ySize, __global int* a, __global int* c) 2 | { 3 | 4 | unsigned int i = get_global_id(0); 5 | unsigned int j = get_global_id(1); 6 | 7 | unsigned int id = i + ySize*j; 8 | 9 | c[id] = a[id] + id; 10 | } 11 | 12 | __kernel void getID(const int ySize, __global int* c) 13 | { 14 | 15 | unsigned int i = get_global_id(0); 16 | unsigned int j = get_global_id(1); 17 | 18 | unsigned int id = i + ySize*j; 19 | 20 | c[id] = id; 21 | } 22 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/005 - 14200x14200 resolution/main.py: -------------------------------------------------------------------------------- 1 | import pyopencl as cl 2 | import numpy 3 | numpy.set_printoptions(threshold=numpy.nan) 4 | 5 | #Let's calculate 14200x14200, or 201,640,000/sec GPU array elements. ~2,073,600/sec on CPU. 6 | # ~100x speed or size increase. 7 | 8 | class CL: 9 | def __init__(self): 10 | self.ctx = cl.create_some_context() 11 | self.queue = cl.CommandQueue(self.ctx) 12 | 13 | #Load kernal file and load as internal program 14 | def loadProgram(self, filename): 15 | #read in the OpenCL source file as a string 16 | f = open(filename, 'r') 17 | fstr = "".join(f.readlines()) 18 | print fstr 19 | #create the program 20 | self.program = cl.Program(self.ctx, fstr).build() 21 | 22 | #Create the host structures and buffers 23 | def popCorn(self): 24 | mf = cl.mem_flags 25 | 26 | #initialize client side (CPU) arrays 27 | self.ar_ySize = numpy.int32(14200) 28 | self.a = numpy.ones((self.ar_ySize,self.ar_ySize), dtype=numpy.int32) 29 | 30 | #create OpenCL buffers 31 | self.a_buf = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=self.a) 32 | self.dest_buf = cl.Buffer(self.ctx, mf.WRITE_ONLY, self.a.nbytes) 33 | 34 | #Run Kernal, create buffer, fill buffer 35 | def execute(self): 36 | #self.program.Sum_A_ID(self.queue, self.a.shape, None, self.ar_ySize, self.a_buf, self.dest_buf) 37 | self.program.getID(self.queue, self.a.shape, None, self.ar_ySize, self.dest_buf) 38 | c = numpy.zeros_like(self.a) 39 | cl.enqueue_read_buffer(self.queue, self.dest_buf, c).wait() 40 | print "Done C!" 41 | print "Output Test: C[5][5] =", c[5][5] 42 | 43 | if __name__ == "__main__": 44 | example = CL() 45 | example.loadProgram("kTest.cl") 46 | example.popCorn() 47 | example.execute() -------------------------------------------------------------------------------- /Early Tests/ConwayCL/006 - Toggling the value of all cells/kTest.cl: -------------------------------------------------------------------------------- 1 | __kernel void Sum_A_ID(const int ySize, __global int* a, __global int* c) 2 | { 3 | 4 | unsigned int i = get_global_id(0); 5 | unsigned int j = get_global_id(1); 6 | 7 | unsigned int id = i + ySize*j; 8 | 9 | c[id] = a[id] + id; 10 | } 11 | 12 | __kernel void getID(const int ySize, __global int* c) 13 | { 14 | 15 | unsigned int i = get_global_id(0); 16 | unsigned int j = get_global_id(1); 17 | 18 | unsigned int id = i + ySize*j; 19 | 20 | c[id] = id; 21 | } 22 | 23 | __kernel void ToggleCell(const int ySize, __global int* a, __global int* c) 24 | { 25 | 26 | unsigned int i = get_global_id(0); 27 | unsigned int j = get_global_id(1); 28 | 29 | unsigned int id = i + ySize*j; 30 | 31 | if(a[id]==0){c[id]=1;}else{c[id]=0;} 32 | 33 | } -------------------------------------------------------------------------------- /Early Tests/ConwayCL/006 - Toggling the value of all cells/main.py: -------------------------------------------------------------------------------- 1 | import pyopencl as cl 2 | import numpy 3 | numpy.set_printoptions(threshold=numpy.nan) 4 | 5 | #Can calculate 14200x14200, GPU array elements 3 times a sec. 6 | # vs 1200x1200 on CPU. 7 | 8 | class CL: 9 | def __init__(self): 10 | self.ctx = cl.create_some_context() 11 | self.queue = cl.CommandQueue(self.ctx) 12 | 13 | #Load kernal file and load as internal program 14 | def loadProgram(self, filename): 15 | #read in the OpenCL source file as a string 16 | f = open(filename, 'r') 17 | fstr = "".join(f.readlines()) 18 | print fstr 19 | #create the program 20 | self.program = cl.Program(self.ctx, fstr).build() 21 | 22 | #Create the host structures and buffers 23 | def popCorn(self): 24 | mf = cl.mem_flags 25 | 26 | #initialize client side (CPU) arrays 27 | self.ar_ySize = numpy.int32(10000) 28 | self.a = numpy.ones((self.ar_ySize,self.ar_ySize), dtype=numpy.int32) 29 | self.c = numpy.ones((self.ar_ySize,self.ar_ySize), dtype=numpy.int32) 30 | #create OpenCL buffers 31 | self.a_buf = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=self.a) 32 | self.dest_buf = cl.Buffer(self.ctx, mf.WRITE_ONLY, self.a.nbytes) 33 | 34 | #Run Kernal, create buffer, fill buffer 35 | def execute(self): 36 | self.program.ToggleCell(self.queue, self.a.shape, None, self.ar_ySize, self.a_buf, self.dest_buf) 37 | cl.enqueue_read_buffer(self.queue, self.dest_buf, self.c).wait() 38 | self.a = self.c; 39 | print "Output Test: a[5][5] =", self.a[5][5] 40 | #Refresh buffers 41 | mf = cl.mem_flags 42 | self.a_buf = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=self.a) 43 | self.dest_buf = cl.Buffer(self.ctx, mf.WRITE_ONLY, self.a.nbytes) 44 | 45 | if __name__ == "__main__": 46 | example = CL() 47 | example.loadProgram("kTest.cl") 48 | example.popCorn() 49 | 50 | example.execute() 51 | example.execute() 52 | example.execute() 53 | example.execute() 54 | example.execute() 55 | example.execute() -------------------------------------------------------------------------------- /Early Tests/ConwayCL/007 - First CGoL/kTest.cl: -------------------------------------------------------------------------------- 1 | __kernel void Sum_A_ID(const int ySize, __global int* a, __global int* c) 2 | { 3 | 4 | unsigned int i = get_global_id(0); 5 | unsigned int j = get_global_id(1); 6 | 7 | unsigned int id = i + ySize*j; 8 | 9 | c[id] = a[id] + id; 10 | } 11 | 12 | __kernel void getID(const int ySize, __global int* c) 13 | { 14 | 15 | unsigned int i = get_global_id(0); 16 | unsigned int j = get_global_id(1); 17 | 18 | unsigned int id = i + ySize*j; 19 | 20 | c[id] = id; 21 | } 22 | 23 | __kernel void ToggleCell(const int ySize, __global int* a, __global int* c) 24 | { 25 | 26 | unsigned int i = get_global_id(0); 27 | unsigned int j = get_global_id(1); 28 | 29 | unsigned int id = i + ySize*j; 30 | 31 | if(a[id]==0){c[id]=1;}else{c[id]=0;} 32 | 33 | } 34 | 35 | __kernel void Conway(const int ySize, __global int* a, __global int* c) 36 | { 37 | 38 | unsigned int i = get_global_id(0); 39 | unsigned int j = get_global_id(1); 40 | unsigned int my_id = i + ySize*j; 41 | unsigned int count = 0; 42 | 43 | if(a[my_id - 1] == 1) {count = count + 1;} 44 | if(a[my_id + 1] == 1) {count = count + 1;} 45 | if(a[my_id - 1 - ySize] == 1) {count = count + 1;} 46 | if(a[my_id - 1 + ySize] == 1) {count = count + 1;} 47 | if(a[my_id + 1 - ySize] == 1) {count = count + 1;} 48 | if(a[my_id + 1 + ySize] == 1) {count = count + 1;} 49 | if(a[my_id - ySize] == 1) {count = count + 1;} 50 | if(a[my_id + ySize] == 1) {count = count + 1;} 51 | 52 | if(count != 2){ 53 | if(count==3){ 54 | c[my_id]=1; 55 | }else{ 56 | c[my_id]=0; 57 | } 58 | } 59 | 60 | } 61 | 62 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/007 - First CGoL/main.py: -------------------------------------------------------------------------------- 1 | import pyopencl as cl 2 | import numpy 3 | import random as r 4 | numpy.set_printoptions(threshold=numpy.nan) 5 | 6 | class CL: 7 | def __init__(self): 8 | self.ctx = cl.create_some_context() 9 | self.queue = cl.CommandQueue(self.ctx) 10 | 11 | #Load kernal file and load as internal program 12 | def loadProgram(self, filename): 13 | #read in the OpenCL source file as a string 14 | f = open(filename, 'r') 15 | fstr = "".join(f.readlines()) 16 | print fstr 17 | #create the program 18 | self.program = cl.Program(self.ctx, fstr).build() 19 | 20 | #Create the host structures and buffers 21 | def popCorn(self): 22 | mf = cl.mem_flags 23 | 24 | #initialize client side (CPU) arrays 25 | self.ar_ySize = numpy.int32(20) 26 | self.a = numpy.ones((self.ar_ySize,self.ar_ySize), dtype=numpy.int32) 27 | self.c = numpy.ones((self.ar_ySize,self.ar_ySize), dtype=numpy.int32) 28 | #create OpenCL buffers 29 | self.a_buf = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=self.a) 30 | self.dest_buf = cl.Buffer(self.ctx, mf.WRITE_ONLY, self.a.nbytes) 31 | 32 | #Run Kernal, create buffer, fill buffer 33 | def execute(self): 34 | self.program.Conway(self.queue, self.a.shape, None, self.ar_ySize, self.a_buf, self.dest_buf) 35 | cl.enqueue_read_buffer(self.queue, self.dest_buf, self.c).wait() 36 | self.a = self.c; 37 | print self.a 38 | #Refresh buffers 39 | mf = cl.mem_flags 40 | self.a_buf = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=self.a) 41 | self.dest_buf = cl.Buffer(self.ctx, mf.WRITE_ONLY, self.a.nbytes) 42 | 43 | #Run Kernal, create buffer, fill buffer 44 | def seed(self): 45 | self.c = numpy.ones((self.ar_ySize,self.ar_ySize), dtype=numpy.int32) 46 | self.a = self.c 47 | for i in range(self.ar_ySize): 48 | for j in range(self.ar_ySize): 49 | self.c[i][j] = r.randint(0,1) 50 | #Refresh buffers 51 | mf = cl.mem_flags 52 | self.a_buf = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=self.a) 53 | self.dest_buf = cl.Buffer(self.ctx, mf.WRITE_ONLY, self.a.nbytes) 54 | 55 | if __name__ == "__main__": 56 | example = CL() 57 | example.loadProgram("kTest.cl") 58 | example.popCorn() 59 | 60 | example.seed() 61 | 62 | for i in range(1000): 63 | example.execute() -------------------------------------------------------------------------------- /Early Tests/ConwayCL/008 - CGoL/kTest.cl: -------------------------------------------------------------------------------- 1 | __kernel void Sum_A_ID(const int ySize, __global int* a, __global int* c) 2 | { 3 | 4 | unsigned int i = get_global_id(0); 5 | unsigned int j = get_global_id(1); 6 | 7 | unsigned int id = i + ySize*j; 8 | 9 | c[id] = a[id] + id; 10 | } 11 | 12 | __kernel void getID(const int ySize, __global int* c) 13 | { 14 | 15 | unsigned int i = get_global_id(0); 16 | unsigned int j = get_global_id(1); 17 | 18 | unsigned int id = i + ySize*j; 19 | 20 | c[id] = id; 21 | } 22 | 23 | __kernel void ToggleCell(const int ySize, __global int* a, __global int* c) 24 | { 25 | 26 | unsigned int i = get_global_id(0); 27 | unsigned int j = get_global_id(1); 28 | 29 | unsigned int id = i + ySize*j; 30 | 31 | if(a[id]==0){c[id]=1;}else{c[id]=0;} 32 | 33 | } 34 | 35 | __kernel void Conway(const int ySize, __global int* a, __global int* c) 36 | { 37 | 38 | unsigned int i = get_global_id(0); 39 | unsigned int j = get_global_id(1); 40 | unsigned int my_id = i + ySize*j; 41 | unsigned int count = 0; 42 | 43 | if(a[my_id - 1] == 1) {count = count + 1;} 44 | if(a[my_id + 1] == 1) {count = count + 1;} 45 | if(a[my_id - 1 - ySize] == 1) {count = count + 1;} 46 | if(a[my_id - 1 + ySize] == 1) {count = count + 1;} 47 | if(a[my_id + 1 - ySize] == 1) {count = count + 1;} 48 | if(a[my_id + 1 + ySize] == 1) {count = count + 1;} 49 | if(a[my_id - ySize] == 1) {count = count + 1;} 50 | if(a[my_id + ySize] == 1) {count = count + 1;} 51 | 52 | if(count != 2){ 53 | if(count==3){ 54 | c[my_id]=1; 55 | }else{ 56 | c[my_id]=0; 57 | } 58 | } 59 | 60 | } 61 | 62 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/008 - CGoL/main.py: -------------------------------------------------------------------------------- 1 | import pyopencl as cl 2 | import numpy 3 | import random as r 4 | import datetime as date 5 | 6 | numpy.set_printoptions(threshold=numpy.nan) 7 | 8 | #Averages ~250.000,000 CGoL cell updates a second, 1GB NVIDIA 560ti 9 | # x*y*iterations = total = gpu time = cells/sec 10 | # 36*36*100000 = 129600000 = 27s = 4,800,000 11 | # 1000*1000*1000 = 1000000000 = 3.82s = 261,780,104 12 | # 1000*1000*5000 = 5000000000 = 18.82 = 265,674,814 13 | 14 | 15 | class CL: 16 | def __init__(self): 17 | self.ctx = cl.create_some_context() 18 | self.queue = cl.CommandQueue(self.ctx) 19 | 20 | #Load kernal file and load as internal program 21 | def loadProgram(self, filename): 22 | #read in the OpenCL source file as a string 23 | f = open(filename, 'r') 24 | fstr = "".join(f.readlines()) 25 | #print fstr 26 | #create the program 27 | self.program = cl.Program(self.ctx, fstr).build() 28 | 29 | #Create the host structures and buffers 30 | def popCorn(self): 31 | mf = cl.mem_flags 32 | 33 | #initialize client side (CPU) arrays 34 | self.ar_ySize = numpy.int32(36) 35 | self.a = numpy.ones((self.ar_ySize,self.ar_ySize), dtype=numpy.int32) 36 | self.c = numpy.ones((self.ar_ySize,self.ar_ySize), dtype=numpy.int32) 37 | #create OpenCL buffers 38 | self.a_buf = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=self.a) 39 | self.dest_buf = cl.Buffer(self.ctx, mf.WRITE_ONLY, self.a.nbytes) 40 | 41 | #Run Kernal, create buffer, fill buffer 42 | def execute(self): 43 | self.program.Conway(self.queue, self.a.shape, None, self.ar_ySize, self.a_buf, self.dest_buf) 44 | cl.enqueue_read_buffer(self.queue, self.dest_buf, self.c).wait() 45 | self.a = self.c; 46 | #Refresh buffers 47 | mf = cl.mem_flags 48 | self.a_buf = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=self.a) 49 | self.dest_buf = cl.Buffer(self.ctx, mf.WRITE_ONLY, self.a.nbytes) 50 | 51 | #Run Kernal, create buffer, fill buffer 52 | def seed(self): 53 | self.c = numpy.ones((self.ar_ySize,self.ar_ySize), dtype=numpy.int32) 54 | self.a = self.c 55 | for i in range(self.ar_ySize): 56 | for j in range(self.ar_ySize): 57 | self.c[i][j] = r.randint(0,1) 58 | #Refresh buffers 59 | mf = cl.mem_flags 60 | self.a_buf = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=self.a) 61 | self.dest_buf = cl.Buffer(self.ctx, mf.WRITE_ONLY, self.a.nbytes) 62 | 63 | #Print the output array 64 | def render(self): 65 | print self.a 66 | 67 | if __name__ == "__main__": 68 | example = CL() 69 | example.loadProgram("kTest.cl") 70 | example.popCorn() 71 | 72 | print "Begin CPU Seed:", date.datetime.now() 73 | example.seed() 74 | print "Begin GPU Loop:", date.datetime.now() 75 | for i in range(5000): 76 | example.execute() 77 | print "Begin CPU Render:", date.datetime.now() 78 | example.render() 79 | print "Done", date.datetime.now() 80 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/009 - CGoL improvments/kTest.cl: -------------------------------------------------------------------------------- 1 | __kernel void Conway(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | if(a[my_id - 1] == 1) {count += 1;} 9 | if(a[my_id + 1] == 1) {count += 1;} 10 | if(a[my_id - 1 - ySize] == 1) {count += 1;} 11 | if(a[my_id - 1 + ySize] == 1) {count += 1;} 12 | if(a[my_id + 1 - ySize] == 1) {count += 1;} 13 | if(a[my_id + 1 + ySize] == 1) {count += 1;} 14 | if(a[my_id - ySize] == 1) {count += 1;} 15 | if(a[my_id + ySize] == 1) {count += 1;} 16 | 17 | //c[my_id] = (count == 3) || (count == 2) && (c[my_id] == 1); 18 | 19 | if(count != 2){ 20 | if(count==3){ 21 | //c[my_id]=1; 22 | }else{ 23 | //c[my_id]=0; 24 | } 25 | } 26 | 27 | } 28 | 29 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/009 - CGoL improvments/main.py: -------------------------------------------------------------------------------- 1 | import pyopencl as cl 2 | import numpy as np 3 | import random as r 4 | import datetime as date 5 | 6 | np.set_printoptions(threshold=np.nan) 7 | 8 | #Averages ~250.000,000 CGoL cell updates a second, 1GB NVIDIA 560ti 9 | # x*y*iterations = total = gpu time = cells/sec 10 | # 36*36*100000 = 129600000 = 27s = 4,800,000 11 | # 1000*1000*1000 = 1000000000 = 3.82s = 261,780,104 12 | # 1000*1000*5000 = 5000000000 = 18.82 = 265,674,814 13 | 14 | 15 | class CL: 16 | def __init__(self): 17 | self.ctx = cl.create_some_context() 18 | self.queue = cl.CommandQueue(self.ctx) 19 | 20 | #Load kernal file and load as internal program 21 | def loadProgram(self, filename): 22 | #read in the OpenCL source file as a string 23 | f = open(filename, 'r') 24 | fstr = "".join(f.readlines()) 25 | #print fstr 26 | #create the program 27 | self.program = cl.Program(self.ctx, fstr).build() 28 | 29 | #Create the host structures and buffers 30 | def popCorn(self): 31 | mf = cl.mem_flags 32 | 33 | #initialize client side (CPU) arrays 34 | #Use ar_ySize to increase the worldspace 35 | self.ar_ySize = np.int32(5000) 36 | self.a = np.ones((self.ar_ySize,self.ar_ySize), dtype=np.int32) 37 | self.c = np.ones((self.ar_ySize,self.ar_ySize), dtype=np.int32) 38 | #create OpenCL buffers 39 | self.a_buf = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=self.a) 40 | self.dest_buf = cl.Buffer(self.ctx, mf.WRITE_ONLY, self.a.nbytes) 41 | 42 | #Run Kernal, create buffer, fill buffer 43 | def execute(self): 44 | self.program.Conway(self.queue, self.a.shape, None, self.ar_ySize, self.a_buf, self.dest_buf) 45 | cl.enqueue_read_buffer(self.queue, self.dest_buf, self.c).wait() 46 | self.a = self.c; 47 | #Refresh buffers 48 | mf = cl.mem_flags 49 | self.a_buf = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=self.a) 50 | self.dest_buf = cl.Buffer(self.ctx, mf.WRITE_ONLY, self.a.nbytes) 51 | 52 | #Run Kernal, create buffer, fill buffer 53 | def seed(self): 54 | self.c = np.int32(np.random.randint(2, size=(self.ar_ySize, self.ar_ySize))) 55 | self.a = self.c 56 | #Refresh buffers 57 | mf = cl.mem_flags 58 | self.a_buf = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=self.a) 59 | self.dest_buf = cl.Buffer(self.ctx, mf.WRITE_ONLY, self.a.nbytes) 60 | 61 | #Print the output array 62 | def render(self): 63 | print self.a 64 | 65 | if __name__ == "__main__": 66 | example = CL() 67 | example.loadProgram("kTest.cl") 68 | example.popCorn() 69 | 70 | print "Begin CPU Seed:", date.datetime.now() 71 | example.seed() 72 | 73 | print "Begin GPU Loop:", date.datetime.now() 74 | for i in range(100): 75 | example.execute() 76 | 77 | print "Begin CPU Render:", date.datetime.now() 78 | example.render() 79 | 80 | print "Done", date.datetime.now() 81 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/010 - Still Slow/kTest.cl: -------------------------------------------------------------------------------- 1 | __kernel void Conway(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | if(a[my_id - 1] == 1) {count += 1;} 9 | if(a[my_id + 1] == 1) {count += 1;} 10 | if(a[my_id - 1 - ySize] == 1) {count += 1;} 11 | if(a[my_id - 1 + ySize] == 1) {count += 1;} 12 | if(a[my_id + 1 - ySize] == 1) {count += 1;} 13 | if(a[my_id + 1 + ySize] == 1) {count += 1;} 14 | if(a[my_id - ySize] == 1) {count += 1;} 15 | if(a[my_id + ySize] == 1) {count += 1;} 16 | 17 | //c[my_id] = (count == 3) || (count == 2) && (c[my_id] == 1); 18 | 19 | if(count != 2){ 20 | if(count==3){ 21 | c[my_id]=1; 22 | }else{ 23 | c[my_id]=0; 24 | } 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/010 - Still Slow/main.py: -------------------------------------------------------------------------------- 1 | import pyopencl as cl 2 | import numpy as np 3 | import random as r 4 | import datetime as date 5 | import time 6 | 7 | np.set_printoptions(threshold=np.nan) 8 | 9 | class CL: 10 | def __init__(self): 11 | self.ctx = cl.create_some_context() 12 | self.queue = cl.CommandQueue(self.ctx) 13 | self.tick = False 14 | 15 | #Load kernal file and load as internal program 16 | def loadProgram(self, filename): 17 | #read in the OpenCL source file as a string 18 | f = open(filename, 'r') 19 | fstr = "".join(f.readlines()) 20 | #print fstr 21 | #create the program 22 | self.program = cl.Program(self.ctx, fstr).build() 23 | 24 | #Create the host structures and buffers 25 | def popCorn(self): 26 | mf = cl.mem_flags 27 | 28 | #initialize client side (CPU) arrays 29 | #Use ar_ySize to increase the worldspace 30 | self.ar_ySize = np.int32(36) 31 | self.a = np.ones((self.ar_ySize,self.ar_ySize), dtype=np.int32) 32 | self.c = np.ones((self.ar_ySize,self.ar_ySize), dtype=np.int32) 33 | #create OpenCL buffers 34 | self.a_buf = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=self.a) 35 | self.dest_buf = cl.Buffer(self.ctx, mf.WRITE_ONLY, self.a.nbytes) 36 | 37 | #Run Kernal, create buffer, fill buffer 38 | def execute(self): 39 | self.program.Conway(self.queue, self.a.shape, None, self.ar_ySize, self.a_buf, self.dest_buf) 40 | cl.enqueue_read_buffer(self.queue, self.dest_buf, self.a).wait() 41 | 42 | #Refresh buffers 43 | mf = cl.mem_flags 44 | self.a_buf = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=self.a) 45 | 46 | #Seed, fill buffer 47 | def seed(self): 48 | np.random.seed(r.randint(0,100000)) 49 | self.a = np.int32(np.random.randint(2, size=(self.ar_ySize, self.ar_ySize))) 50 | 51 | #Refresh buffers 52 | mf = cl.mem_flags 53 | self.a_buf = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=self.a) 54 | 55 | #Print the output array 56 | def render(self): 57 | print self.a 58 | 59 | if __name__ == "__main__": 60 | example = CL() 61 | example.loadProgram("kTest.cl") 62 | example.popCorn() 63 | example.seed() 64 | 65 | #Diagnostics 66 | iterations = 1000 67 | total_cells = iterations*example.ar_ySize*example.ar_ySize 68 | print "task:", example.ar_ySize, "x", example.ar_ySize, "for", iterations, "iterations,", total_cells, "total cells" 69 | 70 | #Run the loop 71 | time1=time.clock() 72 | for i in range(iterations): 73 | example.execute() 74 | time2=time.clock() 75 | 76 | #Results 77 | print "GPU time:", total_cells, "cells in", unicode(time2-time1), "sec" 78 | print "Cells per Second:", (total_cells/(time2-time1)) 79 | 80 | # WARNING: SLOW 81 | if example.ar_ySize <= 100: 82 | print "Begin CPU Render" 83 | example.render() 84 | else: 85 | print "Array size must be <= 100 to attempt a terminal render" 86 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/011 Fast, first wrap-around/ModularTorus workings: -------------------------------------------------------------------------------- 1 | //Modular? Modular. 2 | /* 3 | % # # # 4 | % # # # 5 | % # # # 6 | % # # # 7 | 8 | % # # # 9 | % # # # 10 | % # # # 11 | % # # # 12 | 13 | % # # # % # # # % # # # % # # # 14 | 15 | ID 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | X 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 17 | Y 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3 18 | 19 | 20 | X = my_id % row_length = i 21 | Y = (my_id - X) / row_length = j 22 | my_id = X + Y*row_length = unsigned int my_id = i + ySize*j; 23 | totalSize = ySize*ySize 24 | 25 | -------------------------------------- 26 | 27 | % # # # 0 1 2 3 28 | % # # # 4 5 6 7 29 | % # # # 8 9 10 11 30 | % # # # 12 13 14 15 31 | 32 | int xOff = -1; 33 | int yOff = 1; 34 | - - - 35 | - o - 36 | x - - 37 | o@(0): 7 38 | o@(10): 13 39 | o@(12): 3 40 | o@(3): 6 41 | o@(15): 2 42 | 43 | 44 | int xOff = 1; 45 | int yOff = -1; 46 | - - x 47 | - o - 48 | - - - 49 | o@(0): 13 50 | o@(10): 7 51 | o@(12): 9 52 | o@(3): 12 53 | o@(15): 8 54 | 55 | 56 | int xOff = -2; 57 | int yOff = 1; 58 | - - - - - 59 | - - - - - 60 | - - o - - 61 | x - - - - 62 | - - - - - 63 | o@(0): 6 64 | o@(3): 5 65 | o@(10): 12 66 | o@(12): 2 67 | o@(15): 1 68 | 69 | 70 | a[ my_id 71 | + (xOff % ySize) 72 | + ((ySize * yOff) % totalSize) ] 73 | 74 | -------------------------------------- 75 | 76 | import numpy as np 77 | xoff = -2 78 | yoff = 1 79 | ysize = 4 80 | tsize = ysize*ysize 81 | id = 0 82 | ar = np.zeros((ysize,ysize), dtype=np.int32) 83 | 84 | for i in range(ysize): 85 | for j in range(ysize): 86 | ar[j][i] = i+j*ysize 87 | 88 | print ar 89 | 90 | for i in range(ysize): 91 | for j in range(ysize): 92 | ar[j][i] = ((ar[j][i] + xoff%ysize) %ysize + j*ysize + ysize*yoff) %tsize 93 | 94 | print ar 95 | 96 | 97 | /******* 98 | ar[i][j] + (xoff%ysize) + ((ysize*yoff) % tsize) 99 | ( ar[i][j] + (xoff%ysize) + (ysize*yoff) ) % tsize 100 | (ar[i][j] + (xoff%ysize) + ((ysize*yoff) % tsize))%tsize 101 | (ar[i][j] + (xoff%ysize) + ((ysize*yoff) % ysize))%tsize 102 | (ar[j][i] + (xoff%ysize))%tsize 103 | (ar[j][i] + (xoff%ysize) + (ysize*yoff))%tsize 104 | *******/ 105 | 106 | #First working for x offset 107 | ar[j][i] = (((ar[j][i] + (xoff%ysize) )%ysize) + (j*ysize)) 108 | 109 | #y offset 110 | ar[j][i] = (ar[j][i] + (ysize*yoff))%tsize 111 | 112 | #WINRAR! WINRAR! X & Y combined. Now to slow down GPU with mod%lar functions 113 | ar[j][i] = ((((ar[j][i] + (xoff%ysize) )%ysize) + (j*ysize)) + (ysize*yoff))%tsize 114 | 115 | #Without funky brackets 116 | ar[j][i] = ((ar[j][i] + xoff%ysize) %ysize + j*ysize + ysize*yoff) %tsize 117 | -------------------------------------- 118 | 119 | */ -------------------------------------------------------------------------------- /Early Tests/ConwayCL/011 Fast, first wrap-around/kTest.cl: -------------------------------------------------------------------------------- 1 | __kernel void Conway(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | if(a[my_id - 1] == 1) {count += 1;} 9 | if(a[my_id + 1] == 1) {count += 1;} 10 | if(a[my_id - 1 - ySize] == 1) {count += 1;} 11 | if(a[my_id - 1 + ySize] == 1) {count += 1;} 12 | if(a[my_id + 1 - ySize] == 1) {count += 1;} 13 | if(a[my_id + 1 + ySize] == 1) {count += 1;} 14 | if(a[my_id - ySize] == 1) {count += 1;} 15 | if(a[my_id + ySize] == 1) {count += 1;} 16 | 17 | c[my_id] = (count == 3) || (count == 2) && (a[my_id] != 0); 18 | 19 | /*if(count != 2){ 20 | if(count==3){ 21 | c[my_id]=1; 22 | }else{ 23 | c[my_id]=0; 24 | } 25 | }*/ 26 | 27 | } 28 | 29 | __kernel void ConwayTorus(const int ySize, __global int* a, __global int* c) 30 | { 31 | unsigned int i = get_global_id(0); 32 | unsigned int j = get_global_id(1); 33 | unsigned int my_id = i + ySize*j; 34 | unsigned int count = 0; 35 | unsigned int my_offset_id = 0; 36 | unsigned int tSize = ySize*ySize; 37 | 38 | int xoff = 0; 39 | int yoff = 0; 40 | 41 | xoff = 0; 42 | yoff = -1; 43 | my_offset_id = ((my_id + xoff%ySize)%ySize + j*ySize + ySize*yoff)%tSize; 44 | if(a[my_offset_id] == 1) {count += 1;} 45 | 46 | xoff = 1; 47 | yoff = -1; 48 | my_offset_id = ((my_id + xoff%ySize)%ySize + j*ySize + ySize*yoff)%tSize; 49 | if(a[my_offset_id] == 1) {count += 1;} 50 | 51 | xoff = 1; 52 | yoff = 0; 53 | my_offset_id = ((my_id + xoff%ySize)%ySize + j*ySize + ySize*yoff)%tSize; 54 | if(a[my_offset_id] == 1) {count += 1;} 55 | 56 | xoff = 1; 57 | yoff = 1; 58 | my_offset_id = ((my_id + xoff%ySize)%ySize + j*ySize + ySize*yoff)%tSize; 59 | if(a[my_offset_id] == 1) {count += 1;} 60 | 61 | xoff = 0; 62 | yoff = 1; 63 | my_offset_id = ((my_id + xoff%ySize)%ySize + j*ySize + ySize*yoff)%tSize; 64 | if(a[my_offset_id] == 1) {count += 1;} 65 | 66 | xoff = -1; 67 | yoff = 1; 68 | my_offset_id = ((my_id + xoff%ySize)%ySize + j*ySize + ySize*yoff)%tSize; 69 | if(a[my_offset_id] == 1) {count += 1;} 70 | 71 | xoff = -1; 72 | yoff = 0; 73 | my_offset_id = ((my_id + xoff%ySize)%ySize + j*ySize + ySize*yoff)%tSize; 74 | if(a[my_offset_id] == 1) {count += 1;} 75 | 76 | xoff = -1; 77 | yoff = -1; 78 | my_offset_id = ((my_id + xoff%ySize)%ySize + j*ySize + ySize*yoff)%tSize; 79 | if(a[my_offset_id] == 1) {count += 1;} 80 | 81 | c[my_id] = (count == 3) || (count == 2) && (a[my_id] != 0); 82 | 83 | } 84 | 85 | __kernel void Evolver(const int ySize, __global int* a, __global int* c) 86 | { 87 | unsigned int i = get_global_id(0); 88 | unsigned int j = get_global_id(1); 89 | unsigned int my_id = i + ySize*j; 90 | unsigned int count = 0; 91 | 92 | if(a[my_id - 1] == 1) {count += 1;} 93 | if(a[my_id + 1] == 1) {count += 1;} 94 | if(a[my_id - 1 - ySize] == 1) {count += 1;} 95 | if(a[my_id - 1 + ySize] == 1) {count += 1;} 96 | if(a[my_id + 1 - ySize] == 1) {count += 1;} 97 | if(a[my_id + 1 + ySize] == 1) {count += 1;} 98 | if(a[my_id - ySize] == 1) {count += 1;} 99 | if(a[my_id + ySize] == 1) {count += 1;} 100 | 101 | if(a[my_id - 2] == 1) {count += 1;} 102 | if(a[my_id + 2] == 1) {count += 1;} 103 | if(a[my_id - ySize*2] == 1) {count += 1;} 104 | if(a[my_id + ySize*2] == 1) {count += 1;} 105 | 106 | if(a[my_id - 1 - ySize*2] == 1) {count += 1;} 107 | if(a[my_id - 1 + ySize*2] == 1) {count += 1;} 108 | if(a[my_id + 1 - ySize*2] == 1) {count += 1;} 109 | if(a[my_id + 1 + ySize*2] == 1) {count += 1;} 110 | 111 | if(a[my_id - 2 - ySize*2] == 1) {count += 1;} 112 | if(a[my_id - 2 + ySize*2] == 1) {count += 1;} 113 | if(a[my_id + 2 - ySize*2] == 1) {count += 1;} 114 | if(a[my_id + 2 + ySize*2] == 1) {count += 1;} 115 | 116 | if(a[my_id - 2 - ySize] == 1) {count += 1;} 117 | if(a[my_id - 2 + ySize] == 1) {count += 1;} 118 | if(a[my_id + 2 - ySize] == 1) {count += 1;} 119 | if(a[my_id + 2 + ySize] == 1) {count += 1;} 120 | 121 | c[my_id] = (count == 4); 122 | 123 | } 124 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/011 Fast, first wrap-around/main.py: -------------------------------------------------------------------------------- 1 | import pyopencl as cl 2 | import numpy as np 3 | import random as r 4 | import datetime as date 5 | import time 6 | 7 | np.set_printoptions(threshold=np.nan) 8 | 9 | class CL: 10 | def __init__(self): 11 | self.ctx = cl.create_some_context() 12 | self.queue = cl.CommandQueue(self.ctx) 13 | self.tickState = False 14 | 15 | #Load kernal file and load as internal program 16 | def loadProgram(self, filename): 17 | #read in the OpenCL source file as a string 18 | f = open(filename, 'r') 19 | fstr = "".join(f.readlines()) 20 | #print fstr 21 | #create the program 22 | self.program = cl.Program(self.ctx, fstr).build() 23 | 24 | #Create the host structures and buffers 25 | def popCorn(self): 26 | mf = cl.mem_flags 27 | 28 | #initialize client side (CPU) arrays 29 | #Use ar_ySize to increase the worldspace 30 | self.ar_ySize = np.int32(1000) #560ti Max: 8000^2 * 5000 31 | self.a = np.ones((self.ar_ySize,self.ar_ySize), dtype=np.int32) 32 | self.c = np.ones((self.ar_ySize,self.ar_ySize), dtype=np.int32) 33 | #create OpenCL buffers 34 | self.a_buf = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=self.a) 35 | self.dest_buf = cl.Buffer(self.ctx, mf.WRITE_ONLY, self.a.nbytes) 36 | 37 | #Run Kernal, create buffer, fill buffer 38 | def execute(self): 39 | if self.tickState == False: 40 | self.program.ConwayTorus(self.queue, self.a.shape, None, self.ar_ySize, self.a_buf, self.dest_buf) 41 | else: 42 | self.program.ConwayTorus(self.queue, self.a.shape, None, self.ar_ySize, self.dest_buf, self.a_buf) 43 | 44 | self.tickState = not self.tickState 45 | 46 | #Enqueue read buffer, get it to self.a 47 | def getData(self): 48 | cl.enqueue_read_buffer(self.queue, self.dest_buf, self.a).wait() 49 | 50 | #Refresh buffers 51 | mf = cl.mem_flags 52 | self.a_buf = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=self.a) 53 | 54 | #Seed, fill buffer 55 | def seed(self): 56 | np.random.seed(r.randint(0,100000)) 57 | self.a = np.int32(np.random.randint(6, size=(self.ar_ySize, self.ar_ySize))) 58 | 59 | #Refresh buffers 60 | mf = cl.mem_flags 61 | self.a_buf = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=self.a) 62 | 63 | #Print the output array 64 | def render(self): 65 | print self.a 66 | 67 | #Write File Render 68 | def fileRender(self): 69 | np.savetxt('OUT.txt', self.a, delimiter=' ', fmt="%s") 70 | 71 | if __name__ == "__main__": 72 | example = CL() 73 | example.loadProgram("kTest.cl") 74 | example.popCorn() 75 | example.seed() 76 | 77 | #Diagnostics 78 | iterations = 1000 #This number gets doubled 79 | total_cells = iterations*2 * example.ar_ySize*example.ar_ySize 80 | print " > Task:", example.ar_ySize, "x", example.ar_ySize, "for", iterations*2, "iterations,", total_cells, "total cells" 81 | 82 | #Run the loop 83 | time1=time.clock() 84 | for i in range(iterations): 85 | example.execute() 86 | time2=time.clock() 87 | 88 | #Results 89 | print " > GPU time:", total_cells, "cells in", unicode(time2-time1), "sec" 90 | print " > Cells per Second:", "{:,}".format((total_cells/(time2-time1))) 91 | 92 | #actually fetch the results 93 | example.getData() 94 | 95 | #Write the final output to the terminal output 96 | if example.ar_ySize <= 100: 97 | print " > Begin CPU Render" 98 | example.render() 99 | else: 100 | print " > Array size must be <= 100 to attempt a terminal render" 101 | 102 | #Write the final output to a file 103 | if example.ar_ySize <= 1500: 104 | print " > Begin FileRender" 105 | example.fileRender() 106 | else: 107 | print " > Array size must be <= 1500 to attempt a FileWrite render" 108 | 109 | print " > DONE!" 110 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/012 Pre-GL/KernelUtils.cl: -------------------------------------------------------------------------------- 1 | __kernel void GetWorld(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | 7 | c[my_id] = a[my_id]; 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/012 Pre-GL/Last_Config: -------------------------------------------------------------------------------- 1 | 11,/media/pseudo/Media and Storage/PyCl-Convergence-master/ConwayCL-Final/RuleKernels/Count/AtomsFamily/Atom-ManyRings.cl,null,3,10000,1,1 -------------------------------------------------------------------------------- /Early Tests/ConwayCL/012 Pre-GL/RuleKernels/BiSum/Blinkers.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | int sum = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = 0; 15 | yoff = -1; 16 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 17 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 18 | 19 | xoff = 1; 20 | yoff = -1; 21 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 22 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 23 | 24 | xoff = 1; 25 | yoff = 0; 26 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 27 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 28 | 29 | xoff = 1; 30 | yoff = 1; 31 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 32 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 33 | 34 | xoff = 0; 35 | yoff = 1; 36 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 37 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 38 | 39 | xoff = -1; 40 | yoff = 1; 41 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 42 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 43 | 44 | xoff = -1; 45 | yoff = 0; 46 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 47 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 48 | 49 | xoff = -1; 50 | yoff = -1; 51 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 52 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 53 | 54 | xoff = 0; 55 | yoff = -2; 56 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 57 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 58 | 59 | xoff = 1; 60 | yoff = -2; 61 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 62 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 63 | 64 | xoff = 2; 65 | yoff = -2; 66 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 67 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 68 | 69 | xoff = 2; 70 | yoff = -1; 71 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 72 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 73 | 74 | xoff = 2; 75 | yoff = 0; 76 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 77 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 78 | 79 | xoff = 2; 80 | yoff = 1; 81 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 82 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 83 | 84 | xoff = 2; 85 | yoff = 2; 86 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 87 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 88 | 89 | xoff = 1; 90 | yoff = 2; 91 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 92 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 93 | 94 | xoff = 0; 95 | yoff = 2; 96 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 97 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 98 | 99 | xoff = -1; 100 | yoff = 2; 101 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 102 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 103 | 104 | xoff = -2; 105 | yoff = 2; 106 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 107 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 108 | 109 | xoff = -2; 110 | yoff = 1; 111 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 112 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 113 | 114 | xoff = -2; 115 | yoff = 0; 116 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 117 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 118 | 119 | xoff = -2; 120 | yoff = -1; 121 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 122 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 123 | 124 | xoff = -2; 125 | yoff = -2; 126 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 127 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 128 | 129 | xoff = -1; 130 | yoff = -2; 131 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 132 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 133 | 134 | 135 | int finalSum = a[my_id]; 136 | if(sum >= 7 || sum <= -7) { 137 | if(a[my_id] == -1 && ((sum >= -13 && sum <= -12) || (sum >= 7 && sum <= 8) || sum >= 16) ){finalSum = a[my_id]*-1;} 138 | if(a[my_id] == 1 && (sum <= -16 || (sum >= -8 && sum <= -7) || (sum >= 12 && sum <= 13)) ){finalSum = a[my_id]*-1;} 139 | if(a[my_id] == 0 && sum < 0){finalSum = -1;} 140 | if(a[my_id] == 0 && sum > 0){finalSum = 1;} 141 | } else {finalSum = 0;} 142 | c[my_id] = finalSum; 143 | 144 | } 145 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/012 Pre-GL/RuleKernels/BiSum/Churning.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | int sum = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = 0; 15 | yoff = -1; 16 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 17 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 18 | 19 | xoff = 1; 20 | yoff = -1; 21 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 22 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 23 | 24 | xoff = 1; 25 | yoff = 0; 26 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 27 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 28 | 29 | xoff = 1; 30 | yoff = 1; 31 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 32 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 33 | 34 | xoff = 0; 35 | yoff = 1; 36 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 37 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 38 | 39 | xoff = -1; 40 | yoff = 1; 41 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 42 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 43 | 44 | xoff = -1; 45 | yoff = 0; 46 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 47 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 48 | 49 | xoff = -1; 50 | yoff = -1; 51 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 52 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 53 | 54 | xoff = 0; 55 | yoff = -2; 56 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 57 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 58 | 59 | xoff = 1; 60 | yoff = -2; 61 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 62 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 63 | 64 | xoff = 2; 65 | yoff = -2; 66 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 67 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 68 | 69 | xoff = 2; 70 | yoff = -1; 71 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 72 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 73 | 74 | xoff = 2; 75 | yoff = 0; 76 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 77 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 78 | 79 | xoff = 2; 80 | yoff = 1; 81 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 82 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 83 | 84 | xoff = 2; 85 | yoff = 2; 86 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 87 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 88 | 89 | xoff = 1; 90 | yoff = 2; 91 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 92 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 93 | 94 | xoff = 0; 95 | yoff = 2; 96 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 97 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 98 | 99 | xoff = -1; 100 | yoff = 2; 101 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 102 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 103 | 104 | xoff = -2; 105 | yoff = 2; 106 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 107 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 108 | 109 | xoff = -2; 110 | yoff = 1; 111 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 112 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 113 | 114 | xoff = -2; 115 | yoff = 0; 116 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 117 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 118 | 119 | xoff = -2; 120 | yoff = -1; 121 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 122 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 123 | 124 | xoff = -2; 125 | yoff = -2; 126 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 127 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 128 | 129 | xoff = -1; 130 | yoff = -2; 131 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 132 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 133 | 134 | int finalSum = a[my_id]; 135 | if(sum >= 6 || sum <= -6) { 136 | if(a[my_id] == -1 && ((sum >= -7 && sum <= -6) || (sum >= -28 && sum <= -24)) ){finalSum = a[my_id]*-1;} 137 | if(a[my_id] == 1 && ((sum >= 6 && sum <= 7) || (sum >= 24 && sum <= 28)) ){finalSum = a[my_id]*-1;} 138 | if(a[my_id] == 0 && sum < 0){finalSum = -1;} 139 | if(a[my_id] == 0 && sum > 0){finalSum = 1;} 140 | } else {finalSum = 0;} 141 | c[my_id] = finalSum; 142 | } 143 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/012 Pre-GL/RuleKernels/BiSum/Curious-2.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | int sum = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = 0; 15 | yoff = -1; 16 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 17 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 18 | 19 | xoff = 1; 20 | yoff = -1; 21 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 22 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 23 | 24 | xoff = 1; 25 | yoff = 0; 26 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 27 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 28 | 29 | xoff = 1; 30 | yoff = 1; 31 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 32 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 33 | 34 | xoff = 0; 35 | yoff = 1; 36 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 37 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 38 | 39 | xoff = -1; 40 | yoff = 1; 41 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 42 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 43 | 44 | xoff = -1; 45 | yoff = 0; 46 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 47 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 48 | 49 | xoff = -1; 50 | yoff = -1; 51 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 52 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 53 | 54 | 55 | 56 | // (-8,-7, ..., 7, 8) : 17 57 | // For Negative (-1), become: 000+-+--0-++00000 58 | 59 | // For Zero/Dead (0), become: 00000-00000+00000 60 | 61 | // For Positive (1), become: 00000--+0++-+-000 62 | 63 | 64 | 65 | 66 | 67 | 68 | //To get a value of cell in next generation, 69 | //character with index of cell's neighbors count + 8 is looked up in line corresponding to this cell. 70 | //Zero means cell dies, plus means it turns positive and minus means negative. 71 | 72 | 73 | int finalSum = a[my_id]; 74 | if(sum != 0 && (sum >= -5 && sum <= 5)) { 75 | if(a[my_id] == -1 && (sum == -5 || sum == -3 || sum == 2 || sum == 3) ){finalSum = a[my_id]*-1;} 76 | if(a[my_id] == 1 && (sum == 5 || sum == 3 || sum == -2 || sum == -3) ){finalSum = a[my_id]*-1;} 77 | if(a[my_id] == 0){ 78 | finalSum = 0; 79 | if(sum == -3){finalSum = -1;} 80 | if(sum == 3){finalSum = 1;} 81 | } 82 | } else {finalSum = 0;} 83 | 84 | c[my_id] = finalSum; 85 | } 86 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/012 Pre-GL/RuleKernels/BiSum/Ink.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | int sum = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = 0; 15 | yoff = -1; 16 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 17 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 18 | 19 | xoff = 1; 20 | yoff = -1; 21 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 22 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 23 | 24 | xoff = 1; 25 | yoff = 0; 26 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 27 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 28 | 29 | xoff = 1; 30 | yoff = 1; 31 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 32 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 33 | 34 | xoff = 0; 35 | yoff = 1; 36 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 37 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 38 | 39 | xoff = -1; 40 | yoff = 1; 41 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 42 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 43 | 44 | xoff = -1; 45 | yoff = 0; 46 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 47 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 48 | 49 | xoff = -1; 50 | yoff = -1; 51 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 52 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 53 | 54 | xoff = 0; 55 | yoff = -2; 56 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 57 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 58 | 59 | xoff = 1; 60 | yoff = -2; 61 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 62 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 63 | 64 | xoff = 2; 65 | yoff = -2; 66 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 67 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 68 | 69 | xoff = 2; 70 | yoff = -1; 71 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 72 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 73 | 74 | xoff = 2; 75 | yoff = 0; 76 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 77 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 78 | 79 | xoff = 2; 80 | yoff = 1; 81 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 82 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 83 | 84 | xoff = 2; 85 | yoff = 2; 86 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 87 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 88 | 89 | xoff = 1; 90 | yoff = 2; 91 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 92 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 93 | 94 | xoff = 0; 95 | yoff = 2; 96 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 97 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 98 | 99 | xoff = -1; 100 | yoff = 2; 101 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 102 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 103 | 104 | xoff = -2; 105 | yoff = 2; 106 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 107 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 108 | 109 | xoff = -2; 110 | yoff = 1; 111 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 112 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 113 | 114 | xoff = -2; 115 | yoff = 0; 116 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 117 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 118 | 119 | xoff = -2; 120 | yoff = -1; 121 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 122 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 123 | 124 | xoff = -2; 125 | yoff = -2; 126 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 127 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 128 | 129 | xoff = -1; 130 | yoff = -2; 131 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 132 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 133 | 134 | 135 | int finalSum = a[my_id]; 136 | if(sum >= 5 || sum <= -5) { 137 | if(a[my_id] == -1 && ((sum >= -8 && sum <= -6)) ){finalSum = a[my_id]*-1;} 138 | if(a[my_id] == 1 && ((sum >= 6 && sum <= 8)) ){finalSum = a[my_id]*-1;} 139 | if(a[my_id] == 0 && sum < 0){finalSum = -1;} 140 | if(a[my_id] == 0 && sum > 0){finalSum = 1;} 141 | } else {finalSum = 0;} 142 | c[my_id] = finalSum; 143 | 144 | } 145 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/012 Pre-GL/RuleKernels/BiSum/InkSwirl.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | int sum = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = 0; 15 | yoff = -1; 16 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 17 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 18 | 19 | xoff = 1; 20 | yoff = -1; 21 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 22 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 23 | 24 | xoff = 1; 25 | yoff = 0; 26 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 27 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 28 | 29 | xoff = 1; 30 | yoff = 1; 31 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 32 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 33 | 34 | xoff = 0; 35 | yoff = 1; 36 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 37 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 38 | 39 | xoff = -1; 40 | yoff = 1; 41 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 42 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 43 | 44 | xoff = -1; 45 | yoff = 0; 46 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 47 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 48 | 49 | xoff = -1; 50 | yoff = -1; 51 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 52 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 53 | 54 | xoff = 0; 55 | yoff = -2; 56 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 57 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 58 | 59 | xoff = 1; 60 | yoff = -2; 61 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 62 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 63 | 64 | xoff = 2; 65 | yoff = -2; 66 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 67 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 68 | 69 | xoff = 2; 70 | yoff = -1; 71 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 72 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 73 | 74 | xoff = 2; 75 | yoff = 0; 76 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 77 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 78 | 79 | xoff = 2; 80 | yoff = 1; 81 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 82 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 83 | 84 | xoff = 2; 85 | yoff = 2; 86 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 87 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 88 | 89 | xoff = 1; 90 | yoff = 2; 91 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 92 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 93 | 94 | xoff = 0; 95 | yoff = 2; 96 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 97 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 98 | 99 | xoff = -1; 100 | yoff = 2; 101 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 102 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 103 | 104 | xoff = -2; 105 | yoff = 2; 106 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 107 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 108 | 109 | xoff = -2; 110 | yoff = 1; 111 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 112 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 113 | 114 | xoff = -2; 115 | yoff = 0; 116 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 117 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 118 | 119 | xoff = -2; 120 | yoff = -1; 121 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 122 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 123 | 124 | xoff = -2; 125 | yoff = -2; 126 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 127 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 128 | 129 | xoff = -1; 130 | yoff = -2; 131 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 132 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 133 | 134 | 135 | int finalSum = a[my_id]; 136 | if(sum >= 5 || sum <= -5) { 137 | if(a[my_id] == -1 && ((sum >= -10 && sum <= -8)) ){finalSum = a[my_id]*-1;} 138 | if(a[my_id] == 1 && ((sum >= 8 && sum <= 10)) ){finalSum = a[my_id]*-1;} 139 | if(a[my_id] == 0 && sum < 0){finalSum = -1;} 140 | if(a[my_id] == 0 && sum > 0){finalSum = 1;} 141 | } else {finalSum = 0;} 142 | c[my_id] = finalSum; 143 | 144 | } 145 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/012 Pre-GL/RuleKernels/BiSum/Searchlight.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | int sum = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = 0; 15 | yoff = -1; 16 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 17 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 18 | 19 | xoff = 1; 20 | yoff = -1; 21 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 22 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 23 | 24 | xoff = 1; 25 | yoff = 0; 26 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 27 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 28 | 29 | xoff = 1; 30 | yoff = 1; 31 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 32 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 33 | 34 | xoff = 0; 35 | yoff = 1; 36 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 37 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 38 | 39 | xoff = -1; 40 | yoff = 1; 41 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 42 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 43 | 44 | xoff = -1; 45 | yoff = 0; 46 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 47 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 48 | 49 | xoff = -1; 50 | yoff = -1; 51 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 52 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 53 | 54 | xoff = 0; 55 | yoff = -2; 56 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 57 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 58 | 59 | xoff = 1; 60 | yoff = -2; 61 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 62 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 63 | 64 | xoff = 2; 65 | yoff = -2; 66 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 67 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 68 | 69 | xoff = 2; 70 | yoff = -1; 71 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 72 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 73 | 74 | xoff = 2; 75 | yoff = 0; 76 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 77 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 78 | 79 | xoff = 2; 80 | yoff = 1; 81 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 82 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 83 | 84 | xoff = 2; 85 | yoff = 2; 86 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 87 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 88 | 89 | xoff = 1; 90 | yoff = 2; 91 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 92 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 93 | 94 | xoff = 0; 95 | yoff = 2; 96 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 97 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 98 | 99 | xoff = -1; 100 | yoff = 2; 101 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 102 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 103 | 104 | xoff = -2; 105 | yoff = 2; 106 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 107 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 108 | 109 | xoff = -2; 110 | yoff = 1; 111 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 112 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 113 | 114 | xoff = -2; 115 | yoff = 0; 116 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 117 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 118 | 119 | xoff = -2; 120 | yoff = -1; 121 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 122 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 123 | 124 | xoff = -2; 125 | yoff = -2; 126 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 127 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 128 | 129 | xoff = -1; 130 | yoff = -2; 131 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 132 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 133 | 134 | int finalSum = a[my_id]; 135 | if(sum >= 6 || sum <= -6) { 136 | if(a[my_id] == -1 && ((sum >= -8 && sum <= -6)) ){finalSum = a[my_id]*-1;} 137 | if(a[my_id] == 1 && ((sum >= 6 && sum <= 8)) ){finalSum = a[my_id]*-1;} 138 | if(a[my_id] == 0 && sum < 0){finalSum = -1;} 139 | if(a[my_id] == 0 && sum > 0){finalSum = 1;} 140 | } else {finalSum = 0;} 141 | c[my_id] = finalSum; 142 | } 143 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/012 Pre-GL/RuleKernels/BiSum/Spiral.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | int sum = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = 0; 15 | yoff = -1; 16 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 17 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 18 | 19 | xoff = 1; 20 | yoff = -1; 21 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 22 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 23 | 24 | xoff = 1; 25 | yoff = 0; 26 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 27 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 28 | 29 | xoff = 1; 30 | yoff = 1; 31 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 32 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 33 | 34 | xoff = 0; 35 | yoff = 1; 36 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 37 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 38 | 39 | xoff = -1; 40 | yoff = 1; 41 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 42 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 43 | 44 | xoff = -1; 45 | yoff = 0; 46 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 47 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 48 | 49 | xoff = -1; 50 | yoff = -1; 51 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 52 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 53 | 54 | xoff = 0; 55 | yoff = -2; 56 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 57 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 58 | 59 | xoff = 1; 60 | yoff = -2; 61 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 62 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 63 | 64 | xoff = 2; 65 | yoff = -2; 66 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 67 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 68 | 69 | xoff = 2; 70 | yoff = -1; 71 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 72 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 73 | 74 | xoff = 2; 75 | yoff = 0; 76 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 77 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 78 | 79 | xoff = 2; 80 | yoff = 1; 81 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 82 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 83 | 84 | xoff = 2; 85 | yoff = 2; 86 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 87 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 88 | 89 | xoff = 1; 90 | yoff = 2; 91 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 92 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 93 | 94 | xoff = 0; 95 | yoff = 2; 96 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 97 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 98 | 99 | xoff = -1; 100 | yoff = 2; 101 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 102 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 103 | 104 | xoff = -2; 105 | yoff = 2; 106 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 107 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 108 | 109 | xoff = -2; 110 | yoff = 1; 111 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 112 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 113 | 114 | xoff = -2; 115 | yoff = 0; 116 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 117 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 118 | 119 | xoff = -2; 120 | yoff = -1; 121 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 122 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 123 | 124 | xoff = -2; 125 | yoff = -2; 126 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 127 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 128 | 129 | xoff = -1; 130 | yoff = -2; 131 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 132 | if(a[my_offset_id] != 0) {sum += a[my_offset_id];} 133 | 134 | int finalSum = a[my_id]; 135 | if(sum >= 6 || sum <= -6) { 136 | if(a[my_id] == -1 && ((sum >= -7 && sum <= -6) || (sum >= -22 && sum <= -20)) ){finalSum = a[my_id]*-1;} 137 | if(a[my_id] == 1 && ((sum >= 6 && sum <= 7) || (sum >= 20 && sum <= 22)) ){finalSum = a[my_id]*-1;} 138 | if(a[my_id] == 0 && sum < 0){finalSum = -1;} 139 | if(a[my_id] == 0 && sum > 0){finalSum = 1;} 140 | } else {finalSum = 0;} 141 | c[my_id] = finalSum; 142 | 143 | } 144 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/012 Pre-GL/RuleKernels/Count/AsymPuffers.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = 0; 15 | yoff = -1; 16 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 17 | if(a[my_offset_id] == 1) {count += 1;} 18 | 19 | xoff = 1; 20 | yoff = -1; 21 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 22 | if(a[my_offset_id] == 1) {count += 1;} 23 | 24 | xoff = 1; 25 | yoff = 0; 26 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 27 | if(a[my_offset_id] == 1) {count += 1;} 28 | 29 | xoff = -1; 30 | yoff = 0; 31 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 32 | if(a[my_offset_id] == 1) {count += 1;} 33 | 34 | xoff = -1; 35 | yoff = -1; 36 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 37 | if(a[my_offset_id] == 1) {count += 1;} 38 | 39 | int c_out = a[my_id]; 40 | if(count >= 3) {c_out = 0;} 41 | if(count == 2) {c_out = 1;} 42 | if(count <= 1) {c_out = 0;} 43 | c[my_id] = c_out; 44 | 45 | 46 | } 47 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/012 Pre-GL/RuleKernels/Count/Conway-NoEdge.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | if(a[my_id - 1] == 1) {count += 1;} 9 | if(a[my_id + 1] == 1) {count += 1;} 10 | if(a[my_id - 1 - ySize] == 1) {count += 1;} 11 | if(a[my_id - 1 + ySize] == 1) {count += 1;} 12 | if(a[my_id + 1 - ySize] == 1) {count += 1;} 13 | if(a[my_id + 1 + ySize] == 1) {count += 1;} 14 | if(a[my_id - ySize] == 1) {count += 1;} 15 | if(a[my_id + ySize] == 1) {count += 1;} 16 | 17 | c[my_id] = (count == 3) || (count == 2) && (a[my_id] != 0); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/012 Pre-GL/RuleKernels/Count/Conway.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = 0; 15 | yoff = -1; 16 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 17 | if(a[my_offset_id] == 1) {count += 1;} 18 | 19 | xoff = 1; 20 | yoff = -1; 21 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 22 | if(a[my_offset_id] == 1) {count += 1;} 23 | 24 | xoff = 1; 25 | yoff = 0; 26 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 27 | if(a[my_offset_id] == 1) {count += 1;} 28 | 29 | xoff = 1; 30 | yoff = 1; 31 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 32 | if(a[my_offset_id] == 1) {count += 1;} 33 | 34 | xoff = 0; 35 | yoff = 1; 36 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 37 | if(a[my_offset_id] == 1) {count += 1;} 38 | 39 | xoff = -1; 40 | yoff = 1; 41 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 42 | if(a[my_offset_id] == 1) {count += 1;} 43 | 44 | xoff = -1; 45 | yoff = 0; 46 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 47 | if(a[my_offset_id] == 1) {count += 1;} 48 | 49 | xoff = -1; 50 | yoff = -1; 51 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 52 | if(a[my_offset_id] == 1) {count += 1;} 53 | 54 | int c_out = a[my_id]; 55 | if(count >= 4) {c_out = 0;} 56 | if(count == 3) {c_out = 1;} 57 | if(count <= 1) {c_out = 0;} 58 | c[my_id] = c_out; 59 | 60 | 61 | } 62 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/012 Pre-GL/RuleKernels/Count/Evolver-NoEdge.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | if(a[my_id - 1] == 1) {count += 1;} 9 | if(a[my_id + 1] == 1) {count += 1;} 10 | if(a[my_id - 1 - ySize] == 1) {count += 1;} 11 | if(a[my_id - 1 + ySize] == 1) {count += 1;} 12 | if(a[my_id + 1 - ySize] == 1) {count += 1;} 13 | if(a[my_id + 1 + ySize] == 1) {count += 1;} 14 | if(a[my_id - ySize] == 1) {count += 1;} 15 | if(a[my_id + ySize] == 1) {count += 1;} 16 | 17 | if(a[my_id - 2] == 1) {count += 1;} 18 | if(a[my_id + 2] == 1) {count += 1;} 19 | if(a[my_id - ySize*2] == 1) {count += 1;} 20 | if(a[my_id + ySize*2] == 1) {count += 1;} 21 | 22 | if(a[my_id - 1 - ySize*2] == 1) {count += 1;} 23 | if(a[my_id - 1 + ySize*2] == 1) {count += 1;} 24 | if(a[my_id + 1 - ySize*2] == 1) {count += 1;} 25 | if(a[my_id + 1 + ySize*2] == 1) {count += 1;} 26 | 27 | if(a[my_id - 2 - ySize*2] == 1) {count += 1;} 28 | if(a[my_id - 2 + ySize*2] == 1) {count += 1;} 29 | if(a[my_id + 2 - ySize*2] == 1) {count += 1;} 30 | if(a[my_id + 2 + ySize*2] == 1) {count += 1;} 31 | 32 | if(a[my_id - 2 - ySize] == 1) {count += 1;} 33 | if(a[my_id - 2 + ySize] == 1) {count += 1;} 34 | if(a[my_id + 2 - ySize] == 1) {count += 1;} 35 | if(a[my_id + 2 + ySize] == 1) {count += 1;} 36 | 37 | c[my_id] = (count == 4); 38 | 39 | } -------------------------------------------------------------------------------- /Early Tests/ConwayCL/012 Pre-GL/RuleKernels/Count/Evolver.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = 0; 15 | yoff = -1; 16 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 17 | if(a[my_offset_id] == 1) {count += 1;} 18 | 19 | xoff = 1; 20 | yoff = -1; 21 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 22 | if(a[my_offset_id] == 1) {count += 1;} 23 | 24 | xoff = 1; 25 | yoff = 0; 26 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 27 | if(a[my_offset_id] == 1) {count += 1;} 28 | 29 | xoff = 1; 30 | yoff = 1; 31 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 32 | if(a[my_offset_id] == 1) {count += 1;} 33 | 34 | xoff = 0; 35 | yoff = 1; 36 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 37 | if(a[my_offset_id] == 1) {count += 1;} 38 | 39 | xoff = -1; 40 | yoff = 1; 41 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 42 | if(a[my_offset_id] == 1) {count += 1;} 43 | 44 | xoff = -1; 45 | yoff = 0; 46 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 47 | if(a[my_offset_id] == 1) {count += 1;} 48 | 49 | xoff = -1; 50 | yoff = -1; 51 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 52 | if(a[my_offset_id] == 1) {count += 1;} 53 | 54 | 55 | 56 | 57 | xoff = 0; 58 | yoff = -2; 59 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 60 | if(a[my_offset_id] == 1) {count += 1;} 61 | 62 | xoff = 1; 63 | yoff = -2; 64 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 65 | if(a[my_offset_id] == 1) {count += 1;} 66 | 67 | xoff = 2; 68 | yoff = -2; 69 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 70 | if(a[my_offset_id] == 1) {count += 1;} 71 | 72 | xoff = 2; 73 | yoff = -1; 74 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 75 | if(a[my_offset_id] == 1) {count += 1;} 76 | 77 | xoff = 2; 78 | yoff = 0; 79 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 80 | if(a[my_offset_id] == 1) {count += 1;} 81 | 82 | xoff = 2; 83 | yoff = 1; 84 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 85 | if(a[my_offset_id] == 1) {count += 1;} 86 | 87 | xoff = 2; 88 | yoff = 2; 89 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 90 | if(a[my_offset_id] == 1) {count += 1;} 91 | 92 | xoff = 1; 93 | yoff = 2; 94 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 95 | if(a[my_offset_id] == 1) {count += 1;} 96 | 97 | xoff = 0; 98 | yoff = 2; 99 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 100 | if(a[my_offset_id] == 1) {count += 1;} 101 | 102 | xoff = -1; 103 | yoff = 2; 104 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 105 | if(a[my_offset_id] == 1) {count += 1;} 106 | 107 | xoff = -2; 108 | yoff = 2; 109 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 110 | if(a[my_offset_id] == 1) {count += 1;} 111 | 112 | xoff = -2; 113 | yoff = 1; 114 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 115 | if(a[my_offset_id] == 1) {count += 1;} 116 | 117 | xoff = -2; 118 | yoff = 0; 119 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 120 | if(a[my_offset_id] == 1) {count += 1;} 121 | 122 | xoff = -2; 123 | yoff = -1; 124 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 125 | if(a[my_offset_id] == 1) {count += 1;} 126 | 127 | xoff = -2; 128 | yoff = -2; 129 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 130 | if(a[my_offset_id] == 1) {count += 1;} 131 | 132 | xoff = -1; 133 | yoff = -2; 134 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 135 | if(a[my_offset_id] == 1) {count += 1;} 136 | 137 | c[my_id] = (count == 4); 138 | } 139 | -------------------------------------------------------------------------------- /Early Tests/ConwayCL/012 Pre-GL/RuleKernels/Count/Snake.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = -3; 15 | yoff = 0; 16 | my_offset_id = ((my_id + xoff%ySize)%ySize + j*ySize + ySize*yoff)%tSize; 17 | if(a[my_offset_id] == 1) {count += 1;} 18 | 19 | xoff = -2; 20 | yoff = -2; 21 | my_offset_id = ((my_id + xoff%ySize)%ySize + j*ySize + ySize*yoff)%tSize; 22 | if(a[my_offset_id] == 1) {count += 1;} 23 | 24 | xoff = -2; 25 | yoff = -1; 26 | my_offset_id = ((my_id + xoff%ySize)%ySize + j*ySize + ySize*yoff)%tSize; 27 | if(a[my_offset_id] == 1) {count += 1;} 28 | 29 | xoff = -2; 30 | yoff = 1; 31 | my_offset_id = ((my_id + xoff%ySize)%ySize + j*ySize + ySize*yoff)%tSize; 32 | if(a[my_offset_id] == 1) {count += 1;} 33 | 34 | xoff = -2; 35 | yoff = 2; 36 | my_offset_id = ((my_id + xoff%ySize)%ySize + j*ySize + ySize*yoff)%tSize; 37 | if(a[my_offset_id] == 1) {count += 1;} 38 | 39 | xoff = -1; 40 | yoff = -2; 41 | my_offset_id = ((my_id + xoff%ySize)%ySize + j*ySize + ySize*yoff)%tSize; 42 | if(a[my_offset_id] == 1) {count += 1;} 43 | 44 | xoff = -1; 45 | yoff = 2; 46 | my_offset_id = ((my_id + xoff%ySize)%ySize + j*ySize + ySize*yoff)%tSize; 47 | if(a[my_offset_id] == 1) {count += 1;} 48 | 49 | xoff = 0; 50 | yoff = -3; 51 | my_offset_id = ((my_id + xoff%ySize)%ySize + j*ySize + ySize*yoff)%tSize; 52 | if(a[my_offset_id] == 1) {count += 1;} 53 | 54 | xoff = 0; 55 | yoff = 3; 56 | my_offset_id = ((my_id + xoff%ySize)%ySize + j*ySize + ySize*yoff)%tSize; 57 | if(a[my_offset_id] == 1) {count += 1;} 58 | 59 | xoff = 1; 60 | yoff = -2; 61 | my_offset_id = ((my_id + xoff%ySize)%ySize + j*ySize + ySize*yoff)%tSize; 62 | if(a[my_offset_id] == 1) {count += 1;} 63 | 64 | xoff = 1; 65 | yoff = 2; 66 | my_offset_id = ((my_id + xoff%ySize)%ySize + j*ySize + ySize*yoff)%tSize; 67 | if(a[my_offset_id] == 1) {count += 1;} 68 | 69 | xoff = 2; 70 | yoff = -2; 71 | my_offset_id = ((my_id + xoff%ySize)%ySize + j*ySize + ySize*yoff)%tSize; 72 | if(a[my_offset_id] == 1) {count += 1;} 73 | 74 | xoff = 2; 75 | yoff = -1; 76 | my_offset_id = ((my_id + xoff%ySize)%ySize + j*ySize + ySize*yoff)%tSize; 77 | if(a[my_offset_id] == 1) {count += 1;} 78 | 79 | xoff = 2; 80 | yoff = 1; 81 | my_offset_id = ((my_id + xoff%ySize)%ySize + j*ySize + ySize*yoff)%tSize; 82 | if(a[my_offset_id] == 1) {count += 1;} 83 | 84 | xoff = 2; 85 | yoff = 2; 86 | my_offset_id = ((my_id + xoff%ySize)%ySize + j*ySize + ySize*yoff)%tSize; 87 | if(a[my_offset_id] == 1) {count += 1;} 88 | 89 | xoff = 3; 90 | yoff = 0; 91 | my_offset_id = ((my_id + xoff%ySize)%ySize + j*ySize + ySize*yoff)%tSize; 92 | if(a[my_offset_id] == 1) {count += 1;} 93 | 94 | //:7,17,0, 95 | //:3,5,1, 96 | //:0,2,0, 97 | 98 | int c_out = a[my_id]; 99 | if(count >= 7) {c_out = 0;} 100 | if(count >= 3 && count <= 5) {c_out = 1;} 101 | if(count <= 2) {c_out = 0;} 102 | c[my_id] = c_out; 103 | 104 | 105 | } -------------------------------------------------------------------------------- /Early Tests/ConwayCL/012 Pre-GL/RuleKernels/Count/Strands.cl: -------------------------------------------------------------------------------- 1 | __kernel void RunAutomata(const int ySize, __global int* a, __global int* c) 2 | { 3 | unsigned int i = get_global_id(0); 4 | unsigned int j = get_global_id(1); 5 | unsigned int my_id = i + ySize*j; 6 | unsigned int count = 0; 7 | 8 | unsigned int my_offset_id = 0; 9 | unsigned int tSize = ySize*ySize; 10 | 11 | int xoff = 0; 12 | int yoff = 0; 13 | 14 | xoff = 0; 15 | yoff = -1; 16 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 17 | if(a[my_offset_id] == 1) {count += 1;} 18 | 19 | xoff = 1; 20 | yoff = -1; 21 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 22 | if(a[my_offset_id] == 1) {count += 1;} 23 | 24 | xoff = 0; 25 | yoff = -2; 26 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 27 | if(a[my_offset_id] == 1) {count += 1;} 28 | 29 | xoff = -1; 30 | yoff = -1; 31 | my_offset_id = (my_id + xoff)%ySize + (j*ySize + ySize*yoff)%tSize; 32 | if(a[my_offset_id] == 1) {count += 1;} 33 | 34 | int c_out = a[my_id]; 35 | if(count >= 3) {c_out = 0;} 36 | if(count == 2) {c_out = 1;} 37 | if(count == 1) {c_out = 0;} 38 | c[my_id] = c_out; 39 | 40 | 41 | } 42 | -------------------------------------------------------------------------------- /Early Tests/Notes/OldNbr-to-NewNbr.gnumeric: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfiniteSearchSpace/PyCl-Convergence/d29f3fd08e872be2949d9a6743ffef6e88c38d92/Early Tests/Notes/OldNbr-to-NewNbr.gnumeric -------------------------------------------------------------------------------- /Early Tests/Notes/host prints: -------------------------------------------------------------------------------- 1 | # old prints storage ------------------------- 2 | #print " > Task:", "{:,}".format(MainCL.ar_ySize), "x", "{:,}".format(MainCL.ar_ySize), "for", "{:,}".format(iterations), "iterations,", "{:,}".format(total_cells), "total cells" 3 | #print " > Render every", "{:,}".format(renderEvery), "frames.", "{:,}".format(iterations/renderEvery), "total." 4 | #print " > GPU time:", unicode(time2-time1), "s.", "Estimated Completion Time:", unicode(total_cells/(renderEvery*MainCL.ar_ySize*MainCL.ar_ySize/(time2-time1))) 5 | #print " > Cells per Second:", "{:,}".format((renderEvery*MainCL.ar_ySize*MainCL.ar_ySize/(time2-time1))) 6 | #print " > Imaged:", renderNum+1, "of", "{:,}".format(iterations/renderEvery), " - ", (float(renderNum+1)/float(iterations/renderEvery))*100, "%" 7 | #print "- - - - - - - - - - - - - - - - - - -" -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 InfiniteSearchSpace 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | PyCl-Convergence 2 | ================ 3 | 4 | Python/OpenCl Cellular Automata explorer 5 | 6 | I encourage anyone who is willing to contribute to this code do so: 7 | Fork the Github repository and upload your successive changes! 8 | 9 | ### Dependencies: 10 | 11 | * sudo apt-get install python-pyopencl 12 | 13 | * sudo apt-get install python-scipy 14 | 15 | * sudo apt-get install python-tk 16 | 17 | * sudo apt-get install python-pygame 18 | 19 | ### OpenCL CPU Framework: 20 | 21 | AMD 22 | 23 | * http://developer.amd.com/tools-and-sdks/opencl-zone/amd-accelerated-parallel-processing-app-sdk/ 24 | 25 | Intel 26 | 27 | * https://software.intel.com/en-us/intel-opencl 28 | 29 | ### GPU OpenCL compatibility: 30 | 31 | nvidia: 32 | 33 | * sudo apt-get install nvidia-opencl-dev 34 | 35 | AMD: 36 | 37 | * Pending ... Message me at reddit's /u/slackermanz if you have compatibility suggestions! 38 | 39 | 40 | # A "Litmus Test": 41 | 42 | If your machine can run GPU-accelerated simulations with https://code.google.com/p/reaction-diffusion/ it should also be able to run this program. 43 | 44 | 45 | 46 | # Once that is set up... 47 | 48 | Open the terminal in './PyCl-Convergence-master/ConwayCL-Final' 49 | 50 | Run the Python script './PyCl-Convergence-master/ConwayCL-Final/Main.py' in the terminal with: 'python main.py' 51 | 52 | * Spam the ENTER key to use default settings 53 | 54 | * Right Click to toggle pause 55 | 56 | * Click the scrollwheel or press 'R' key to restart/reseed world 57 | 58 | * 'Forward' mouse button or 'E' key to change rule 59 | 60 | * 'Back' mousebutton or 'T' key to use a Bitmap image seed 61 | 62 | * 'Q' key to toggle image-capture recording (creates a series of Avidemux-compatible Bitmaps) 63 | 64 | * 'P' to wipe the screen clear of all living cells 65 | 66 | * 'F' to toggle use of 'Photographic' filter 67 | 68 | * 'I' to toggle use of 'Game Mode' (Prerequisite: 'F' for Filter Mode must be on) 69 | 70 | There's Three Modes: DRAW, VIEW, and GAME 71 | 72 | DRAW (Typical Default) 73 | 74 | * Scrollwheel to increase Drawn Square Size 75 | 76 | * 'SPACEBAR' to toggle DRAW or VIEW modes 77 | 78 | VIEW 79 | 80 | * 'SPACEBAR' to toggle DRAW or VIEW modes 81 | 82 | * The game world will become centered on the mouse location 83 | 84 | * Scrollwheel to Zoom in or out 85 | 86 | GAME (Temporarily Default Override) 87 | 88 | * 'I' to toggle use of 'Game Mode' 89 | 90 | * Spacebar or Left Click to shoot at the Mouse Position 91 | 92 | * 'F' to toggle use of 'Photographic' filter 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | --------------------------------------------------------------------------------