Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I 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...


That'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.


And I was dumb enough to accept an independent study to add openacc support to the library.


Take a look at C++ AMP https://docs.microsoft.com/en-us/cpp/parallel/amp/cpp-amp-cp.... It’s smooth as melted butter.


> 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'.


How far down the rabbit hole must one be to not think that is monstrous?


The 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.


The semantics of template resolution are important, and unlike anything I'm aware of in Lisp.


Short 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.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: