cla*_*aws 6 parallel-processing multithreading multiprocessing
我正在使用短语Parallel Processing
和Multi Threading
互换,因为我觉得它们之间没有区别.如果我错了请纠正我.
我不是并行处理/多线程的专家.我熟悉并使用.NET线程和POSIX线程.没有比这更好的了.
我只是在多线程浏览SO的档案,并惊讶地发现有很多用于多线程的库.
http://en.wikipedia.org/wiki/Template:Parallel_computing列出了众所周知的API(我不确定是否存在其他的)多线程库.
- POSIX线程
- OpenMP的
- PVM
- MPI
- UPC
- 英特尔线程构建模块
- Boost.Thread
- 全局数组
- 魅力++
- 的Cilk
- 共同阵列Fortran
- CUDA
此外,我很惊讶地看到http://en.wikipedia.org/wiki/Comparison_of_Parallel_Computing_Libraries_(API)丢失了.
直到现在,我从未遇到过需要在这些库之间进行选择的情况.但是,如果我遇到这种情况.
[1]并行库的正确选择取决于目标并行机的类型:(1)共享存储器(即多核)和(2)分布式存储器(即,单元,网格计算,CUDA).您还需要考虑所需的并行编程模型:(1)通用多线程应用程序,(2)循环级并行,(3)管道等高级并行,(4)数据级并行.
首先,共享存储器模型只是多线程编程,因为所有计算核心(例如,芯片多处理器和对称多处理器)上的地址空间是共享的.无需在线程和进程之间显式交换数据.OpenMP,Cilk,TBB都适合这个领域.
分布式存储器模型曾经是超级计算机的主要并行编程模型,其中每个单独的机器(即,地址空间不共享)通过紧密网络连接.MPI是最着名的编程模型.但是,此模型仍然存在,尤其是对于不共享内存地址空间的CUDA和基于单元的编程.例如,CUDA分离CPU的内存和GPU的内存.您明确需要在CPU内存和GPU内存之间发送数据.
接下来,您需要考虑并行编程模型.POSIX线程用于通用多线程编程(例如,高度多线程的Web服务器).但是,OpenMP非常适用于循环级并行,而不是一般的POSIX/Win32线程API.它简化了线程分叉和连接.英特尔TBB支持各种任务级并行,包括循环和流水线.您可以利用另一种并行性:数据级并行性.对于这个问题,GPGU将优于CPU,因为GPGPU专门用于数据并行工作负载.还有一种称为流处理的编程模型.
[2]我已在上面回答过.
[3]简单.有许多不同的并行/并发编程模型和不同的并行机器.所以,这不是一个单一的问题; 并行/并发编程中存在很多子问题,目前超级单一编程模型无法解决这些问题.
[4]这取决于.认真.
归档时间: |
|
查看次数: |
1050 次 |
最近记录: |