2

我有数千个 SYCL 内核要执行。cl::sycl::buffer一旦这些内核中的每一个都完成了,我需要在所述内核写入的内容上执行一个函数。

我知道实现这一目标的方法是:

  • 通过使用 RAII;必要的全局内存在销毁时被复制回主机cl::sycl::buffer
  • 通过构建主机cl::sycl::accessor(使用cl::sycl::access::target::host_buffer

这两种方法都是同步和阻塞的。cl::sycl::queue在将内核提交到内核完成后立即执行的a 时,是否可以附加异步回调/延续?或者更好的是,C++2a 协程可以实现相同的功能吗?如果没有,是否为 SYCL 计划了这样的功能?

4

1 回答 1

3

在 SYCL 队列中附加回调或在主机上执行的功能并未适用于 SYCL 1.2.1。

目前正在讨论一些提议,以将该功能带入标准的下一个版本,但一切仍属于 SYCL 小组内部。

同时,如果您使用 ComputeCpp,您可以使用host_handler扩展,它允许您根据设备的依赖关系在主机上执行 lambda。开源编译器还没有我见过的那个特性。

于 2019-12-11T11:30:33.053 回答