Algorithms + Data Structures = Programs - Episode 260: 🇳🇱 C++ Under the Sea 🇳🇱 Ray, Paul, Parrot & Scanman!

Episode Date: November 14, 2025

In this episode, Conor and Bryce record live from C++ Under the Sea! We interview Ray and Paul from NVIDIA, talk about Parrot, scans and more!Link to Episode 260 on WebsiteDiscuss this episode, leave ...a comment, or ask a question (on GitHub)SocialsADSP: The Podcast: TwitterConor Hoekstra: Twitter | BlueSky | MastodonBryce Adelstein Lelbach: TwitterAbout the Guests:Ray is a Senior Systems Software Engineer at NVIDIA since 2022. Studied Software Engineering at the University of Amsterdam. Founded the Dutch C++ Meetup in 2013 and co-organizes C++ Under the Sea since 2023. He has been programming for more than 25 years, his journey began on his father's Panasonic CF-2700 MSX--and has been hooked ever since. He is also 'the listener' of ADSP the podcast.Paul Grosse-Bley was first introduced to parallel programming with C+MPI at a student exchange to Umeå (Sweden) in 2017 while studying Physics. In the following years he learned more about MPI, OpenMP, OpenACC, Thrust/parSTL and CUDA C++. After finishing his Master's degree in Physics at Heidelberg University (Germany) in 2021, he became a PhD candidate in Computational Science and Engineering researching the acceleration of iterative solvers in sparse linear algebra while being head-tutor for a course on GPU Algorithm Design. He learned using Thrust in 2019 shortly before learning C++ and became enamored with parallel algorithms which led to numerous answers on StackOverflow, contributions on GitHub, his NVIDIA internship in the summer of 2025 and full position starting in February of 2026.Show NotesDate Recorded: 2025-10-10Date Released: 2025-11-14NVIDIA BCM (Base Command Manager)C++11 std::ignoreC++20 std::bind_frontParrotParrot on GitHubParrot Youtube Video: 1 Problem, 7 Libraries (on the GPU)thrust::inclusive_scanSingle-pass Parallel Prefix Scan with Decoupled Look-back by Duane Merrill & Michael GarlandPrefix Sums and Their Applications by Guy BlellochParallel Prefix Sum (Scan) with CUDANVIDIA ON-Demand VideosA Faster Radix Sort ImplementationIntro Song InfoMiss You by Sarah Jansen https://soundcloud.com/sarahjansenmusicCreative Commons — Attribution 3.0 Unported — CC BY 3.0Free Download / Stream: http://bit.ly/l-miss-youMusic promoted by Audio Library

