There's a nifty set of example CUDA kernels, different kinds of optimizations etc over at the cuda-samples repository. Start off by porting them to CUDA.jl
, and eventually branch out to other programming models and APIs like Metal, ROCm, KernelAbstractions etc. I realize that the repository name does not quite reflect that, but we will cross that bridge when we get there.
Before any of these extras are worked on, it might be a good idea to organize this whole project as literate programs. This combined the convenient profiling and benchmarking tools could possibly make for a great study.
- Start with the introductory kernels
- Set up documentation generation/literate programming frameworks
Replicating papers from literature on GPU algorithms, benchmarking, optimisations etc.