利用英特尔® 线程构建模块(英特尔® TBB)优化 MSC. Software SimXpert*

要点综述

MSC.Software SimXpert* 是一种全面集成的模拟环境,用于进行多学科分析。SimXpert 能够提供交互式图形界面,有助于工程师执行端到端模拟工作,包括本机计算机辅助设计 (CAD) 导入 (import)、预处理、模型设置、求解、后期处理和报告。英特尔和 MSC.Software 合作线程化了 SimXpert,大幅提升了工具的性能和大幅提高了用户的工作效率。英特尔® TBB 由于能够兼容用 C++ 编写的多平台应用 SimXpert,当选为最佳方法。SimXpert 的许多特性超出了典型高性能计算 (HPC) 的纯数字应用,这些特性包括复杂的含有几何数据和模拟结果的数据库风格操作、复杂的内存分配运算、对广泛的企业级基础设施 C++ 代码的依赖、适合英特尔® TBB 管道并行模式的整体可视化管道架构,以及 OpenGL* 渲染。英特尔® TBB 采用增量式线程化方法,始自对初始的 72 项关键工程操作进行线程化,紧接着对用于生成边缘图物理基元的代码实施了线程化。在两路 (2S) 英特尔® 至强® 处理器 5100 系列平台(四核)上对七个较大的客户模拟模型的测试,显示出工程计算性能提升 3.8 倍至 3.9 倍。针对边缘图的优化使速度提升了 3% 到 44%。展望未来,MSC.Software 将继续采用这种增量式线程化方法,接下来将对其余绘图类型实施线程化,并可能在未来通过实施英特尔® TBB 管道实现重叠处理和 I/O。

内容简介

为了应对不断增加的客户模型大小,并与硬件供应商的多核处理器路线图保持一致,MSC.software 与英特尔合作线程化了 SimXpert*。英特尔® 教育为一组 MSC.software 工程师提供了关于多处理器架构线程化和英特尔® 线程工具的培训(英特尔® Thread Checker、英特尔® 线程调节器和英特尔® 线程构建模块(英特尔® TBB )。为该项目定义了多阶段、增量式的线程方法。在第一阶段,MSC.Software 在负责计算各种工程量(如等效应力、主应力、最大剪切应力和最大剪应力)的 SimXpert 的后期处理部分中定义了 72 个工程操作。英特尔设计了工程操作的原型,并研究了英特尔® 线程构建模块(英特尔® TBB)和 OpenMP* 的线程实现。英特尔 TBB 被选为最佳方法,因为它兼容所有受支持的平台,其性能也略高于 OpenMP。在第二阶段,对负责生成图形基元的代码进行了线程化,改进了边缘绘图的性能。本白皮书讨论了这些线程化实现阶段、所实现的成果,以及在未来阶段中进一步线程化 SimXpert 的计划。

背景信息/所测量的工作负载

分析了限定元素模型之后,SimXpert 即可访问结果来进行后期处理。SimXpert 的后期处理组件(PPC)是英特尔和 MSC.software 的线程化目标,此“模块”允许专业分析人员执行以下任务:以多种方式查看选定的结果,例如边缘图、变形图、等高线图、向量图和张量图;识别问题;必要时重新设计结构区域。我们使用 MSC.Software 客户提供的大型模拟模型构建边缘图,并测量了两个线程化阶段的性能。这些模型代表着航空航天、汽车和一般制造行业中客户的典型使用案例。由于某些关键因素,出现了数字和图形载入情况。

  • 自由面(如图 1 所示)是模型限定元素的内壁面和外壁面,呈现边缘图的形式。
  • 限定元素 ID 的集群,呈现自由面的元素直接影响结果数据检索时间。
  • 数据的维度(即标量、向量、张量数据类型)直接影响为后期处理检索的数据值数目。
  • 此外,应用于初始分析数据的工程求解(将其从向量或张量数据类型转为标量数据类型,以呈现边缘图)的复杂度也有着重要的影响。




图 1:模型限定元素的自由面呈现

线程化 SimXpert – 第一阶段

线程化 SimXpert 的最初目标是 SimXpert 的后期处理组件 (PPC) 部分中的 72 个工程计算。要使用 tbb::parallel_for 并行化原始串行代码,原始代码需要进行转换。

原始串行代码

  for (size_t i=0; i<Size;++i) { 
         deriveFunc(ptr_inArray,ptr_outArray); 
         ptr_inArray += inStride);
         ptr_outArray += outStride); 
  }


通过转换使数组成为随机访问容器

for (size_t i=0;i<Size; ++i) {
     deriveFunc(ptr_inArray[k* inStride],
			ptr_outArray[k * outStride]);
}


