np.add 背后:从 Python 调用到 SIMD 内核
Tracing np.add, all the way down
np.add 可能是全球执行次数最多的数值 Python 代码行之一。大多数人认为它只是用 C 语言快速相加数组,但这背后隐藏着复杂的机制。本文将带你从 Python 入口点一路追踪到 SIMD 内核,拆解 NumPy 2.5.2 的源码。我们将探索 ufunc 对象如何解析参数、检查 __array_ufunc__ 覆盖、进行类型提升与分发,最终选择正确的内循环。无论是简单的平凡循环还是复杂的 NpyIter 迭代器,每一步都揭示了 NumPy 如何高效处理数组运算。
np.add 可能是全球执行次数最多的数值 Python 代码行之一,大多数人认为它只是用 C 语言快速相加数组,但这背后隐藏着复杂的机制。
- aadyachinubhai
带有 @arch@ 这类调度逻辑的 `.c.src` 文件是 numpy 特有的。此外,他们目前正在努力转向使用 Google 的 Highway 项目的 C++ 模板。我曾参与过将 `np.negative` 移植到其中的工作!
- bobmarleybiceps
我有点希望他们能在某些模板相关部分使用 C++,尤其是据我所知代码库中似乎已经包含了一些 C++ 代码。
我之前也贡献过一点点代码,他们的 C 模板系统确实让我吃了一惊。(不过这很酷,而且不管怎样我还是很爱 numpy lol)
- brcmthrowaway
我不太明白,我以为 numpy 是挂钩到 Fortran 相关部分的 :|