65.9K
CodeProject 正在变化。 阅读更多。
Home

更好地查看内部图层:优化核心解剖学

2015年6月1日

CPOL

12分钟阅读

viewsIcon

7683

为了确保 3D4Medical 公司在 Android* 设备上推出的精彩、交互式人体解剖学教学和参考应用程序取得卓越成果,英特尔精准地找到了性能改进的机会,从而帮助拓展了该产品的市场潜力。

英特尔® 开发者区 提供跨平台应用开发工具和操作指南、平台及技术信息、代码示例以及同行专业知识,助力开发者创新并取得成功。加入我们的社区,了解 Android物联网英特尔® 实感™ 技术Windows,下载工具、获取开发套件、与志同道合的开发者交流想法,并参与黑客松、竞赛、路演和本地活动。

为了确保 3D4Medical 公司在 Android* 设备上推出的精彩、交互式人体解剖学教学和参考应用程序取得卓越成果,英特尔精准地找到了性能改进的机会,从而帮助拓展了该产品的市场潜力。

学生、医疗从业者以及其他用户可以在 3D4Medical 的 Essential Anatomy(核心解剖学)应用程序中操作和探索约 4,000 个精细的解剖结构。该界面提供了一个虚拟人体,用户可以剥离图层以揭示更深层次的结构,还可以分离、比较和分析骨骼、循环和神经系统等多个系统中的元素,如图 1 所示。结构还可以放大和旋转,以便从任何角度进行详细检查。该公司不断增加新功能,例如解剖系统的动画功能视图和“切片”结构的演示,以便用户获得横截面视图。

这些解剖模型中深度和准确的细节,以及按需操作它们的丰富功能,给 Essential Anatomy 的 3D 定制渲染引擎带来了巨大的负担。要跟上 3D4Medical 高水平的用户体验标准,就需要实时渲染和模型中流畅的视觉移动,同时还要顺畅支持应用程序的其他元素,例如丰富用户界面和参考资料。

图 1. 用户驱动的操作,以暴露更深层内部结构。

3D4Medical 最初为 iOS 开发了 Essential Anatomy,并通过 Apple 应用商店分发。为了拓展产品的市场潜力,该公司聘请了外部提供商将其移植到 Android 和 Microsoft Windows*。与大多数此类项目一样,最初移植到 Android 设备的机会有所改进,以充分利用新平台的强大功能,在模型操作的运动流畅性等功能领域,尤其是在缩放和旋转具有多层复杂结构时。该公司与英特尔合作,识别代码优化机会,以帮助创建最佳用户体验,包括性能余量,为未来可能添加的附加软件功能和功能做好准备。

特别是,两家公司都对优化 Essential Anatomy 应用程序在基于第四代英特尔® Atom™ 处理器片上系统 (SoC) 的平板电脑和其他设备上的性能感兴趣。这些设备能够支持计算密集型应用程序,而且平台还配备了英特尔 Gen7 图形,有助于支持非常高质量的图形质量和性能。

作为提高 Essential Anatomy 性能的第一步,英特尔建议将整个应用程序移植到英特尔架构的原生代码,而不是基于为 ARM* 创建的原始代码库。这种方法可以使用专门为在英特尔 Atom 处理器上实现高性能而构建的代码优化和开发工具。虽然将应用程序移植到原生代码需要大量工作,消除了对仿真的任何依赖,但该团队报告称,与上一版本相比,性能提高了约 1.55 倍。1

应用程序的初步性能分析

帧速率测量

为了量化性能与用户体验相关的关键方面,该团队在执行一系列特定任务时,监测了 Essential Anatomy 应用程序提供的帧速率。为了获得广泛的代表性,在应用程序空闲时,以及在屏幕上旋转解剖模型时,以及从用户视角缩放视图时,对约 10-15 秒的采样周期进行了帧速率测量。这些测量结果的早期一组数据如图 2 所示。1

图 2. 执行各种应用程序任务时的帧速率。1

大多数帧速率测量值低于每秒六帧 (fps),无论是在应用程序空闲时还是在执行各种测试任务时。该帧速率相当低,用户会感觉到屏幕上图像的过渡会比较卡顿。虽然这种感知是主观的,但每秒约 24 帧的帧速率可以被认为是传达流畅运动感的一个合理最低限度。

这些帧速率测量清楚地表明需要找到渲染管线中的瓶颈。识别这些瓶颈并进行深入分析以生成性能调优建议,以帮助 3D4Medical 解决这些问题,是英特尔团队方法的核心。为了开始揭示性能机会,该团队首先研究了代码如何利用目标系统内的硬件资源。

