7 ms·
Try raja, or any pile of templated mess. I hate templates so much.
by Something1234 8y ago
Try raja, or any pile of templated mess. I hate templates so much.
- lasagnaphil 8y agoI googled RAJA and found it was a HPC (High performance computing) library for running GPU code in C++. This couldn't be that bad, right? Turns out I was terribly wrong. Behold, I present you this fucking monstrosity (Directly from the RAJA matrix multiplication tutorial): using EXEC_POL9 = RAJA::KernelPolicy< RAJA::statement::CudaKernel< RAJA::statement::Tile<1, RAJA::statement::tile_fixed<CUDA_BLOCK_SIZE>, RAJA::cuda_block_y_loop, RAJA::statement::Tile<0, RAJA::statement::tile_fixed<CUDA_BLOCK_SIZE>, RAJA::cuda_block_x_loop, RAJA::statement::For<1, RAJA::cuda_thread_y_loop, // row RAJA::statement::For<0, RAJA::cuda_thread_x_loop, // col RAJA::statement::Lambda<0>, // dot = 0.0 RAJA::statement::For<2, RAJA::seq_exec, RAJA::statement::Lambda<1> // dot += ... >, RAJA::statement::Lambda<2> // set C = ... > > > > > >; And that's just for matrix multiplication. I cannot imagine how fucking terrifying it will to write something more complicated than that. If I were to write (and debug) this mindfucking mess of templated code, I would rather escape this trainwreck and go back to writing CUDA/OpenCL code...
- Something1234 8y agoAnd I was dumb enough to accept an independent study to add openacc support to the library.
- otabdeveloper2 8y ago> Behold, I present you this fucking monstrosity It's just a Lisp-like language with a slightly different syntax for S-expressions. Ugly, like all Lisps, but nothing 'monstrous'.
- bjoli 8y agoHow far down the rabbit hole must one be to not think that is monstrous?
- otabdeveloper2 8y agoThe cognitive dissonance required to believe that C++ templates are 'monstrous' while Lisp S-expressions are awesomely useful and productive is enormous. C++ templates are far from user-friendly, but they're literally (literally) just Lisp S-expressions with a Lisp syntax and semantics.
- pjc50 8y agoThe semantics of template resolution are important, and unlike anything I'm aware of in Lisp.
- stagger87 8y agoShort of writing your own DSL, how would you solve the problem the above code snippet is attempting to solve in C++? I understand complaining about templates like the ranges example also posted in this thread, but I am curious to hear what you think is the alternative for this specific example.
- ycombonator 8y agoTake a look at C++ AMP https://docs.microsoft.com/en-us/cpp/parallel/amp/cpp-amp-cpp-accelerated-massive-parallelism https://docs.microsoft.com/en-us/cpp/parallel/amp/cpp-amp-cp.... It’s smooth as melted butter.
- pjc50 8y agoThat's .. not actually too bad. Obviously it's going to generate a lot of code, but I can almost understand what it's trying to do and it doesn't look like it relies too heavily on type resolution surprises. If you want a template challenge, try (without looking it up) writing your own iostream class. iostream is one of those things that's present in even beginner examples but when you look at how it works a whole load of complexity unravels.
- colmvp 8y agoWhy hate templates?
- mianos 8y agoCompilation times? Obfuscation? Bloat? I like them but these are valid negatives.
- llukas 8y agoThose are problem only if templates are misused (imho).
- Something1234 8y agoWhich is pretty much anything outside of the STL library's basic usage.
- mianos 8y agoYes I agree. I would not have been so down-voted so much if I had said the use of templates in the std:: libraries and some others, not all, is fantastic. But, the use of templates to make generic code when it does not need to be leads to the same functionality as specialised classes with longer compile times and obfuscation.
- llukas 8y agoI agree that putting templates where they not belong causes problems (even more than just longer compile times and obfuscation). However, properly designed templates with enough attention put into exposing functionality beat non-templated approaches right off the bat. Example: http://eigen.tuxfamily.org/dox/TopicInsideEigenExample.html http://eigen.tuxfamily.org/dox/TopicInsideEigenExample.html
- krapp 8y agoI think templates are fine as long as they're not abused. Unfortunately, since C++ templates are Turing complete, people will inevitably go overboard with them. My personal rule is to never nest more than two templates. You can have a template inside a template, but anything deeper than that should be refactored or at least split up into typedefs for readability.