我有一个用 python 编写的流体动力学求解器,我想通过将最昂贵的计算转移到 GPU 来加速它。理想情况下,我的代码中使用的所有数组和稀疏矩阵都应保留在 gpu 上,而 COO 格式的矩阵应直接从 gpu 上的数组构建。
从我的搜索来看,似乎有两个 python 包可能会有所帮助;pyviennacl 和 petsc4py。我有理由选择其中一个吗?
我有一个用 python 编写的流体动力学求解器,我想通过将最昂贵的计算转移到 GPU 来加速它。理想情况下,我的代码中使用的所有数组和稀疏矩阵都应保留在 gpu 上,而 COO 格式的矩阵应直接从 gpu 上的数组构建。
从我的搜索来看,似乎有两个 python 包可能会有所帮助;pyviennacl 和 petsc4py。我有理由选择其中一个吗?
我发现pycuda作为 python 中 cuda 的包装器特别有用。如果您对构建更复杂的框架感兴趣,元编程部分尤其有用。这是一个成熟的包,有一个活跃的邮件列表,开发者提供了非常有用的建议。
正如@nluigi 所建议的,Pycuda 是在 python 中处理 cuda 的更 Pythonic 的方式之一。
如果您愿意在 python 中调用 C/C++ 代码,那么还有CUSP:
Cusp 是一个基于 Thrust 的稀疏线性代数和图计算库。Cusp 为操作稀疏矩阵和求解稀疏线性系统提供了一个灵活的高级接口。
这是一个我发现用户友好的模板库,你可以用它来完成一些繁重的任务。前段时间我同时使用 pycuda 和 CUSP 作为 Navier-Stokes 的 GPU 求解器。
还有其他库我引用了两个:
scikit-cuda 为作为 NVIDIA CUDA 编程工具包的一部分分发的 CUDA 设备/运行时、CUBLAS、CUFFT 和 CUSOLVER 库中的许多函数提供 Python 接口,以及在 CULA Dense Toolkit 中选择函数的接口。提供了与 C 对应的低级包装函数和与 NumPy 和 Scipy 相当的高级函数。
PyCULA 为 python 提供了一个高效简单的 CUDA GPU 环境。PyCULA 通过将基于驱动程序的 PyCUDA 的强大功能与 nVidia 的运行时库以及最重要的是在单一环境中的 CULA GPU-LAPACK 功能相结合来实现这一壮举。我们的目标是在不限制最终用户的情况下隐藏并发症。