在 SYCL 中实现软实时任务的推荐方法是什么?
是不断地向命令队列和调用等待(或 get_access<cl::sycl::access::mode::read_write>() )重新提交操作以触发内核执行和缓冲区传输?
似乎应该有一种方法:A)构建命令队列 B)然后只更改输入缓冲区中的内容 C)触发执行 D)从输出缓冲区收集结果 E)跳回 B)
这不会每次都重新构建命令队列。这是这样做的吗?
我可以建议的最接近的是使用“双缓冲”,它使用两个 SYCL 缓冲区并在它们之间交换数据,但目前没有办法将命令缓冲区表示为一个单一的东西。
对于一些示例,我建议查看ComputeCpp 示例 GitHub 存储库中的演示。
特别是 Game of Life 和 Nbody 演示使用类 DoubleBuf来交换数据进出处理。
或者,您可以查看Fluid 演示的更新循环,它使用 SYCL 以更标准的方式处理数据,更新时启动多个内核,每次运行更新循环时都会创建缓冲区。