是否可以将异步 callback/continuation 附加到 SYCL 内核?
Is it possible to attach an asynchronous callback/continuation to a SYCL kernel?
我收集了数千个要执行的 SYCL 内核。一旦这些内核中的每一个都完成,我需要在由所述内核写入的 cl::sycl::buffer
上执行一个函数。
我知道的实现此目的的方法是:
- 通过使用 RAII;
cl::sycl::buffer
销毁后,必要的全局内存将被复制回主机
- 通过构建主机
cl::sycl::accessor
(with cl::sycl::access::target::host_buffer
)
这两种方法都是同步和阻塞的。是否可以在将内核提交到内核完成后立即执行的 cl::sycl::queue
时附加异步 callback/continuation?或者更好的是,是否可以使用 C++2a 协程实现相同的功能?如果没有,是否为 SYCL 计划了这样的功能?
附加回调或从 SYCL 队列在主机上执行的功能并未在 SYCL 1.2.1 中实现。
目前正在讨论将该功能纳入下一版本标准的一些提议,但一切仍属于 SYCL 小组内部。
同时,如果您使用 ComputeCpp,则可以使用 host_handler 扩展,它允许您根据设备的依赖项在主机上执行 lambda。
开源编译器还没有我见过的那个功能。
我收集了数千个要执行的 SYCL 内核。一旦这些内核中的每一个都完成,我需要在由所述内核写入的 cl::sycl::buffer
上执行一个函数。
我知道的实现此目的的方法是:
- 通过使用 RAII;
cl::sycl::buffer
销毁后,必要的全局内存将被复制回主机
- 通过构建主机
cl::sycl::accessor
(withcl::sycl::access::target::host_buffer
)
这两种方法都是同步和阻塞的。是否可以在将内核提交到内核完成后立即执行的 cl::sycl::queue
时附加异步 callback/continuation?或者更好的是,是否可以使用 C++2a 协程实现相同的功能?如果没有,是否为 SYCL 计划了这样的功能?
附加回调或从 SYCL 队列在主机上执行的功能并未在 SYCL 1.2.1 中实现。
目前正在讨论将该功能纳入下一版本标准的一些提议,但一切仍属于 SYCL 小组内部。
同时,如果您使用 ComputeCpp,则可以使用 host_handler 扩展,它允许您根据设备的依赖项在主机上执行 lambda。 开源编译器还没有我见过的那个功能。