加速 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*j
y + inf*j
x != y
- 靠近数据类型域的边缘(例如,接近
3.4e+38
for
float
和1.79e+308
fordouble
以及域负端的类似量值)一些加速 UFuncs 可能产生与 Numpy UFuncs 不同的结果,或者可能引发FloatingPointError
或ZeroDivisionError
异常。这些函数在以下部分的表的准确度列中被标记为域边缘警告。
- 一些在复杂域中运行的函数的 numpy 实现具有与 MKL 中不同的分支切割,在测试这些函数时已经确定了这一点,在以下部分的表的准确度列中标记了分支切割警告。在包含不正确分支切割的实现的情况下,也可能出现此警告。
- 加速 UFuncs 可能会将非规范输入值视为零,并且非规范输出值可能会刷新为零。
- 报告的准确度是近似值,与使用连续输入参数进行测试时遇到的最不准确值有关。非连续参数更直接地暴露给系统数学库实现,因此不评论它们的准确性。
- 异常处理
- 对于有限值的范围,Accelerated UFuncs 不会引发异常,就像 Numpy 不会一样。对于无限和 NaN 范围,
在 Numpy 不会的情况下,加速 UFuncs 可能会引发
FloatingPointError
或ZeroDivisionError
异常,反之亦然。
以下部分描述了支持的功能。
算术函数
功能 |
类型 |
准确性 |
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 , 域边缘警告,
- 分支切断警告
|