I am an undergraduate, and enthusiastic about HPC. I am currently familiar with the tools OpenMP, MPI, CUDA, OpenCL, thrust libraries etc. But I want to know the core functioning of these tools, I want to know how exactly these environments work to get the most of the hardware. It would be great if someone would suggest me some reading material or even some MOOC videos.
After reading the material it would be great if I could get a very good idea how the library is written. And maybe someday even I could write one if needed.
Thanks in advance.