首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多GPU程序是如何与Vulkan一起工作的?

多GPU程序是如何与Vulkan一起工作的?
EN

Stack Overflow用户
提问于 2015-08-05 13:20:42
回答 2查看 11.8K关注 0票数 21

在Vulkan中使用多GPU是否类似于创建多个命令队列,然后在它们之间划分命令缓冲区?

有两个问题:

  1. 在OpenGL中,我们使用GLEW获取函数。有超过一个GPU,每个GPU都有自己的驱动程序。我们怎么用Vulkan的?
  2. 框架的一部分是用GPU生成的吗?其他GPU和其他GPU一起使用英特尔GPU渲染UI和AMD,或者Nvidia GPU在labtops中渲染游戏屏幕吗?还是会在GPU中生成一个帧&另一个GPU中的下一个帧?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-01 21:48:03

更新最新的信息,现在Vulkan已经存在了。

有两种多GPU设置:其中多个GPU是一些SLI样式设置的一部分,而不是它们的那种。Vulkan支持两者,并在同一台计算机中支持它们。也就是说,您可以有两个NVIDIA GPU是SLI编辑在一起,英特尔嵌入式GPU,和Vulkan可以与他们所有。

非SLI设置

在Vulkan中,有一种叫做Vulkan实例的东西。这表示基本Vulkan系统本身;单个设备将自己注册到实例中。实际上,Vulkan实例系统是由Vulkan SDK实现的。

物理设备表示实现GPU接口的特定硬件。公开Vulkan实现的每一块硬件都是通过向实例系统注册其物理设备来实现的。您可以查询哪些物理设备可用,以及它们的一些基本属性(它们的名称、提供多少内存等)。

然后为使用的物理设备创建逻辑设备。逻辑设备是你在Vulkan做事情的方式。它们有队列、命令缓冲区等,每个逻辑设备是分开的.主要是。

现在,您可以绕过整个“实例”事件,手动加载设备。但你真的不应该。至少,除非你处在发展的尽头。对于日常调试来说,Vulkan层太关键了,所以不能选择退出。

在Vulkan 1.1中有一些核心机制,允许各个设备能够将一些信息传递给其他设备。在1.1中,只能在物理设备之间共享某些类型的信息(即栅栏和信号量,即使这样,也只能通过同步文件在Linux上共享)。虽然这些API可以提供在两个物理设备之间共享数据的机制,但目前对大多数数据共享形式的限制是,这两个物理设备必须具有匹配的UUID(因此是相同的物理设备)。

SLI设置

处理SLI的工作由两个Vulcan1.0扩展覆盖:KHR_device_groupKHR_device_group_creation。前者用于处理Vulkan中的“设备组”,而后者是用于创建设备分组设备的实例扩展。这两者都是Vulkan 1.1的核心。

这样做的想法是,SLI聚合被公开为一个VkDevice,它是由多个VkPhysicalDevice创建的,每个内部物理设备都是一个“子设备”。您可以查询子设备和有关它们的一些属性。内存分配是特定于特定子设备的.资源对象(缓冲区和图像)并不是特定于子设备的,但它们可以与不同子设备上的不同内存分配相关联。

命令缓冲区和队列并不是特定于子设备的;当您在队列上执行CB时,驱动程序会确定它将在哪个子设备上运行,并使用正确的GPU指针填充使用映像/缓冲区的描述符,这些图像/缓冲区已绑定到这些特定的子设备上。

交替帧渲染就是简单地呈现一个子设备在一个帧上生成的图像,然后在另一个帧上呈现来自另一个子设备的图像。分割帧呈现是通过一种更复杂的机制来处理的,在这种机制中,您可以为呈现命令的目标图像在设备之间定义内存。你甚至可以用像样的图片来做这件事。

票数 30
EN

Stack Overflow用户

发布于 2020-05-01 11:13:50

设备组是要走的路。查看vulkan规范中的文档。Vulkan处理所有分配给其他GPU(当它们通过sli/交火连接时)。您所需要做的就是告诉vulkan如何完成调度(例如,在GPU上分派一个帧,在另一个GPU上分派下一个帧)。如果您需要进行计算工作,则需要分别处理每个GPU。请找一个参考链接:https://www.ea.com/seed/news/khronos-munich-2018-halcyon-vulkan

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31833776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档