并行与分布式计算笔记1
计算节点用InfiniBand网络进行通信,传输速率可以到100GB/s。
并行编译器只能做到执行级的并行,检测到basic block和少量的嵌入的for循环,无法满足并行计算的要求。
所以需要让程序员来编写并行程序。
通过操作系统底层的线程库来编程会非常复杂,甚至出错,所以会有并行编程的工具来进行抽象。
常见的工具有:
OpenMP
Message Passing InterfaceMPI(mpi)
Posix Threads(pthreads)
Open Computing Language(opencl)
CUDA
Map Reduce
并行编程的难点
1找到尽可能多的并行点
2粒度:函数级并行、线程级并行还是进程级并行
3局部性:并行化后是否能够利用局部数据等
4负载均衡:不同线程、不同core之间的负载分布
5协作与同步
6性能模型
任务并行
将一个问题划分成多个不同的子任务在不同的core上运行;
(计算密集型,可以拆分成不同的子任务)
数据并行
1.将问题所涉及的数据才分到不同的core上执行;
2.每个core运行的是相同的程序。
(数据密集型,大数据应用)