Metal Compute - 排队一个已经排队的命令缓冲区
Metal Compute - enqueue an already enqueued command buffer
我是 Metal 的新手,我正在试验它的计算功能。
我在 macOS 上用 Swift 3 编写了以下代码:
repeat
{
metalCommandBuffer.enqueue()
metalCommandBuffer.commit()
metalCommandBuffer.waitUntilCompleted()
copy variable back to CPU
}
while {check the variable == 0}
我想执行一个计算内核,将变量复制回主机并检查是否满足某些条件。如果是,则继续执行内核,直到否则。
但是我收到以下错误:
error 'enqueue an already enqueued command buffer'
我试过只在循环内提交和 waitUntilCompleted 但后来我得到:
error 'commit an already committed command buffer'
我有一点 CUDA 知识,因此我可能有点误用 Metal。
谢谢
你不能重复使用那样的命令缓冲区。
您必须创建一个新的命令缓冲区,创建一个新的计算命令编码器,对命令进行编码,结束编码,然后在每次循环中提交命令缓冲区。
我是 Metal 的新手,我正在试验它的计算功能。 我在 macOS 上用 Swift 3 编写了以下代码:
repeat
{
metalCommandBuffer.enqueue()
metalCommandBuffer.commit()
metalCommandBuffer.waitUntilCompleted()
copy variable back to CPU
}
while {check the variable == 0}
我想执行一个计算内核,将变量复制回主机并检查是否满足某些条件。如果是,则继续执行内核,直到否则。
但是我收到以下错误:
error 'enqueue an already enqueued command buffer'
我试过只在循环内提交和 waitUntilCompleted 但后来我得到:
error 'commit an already committed command buffer'
我有一点 CUDA 知识,因此我可能有点误用 Metal。
谢谢
你不能重复使用那样的命令缓冲区。
您必须创建一个新的命令缓冲区,创建一个新的计算命令编码器,对命令进行编码,结束编码,然后在每次循环中提交命令缓冲区。