Computer Professor Reports Progress, Shows Demos, Is Still Nuts - T2sday Update 3172
Watch on YouTubeVideo summary
Dave Ackley, a self-described "slightly nutty computer professor," provides an update on his ambitious project to create a regional hub system within a cellular automata simulation using Tensix black hole chips. The primary goal for this episode was to achieve Event Window Transitions (EWTs), which involve sending data packets between local processors and central hubs, then pulling that data back for display. While the initial objective of establishing communication between separate hubs failed this month, significant progress was made in getting a single hub to successfully round-trip empty packets with its associated Event Window Processors (EWPs). This breakthrough proved that the fundamental packet exchange mechanism was functional, paving the way for future complexity once the basic infrastructure could reliably handle data flow.
The development process was fraught with challenging debugging issues, particularly on the specialized hardware where traditional debuggers are difficult to use. Dave encountered several "Heisenbugs"—errors that seemingly vanished when he added print statements to investigate them—caused by a tricky cache behavior that he initially misunderstood. He also dealt with memory corruption issues and other logical errors that took days to isolate. To combat these frustrations, Dave spent considerable time improving his own debugging tools, specifically creating an enhanced log file viewer called the MFM X Log Jumper. This tool allows him to navigate complex log files efficiently by jumping directly between different processor cores and heart units within the codebase, significantly aiding in locating bugs even if it doesn't always fix them immediately.
In the live demonstration, Dave showcased the first successful visual representation of events occurring inside the T6 tiles being integrated into a video stream. The simulation displayed distinct regions where "fork bomb" entities grew rapidly, consuming local resources, while other physics types like "drag and res" persisted in unaffected areas. Although the current performance is slow and inter-hub communication remains unimplemented, this marks the first time the system has worked cohesively to display live cellular automata sites rather than just pixels. Dave plans to refine the host display strategy to utilize a push-based model from the tiles and intends to develop tests for connecting regional hubs in June, coinciding with a visit from his oldest friend, before concluding that while the project is still "nuts," there is genuine fun and progress to be found in the process.
Read the full video transcript
Hey
everybody, it's T Tuesday. Uh
What the hell is this?
We'll take a look at this uh again a
little bit later in this episode. Uh
it's just a little taste of what's
coming up. So, for now,
uh
what we can say is okay, we have some
visible progress. So, if you're just
joining us for the first time, you know,
I'm Dave Ackley, I'm the slightly nutty
computer professor perhaps.
Uh but we've been working on trying to
get this regional hub idea going in this
crazy cellular automata thing for months
and we've got some progress to show. So,
the goals for this time were EWTs, event
window transitions. That's little teeny
bits of this goes to this, this goes to
this all over a spatially distributed
thing done in a particular way and then
the data pulled back so that we could
see it on the screen and and basically
Yes. Yes.
>> [laughter]
>> for a lot of uh
basically EWTs and regional hubs.
There's more to do. There's absolutely
more to do, but yes, we will see it in a
demo live in a few minutes. Centralized
data for display. That's what we were
just seeing there, a tiny little bit of
it.
Inter-hub communication plan. So, that's
really I gave myself a plus minus.
Really it's a failure except I kind of
do have a plan.
So, we'll see. Have big fun enjoy the
axe.
I worked a lot in the last month
cuz I was so angry about not having
gotten EWTs last month.
But still there was big fun in there,
too.
Okay. So,
today, sharpening the axe part two. And
I had some big bugs. I had some bugs
that took days to find and I hate that.
>> [laughter]
>> Uh Uh, uh, but it did remind me of my
little uh when you can't find your bug,
improve your debugging tools instead. If
you can't work on your bug, work on your
debugging tools instead until they can
help you find your bug and so on. Then
I'm going to want to do two uh quick
little demos. We'll see. Uh,
uh, MFM X log jumper, that's a debugging
tool that I made. I made better. I
improved my debugging tools cuz I was
stuck on these horrible bugs.
And then we'll take a look at event
window transitions, the earliest
earliest little bits, and then try to
wrap up. Okay, so I'm good I've got a
lot of stuff here, but I'm going to skip
through it, so don't freak out. Uh, uh,
so again, the software's timeline starts
at T minus 28. That was the last T
Tuesday in April. And one of the things
that I've learned about doing uh
software development at the age that I
am and with the amount of distractions
and everything the way it is. You know,
when I wasn't like 35 years old and
doing nothing.
Uh, um,
I have to review where I am all the
time. And uh if I don't, I end up
wasting a lot of time not being exactly
sure what to work on. So I went right
into review. And then the next couple of
days I was just uh
constantly stepping on my own rake,
stuff that I had messed up and that now
come back to bite me. Uh, um,
so the goal, EWP, that's the event
window processor. That's a little minion
that we're going to send it an event and
say, "Figure out what the update is and
then send it back." And the hub is the
sort of Amazon warehouse in the central
area that all the events come and go
from. Uh, uh,
so that's what the goal was. Get that
working. That's been the goal for
months. Uh,
uh, and let's review the code. Da da.
Uh, uh, okay, found a little bug. Da da
da. All right, finally, EWP and hub are
round tripping EWP. So that means that
the EWP, the processor, was sending an
empty packet to the hub. The hub was
receiving it. That's not a given. I was
filling it up with nothing in this
particular case, sending it back to the
EWP, and they were going back and forth.
And that was a big challenge. To get it
to work was, in a sense, more important
than actually being able to send events
back and forth. Once I could get the
packets going back and forth, I can put
anything I want inside of them, more or
less. I had a bunch of bugs, so then I
went on to inter hub. So, EWP to hub,
that is intra hub in a one little
region. But inter hub is the next level.
So, if we have a hub that's controlling
this patch of stuff, and another hub
that's controlling this patch of stuff,
we want to be able to send messages back
and forth between the hubs so they can
interact and have the stuff spread from
one to the other.
This is what I failed at this month.
But I'm okay with that.
Uh uh all right, inter inter hub config
find the neighboring hubs. So, and I had
stupid bugs, sometimes not so stupid,
but a lot of stupid bugs.
Uh Wednesday, T minus 20. So, I sort of
got it So, I made a special little Zot
image that was just trying to send
packets back and forth to itself
as the minimum case. You know, people
talk about communications that they make
a loop back. A communications device
that goes nowhere, it just sends it
right back to itself cuz that's easier
to debug than having a sender and a
receiver that are separated. So, that's
what Zot was.
Uh now, I got the bugs, and eventually I
created a whole new host block a certain
set of stuff to help me out that we'll
see some of the results of in a minute
in the demo.
Clean up, bur bur bur cleaned a bit.
Okay, we got
you know, and again, and more bugs.
>> [snorts]
>> And more clean up, you know,
I had I had I thought I only needed to
store the other end, the destination,
but really as I built up the code, I
needed to store the source and the
destination cuz they were both important
and I was using the destination for the
source sometimes because I didn't really
realize that. So, I made an endpoint
address and I made a pair of them, one
called source, one called dest, then
things were better. And then I got to
the first horrible bug. Creamed memory.
Mm. So,
you know, you you get something where it
all looks like it's working and then it
comes back later and something has
changed when you didn't change it as far
as you know. Someone creamed the memory
behind your back. And that took a couple
of days. I finally got it. I wrote a
little poem.
Pop pop pop are you accident? Brush away
the hair. Finally finally finally fun is
in the air.
You may have heard the tune.
Then I got the second horrible bug.
>> [laughter]
>> And this is what software software
engineering folks call a Heisenbug
because what it means is, you know, you
see a bug and you say, you know, one of
the first instincts you have when you're
debugging stuff is to put in some more
print statements so that you can find
out more details about what's happening
around the bug. And usually that works
great, but in a Heisenbug you put in
print statements and the bug goes away.
So, how the hell are you supposed to
debug it? Especially on the black hole
hardware where the Tensix tiles are
buried off inside these Tensix black
hole chips, these Tenstorrent chips
that you cannot, well, not with any
easiness,
break and get a debugger in there and so
on and so forth. So, this was terrible.
I put in print statements, it the bug
went away. I put in some more print
statements, it came back in a different
way. Oh my god.
Friday, day three. Now I'm beginning to
wonder if this is another
misunderstanding between me and the
compiler. We had one of those a couple
of months ago about mem set, you may
remember for your super nerds.
Uh um
Saturday, I finally got it and it was
because there is a cache. There's a tiny
little cache and my understanding
was by default the cache was turned off.
So, I was saying, I don't have to worry
about that.
Uh and no, actually it turns out the
cache is turned on and it's a little bit
of a tricky cache to use and that's what
caused all my problems.
Uh
so, finally got some more ra ra ra ra ra
so, here we go. Uh um and now I thought,
oh my god, I've got to be in good shape.
I was 1 week away from right now.
Uh
and and the packets were getting
corrupted again.
Uh and I thought, oh no, this is going
to be another thing about the network on
chip not working right or the data
caching or something. But no, it was
just my own stupid bug and eventually I
ran that down and then, you know, okay.
Now, just under a week, single region
physics host display. Okay. So, how can
we get if we have the Amazon warehouse,
the hub and its little workers around it
the way I've got this set up right now,
it's a 2 by 2 cell that has 1 2 3 EWP
event window processors in it and one
hub. The picture I showed a while ago
was a 3 by 3 cell with a whole ring of
eight EWPs and one hub in the center. At
the moment, I'm doing three EWPs to one
hub, but the code can kind of allow it
to be changed fairly easily.
All right. Uh um
pop pop pop host access. How are we
going to get it? How are we going to get
So, now the problem is, right? When we
had this running before, all the events
were being sent back to the host. The
host was the one There was just one hub
and it was the host sending stuff out to
hundreds of little 10 6 tiles and
gathering them all back up which was not
scalable at all but it did mean that
once the events came back we were ready
to display them. We could send it off to
the FFmpeg encoder and have them turn up
on the video server.
But now the uh the events are
distributed into these regional hubs all
over the place and we have to somehow
pull them back in in order to take a
look at them.
All right and so this Saturday three
days ago
uh uh made you know did some more stuff
uh pop pop the stacks and at long last
finally it was starting to look
plausible and so finally finally after
everything yesterday
you know
>> [laughter]
>> uh uh I got uh a visible representation
on the video stream of events that were
happening inside the T6 T6 tiles in the
event window processors then getting
sent to their local regional hub which
was integrating them all together and
then in this case the host was reaching
in to that hub every so often and
copying out that little patch of grid to
display on the video server.
This was gratification long delayed. So
big fun big fun yeah big fun.
All right and then yes our poem. So
there we are. So what I want to do for a
couple of minutes I I guess
we're okay enough if I can remember how
I'm going to do this uh
Okay yeah. I just want to show a little
bit about what my life is like
uh debugging. So what we're looking at
here in an Emacs buffer is the log file.
I used to have a whole bunch of separate
log files that were all pulled apart in
various purposes and but I broke that
when I reinvented the whole network
traffic thing and I haven't
reestablished it. So right now, pretty
much everything hits this one log file,
which which does slow stuff down and so
forth. But again, that's down the road.
So this is a big mess. Um and you know,
we can
Oops, let's get it actually up on the
screen if we can hopefully that did not
glitch the stream too badly.
Okay, so here we are. You know, message
after message after message.
And all of this stuff with file names at
beginning of stuff, that's all happening
while the host is initializing
everything. And that goes on for a long
time.
Like that. But then eventually that gets
done. And we get to where is it? Can I
search ahead? Okay, there it is. Yeah.
So these little curly bracket things
here, these are the new HB file marks
that I developed over the last I
improved it in this past month although
I developed it a month and a half ago.
So 47 43 7 means line 7 of file 43 of
the entire code base. And zero means
it's on black hole card zero or black
hole chip zero.
One two is the 10 6 tile within it. H2
means it's the H2 heart. There's five
hearts in each 10 6 tile. It's so many
levels.
And this particular
T6 tile is running the EWP image and
here are the messages that they're
getting and so forth. And what's new is
if I put up split the window here and
all I have to do now is hit down arrow
and in the other window it finds the
reference. Go to another one.
Okay, so here it is. this
host
block mark thing. And I've got a whole
bunch of varieties of them. And you
know, it looks like it's all on the same
line, but it's different of the little
heart processors. Each 10 6 tile, five
processors. So, each two reach this
mark, each zero reach this mark, and so
on. They're all running the same code
image. It's very confusing. Uh um
and so on. And then we get on to other
stuff. And so, the ability to do this,
the ability to jump through the file and
have it take me to the next thing so I
could look at the actual code. I mean, I
wish I could print out other
information. Like here, this thing
automatically printed out the seed,
which is, you know, hopefully useful
information. But then I'd say, "Oh, I
wish I I could print out a common arg
zero." Can't do it. This is just a
static log file. All this is in the
past. Can't interrupt and and interact
with the thing directly. So, this is the
MFMx. MFMx
is the whole code base I'm developing
for the black hole right here. Uh uh
just to keep it separate cuz it is a lot
different.
The MFMx log jumper uh I have to say uh
I don't have to say, but I choose to,
that, you know, AI helped me out with
vibe coding the improvement. So, this is
all written directly in Emac. Well, most
of it is written directly in Emac.
There's some pearl in there, too. But
you get the idea. So, this has been
great and this has been key to uh at
least locating bugs if not necessarily
fixing them. So, that is uh nice. And
that is the uh
the log jumper. And now, let's take a
look at event window transitions on
regional hubs. Uh that is what we were
looking at in the uh Let's get me on
here. Okay. Now, what the hell is this?
Uh,
um
if you look closely,
you should be able to see that these
little patches are changing every so
often. They're not changing a lot, uh,
but they are changing. And now can if I
can manage to find the correct window
that I need, and again, I might be
glitching the video. I hope I'm not.
Well, uh, okay. So, suppose
I uh I'm going to type some commands
over here. Uh,
um I'm going to type a lowercase S and
an uppercase S. Actually, I'm going to
type a couple more lowercase and a
couple more uppercase. Uh,
uh into the controller window for the
simulation that's running right now. And
this will be a
>> [laughter]
>> a bit underwhelming. Oh, it looks like
right there.
There it is. That's That's a new fork
bomb that's been seeded. Here's another
new fork bomb that was seeded. How do I
know it's fork bomb? Because it's
growing incredibly fast. Uh,
um like that. And so, this This here was
this here before? I don't know if it was
there before or not. Uh, um
so,
each of these little squares is a
region. There's one regional hub
responsible for each of these. So, all
of the dots that are implied by the
colors here, all of the dots that are
implied by these little teeny clouds of
dots here,
uh are the atoms, the cellular automata
sites that get used for one particular
region.
At the moment, in this particular
layout. If I went with the 3 by 3 cell
with the eight processors in the hub in
the middle, that would mean each hub
would have to take on more atoms in
order to still produce HD style
simulations. That's the goal. We want to
do HD 1920 like 1080 cellular automata
sites, not just pixels, but live sites.
As fast as we can get it to go.
Whether we'll succeed in that, right now
it's exceedingly slow.
But this is the first time it ever
worked at all. Oh, and look at me. I
might not be able to see this. So up
here, so these ones that don't look like
the purple stuff, those are actually
drag and res, which is it doesn't matter
exactly what they are. They're a
different kind of physics that are
working and and they don't they don't
get eaten up by the fork bombs cuz the
fork bomb can't leave its region. We
don't have the inter-hub connections
yet. That's what's coming next. So here
it ended up just injecting a fork bomb
seed into that region and that guy that
is it that sees that's region is going
to become full of
fork bomb wiping out all the drag and
res there pretty quickly, but again,
we're not going to be
able to sit and watch it. So this is
where we are. This is live. It's been
running for 4 hours or something. That
that's not just because I left it
running cuz that was the first time it
was working this well.
Okay. So
Finally. Finally.
All right, regional events.
And so that's going to be about it.
In June, I have my oldest best friend
is coming to visit for a week. So that's
going to be a whole special different
thing. So I'm not going to put a whole
lot of extra stuff on the development
task this time, especially cuz this
month was pretty thick.
So rethink the host display. This was
just something to get anything going.
I want to have some strategies that will
involve more push from the tiles when
they're ready rather than pull
and make up some kind of little test for
how that get the regional hubs talking
to each other cuz we want to weld this
whole thing together into one
simulation. And have lots of big fun and
even enjoy the yak shaving which I did
sometimes particularly when I could pop
the yak.
That's it folks. Thanks so much for
stopping in either live now or whenever
you came to see it cuz you actually
watched it all the way to the very end.
Good for you. Good for us. You know
people ask how they could support the
project and it's like you know I don't
need your money.
But if something makes sense tell
somebody else. If something doesn't make
sense tell me.
Thanks everybody.