Bryce

It says there's a comment. Slash slash. We must prepare for his coming. Everything's lowercase except for the H and his. And then destruct goeser. And it uh it's a function object that calls something's uh uh destructor.

Jared Hoberock

Well, the comment made more sense because I think that used to be a forward declaration. So obviously this is a Ghostbusters reference.

Conor

Welcome to AD SP the Podcast, episode 242, recorded on May 21st, 2025. My name is Connor, and today with my co-host Bryce, we finish part four of our four-part conversation with Jared Hoberock. We chat about thrust, parallel algorithms, and more.

Bryce

That actually kind of leads to another question that I had meant to ask earlier, which is um you talked a little bit about the transfer of thrust from uh from research to production uh uh in the handoff, but that was sort of after Thrust had uh you know sort of made it, you know? And and uh you know, at the time there were a couple other libraries that were kind of similar to Thrust, like uh CUDPP, and there I think there was like one or two other ones. And I just wonder, like, can you tell us a little bit about when when you guys first put Thrust out there? Like, what was the response? Was it like uh did it just very rapidly get a lot of uh adoption uh and and grow in popularity? And like what why was it that thrust is the one that that succeeded and became so ubiquitous? And like how quickly did that happen?

Jared Hoberock

Um I mean the reason it succeeded is because we chose the right interface. Uh how fast it happened, um I don't really remember. I I remember we gave uh at the first GTC we gave like two talks on Thrust, and I remember the the crowd being large and enthusiastic. Um so it at least it succeeded enough to attract some you know some people to a talk. Do you have the slides from those talks? Uh somewhere. They might be in are they not in the repository? Uh they might not be, I don't know. Oh, I lost it. If you look through Perforce, you'll find them. Um or I might have them in uh like a Google Drive or something like that. Anyway, yeah, they were Nathan gave a talk and I gave a talk at the GTC. And uh Nathan's talk was sort of here's what thrust is, and I think my talk was like here to do, here's how to do some you know interesting tricks with thrust, and it's just you know walk the slides, just walk through some of the example programs.

Bryce

But uh so how how m how long uh so like after that uh a did you ever reach a point where you guys were just like swamped with PRs and and like when did when did you when did it become like visible to you that there were a lot of people using this? Uh and when did like uh when when did the writing was the writing on the wall that like it was gonna have to be taken over by the engineering team?

Jared Hoberock

It never became visible to me that a lot of people were using it. I would have been happy to uh I Nathan was really pro-productization because uh you know, for career reasons, I would have rather not productize it so we could continue developing it in um interesting directions, I guess. I guess the problem is when it got productized, it's became less flexible. Like changing it became harder. Um harder. You know, before we actually released it on Google Code, like GitHub didn't even exist at the time. So we're the the the initial release was on Google Code, and if we wanted to change something, we would just change something. And uh if people had a bug, we would fix it as you know, next day or something like that. Uh you can't really do that with a product. Um but um I don't know, like hearing you guys talk about it uh or hearing you guys talk about um people out in the wild using it, I guess, is when it dawned on me that it has a lot of users. Like at the time, it just seemed like uh you know a project we were working on and we're happy to work on.

Bryce

Yeah, I was I I was I sort of always had that sense, and I mean I guess it's it's hard for folks who sit and research because you you produce a thing, and then it if it becomes marginally successful, then it gets picked up by, you know, some engineering team, and you then you go work on the next thing, and you don't necessarily see what the I think it works differently now.

Jared Hoberock

So Thrust was one of the first things that NV research productized, uh and we didn't have a lot of experience with handing off things to product teams. So I think if it were to happen today, uh researchers could be involved in the product like to the extent that they're interested in. But in those days, it was sort of seen as like, okay, you guys productize this thing, it's time to work on something something new. Um But I think um since then people probably see the value of keeping the original author sort of in the loop, uh, maybe a bit more, if they if they want to be, you know, with with uh more recent projects. Are you proud of Thrust? Uh I have mixed feelings about it. Like uh I guess what I see is the sort of missed opportunities. Um and um I sort of see the the mistakes that could be corrected or should have been corrected, but um it's I mean it's gratifying to see that people still like to use it and think it's it's uh worthwhile. But um it's hard not to focus on things you wish could have been done better.

Bryce

