并发内核执行和OpenCL设备分区

时间:2013-05-15 07:59:48

标签: concurrency opencl

最近我需要做一些需要在AMD硬件上运行多个不同内核的实验。但在开始编码之前我有几个问题因此我真的需要你的帮助。

首先,我不太确定AMD HW是否可以在一台设备上支持并发内核执行。因为当我参考OpenCL规范时,他们说命令队列可以按顺序和无序创建。但我不是“无序”意味着“并发执行”。有没有人知道这方面的信息?我的硬件是AMD APU A8 3870k。如果此处理器不支持,任何其他AMD产品都支持吗?

其次,我知道有一个扩展“设备裂变”,可以用来将一个设备分成两个设备。这仅适用于CPU。但是在OpenCL规范中,我看到了一些东西,即“clcreatesubdevice”,它还用于将一个设备分成两个?所以我的问题是这两种技术有什么区别吗?我的理解是:设备裂变只能在CPU上使用,clcreatesubdevice可以在CPU和GPU上使用。这是对的吗?

感谢您的回复!

1 个答案:

答案 0 :(得分:0)

真正的并发内核不是必需的功能,并且给驱动程序开发人员带来了很多麻烦。据我所知,如果没有子设备拆分,AMD不支持此功能。正如你所提到的,“乱序”不是cuncurrent,只是队列的乱序执行。

但是,以一半的速度并行运行它们而不是以全速顺序运行它们有什么意义呢?如果你以这种方式这样做,你可能会失去整体表现。

如果您的某个GPU资源不足,我建议您使用更多GPU设备(或GPU + CPU)。优化也是一个不错的选择。但是分裂对于真实场景来说绝不是一个好的选择,仅用于学术目的或测试。