向量数学函数
翻译:Lyra(Godblessmee)
说明:
本文翻译自Intel C++ Composer XE 2011的帮助文档,要实现文中所述功能需要先安装Intel C++ Composer XE 2011以及Visual Studio C++集成模块,与Microsoft Visual Studio 2005/2008/2010。
Intel MKL 向量数学函数库(VML)对每一个向量元素进行数学计算。VML包含了一套高度优化的函数(几何、幂、三角函数、指数、双曲函数、特殊函数、舍入),这些函数能够对实数或复数进行操作。
应用程序能够用VML提高性能主要包括非线性编程、整数运算、金融计算、计算机图形以及其他。
进入下列分组的VML应用根据其执行的操作:
●VML数学函数,对连续存储的向量元素计算数学函数比如正弦、余弦、指数、对数;
●VML打包、解包函数,转换为或转换自向量、向量索引、掩码索引(查看“Vector Argument
in VML”);
●VML服务程序,设置或获取精度模式及错误码。
VML数学函数输入一个向量,按元素计算对应值,再返回结果至一个输出向量。所有的VML 数学函数都可以执行替代操作,即输入输出指向同一个内存地址。
Intel MKL接口(C版本)在下面文件给出:
●mkl_vml_functions.h
下列路径提供了例程,展示了如何使用VML函数:
$(MKL)/examples/vmlc/source
$(MKL)/examples/vmlf/source
在线VML性能与精度数据文档可在以下地址获得:
https://www.doczj.com/doc/5b3072153.html,/en-us/articles/intel-math-kernel-library-documentation/
数据类型、精度模式、性能提示
VML包含了打包、解包向量数学函数,可用于单精度、双精度的实数、复数输入参数。库为所有函数提供了Fortran和C版本接口,包括相关服务函数。函数明名约定展示了如何在不同语言下调用这些函数。
性能取决于多方面的因素,包括因数分解、线程等等。推荐的使用库的方式如下:
●对于长度大于40的向量使用VML库函数;
●对于长度小于40的向量使用Intel编译器;
所有的VML向量函数都支持下列的精度模式:
●高精度模式(HA),这也是缺省模式;
●低精度模式(LA),通过降低两位LSB精度提高性能;
●增强性能模式(EP),通过大幅度降低精度提供最佳性能,尾数中大约一半有效。
注意到EP模式不保证极个别情况和特殊值的处理精度。尽管缺省模式是HA,LA在大多数
情况下就已足够。对于某些对精度要求不高的应用(如媒体应用、一些Monte Carlo模拟等),EP模式也许就已足够。
VML按照C99标准方式处理特殊值情况。
使用vmlSetMode(mode)函数在HA、LA和EP模式中切换(查询“Value of the mode Parameter”)。vmlGetMode()函数返回当前模式类型。
函数命名约定
VML函数名称对Fortran语言是小写(vsabs),对于C是大小写混合(vsAbs)。
VML函数名称具有以下结构:
V[m]>
其中:
●V是前缀,表示对向量操作;
●[m]是选择前缀,表示附加的参数,可限定给定函数模式的VML模式(参见SetMode);
●>是精度前缀,表示下列中某一种数据类型:
S Fortran时REAL,
C时float
d Fortran时DOUBLE PRECISION
C时double
c Fortran时COMPLEX
C时MKL_Complex8
z Fortran时DOUBLE COMPLEX
C时MKL_Complex16
●
Funtions”。
●
i 正向增加索引
v 由索引向量索引
m 由掩码向量索引
VML服务函数名称具有以下结构:
vml
其中,
●C时,vsExp ( n, a, y )。
向量索引方式
VML数学函数只在单位步长下工作。要容纳增长的数据阵列,或更复杂的索引方式,您可以聚集元素到一个相邻的向量,然后在计算完之后拆散它们。
VML使用三种索引方式进行工作:
●正向递增;
●索引向量;
●掩码索引。
某个特殊函数使用的索引方式由索引修改器指定(参考“Function Naming Conventions”中
错误诊断
如果错误和报警同时在函数调用时出现,VML错误状态变量将只保留错误代码的值。对于可能的错误状态代码,请查阅Value of the VML Error Status。如果VML函数没有出现错误或者报警,将会把VML错误状态设置为VML_STATUS_OK。
如果您使用Fortran接口,调用错误报告函数XERBLA来接受输入参数纠正的信息(VML_STATUS_BASIZE和VML_STATUS_BASMEM)。更多细节请见Value of the VML Error Status。
您可以使用vmlSetMode和vmlGetMode函数来修改错误处理动作。根据VML mode的不同,错误处理动作将包含以下操作:
●设置VML_Srror_Status为一个对应于观察到的错误或者报警的值;
●设置变量errno为一个Set Value of the errno Variable所描述的值;
●将错误文本信息写进stderr流;
●必要的话提升某个错误的合适例外???;
调用福建的错误处理反馈函数,该函数由vmlSetErrorCallBack设置。
●
VML数学函数
本部分将描述用于计算实向量或者复数向量数学函数的VML函数。
介绍每一个函数时都会提到它的简化名、简要功能描述、两种语言下的调用序列,以及输入输出参数描述。
输入参数范围与输入数据类型的数学范围相同,除非函数描述中专门提到,如下所示:
●FLT_MAX表明单精度浮点型数据的最大可表示数值;
●DBL_MAX表明双精度浮点型数据的最大可表示数据;
特殊值标记法
本章节定义了复数函数特殊值的标记法。
●Z、z1、z2等等表示复数;
●i2=-1表示复数单位;
●x、X、x1、x2等等表示实部;
●y、Y、y1、y2等等表示虚部;
●X和Y表示所有有限的正IEEE-754浮点值;
●Quiet NaN和signaling NaN分别由QNAN和SNAN表示;
●IEEE-754正无穷或浮点数用X、Y前面的一个+表示;
●IEEE-754负无穷或浮点数用X、Y前面的一个-表示;CONJ(z)和CIS(z)如下表示:
●CONJ(x+i*y) = x-i*y;
●CIS(y) = cos(y) + i*sin(y);
VML Pack/Unpack函数
本章节描述了从或者到转换向量的VML函数。