您的位置:首页 > 娱乐 > 八卦 > discuzq官网_山东莱芜疫情最新消息2022_2023年免费进入b站_市场推广的方法和规划

discuzq官网_山东莱芜疫情最新消息2022_2023年免费进入b站_市场推广的方法和规划

2025/4/26 17:38:16 来源:https://blog.csdn.net/m0_72813396/article/details/146512278  浏览:    关键词:discuzq官网_山东莱芜疫情最新消息2022_2023年免费进入b站_市场推广的方法和规划
discuzq官网_山东莱芜疫情最新消息2022_2023年免费进入b站_市场推广的方法和规划

平铺资源

对于平铺资源,在设备分页队列上运行的异步视频内存管理器服务是不够的。 具体而言,对于平铺资源,我们希望将页表更新与呈现一起排队,并确保在绘制操作之间同步应用更新。

例如,给定应用程序的以下 API 调用序列:

绘图 
更新平铺映射
绘图 

我们希望确保 Draw 在处于旧状态的页表下执行,而 Draw 执行时,页表处于新状态。 对于指定非覆盖标志的 更新平铺映射 操作,可以稍微放宽此同步,但必须支持高性能同步更新。 为了支持高性能排队更新,我们需要能够提前生成分页操作并将其排队到上下文,并在相关呈现上下文达到特定点后等待执行这些操作 (例如:在上) 的 Draw 之后。

这意味着分页操作需要在图形处理单元后面排队 (GPU) 等待,该等待将由特定呈现上下文发出信号。 因此,它们无法直接排队到共享系统上下文,因为这意味着一个应用程序可能会阻止对系统中的其他人执行分页操作。

理论上,在当今基于数据包的计划中,我们可以在设备分页队列中实现操作的等待部分,监视等待,并在满足等待条件后将分页操作提交到共享系统上下文。 但是,随着我们超越基于数据包的计划,转向硬件计划,我们希望确保可以将 GPU 到 GPU 同步基元用于互锁操作,以确保获得最佳性能。

为了解决此问题,我们引入了按上下文分页配套上下文的概念。 分页配套上下文是在首次调用 UpdateGpuVirtualAddress 时延迟创建的,用于需要互锁同步的所有页表更新。 UpdateGpuVirtualAddress 采用 GPU 监视的围栏对象和特定的围栏值作为参数。 配套上下文在此受监视围栏上等待页表更新,然后递增受监视围栏对象并发出信号。 这允许呈现上下文与配套上下文紧密同步。

使用配套上下文的页表更新如下所示

在上下文创建期间,视频内存管理器针对内核模式驱动程序选择的引擎延迟创建配套上下文 (DXGKARG_CREATECONTEXT。PagingCompanionNodeId) 。

配套上下文在每进程特权地址空间中执行。 地址空间是特权的,因为它由内核控制,并且只允许直接内存访问 (DMA) 内核中生成的缓冲区执行。 除此之外,这是一个普通的 GPU 虚拟地址空间,不需要任何特殊的硬件虚拟地址空间特权支持。

为简单起见,我们选择了按进程特权的 GPU 虚拟地址空间,而不是重新使用系统分页进程 GPU 虚拟地址空间。 鉴于映射和取消映射平铺资源很常见,我们需要在地址空间中永久映射应用程序页表,以避免频繁映射/取消映射它们。 此外,我们稍后将详细介绍,还需要以永久的方式映射所有平铺池。 在系统地址空间中执行这些永久映射会引入不必要的额外复杂性。

初始化每进程特权 GPU 虚拟地址空间,以便进程 GPU 页表通过地址空间可见,使 update 命令能够使用 GPU 更新各种页表条目。 此外,进程创建的所有平铺池也会映射到地址空间中。

随行上下文更新页表条目的方式有点特别,需要一些说明。 当 映射 操作排队等待在共享系统上下文中执行时,视频内存管理器知道要映射到的物理地址,并且这些物理地址可以直接显示在关联的分页缓冲区中。 在这种情况下使用 UpdatePageTable 分页操作,视频内存管理器保证在某些特定页面上的分页操作将完成,然后再将这些页面重新用于其他目的。

但是,对于配套上下文中的页表的同步更新,操作会更加困难。 视频内存管理器知道在生成更新操作时引用的平铺池的物理页面,但是,鉴于这些操作将在任意长时间的 GPU 等待后排队, (应用甚至可能死锁,永远不会发出) 信号,视频内存管理器不知道在实际执行分页操作时平铺池的物理页面是什么,并且视频内存管理器无法将平铺池保留在该位置很长一段时间。

若要解决此问题,我们基本上需要排队分页操作,并在物理地址更改后对其进行修补,或者需要后期绑定更新中使用的实际地址,视频内存管理器会执行后者的操作。

若要解决此问题,视频内存管理器执行两项操作。 首先,它将 GPU 虚拟地址映射到属于进程特权地址空间内某个进程的所有平铺池元素。 当平铺池在内存中移动时,视频内存管理器会自动使用与任何其他分配类型相同的简单机制,使这些 GPU 虚拟地址指向平铺池的正确位置。

为了更新平铺资源页表条目,视频内存管理器引入了新的 CopyPageTableEntry 分页操作,该操作将页表条目从平铺池虚拟地址复制到平铺资源虚拟地址。 由于当平铺池在内存中移动时,视频内存管理器会使平铺池虚拟地址保持最新,因此,无论生成命令与实际执行命令之间经过多少时间,都保证使用平铺池的当前有效物理位置执行复制操作。

请注意,只要存在引用特定平铺池的排队页表更新,视频内存管理器就会将平铺池保留在应用程序的驻留要求中,无论用户模式驱动程序或应用程序说什么,都保证平铺池虚拟地址在执行更新操作时有效。

此机制如下所示:

使用CPU_VIRTUAL页表更新模式更新 GPU 上的 GPU 虚拟地址


在支持 DXGK_PAGETABLEUPDATE_CPU_VIRTUAL 页表更新模式的 GPU 上,将不使用 CopyPageTableEntries 操作。 这些是集成的 GPU,不使用分页缓冲区。 视频内存管理器会将更新操作推迟到正确的时间,并使用 UpdatePageTable 操作来设置页表。

此方法的缺点是 UpdatePageTable 操作与呈现操作不并行。 优点是驱动程序不需要实现对分页缓冲区的支持,也不需要立即实现 UpdatePageTable 。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com