当今,多核处理器正成为主流,开发人员必须使其代码实现线程化,才能并行运行代码。OpenMP1 可以提供实现应用程序线程化的有效方法。但是,关于线程化代码的性能,您都应该了解什么,使用 OpenMP 时该性能又意味着什么?在之前的文章2中,我们发现所有线程化方法的启动成本都相同,但是 OpenMP 与常见的 Windows* 线程化相比具有一定的性能优势,原因在于它使用了线程池。
在决定如何以及在何处线程化代码时,了解 OpenMP 性能是至关重要的。为进行线程化而更改架构平衡和算法时尤为如此。在应用程序中对 OpenMP 代码进行原型设计和评测前,应当了解 OpenMP 线程化可能对代码带来怎样的性能影响。
在本文中,我们将对使用 OpenMP 实现线程化进行全方位的解读,并了解其对代码性能带来的影响。我们将介绍一些极为常见的 OpenMP 指令。同时,我们还将探讨手动调度代码时的运行时成本,如果循环体在运行时变化较大,则该成本是必不可少的。如果您要线程化现有的序列化代码(或有这方面的打算)、修改和评测现有的并行代码或从头新建并行设计,本文将非常有用。线程化现有代码可能最难,因此我们将重点关注这一方面。