OpenMP 线程处理的基本消耗

原文地址: http://www.intel.com/cd/ids/developer/apac/zho/324362.htm
介绍
如果您有现成的代码,并希望使其实现线程化,以令其在多核系统上达到最佳运行效果。 开始使用前您需要了解哪些内容?

本文将说明如何开始使用 OpenMP 对代码进行线程化处理,帮助您确定从何处进行线程化,并显示如何衡量所产生的代码的性能。 还将举例比较该线程技术与典型的 Win32 线程处理。

现今,越来越多的多核处理器不断面市。 因此,开发人员需要在代码中添加线程来利用系统所提供的多个内核,并将对性能比较敏感的代码分隔在多个内核上。 但同时,必须确保代码具有良好的可伸缩性;无论在单核计算机、双核计算机、四核计算机及更高级别的计算机上,同样的代码都必须能够运行良好。 本文着重说明使用 OpenMP 线程处理库的某些常用线程处理技术以及性能衡量方法。 这将提供某些性能基准供您使用,帮助您理解如何实现代码线程化以及如何衡量其性能。

OpenMP 是用于编写直接线程化代码的线程处理库, 通常用于向现有的单线程代码中添加线程处理。 本文假定您熟悉线程概念,但可能尚未使用过 OpenMP 或很少对代码进行线程化处理来提高性能。

我们不妨看一些简单的代码,使用 OpenMP 添加线程,然后看看它在双核系统上的执行情况。 这样,您可以清楚地了解 OpenMP 是如何运行的,以及如何修改自己编写的代码并对其进行性能评定。 为便于比较,文中还给出了 Win32 线程处理。

所有代码均使用 C++ 编写,使用英特尔 C++ 编译器 9.0 编译。 性能评测平台为 Windows XP SP2。 有关测试硬件的详细信息,请参阅“配置”附录。

在此处显示的示例中,OpenMP 代码具有良好的可伸缩性,当强制其以单线程运行时,性能略有降低。 OpenMP 的消耗与 Win32 线程类似。 但无论是 OpenMP 还是 Win32 线程,循环启动的消耗都很高。 这表明,对于非常小的循环或对性能高度敏感的应用程序来说,不适合使用这些机制进行线程化。 在这些情况下,需要采用象线程池之类的机制实现线程化。
OpenMP 实验
英特尔全球合作伙伴关系部高级软件工程师 Paul Lindberg

为什么要注意这个代码示例?

本 示例代码显示了如何衡量 OpenMP 基本的线程处理性能。

摘要/概述
本代码选取了一段简单的串行代码,通过不同方式对它进行线程化。 然后使用一个测试工具进行性能衡量,从而帮助我们理解不同方法之间的差异。

目标读者
考虑使用(或已经使用)OpenMP 执行线程处理的 C++ 开发人员,他们希望了解代码如何执行

示例类别:完整项目

实现语言: C++

目标软硬件平台

硬件系统: 运行有英特尔多核处理器的系统

操作系统: Windows XP 及更高级别

编译器: Microsoft Visual Studio.NET 2003、英特尔 C++ 编译器 9.0

  • 下载代码示例
 

你可能感兴趣的:(C++,windows,Microsoft,英特尔,测试工具,编译器)