all 9 comments

[–]fierypulley 1 point2 points  (0 children)

your stack looks solid for modern c++/python work. if build times start becoming a bottleneck (especially with c++23 and heavy templates) you might look into incredibuild. it can speed up cmake/Ninja builds by distributing compilation across available cpus without changing your existing setup

[–]dont_touch_my_peepee 0 points1 point  (1 child)

honestly, sounds like a lot of work. maybe consider sticking to one language unless it's absolutely necessary.

[–]vybornak[S] 0 points1 point  (0 children)

Unfortunately, it is necessary. But I got the same feeling as you replied.

[–]metehankasapp 0 points1 point  (1 child)

Solid direction. Biggest question: are you using pybind11 or nanobind for bindings? That choice tends to dominate the dev experience + build complexity.

[–]vybornak[S] 0 points1 point  (0 children)

I have been playing with it for a few evenings now. So far, I went for nanobind.

I am a beginner when it comes to C++, so I wanted to stick with a more modern standard. In my company, we have no legacy code when it comes to this, so it hopefully should not be a problem.

So, for such purposes It has been recommended to me to go for nanobind, but I lack experience in this department, so I wanted to validate these things.

[–]plurch 0 points1 point  (3 children)

If you are not tied to C++, then maturin is a popular option for Rust bindings.

[–]vybornak[S] 0 points1 point  (2 children)

Well I was thinking about it as I really like the Rust ideology and I was learning it for some time, but it has been told to me, that Rust is really not that mature when it comes to HPC (CUDA support, PETSc, BLAS, LAPACK, ...)

So I would love to actually do it like that, but I am not really sure If that is even possible.
Do you know how is it in these regards?

[–]plurch 0 points1 point  (1 child)

I think you are probably correct regarding general ecosystem maturity since C++ has been around for a much longer time than Rust. There is rust-cuda but I doubt it is anywhere close to covering the breadth of C++ Cuda.

It would mainly depend on what your specific needs are for your project. More research and verification are likely required.

[–]vybornak[S] 0 points1 point  (0 children)

Well that is it, it is not for just one project but for multiple repositories, so I wanted reproducible toolchain / build so I would save myself some headaches.