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

Concurrency 并发内核执行和OpenCL设备分区,concurrency,opencl,Concurrency,Opencl,最近我需要做一些实验,需要在AMD硬件上运行多个不同的内核。但是在开始编码之前我有几个问题,因此我真的需要你的帮助 首先,我不太确定AMD硬件是否能够在一台设备上支持并发内核执行。因为当我提到OpenCL规范时,他们说命令队列可以按顺序创建,也可以按顺序创建。但我不是说“无序”是指“并发执行”。有人知道这方面的信息吗?我的硬件是AMD APU A8 3870k。如果此处理器不支持,是否有其他AMD产品支持 第二,我知道有一个扩展“装置裂变”,可以用来将一个装置分成两个装置。这现在只在CPU上工作

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

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

第二,我知道有一个扩展“装置裂变”,可以用来将一个装置分成两个装置。这现在只在CPU上工作。但是在OpenCL规范中,我看到了一些东西,例如“clcreatesubdevice”,它也被用来将一个设备分成两个?所以我的问题是这两种技术之间有什么区别吗?我的理解是:设备裂变只能在CPU上使用,clcreatesubdevice可以在CPU和GPU上使用。对吗


谢谢你的回复

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

但是,以一半的速度并行运行它们,而不是以全速顺序运行它们,这有什么意义呢?如果这样做,可能会降低整体性能


如果其中一个GPU的资源不足,我建议您使用更多的GPU设备(或GPU+CPU)。优化也可能是一个不错的选择。但对于真实场景而言,拆分从来都不是一个好的选择,仅用于学术目的或测试。

clCreateSubDevice
是设备拆分。您的OpenCL实现(无论是AMD的GPU实现还是CPU实现)和设备都必须支持它(我认为OpenCL 1.2是强制性的)。但是CPU和GPU的功能是相同的(好吧,这就是OpenCL的全部内容,对许多不同的硬件设备使用相同的接口)。如果你有一个内存带宽受限的内核和另一个计算受限的内核呢?