I'm using the phrases Parallel Processing
& Multi Threading
interchangeably because I feel there is no difference between them. If I'm wrong please correct me.
I'm not a pro in Parallel Processing/Multi-threading. I'm familiar with & used .NET threads & POSIX Threads. Nothing more than that.
I was just browsing through archives of SO on multi-threading and surprised to see there are so many libraries for Multi Threading.
http://en.wikipedia.org/wiki/Template:Parallel_computing lists down APIs of well known (I'm not sure if any others exist) Multi-Threading Libraries.
- POSIX Threads
- OpenMP
- PVM
- MPI
- UPC
- Intel Threading Building Blocks
- Boost.Thread
- Global Arrays
- Charm++
- Cilk
- Co-array Fortran
- CUDA
Also, I'm surprised to see http://en.wikipedia.org/wiki/Comparison_of_Parallel_Computing_Libraries_(API) is missing.
Till now, I've never been the situation where I need to choose between these libraries. But, If I run into one such situation.
- How should I pick one?
- What are Pros & Cons of these libraries?
- Why do we have so many libraries for attacking a single problem?
- Which one is the best?