是否可以将异步回调/继续附加到SYCL内核?

时间:2019-12-09 12:02:04

标签: opencl gpgpu sycl

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

我知道实现此目的的方法是:

  • 使用RAII; cl::sycl::buffer
  • 被破坏时,必需的全局内存将被复制回主机
  • 通过构建主机cl::sycl::accessor(使用cl::sycl::access::target::host_buffer

这两种方法都是同步的和阻塞的。将内核提交到cl::sycl::queue并在内核完成后立即执行时,是否可以附加异步回调/继续?甚至更好的是,可以用C ++ 2a协程实现相同的功能吗?如果不是,那么SYCL是否计划使用此功能?

1 个答案:

答案 0 :(得分:2)

从SYCL队列附加回调或在主机上执行的功能未使SYCL 1.2.1切入。

目前正在讨论一些建议,以将该功能引入标准的下一版本,但是一切仍在SYCL小组内部。

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