【问题标题】:How to running a simple for loop in parallel on GPU如何在 GPU 上并行运行一个简单的 for 循环
【发布时间】:2021-05-16 14:47:11
【问题描述】:

我想做一些非常基本的事情。我有一段不是我写的代码,它执行一些处理,在单个数据集上运行大约需要 10 分钟。我有 50,000 个数据集,所以我想利用许多 GPU 来并行运行它。我熟悉如何在 CPU 上执行此操作,但我不知道如何在 GPU 上执行此操作。我看到了许多关于如何通过 numba 使用 GPU 提高某些函数调用速度的示例,尽管我找不到如何在 gpu 上运行 for 循环。这可能吗?本质上我有 50,000 个图像名称,我想要一个循环读取所有图像并执行处理,然后将提取的信息写入 .csv

【问题讨论】:

  • 然后将提取的信息写入 .csv 您无法在任何现有 API 中直接从 GPU 执行此操作。
  • 我认为这可能是个问题。那你建议我怎么做?我可以像我看到的 GPU 通常执行的那样只使用 GPU 来加速函数调用吗?
  • 本质上我有 50,000 个图像名称,...通过所有图像并执行处理,您是在谈论更改文件系统中的图像名称吗?如果是这样,那是 CPU 唯一的任务。如果您想对可以并行化的图像进行任何类型的处理,您可以使用PyCudaPyOpenCL 直接与对应的 API 进行交互(取决于您的 GPU 驱动程序)。在这两种“语言”中,您通常会编写一个函数,该函数在许多线程中执行,每个线程都有一个唯一的线程 ID。
  • 您好,我不是在谈论更改图像系统的名称。我正在对每组图像执行许多操作、注册、分割等。因此,每个图像现在运行大约需要 10 分钟。这对于 50k 图像显然是不可行的。所以你建议通过 GPU 加速函数调用,而不是像我建议的那样并行化外部 for 循环?

标签: python gpu numba


【解决方案1】:

我正在参加超级计算机挑战赛。

根据我的经验,使用 GPU 提升 CPU 代码是一项复杂的工作。 但是有一些关于 python 的项目/库可能会对你有所帮助。

CuPy: Easy to convert numpy code to CUDA code
Numba: JIT compiler which you mention above
PyCUDA: run C CUDA coda in Python
RAPDIS: cuXX which developed by Nvidia

简单 -> 困难:CuPy/RAPDIS > Numba > PyCUDA

综上所述,如果你使用的是numpy,你应该学习CuPy,或者尝试在RAPDIS Library(ex:cuGraph)中找到类似的图形处理方法。 PyCUDA 是这种情况下最困难的选择。

只是一些建议,加快速度!

【讨论】:

    猜你喜欢
    • 2021-08-21
    • 1970-01-01
    • 2018-04-08
    • 2012-04-04
    • 2016-05-27
    • 2020-11-08
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    相关资源
    最近更新 更多