经过转换之后,tbb::parallel_for 即整合到应用程序之中。MSC.software 主要依靠其它线程化工具,例如英特尔® 线程检测器和英特尔® 线程调节器,确保正确性和最优性能。此代码仅代表了 SimXpert 总体运行时中的 7.4%,但线程化给总体性能带来了平均 4.9% 的改进。表 1 显示了在2s 3.0GHz 英特尔® 至强® 处理器5100 系列平台/8GB、Red Hat* Linux* 4 update 3 上实现的扩展。

边缘图 文件名称/实体计数 串行时间(秒) 并行时间(秒) 加速因子(串行时间/并行时间) 串行处理时间(秒) 并行处理时间(秒) 处理加速百分比s-p)/s 用于数字操作的时间百分比
Fringe - Stress, Max Princ Avg Meth=Avg/Derive, Extrap Meth=Avg xx0kst0.xdb/624924 0.765 0.196 3.903 10.22 9.65 5.579 7.48
Fringe - Stress, Mid Princ Avg Meth=Avg/Derive, Extrap Meth=Avg xx0kst0.xdb/624924 0.763 0.195 3.904 10.209 9.635 5.623 7.47
Fringe - Stress, Min Princ Avg Meth=Avg/Derive, Extrap Meth=Avg xx0kst0.xdb/624924 0.762 0.197 3.873 10.208 9.636 5.604 7.46
Fringe - Stress, Tresca Avg Meth=Avg/Derive, Extrap Meth=Avg xx0kst0.xdb/624924 0.767 0.196 3.905 10.228 9.675 5.410 7.50
Fringe - Stress, Max Princ Avg Meth=Avg/Derive, Extrap Meth=Avg xx0ust0.xdb/605288 0.696 0.180 3.874 9.573 9.152 4.401 7.27
Fringe - Stress, Mid Princ Avg Meth=Avg/Derive, Extrap Meth=Avg xx0ust0.xdb/605288 0.691 0.181 3.820 9.553 9.110 4.641 7.24
Fringe - Stress, Min Princ Avg Meth=Avg/Derive, Extrap Meth=Avg xx0ust0.xdb/605288 0.693 0.179 3.879 9.556 9.114 4.626 7.25
Fringe - Stress, Tresca Avg Meth=Avg/Derive, Extrap Meth=Avg xx0ust0.xdb/605288 0.693 0.178 3.886 9.584 9.105 4.998 7.23
Fringe - Stress, Max Shear Avg Meth=Avg/Derive, Extrap Meth=Avg xx0ust0.xdb/605288 0.695 0.180 3.861 9.554 9.099 4.766 7.27
Fringe - Stress, Max Princ Avg Meth=Avg/Derive, Extrap Meth=Avg xx0jst0.xdb/2394421 2.883 0.731 3.942 39.068 37.007 5.275 7.38
Fringe - Stress, Mid Princ Avg Meth=Avg/Derive, Extrap Meth=Avg xx0jst0.xdb/2394421 2.888 0.730 3.956 39.090 36.945 5.486 7.39
Fringe - Stress, Min Princ Avg Meth=Avg/Derive, Extrap Meth=Avg xx0jst0.xdb/2394421 2.880 0.730 3.947 39.086 36.816 5.808 7.37
Fringe - Stress, Tresca Avg Meth=Avg/Derive, Extrap Meth=Avg xx0jst0.xdb/2394421 2.874 0.730 3.937 37.996 36.833 3.061 7.56
Fringe - Stress, Max Shear Avg Meth=Avg/Derive, Extrap Meth=Avg xx0jst0.xdb/2394421 2.894 0.732 3.952 39.433 38.277 2.932 7.34
平均 3.90 4.872 7.37
最小 3.82 2.932 7.23
最大 3.96 5.808 7.56

表 1:数字操作中的串行时间超过 0.5 秒的边缘图摘要

线程化 SimXpert – 第二阶段

SimXpert 用户体验的一个关键目标就是分析结果数据的快速后期处理。后期处理分析包括将初始分析数据转换为工程师指定的最终数字形式,随后将其映射为图形基元表示。例如,工程师可能希望要求 SimXpert 显示平均压力、最大主压力和最大剪应力的彩色边缘图,以相对于已应用的负载研究模拟模型的性能。图 2 展示了一个简单的连杆模型上的平均压力分布边缘图。



图 2 – 平均压力分布边缘图

SimXpert 的第二阶段对可为边缘图生成图形基元的代码部分应用线程化。此代码执行时间约占总绘图时间的 35%。作为概念验证,MSC.software 和英特尔设计了线程化代码的原型,发现在四核上的性能提升了 3.2 倍。所用方法包括生成图形基元并将其打包为容器。程序流修改如表 2 所示。

