您的位置:首页 > 编程语言 > C语言/C++

[C++]DirectX 12 3D游戏开发实战—第13章 学习笔记01 2019.5.10

2019-05-11 17:12 459 查看
版权声明:个人学习使用,请勿转载 https://blog.csdn.net/qq_36028073/article/details/90081240

词汇

流式操作:streaming operation 流式多处理器:streaming multiprocessor,SM
通用GPU程序设计:General Purpose GPU Programming,GPGPU Programming
数据并行算法:data-parallel algorithm 计算着色器:compute shader 模糊:blur
线程组:thread group 调度:dispatch
CUDA核心

内容

第13章 计算着色器

现代GPU可以代替CPU进行同时的大量相同计算
计算着色器可以让我们访问GPU来实现数据并行算法

学习目标

  1. 学习编写计算着色器。
  2. 对硬件处理线程组以及其中线程的方式等高级知识有一定的认识。
  3. 探究哪些Direct3D资源可以被设置为计算着色器的输入与输出。
  4. 了解各种线程ID及用法。
  5. 学习共享内存的相关知识,并知道它为什么可以优化性能。
  6. 探究如何获取更多关于GPGPU编程的细节信息。

13.1 线程与线程组

  • GPU编程过程中可将线程划分为由线程组构成的网格。一个线程运行于一个多处理器之上。对于16个多处理器的GPU,至少需要将任务分解为16个线程组,以此让每个多处理器都能充分运转。
  • 要获得更佳性能,需要将每个多处理器至少拥有2个线程组,可以让他们切换到不同的线程组进行处理。
  • 每个线程组都有一块共享内存供组内的线程访问。
  • 一个线程组中含有n,硬件会将这些线程分为多个wrap(32个线程),多处理器则会以SIMD32的方式(32个线程同时进行相同指令序列)处理wrap,每个CUDA核心都可以处理一个线程。假设GPU架构中的每个多处理器由32个CUDA核心,Direct3D中处于性能考虑,应设线程组的大小为wrap尺寸的整数倍。
  • 对于各种型号的图形硬件来说,线程数为256的线程组是一种普遍适合的初始设置,可以据此为基础,再根据具体需求尝试将其调整为其它大小,线程组中的线程数会对线程组的分派次数产生影响

Direct3D中启动线程组的方法

void ID3D12GraphicsCommandList::Dispatch(
UINT ThreadGroupCountX,
UINT ThreadGroupCountY,
UINT ThreadGroupCountZ);

若创建一个3x2=6个线程组的网格:

cmdList->Dispatch(3,2,1);

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