GPU 利用率分析

为了更好地理解从 Essential Anatomy 应用程序收集到的帧速率测量结果的原因,英特尔工程团队考虑了该行为的系统级方面,包括 GPU 的利用率。英特尔® 图形性能分析器 (Intel® GPA) 使该团队能够针对与上述帧速率测量相同的任务,绘制 GPU 利用率统计数据随时间变化的图表。这些数据如图 3 所示。1

图 3. 执行各种应用程序任务时的 GPU 利用率。1

在整个数据集中,测得的 GPU 利用率非常高。无论是应用程序空闲时,还是在旋转或缩放模型时,情况都是如此。所有测量的时间段都显示利用率高于 60%,在空闲状态和旋转任务的许多时间段内,利用率超过 90%。此外,在应用程序缩放屏幕模型视图时,GPU 利用率几乎始终高于 90%。

应用程序空闲状态下的高 GPU 利用率表明,可用于其他任务的 GPU 资源很少。该应用程序整体上的这种 GPU 绑定行为表明需要更深入地研究渲染架构。

使用英特尔® 图形性能分析器进行更深入、系统的分析

在与 Essential Anatomy 合作期间,英特尔应用程序工程师继续使用 Intel GPA 来发掘 Android 和最新英特尔 Atom 处理器图形性能改进的机会。该工具集使他们能够从系统级到单个绘制调用来检查应用程序的行为。Intel GPA 的关键功能,有助于推动此项工作并生成性能调优建议,包括以下内容:

  • 实时指标,包括两个以上的 CPU、GPU 和 API 属性
  • “假设”实验,以确定假设代码更改的影响
  • 线程级分析,有助于确保多核硬件资源的有效利用

使用 Intel GPA Monitor 捕获帧并使用 Intel GPA Frame Analyzer 查看帧捕获,确定了以下渲染优化可能带来性能提升:

  • 在不需要时禁用 alpha 混合。例如,在一个除鼻腔和 UI 外不需要 alpha 混合的场景中,简单地禁用混合可以将帧速率提高约 15%。1
  • 剔除背面几何体。背面三角形是指其法线不朝向摄像机的三角形。在封闭的凸 3D 网格中,这些三角形位于正面三角形的后面,因此无需进行光栅化。通过将光栅化器状态从“无剔除”更改为“剔除背面三角形”,避免了大量浪费的光栅化和着色工作,性能提高了约六个百分点。1

利用上述两项改进,在启用所有选项(肌肉和各种系统)的情况下渲染全身时,初步性能提高了约 30%,如图 4 所示。

图 4. Intel GPA 帧分析器指标;第二列和第三列显示了初始优化之前和之后的性能。

改进绘制顺序是优化过程中发现的另一个重要的性能改进机会。由于场景模型中的大多数不需要混合,因此可以优化绘制顺序,以最大程度地减少浪费的片段着色时间,这被称为“过度绘制”。通过先绘制外部几何体(即离摄像机更近的几何体),然后再绘制内部几何体,可以在此领域取得改进。

此外,在应用程序生成的大多数模型中,许多解剖层次是不可见的。除非用户操作模型使其可见,否则无需用着色片段来负担渲染管线,因为这些片段实际上不需要显示。该团队估计,减少过度绘制可以将性能提高约 10%。然而,实际上,该区域和其他区域的代码优化最终使每秒帧数整体提高了 55%。1

CPU 驻留分析

作为应用程序分析的一部分,英特尔团队进行了用户体验测试,结果总体积极,包括触摸响应和图形等领域。一些计算密集型功能,例如渲染完整解剖模型,由于复杂的渲染要求而导致交互缓慢。因此,英特尔团队将重点放在调查应用程序中的旋转和缩放操作。

该团队还检查了应用程序在空闲、旋转操作和缩放模型显示时如何使用平台的 CPU 硬件。为了提供更完整的数据集,工程师还包括了系统在使用但 Essential Anatomy 应用程序未运行时的情况下的基线利用率指标。这些数据以每个处理器核心的 CPU 驻留形式呈现,并以在 C0(全功率)核心状态下花费的时间百分比表示,如图 5 所示。

图 5. 系统基线、应用程序空闲、旋转和缩放任务在 C0(全功率)核心状态下的每核驻留。

