文件: | 下载 |
许可: | 英特尔示例源代码许可协议 |
优化了…… | |
---|---|
操作系统: | Microsoft* Windows® 10(64 位) |
硬件: | 需要 GPU |
软件: (编程语言、工具、IDE、框架) | Microsoft Visual Studio* 2017、Direct3D* 12、C++ |
前提条件: | 熟悉 Visual Studio、Direct3D API、3D 图形、并行处理。 |
教程: | 使用 DirectX 3D* 12 进行并行处理 |
简介
本项目的理念是展示如何使用 Direct3D 12 在游戏中进行并行处理。本项目扩展了《使用 OpenGL* 和 Oculus* VR 中的可视化对比英特尔® 酷睿™ i5 处理器和英特尔® 酷睿™ i7 处理器》文章(参见参考部分)的结果和代码,以添加 Direct3D 12 渲染器。它还将之前的粒子系统重新实施为 Direct3D 12 计算着色器。
- 修改代码,以添加 CPU Direct3D 12 渲染器
- 迁移至 GPU
- 深入了解 CPU 和 GPU 的区别
入门指南
修改代码,以添加 CPU Direct3D* 12 渲染器
首先需要将 Direct 3D 12 “渲染器”添加至英特尔酷睿 i5 对比英特尔酷睿 i7 文章中使用的粒子系统。由于软件设计包含了渲染概念,因此可以轻松完成这项操作。第一步是定义连接渲染器的接口,然后编写一个事件循环。为了提升性能,我编写了一个自定义上传堆。接下来,查看计算着色器和实际的 Direct3D 12 渲染代码,然后讨论关于顶点缓冲区视图的问题。
迁移至 GPU
我们可以通过将渲染器从 CPU 迁移至 GPU 来提升性能。相比在各个线程之间分解处理,最好是在多个处理器:CPU 和 GPU 之间分解。
我努力确保 CPU 部分每个结构的每个字段的正确性与一致性,然后首先考虑到 GPU 计算问题可能使任务量增加两到三倍。我当即决定查找某种“助手”框架才是正确的选择,因此,我选择了 MiniEngine:DirectX 12 引擎入门套件。我将介绍我如何在本项目中安装与自定义 MiniEngine。借助 MiniEngine,之前需要使用 CPU 渲染的 500 多行代码减少为面向 GPU 的约 38 行设置代码和 31 行渲染代码(总共 69 行),我的努力终于有了回报。
GPU 渲染器包含设置和渲染代码。设置包含配置根签名、顶点输入和获取用于颜色和深度的格式。最后,我配置了图形 PSO 和视图与生产矩阵。渲染代码分为获取环境、描述过渡、使用新值更新矩阵之前清除颜色和深度以及绘制帧。
深入了解 CPU 和 GPU 的区别
为了实现最佳性能,我使用了两个粒子数据缓冲区,对其中一个进行了渲染,另一个则使用 GPU 计算更新为下一帧。我简要介绍了这一点,然后深入研究了在 GPU 上实施粒子渲染系统所需的变动,尤其是算法的区别。
参考资料
John Stone,Integrated Computing Solutions 公司,《使用 OpenGL* 和 Oculus* VR 中的可视化对比英特尔® 酷睿™ i5 处理器和英特尔® 酷睿™ i7 处理器》,https://software.intel.com/zh-cn/articles/compare-intel-core-i5-and-i7-processors-using-custom-visualization-and-vr-benchmark,2017 年。
John Stone,Integrated Computing Solutions 公司,《使用 Direct3D 12 进行并行处理》, https://software.intel.com/zh-cn/articles/parallel-processing-with-directx-3d-12,2017 年
更新日志
创建于 2018 年 3 月 20 日