Sun Studio 12:C 用户指南

3.4.1 并行执行模型

循环的并行执行由 Solaris 线程完成。启动程序的初始执行的线程称为主线程。程序启动时,主线程创建多个从属线程,如下图所示。程序结束时,所有从属线程均终止。从属线程的创建只进行一次,以使开销减至最小。

图 3–1 主线程和从属线程

显示派生从属线程的主线程的图。

程序启动后,主线程开始执行程序,而从属线程保持空闲等待状态。当主线程遇到并行循环时,循环的不同迭代将会在启动循环执行的从属线程和主线程之间分布。在每个线程完成其块的执行之后,将与剩余线程保持同步。此同步点称为障碍。在所有线程完成其工作并到达障碍之前,主线程不能继续执行程序的剩余部分。从属线程在到达障碍之后进入等待状态,等待分配更多的并行工作,而主线程继续执行该程序。

在此期间,可发生多种开销:

通常存在某些特殊的并行循环,为其执行的有用工作量不足以证明开销是值得的。对于此类循环,其运行速度会明显减慢。在下图中,循环是并行化的。然而,障碍(以水平条表示)带来大量开销。如图所示,障碍之间的工作串行或并行执行。并行执行循环所需的时间比主线程和从属线程在障碍处同步所需的时间少得多。

图 3–2 循环的并行执行

显示并行执行循环的图。