One one frequent one frequent thing that gets brought up is while thrust is great for many things and it's a great place to start, if you're doing if you're in vo if your algorithm ends up being one call, it's a single pass thing, thrust is perfect for that. If you're launching multiple things because Thrust doesn't have an asynchronous model, because it blocks, it can become a performance bottleneck. That's something that uh uh is uh an often cited criticism uh of Thrust. Um and uh we sometimes think of it as being an on-ramp uh for parallelism that uh it's something it's easy and gets people started. But oftentimes if you need to architect a much more complex application where you're launching a bunch of different kernels, then you have to go and do something a little bit uh lower level. And uh uh had Thrust evolved uh earlier and more to support uh asynchrony um in a more structured way, um uh perhaps it could have been even more successful than it is today.

Jared Hoberock

Oh, for sure. Uh and and thrust predates asynchrony in CUDA. Um thrust predates CUDA streams, right? So uh and it was always not clear how to how to make it work well with CUDA streams, and I don't think it ever really did uh or does uh work well with CUDA streams. I guess um I guess another regret is that um in addition to thrust, we also have Cub, and these two things are have interdependencies, like they're cyclic dependencies between the two libraries, uh which causes problems. I guess it's it's just a shame that we couldn't find a way to uh do cub-like things and in thrust and or you know, thrust-like things in Cub. It's a it's sort of an awkward situation to have both libraries.

Bryce

Well, and it's actually interesting that you you mentioned that because you know we um so when I started at NVIDIA in 2017, uh I I was Thrust had been essentially without a maintainer for like two or three years. Uh and like on day one, I didn't even know what I was being hired to do when I started. Uh like it was unclear from the job description. Um, but uh in and like I my hiring was weird, but just like Olivier had talked to someone and been like, hey, you should interview this guy, and then I interviewed, and then they're like, Oh, you want a job? And they uh give me an offer, and then I showed up, and on day one, they're like, So here's this thing thrust, you're now in charge of it. There's no product manager, nobody's really touched it in two years, figure out what to do with it. Um and so then I started the uh the CUDA C core libraries team at Nvidia, and originally it was just me, and then it was me and one other person for some period of time, and we productized uh Cub uh uh uh just as Thrust had been productized and did some amount of work to uh unify things between the two. But now, you know, eight years later, that team, the CUDA C ⁇ Core Libraries team, uh, or I think it's now just the core compute libraries team, same acronym, but uh but different meaning. It's now like a I don't know, it's more than 10 people team. It could be 15 people or so. It's uh it's it's a lot of people working on it, and they work on Thrust, Cub, and LibQ, which is our port of uh uh of libclus. And there's a move for all three of these libraries to essentially uh merge together into one unified thing. Um and they're all living now a monorepo now, and and in fact, there's some there's some talk about uh the uh not the thrust name. The thrust name will essentially always exist because there's so many people who have written code for it, but uh uh of migrating the thrust backend and sort of merging it with some of the other things. So that the thrust code base, parts of the thrust code base that have been around for a long time now, essentially going away in the future. Um and all of these things merging together into a uh uh uh you know a more uh unified uh uh structure uh down the road. What uh I think the last thing I I would uh uh I'd ask you about is um uh the thrust was uh you know open source sort of from the start. Um and uh uh you know like what what was what was the what was that like? Um I mean this was in a very you know an early time. It was before you know before GitHub. Um you mentioned it was like Google Code, but like can you how did you collaborate with people back in the day? Like how did how did users find you? How did you interact? Like what was that like?

Jared Hoberock

Uh we had a Google groups uh mailing list uh that people would ask, how do I do this? Uh in thrust, that sort of thing, or maybe they would report bugs. Um there wasn't like we didn't use Discord or Slack or anything like that. Um so just through um you know mailing lists, I guess that's how people used to collaborate in the 2000s, you know, uh through a mailing list or something like that. I remember when we uh pushed the code for the first time, we we announced it on Hacker News and uh some subreddit. Um and just you know wait wait waited to see what would happen. But um as far as I know, Thrust was the first open source thing that uh NVIDIA ever published. I don't know of any that are there. There might be a few um previous previous uh publications, but I don't know of them. Um so that was um you know we had to get special permission for that.

Bryce

You are you are in fact correct um that thrust was in fact the first open source project at Nvidia, and and uh uh we know this because uh Thrust completely predated any open source process at uh at NVIDIA. And and every like year or two, somebody's like, hey, like why isn't there like an entry in like our listing of open source things like in this database for Thrust? And we're like, well, because it was the first one. Like it existed before all these things.

