Apple 开发人员文档中有许多资源展示了如何使用 Swift 中的 Metal 进行机器学习推断,或者更具体地说,如何调用神经网络的 Metal Performance Shader 图来预测某些结果。然而,所有这些示例(例如下面链接的示例)都是从 Swift 开始的。
func encodeInferenceCase(sourceTensorData: MPSGraphTensorData) -> MPSGraphTensorData {
let fetch = graph.run(with: gCommandQueue,
feeds: [sourcePlaceholderTensor: sourceTensorData],
targetTensors: targetInferenceTensors,
targetOperations: targetInferenceOps)
return fetch[targetInferenceTensors[0]]!
}
当已经在 Metal Shader 中时,如何调用像上面这样的图形?这样你就不用付出在CPU和GPU之间来回切换的成本。其背景是光线追踪,并使用模型来帮助预测全局照明。 NVidia 更复杂的版本链接如下。
https://research.nvidia.com/publication/2021-06_real-time-neural-radiance-caching-path-tracing
答案是您无法从
Metal
着色器调用 Metal Performance Shader。但假设您已经有一个 Metal
设备对象、命令队列和命令缓冲区,则只需要两行。
import MetalPerformanceShaders
let shader = MPSImageSobel(device: device)
shader.encode(commandBuffer: commandBuffer,
sourceTexture: inputTexture,
destinationTexture: outputTexture)
如果
MTLTexture
已经在 GPU 上,则 CPU 开销应该是最小的。