Hi all,
I am interested in learning how to parellel program. Do any of you suggest any books and/or coding libraries to use. Since I am a CS student I would like to know the implementation details.
As far as libraries I've look at openacc, openmp, opencl, and cuda. I am leaning more towards opencl.
Also, most of these libraries seem to be heavily used in gpu. Is the future for multiple core CPU's going away to be replaced by multiple core GPU? Thanks
As far as book suggestions I would recommend "C++ Concurrency in Action: Practical Multithreading" By Anthony Williams. The author is the primary maintainer and developer of the Boost.Thread library so he is quite knowledgeable on the subject of concurrency.
If you already know quite a bit about concurrency this might not be the book for you (Though you could learn a few things from it more than likely), but if you are just starting to take the jump into concurrency and would like to focus on using it in C++ then I would highly recommend it.
Vulkan also supports GPU computing, and could be used as an alternative to Cuda.
For cpu multithreading, I would suggest OpenMP.
I would reccomend starting with both CPU threading and GPU computing. Then learn multi-process concurrency, probably using MPI, and distributed computing.
Vulkan probably would require too much boilerplate for a student wanting to learn GPGPU programming. Modern iterations of OpenGL should be fine for just learning.
OpenMP is great if you're doing work on relatively well known platforms, but it doesn't exist on some platforms (ex: game consoles, which may or may not apply to you). The most portable way right now do parallel programming on the CPU is to use the standard thread library.
Vulkan probably would require too much boilerplate for a student wanting to learn GPGPU programming. Modern iterations of OpenGL should be fine for just learning.
OpenGL compute shader is not quite the same as Compute with Vulkan or Cuda.