why ?
为什么要编写并行程序与构建并行系统
The answer:单处理器的性能具有瓶颈,内部原因是因为晶体管的密度不可能无限制的增大,外部原因是因为密度增大,处理器的散热就是一个很大的问题,过于高的温度会影响性能。
how ?
Two methods:任务并行与数据并行
在这里,用一个简单的例子来说明任务并行与数据并行之间的区别:现在有一个教授P,然后他的手下有4个助教(A,B,C,D),期末考试参加的学生有100个,然后改卷子,卷子一共有5道题目。
首先,我们可以将教授以及他手下的主教5人看作是5个核,然后,如果每一个核负责改卷子上的某一道题目,那么这样就属于任务并行(总共有5个任务,一个核一个)。另外一个想法就是一个核负责20个学生的卷子,则这就是数据并行(总共100个数据,每一个核20个)。
并行程序的设计过程中,要注意的问题:核之间的通信,负载平衡,同步。
功能最强大的并行程序就是通过显式的并行结构来编写,即用扩展C和扩展C++编写。
what should we do ?
三种并行编程的方法:
One : 消息传递接口(Message-Passing Interface MPI)
Two : POSIX线程(POSIX threads Pthreads)
Three : OpenMP
为什么会有三种并行编程的实现方法:因为总的而言,并行系统可以分为2类:其中一类是共享内存系统,另外一种是分布式内存系统。Pthreads以及OpenMP是为了共享内存系统的编程而设计的,而MPI是为了分布式内存系统而设计的。
关于共享内存系统中两种方法的主要区别是:Pthreads是比较底层的然而OpenMP是对C语言相对更高层次的扩展。