简介
全新的英特尔处理器引入了增强型扩展指令集,以此提升应用的性能或增强其安全性。 英特尔 AVX1和 AVX21等扩展指令集主要用于提升性能,而英特尔 SHA2指令则用于 SHA 加速,从而增强应用的安全性。
如果开发人员希望用这些新指令创建应用,但目前的硬件不支持这些指令该怎么办? 公司如何证明购买新系统来支持新指令的价值,同时确保其应用能够充分利用这些新指令来提升性能?
英特尔® 软件开发仿真器可用于在不支持新指令的系统上执行包含这些指令的应用。
本文将探讨使用 SDE 测试使用新指令的代码所带来的优势。
什么是英特尔软件开发仿真器 (SDE)?
顾名思义,SDE 是一套仿真器,支持带有新指令的代码在不支持这些指令的系统上运行。 如欲了解关于 SDE 的更多信息,请访问 [3]。 但有一点需注意,SDE 仅用于评估功能,而无法评估性能,因为其运行程序的速度比本地硬件慢。 SDE 可点击 此处进行下载。
如果要使用 SDE 测试带有新指令的应用,首先需要使用支持新指令集的编译器编译该应用。 比如,编译带有 AVX2 指令的应用时,可以使用英特尔编译器 14.0、gcc 4.7 或 Microsoft* Visual Studio*,或这些编译器的最新版本。 SDE 以汇编语言列出所有指令, 不仅包括用户应用的指令,还包括函数库和内核中的指令。
如需显示完整的 SDE 选项列表,请在命令提示符后输入以下命令:
sde –help
图 1. 列出所有 SDE 选项
如需显示更多 SDE 选项类别:
% sde –帮助使用:
如何使用 SDE
本文将介绍如何使用两种常用的 SDE 选项。 请访问 [4],观看介绍如何下载、安装和运行 SDE 的视频。
下面仅介绍两种最常用的 SDE 选项:
混合
图 2. mix 选项
图 2 显示了带有默认输出或用户定义的输出文件的 mix 选项。“-mix” 和 “-omix” 选项将列出所有执行的动态 指令,以及指令长度、指令类型和 ISA 扩展指令集分组。 要使用该选项运行 SDE,请在命令提示符后输入以下命令:
sde.exe -mix -- <application name>
结果将被写入名为 mix.out 的文件。 如需为该输出文件指定一个不同的名称,请使用下列命令:
sde.exe –omix <user-defined output file name> -- <application name>
ast
图 3. ast 选项
图 3 显示了带有默认输出或用户定义的输出文件的 ast 选项。使用 “-ast” 或 “-oast” 选项检测 SSE 和 AVX/AVX2 指令之间是否发生转换。 该选项非常有用,因为这两类指令之间的转换活动通常耗费多个执行周期。 减少指令的转换将有助于提升应用的性能。 请在命令提示符后输入以下命令,运行使用该选项的 SDE:
sde.exe -ast -- <application name>
结果将被写入名为 avx-sse-transition.out 的文件。 如需为该输出文件指定一个不同的名称,请使用下列 命令:
sde.exe -oast <user-defined output file name> -- <application name>
注: 这两个选项还可合并为一个命令,如下所示:
sde.exe -mix -ast -- <application name>
或
sde.exe –omix < output mix file name> -oast < output ast file name> -- <application name>
详细了解 ‘mix’ 选项的输出
使用 mix 选项得出的输出文件包含大量信息,本文不对此一一作出解释。 我们重点了解文件中的某几个部分。
图 4. 这部分输出文件显示了该应用 (linkpack_xeon64) 目前正运行 28 条线程。
图 5. 本图中的输出显示了一部分同时使用指令和指令类型(AVX、FMA 和 SSE)的线程 0 (TID 0)。
图 6. 线程结尾部分汇总了线程中所使用的指令以及被调用的频率。
图 7. 输出文件结尾部分汇总了应用中的所有指令,以及该应用所使用的函数库。
详细了解 ‘ast’ 选项的输出
使用 ast 选项运行 SDE 时所得出的输出有助于识别 SSE 与 AVX 之间的双向转换。
图 8. SSE 与 AVX 之间不存在转换
图 8 显示了 SSE 与 AVX 之间不存在转换时的情况。 SSE 与 AVX 两者之间的转换需耗费多个宝贵的执行周期。 有时,耗费的周期多达 20,000 个。 因此减少这些转换活动非常重要。 如果7存在转换活动,其转换输出文件如图 9 所示。
图 9. SSE 与 AVX 之间存在转换
[9] 中的文章很好地介绍了如何避免这些转换惩罚。
使用 SDE 的优势
检测指令
SDE 仅计算应用运行过程中所(动态)执行的指令,而不计算代码中的(静态)指令。 假设某些指令要在代码的某些部分内执行,这种方法可以很好地调试有问题的应用。 如果与代码的某些部分所对应的特定地址块中未检测到预期的指令,那么肯定会出现意外分支或其他状况。 SDE 可提供起始地址,结束地址等选项来应对这种状况。 请注意,SDE 尚未记录这类选项5。 希望以后的 SDE 版本会记录这些选项。
这里有一点需注意,即运行带有不同选项或输入的应用还将触发不同的行为和动态执行,因此不能指望通过单次运行应用来确定整体应用性能。 通常情况下,我们建议您使用不同的工作负载运行应用并观察其行为。
潜在的性能提升
SDE 可检测 SSE 与 AVX 两者之间的转换。 减少这些转换活动可有效提升性能。
检查“无效指标”和“数据未对齐”
SDE 还可检查无效指标和数据未对齐。 下面是从 SDE 文档8中截取的快照,简要介绍了这两项功能的选项。
图 10. 针对调试的选项
结论
SDE 可在硬件不支持全新英特尔指令的情况下,用于测试使用这些指令的应用;因此,它有助于评估应用是否能够受益于英特尔发布的新平台。 但值得注意的是,SDE 的运行速度比本地平台慢得多,且其设计并非针对提供关于未来性能的洞察。 SDE 可动态计算所执行的指令(而非代码中的指令),以及 SSE 与 AVX 之间的转换。 这些功能可用于调试和优化任务。 SDE 还可通过检测无效指标和数据未对齐来辅助调试。 这些只是仿真环境提供的一小部分功能: 请查阅本文“参考文献”部分的文档,以了解更多详情。
参考文献
[1] http://en.wikipedia.org/wiki/Advanced_Vector_Extensions
[2] http://en.wikipedia.org/wiki/Intel_SHA_extensions
[3] https://software.intel.com/en-us/articles/intel-software-development-emulator
[4] http://goparallel.sourceforge.net/installing-running-intel-software-development-emulator/
[5] https://software.intel.com/en-us/forums/topic/533825
[6] http://en.wikipedia.org/wiki/Intrinsic_function
[7] https://software.intel.com/en-us/forums/topic/538142
[8] https://software.intel.com/en-us/articles/intel-software-development-emulator#BASIC
[9] https://software.intel.com/en-us/articles/avoiding-avx-sse-transition-penalties
注意:本文件中包含关于英特尔产品的信息。 本文件不构成对任何知识产权的授权,包括明示的、暗示的,也无论是基于禁止反言的原则或其他。 除英特尔产品销售的条款和条件规定的责任外,英特尔不承担任何其他责任。英特尔在此作出免责声明:本文件不构成英特尔关于其产品的使用和/或销售的任何明示或暗示的保证,包括不就其产品的(i)对某一特定用途的适用性、(ii)适销性以及(iii)对任何专利、版权或其他知识产权的侵害的承担任何责任或作出任何担保。 除非经过英特尔的书面同意认可,英特尔的产品无意被设计用于或被用于以下应用:即在这样的应用中可因英特尔产品的故障而导致人身伤亡。 英特尔有权随时更改产品的规格和描述而毋需发出通知。 设计者不应信赖任何英特产品所不具有的特性,设计者亦不应信赖任何标有“保留权利”或“未定义”说明或特性描述。 对此,英特尔保留将来对其进行定义的权利,同时,英特尔不应为因其日后更改该等说明或特性描述而产生的冲突和不相容承担任何责任。 此处提供的信息可随时改变而毋需通知。 请勿根据本文件提供的信息完成一项产品设计。 本文件所描述的产品可能包含使其与宣称的规格不符的设计缺陷或失误。 英特尔提供最新的勘误表备索。 在发出订单之前,请联系当地的英特尔营业部或分销商以获取最新的产品规格。 索取本文件中或英特尔的其他材料中提到的、包含订单号的文件的复印件,可拨打 1-800-548-4725,或登陆:http://www.intel.com/design/literature.htm。对本文件中包含的软件源代码的提供均依据相关软件许可而做出,任何对该等源代码的使用和复制均应按照相关软件许可的条款执行。 英特尔、Intel 标识、Intel Core、英特尔酷睿和 Intel Xeon、英特尔至强是英特尔公司在美国和/或其他国家(地区)的商标。 英特尔公司 © 2015 年版权所有。 所有权保留。
*其他的名称和品牌可能是其他所有者的资产。