如何直接从 Metal Shaders 调用 MetalPerformanceShadersGraph?

问题描述 投票:0回答:1

Apple 开发人员文档中有许多资源展示了如何使用 Swift 中的 Metal 进行机器学习推断,或者更具体地说,如何调用神经网络的 Metal Performance Shader 图来预测某些结果。然而,所有这些示例(例如下面链接的示例)都是从 Swift 开始的。

https://developer.apple.com/documentation/metalperformanceshadersgraph/training_a_neural_network_using_mps_graph

    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

neural-network shader metal raytracing
1个回答
0
投票

答案是您无法从

Metal
着色器调用 Metal Performance Shader。但假设您已经有一个
Metal
设备对象、命令队列和命令缓冲区,则只需要两行。

import MetalPerformanceShaders

let shader = MPSImageSobel(device: device)
shader.encode(commandBuffer: commandBuffer, 
          sourceTexture: inputTexture,
          destinationTexture: outputTexture)

如果

MTLTexture
已经在 GPU 上,则 CPU 开销应该是最小的。

© www.soinside.com 2019 - 2024. All rights reserved.