Jared Hoberock

Yeah, well, just the nature of the software uh demanded it that the code be available, right? Because it's uh C templates, so there's no way to hide it, and there's no way to use it unless you have the source. So uh had to be, had to be open source.

Bryce

Yeah. And I mean, you know, you mentioned that um thrust uh lifted from other projects, and in fact, thrust contains, you know, thrust iterator code was just taken from Boost, and some other parts were taken from some other places, and it probably would have not evolved as quickly if you had not uh been able to pull in all this other stuff.

Jared Hoberock

That's right. Yeah. Uh I I'm not uh I'm not a expert GPU programmer. Uh I can just kind of get by. Uh but I'm good at taking other people's code and making sense of it, so that's uh mostly what we did.

Bryce

Uh Jared, if you're not an expert GPU programmer, I I don't know what we are.

Jared Hoberock

There are levels.

Conor

There are levels and uh Yeah. What does that mean for us, Jared? What does that mean for the people?

Jared Hoberock

Well, the whole idea of thrust is that you don't have to be an expert programmer to use a GPU. You just take something off the shelf uh that someone else has already figured out.

Bryce

It's it's really the what was what was the comrade tagline? Uh the original comrade tagline.

Jared Hoberock

Own the means of computation.

Bryce

It was actually very fitting. I uh uh I when I worked it uh on the HBX project, um uh the original name for the programming model that Thomas Sterling wanted to use was he wanted to call it Agincourt, uh, for the Battle of Agincourt, which was a uh I don't know what century battle between the the British and the French. And the French had a an army that was primarily like mounted knights, and the English army was primarily uh you know peasant longbowmen and they defeated the nobility. And so Thomas Sterling had this had it like this uh uh this very idyllic uh uh story of this. It was this programming model where tons of tiny little cores and and tiny little tasks uh would take over and and topple the the great evil uh that was uh uh MPI and uh and and uh sort of synchronous message passing uh programming models. There were there was uh uh you know uh I couldn't find it. I asked, I tried to ask JetGPT to search for it while we were chatting, but there were a couple interesting snippets of code from like the early days of Thrust that had some quirky comments that if I ever come across again, we'll have to have you back on to ask you to explain.

Jared Hoberock

Uh what are you what what are you thinking of?

Bryce

It was like something like Frobenator or something like that. There was some like weirdly named class somewhere, and then there were a couple of things.

Jared Hoberock

I think I know what you're talking about. You're talking about you talking about Gozer?

Bryce

Yes. I am talking about Gozer. What was Gozer?

Jared Hoberock

Uh is the code still there or is it gone?

Bryce

I'm looking right now. I really, if they deleted that, I'm gonna I'm gonna have some choice words. Oh no, I think it's gone. How it how did you spell it? Was it one O or two O's?

Jared Hoberock

Gozer is spelled G-O-Z-G-R. I'm sure it's in the GitHub history somewhere.

Bryce

No, it's still here. So could you explain yourself? It says, I'm gonna read it. I think it's pretty it says there's a comment slash slash, we must prepare for his coming. Everything's lower scale lowercase except for the H and his, and then struct gozer, and it uh it's a function object that calls something's uh uh destructor.

Jared Hoberock

Well, the comment made more sense because I think that used to be a forward declaration. Uh so obviously this is a Ghostbusters reference.

Conor

Oh man. Obviously, I was born in 1990. I don't know what this means.

Jared Hoberock

Ghost of the destructor is the reference. So this is a functor that calls a destructor. I remember uh I got an email uh some a long time ago. I never thought anyone would see this. I just thought it was being funny, but um, I got an email uh from a compiler engineer at NVIDIA because uh I don't know something about Thrust was exposing a compiler bug and it involved this this uh struck that we're looking at here. And uh JD like posts the repro in in the uh in the email and it's got Gozer uh staring back at me and I'm like we didn't we didn't like discuss the name or it or uh or it I never thought this would come back to haunt me, but um Gozer is terrifying like that.

Bryce

At least as long as I'm at NVIDIA, I'm gonna make sure that uh this particular piece of code remains in production.

Conor

The real question is, Bryce, did you know what this meant?

Bryce

I had no idea. I am I like you. I'm the same age as you, Connor.

