OpenCL:编程gpu更像一个多线程cpu

OpenCL:编程gpu更像一个多线程cpu,opencl,Opencl,这可能是一个noob问题,但我想使用opencl来利用几十个gpu内核。几天前,当我开始搜索有关opencl编程的时候,我对工作组、工作项、内核和opencl的逻辑感到困惑。在我继续与这些员工打交道之前,以下是我的问题: 我是否可以像编写多核cpu时那样,分配一个线程,并在单个gpu计算核心(或指定核心)中运行代码?不,这不是它的工作方式。在OpenCL中,您编写了一个内核来执行单个工作项。它可以像内存拷贝一样简单,也可以从源图像读取像素,将它们混合在一起,然后将像素写入输出图像。该内核在整个工

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


我是否可以像编写多核cpu时那样,分配一个线程,并在单个gpu计算核心(或指定核心)中运行代码?

不,这不是它的工作方式。在OpenCL中,您编写了一个内核来执行单个工作项。它可以像内存拷贝一样简单,也可以从源图像读取像素,将它们混合在一起,然后将像素写入输出图像。该内核在整个工作组中执行(例如,整个输出映像)。运行时实现了这一点。它不像多线程CPU代码,每个线程做不同的事情。这更像是一个满是1000名实习生的仓库。每个人都有一个唯一的员工编号,仓库里的东西都有编号,所以你可以说“查看盒子(你的编号)和(你的编号加1000),然后把里面找到的零件放在一起,把新零件放进盒子(你的编号加2000)”。你说一次在扩音器中,1000个部件并行构建。

不,这不是它的工作原理。在OpenCL中,您编写了一个内核来执行单个工作项。它可以像内存拷贝一样简单,也可以从源图像读取像素,将它们混合在一起,然后将像素写入输出图像。该内核在整个工作组中执行(例如,整个输出映像)。运行时实现了这一点。它不像多线程CPU代码,每个线程做不同的事情。这更像是一个满是1000名实习生的仓库。每个人都有一个唯一的员工编号,仓库里的东西都有编号,所以你可以说“查看盒子(你的编号)和(你的编号加1000),然后把里面找到的零件放在一起,把新零件放进盒子(你的编号加2000)”。你说,一旦进入扩音器,1000个部件将并行制造。

“这可能是一个noob问题”,猜测是不必要的。提出你的问题,提供你认为答案是什么,以及是什么引导你得出这个结论。另外,用一个像你这样的笼统的陈述,提供一些关于你是如何在谷歌上搜索到这个的评论,你发现了什么(如果有的话),以及为什么它没有回答你的问题。所以真正的问题是关于代码的问题,提供代码作为错误的例子。我所做的搜索,都是关于工作组、工作项和内核的。基本的例子就是这些(工作组、工作项、内核),我找不到一个简单的方法来做我在问题中描述的事情。“这可能是一个noob问题”,推测是不必要的。问你的问题,提供你认为答案是什么,以及什么导致你得出这个结论。另外,用一个像你这样的笼统的陈述,提供一些关于你是如何在谷歌上搜索到这个的评论,你发现了什么(如果有的话),以及为什么它没有回答你的问题。所以真正的问题是关于代码的问题,提供代码作为错误的例子。我所做的搜索,都是关于工作组、工作项和内核的。基本的例子都是考虑到这些(工作组、工作项、内核),我找不到一个简单的方法来做我在问题中描述的事情。所以,opencl不允许做我描述的事情,即你在例子中描述的是使用gpu的唯一方法(通过opencl)?没错。您可以强制API执行类似于单线程的执行,但使用GPU的效率非常低。您能提供一个非常基本和简单的示例来说明如何执行吗?(如果可能,使用“正常/正确”方式的示例相同?)只需分派单个项目工作组。但是就像我说的那样,它是没有效率的。所以,opencl不允许做我描述的事情,即你在例子中描述的是使用gpu(通过opencl)的唯一方法?是的。您可以强制API执行类似于单线程的执行,但使用GPU的效率非常低。您能提供一个非常基本和简单的示例来说明如何执行吗?(如果可能,使用“正常/正确”方式的示例相同?)只需分派单个项目工作组。但就像我说的那样,这是没有效率的。