是否有使用VEX指令的标准数学库的版本?

时间:2018-03-26 15:48:27

标签: c performance x86 avx libm

我有这个大型库,包含常规C ++,大量SSE内在函数和一些无关紧要的程序集。我已达到了我想要定位AVX指令集的程度。

要做到这一点,我想用gcc' -mavx或MSVC /arch:AVX来构建整个内容,这样我就可以在任何需要的地方添加AVX内在函数而不是在内部担心AVX状态转换。

我发现的唯一问题是标准C数学函数:sin()exp()等。它们在Linux系统上的实现使用没有VEX前缀的SSE指令。我没有检查过,但我期望在Windows上遇到类似的问题。

代码使用了大量的数学函数调用。一些快速基准测试显示一个简单的调用,因此sin()要么稍微(~10%)慢一点,要么慢多少(3x),这取决于确切的CPU以及它如何处理AVX转换(Skylake与旧版本)。

在通话之前添加VZEROUPPER有助于预先设置Skylake CPU,但实际上使Skylake上的代码变慢了一些。似乎正确的解决方案是数学函数的VEX编码版本。

所以我的问题是:是否有一个合理有效的数学库可以编译为使用VEX编码指令?其他人如何处理这个问题?

0 个答案:

没有答案