我们目前正在尝试优化至少有12个变量的系统。这些变量的总合并超过10亿。这不是深度学习或机器学习或Tensorflow或其他任何东西,而是对时间序列数据的任意计算。
我们已经用Python实现了代码,并成功在CPU上运行了代码。我们还尝试了多处理,该方法也很好用,但由于计算需要数周时间,因此我们需要更快的计算速度。我们拥有一个由6个AMD GPU组成的GPU系统。我们想在此GPU系统上运行代码,但不知道如何执行。
我的问题是:
我们了解到需要为GPU计算调整代码,但我们不知道该怎么做。
PS:如果需要,我可以添加更多信息。我试图使帖子尽可能简单以避免冲突。
答案 0 :(得分:2)
至少有两个选项可以使用GPU加快计算速度:
但是我通常不建议从一开始就在GPU上运行代码。 GPU上的计算并不总是更快。取决于它们的复杂程度以及您在CPU和GPU上的实现情况。如果您按照下面的列表进行操作,则可以很好地了解期望的结果。
如果您的代码是纯Python(列表,浮点,for循环等),则可以通过使用矢量化的Numpy代码看到巨大的加速(最高可达100倍)。这也是找出如何实现GPU代码的重要步骤,因为矢量化Numpy中的计算将具有类似的方案。 GPU在可以并行化的小任务上表现更好。
一旦您有了一个经过优化的Numpy示例,就可以尝试使用Numba来获得GPU加速方面的第一印象。对于简单的情况,您可以修饰Numpy函数以在GPU上运行。如果您的问题可以并行化/向量化,那么与Numpy代码相比,您可以期望将速度提高100到500。
到目前为止,您可能还没有为GPU编写任何OpenCL C代码,但仍然可以在其上运行代码。但是,如果您的问题太复杂,则必须编写自定义代码并使用PyOpenCL运行它。与良好的Numpy代码相比,预期的提速也是100到500。
重要的一点是,GPU只有在正确使用且仅针对某些问题的情况下才具有强大的功能。
如果您有代码的小示例,请随时发布。
要说的另一件事是,CUDA通常比OpenCL更易于使用。有更多的库,更多的示例,更多的文档,更多的支持。 Nvidia从一开始就很好地支持了OpenCL,在这方面做得很好。我通常采用开放标准,但是当事情变得商业化时,我们很快就转向了CUDA和Nvidia硬件。