串行 并行
遍历所有元素/面 划分面/元素,使用 tbb::parallel_for 遍历多个线程
根据容器的需求分配(或重新分配)内存 地存储容纳各英特尔 TBB 任务中的元素
在各元素上执行计算,并生成图形基元 未经修改的串行代码在本地容器上运行
使用 memcpy 将基元复制到容器中(平面数组) 将各本地容器中的部分结果安全地整合到 tbb::concurrent_vector 中
依序转储容器指针,存储在一个成员变量中

表 2 – 串行与并行程序流的对比

在 2s 2.66GHz 英特尔® 至强® 处理器 5100 系列平台/8GB 内存/Windows* XP Professional X64 Edition Version 2003 SP2 环境中运行模型时,性能显著提升(如表 3 所示)。

  • 三维实心限定元素模拟模型,表示 V6 发动机组 (modelsec.xdb) 铸件,带有 98,814 个自由面,文件大小为 358.7 MB,性能改进为 28%
  • 三维实心限定元素模拟模型,表示涡轮叶片 (xx0kst0.xdb),带有 65,416 个自由面,文件大小为 513.3MB,针对各种绘图的性能改进在 3% 到 10% 之间
  • 三维实心限定元素模拟模型,表示厨房储物用具铸件 (xx0ust0.xdb),带有 90,460 个自由面,文件大小为 281.7MB,针对各种绘图的性能改进在 6% 到 26% 之间
  • 二维和三维限定元素模拟模型,表示汽车底盘 (xx0o.xdb),带有 1,209,323 个自由面,文件大小为 438.8MB,针对各种绘图的性能改进在 19% 到 27% 之间
  • 三维实心限定元素模拟模型,表示飞机螺旋桨的中心枢纽 (xx0fst0.xdb),带有 89,935 个自由面,文件大小为 165.2MB,针对各种绘图的性能改进在 10% 到 30% 之间
  • 三维实心限定元素模拟模型,表示飞机螺旋桨的中心枢纽 (xx0fst0.xdb),带有 89,935 个自由面,文件大小为 165.2MB,针对各种绘图的性能改进在 10% 到 30% 之间

工作负载/说明 文件大小/自由面数量 Fringe - Eigen Vectors, Translational - % speedup Fringe - Stress, Von Mises Avg Meth=Avg/ Derive, Extrap Meth=Avg - % speedup Fringe - Stress, Max Princ Avg Meth=Avg/ Derive, Extrap Meth=Avg - % speedup Fringe - Stress, Tresca Avg Meth=Avg/ Derive, Extrap Meth=Avg - % speedup Fringe - Stress, Octal Avg Meth=Avg/ Derive, Extrap Meth=Avg - % speedup Fringe - Stress, Inv 1 Avg Meth=Avg/ Derive, Extrap Meth=Avg - % speedup Fringe - Stress, Max Shear Avg Meth=Avg/ Derive, Extrap Meth=Avg - % speedup Fringe - Disp Trans, Mag - % speedup
modelsec (发动机组) 358.7 MB/98,814 28.092
xx0kst0 (涡轮叶片) 513.3 MB/65,416 3.729 8.103 8.968 3.373 2.926 8.199 10.334
xx0ust0 (储物用具) 281.7 MB/90,460 8.422 13.03 10.733 6.024 6.143 10.628 26.203
xx0o (汽车底盘) 438.8 MB/1,309,323 19.437 19.791 20.03 19.647 19.671 19.902 27.543
xx0fst0 (螺旋桨中央枢纽) 165.2 MB/83,935 10.013 10.863 10.73 10.472 10.867 11.007 29.824
xx0jst0 (直列六缸发动机组) 1028.5 MB/461,808 15.061 18.856 18.988 15.636 15.463 19.585 43.807

表 3 –边缘图优化带来的速度提升(运行三次的平均值)

MSC.Software 评价

“在SimXpert 代码中采用英特尔® TBB 的并行算法让我们在极短的时间内取得了很大进展,这一点让我们非常高兴。英特尔的技术领先优势和协助促使我们决定继续推出多线程版本的 SimXpert。TBB 并行算法(如 Parallel For 和 Parallel Pipeline)的应用范围如此之广让我们感到非常高兴,我们将把这些算法纳入到未来考虑中。

在负责计算各种工程量(如等效应力、主应力、最大剪切应力和最大剪应力)的 SimXpert 的后期处理部分中应用多线程让我们取得了近乎理想的性能扩展,这让我们感到非常兴奋。在配备有两路英特尔® 酷睿™ 2 双核处理器的机器上对七个较大的客户模拟模型进行测试时,我们发现工程计算性能提升了 3.86 倍到 3.9 倍。取得这些近乎完美的结果让 SimXpert 开发团队对于将多线程使用扩展到整个产品中充满信心。