Conor

I mean, you're one year you're uh one year younger?

Bryce

Older, younger? What year were you born, Connor?

Conor

I'm 90. You're 89. You're 91, right? Yeah. 91, yeah, you're one year younger. I was gonna say, I would feel very bad about myself if you understood the reference and I did not. I read this and I was like, I don't understand the joke, but uh here we are. I don't know how many people we have listening.

Bryce

I think over time it'll roughly be three or four thousand, so I mean uh it is it it's line 102 in thrust slash detail slash allocator slash destroyrange dot in L.

Jared Hoberock

I'm sure you've got some boomers in your audience.

Bryce

Jared, were these uh I've I've always wondered this, so I'll so I'll I'll ask, even though we're you know over time, but but why not? Um uh two things I'll ask. One, uh Thrust has a lot of these headers that are dot in L, like inline. Um was this because you at some point had people that were like it would include these in their like .cpp files and you wanted to separate them from the declarations, or was there at some point a built, like a version of Thrust that had uh like a mode where you just like Boost Asio where you could build like a library version of it in addition to the header-only version? Or like what is what did that dot inl like naming convention mean?

Jared Hoberock

I think that's just a Jaredism. I don't remember why I chose to do that.

Bryce

And uh I I g the the other question is uh Thrust uh uses um dot h for its header files, and uh some other CUDA projects use like .kuh and some other extensions. Uh what like why why doths? Why not uh.kuh? Or why not make up your own uh extension?

Jared Hoberock

I've always uh thought that I've always disliked dot cuh. Uh but uh at least at some point there was a goal that you could include any thrust header with a normal C compiler and it wouldn't freak out.

Bryce

And um I don't know if that's still the case, but uh there wasn't you don't you didn't have to include it with uh NVCC, so it seemed unnecessary to that's actually uh it's a good point that we we didn't talk about this, but Thrust has this back-end system that we we mentioned, but we didn't talk explicitly about the fact that uh Thrust can like can target CPUs, it can target CPU parallelism. Uh and it's it's designed in a way where like no part of the thrust interface says CUDA, and Thrust has this uh uh you know, it uses the the host and device terminology um uh where it's very like abstract from the GPU. Like you can have a device backend that's not a GPU backend. Um why why was that uh like was that intended to help adoption? Like why why do that? Because it seems like it created a bunch of work too.

Jared Hoberock

Uh because it was helpful um when just debugging your program for correctness to be able to use like a sequential backend or uh I don't know like Open MP backend, for example. Um so I think it definitely helped with adoption. Um just getting the CUDA stuff right in your CUDA C ⁇ program is like a task all on its own. And really, if you wanted to, you could write everything uh you know, just get your algorithms uh skeleton together first and make making sure that it works um in parallel before actually targeting uh a CUDA GPU for real. I mean you could totally I could totally see that uh being helpful to people. Like going all in on um GPU parallelism from the get-go is often a big big first step. So it's helpful to phase things sometimes. And I think the CPU backends uh can help with that. What was debugging like in the early days? Uh well we used to have device emulation in CUDA. So MVCC, NVCC used to have a CPU backend. You could put it into a mode where it would generate um x86 code, and you could actually step through your code in a debugger. So that's what debugging was like in the early days. But then they phased they phased that out very soon. They used to use an entirely different uh compiler backend for NVCC. Um I think it was Open64, I think is what they used. Um anyway, I think maybe that made that device simulation uh mode um easier. But um I don't know, I've never used debuggers. I've always used printf debugging. So that's what it was like for me. Um Connor has some thoughts.

Conor

You've always used printf debugging? You've never used debuggers?

Jared Hoberock

I used uh when I used to use uh Microsoft um IDE, I used to have a you know a pretty good debugger, and I would use it then, but um no, these days I don't use uh IDE. I use printf and uh the terminal to program.

Bryce

I also use printf.

Conor

Is that like because you watched The Last of Us season one episode four where it was like survivalist technology and you really identified with that and you want it to be like modern technology is not for me and I'm gonna bunker down?

Jared Hoberock

Like there used to be this this guy at NVIDIA, uh I think he was a dev tech, he had a blog, um, but he was an actual survivalist. He wouldn't use libc. He would uhc. He wouldn't use any headers at all. Like he would uh just insert sys uh system calls if he wanted to print into his program. I guess because it made his programs fast. I'm not actually sure why, but one thing is it made you know compiling and linking his his program very fast. But uh if he needed to debug, I think he would like put us to the screen and he would get at put us from a syscall or something like that. So you can there's levels to survivalism too.

