Metal Compute - 将已排队的命令缓冲区排入队列

时间:2017-06-21 12:20:18

标签: swift gpgpu metal

我对Metal非常陌生,我正在尝试其计算功能。 我在macOS上用Swift 3编写了以下代码:

repeat
{ 
    metalCommandBuffer.enqueue()
    metalCommandBuffer.commit()
    metalCommandBuffer.waitUntilCompleted()
    copy variable back to CPU
}
while {check the variable == 0}

我想执行计算内核,将变量复制回主机并检查是否满足某些条件。如果是,则继续执行内核,否则。

但是我收到以下错误:

  

错误'将已排队的命令缓冲区排队'

我试过在循环中调用commit和waitUntilCompleted但是后来我得到了:

  

错误'提交已提交的命令缓冲区'

我有一点CUDA知识,因此我可能会有点误用Metal 感谢。

1 个答案:

答案 0 :(得分:2)

您不能重复使用这样的命令缓冲区。

您必须创建一个新的命令缓冲区,创建一个新的计算命令编码器,对命令进行编码,结束编码,然后每次循环都提交命令缓冲区。