首页 > 解决方案 > 是否可以同时在两个或多个 GPU 上运行 Metal 代码?

问题描述

我有一些用 Metal 编写的并行计算任务。我想知道我是否可以同时在两个或多个 GPU 上运行金属内核?

标签: metal

解决方案


是的。

例如,如果您在具有独立 GPU 和集成 GPU 的 Mac 上,则调用MTLCopyAllDevices(). 如果您有一个或多个外部 GPU 连接到您的 Mac,则相同。

为了在每个 GPU 上运行相同的计算内核,您需要创建单独的资源和管道状态对象,因为这些对象都隶属于单个MTLDevice. 关于编码和排队工作的其他一切都保持不变。

除非在有限的情况下(即当 GPU 占用同一个对等组时),您不能直接在 GPU 之间复制资源。但是,您可以使用 aMTLBlitCommandEncoder通过系统总线复制共享或托管资源。

如果跨设备的计算命令之间存在依赖关系,您可能需要使用事件来显式同步它们。


推荐阅读