python - 如果 numpy 已经链接到 BLAS(例如 MKL),则值得使用 cython
问题描述
当我将我的 numpy 链接到 MKL 时,我的代码得到了一些加速。它仍然不够快,所以我们正在考虑使用 cython。我想到的方法是使用 CythonGSL 使用 gsl 的 blas 函数在 cython 中执行昂贵的功能。然而,这有可能是在浪费时间,因为 numpy 已经让 MKL 完成了一些工作。
但是我不知道 MKL 做了多少以及到底做了什么。我的代码中昂贵的部分是 np.sums 和 np.dots。我怀疑通过链接 MKL 代码已经是最优化的,但我不确定。那么知道 numpy + MKL 行为的人能否告诉我我是否可能通过执行 cython 实现来浪费我的时间?
解决方案
不要这样做!通过 BLAS 操作进入 GSL 可以获得 0 收益。它只是链接到其他一些实现,具体取决于您如何构建它。代码是什么样的,为什么你认为它很慢?同时看看这里。
基准测试(python vs. c++ using BLAS)和(numpy)
人们有各种各样的假设,为什么事情是快/慢的。当您看到代码并意识到它们可能会不必要地复制矩阵等时,问题出在哪里通常会变得很明显。
推荐阅读
- python-3.x - 为 pyinstaller 使用了 pip,但 pyinstaller 仍然无法识别
- python - 使用 Python 的 AdaDelta 优化算法
- cratedb - 如何在 CrateDB SQL 查询中减去时间戳的天数?
- c++ - 用于在 2 个有符号整数区间之间进行除法的 C++ 算法
- php - 将输入字段中的数字添加到 SQL 表中的特定选项选定行
- c# - 如何使用 ToListAsync() 中的函数
- javascript - Adobe Acrobat 表单连接到数据库
- amazon-ec2 - Ansible jinja 过滤掉属性不等于某物或缺少属性的元素
- java - Documents4j remoteServer 转换服务器设置
- web-deployment - 可以从任何地方访问我的 Oracle 云应用程序自定义网页