metal - 是否可以同时在两个或多个 GPU 上运行 Metal 代码?
问题描述
我有一些用 Metal 编写的并行计算任务。我想知道我是否可以同时在两个或多个 GPU 上运行金属内核?
解决方案
是的。
例如,如果您在具有独立 GPU 和集成 GPU 的 Mac 上,则调用MTLCopyAllDevices()
. 如果您有一个或多个外部 GPU 连接到您的 Mac,则相同。
为了在每个 GPU 上运行相同的计算内核,您需要创建单独的资源和管道状态对象,因为这些对象都隶属于单个MTLDevice
. 关于编码和排队工作的其他一切都保持不变。
除非在有限的情况下(即当 GPU 占用同一个对等组时),您不能直接在 GPU 之间复制资源。但是,您可以使用 aMTLBlitCommandEncoder
通过系统总线复制共享或托管资源。
如果跨设备的计算命令之间存在依赖关系,您可能需要使用事件来显式同步它们。
推荐阅读
- nlp - 如何解释对齐工具 fast_align 中的对齐分数?
- javascript - 如何使用带有 api 密钥的 axios get/post 请求?
- world-of-warcraft - 艾泽拉斯核:未创建游戏对象(GUID: , Entry: )。建议的坐标无效
- javascript - 将存储在 Cloud Storage 中的 Apple Wallet .pkpass 文件从 Firebase Cloud Functions 更新到设备
- python - 如何使用 Python Boto3 获取 S3 存储桶的总数
- java - 为什么使用 completableFuture 如果任务是依赖的
- list - 计算每个用户的总记录
- java - 在 Azure 应用服务中访问 Tomcat 和 Webapp 日志
- tkinter - 如何使用函数在 Tkinter GUI 中拥有多个页面(不打开新窗口)?
- ruby-on-rails - 如何根据数量复制记录