Transcript
Discussion (0)
Starting point is 00:00:00 Hi, I'm Ray, I'm one of the co-organizers of this conference. For me, it was the best one so far. Whoa, whoa, whoa, whoa. If we're going to throw the word princess around, it only is applied to you, buddy. Has been released at C++ Under the Sea. It's called Parrot. It's the best Kuda C++ experience out there. Template parameter, a non-type template parameter that's like an ant. Like you have a function that takes a scanning scan.
Starting point is 00:00:25 De-couple of look-back scan, naturally. The inclusive scan is... I assume you've read the Dwayne Merrill. paper. Did we originally say what you work at invidia for like two more days? Paul doesn't work at invidia anymore. Yeah no he doesn't work in video anymore. Sorry Paul. This is the scan man. That is what you should be known as. Bryce the scan man. Adelstein Lelbeck. Yes. on October 10th, 2025. My name is Connor.
Starting point is 00:01:02 Today with my co-host, Bryce. We record once again live from the Netherlands the second time and second year in a row we attended C++ Under the Sea. In this episode, we'll be talking to two different invidians, Ray and Paul, about the new Parrot Library and also about
Starting point is 00:01:17 scans. Here we go, folks. We'll redo that. C++ live from Breda, Netherlands. C++ Under the C-C-25, second edition. It's not the inaugural one, folks. We recorded here.
Starting point is 00:01:33 But, but, this year, we are here as founding sponsors. Well, we're here for NVIDIA as founding sponsors. We had a booth. We had a bunch of NVIDIA people here. Therefore, we are founding sponsors of C++ under the sea. Day 2 just wrapped. We're about to talk to Sean, probably a couple other folks. and we were going to record last night.
Starting point is 00:01:59 Today is October 10th. Bryce was too tired. Dinner ended at like 10.30. Admittedly dinner did go on for a while. If we had recorded dinner, there were some Sean stories that I've never heard before, and they were some top quality. Let us tease and make the listener feel bad, folks. Was it his best story?
Starting point is 00:02:19 I don't know. But it was... Like to do the two or three stories may have been the best storytelling. Oh, God. I mean, all of Sean's stories are great. I've heard a lot of them. He's a storyteller that. And I hadn't heard, I think, two of the three that he told last night.
Starting point is 00:02:36 And one of them, I was just like, my God. Which one? The Photoshop 4 story? Are we even allowed to allude to the Photoshop? I guess most people probably don't know what that means. But, yes, the Photoshop 4 story. Oh, my God. It's up to Sean.
Starting point is 00:02:50 We're not, it's totally, you know, there are a number of stories that have to be at the bar or in a non-recorded environment. Not necessarily out of bar, folks. But anyways, we were going to record last night. Dinner went a little bit too long. Thank you to Florist Bob, who organized our dinner. We have these wonderful Nvidia developer tags that we've been given out in addition to the ADSP stickers.
Starting point is 00:03:11 And I took a couple extra ones. So if you find me at a C++ event for maybe the next six months, I'll probably have a couple. Yep. We gave out a lot of stickers, folks. And should we do initial thoughts on C++? plus under the C-2025, or should we just start? Let's do some initial thoughts.
Starting point is 00:03:30 What did you think? Great conference or greatest conference ever? Well, it's not the greatest conference ever. You know, now you got me thinking what's the greatest conference I've ever been to. Hey, Ray. Ray. We were just, we were just going to recap our thoughts on the conference. I was, I was asking.
Starting point is 00:03:46 What did I ask? You asked, because I was like, oh, let's give initial thoughts on how the conference went. And he's like, was it greatest conference ever? And I was like, well, no, it's not that great? Or the greatest conference ever? It was great. Not the greatest, and that doesn't mean it's not a bad conference. All right, we should introduce Ray.
Starting point is 00:03:59 But we got Ray, fellow Invidian folks. Yes, Ray. He contacts us via email both with our Nvidia emails and my personal. I'm not sure if he emails you personally. But Ray, introduce yourself. Hi, I'm Ray. I'm one of the co-organizers of this conference. Yeah, for me, it was the best one so far.
Starting point is 00:04:19 And what do you? What do you? Definitely was the best C++ under the C. I think it was the best C++ under the C. Yeah, yeah, for sure. And what do you do at InVidio? I work in a team in the Netherlands, which is also where I'm from. I work on cluster management software.
Starting point is 00:04:34 It's called BCM, base command manager. And, yeah, there I do a mix of C++, Python, but also Kubernetes. Oh, Kubernetes. The scary word here. We talk about all the programming languages, but as soon as somebody says the DevOps words, we run for the hills, folks. We run for the hills. Yes, we do.
Starting point is 00:04:54 Do you work with the people? who do DCGM? No, but my integration with my knowledge of DCGM is the perspective from our product is we collect those metrics. Okay, okay, okay.
Starting point is 00:05:08 So how did this conference come to be, Ray? What was your vision or what was the organizer's vision? Yeah, this is a spin-off from the meetup group that I've been running since 2013 already. And I met Hans, who was the main organizer, and Andrew, who is also a co-organizer,
Starting point is 00:05:27 at various of these meetups. And Hans had the idea to organize a conference for a long time, and that's how it all started. All right, all right. We're going to each do two things that we learned at this conference, and you two are going to go first while I try to remember what I learned. Oh, what I learned? Yeah, two things you learned.
Starting point is 00:05:50 A lot of things. So they don't come to mind. in an order of... The first two that come to mind. They don't have to be the most important. I have never thought about generic programming applied to higher level things like Sean was discussing in his keynote.
Starting point is 00:06:05 That was... Yeah, I'm still processing that, to be honest. And little things, like new features in C++ Plus 23, like maybe I've not been keeping up well enough, but like SDD ignore or bind left. That's kind of... Bind Left, was it? Yeah.
Starting point is 00:06:23 Yeah, those kind of... trivial things come to mind that I simply didn't know about them and yeah yeah I don't know more things may come to mind but I learned so the coolest thing I saw there was a talk from some of the Conan folks
Starting point is 00:06:37 about using Conan to install CUDA and using Conan and C-MIC to install CUDA and work with CUDA and the thing that I saw that was very very cool was they have this support for cross-building where you can do
Starting point is 00:06:54 the build on your server and then they've got this like little c make tool where it will figure out what files it needs to copy over to the embedded device copy them over there and then run c test remotely so you don't have to figure that out and they can do that because they're the package manager they know what all the dependencies are and i thought that was super cool not just people doing an embedded development on invidia jetson but people doing embedded development in general and uh yeah that was what i learned and uh Connor has abandoned us to go get some food because he's very hungry
Starting point is 00:07:27 because he doesn't like certain doesn't like creams or like foods with textures he's a little bit picky about food and so he's he had limited options at lunch I actually I actually also learned a lot from your talk comes to mind now so I'm not a Akuta expert at all but I've been playing around with it like a couple years ago and I remember syntax
Starting point is 00:07:51 like three less than character. Yeah, yeah, yeah, the Chevron launch, the triple Chevron kernel launch. Those kind of things are away for a long time, I'm sure, and so much more library support. It actually makes me want to play with it again, even though I don't have to, yeah. You should. I mean, it's, you know, people assume that everybody at NVIDIA does Kuda, does GPU stuff, but actually there's a lot of people in Vitiya that do other sorts of things. It does infrastructure stuff, does the core
Starting point is 00:08:22 libraries, core software. What's it like in your team? Like what sort of C++ dialects do you use? How modern is the C++ code that you use? Like what's it? You said there's some Python. Like, you know, what's it like dealing with the C++ Python crossover?
Starting point is 00:08:38 Yeah, the boundary between Python and C++ plus is through APIs. So, yeah, our core product, the product that runs on old servers, is written in C++ to have a reason reasonably smaller footprint. We use, I believe, currently C++17,
Starting point is 00:08:56 and probably soon will jump to 20. So it's a mix of modern and some older parts. So, yeah, we try to keep it up to date. It's been around for a while, this product. I see Connor's coming back. So Connor. Well, I did get some food, and I decided to change up the nugget that I had four of earlier,
Starting point is 00:09:18 and it ended up being a cheese one. I was just telling people how picky What a little princess you are with the food It's all in there Whoa, whoa, whoa, whoa, whoa, if we're going to throw the word princess around It only is applied to you, buddy I'm a little bit particular And every one of the sandwiches had cheese on them
Starting point is 00:09:34 They look good, just don't like cheese It's not a problem with the conference, this is a problem with me What was the question we were asking? What were the top two things you learned at the conference? I only gave one, but I don't know if people noticed that Because my answer is so good. So, I'm not sure if this counts It's something I learned, but I will be saying it as my answer
Starting point is 00:09:50 and I'm trying to think right now we've got part two of walking in Copenhagen then there's going to be one or two parts from the conversation that we had at NDC and then did we record a final time afterwards yeah we did with Vittorio and with J.F so that is at least one, two, three minimum episodes
Starting point is 00:10:13 maybe four which brings us into November so while you were listening to this listener I am either getting married or on my honeymoon. And the point being is that it is much in the past, and my long-awaited library that we haven't been able to talk about that I was bleeping Bryce out has been released at C++ Under the Sea. It's called Parrot. It's the best C++ experience out there.
Starting point is 00:10:38 And the graphic signifier for the library is a parrot. And Coon, who I told to follow me, but then he disappeared, said to me, while I was at this conference, he asked, does the parrot have a name? And I said, no, it does not have a name. He's like, well, you should call the parrot Sean Parrot. And that is... Sean's right next to us.
Starting point is 00:10:59 And he heard Sean Parrott. And he just looked up. I mean, he's fully approved. And the first pull request that I merged from an external contributor was from Kuhn, who he created a fork, and he renamed the alt text on the image in the readme to be Sean Parrott. So officially the name of the parrot is Sean Parrot.
Starting point is 00:11:20 And I am thrilled about this. I feel like you flubbed the story a little bit because the first time he suggested it. He's just said, oh, you should call the parrot Sean. No, no. So he did say Sean Parrot, but I only heard Sean and it, or like maybe I heard parent. And I was like, well, I mean, it's a little on the nose. I get it. Like he's inspired me down the algorithm journey, et cetera.
Starting point is 00:11:40 But he told me a second time. And then that was when I was like, oh, you're saying Sean Parrott. And then, like, everyone burst out laughing, and we were like, that's the best suggestion or thing I've been told in here. So is it something I learned? Not really. But it is something that is official. It's a part of the lore. Another thing, the actual, another second thing that I learned was your contribution in terms of adding the stood integral constant in order to avoid the template issue with the Softmax example.
Starting point is 00:12:07 And that is exactly why Softmax wasn't in a function. Because I knew that there was probably a solution, whether it was just making it a runtime parameter. I didn't even know about the integral constant runtime parameter. We should explain this trick. If you have a template parameter, a non-type template parameter that's like an int, like you have a function that takes a C++ function that takes an end as a template parameter, if it's, for example, a member function. Like if Stood Tupil had a member function Git,
Starting point is 00:12:38 then if you were using the, if you're using that template, in a context where it's dependent. Like if you were doing like, you know, you had some tuple that you took as a template parameter and then you did like T. Dot Git, where Git was a template function that took an integral template parameter. You have to put the word template after the dot
Starting point is 00:13:05 so it's not ambiguous, which is awful. And so one trick to get around this is that you can use user-defined literals so you can add a user to find literal like underscore IC that will return an integral constant object and then you can change your template to add an additional function parameter, not a template parameter, but a function parameter
Starting point is 00:13:27 that is an integral constant from which your non-type template parameter can be deduced. And you can just default that function parameter so that the existing API continues to work but then the nice API that people can do is they can do, you know, dot get, open prins, like one underscore IC, close prins, instead of having to do the dot template, get, you know, angle brackets, one, close angle brackets, open print, close print.
Starting point is 00:14:04 And so that was the thing I suggested to Connor, and Connor went off and vibe coded it very quickly. A guide coded it, guide coded it. I did. Look, there's a difference. vibe coding you don't look guide coding you definitely check but it was a brilliant suggestion it's still a little bit ugly i don't love the underscore i see but it is an order of magnitude better than the and people might have not encountered this but i had encountered this kind of code before where you have to do a dot so your original function would be like your a dot b and then your uh chevron you know with your you know uh integer in my case so it's angle one end angle
Starting point is 00:14:42 and then your parence. Instead, you have to go a dot template, space, B, and then your angle, angle, and paren, paren, which is just awful. It's so much so that I didn't put softmax in a function, and I was like, we'll deal with this, we'll kick this down the road. And now we're approaching Sean. He's been, oh, he got a backup. He's been, he's a popular guy.
Starting point is 00:15:08 Sean was being asked for his autograph today, and he signed the, EOP elements of programming book? He did. I've been asked to sign stuff, and it is an interesting experience. Yep. So anyways, that's Sean Parrott.
Starting point is 00:15:23 Number one highlighted this conference for me. And, I mean, also, too, at this point, actually, we shouldn't talk about the former color of the parrot. I mean, actually, we can talk about it. At one point, Sean Parrot was pink before the Parrot was Sean Parrott. I filed an issue, too, that the parrot should be green. Yeah, it should be the Invidia Green.
Starting point is 00:15:41 So we have changed that. and we just crossed 100 stars. At this point, at this point in November, I'm hoping we've crossed 1,000. Probably not, but it's hopeful thinking. And also, too, I will have given a YouTube version of the talk that I present today. At some point, it might be as soon as Monday,
Starting point is 00:16:00 but it might be a week and a half later. Regardless, though, it'll be in the past from when this is airing on our podcast. So link in the show notes, if you haven't seen that already. Hello, listener. It is October 30th when I am recording this interruption. And you are potentially listening to this on Friday, November 14th,
Starting point is 00:16:21 or a few days or a couple weeks after this. I have not released the YouTube video that I said I would. However, I have released a YouTube video that mentions Parrot. It's not fully about Parrot, but it compares Parrot to a couple other Python and C++ libraries. So link in the show notes for that. And if you do happen to be listening to this on a bit of a delay, two to three weeks after this is released on November 14th. That talk may have been released at that point.
Starting point is 00:16:47 So I will leave a unlinked link in the show notes and we'll link it as soon as it has been released. So just be sure to check the show notes for when that talk does become available. And, uh, hey, Paul, you want to say hi? Hey, Paul. Paul's another person who works at NVIDIA. There's a lot of NVIDIA we had dinner with at, I don't remember the name, Wolfus, Wolfsar. Wolf's like you You work at Nvidia for like
Starting point is 00:17:13 Two more days Paul doesn't work at Nvidia anymore Yeah no he doesn't work at Nvidia anymore Yeah sorry Paul He was an in Oh wait are you still employed until like midnight? Yeah Paul is an intern
Starting point is 00:17:23 Great intern we had over the summer Today is his last day But then he'll be coming back Sometime early next year Yeah for full time Tell us about your internship Tell us about yourself Hopefully you're coming back full time
Starting point is 00:17:36 Listener I know the answer to that question I'm just setting them up Oh, it was great, great experience. I was really looking forward to it because I've been using the CCCL where I had my internship for a long time. Even before you were working here. Yeah, yeah. That's how you get a job at Nvidia, folks. You've got to be using it on the daily and become an expert. Yeah, I've been even teaching courses based on thrust, teaching people's thrust. Using it or contributing, contributing to our major open source products. Great way to get noticed if you want to get hired at NVIDIA. I mean hiring very tight right now please no emails work for me yeah you're an existence proof
Starting point is 00:18:15 so you're using it before then you got hiders an intern so you've been here for four months eight months three months three point eight okay and today was your is your last day exactly gotcha and so you're going back taking some time off going back to school we are finishing my uh my school yeah whatever that means. Oh, shit. The muddler, where'd you get those? I just... For the listener, that little diversion there,
Starting point is 00:18:47 we've acquired some more drink tokens, so expect the next however bit. It's going to be fun. Sean's been cornered. But we're talking to Paul now, so you're finishing your school, taking a little bit of time off, and then when do you start?
Starting point is 00:18:59 Are you joining the same team? Yeah, in February I will rejoin the CCCL team. and keep working on parallel algorithms, which is basically my dream job. So parallel algorithms, what's your favorite? We don't ask this question anymore. We've lost touch with our roots. What is your favorite algorithm?
Starting point is 00:19:16 Parallel, cereal, it doesn't matter. Go. I mean, the problem is I already know the answer as a follower of your podcast. Wait, there is no, it's your favorite algorithm. How can you... No, because I think our original answer was reductions, but I think my answer has changed.
Starting point is 00:19:31 My answer is definitely scanned. It's a personal thing, right? It's certainly scan. Yeah. Yeah. Which scan? We got a couple scans. DeCouple look back scan, naturally.
Starting point is 00:19:40 The inclusive scan is... I assume you read the Dwayne Meryl paper. Did we originally say Reduce? Absolutely, yeah. I think we originally said Reduce. Or I originally said Reduce. Transform Reduce is my favorite. Yes.
Starting point is 00:19:51 But that's changed, folks. Now I'm a scan man. It's all about the scan. What's your favorite application of scan? I'm going to insert, do you know the Scatman? I'm the Scatman. Blah, blah, blah, blah, blah. I'm a scatman.
Starting point is 00:20:10 I'm going to cut that, I'm going to club that in. The Scan Man. That is what you should be known as. Bryce, the Scan Man, Adelstein Lelbeck. Yes. I mean, for my PhD thesis, I've been working on sparse linear algebra, and there's lots of applications for scans there, because sometimes, for example, you know how many elements you have in each row of your matrix,
Starting point is 00:20:31 and then with the scan, you can get the offset into memory. for that. We were just talking earlier today about applications of scans and sparse linear algebra. You're going to hold this. You're talking it over there like that. Well, it's your job.
Starting point is 00:20:46 I'm drinking here. I'm drinking my... Everybody's drinking. And you're just... Anyway. Okay. But yeah, we were just talking earlier today about how to implement
Starting point is 00:20:55 certain sparse linear algebra techniques in this new coup tile thing. And we were talking about the potential uses of scans there and yeah but my my uh my favorite recent scans have been these these uh these uh like uh um myenoidal transformation scans where you have a scan that takes both a transform iterator as the input and then a transform output iterator um and uh we that we i don't want to i don't want to spoil anything but we talked about one application to that
Starting point is 00:21:29 for the proportional tracker i think we talked about that in the podcast yes yes we did but But we talked in Copenhagen about run-length decode, and you were convinced it couldn't be done in a single-passing, folks. Let me tell you, oh, it's beautiful. It's beautiful. The single-passed run-length decoding, and we're going to look at it. We're going to look at it in, I don't know, December at this point,
Starting point is 00:21:52 because we've got such a backlog of episodes. But the next time we're, like, home, and recording, we're going to look at that. It's beautiful. Wait, so you're talking about decoupled look-back, aka Dwayne Merrill, I think Michael Garland's co-author. on that paper. Yeah.
Starting point is 00:22:05 And do you have other? Because when you said scan man, there was a little voice in my head being like, well, technically Mark Harris should be the scan man. If there's anybody that's the scan man, it's Mark Harris, who is an employee of NVIDIA. He's written many influential papers. One of them being prefix sums and their applications, I think, is the title. Modulo may be a word or two. I got to go get some of that food.
Starting point is 00:22:24 All right, Bryce is leaving to go get some food. I assume you've read the, if you've read the decoupled look bad, that's a trickier paper than the others. Do you have papers or? resources for people that want to become scan experts like yourself? Maybe less scan, but there's the Nvidia on Demand website where you can see all the old talks from old GTCs. And I think there's, for example, a talk on how to implement Radex sort or optimize it. That one was very interesting.
Starting point is 00:22:53 Not to put you on the spot, but how do you implement RADXSort? I mean, there are certainly scans involved. Be sure to check these show notes, either in your podcast and or at ADSP thepodcast.com for links to anything we mentioned in today's episode, as well as a link to a get-up discussion where you can leave thoughts, comments, and questions. Thanks for listening. We hope you enjoyed and have a great day. Low quality, high quantity. That is the tagline of our podcast. It's not the tagline. Our tagline is chaos with sprinkles of information. Live from C++ under the C. 2025, folks.
Starting point is 00:23:31 Is the audio levels correct? We don't know. Is this the last time we interviewed him? In person? No, just in general. You got cheese all over your face, bro. I mean, what else is new? Don't you sound like my girlfriend. Don't tell me that.
Starting point is 00:23:48 What do you mean the last time we interviewed him? And where's the last time we interviewed him like two months ago? Oh, yeah, that's right. That's right. I totally forgot. That's going. My cheeks filled with a... All right.
Starting point is 00:24:04 Okay, I understand. Where are we going? No, no, we're just standing in for a second.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.