Rendered at 09:35:37 GMT+0000 (Coordinated Universal Time) with Cloudflare Workers.
spacechild1 2 days ago [-]
I just read through a few chapters. This is actually a very nice and solid resource!
KnuthIsGod 1 days ago [-]
About the Author:
"Accelerating Sparse Linear Algebra at NVIDIA
Senior Software Engineer, IC5
I’m a Software Engineer at NVIDIA in Santa Clara, US (headquarter). I work in the CUDA HPC Math Library team and have been leading the Sparse Linear Algebra group for the past 6 years.
My interests outside sparse linear algebra include parallel computing, software optimization, and graph algorithms. I am also passionate about programming and software engineering, primarily in C++.
.....
I taught C++ professionally for 5 years in undergraduate and graduate courses. I maintain an open-access C++ course. "
Another book tactically missing memory and ownership design for modern c++ apps.
I think there is no more important topic for teaching. There are some slides in advanced sections but it's quite ironic one needs to know about it from the start!! Who owns memory? How to pass it? Move? Borrow? How to communicate it for readers? It's like a tribal knowledge.
Every time I touch enterprise C++ codebase it's a freakshow heavily struggling with memory management.
As reference the material could be good, as study it's very questionable.
shorsher 2 days ago [-]
Do you have any recommendations for books/materials that do include these topics? I've never used c++ professionally, but have been starting to learn it and would appreciate a modern reference on these items.
on_the_train 2 days ago [-]
Nothing did more damage to c++ code bases than people not understanding this. People hear "smart pointers are good" and use them for everything. Not understanding that it's just the lesser evil and still extremely rarely needed (vs just stack memory or variants)
neko_ranger 2 days ago [-]
there are so many job listings for c++ in big tech, but it feels like it's hard to gain proper c++ experience without already being on those projects. it's sweet that those c++ systems are probably critical and actually do cool things, but if I wanted to be a c++ guy there, it's hard to get the experience without already being there I feel. c++ actually doesn't look too bad with RAII?
but maybe it's a dying breed anyway, so I should just learn rust/go/zig/etc
jayd16 2 days ago [-]
This will probably run foul of some purists but Unreal Engine is a large C++ project with a vast amount of documentation, community, examples, and serves a lot of use cases.
It's not standard C++ but also it illustrates why lots of projects go that route.
Because it's niche, it might not be resume fodder but it will scratch the itch if you just want to play with C++.
nicoburns 2 days ago [-]
Learning Rust is probably onone of the more accessible ways to get this kind of experience. It won't teach you everything you'd need to know to write C++ professionally, but it teaches a lot of the it, including a lot of best practices that it's otherwise hard to learn outside of a professional environment.
boris 2 days ago [-]
I don't know, someone who solves their borrow checker errors by adding more dynamic allocations (which seems to be common/recommended), will be taught how to program in Java, not C++.
nicoburns 2 days ago [-]
That's only recommended for beginners while they get tuo to speed (to try and help them avoid ahve to learn too much at once). It's absolutely not recommended in general. The whole point of the borrow checker is to enable memory safety without heap allocating and garbage collecting everything.
jandrewrogers 2 days ago [-]
C++ is still the de facto standard language for new high-performance, high-scale software. It isn’t going anywhere.
fulafel 2 days ago [-]
It's a dying breed in that it's being outgrown by others and the niches where it's the best choice are getting fewer, but it's not going away soon either.
For example high performance multithreaded code is now largely written in languages that are better for concurrency correctness, because the added development speed translates to added runtime performance by letting you iterate more in the same timeframe/budget.
A good understanding of the how the C/C++ memory safety bugs happen and lead to vulnerabilities is important to learn if getting into it.
MITSardine 2 days ago [-]
What are these languages? I'm curious because C++ is the standard in my community so it's all I ever hear about (and Rust from the adventurous few).
fulafel 2 days ago [-]
Java, Rust, Go, C#, Swift are the biggest ones (in no particular order) on the CPU side.
On the GPU side I'm not as up to date, but there's a lot of Python-ish stacks like JAX, PyTorch, Mojo, etc.
qwertyuiop_ 2 days ago [-]
GPUs don’t run python.
fulafel 1 days ago [-]
Yes, GPUs run machine code like CPUs. The toolchain compiles code to machine code that gets executed on GPUs. In the stacks referenced above it's not exactly Python, which is why I used the term Python-ish instead of Python.
pjmlp 2 days ago [-]
C++ rules in the gaming industry, HFT, HPC, language runtimes.
Speaking of which what do you think all the languages that build on top of GCC and LLVM, depend on?
ipnon 2 days ago [-]
CUDA is an extension of C++ just like C++ is an extension of C. Deployed CUDA is growing exponentially. C++ is definitely not a dying language!
adrian_b 2 days ago [-]
Nit pick: there are CUDA extensions for multiple programming languages, e.g. Fortran, but indeed the CUDA extension for C++ is the most widely used.
This is similar how there are OpenMP extensions for multiple languages, but the one for C/C++ is the most widely used.
portender 2 days ago [-]
To me, using a programming language that lets me manage memory on a problem where it was important to me (because constraints or performance or whatever) has always been eye opening. go feels like a different thing there, but I suppose cgo can get you into the realm.
stingraycharles 2 days ago [-]
Cgo has its own performance overhead problems, though.
captaincrowbar 2 days ago [-]
"This open-access course is directed at those who are already familiar with C and object-oriented programming" ... but not C++
That's a very, very small target you're aiming at there.
actionfromafar 2 days ago [-]
"This open-access course is directed at those who are already familiar with very old C++ and object-oriented programming" ... but not modern C++
Written this way, the target is bit larger.
grg0 2 days ago [-]
Regardless, it is a very comprehensive review for C++ programmers, and even intermediate ones will probably see new material there.
IshKebab 2 days ago [-]
I think you have to be more specific than "modern". "Modern C++" used to mean smart pointers etc. I assume this isn't that.
koala-news 2 days ago [-]
Ha, why another programming language? I thought we wouldn't need to learn these in the AI era.
I’m a Software Engineer at NVIDIA in Santa Clara, US (headquarter). I work in the CUDA HPC Math Library team and have been leading the Sparse Linear Algebra group for the past 6 years.
My interests outside sparse linear algebra include parallel computing, software optimization, and graph algorithms. I am also passionate about programming and software engineering, primarily in C++.
.....
I taught C++ professionally for 5 years in undergraduate and graduate courses. I maintain an open-access C++ course. "
https://federico-busato.github.io/
Every time I touch enterprise C++ codebase it's a freakshow heavily struggling with memory management.
As reference the material could be good, as study it's very questionable.
but maybe it's a dying breed anyway, so I should just learn rust/go/zig/etc
It's not standard C++ but also it illustrates why lots of projects go that route.
Because it's niche, it might not be resume fodder but it will scratch the itch if you just want to play with C++.
For example high performance multithreaded code is now largely written in languages that are better for concurrency correctness, because the added development speed translates to added runtime performance by letting you iterate more in the same timeframe/budget.
A good understanding of the how the C/C++ memory safety bugs happen and lead to vulnerabilities is important to learn if getting into it.
On the GPU side I'm not as up to date, but there's a lot of Python-ish stacks like JAX, PyTorch, Mojo, etc.
Speaking of which what do you think all the languages that build on top of GCC and LLVM, depend on?
This is similar how there are OpenMP extensions for multiple languages, but the one for C/C++ is the most widely used.
That's a very, very small target you're aiming at there.
Written this way, the target is bit larger.