我可以控制GPU中的特定群集吗?

时间:2013-02-11 11:18:41

标签: kernel opencl gpu

我是OpenCL的新手。例如,假设我的GPU架构是这样的:

  

多处理器数量:14

     

翘曲尺寸:32

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

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

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

3)如何提及全局ID,组ID,本地ID和所有..

用示例清楚地解释(有一些线程计数)

提前致谢.. :))

1 个答案:

答案 0 :(得分: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实现,情况可能并非如此,您可能会同时执行内核(我自己没有尝试过)。