应用程序空闲期间全功率状态的驻留接近 60%。除了对整体性能产生负面影响外,这种高驻留率和资源利用率还对应着平台的大量功耗,这会预计会对电池寿命产生负面影响。降低显示刷新率是英特尔团队向 3D4Medical 推荐的解决此问题的一种潜在方法。

代码级热点识别

英特尔为 3D4Medical 等生态系统成员进行的性能分析项目的一个常见部分是执行热点分析,该分析可以识别占用大量处理时间的代码段。虽然这样的热点不一定对应于代码效率低下,但与之相关的系统资源的相对大量投资意味着,即使这些代码段的效率有很小的、渐进式的改进,也能为整个应用程序带来显著的好处。因此,识别这样的热点是一种建议软件组件的技巧,这些组件可以为开发者投入到优化中的资源带来特别好的投资回报。

为了直接识别 Essential Anatomy 应用程序中的此类代码段,英特尔团队使用 Intel GPA 在应用程序启动、空闲状态以及执行旋转和缩放任务时分析代码行为。在每种情况下,共享对象 `libSystem.so` 始终是时钟周期消耗最多的组件之一,在许多情况下,`libGLES_intel7.so` 也是如此。深入研究 `libSystem.so`,优化团队特别将 `DenseMap` 函数识别为一个热点。

例如,图 6 显示了一个在应用程序中执行旋转操作时的时序分析视图,该视图清晰地将这三个组件识别为感兴趣的热点。基于这些发现,英特尔团队向 3D4Medical 的开发组织建议,这些代码段可能是调优的良好候选对象。最终,Essential Anatomy 代码的优化使处理器负载降低了 20%,与优化前的版本相比。1

图 6. 在应用程序中旋转屏幕模型时的时序视图。

结论

在本次合作过程中,英特尔与 3D4Medical 之间的持续讨论确保了性能调优方法能够与 Essential Anatomy 应用程序当前的开发需求和未来计划保持良好同步。这种沟通是两家公司之间持续协作和知识转移的一部分。分析完成后,英特尔为 3D4Medical 制定了一份全面的报告,其中包含大量的分析数据和代码优化建议。

随着 3D4Medical 优先处理报告中的代码优化任务并将其纳入其整体开发工作中,该公司从与英特尔的关系中获得了额外的价值。例如,本次合作提供了宝贵的见解,帮助了解英特尔性能调优工具(如 Intel GPA)的潜在作用。此外,该公司继续受益于英特尔在从一般性能调优到英特尔架构图形管道优化等主题方面的工程专业知识。此外,英特尔还会提供在特定领域具有专业知识的工程师,作为此类合作的一部分。

性能分析联合工程将英特尔应用程序工程组织的无与伦比的软件和硬件专业知识服务于 3D4Medical 等独立软件供应商。由于这项活动是英特尔致力于在英特尔架构上实现软件性能承诺的一部分,因此对软件公司是免费的。结果是,Essential Anatomy 应用在 Android 上提供了出色的用户体验,充分发挥了其潜力,实现了流畅的结果,即使对于在屏幕上旋转和缩放复杂、多层解剖模型等要求苛刻的操作也是如此。

这证明了英特尔与软件生态系统之间联合工程的价值,也证明了基于第四代英特尔 Atom 处理器的平板电脑通过 Android 实现强大、实时图形的能力。3D4Medical 通过将其 Essential Anatomy 应用扩展到 Android 用户,同时满足其自身对一流用户体验的严格要求,从而获得了竞争优势。

关于作者

Stevan Rogers 在英特尔工作了 20 多年。他专注于系统配置和实验室管理。他是平台发布和规模工程 (PLSE) 部门业务线应用程序的技术营销工程师。

Priya Vaidya - Priya Vaidya 是英特尔软件与服务部门的一名高级应用程序工程师,在移动应用程序处理器功耗和性能优化方面拥有超过 14 年的经验。Priya 于 2000 年在麻省大学阿默斯特分校获得工程学硕士学位,并于 1998 年获得生物医学工程硕士学位。她拥有 12 项已颁发的美国专利,并有多篇 IEEE 出版物。

Raja Bala - Raja Bala 是英特尔游戏开发者关系部门的一名图形软件工程师。他是印度 BITS-Pilani 的自豪校友,喜欢剖析游戏的渲染过程并寻找加快其速度的方法。

如需了解有关 3D4Medical 及其产品的更多信息,请访问 www.3d4medical.com
如需了解有关英特尔® 架构 Android 开发的更多信息,请访问 http://software.intel.com/android

© . All rights reserved.