多线程编程指南

在共享内存并行计算机上并行化循环

在许多应用程序(特别是数值应用程序)中,一部分算法可以并行化,而其他部分却具有固有的顺序性,如下表所示。

表 9–1  

顺序执行 

并行执行 

 

Thread 1

 

Thread 2 through Thread n

 

while(many_iterations) {



    sequential_computation

    --- Barrier ---

    parallel_computation

}

 

while(many_iterations) {





    --- Barrier ---

    parallel_computation

}

例如,您可能会使用严格的线性计算产生一组矩阵,并对使用并行算法的矩阵执行操作。随后,可以使用这些操作的结果来产生另一组矩阵,并行在这些矩阵上执行操作等。

这类计算的并行算法特征是计算期间很少需要执行同步。但是,为确保在并行计算开始之前完成顺序计算,需要对所有线程进行同步。

屏障将强制所有执行并行计算的线程一直等待,直到所有涉及到的线程都达到屏障为止。所有线程到达屏障后,即释放线程并同时开始计算。