加速 UFuncs

一些使用英特尔矢量数学库 (VML) 的 Numpy UFunc 的变体可以在对象的accelerate.mkl包中找到ufuncs。与 Numpy 的内置 UFuncs 相比,Accelerated UFuncs 具有以下属性:

表现
由于 Accelerated UFuncs 从 VML 调用函数,VML 是使用多线程和 SIMD 指令为高性能优化的库,因此与调用 Numpy UFuncs 相比,调用 Accelerated UFuncs 时的性能可能会提高。只有连续参数才能获得性能提升。对于非连续参数,将观察到与 Numpy 相当的性能。
准确性
  • 加速 UFuncs 在有限值范围内产生与其 Numpy 等价物相似的结果,直到给定的相对容差。
  • 容差因函数和数据类型而异,并在下一节中为每种组合指定。
  • 对于无穷大和 NaN 值的范围,加速 UFuncs 计算的大多数结果将等于它们的 Numpy 对应项计算的结果。但是,这并不能保证。例如,Numpy UFunc 产生的结果为 的输入,等效的加速 UFunc 可能产生 的结果,其中。x + inf*jy + inf*jx != y
  • 靠近数据类型域的边缘(例如,接近3.4e+38for float1.79e+308fordouble以及域负端的类似量值)一些加速 UFuncs 可能产生与 Numpy UFuncs 不同的结果,或者可能引发FloatingPointErrorZeroDivisionError异常。这些函数在以下部分的表的准确度列中被标记为域边缘警告
  • 一些在复杂域中运行的函数的 numpy 实现具有与 MKL 中不同的分支切割,在测试这些函数时已经确定了这一点,在以下部分的表的准确度列中标记了分支切割警告。在包含不正确分支切割的实现的情况下,也可能出现此警告。
  • 加速 UFuncs 可能会将非规范输入值视为零,并且非规范输出值可能会刷新为零。
  • 报告的准确度是近似值,与使用连续输入参数进行测试时遇到的最不准确值有关。非连续参数更直接地暴露给系统数学库实现,因此不评论它们的准确性。
异常处理
对于有限值的范围,Accelerated UFuncs 不会引发异常,就像 Numpy 不会一样。对于无限和 NaN 范围, 在 Numpy 不会的情况下,加速 UFuncs 可能会引发FloatingPointErrorZeroDivisionError异常,反之亦然。

以下部分描述了支持的功能。

算术函数

功能 类型 准确性
add(x, y) f4 rtol=1.0e-7
f8 rtol=1.0e-15
c8 rtol=1.0e-7
c16 rtol=1.0e-15
subtract(x, y) f4 rtol=1.e-7
f8 rtol=1.e-15
c8 rtol=1.e-7
c16 rtol=1.e-15
square(x) f4 rtol=1.e-7
f8 rtol=1.e-15
multiply(x, y) f4 rtol=1.e-7
f8 rtol=1.e-15
c8 rtol=1.e-6
c16 rtol=1.e-15
absolute(x) f4 rtol=1.e-6
f8 rtol=1.e-15

幂和根函数

功能 类型 准确性
reciprocal(x) f4 rtol=1.e-7
f8 rtol=1.e-15
true_divide(x, y) f4 rtol=1.e-7
f8 rtol=1.e-15
c8 rtol=1.e-6
c16 rtol=1.e-15
sqrt(x, y) f4 rtol=1.e-6
f8 rtol=1.e-15
c8 rtol=1.e-6, 域边缘警告
c16 rtol=1.e-15, 域边缘警告
power(x, y) f4 rtol=1.e-7
f8 rtol=1.e-15
hypot(x, y) f4 rtol=1.e-6
f8 rtol=1.e-15

指数和对数函数

功能 类型 准确性
exp(x) f4 rtol=1.e-6
f8 rtol=1.e-15
c8 rtol=1.e-6, 域边缘警告
c16 rtol=1.e-15, 域边缘警告
expm1(x) f4 rtol=1.e-6
f8 rtol=1.e-15
log(x) f4 rtol=1.e-6
f8 rtol=1.e-15
c8 rtol=1.e-5
c16 rtol=1.e-13
log10(x) f4 rtol=1.e-6
f8 rtol=1.e-15
c8 rtol=1.e-5, 域边缘警告
c16 rtol=1.e-13, 域边缘警告
log1p(x) f4 rtol=1.e-6
f8 rtol=1.e-15

三角函数

功能 类型 准确性
cos(x) f4 rtol=1.e-6, 域边缘警告
f8 rtol=1.e-15, 域边缘警告
c8 rtol=1.e-6, 域边缘警告
c16 rtol=1.e-15, 域边缘警告
sin(x) f4 rtol=1.e-5, 域边缘警告
f8 rtol=1.e-15, 域边缘警告
c8 rtol=1.e-6, 域边缘警告
c16 rtol=1.e-15, 域边缘警告
tan(x) f4 rtol=1.e-6, 域边缘警告
f8 rtol=1.e-15, 域边缘警告
c8 rtol=5.e-4, 域边缘警告
c16 rtol=5.e-14, 域边缘警告
arccos(x) f4 rtol=1.e-6, 分支切断警告
f8 rtol=1.e-15, 分支切断警告
c8
rtol=1.e-5, 域边缘警告,
分支切断警告
c16
rtol=1.e-14, 域边缘警告,
分支切断警告
arcsin(x) f4 rtol=1.e-6, 分支切断警告
f8 rtol=1.e-15, 分支切断警告
c8
rtol=1.e-3, 域边缘警告,
分支切断警告
c16
rtol=1.e-12, 域边缘警告,
分支切断警告
arctan(x) f4 rtol=1.e-6
f8 rtol=1.e-15
c8 rtol=1.e-6
c16 rtol=1.e-15
arctan2(x) f4 rtol=1.e-6
f8 rtol=1.e-15

双曲函数

功能 类型 准确性
cosh(x) f4 rtol=1.e-6, 域边缘警告
f8 rtol=1.e-15, 域边缘警告
c8 rtol=1.e-6, 域边缘警告
c16 rtol=1.e-15, 域边缘警告
sinh(x) f4 rtol=1.e-6, 域边缘警告
f8 rtol=1.e-15, 域边缘警告
c8 rtol=1.e-6, 域边缘警告
c16 rtol=1.e-15, 域边缘警告
tanh(x) f4 rtol=1.e-6, 域边缘警告
f8 rtol=1.e-15, 域边缘警告
c8 rtol=1.e-6, 域边缘警告
c16 rtol=1.e-15, 域边缘警告
arccosh(x) f4 rtol=1.e-6
f8 rtol=1.e-15
c8 rtol=1.e-5, 域边缘警告
c16 rtol=1.e-14, 域边缘警告
arcsinh(x) f4 rtol=1.e-6
f8 rtol=1.e-15
c8 rtol=5.e-5, 域边缘警告
c16 rtol=1.e-13, 域边缘警告
arctanh(x) f4 rtol=1.e-5, 分支切断警告
f8 rtol=5.e-11, 分支切断警告
c8
rtol=1.e-4, 域边缘警告,
分支切断警告
c16
rtol=5.e-14, 域边缘警告,
分支切断警告