并行计算与多核程序设计_陈天洲_多核软件工具介绍

  • 格式:doc
  • 大小:134.00 KB
  • 文档页数:9

第八章 多核软件工具介绍->web课件

返回 多核程序设计技术由于其推动来源是从芯片厂家开始,所有各芯片厂家都推出了一系列有效工具,包括编译器、性能分析器、数学库以及线程相关的工具。本章节主要介绍英特尔多核芯片上的软件工具。

第1节 C++编译器 1.1 编译器对多核的支持 以下是英特尔C++编译器的主要功能与优点: 支持英特尔多核心处理器以及现有的英特尔处理器与体系结构,针对最新英特尔处理器的先进优化功能可以帮助产生出众的应用程序性能。

与针对 IA-32 的 Microsoft Visual C++、Microsoft Visual C++ 6.0 代码以及 Microsoft Visual C++ .NET 保持跨体系结构的兼容性。

针对最新英特尔处理器的先进优化功能可以帮助产生出众的应用程序性能。 Linux Windows 作用 -O0 /Od 禁止优化 -g /Zi 生成标记 -O1 /O1 优化二进制代码 -O2 /O2 优化速度(默认) -O3 /O3 优化数据缓存

表1、普通优化开关 作为插件嵌入针对 IA-32 的 Microsoft Visual Studio* 开发环境,并提供一个嵌入 Microsoft Visual Studio .NET 环境的预览插件。

在 IA-32 上使用“英特尔 C++ 编译器”可以控制堆栈,以便高效率地执行浮点 (FP) 指令。

对于包含许多常用中、小函数的程序,特别是循环内包含调用的程序,使用“过程间优化”(IPO) 可以极大地提高应用程序性能。

通过更有效地使用指令调度与高速缓存,充分利用处理器微体系结构的优势。通过减少指令缓存反覆、重新组织代码布局、缩减代码长度并降低分支预测失误,“档案导引优化”(PGO) 可 以更好地执行分支预测。 使用“编译器代码覆盖工具”可以提高开发效率、减少缺陷及改善应用程序性能。 支持采用处理器调度与“第三代数据流单指令多数据扩展指令集”(SIMD) 的 IA-32 体系结构,支持SSE、SSE2、SSE3指令,且能够使用自动矢量器对 IA-32 代码进行自动并行化处理,最大限度发挥处理器的潜在能力。

支持“英特尔扩展内存 64 位技术”(英特尔EM64T)。 通过执行断定的指令从程序序列中完全删除这些分支,从而形成更大的基本代码块,并消除相关的预测失误所造成的损失。

使用分支指令、推测以及软件管道技术,改善针对英特尔安腾 2 微体系结构的代码。 支持 OpenMP* API与自动并行功能,提供多线程应用程序支持。 产生符合 ANSI C/C++ 与 ISO C/C++ 标准的软件。 提供安全功能,通过执行堆栈帧运行时错误检查,减少缓冲区溢出安全攻击漏洞。 支持英特尔调试器与线程诊断工具。

英特尔C++ 编译器支持以下语言标准: ANSI/ISO 标准,用于 C 语言编译 (ISO/IEC 9899:1990) ANSI/ISO 标准 (ISO/IEC 14882:1998) 用于 C++ 语言 OpenMP* 规范 2.5 版 英特尔C++编译器与其他常用工具保持兼容,可以集成到广泛使用的开发环境,并且同其他广泛使用的编译器保持着特性源与二进制方面的兼容性,如图8.1、图8.2所示。它还集成了 Microsoft Visual Studio 2005、Visual Studio .NET* 2002/2003 以及 Visual Studio 98,并提供扩展 32 位和 64 位多核英特尔处理器支持。 图8.1 集成了英特尔C++编译器的Visual Studio 图8.2 在Visual Studio项目属性中的英特尔C++编译器开关 1.2 C++编译器实验 实验要求(本章中所有实验均按照此标准) 硬件 英特尔多核处理器 512 MB 内存 20 GB 硬盘 支持32位像素显卡 软件 Windows XP* SP2 Microsoft Visual Studio* .NET 2003 英特尔 C++ 编译器 9.0 或更高版本 英特尔 VTune性能分析器 7.2 或更高版本 英特尔 Thread Checker 线程检查器2.2 或更高版本 英特尔 Thread Profiler 线程档案器 2.2 或更高版本 实验代码 实验用到的代码请见附带光盘内的code文件夹。 本实验通过一个图像渲染程序来验证英特尔C++编译器常用优化开关的优化作用。首先请安装在上述页面下载的英特尔C++编译器试用版(在Visual Studio .NET之后安装),安装好后在开始菜单的所有程序栏可看到Intel(R) Software Development Tools -> Intel(R) C++ Compiler 9.0 -> Build Environment for IA-32 Applications,单击后出现如图8.3界面: 图8.3 英特尔C++编译器命令行界面 (1)原始编译 用微软C++编译器编译 将光盘内的code文件夹整个复制到硬盘,如E盘根目录,在上面的命令行界面输入如下命令跳转到RayTrace2目录:

