Live data from Hacker News

Interactive GPU Programming, Part 1: Hello CUDA

dragan.rocks

21–30 of 30 posts

Re: Interactive GPU Programming, Part 1: Hello CUDA

#21

Why do things using CUDA often require older versions of compilers? E.g. ccminer. Try to make it, but it finds my modern gcc or clang too modern :(

The cuda compiler itself (nvcc) is far behind the features of more recent compilers. For instance, c++11 is supported, but not the full standard. It will take a while before 14/17 are supported.

Re: Interactive GPU Programming, Part 1: Hello CUDA

#22
post #10

I hope CUDA will get replaced by Vulkan merged with whatever core OpenCL features it still needs. Looks like Khronos are looking into converging them in some way: https://www.pcper.com/reviews/Graphics-Cards/Follow-Neil-Tre... CUDA unfortuantely is Nvidia's lock-in, so not a good way forward.

Khronos is to blame by having OpenCL be a C only game, while CUDA was C, C++ and Fortran with PTX for anyone else that wanted to write a compiler fronted for CUDA.

It took them being beaten by NVidia to actually care to add SPIR and C++ support to OpenCL.

Even now, while CUDA brings C++ compiler out of the box with their SDK, for OpenCL one needs to go to Codeplay and download their ComputeCpp Community edition compiler for SYSCL support, that might or not, support a given card. Hardly any better.

Re: Interactive GPU Programming, Part 1: Hello CUDA

#24
post #15

Earlier quoted context omitted.

> unfortunately Nvidia is the only vendor that pays considerable number of people to develop the ecosystem. AMD basically says "get lost" by refusing to put more than a handful of people on the job of providing OpenCL libraries. Vulkan itself is developed and supported well, and it already can be used for compute as far as I know. But apparently there are some features that come from the OpenCL world that need to be…

The language and basic platform is not a problem. OpenCL was and is OK. However, the libraries are far and between. CUDA offers cuBLAS, cuFFT, cuDNN, cuSolve, etc. For OpenCL, even the decent BLAS library (CLBlast) had to be written by a guy who did it for free, while AMD's clBLAS is more or less stalled (and I never managed to build it on Linux in the first place), and that's it...

The ability just to swap in the cuFFTW header for FFTW3's making calls execute on GPU (even though it doesn't give the best performance) is also nice for beginners.

Re: Interactive GPU Programming, Part 1: Hello CUDA

#25

Are there similar resources/tutorials for GPU programming/CUDA/openCL for pure Java?

(Disclaimer: I created and maintain this library which is now apart of the eclipse foundation):

http://nd4j.org/ - in built GPU garbage collector and everything.

If you want raw cuda primitives (not generally recommendended and hard to do right) - you can take a look at our javacpp based (we also maintain this) cuda bindings: https://github.com/bytedeco/javacpp-presets/tree/master/cuda

Unlike jcuda (which people typically recommend despite not being updated as often) we actually depend on this for the nd4j and deeplearning4j projects.

These cuda bindings are meant to be a 1 to 1 mapping to the cuda api as well. Hope this helps!

If you want a fairly small and minimalistic look at the underlying c code which uses cuda take a look at: https://github.com/deeplearning4j/libnd4j

All of this is published on maven central for you and runs on linux, windows and even mac. It's also the same api. All you do is switch the backend.

Re: Interactive GPU Programming, Part 1: Hello CUDA

#27

Why do things using CUDA often require older versions of compilers? E.g. ccminer. Try to make it, but it finds my modern gcc or clang too modern :(

The cuda compiler itself (nvcc) is far behind the features of more recent compilers. For instance, c++11 is supported, but not the full standard. It will take a while before 14/17 are supported.

how does that stop it from using the latest version of clang++ or g++? they are backwards compatible with older C++ versions. The context is linux and a makefile failing with a message that your g++ or clang++ must be a version older than something

Re: Interactive GPU Programming, Part 1: Hello CUDA

#28
post #3

From the perspective of a CUDA beginner, this doesn't seem simpler than writing CUDA with C(not C++, just C). If you're going to pick up CUDA, starting with C means you get the best tooling support and community docs. Not to mention that managing pointers and explicit types in C will genuinely help your understanding of how CPU-GPU works. If you already know Clojure, this is probably the best chance to extend somethi…

CUDA is C++, and benefits greatly from templates as they let you optimize work per thread. Many years ago I tried to add GPU support to a C code and was surprised to learn the flag that did C compilation didn't work!

Re: Interactive GPU Programming, Part 1: Hello CUDA

#29

Why do things using CUDA often require older versions of compilers? E.g. ccminer. Try to make it, but it finds my modern gcc or clang too modern :(

CUDA uses a single-source approach, meaning that the host (CPU) and device (GPU) code are in the same file. So it requires a special compiler (nvcc) that splits the original source files, compiles the host and device parts separately, and then merges the result back together.

This requires nvcc and the device compiler to have exact knowledge of how the host compiler compiles every single construct (thing e.g. about alignment and padding in complex structures), and they must at least be able to parse the syntax of the host include files (which e.g. fails if the include files have C++11 syntax, but the device compiler only knows how to parse C++98).

Re: Interactive GPU Programming, Part 1: Hello CUDA

#30

Are there similar resources/tutorials for GPU programming/CUDA/openCL for pure Java?

(Disclaimer: I created and maintain this library which is now apart of the eclipse foundation): http://nd4j.org/ - in built GPU garbage collector and everything. If you want raw cuda primitives (not generally recommendended and hard to do right) - you can take a look at our javacpp based (we also maintain this) cuda bindings: https://github.com/bytedeco/javacpp-presets/tree/master/cuda Unlike jcuda (which people typi…

Thats great, thanks.
Post reply on HN