在许多应用程序(特别是数值应用程序)中,一部分算法可以并行化,而其他部分却具有固有的顺序性,如下表所示。
表 9–1
顺序执行 |
并行执行 |
---|---|
Thread 1 |
Thread 2 through Thread n |
while(many_iterations) { sequential_computation --- Barrier --- parallel_computation } |
while(many_iterations) { --- Barrier --- parallel_computation } |
例如,您可能会使用严格的线性计算产生一组矩阵,并对使用并行算法的矩阵执行操作。随后,可以使用这些操作的结果来产生另一组矩阵,并行在这些矩阵上执行操作等。
这类计算的并行算法特征是计算期间很少需要执行同步。但是,为确保在并行计算开始之前完成顺序计算,需要对所有线程进行同步。
屏障将强制所有执行并行计算的线程一直等待,直到所有涉及到的线程都达到屏障为止。所有线程到达屏障后,即释放线程并同时开始计算。