更新:我根据链接元数据中的有用建议重构了这个问题。
我是 Python 的 NumPy 和 SciPy(仅此而已)的重度用户,多年来我可以在笔记本电脑上运行任何我需要的东西。
现在,我将开始编写包含 100 到 10,000 个元素的模拟,这些元素远远超出了单个 CPU 在合理时间内所能完成的工作。
添加内核的一种潜在经济的方法是使用 PC 并添加 CUDA GPU,而CuPy是将繁重的计算转移到它的一种方法:
CuPy 的接口与 NumPy 和 SciPy 高度兼容;在大多数情况下,它可以用作替代品。您需要做的就是在 Python 代码中将 numpy 和 scipy 替换为cupy和cupyx.scipy。CuPy基础教程对于学习使用 CuPy 的第一步很有用。CuPy 支持各种方法、索引、数据类型、广播等。此比较表显示了 NumPy / SciPy API 及其对应的 CuPy 实现的列表。
我将购买一个适中的 CUDA GPU 并开始尝试如何做到这一点。
我不是开发人员,我看到(至少)两个潜在问题可能导致我陷入困境并最终陷入困境并失败:
- 我购买了错误的 CUDA GPU,速度提升很小或根本不存在。
- 我错误地配置了我的数组(例如快轴与慢轴)或严重依赖索引数组,并且花费了大量时间在 CPU、内存和 GPU 之间移动数据,以至于加速很少或根本不存在。
问题:我将尝试将我的一些 scipy/numpy 计算转移到一个新的 GPU 上,并希望得到一些具体的建议来帮助我避免由于上述因素而导致的令人失望的结果。
虽然这类似于“最佳实践”问题,但我还没有任何经验,因此我更容易提出和支持一个关于不做错什么的问题,而不是关于如何把所有事情都做对的问题。
在不久的将来会有一个单独但相关的问题,我将在其中包含一个特定的示例和 NumPy 中的一些替代实现,希望那时我能从这里的一些帮助中受益,并启动并运行一个适度的 GPU。
背景和相关职位:
从这个答案到CUDA 和 Python 进行数值积分和求解微分方程:
- 铜; 和
- scikit-cuda。
环顾四周,我发现了 CudaPyInt,它使用PyCuda
从这个答案到在开发时在 CPU 上编写代码,在运行时在 GPU 上运行 - 哪种方法?:
ArrayFire有一个C++ API和一个Python API。您可以在多个后端之间切换,包括 CPU、CUDA 和 OpenCL。它还将为您处理内存移动和内核融合。
还