【问题标题】:OpenCL: program gpu more like a multithread cpuOpenCL:程序 gpu 更像一个多线程 cpu
【发布时间】:2018-05-27 18:01:16
【问题描述】:

这可能是一个菜鸟问题,但我想使用 opencl 来利用数十个 gpu 内核。几天前,当我开始搜索 opencl 编程时,我对工作组、工作项、内核和 opencl 的逻辑感到困惑。在我继续与这个员工打交道之前,这是我的问题:

我可以像在编写多核 cpu 时一样,只分配一个带有代码的线程以在单个 gpu 计算核心(或指定的核心)中运行吗?

【问题讨论】:

  • 这可能是一个菜鸟问题”,猜测是不必要的。问你的问题,提供你认为答案是什么,以及是什么导致你得出这个结论。此外,通过像您这样的一揽子声明,提供一些评论,说明您是如何在谷歌上搜索到的,您发现了什么(如果有的话),以及为什么它没有回答您的问题。 SO 实际上是关于代码问题,提供代码作为错误示例。
  • 我进行的搜索都涉及工作组、工作项、内核。基本示例都考虑到了这些(工作组、工作项、内核),我找不到直接的方法来完成我在问题中描述的内容。

标签: opencl


【解决方案1】:

不,它不是这样工作的。在 OpenCL 中,您编写一个执行单个工作项的内核。它可能像内存副本一样简单,或者可以从源图像中读取像素,将它们混合在一起,然后将像素写入输出图像。该内核在整个工作组(例如,整个输出图像)中执行。运行时使这种情况发生。它不像多线程 CPU 代码,每个线程做不同的事情。这更像是拥有一个装满 1000 名实习生的仓库。每个人都有一个唯一的员工编号,仓库里的东西也有编号,所以你可以说“在盒子里看(你的号码)和(你的号码加 1000),然后把你在里面找到的碎片放在一起,然后把新零件在框中(您的号码加上 2000)”。你说一旦在扩音器中,1000 个零件就会并行构建。

【讨论】:

  • 所以,opencl 不允许做我描述的事情,即你在你的例子中描述的是使用 gpu 的唯一方法(通过 opencl)?
  • 没错。您可以强制 API 执行单线程执行之类的操作,但使用 GPU 的效率极低。
  • 您能否提供一个非常基本且简单的示例来说明如何执行此操作? (如果可能,使用“正常/正确”方式的相同示例?)
  • 只派遣单项工作组。但就像我说的那样,它效率不高。
猜你喜欢
  • 2017-03-11
  • 1970-01-01
  • 1970-01-01
  • 2017-12-27
  • 1970-01-01
  • 2011-05-24
  • 1970-01-01
  • 2013-09-17
  • 1970-01-01
相关资源
最近更新 更多