George Truesdell
产品开发部经理

后续步骤

在未来的版本中( SimXpert R4 之后的版本),其余边缘绘图类型也将线程化,还会为线程重叠处理和缓存 I/O 评估英特尔 TBB 管道。英特尔工程师已经使用来自第一阶段的工程计算,设计出了一个英特尔® TBB 管道原型。英特尔® 线程调节器识别出了这个初始实现中的一个缓存波动问题。解决此问题即可实现所需的可扩展性。将管道令牌计数与硬件线程计数相匹配,即可生成“分片”计划,消除缓存波动问题,从而在四核上实现 3.9 倍的提升,在八核上实现 7.5 倍到 7.8 倍的提升。

概念





结论

MSC.Software 项目为 SimXpert 增加线程化的项目是成功的,为 SimXpert 带来了显著的性能提升,为最终用户带来了更快的周期时间,从而提高了生产率。SimXpert 是随英特尔® TBB 发布的第一批商业应用之一。英特尔® TBB 是此项目的理想工具,因为 SimXpert 是用 C++ 编写的一款多平台应用,因而许多特性超出了典型高性能计算 (HPC) 的纯数字应用程序。除此之外,SimXpert 的代码非常适合采用 MSC.software 选择的增量式线程化方法。在第一阶段,在 2s 英特尔® 至强® 处理器 5100 系列平台(四核)上对七个较大的客户模拟模型的测试,显示出工程计算性能提升 3.8 倍至 3.9 倍。在第二阶段,针对边缘图的优化使所测量的工作负载的速度提升了 3% 到 44%。MSC.Software 计划继续为其余绘图类型采用这种增量式线程化方法,同时针对重叠处理和 I/O 研究英特尔® TBB 管道。

MSC.Software SimXpert

MSC.Software 的 SimXpert* 是一种全面集成的模拟环境,用于进行多学科分析。SimXpert 能够提供交互式图形界面,有助于工程师进行端到端模拟,包括本机 CAD 导入、预处理、模型设置、求解、后期处理和报告。SimXpert 专为分析师和设计工程师而设计,跨域多种工程物理学,能够在设计流程的任意阶段为执行多学科模拟(耦合模拟或链式模拟)提供最新的、易于使用的图形界面。SimXpert 可伸缩工作空间包含各种学科解决方案,包括结构线性和非线性分析、热、多体动力学和显式碰撞模拟 (explicit crash simulation)。借助内建的双向 CAD 相关性 (associativity),工程师能够在 SimXpert 和多个 CAD 系统(包括 V5、Pro/Engineer 和 Unigraphics)之间实现卓越的互操作性。此外,SimXpert 还能够提供独特的 CAE 图形模板建模器和启动器 (graphical template builder and runner),支持分析师在分析过程中快速自动化处理各种步骤,如模型建立、预处理、后期处理或其它耗时的日常任务。

作者简介

Kathy Carver于 1992 年加盟英特尔,当前是英特尔软件和服务事业部 (SSG) 的一名应用工程师,负责优化 CAE 应用以充分利用英特尔最新的硬件和软件创新。此前,Kathy Carver 是英特尔超级计算机系统部门 (SSD) 的一员,负责首款英特尔® 安腾® 处理器的流片前验证和工具开发。Kathy Carver 毕业于位于肯塔基州宝林绿 (Bowling Green) 城内的西肯塔基大学,获得计算机科学学士学位。

Mark Lubin是英特尔软件和服务事业部 (SSG) 的一名并行应用工程师,负责优化高性能计算 (HPC) 应用。在加盟英特尔之前,Mark 在加利福尼亚大学圣迭弋分校 (UCSD) 做博士后研究,致力于为并行计算机开发量子分子动力学计算机模型和软件。Mark 在超过 15 种同行评议的出版物上发表有论文。此外,Mark 还获得了俄罗斯莫斯科电子科技大学颁发的电子工程师硕士学位和中福罗里达大学颁发的物理博士学位。

Bonnie Aona是英特尔软件和服务事业部 (SSG) 编译器和语言部门的一名软件工程师,致力于优化和测试各种应用,以充分利用最新的英特尔软件和硬件创新,实现出色的性能和并行性。她的工作是利用软件质量保证和计划管理以及软件设计,为计算机图形、实时系统、科学研究、制造、电子商务、航天以及医疗保健等行业提供复杂的高性能应用。Bonnie Aona 毕业于加利福尼亚大学戴维斯分校电子与计算机工程专业,获得硕士学位。


*其它的名称和品牌可能是其他所有者的资产。
Para obtener más información sobre las optimizaciones del compilador, consulte el aviso sobre la optimización.