python-3.x - numba 可以加速已经矢量化的 numpy 函数吗?
问题描述
我想使用 numba 和 cuda 来并行化网格上一些厄密矩阵的对角化。让 H 是我的尺寸为 1000 x 1000 x 64 x 64 的矩阵。因此,我想获得一百万个 64 x 64 矩阵的特征向量和值。linalg 包中的 Numpy 的 eigh 函数已经做得很好了。如果我称之为linalg.eigh(H)
它已经矢量化并分布在我计算机的核心上。
在 nVidia 网站上,他们展示了这样一个示例:
import numpy as np
from numba import vectorize
@vectorize(['float32(float32, float32)'], target='cuda')
def Add(a, b):
return a + b
但在示例中,该函数尚未矢量化。基本上,我有两个问题:
- 是否可以在不使用 CUDA 的情况下进一步加速已经矢量化的函数 numba。
- 如果我想把它放在一些带有 numba 的 GPU 集群上,是否像他们在示例中建议的那样简单?
解决方案
是否可以在不使用 CUDA 的情况下进一步加速已经矢量化的函数 numba。
不。
而且你提到的函数linalg.eigh
,不是“矢量化的”(在 numpy 或 Numba 这个词的意义上),甚至不是用 Python 编写的。根据文档,它只是 Lapack 例程syevd
和的包装器heevd
,它将是外部库中预编译的 C 或 Fortran 代码。您看到它使用多个内核的唯一原因是因为您的 numpy 版本是针对 Lapack 的多线程实现构建的(如果您使用的是 Anaconda 版本的 numpy,则可能是Intel MKL )。标准的 numpy 将被编译并链接到系统 Lapack,这通常是netlib 实现,并且它不是多线程的,并且不会像您描述的那样出现“矢量化”。
如果我想把它放在一些带有 numba 的 GPU 集群上,是否像他们在示例中建议的那样简单?
不,这并不容易。是不可能的。
推荐阅读
- swift - 如何在 HStack 中连接后台
- nvidia-deepstream - Nvidia deepstream 5:GLib-GObject-CRITICAL 错误
- lerna - 我应该发布 Lerna 创建的根包吗
- laravel - Pdf Merge在laravel工作中花费太长时间
- powerbi - 我可以通过单击表格中的单元格在 Power BI 中钻取吗?
- log4j - Helm `toYaml` 不保留顺序
- android - 如何在 Android Studio (4.2) 中查看 JetpackCompose kotlin 源代码?
- python-3.x - NLP中筛选专有名词后如何区分一般人名
- xgboost - MLflow 是否支持分布式 XGBoost 模型?
- python - 值错误:多元线性回归模型中的形状未对齐