OpenMP 线程处理的基本消耗

介绍
如果您有现成的代码,并希望使其实现线程化,以令其在多核系统上达到最佳运行效果。 开始使用前您需要了解哪些内容?

本文将说明如何开始使用 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

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值