 The T2 Tile project is building an indefinitely scalable computational stack. Follow our progress here on T Tuesday updates. Hey folks, it's been two weeks. Got a lot to talk about. I'm gonna go as fast as I can. I want to get a little bit of a running start though because of what I actually have to talk about. So the T2 Tile project is about building a whole new kind of computer architecture based on these T2 tiles that you can scale out as long as you can afford to find space and power and cooling and tiles to plug together. And in order to do that you're gonna have to have software. We're gonna need software that can deal with the fact that the hardware is very variable. Some of it's gonna come and go. It's not gonna be absolutely flawless. And the software is gonna have to deal with that in some way. It's gonna have to have some robustness. And we're gonna need, so we're claiming, we're gonna need a whole new stack of both the hardware elements, the tiles, and then layers of software on top of that. And that's what we've been doing a lot of for the last, well, more than a year, for a couple of years even, to start to build the software stack. And what I'm excited about today is I've got something which is sort of very simple and humble from one point of view, but that seems appropriate to be a step on a path to useful computations because that is the goal. We do little demos that might be kind of goofy and fun. And those are important to teach us what these kind of systems look like, how they can jump. But again, we're trying to build systems that are actually going to provide a programmable framework to build robust, scalable systems. And I think what we've got today is a little teeny step in that direction. So, you know, I have, I grew up in traditional computing, you know, deterministic hardware guarantees to be correct. And so there's all kinds of things that just go unquestioned for me that I turned to when I'm starting to design software for the T2 tiles and hardly even think about it. Object IDs is one that I've been wary about for a long time. The idea that we're going to distinguish between objects by having unique numbers assigned to them somehow. And I've tried to avoid that, but I kept falling back towards it. The idea of go as fast as you possibly can, of course, you go as fast as you possibly can because somebody might need to use your result. You know, how could that not be right? And the basic idea that the way you do a program is you model the work to be done in some fashion and then you make the model crank and that's how you can you program. All of those parameters, all of those time principles came under attack or in fact kind of set me back in the last two weeks. So the story really begins five years ago or more when I was using this 2D printer idea to try to copy objects. So you start with this block, say, and you end up with two blocks. Or, and the way it works is you put down an atom of this C plate, circumferential plating that surrounds the object that's to be copied and measures it and figures out how big it is and then goes through it line by line making a copy over here and then strips the plating out as the last step. So here it is being surrounded and there it is completely surrounded. Here's a version of a much bigger one that's in the process of being copied and here it is after the C plate has been stripped out. So that that was 2016, 2015 actually. And the way it worked was the whole idea of the C plate was that it had two key data members. M Max was the the bounding box of the object being copied, whatever it was. And location is the position of this particular atom of C plate within that bounding box from 00 to M Max X minus one M Max Y minus one like that. And that's how the C plate knew where it was and it knew what it whether something was inside or outside the thing based on the bounding box. And but you know that was not enough. So you say okay is this particular C plate within the bounding box of the of the thing or not. Well it might be within the bounding box but it might actually be a C plate of something else that's getting reproduced. And in fact we'd see various kinds of failures when we were playing with that thing and it would have more than one guy trying to reproduce at the same time. So still I had this idea of QID an arbitrary number a tag number that was going to distinguish one object that might be copied from another. So that the tag bits is what was in charge of that. But bits are really expensive inside an atom in the movable feast machine that the T2 tile implements. So typically I would only have five tag bits which means there was only 32 possible tags 32 possible unique IDs which is not unique at all if we started to have lots and lots of objects being involved. But I thought it was better than nothing and it wasn't clear what else you could do. How do you tell if an atom of foo is really part of you or an atom of hand is really part of your hand or somebody else's hand that just happened to be nearby? And that's what it was. So that was five years ago. Sell identity with using the tags, the C plate that goes around the thing, copy it and then remove the C plate. And five years pass now it's this year starting to revisit the whole 2D copier ideas trying to bring it into the T2 tile framework. And there it was the QID still there still five bits and playing around with it. Here's the key step when the C plate sees an element of the an atom of the thing it thinks it's supposed to be copied. It copies the tag from that thing into itself and then it gets spread to all the C plate that's produced from there and they all think they're part of tag 1F or whatever it happens to be. And you know this is from the video the demo where we had where it was actually sort of things were reproducing not very accurately on the grid and that blue to red rectangle is a block of well now it's called plate rather than C plate it doesn't circumference it's the build plate for the 2D printer and its main purpose is to reserve space to just spread out to all the space that the copy is going to need and make sure it's all empty so it's available and it's supposed to quit if it runs into other obstacles blocking the path including other bits of other plate and of course as we saw in the video it all got pretty messed up pretty fast and it was during that process that finally finally the pin dropped that no we don't need a tag to tell if a piece of plate is part of the same object that we are if this if I'm a piece of plate and this thing is a piece of plate what we do is we look at where I think the origin is I think the origin is at 7 3 so it's over there someplace well if he's one to the east of me then he's at plus 1 0 to me so he should think the origin is at 8 3 and if he does think the origin is at 8 3 then we agree on origin and that means we're the same plate on the other hand if it's got origin his where he thinks the origin is plus his offset relative to me doesn't match what I think then it's somebody else's plate that's all we need so that this is kin method what does exactly that it checks the coordinate of the other guy relative to me and then subtracts where he thinks he is minus that and that's got a match where I think I am and if it does we're on the same plate and that worked great don't need any tags for this for the plate now again in the original idea when the reproduction was done the plate was stripped out but this was seeming more and more like a poor idea why not keep the plate around sort of as a moat a border around the object and then if it ran into any other modes it could use this technique to immediately know is this the same thing is this part of me or is this part of some other organism and it's been great and it's very powerful and it's the basis of everything that's happened in the last two weeks and you know all I can say is you know oh my god it's so obvious after I saw it and yet it took what five years six years of on and off thinking about it to see it it's unbelievable so I went crazy from there okay so now we know so why don't we say we're gonna keep the plate around it's gonna be a durable thing surrounding important other stuff somehow and so how are we gonna do it so I did a shape interface all super general and really cool the idea being that you just have to define this predicate is in shape it gives you a coordinate two six three nine one two and you just return true or false to say whether it's in the shape or not and I've used it to make this kind of key shape or spike protein perhaps that consists of a sort of circle in very loose grid terms and a straight box and that's just by defining is in shape predicate that says if the Euclidean square distance from the origin is less than 25 meaning it's five or it's got this X but bar sticking out then it's in so it was just to show that we can do arbitrary shapes with this thing seems very flexible very powerful I got it handling rotations and soon enough you know had it doing all kinds of crazy shapes going in various directions with it you know great but then as I tried to say okay now what's next beyond making pretty shapes with this thing you know so so here's an example of it simplified one says you know the absolute value X less than 2 absolute value Y is less than 2 that gets this 3 by 3 box or if it's equal to 2 minus 1 so that gets a box with a little handle on it you know why you would want that I don't know why you'd want that but look at this variation we just changed the 2 to a 3 and now you say well is 3 minus 1 supposed to be part of the shape well obviously it is because it returns true from the predicate that defines the shape but the rest of the code will the way the rest of the code works it will not find this because it starts from 0 0 by definition and it only looks at nearest neighbors it will not jump this gap it will never ask if 3 minus 1 is a part of this shape and the more I started working with it the more my wonderful cool super flexible software engineering shape was starting to be a real pain you know so for example like I said how does the shape know where it ends and how are we gonna route signals even if it is connected you know it might be going around in loops and then back how we got to know how to do anything with this and when it really comes right down to it how many shapes do we really need you know there's the famous result that traditional computing all can be done with one logic gate which you know like not and is an example and so how many really shapes if we're going to be building up more complicated spatial computing using the shapes how many shapes do we need so I said nah screw this the only shape you need is a rectangle so that's what we did I got rid of the shape interface and I went to the plate interface that basically it says it's got one thing where you have to say how big is the plate overall it's seven by three and then where is my position on the plate four comma two and the position on the plate is somewhere between zero up to one minus the size of the XY and and that's it so but now we have more information so we can't just represent it by our position so we can do it in pairs so the square bracket is the size of the plate according to this particular little spot in the grid and the parenthesized is the position within it and once we have this we have a tremendous amount of information right at our fingertips so for example we can very quickly realize that these two guys are part of the same plate it's too wide two width by one height and this guy is at zero zero this being and this being is at one zero so in fact these are the two sites that go into this two by one plate this over here also says two by one but it's not part of the same plate because in fact it's the right hand end of some plate that's extending off in the other direction on the other hand this four or five monster is down below goes everywhere well it goes off to the left and up above and we know that immediately without even ever seeing what the heck is up there like that and this just led to zillions of wonderful things so you know it was so much better than just what I thought it was which is determining do we have the same origin so yes you can answer the question are we on the same plate or not but you can answer many more questions as well and you know one thing you can say is do I want that plate so if that site is empty and someone is next when they say well do I want that new say sure I can see if it's part of my plate and five four says yeah that's part of my plate in fact it ought to be for two so it just goes ahead and fills it in because they have enough information to do that the two one plate couldn't care less about it and so forth so all together there are five possible relationships that plates can have with each other given two sites of plate and comparing them they might be on the same plate it might be the left the one contains the other or the one is contained by the other or they're unrelated meaning like they're next to each other or one overlaps the other without either of them actually containing the other and the way the code I'm designing now works is that we're trying to avoid overlaps plate we're trying to have hierarchical nesting relationships we'll still have overlaps plate in our back pocket if we need it but so far haven't needed it and so right now that's an inconsistent condition and the system either is going to lock up or it's going to pull the rip cord and die depending on what particular situation it runs into so this has been great this has simplified everything and really made the code go you know made it have many many fewer bugs much more quickly and it took me forever to see it you know and I was always I you know I was thinking the plate was going to get thrown away so this wouldn't be relevant so therefore we had to have ID numbers so that that things could identify self versus non-self without the plate never got around to saying well why not keep the plate it's helpful you know because it takes up extra space you keep thinking in terms of maximum efficiency and really what we want to do is think about ways to smooth out the landscape lower the order so that you can do more stuff locally and this is an incredible help for doing stuff locally and so the definition of being part of the same organism being part of the same cell it's not even clear what level of metaphor we want to use to describe this is defined by sharing a common origin being on the same plate so once we have these notions of the five different relationships we can easily compute the relations between all pairs of these things just by doing simple arithmetic you know essentially like box intersections you know that kind of thing and it's been absolutely great and you know so so obvious after the fact right you know I can't it takes me to find this stuff so as an example of the stuff that does you know we need swap lines we're going to actually move these things and so in this case I'm calling the swap line concept for this I'm calling it a tecton because it does plate tectonics it moves plates and it also allows them to grow seems pretty good and now in this case because we have the rule that everything's a rectangle and that the tecton is going to apply to an entire plate and any plates inside it as well and so we've got you know a little example like we want to send a plate we want to move that two one plate to the east so we're going to send a tecton moving tecton that's the m versus a g for grow to the west and you know there's one little weird thing here right you know the tecton wants to say two one because that's the plate that it's moving over but it's actually a two zero which is not a coordinate inside the plate so it's kind of like a you know a fence post or something starting from off the edge uh like that which I didn't really like and it has caused some bugs but I've got it mostly working and it moves on down and it updates its own position so it knows where it's going until it gets to the bottom now when it's doing grow it actually has to modify the size and or the position of the plate that it's moving over in the case of move it doesn't but then I had one more question which is what are we going to do now this guy the the tecton is done or it would have been a whole column of them they're all done you know and they're going to look at they have to look at their neighbors and analyze who's supposed to be in there who has priority or something like that and finally again the pin drops you know no no no it's so much easier than that the tecton just erases itself and the healing of the plates automatically takes over it's gone and who needs to have that again five four needs to have that and it needs to be two two zero five four it heals itself so that's the pattern that we're using all through it you do your business when you get to the end you die you erase yourself and the system heals around you and it's been a wonderful division of concerns it's worked really well now additional issues okay we can move the a plate west or east or north or south we can grow it but someone has to issue those commands it's not going to be me clicking on it on the tile out on the grid so i'm going to say all right the upper left corner the origin is going to be the plate control that's the one that's going to issue the command so it can issue at least tectons for west and north but then the question arises as it did when i was implementing it how long do we need to wait before issuing the next one if we want to go west and then north because we want to head northwest how long do we need to wait and it wasn't long when i was debugging all of this stuff that you know it got locked up that it got a west and a north that would cross and they're both the same priorities they messed each other up and so forth just like was discussed in the spot paper last year so you know there's a timer library built into the uh ulam standard library so we could put a timer on when when we release one of the tectons we start a timer and wait for it to expire but it's hard to set that timer because how long the tecton it's going to take it depends on the size of the plate the bigger the plate the longer it takes but even that's not enough because if there's intertile connectors all kinds of reasons could affect how long the given line takes and then once again eventually the pin drops no no no we don't want to go as fast as possible we don't want to put the unlimited control at the center and say everybody is listen to the center we want to go in sync we want to go in consensus with the plate the whole point of the plate is that it's a zone of consensus we all agree on where the origin we agree on our size we want to agree on what we're doing so what we do is we have synchronized control with the distributed clock this is a familiar thing from distributed algorithms the root ticks when it's available and issues a command and the tick and the command flood downstream across the plate when it gets to the max the lower right corner uh uh the max detects that the max knows it's the max because it can check the coordinates and the size and it talks it acknowledges the tick and starts the talk now starts flowing back upstream and the command the way I've written it the command gets executed wherever is appropriate most of the time the commands that we're talking about either get executed uh at the max itself or they get executed at all the border sites when we have a command saying how much space is there around you so that's another thing that the root can do in addition to just saying go north south east west or grow it can say what's the minimum amount of clearance we have in all four directions inside and outside so we can decide do we have room to move or do we have need to move like that uh and and that just happens on tick and talk so automatically as the plate gets bigger everything slows down so that we don't have multiple commands in progress at once you know could it be fancier and have multiple uh uh tectons in flight sure with more complicated code that's what we had in the previous one it was actually pumping as many through of the swap lines through as it could it was buggy but this makes sense this is clear and the point is a plate is a zone of consensus a plate is a synchronization zone so we have one command in progress at any given time and it works great and again again you know uh uh i mean i spent a lot of time trying to think about how to come up with a good timer scheme and then this is self clocking that's what we want all right let's look at a quick demo and then wrap it up uh this is a uh recording that's been going it's a little test atom test 12 that just starts the seeds a little one by two uh plate of test the grid of plate of test 12 and then the root starts issuing move and grow uh uh tectons uh and also commands to the max to do it as well so every time you see a a white a black line there is a move tecton a white line is a grow tecton uh this is you know for some reason it's it's kind of ends up growing kind of wide and i wanted it to sort of end up being more square but then this whole run was interesting enough that i wanted to let it go and it only started what you know two days ago uh something like that and look at that so it's gotten far enough that it when it did its border patrol and says how much space is there outside and inside it figured there was enough space inside that it went ahead and created a sub plate which is now executing on its own and look at that you can see the tick tock of the outer plate is going at whatever speed it's going while the inside tick tock is going much faster because it's smaller and they're all moving through each other the the now we've got a third guy a second sub plate inside there and they're all going at their own appropriate speed given their size as they as they move and grow within a sub within a larger scale plate or within the general grid of their own um and and this has been running for for well it's still running now actually so um now you know it's the display is going faster and faster here we're up to 390 air and every five seconds i think it's speeding up even more so don't be freaked out now there's something i want to show you here to set up yeah i missed it but there okay so look at this that this whole area here is brown that means it's waiting for a tock the lighter yellow and is waiting for a tick but the problem is these two sub plates are right up against each other so this spot in the middle is in the shadow of these two plates and it cannot see the tock the tocks only go strictly upstream the ticks only go strictly downstream so uh this guy cannot talk therefore the guys upstream of him cannot talk therefore the root never sees the tock and now the uh main plate is is frozen and when i saw this it's like oh i gotta kill the simulation and go deal with this but the sub plates are decoupled the sub plates are still executing they're looking inwards and doing their own business and the whole point of having loosely coupled interior systems instead of having it be completely rigid having these things float around and move and have space around them is it allows them to continue building doing their business even when something weird has happened in the larger scale and in fact this resolves itself quite quickly because the the two plates shift position enough to clear the gap there it is i think it might there it happens again but it also clears again and because they're all doing border patrols eventually and pretty soon here the two upper sub plates will move apart there it is now we have a empty line of container plate in between them and so now there can be no shadowing and you know we color the borders uh a different color to drive home the fact that even though they're really just more plate the design principle is you're not supposed to step on the border of your containing plate and that ensures that the root and the max always have a path to talk to each other but since we're flooding through the interior so that everybody knows in case they need to do it if we just keep some empty space around the plates and their containing plates and their sibling plates they weren't up to up to an even a fourth sub plate in here and this is great you know um i've got all kinds of plans on stuff to do with this about that coming soon all right so one last little bit and then we'll wrap it up so there was that ucky flaw that the tectons had to start outside the plate that they were planning on moving and i didn't see any way around it until again you know but if you just add one in this particular example now by putting two two at two zero you have instantly magically created a new plate that contains the entire plate that you're planning on moving and the way the rules is you know contain plates defer to container plates which is what we want so the the uh container plate has priority and the contained plate will just go passive as the tecton moves on through and again now it's all consistent there's nothing weird and it expresses what's going on better the point is the tecton doesn't want to be part of the plate it's operating on it wants to be the work area it wants to represent the workspace that's needed to do the operation so this has all been quite a lot of fun for the last few weeks um and so you know deprogramming Dave you know object IDs no you don't want object IDs how do you do without object IDs using interplate relations it's all about relationships and how do you know about relations well in this case you say do the plate relation are we same unrelated contain container overlap work as fast as you can seems obvious but it's like a nerd at the dance you know showing how fast that they can dance when what you want to be doing is dancing in tempo with your partner uh and in the distributed uh mode it's not about speed speed doesn't help unless everybody can come along unless the consensus can move with you and finally model the work of course no model the work bench model the area that you're working in a whole new stack put some bite into it this is some of the suggestions about how different the feel is in this new world okay that's it uh in two weeks my goal is these plates are computing something somehow i don't know what the details are yet i've got ideas we'll find out in addition my hope is is that we'll have some version of the plate kind of like the test 12 atom we just saw running on the t2 grid and have a demo for next week we'll see how it goes uh this has been a really long one uh i i hope you find it was interesting it not too nerdy because on the path to utility this feels like progress