Assembly 英特尔&x27;s短向量数学库(SVML)函数?

Assembly 英特尔&x27;s短向量数学库(SVML)函数?,assembly,naming-conventions,vectorization,intel,intel-mkl,Assembly,Naming Conventions,Vectorization,Intel,Intel Mkl,我有兴趣了解英特尔SVML函数符号命名约定的含义 实际上,SVML的每个函数似乎都有各种各样的核心函数(其中一个在运行时被选择和调用),但由于未知的原因,我无法在运行时在我的机器上访问所有这些函数。我已经尝试了许多编译选项,比如目标精度,或者编译和优化代码所依据的体系结构。每次我运行程序时,所选的核心函数都是带有后缀\u h9的函数,例如\u svml\u logf4\u h9 我想知道其他核心功能的用途,例如以\u br、\u e7、\u ep、\u ex和\u ha结尾的功能,以及我如何在我

我有兴趣了解英特尔SVML函数符号命名约定的含义

实际上,SVML的每个函数似乎都有各种各样的核心函数(其中一个在运行时被选择和调用),但由于未知的原因,我无法在运行时在我的机器上访问所有这些函数。我已经尝试了许多编译选项,比如目标精度,或者编译和优化代码所依据的体系结构。每次我运行程序时,所选的核心函数都是带有后缀
\u h9
的函数,例如
\u svml\u logf4\u h9

我想知道其他核心功能的用途,例如以
\u br
\u e7
\u ep
\u ex
\u ha
结尾的功能,以及我如何在我的机器上运行这些代码

[编辑以响应@zam] 我也不期望它被标准化。你关于_ha和_br后缀的建议现在很有意义!然而,这些后缀位于全局文本(code)部分,并在本地文本部分调用运行时选择的子例程,例如,
\u br
可能选择
\u br\u ex
\u br\u h9
子例程,其中一个是VEX编码的(\u h9),而另一个不是。 根据您所说的,我现在猜测
\u ex
\u ep
代表不同的处理器系列,例如Broadwell ex系列。
所有
\u h9
例程都是VEX编码的,所以我猜它们与AVX有某种关联,但是为什么
\u br\u ex
不是VEX编码的,而像Xeon E7 v4这样的Broadwell ex CPU却具有AVX指令呢?

我认为这是非标准化的专有信息。根据常识,我也希望h代表哈斯韦尔,br代表布罗德韦尔。你想如何使用这些知识?您是否希望检查何时调用了错误的版本,导致性能低下?我想比较它们的性能和准确性。我将编辑我的帖子,添加我从你的评论中学到的信息。我希望能够选择一个具有给定精度的例程,就像选项-fimf precision={low,medium,high}或-fimf max error={#ulps}一样,但目前这个选项在我的机器上没有任何效果,尽管它在我的ICC手册页中。也许这只适用于libimf,而不是libsvml,但文档中没有明确说明。关于精度编译开关:使用OpenMP4.x simd/declare simd循环和内核时,SVML行为最为一致。如果只使用自动矢量化(无杂注),可能会有额外的限制(语言兼容性、成本模型等),这可能会禁止编译器使用“最理想”的版本。我也可以想象(但至少对于新的英特尔编译器来说,情况并非如此)相反:OpenMP4.x语义间接影响精度,其优先级高于标志。在回答您更新的问题时:您是否说确实存在_br_ep版本?我还可以想象,对于每个平台,都会根据-xAVX/-mAVX编译标志的存在/不存在(对于其他ISA变体也是如此),使用支持SSE和支持AVX的版本。我不是MKL/SVML开发者,所以即使我有间接的信息,我也不应该知道确切的答案;但我有一些使用SVML的经验,我知道SVML前缀并没有明确的文档记录,供应商可能会故意隐藏这些东西的某些方面。