60 lines
2.4 KiB
Org Mode
60 lines
2.4 KiB
Org Mode
#+filetags: complife
|
|
|
|
* DONE Restructure simulation
|
|
DONE: 2026-03-18.
|
|
|
|
Instead of going for one massive tape with "lines" being programs, go
|
|
for 8x8 chunks.
|
|
|
|
The idea is to draw each individual command in motion instead of the
|
|
composite program. The visualisation will look amazing.
|
|
** DONE Refactor brainfuck interpreter
|
|
The "catalytic process" (take two programs, concatenate them, execute
|
|
the program, split them back) is now completely standalone. The only
|
|
assertions it makes about the input programs is that they are
|
|
contiguous. Essentially the same as our previous implementation.
|
|
|
|
Now we just need to do the hard bit!
|
|
** DONE Refactor simulation
|
|
* TODO Fix segfaults with 64 byte programs :bugs:
|
|
For some reason we can segfault when executing simulations where we
|
|
have 64 byte programs. Characteristics:
|
|
- It happens seemingly randomly throughout execution, and has
|
|
backtraces that aren't really helpful:
|
|
- ~EndDrawing~ of Raylib.
|
|
- ~abort~ somewhere on the stack
|
|
- Some nvidia code???
|
|
- Tested on an integrated Intel graphics machine, same issue but
|
|
doesn't report nvidia code as the cause, so unlikely to be due
|
|
to that.
|
|
- Not nearly as present with higher or lower sized programs, though
|
|
can happen.
|
|
* TODO Parallelise even more
|
|
Simulations are now at a point where we can see interesting emergent
|
|
behaviour, that is different depending on the environmental conditions
|
|
we setup (mutation rate, size of programs, number of programs).
|
|
|
|
However for larger sized workloads, though the simulation is
|
|
rendering really fast, progression of the simulation with regards to
|
|
this emergent behaviour can be quite slow. I believe adding a few
|
|
thread workers to perform reactions simultaneously would help boost
|
|
the throughput up a bit.
|
|
|
|
Notes:
|
|
- Mutation can happen independently of reaction. If the concatenation
|
|
structure has already been made, then the changes from mutation are
|
|
written over. If it hasn't been made, mutation gets propagated.
|
|
Either case can and will happen.
|
|
- We should reduce locking as much as possible.
|
|
** TODO Ensure workers aren't working on the same programs
|
|
We need to ensure any two workers aren't working on the same programs
|
|
as:
|
|
1) Whoever writes last wins the race, and we could have a really
|
|
unfortunate situation where one component from one worker each gets
|
|
written (worst case).
|
|
2) It's wasted effort
|
|
|
|
So we'll need a way to intercept the program picking process of each
|
|
worker.
|
|
** TODO Implement threading on the simulation
|