2013-02-11 60 views
0

我是OpenCL的新手。例如,假设我的GPU架构是这样的:我可以控制GPU中的特定群集吗?

数多处理器:14

经尺寸:32

现在我想要做的任务并行。我有14个流式多处理器

1)我可以同时运行14个不同的任务吗?

2)如果是这样,怎么办?

3)如何提的全球ID,组ID,本地ID和所有..

与例子清楚地解释(有一些线程数)提前

谢谢.. :)

回答

0

GPU不像CPU。 CPU可以在“任务并行”模式下运行,这意味着它们可以在每个内核上运行不同的代码。然而,GPU是“数据并行”并且是SIMT(单指令多线程)。

这一切意味着您一次只能运行一个内核,但该内核将在所有内核上执行,并且每个内核将同时对一部分数据进行操作。

This question和它接受的答案有很多描述SIMT的信息,并且有很多有用的信息,我不会在这里复制。

您可以在GPU上获得任务并行性的唯一方法是实际上拥有多个GPU /设备。

技术上,OpenCL API支持在使用clCreateCommandQueue创建命令队列时,使用CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE一次执行多个内核。不能保证内核是同时执行的,但是,在这种模式下,我猜GPU所有的OpenCL实现都会一个接一个地执行每个内核。如果您使用基于CPU的OpenCL实现,则可能不是这种情况,您可能会同时执行内核(我自己没有尝试过)。

+0

谢谢你的回答..有意义..那么clEnqueueTask在执行模式的顺序中有什么用处?在我的感知中,至少它们将与minmum时间间隙同时运行,但不是按顺序执行。所以我们可以在GPU上做Task Parallelism ..也可以检查这个链接(在底部任务并行图中).. http://www.fixstars.com/en/opencl/book/OpenCLProgrammingBook/calling-the-kernel/ – Fakruddeen 2013-02-15 10:26:25

+0

@Fakruddeen如果硬件支持任务并行性,那么OpenCL可能会同时执行内核,但目前设计的GPU硬件无法做到这一点。 – prunge 2013-02-15 20:48:40

相关问题