我对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 感谢。
答案 0 :(得分:2)
您不能重复使用这样的命令缓冲区。
您必须创建一个新的命令缓冲区,创建一个新的计算命令编码器,对命令进行编码,结束编码,然后每次循环都提交命令缓冲区。