MacOS Metal:无法从命令行应用程序捕获 GPU 帧
Posted
技术标签:
【中文标题】MacOS Metal:无法从命令行应用程序捕获 GPU 帧【英文标题】:MacOS Metal: Failing to capture GPU Frame from command line app 【发布时间】:2020-09-02 14:36:45 【问题描述】:我正在尝试在命令行应用程序中使用 MTLCaptureManager
以编程方式捕获 GPU 帧。
到目前为止,捕获管理器无法支持MTLCaptureDestinationGPUTraceDocument
目标。
我尝试使用 XCode 创建一个非常简单的复制案例:
#import <Foundation/Foundation.h>
#import <Metal/Metal.h>
int main(int argc, const char * argv[])
@autoreleasepool
id<MTLDevice> device = MTLCreateSystemDefaultDevice();
MTLCaptureManager* captureManager = [MTLCaptureManager sharedCaptureManager];
if (![captureManager supportsDestination:MTLCaptureDestinationGPUTraceDocument])
NSLog(@"********** captureManager does not support MTLCaptureDestinationGPUTraceDocument ************");
else
NSLog(@"captureManager support is fine");
return 0;
当使用 XCode 运行时,它似乎愿意工作:输出是:
2020-09-02 16:25:59.712217+0200 testMetalCapture[20095:416447] Metal GPU Frame Capture Enabled
2020-09-02 16:25:59.712503+0200 testMetalCapture[20095:416447] Metal API Validation Enabled
2020-09-02 16:26:00.669092+0200 testMetalCapture[20095:416447] captureManager support is fine
Program ended with exit code: 0
但是当我归档构建结果并从终端运行时,它会失败:
2020-09-02 16:32:57.607 testMetalCapture[20126:419837] ********** captureManager does not support MTLCaptureDestinationGPUTraceDocument ************
我可以在终端中重现任何运行时环境以使 MTLCaptureManager
正常工作吗?
(环境为 XCode 11.6 + MacOS 10.15 Catalina)
【问题讨论】:
【参考方案1】:据我了解(我找不到任何官方文档):
MTLCaptureManager
需要来自 Info.plist
的授权:MetalCaptureEnabled
应设置为 YES
。
正确的方法是将命令行应用程序与这样的 plist 捆绑在一起
这很复杂,例如见Building OSX App Bundle
我偶然发现MTLCaptureManager
在与命令行应用程序相同的目录中有Info.plist
也可以工作。
这个 Info.plist 几乎可以是空的,像这样:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>MetalCaptureEnabled</key>
<true/>
</dict>
</plist>
通过这个简单的设置,我可以运行我的测试程序(也可以运行我的真实程序)
% ./testMetalCapture
2020-10-02 15:53:08.507 testMetalCapture[28559:686864] Metal GPU Frame Capture Enabled
2020-10-02 15:53:08.523 testMetalCapture[28559:686864] captureManager support is fine
(我目前使用的是 MacOSX 10.15.6,以后可能会崩溃)
【讨论】:
以上是关于MacOS Metal:无法从命令行应用程序捕获 GPU 帧的主要内容,如果未能解决你的问题,请参考以下文章
何时在 Apple macOS 上使用 Metal 而不是 Accelerate API
markdown 从命令行界面创建可启动的macOS usb安装程序
tensorflow-macos tensorflow-metal 安装方法