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

Opencl 是否可以将异步回调/延续附加到SYCL内核?,opencl,gpgpu,sycl,Opencl,Gpgpu,Sycl,我有数千个SYCL内核要执行。一旦这些内核中的每一个都完成了,我需要在所述内核写入的cl::sycl::buffer上执行一个函数 我知道实现这一目标的方法有: 利用RAII;销毁cl::sycl::buffer 通过构造主机cl::sycl::accessor(使用cl::sycl::access::target::host\u缓冲区) 这两种方法都是同步和分块的。在将内核提交到cl::sycl::queue时,是否可以附加一个异步回调/延续,该队列在内核完成后立即执行?甚至更好的是,C+

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

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

  • 利用RAII;销毁
    cl::sycl::buffer
  • 通过构造主机
    cl::sycl::accessor
    (使用
    cl::sycl::access::target::host\u缓冲区

这两种方法都是同步和分块的。在将内核提交到
cl::sycl::queue
时,是否可以附加一个异步回调/延续,该队列在内核完成后立即执行?甚至更好的是,C++2a协同程序可以实现相同的功能吗?如果没有,这样的功能是否计划用于SYCL?

附加回调或从SYCL队列在主机上执行的功能没有用于SYCL 1.2.1

目前正在讨论一些建议,以便将该特性引入下一版本的标准中,但所有内容都是SYCL小组内部的

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

谢谢你的回答。不幸的是,我没有使用ComputeCpp,所以现在我生成了一个线程,该线程维护并定期轮询
sycl::event
s的集合(在提交到
sycl::queue
时返回)要确定
info::event::command_execution_status
何时变为
info::event_command_status::complete
。SYCL 2020现在具有“主机任务”功能,请参阅[SYCL 2020临时规范]()的“4.11主机任务”部分。这已在DPC++中实现,这是Intel的SYCL实现。