0

在 SYCL 中实现软实时任务的推荐方法是什么?

是不断地向命令队列和调用等待(或 get_access<cl::sycl::access::mode::read_write>() )重新提交操作以触发内核执行和缓冲区传输?

似乎应该有一种方法:A)构建命令队列 B)然后只更改输入缓冲区中的内容 C)触发执行 D)从输出缓冲区收集结果 E)跳回 B)

这不会每次都重新构建命令队列。这是这样做的吗?

4

1 回答 1

1

我可以建议的最接近的是使用“双缓冲”,它使用两个 SYCL 缓冲区并在它们之间交换数据,但目前没有办法将命令缓冲区表示为一个单一的东西。

对于一些示例,我建议查看ComputeCpp 示例 GitHub 存储库中的演示。

特别是 Game of Life 和 Nbody 演示使用类 DoubleBuf来交换数据进出处理。

或者,您可以查看Fluid 演示的更新循环,它使用 SYCL 以更标准的方式处理数据,更新时启动多个内核,每次运行更新循环时都会创建缓冲区。

于 2021-08-19T12:39:40.940 回答