> cd E: \code\CompilerSwitches\raytrace2\source\RayTrace2\ 然后清理以前生成的文件: > nmake /f raytrace2.mak clean 编译文件: > nmake /f raytrace2.mak CPP=cl.exe 运行渲染图像程序: > raytrace2 320 240 > Press „g ‟ to begin the render > Press „q ‟ to quit the application 将屏幕上显示的运行时间记录下来 ________。 用英特尔C++编译器编译 先清理以前生成的文件: > nmake /f raytrace2.mak clean 编译文件: > nmake /f raytrace2.mak 运行渲染图像程序: > raytrace2 320 240 > Press „g ‟ to begin the render > Press „q ‟ to quit the application 将屏幕上显示的运行时间记录下来 ________。 (2)高阶优化 使用高阶优化编译开关(-O3) 先清理以前生成的文件: > nmake /f raytrace2.mak clean 打开-O3开关编译文件: > nmake /f raytrace2.mak CF="-O3" 运行渲染图像程序: > raytrace2 320 240 > Press „g ‟ to begin the render > Press „q ‟ to quit the application 将屏幕上显示的运行时间记录下来 ________。 (3)过程间优化 使用过程间优化开关(-Qipo) 先清理以前生成的文件: > nmake /f raytrace2.mak clean 打开-O3开关编译文件: > nmake /f raytrace2.mak CF="-Qipo" LF="-Qipo" 运行渲染图像程序: > raytrace2 320 240 > Press „g ‟ to begin the render > Press „q ‟ to quit the application 将屏幕上显示的运行时间记录下来 ________。 (4)档案导引优化 使用档案导引优化开关(-Qprof_gen, -Qprof_use) 先清理以前生成的文件: > nmake /f raytrace2.mak clean 编译产生档案导引优化二进制指令: > nmake /f raytrace2.mak CF="-Qprof_gen -Qprof_dir ..\RayTrace2" 运行渲染图像程序: > raytrace2 320 240 > Press „g ‟ to begin the render > Press „q ‟ to quit the application 将屏幕上显示的运行时间记录下来 ________。 注:因为要生成档案导引优化的记录信息,会消耗大量时间。 使用刚才生成的档案导引优化信息再次编译: > nmake /f raytrace2.mak clean > nmake /f raytrace2.mak CF="-Qprof_use -Qprof_dir ..\RayTrace2" 注:可忽略“no.dpi information”提示。 运行渲染图像程序: > raytrace2 320 240 > Press „g ‟ to begin the render > Press „q ‟ to quit the application 将屏幕上显示的运行时间记录下来 ________。 (5)矢量化优化 用矢量化开关优化(-QxP) 先清理以前生成的文件: > nmake /f raytrace2.mak clean 打开-O3开关编译文件: > nmake /f raytrace2.mak CF="-QxP" 运行渲染图像程序: > raytrace2 320 240 > Press „g ‟ to begin the render > Press „q ‟ to quit the application 将屏幕上显示的运行时间记录下来 ________。 (6)综合优化 使用上述所有优化开关(-O3, -QxP, IPO and PGO) 先清理以前生成的文件: > nmake /f raytrace2.mak clean 打开-O3开关编译文件: