面向英特尔® MIC 架构的高级优化、低精度的优化

面向英特尔® MIC 架构的编译器方法

面向英特尔® MIC 架构的高级优化、低精度的优化

概述

在面向英特尔® 至强融核协处理器代号 Knights Corner alpha beta 老版英特尔编译器中英特尔编译器在多数情况下生成低精度的代码序列。对于这些在 2012 5 月之前推出的 alpha beta 编译器而言,英特尔编译器在默认优化级别上为一些运算生成低精度序列,比如除法和平方根。自从英特尔 Composer XE Beta 更新 1 发布后(.039 版本),该编译器默认行为已发生变化。最新编译器(在 13.0.039 Beta 更新 1 之后发布)不会生成低精度的序列,除非您在编译器选项中明确添加低精度选项。

主题

英特尔编译器能够为某些运算和内联函数(如除法和平方根)生成低精度代码序列。为什么用户会考虑低精度呢?速度和性能:低精度运算比相同情况下的高精度运算更快。用户可能也希望验证 2012 5 月之前的英特尔编译器所得到的测试结果。英特尔编译器提供了一套强大的选项来控制数学运算的精度。

当前编译器提供 -fimf* 选项。不同的 -fimf 选项如下所示。"ulp",您可能不熟悉这个术语,它是最后一位表示的单位的缩写(二进制,4 ulp 指尾数的最后两位)。常规句法:

-fimf-domain-exclusion=<n1> -fimf-accuracy-bits=<n2> -fimf-precision=low -fimf-max-error=<n3_ulps>

一些有用的组合:

a) -fimf-precision=low -fimf-domain-exclusion=15(为SP/DP 提供最低精度的序列)

b) -fimf-domain-exclusion=15 -fimf-accuracy-bits=22 相对 DP 默认值的低精度

c) -fimf-domain-exclusion=15 -fimf-accuracy-bits=11 DP 提供更低的精度相对 SP 默认值的低精度

d) -fimf-precision=low

e) -fimf-max-error=2048 -fimf-domain-exclusion=15 提供相对 4 ulps 最大错误默认值而言更低的精度但是比上述精度要高

f) -fp-model fast=2 编译器默认 -fp-model fast=1规定 fast=2 相当于将 -fimf-domain-exclusion=15 选项添加为默认值

g) -fp-model-precise –no-prec-div –no-prec-sqrt –fast-transcendentals –fimf-precision=high 以从 libsvml 中获得向量化、高精度版本的除法、平方根和超越函数

这些选项影响向量和标量代码的代码生成。

如欲了解完整的选项列表和详细描述,请参阅《编译器用户与参考指南》(与编译器一起安装在您的系统中,同时也支持在线访问)中的浮点选项部分,部分如下所示。

文档(来自《编译器用户指南》):

-fimf-domain-exclusion

域排除属性是一个位向量源自命令行开关中规定的 classList。总体而言每个独特的 classList 元素对应二的幂数。排除属性是逻辑或相关的二的次方。下表提供了当前从 classList 助记符到数值的映射

 

 

域排除的数值类

要计算的相应的整数值

极值

1

非数

2

无穷

4

非规格化数

8

16

默认值

0

共计

31

常用

15

其它组合

按位或使用值

 

简而言之,这些条件可以通过设置适当的位排除。排除意味着编译器生成/使用的代码无需按照 IEEE 标准处理这类数值。请谨慎使用:如果您的应用生成这些数值且未成功处理,可能会产生异常结果或应用异常。然而,如果您的应用表现良好,可以简化这些排除生成的代码,因为它无需检查及处理这些最终案例。

 

fimf-accuracy-bits, Qimf-accuracy-bits

定义数学库函数结果的相对误差。

IDE 等量

默认值

架构

所有

语法

Linux OS X:

-fimf-accuracy-bits=bits[:funclist]

 

Windows:

/Qimf-accuracy-bits:bits[:funclist]

参数

bits

是一个正浮点数,表示编译器应使用的正确位数。

funclist

应用属性的一个或多个数学库函数的可选列表。如果您规定多个函数,必须用逗号隔开。

默认

关闭

编译器调用数学库函数时使用默认启发。

描述

该选项定义数学库函数结果的相对误差,由正确位数测量,

以下公式用于将位数转换为 ulpsulps = 2p-1-bits,这里 p 指的是目标格式尾数位的数量(单精度、双精度和长双精度分别是 2453 64

该选项能够提升运行时性能,但可能会降低结果的精确度。

如果选项 -fimf-precision (Linux* OS OS X*) /Qimf-precision (Windows* OS), 或选项 -fimf-max-error (Linux* OS OS X*) /Qimf-max-error (Windows* OS), 或选项 -fimf-accuracy-bits (Linux OS OS X*) /Qimf-accuracy-bits (Windows OS) 已指定最大误差的默认值将取决于该选项。如果上述一个或多个选项已指定,最大误差的默认值则取决于命令行中指定的最后一个选项。

如果这些选项都没有指定最大误差的默认值则取决于选项 -[no-]fast-transcendentals (Linux OS OS X) /Qfast-transcendentals[-] (Windows OS) 的指定设置。如果该选项也未指定默认值则取决于选项 -fp-model (Linux OS OS X) /fp (Windows OS) 的设置。

 

fimf-precision, Qimf-precision

定义数学库函数的精确度。

IDE 等量

默认值

架构

所有

句法

Linux OS X:

-fimf-precision[=value[:funclist]]

 

Windows:

/Qimf-precision[:value[:funclist]]

参数

下列值代表期望精确度:

相当于 max-error = 0.6

相当于 max-error = 4;在指定该选项但未给出确定值情况下的默认设置。

如果是单精度相当于 accuracy-bits = 11如果是双精度则相当于 accuracy-bits = 26

在上述说明中max-error 代表选项 -fimf-max-error (Linux* OS OS X*) /Qimf-max-error (Windows* OS); accuracy-bits 代表选项 -fimf-accuracy-bits (Linux* OS OS X*) /Qimf-accuracy-bits (Windows* OS)

funclist

应用属性的一个或多个数学库函数的可选列表。如果您规定多个函数,必须用逗号隔开。

默认

关闭

编译器调用数学库函数时使用默认启发。

描述

该选项定义数学库函数的准确性(精度)。

该选项用于提升运行时性能(在较低的精度能够满足应用需要的情况下),或提高数据库函数的精确性。

总而言之,使用较低的精确度可以提升运行时性能,使用较高的精确度可能会降低运行时性能。

如果选项 -fimf-precision (Linux* OS OS X*) /Qimf-precision (Windows* OS), 或选项 -fimf-max-error (Linux* OS OS X*) /Qimf-max-error (Windows* OS), 或选项 -fimf-accuracy-bits (Linux OS OS X*) /Qimf-accuracy-bits (Windows OS) 已指定最大误差的默认值将取决于该选项。如果上述一个或多个选项已指定,最大误差的默认值则取决于命令行中指定的最后一个选项。

如果这些选项都没有指定最大误差的默认值则取决于选项 -[no-]fast-transcendentals (Linux OS OS X) /Qfast-transcendentals[-] (Windows OS) 的指定设置。如果该选项也未指定默认值则取决于选项 -fp-model (Linux OS OS X) /fp (Windows OS) 的设置。

要点

英特尔编译器支持用户选择较低(或较高)的数学内联函数精度,平衡性能、准确性和再生性。本部分讨论 -fimf 系选项列:

·         -fimf-precision 定义数学库函数的准确性(精度)

·         -fimf-accuracy bits 定义数学库函数结果的相对误差。

·         -fimf-domain-exclusion 设置位掩码以排除异常数值类。无需检查这些异常条件,数学函数便可更加快速地运行。

更大的数值讨论包含这些选项,平衡精度与性能和再生性。请参阅 -fp-model 编译器选项了解关于精确度控制的更多信息。为了进一步讨论该主题,请点击以下链接阅读白皮书使用英特尔编译器浮点结果的一致性

下一步

要在英特尔® 至强融核协处理器上成功调试您的应用,请务必通读此指南,并点击文中的超链接查看相关内容。本指南提供了实现最佳应用性能所要执行的步骤。

返回主章节,面向英特尔® MIC 架构的高级优化

 

Per informazioni più dettagliate sulle ottimizzazioni basate su compilatore, vedere il nostro Avviso sull'ottimizzazione.