Conor

So you're saying y you're not even close to uh what is really possible in terms of coding survivalism using not debugging and just using printf is just the start. You're not even at the true level of survivalism in coding.

Jared Hoberock

I guess I guess uh I've benefited from the things I've had to program in the past of really well-defined uh interfaces and uh like think of every thrust algorithm, like the post conditions are spelled out explicitly what they are, so it makes it really easy to write unit tests for what you're doing.

Bryce

Um Jared, when when you encounter a bug that you have to debug, is it typically a like a parallelism bug?

Jared Hoberock

No, it's typically a compiler bug. Those are the bugs I run into.

Bryce

When you run into a bug where you have to put a printf into your program, is it usually something that's like parallel?

Jared Hoberock

I don't know if that I don't know if I would say that or not. Um bugs can come from you know bugs can come from any reason. I will say that now that I I spend most days in Rust, uh I don't spend any time debugging. But when I am writing um writing like MLIR code and C, the first thing I have to do is debug whatever I wrote because it's not gonna work the first time, for sure. And then yeah, I I do use printf.

Bryce

I usually use printf because when I'm debugging something, it's usually something that uh uh like if it's if it's something that's not a parallel bug, it's usually pretty quick for me to get to the bottom of it. Um but for the most part, if it's a bug, it's a bug that is happening due to some like race condition or you know synchronization you know thing. And so the what I my my process is first I run compute sanitizer uh or like like uh you know a mem checking tool that tells me whether I'm randomly writing somewhere to memory. And if that's the case, I get to the bottom of that. And then if that isn't the case, then I usually start adding printfts to to see if I've like got some incorrect assumption. And if I open it up in a debugger, usually the the race condition, like the timing has changed. Um and so it's not particularly useful. And if I if I go, if I have to go and build the code in like with debug symbols and like with debugging in a way that it would be useful to do anything in the debugger, like it's not like whatever the timing condition is that caused the problem has typically gone away.

Jared Hoberock

One of the first jobs I had at NVIDIA, uh I was working on the um optics team. So optics is like a ray tracing um framework. And so one of the first jobs I had uh was to sit and babysit um an emulator waiting for a race condition in the chip that um some ray tracing code exposed. And you just sit down there for several hours just waiting for something to happen or not. Uh but that's what I spent a week doing uh shortly after coming to NVIDIA. Race conditions are tricky.

Bryce

I had a I had I had a colleague who one time I was uh I was at the office, it was like 7 p.m. and he's sitting across from me, and um he uh he like stands up very abruptly and uh I'm like where are you going? He's like, I have to go like I have to go monitor this bring-up machine in some other building. Um and I'm like, well, why can't you monitor it from here? And he's like, you don't understand. It can catch fire at any moment. And so I I later came to understand that uh when you're on bring-up duty, like one of the jobs is like you just go and sit next to the bring-up machine and there's a fire extinguisher there because like it's it's uh it's got these giant you know heatsinks and fans, and nobody's figured out how like what clock speed you can run this thing at safely yet. So sometimes like bad things might happen and it might overheat and it might spark and catch on fire. But uh we figure out all those bugs before they uh uh you know get into uh gamers' hands.

Jared Hoberock

Yeah, exactly.

Bryce

Alright, uh I think that's uh that's all I got. Connor, you got anything else you want to ask, Jared?

Conor

I mean, uh we've kept him past 30 minutes past we said we were gonna interview him. And uh I mean I got my sequence question answered, I got my counting iterator question answered. I feel like we got a lot of questions answered. I mean, we're gonna have to bring you on in the future. We talked, we alluded to if you were gonna start from scratch today. And uh, you know, we do work in research, so you're probably working on something. And um at the point in time where we're working on 2.0, not of thrust necessarily, but of your next project, we will definitely have to have you back on.

Bryce

Um, but maybe that's a good thing to close with, which is Jared, do you wanna you got anything you want to plug? You wanna you wanna say anything or anything?

Conor

It's not that you wanna plug. Do you have anything that you can plug? And if you can't plug, what's the general direction of which you are working on things?

Jared Hoberock

