I am new to learning CUDA. Most of the ways and techniques of CUDA programming are unknown to me. I am a self-learner. I have a very basic idea of how CUDA programs work. For example, the very basic workflow of:
- Allocating memory on the host (using, say,
malloc
). Storing data in that host allocated memory. - Allocating memory on the device (using, say,
cudaMalloc
, using the CUDA runtime API), copying the data from the host to the device usingcudaMemcpy
- Writing a kernel. Know how SM, Thread Blocks, Threads, and warps in CUDA work. Set the number of thread blocks, threads per block on the default stream, and launch the kernel using the
<<< >>>
kernel launch directive. - Copy the data from the device to the host using
cudaMemcpy
.
While I know the basics of CUDA, much of the entire facility made available by CUDA is unknown to me. Currently, when I need to get something done, I search for that particular item and read blogs from CUDA to understand it. (But while doing so, I find mention of specific terms unknown to me; for example, while trying to learn about CUDA Graphs, I found references to CUDA streams and functions like cudaMallocHost
. I feel down, seeing that I do not know them, and try to learn recursively, go depth-first, with a high possibility of getting lost.)
My question might be opinion-based, but how did the current CUDA experts master CUDA programming so they do not have trouble reading any CUDA blogs or anything new?
Usually, do people read the CUDA C Programming Guide reference manual from Nvidia completely to have a rough grasp of CUDA (to know what is available in the toolbox named CUDA), or do they read CUDA-related books (like CUDA by Example by Sanders et al., etc)? Or look into the manual as and when required, avoiding reading the entire book or manual.
How do we have a breadth-first knowledge of what is made available by CUDA? That too in a time-bound manner, given that I have a time constraint.
I do not know whether my question is off-topic or not. If so, please let me know, and I shall delete it.