0

我们有跨设备分配主要任务的多设备系统。每个子任务包括:

  1. 入队写缓冲区
  2. 入队内核
  3. 排队读取缓冲区

所有队列都是异步的,命令队列是有序的。我们分配一个回调到cl_event队列读取缓冲区,我们确定主要任务是否完成。如果不是,我们再安排一个子任务到队列中。

不幸的是,我们发现让主机的 CPU 保持忙碌并不允许它处理来自其他设备 (GPU) 的回调,并且大多数时候它们不参与工作。这个想法是从我们用来完成主要任务的设备列表中排除主机的 cpu。

4

1 回答 1

2

您应该研究设备裂变。如果您的平台支持此功能,您将能够创建具有任意 cpu 内核组合的 opencl 设备。在这里查看详细信息。此扩展将允许您为主机应用程序保存一些内核。

我喜欢它允许您创建共享不同级别高速缓存的子设备的方式。您可能对 CL_DEVICE_PARTITION_BY_NAMES_EXT 感兴趣(在页面上搜索“CL_DEVICE_PARTITION_BY NAMES_EXT”)。

于 2012-04-19T10:59:17.257 回答