So I think I mentioned like uh I've kind of a wish list for uh a programming language that would make software like Thrust more uh much easier to write and maintain. So I would like to try to do something uh in that space. And um hopefully that will be successful. Um we'll see. Um if people are interested, they can just look at what's going on on my GitHub or not going on there. Um but there are some hints there of what might be next.

Conor

Some hints on Jared's GitHub. Link in the show notes, folks.

Bryce

Go and drop some stars.

Conor

Here's the real question. If I really do release this as like a two and a half hour episode, you should probably not do that. I sh I mean I shouldn't. But I feel like if I if I if I titled this episode, I mean I won't, but I could title it NVIDIA engineers discuss like CUDA programming, given the zeitgeist. Do you know the term that I heard over the last week? It's called Gen Sanity. Have you heard that?

Bryce

I have not, but I love it.

Conor

He went to Taiwan and he gave his keynote at Computech on Sunday night, and on Monday, Tuesday, all these shows were talking about Gen Sanity because he announced not just that we were launching our global headquarters in Taipei, but that also we opened some platform to third-party vendors or something.

Bryce

Yeah, NVLink.

Conor

I'm an engineer. I I don't really understand what's going on, but the point is, is the MSNBCs of the world and the Bloombergs of the world, they love us folks. And so if we named if we called this podcast three NVIDIA engineers discuss the parallel algorithms that power the world, it would blow up. I'm not gonna do that, but I I could.

Bryce

Oh, but we gotta ask, we gotta ask Jared, what's your favorite algorithm?

Conor

Oh, yeah, yeah, yeah.

Bryce

My favorite algorithm?

Jared Hoberock

Yeah.

Conor

Inside of thrust and outside of thrust, if they're a different algorithm.

Jared Hoberock

Uh um metropolis, uh Metropolis Light Transport is my favorite algorithm, outside of thrust.

Conor

What was that?

Jared Hoberock

Metropolis Metropolis Light Transport.

Conor

Metropolis Light Transport. Is that sounds like something from altered carbon like the Netflix show.

Jared Hoberock

No, it's it's something from uh graphics, computer graphics.

Bryce

Is that like a global illumination thing?

Jared Hoberock

Yeah, it's like a global illumination thing. It uh applies um metropolis hastings to uh to uh to light transport. Light transport is just what they call um rendering. It's a fancy term for rendering.

Bryce

You can tell you can tell someone's an old timer at Nvidia if they don't currently work in graphics, but have like deep graphics chops.

Conor

Be sure to check these show notes either in your podcast app or at adspthepodcast.com for links to anything we mentioned in today's episode, as well as a link to a GitHub discussion where you can leave thoughts, comments, and questions. Thanks for listening. We hope you enjoyed and have a great day.

Bryce

Low quality, high quantity. That is the tagline of our podcast.

Conor

That's not the tagline. Our tagline is chaos with sprinkles of information.

Bryce

All right. All right, we should let we should let uh Jared go.

Jared Hoberock

The green grass in the background is gone, folks.

Conor

Whether this was one episode or five episodes, it started out lush and green in the background, and now it is a dark sky in the background of Kansas. We appreciate Jared for taking all this time tonight to chat with us. We will definitely have you back in the future. I think we gotta have more NVIDIA internal folks. We should get Dwayne Merrill on, we should get Chris Check on, we should get a bunch of these folks on. I we're a podcast hosted by two NVIDIA engineers. We should have more NVIDIA folks.

Bryce

No, I will I will I will say very clearly that this is not a work activity. This is something we do outside of work.

Conor

I mean, yes, I I that was not clear from what I just said, so it should be clear now. But the point being is we do have access to folks that work at NVIDIA, hence why Jared is on the podcast.

Bryce

Let's ask Jared, Jared, who should we interview next? Oh yeah, that's a good question.

Jared Hoberock

Ian Buck. Do you think Ian would come on the podcast? Uh second question to Jared. Do you think Ian would come on the podcast? He might, but um, he probably has some good stories.

Conor

Oh yeah.

Jared Hoberock

So I mean, uh if my uh history is correct, you did thrust, Ian before CUDA was a thing, did something called Brooke.

Conor

Yeah, right. Which was uh basically Kuda before it was CUDA.

Jared Hoberock

I think it was uh quite different from uh the KUDA. I think it had a much different programming model than than CUDA does. Thank you for doing this, Jared. Uh thanks for having you all.