[精华]Linux版的Intel线程工具详解

milex 2007-10-25 12:38:27
简介


融合了两项重要技术之后,英特尔大大扩展了对 Linux* 线程的支持。英特尔的开发产品系列现已成为面向 Linux 平台的最完善的工具集之一。

作者:Andrew Binstock

Linux* 在出现早期是通过宣传工作发展壮大的,当时该操作系统尚未提供任何支持线程化的强大功能。从某种程度上讲,这是源于 Linus Torvalds 最初支持的独特线程模型,而这也正是 Linux 项目背后的驱动力。随着人们对更为标准的线程模型的需求日益涌现,Torvalds 开始接受一种新型模型,这种模型与商用服务器操作系统(如 UNIX)更为相似。在过去的几年里,Torvalds 和 Linux 技术的传承者们对这些线程操作进行了重大的改进,其中一项就是采用 Pthreads API。该规范由 POSIX 协会设计,是最大限度实现 UNIX 界面标准化的工作的一部分。因此,除了 Linux 之外,Pthreads 还成为许多 UNIX 版本的主要 API。(有一个 Pthreads 版本还适用于 Windows*,尽管它不是 Windows API 的组成部分。请访问 http://sources.redhat.com/pthreads-win32/* )
于 2001 年发布的 Linux 内核 2.4 版中增加了强大的线程功能。这些新增功能使得该操作系统能够为仅有少数几个处理器的系统提供多处理器支持。随着 2.6 版内核的发布,Linux 线程功能向前迈进了一大步,具体表现在它能够支持的处理器数量大大增多,并且其线程调度程序也经过了彻底的重新设计。这些变化的结果便是,操作系统的可扩展性大大增强,目前已能够运行真正意义上的企业级应用程序。
随着 Linux 逐渐完善对线程的支持,英特尔也增强了其对线程化 Linux 应用程序的支持。英特尔从未像支持即将发布的线程导向开发工具这样支持过其他产品。本文将对这些工具和现有产品予以介绍,还将讨论它们如何使 Linux 开发人员受益。

Linux* 版本的英特尔线程工具


英特尔® 编译器提供了对线程的第一层支持。当然,它们支持 Pthreads。但更为重要的是,这些编译器还支持一种称为"OpenMP"的可移植线程接口。OpenMP 是由一个称为"OpenMP 架构审核委员会(ARB)"的硬件供应商团体设计的一种线程规范。其目的就是为线程程序提供一种简单、可移植的方法。OpenMP 标准(www.openmp.org* )由库函数、环境变量和 Pragma 组成,目前已发布了第二个主版本。虽然用户可以使用函数和环境变量来调试 OpenMP 程序的运行时环境,但是 OpenMP 的核心内容还是 Pragma(在 Fortran 中称为指令)集。

在此提醒一段时间未使用 Pragma 的读者:Pragma 是可以嵌入到源代码中的特定编译器命令。如果编译器无法识别 Pragma,便会将其忽略。例如,OpenMP 使用 Pragma 来告知编译器将某个循环线程化。在 C/C++ 中执行此操作的代码如下所示:

. . .
#pragma omp parallel for
for (j = 0; j < 10000; j++)
{
a[j] = b[j] + c[j];
}



图 1. 在 OpenMP 中通过 Pragma 实现并行化的 for 循环

此 Pragma 会告知编译器生成代码,这些代码将在后台创建一组线程、在线程间分配循环的工作,并在循环结束时管理这些线程。这段代码将针对运行时系统生成"最佳"数目的线程,该数目通常等于可用执行管线的数目。OpenMP 可提供类似 Pragma 来对程序的其他部分进行并行处理。

除了基本的简单易用等特点之外,OpenMP 还具备如下优势:在进行调试时,无须为能够采用单线程模式运行而更改代码。只需禁用 OpenMP pragma,代码即可以单线程模式运行。但如果开发人员希望调试运行有特定数目线程的代码,则这种配置可通过组合使用 API 调用和环境变量进行指定。总而言之,OpenMP 不但易于使用、可以移植,还为调试提供了极大的灵活性。

但是如果要使用 OpenMP,则必须具有支持 OpenMP 的编译器。个人电脑上仅提供有限的几个 OpenMP 编译器。英特尔提供了高级优化的编译器,可支持 Linux(和 Windows)上的 OpenMP(C/C++ 和 FORTRAN 语言)。为了便于集成,C/C++ 编译器的命名行兼容于相应平台上最常用的编译器(Linux 的 gcc,Windows 的 Microsoft Visual C++),且与这些编译器使用相同的二进制格式和调试格式。

尽管 OpenMP 具备诸多优势,但却无法对线程进行精密控制。如果要在较低的级别工作,则 Linux 开发人员应使用上文所述的 Pthreads API。在使用 Pthreads 时,开发人员将会发现英特尔提供的其它线程工具十分有用。这些工具包括程序分析和性能分析产品。

英特尔® 线程检查器 2.1 版


Linux 版英特尔® 线程检查器针对 Pthreads 和 OpenMP 的线程操作提供了有用的数据。英特尔® 线程检查器可检测到困扰执行并行编程的开发人员的典型情况。其中包括:死锁(这种情况下,两个线程相互等待)、竞态条件(两个线程同时访问相同的数据字段)、线程堆栈溢出以及其它难以重构的故障。英特尔® 线程检查器将使用性能装置来搜集 Linux 系统上的线程运行时信息,然后在 Windows 系统上分析并显示数据。对于 Linux 用户,该软件包与将在 Linux 平台上部署的 Windows 产品以及远程数据收集器一同提供。英特尔® 线程检查器可处理由 gcc 或英特尔编译器生成的二进制文件。在英特尔 64 位企业芯片、安腾® 处理器上运行的 Linux 应用程序可使用独立的版本。
...全文
216 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyx0507 2007-10-28
  • 打赏
  • 举报
回复
intel 的线程分析工具的功能非常的强大。在windows 平台下的如thread checker。
它可以为我们检查我们程序中的线程是否安全。在多线程的情况下各个线程之间是否发生冲突。
以及是否发生死锁的现象。
在Linux平台下Intel也推出了线程工具,应该好好学习一下,好东西。期待!
milex 2007-10-25
  • 打赏
  • 举报
回复
总结


在过去的两年中,英特尔大大扩展了其面向 Linux 开发人员提供的产品。英特尔® C/C++ 编译器在命令行切换和输出代码(在以极快的速度输出代码时)方面已经非常接近于 gcc。编译器同时支持 Pthreads 和 OpenMP,这一点证明 Linux 新增了强大的线程功能。

此外,英特尔还提供可定位特定线程问题和热点的产品。对于 HPC 系统(如集群),新型跟踪导向工具可以线程识别方式来监测 MPI 活动。随着 Linux 在 IT 服务器和 HPC 系统中的作用不断得到扩展,英特尔对那些可充分利用操作系统和处理器的高级开发工具的支持也可能不断加强。同时,您还可以点击本文结尾处的链接,了解有关本文讨论的产品的更多信息。

参考

* 英特尔® 线程工具
* 英特尔® 编译器
* 英特尔® 跟踪分析器
* 英特尔® 跟踪采集器



原文链接:http://intel.csdn.net/ISN_J.aspx?action=JMP&pointid=663
milex 2007-10-25
  • 打赏
  • 举报
回复
Linux 版本的跟踪工具


为了进一步扩展对高性能计算(HPC)的支持,英特尔最近从德国供应商 Pallas 处购买了两种工具。之前在市场推广中分别称为 Vampir* 和 VampirTrace* 的英特尔® 跟踪分析器和英特尔® 跟踪采集器,现已加入到英特尔® 软件开发产品工具套件的行列中,并大受欢迎。这些产品主要用于跟踪集群系统中进程之间传递的讯息。

英特尔® 跟踪采集器是一种低开销的跟踪库,可记录多线程进程尤其是使用消息传递接口(MPI)的多线程进程的执行路径和相关数据。MPI 是一项由协会开发的用于在进程之间共享数据的标准。英特尔® 跟踪采集器特别支持 MPI 的 LAM 实现,MPI 是开放源代码(并且可从 http://www.lam-mpi.org/* 获取)。英特尔® 跟踪采集器是线程安全的,因此可基于每个线程跟踪 MPI 操作。除此之外,该工具还可以对使用 gcc 工具链的所有主要平台自动进行函数分析,这些平台包括基于 32 位英特尔® 处理器架构(IA-32)的处理器和安腾处理器家族的 Linux 平台。

第二种产品,英特尔® 跟踪分析器,可对英特尔® 跟踪采集器收集的数据进行分析和显示。通过这种方式,该工具为开发人员提供了识别热点的功能,可大大提升这些热点位置的性能。

除了跟踪信息之外,英特尔® 跟踪分析器还可显示有关应用程序运行时行为的详细信息。该工具进行事件跟踪时,可以不同的详细程度、不同的系统抽象级别(进程、节点或集群)来显示执行行为。因此,可以准确地测量每个热点对整个集群性能的影响。
milex 2007-10-25
  • 打赏
  • 举报
回复
简介


融合了两项重要技术之后,英特尔大大扩展了对 Linux* 线程的支持。英特尔的开发产品系列现已成为面向 Linux 平台的最完善的工具集之一。

作者:Andrew Binstock

Linux* 在出现早期是通过宣传工作发展壮大的,当时该操作系统尚未提供任何支持线程化的强大功能。从某种程度上讲,这是源于 Linus Torvalds 最初支持的独特线程模型,而这也正是 Linux 项目背后的驱动力。随着人们对更为标准的线程模型的需求日益涌现,Torvalds 开始接受一种新型模型,这种模型与商用服务器操作系统(如 UNIX)更为相似。在过去的几年里,Torvalds 和 Linux 技术的传承者们对这些线程操作进行了重大的改进,其中一项就是采用 Pthreads API。该规范由 POSIX 协会设计,是最大限度实现 UNIX 界面标准化的工作的一部分。因此,除了 Linux 之外,Pthreads 还成为许多 UNIX 版本的主要 API。(有一个 Pthreads 版本还适用于 Windows*,尽管它不是 Windows API 的组成部分。请访问 http://sources.redhat.com/pthreads-win32/* )
于 2001 年发布的 Linux 内核 2.4 版中增加了强大的线程功能。这些新增功能使得该操作系统能够为仅有少数几个处理器的系统提供多处理器支持。随着 2.6 版内核的发布,Linux 线程功能向前迈进了一大步,具体表现在它能够支持的处理器数量大大增多,并且其线程调度程序也经过了彻底的重新设计。这些变化的结果便是,操作系统的可扩展性大大增强,目前已能够运行真正意义上的企业级应用程序。
随着 Linux 逐渐完善对线程的支持,英特尔也增强了其对线程化 Linux 应用程序的支持。英特尔从未像支持即将发布的线程导向开发工具这样支持过其他产品。本文将对这些工具和现有产品予以介绍,还将讨论它们如何使 Linux 开发人员受益。

Linux* 版本的英特尔线程工具


英特尔® 编译器提供了对线程的第一层支持。当然,它们支持 Pthreads。但更为重要的是,这些编译器还支持一种称为"OpenMP"的可移植线程接口。OpenMP 是由一个称为"OpenMP 架构审核委员会(ARB)"的硬件供应商团体设计的一种线程规范。其目的就是为线程程序提供一种简单、可移植的方法。OpenMP 标准(www.openmp.org* )由库函数、环境变量和 Pragma 组成,目前已发布了第二个主版本。虽然用户可以使用函数和环境变量来调试 OpenMP 程序的运行时环境,但是 OpenMP 的核心内容还是 Pragma(在 Fortran 中称为指令)集。

在此提醒一段时间未使用 Pragma 的读者:Pragma 是可以嵌入到源代码中的特定编译器命令。如果编译器无法识别 Pragma,便会将其忽略。例如,OpenMP 使用 Pragma 来告知编译器将某个循环线程化。在 C/C++ 中执行此操作的代码如下所示:

. . .
#pragma omp parallel for
for (j = 0; j < 10000; j++)
{
a[j] = b[j] + c[j];
}



图 1. 在 OpenMP 中通过 Pragma 实现并行化的 for 循环

此 Pragma 会告知编译器生成代码,这些代码将在后台创建一组线程、在线程间分配循环的工作,并在循环结束时管理这些线程。这段代码将针对运行时系统生成"最佳"数目的线程,该数目通常等于可用执行管线的数目。OpenMP 可提供类似 Pragma 来对程序的其他部分进行并行处理。

除了基本的简单易用等特点之外,OpenMP 还具备如下优势:在进行调试时,无须为能够采用单线程模式运行而更改代码。只需禁用 OpenMP pragma,代码即可以单线程模式运行。但如果开发人员希望调试运行有特定数目线程的代码,则这种配置可通过组合使用 API 调用和环境变量进行指定。总而言之,OpenMP 不但易于使用、可以移植,还为调试提供了极大的灵活性。

但是如果要使用 OpenMP,则必须具有支持 OpenMP 的编译器。个人电脑上仅提供有限的几个 OpenMP 编译器。英特尔提供了高级优化的编译器,可支持 Linux(和 Windows)上的 OpenMP(C/C++ 和 FORTRAN 语言)。为了便于集成,C/C++ 编译器的命名行兼容于相应平台上最常用的编译器(Linux 的 gcc,Windows 的 Microsoft Visual C++),且与这些编译器使用相同的二进制格式和调试格式。

尽管 OpenMP 具备诸多优势,但却无法对线程进行精密控制。如果要在较低的级别工作,则 Linux 开发人员应使用上文所述的 Pthreads API。在使用 Pthreads 时,开发人员将会发现英特尔提供的其它线程工具十分有用。这些工具包括程序分析和性能分析产品。

英特尔® 线程检查器 2.1 版


Linux 版英特尔® 线程检查器针对 Pthreads 和 OpenMP 的线程操作提供了有用的数据。英特尔® 线程检查器可检测到困扰执行并行编程的开发人员的典型情况。其中包括:死锁(这种情况下,两个线程相互等待)、竞态条件(两个线程同时访问相同的数据字段)、线程堆栈溢出以及其它难以重构的故障。英特尔® 线程检查器将使用性能装置来搜集 Linux 系统上的线程运行时信息,然后在 Windows 系统上分析并显示数据。对于 Linux 用户,该软件包与将在 Linux 平台上部署的 Windows 产品以及远程数据收集器一同提供。英特尔® 线程检查器可处理由 gcc 或英特尔编译器生成的二进制文件。在英特尔 64 位企业芯片、安腾® 处理器上运行的 Linux 应用程序可使用独立的版本。

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